diff --git a/audit.log b/audit.log
new file mode 100644
index 0000000..5c418af
--- /dev/null
+++ b/audit.log
@@ -0,0 +1 @@
+No known vulnerabilities found
diff --git a/conf/webpack.common.js b/conf/webpack.common.js
index 9197797..cabef37 100644
--- a/conf/webpack.common.js
+++ b/conf/webpack.common.js
@@ -20,12 +20,9 @@ module.exports = {
module: {
rules: [{
test: /\.ejs$/,
- loader: 'compile-ejs-loader',
+ loader: 'ejs-loader',
options: {
- 'htmlmin': true,
- 'htmlminOptions': {
- removeComments: true
- }
+ esModule: false
}
}]
},
diff --git a/conf/webpack.development.js b/conf/webpack.development.js
index eaae0c5..5597798 100644
--- a/conf/webpack.development.js
+++ b/conf/webpack.development.js
@@ -1,11 +1,11 @@
-const Merge = require('webpack-merge');
+const { merge } = require('webpack-merge');
const CommonConfig = require('./webpack.common.js');
const path = require('path');
-module.exports = Merge(CommonConfig, {
+module.exports = merge(CommonConfig, {
mode: 'development',
output: {
path: path.join(process.cwd(), 'dist'),
filename: '[name].js'
},
-});
\ No newline at end of file
+});
diff --git a/conf/webpack.production.js b/conf/webpack.production.js
index 8c7f96a..4376776 100644
--- a/conf/webpack.production.js
+++ b/conf/webpack.production.js
@@ -1,16 +1,8 @@
-const Merge = require('webpack-merge');
+const { merge } = require('webpack-merge');
const CommonConfig = require('./webpack.common.js');
const path = require('path');
-module.exports = Merge(CommonConfig, {
- module: {
- rules: [{
- enforce: "pre", //to check source files, not modified by other loaders (like babel-loader)
- test: /\.js$/,
- exclude: /node_modules/,
- loader: "eslint-loader"
- }]
- },
+module.exports = merge(CommonConfig, {
mode: 'production',
optimization: {
minimize: true
@@ -19,4 +11,4 @@ module.exports = Merge(CommonConfig, {
path: path.join(process.cwd(), 'dist'),
filename: '[name].min.js'
}
-});
\ No newline at end of file
+});
diff --git a/dist/embed-options.js b/dist/embed-options.js
index edd9645..5ef77cb 100644
--- a/dist/embed-options.js
+++ b/dist/embed-options.js
@@ -1,419 +1,355 @@
-/******/ (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 = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = "./index-options.js");
-/******/ })
-/************************************************************************/
-/******/ ({
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+/******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
+
+/***/ "./options/templates/checkbox.ejs"
+/*!****************************************!*\
+ !*** ./options/templates/checkbox.ejs ***!
+ \****************************************/
+(module) {
-/***/ "../node_modules/.pnpm/webpack@4.46.0_webpack-cli@3.3.12/node_modules/webpack/buildin/global.js":
-/*!******************************************************************************************************!*\
- !*** ../node_modules/.pnpm/webpack@4.46.0_webpack-cli@3.3.12/node_modules/webpack/buildin/global.js ***!
- \******************************************************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '
\\n \\n \\n ' +\n((__t = ( label )) == null ? '' : __t) +\n'\\n \\n
\\n';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/checkbox.ejs?\n}");
-eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n//# sourceURL=webpack:///../node_modules/.pnpm/webpack@4.46.0_webpack-cli@3.3.12/node_modules/webpack/buildin/global.js?");
+/***/ },
-/***/ }),
+/***/ "./options/templates/group.ejs"
+/*!*************************************!*\
+ !*** ./options/templates/group.ejs ***!
+ \*************************************/
+(module) {
+
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '\\n
\\n ' +\n__e( elementsHtml ) +\n'\\n
\\n
';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/group.ejs?\n}");
-/***/ "./ahref.js":
+/***/ },
+
+/***/ "./options/templates/radio.ejs"
+/*!*************************************!*\
+ !*** ./options/templates/radio.ejs ***!
+ \*************************************/
+(module) {
+
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '\\n ';\n if (label) { ;\n__p += '\\n
\\n ' +\n((__t = ( label )) == null ? '' : __t) +\n':\\n \\n ';\n } ;\n__p += '\\n
\\n ';\n items.forEach(function(subContext) { ;\n__p += '\\n
\\n \\n \\n ' +\n((__t = ( subContext.label )) == null ? '' : __t) +\n'\\n \\n
\\n ';\n }); ;\n__p += '\\n
\\n
';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/radio.ejs?\n}");
+
+/***/ },
+
+/***/ "./options/templates/range.ejs"
+/*!*************************************!*\
+ !*** ./options/templates/range.ejs ***!
+ \*************************************/
+(module) {
+
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '';\nwith (obj) {\n__p += '\\n
' +\n((__t = ( label )) == null ? '' : __t) +\n': \\n
\\n \\n
\\n
';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/range.ejs?\n}");
+
+/***/ },
+
+/***/ "./options/templates/select.ejs"
+/*!**************************************!*\
+ !*** ./options/templates/select.ejs ***!
+ \**************************************/
+(module) {
+
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '\\n
' +\n((__t = ( label )) == null ? '' : __t) +\n': \\n
\\n \\n ';\n items.forEach(function(subContext) { ;\n__p += '\\n ' +\n((__t = ( subContext.label )) == null ? '' : __t) +\n' \\n ';\n }); ;\n__p += '\\n \\n
\\n
';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/select.ejs?\n}");
+
+/***/ },
+
+/***/ "./options/templates/text.ejs"
+/*!************************************!*\
+ !*** ./options/templates/text.ejs ***!
+ \************************************/
+(module) {
+
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '';\nwith (obj) {\n__p += '\\n
' +\n((__t = ( label )) == null ? '' : __t) +\n': \\n
\\n \\n
\\n
';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/text.ejs?\n}");
+
+/***/ },
+
+/***/ "./ahref.js"
/*!******************!*\
!*** ./ahref.js ***!
\******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('load', function(container, href) {\n if (container && container.nodeName && typeof href === 'string') {\n var a = document.createElement('a');\n a.setAttribute('href', href);\n container.appendChild(a);\n iframely.trigger('load', a);\n }\n});\n\niframely.on('load', function(el) {\n\n if (!el && !iframely.import) { \n\n var elements = document.querySelectorAll('a[data-iframely-url]:not([data-import-uri])');\n for(var i = 0; i < elements.length; i++) {\n iframely.trigger('load', elements[i]);\n }\n }\n \n});\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'A' && (el.getAttribute('data-iframely-url') || el.getAttribute('href')) && !el.hasAttribute('data-import-uri')) {\n unfurl(el);\n }\n \n});\n\nfunction unfurl(el) {\n if (!el.getAttribute('data-iframely-url') && !el.getAttribute('href')) {\n return; // isn't valid\n }\n var src;\n\n var dataIframelyUrl = el.getAttribute('data-iframely-url');\n if (dataIframelyUrl && /^((?:https?:)?\\/\\/[^/]+)\\/\\w+/i.test(dataIframelyUrl)) {\n src = utils.getEndpoint(dataIframelyUrl, {\n v: iframely.VERSION,\n app: 1,\n theme: iframely.config.theme\n });\n } else if ((iframely.config.api_key || iframely.config.key) && iframely.CDN) {\n\n if (!el.getAttribute('href')) {\n console.warn('Iframely cannot build embeds: \"href\" attribute missing in', el);\n return;\n }\n\n src = utils.getEndpoint('/api/iframe', {\n url: el.getAttribute('href'),\n v: iframely.VERSION,\n app: 1,\n theme: iframely.config.theme\n }, iframely.SUPPORTED_QUERY_STRING);\n } else {\n console.warn('Iframely cannot build embeds: api key is required as query-string of embed.js');\n }\n\n if (!src) {\n el.removeAttribute('data-iframely-url'); \n } else {\n\n var iframe = document.createElement('iframe');\n\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allow', 'autoplay *; encrypted-media *; ch-prefers-color-scheme *');\n\n if (el.hasAttribute('data-img')) {\n iframe.setAttribute('data-img', el.getAttribute('data-img'));\n }\n\n var isLazy = el.hasAttribute('data-lazy') || el.hasAttribute('data-img') || /&lazy=1/.test(src) || iframely.config.lazy;\n\n // support restoring failed links by its text\n var text = el.textContent || el.innerText;\n \n if (text && text !== '') {\n iframe.textContent = text;\n } \n\n var wrapper = utils.getIframeWrapper(el, true);\n \n if (wrapper) {\n\n // Delete all in aspect wrapper.\n while (wrapper.aspectWrapper.lastChild) {\n wrapper.aspectWrapper.removeChild(wrapper.aspectWrapper.lastChild);\n }\n\n } else {\n wrapper = utils.addDefaultWrappers(el);\n\n var parentNode = el.parentNode;\n parentNode.removeChild(el);\n }\n\n wrapper.aspectWrapper.appendChild(iframe);\n\n if (isLazy) {\n \n // send to lazy iframe flow\n iframe.setAttribute('data-iframely-url', src);\n iframely.trigger('load', iframe);\n\n } else {\n\n iframe.setAttribute('src', src);\n iframely.trigger('iframe-ready', iframe);\t\t\t\n }\n\n\n }\n\n\n}\n\n//# sourceURL=webpack:///./ahref.js?");
+eval("{var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('load', function(container, href) {\n if (container && container.nodeName && typeof href === 'string') {\n var a = document.createElement('a');\n a.setAttribute('href', href);\n container.appendChild(a);\n iframely.trigger('load', a);\n }\n});\n\niframely.on('load', function(el) {\n\n if (!el && !iframely.import) { \n\n var elements = document.querySelectorAll('a[data-iframely-url]:not([data-import-uri])');\n for(var i = 0; i < elements.length; i++) {\n iframely.trigger('load', elements[i]);\n }\n }\n \n});\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'A' && (el.getAttribute('data-iframely-url') || el.getAttribute('href')) && !el.hasAttribute('data-import-uri')) {\n unfurl(el);\n }\n \n});\n\nfunction unfurl(el) {\n if (!el.getAttribute('data-iframely-url') && !el.getAttribute('href')) {\n return; // isn't valid\n }\n var src;\n\n var dataIframelyUrl = el.getAttribute('data-iframely-url');\n if (dataIframelyUrl && /^((?:https?:)?\\/\\/[^/]+)\\/\\w+/i.test(dataIframelyUrl)) {\n src = utils.getEndpoint(dataIframelyUrl, {\n v: iframely.VERSION,\n app: 1,\n theme: iframely.config.theme\n });\n } else if ((iframely.config.api_key || iframely.config.key) && iframely.CDN) {\n\n if (!el.getAttribute('href')) {\n console.warn('Iframely cannot build embeds: \"href\" attribute missing in', el);\n return;\n }\n\n src = utils.getEndpoint('/api/iframe', {\n url: el.getAttribute('href'),\n v: iframely.VERSION,\n app: 1,\n theme: iframely.config.theme\n }, iframely.SUPPORTED_QUERY_STRING);\n } else {\n console.warn('Iframely cannot build embeds: api key is required as query-string of embed.js');\n }\n\n if (!src) {\n el.removeAttribute('data-iframely-url'); \n } else {\n\n var iframe = document.createElement('iframe');\n\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allow', 'autoplay *; encrypted-media *; ch-prefers-color-scheme *');\n\n if (el.hasAttribute('data-img')) {\n iframe.setAttribute('data-img', el.getAttribute('data-img'));\n }\n\n var isLazy = el.hasAttribute('data-lazy') || el.hasAttribute('data-img') || /&lazy=1/.test(src) || iframely.config.lazy;\n\n // support restoring failed links by its text\n var text = el.textContent || el.innerText;\n \n if (text && text !== '') {\n iframe.textContent = text;\n } \n\n var wrapper = utils.getIframeWrapper(el, true);\n \n if (wrapper) {\n\n // Delete all in aspect wrapper.\n while (wrapper.aspectWrapper.lastChild) {\n wrapper.aspectWrapper.removeChild(wrapper.aspectWrapper.lastChild);\n }\n\n } else {\n wrapper = utils.addDefaultWrappers(el);\n\n var parentNode = el.parentNode;\n parentNode.removeChild(el);\n }\n\n wrapper.aspectWrapper.appendChild(iframe);\n\n if (isLazy) {\n \n // send to lazy iframe flow\n iframe.setAttribute('data-iframely-url', src);\n iframely.trigger('load', iframe);\n\n } else {\n\n iframe.setAttribute('src', src);\n iframely.trigger('iframe-ready', iframe);\t\t\t\n }\n\n\n }\n\n\n}\n\n//# sourceURL=webpack:///./ahref.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./const.js":
+/***/ "./const.js"
/*!******************!*\
!*** ./const.js ***!
\******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.VERSION = 1;\n\niframely.ASPECT_WRAPPER_CLASS = 'iframely-responsive';\niframely.MAXWIDTH_WRAPPER_CLASS = 'iframely-embed';\niframely.LOADER_CLASS = 'iframely-loader';\n\niframely.DOMAINS = ['cdn.iframe.ly', 'iframe.ly', 'if-cdn.com', 'iframely.net'];\niframely.CDN = iframely.CDN || iframely.DOMAINS[0]; // default domain, user or script src can change CDN\n\niframely.BASE_RE = /^(?:https?:)?\\/\\/[^/]+/i;\niframely.ID_RE = /^(?:https?:)?\\/\\/[^/]+\\/(\\w+-?\\w+)(?:\\?.*)?$/;\niframely.SCRIPT_RE = /^(?:https?:|file:\\/)?\\/\\/[^/]+(?:.+)?\\/(?:embed|iframely)\\.js(?:[^/]+)?$/i;\niframely.CDN_RE = /^(?:https?:)?\\/\\/([^/]+)\\/(?:embed|iframely)\\.js(?:[^/]+)?$/i;\n\niframely.SUPPORTED_QUERY_STRING = ['api_key', 'key', 'iframe', 'html5', 'playerjs', 'align', 'language', 'media', 'maxwidth', 'maxheight', 'lazy', 'import', 'parent', 'shadow', 'click_to_play', 'autoplay', 'mute', 'card', 'consent', 'theme', /^_.+/];\n\niframely.SUPPORTED_THEMES = ['auto', 'light', 'dark'];\n\niframely.LAZY_IFRAME_SHOW_TIMEOUT = 3000;\niframely.LAZY_IFRAME_FADE_TIMEOUT = 200;\niframely.CLEAR_WRAPPER_STYLES_TIMEOUT = 3000;\n\niframely.RECOVER_HREFS_ON_CANCEL = false;\n\niframely.SHADOW = 'iframely-shadow';\n\n//# sourceURL=webpack:///./const.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.VERSION = 1;\n\niframely.ASPECT_WRAPPER_CLASS = 'iframely-responsive';\niframely.MAXWIDTH_WRAPPER_CLASS = 'iframely-embed';\niframely.LOADER_CLASS = 'iframely-loader';\n\niframely.DOMAINS = ['cdn.iframe.ly', 'iframe.ly', 'if-cdn.com', 'iframely.net'];\niframely.CDN = iframely.CDN || iframely.DOMAINS[0]; // default domain, user or script src can change CDN\n\niframely.BASE_RE = /^(?:https?:)?\\/\\/[^/]+/i;\niframely.ID_RE = /^(?:https?:)?\\/\\/[^/]+\\/(\\w+-?\\w+)(?:\\?.*)?$/;\niframely.SCRIPT_RE = /^(?:https?:|file:\\/)?\\/\\/[^/]+(?:.+)?\\/(?:embed|iframely)\\.js(?:[^/]+)?$/i;\niframely.CDN_RE = /^(?:https?:)?\\/\\/([^/]+)\\/(?:embed|iframely)\\.js(?:[^/]+)?$/i;\n\niframely.SUPPORTED_QUERY_STRING = ['api_key', 'key', 'iframe', 'html5', 'playerjs', 'align', 'language', 'media', 'maxwidth', 'maxheight', 'lazy', 'import', 'parent', 'shadow', 'click_to_play', 'autoplay', 'mute', 'card', 'consent', 'theme', /^_.+/];\n\niframely.SUPPORTED_THEMES = ['auto', 'light', 'dark'];\n\niframely.LAZY_IFRAME_SHOW_TIMEOUT = 3000;\niframely.LAZY_IFRAME_FADE_TIMEOUT = 200;\niframely.CLEAR_WRAPPER_STYLES_TIMEOUT = 3000;\n\niframely.RECOVER_HREFS_ON_CANCEL = false;\n\niframely.SHADOW = 'iframely-shadow';\n\n//# sourceURL=webpack:///./const.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./deprecated.js":
+/***/ "./deprecated.js"
/*!***********************!*\
!*** ./deprecated.js ***!
\***********************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// deprecated. Helper function only, for the reverse compatibility.\niframely.widgets = iframely.widgets || {};\niframely.widgets.load = iframely.load;\n\nif (!iframely.events) {\n iframely.events = {};\n iframely.events.on = iframely.on;\n iframely.events.trigger = iframely.trigger;\n}\n\niframely.on('cancel', function(url, parentNode, text, nextSibling) {\n\n if (iframely.RECOVER_HREFS_ON_CANCEL && !text) {\n text = url;\n }\n\n if (url && parentNode && text && text !== '') {\n var a = document.createElement('a');\n a.setAttribute('href', url);\n a.setAttribute('target', '_blank');\n a.setAttribute('rel', 'noopener');\n a.textContent = text;\n if (nextSibling) {\n parentNode.insertBefore(a, nextSibling);\n } else {\n parentNode.appendChild(a);\n }\n }\n});\n\n//# sourceURL=webpack:///./deprecated.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// deprecated. Helper function only, for the reverse compatibility.\niframely.widgets = iframely.widgets || {};\niframely.widgets.load = iframely.load;\n\nif (!iframely.events) {\n iframely.events = {};\n iframely.events.on = iframely.on;\n iframely.events.trigger = iframely.trigger;\n}\n\niframely.on('cancel', function(url, parentNode, text, nextSibling) {\n\n if (iframely.RECOVER_HREFS_ON_CANCEL && !text) {\n text = url;\n }\n\n if (url && parentNode && text && text !== '') {\n var a = document.createElement('a');\n a.setAttribute('href', url);\n a.setAttribute('target', '_blank');\n a.setAttribute('rel', 'noopener');\n a.textContent = text;\n if (nextSibling) {\n parentNode.insertBefore(a, nextSibling);\n } else {\n parentNode.appendChild(a);\n }\n }\n});\n\n//# sourceURL=webpack:///./deprecated.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./dom-ready.js":
+/***/ "./dom-ready.js"
/*!**********************!*\
!*** ./dom-ready.js ***!
\**********************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("// TODO: rename core.js to ready.js?\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar DOMReady = function(f) {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n // Run always (in case of async script).\n setTimeout(f, 0);\n }\n document['addEventListener'] ? document['addEventListener']('DOMContentLoaded', f) : window.attachEvent('onload', f);\n};\n\nDOMReady(function() {\n\n // Called each time on script load\n if (typeof iframely.config.autorun === 'undefined' || iframely.config.autorun !== false) {\n iframely.trigger('load');\n }\n});\n\n\n//# sourceURL=webpack:///./dom-ready.js?");
+eval("{// TODO: rename core.js to ready.js?\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar DOMReady = function(f) {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n // Run always (in case of async script).\n setTimeout(f, 0);\n }\n document['addEventListener'] ? document['addEventListener']('DOMContentLoaded', f) : window.attachEvent('onload', f);\n};\n\nDOMReady(function() {\n\n // Called each time on script load\n if (typeof iframely.config.autorun === 'undefined' || iframely.config.autorun !== false) {\n iframely.trigger('load');\n }\n});\n\n\n//# sourceURL=webpack:///./dom-ready.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./events.js":
+/***/ "./events.js"
/*!*******************!*\
!*** ./events.js ***!
\*******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("/* WEBPACK VAR INJECTION */(function(global) {var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar nextTick = (function(window, prefixes, i, fnc) {\n while (!fnc && i < prefixes.length) {\n fnc = window[prefixes[i++] + 'equestAnimationFrame'];\n }\n return (fnc && fnc.bind(window)) || window.setImmediate || function(fnc) {window.setTimeout(fnc, 0);};\n})(typeof window !== 'undefined' ? window : global, 'r webkitR mozR msR oR'.split(' '), 0);\n\nvar callbacksStack = {};\niframely.on = function(event, cb) {\n var events = callbacksStack[event] = callbacksStack[event] || [];\n events.push(cb);\n};\n\nfunction trigger(event, async, args) {\n var events = callbacksStack[event] || [];\n events.forEach(function(cb) {\n if (async) {\n nextTick(function() {\n cb.apply(iframely, args);\n });\n } else {\n cb.apply(iframely, args);\n }\n });\n\n if (event === 'init') {\n // everything inited, let's clear the callstack, just in case\n // TODO: not good.\n callbacksStack[event] = [];\n }\n}\n\niframely.trigger = function(event) {\n var args = Array.prototype.slice.call(arguments, 1);\n trigger(event, false, args);\n};\n\niframely.triggerAsync = function(event) {\n var args = Array.prototype.slice.call(arguments, 1);\n trigger(event, true, args);\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/.pnpm/webpack@4.46.0_webpack-cli@3.3.12/node_modules/webpack/buildin/global.js */ \"../node_modules/.pnpm/webpack@4.46.0_webpack-cli@3.3.12/node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./events.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar nextTick = (function(window, prefixes, i, fnc) {\n while (!fnc && i < prefixes.length) {\n fnc = window[prefixes[i++] + 'equestAnimationFrame'];\n }\n return (fnc && fnc.bind(window)) || window.setImmediate || function(fnc) {window.setTimeout(fnc, 0);};\n})(typeof window !== 'undefined' ? window : __webpack_require__.g, 'r webkitR mozR msR oR'.split(' '), 0);\n\nvar callbacksStack = {};\niframely.on = function(event, cb) {\n var events = callbacksStack[event] = callbacksStack[event] || [];\n events.push(cb);\n};\n\nfunction trigger(event, async, args) {\n var events = callbacksStack[event] || [];\n events.forEach(function(cb) {\n if (async) {\n nextTick(function() {\n cb.apply(iframely, args);\n });\n } else {\n cb.apply(iframely, args);\n }\n });\n\n if (event === 'init') {\n // everything inited, let's clear the callstack, just in case\n // TODO: not good.\n callbacksStack[event] = [];\n }\n}\n\niframely.trigger = function(event) {\n var args = Array.prototype.slice.call(arguments, 1);\n trigger(event, false, args);\n};\n\niframely.triggerAsync = function(event) {\n var args = Array.prototype.slice.call(arguments, 1);\n trigger(event, true, args);\n};\n\n//# sourceURL=webpack:///./events.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./iframely.js":
+/***/ "./iframely.js"
/*!*********************!*\
!*** ./iframely.js ***!
\*********************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+(module) {
-eval("var iframely = window.iframely = window.iframely || {};\niframely.config = iframely.config || {};\n\nmodule.exports = iframely;\n\n//# sourceURL=webpack:///./iframely.js?");
+eval("{var iframely = window.iframely = window.iframely || {};\niframely.config = iframely.config || {};\n\nmodule.exports = iframely;\n\n//# sourceURL=webpack:///./iframely.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./import.js":
+/***/ "./import.js"
/*!*******************!*\
!*** ./import.js ***!
\*******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// widgetsCache is used from inside import doc for js callbacks and custom features\nvar widgetsCache = {};\n\niframely.on('load', function(el) {\n\n // load once, if import is not in process and only if query-string from script src has not disabled import\n if (!el && iframely.config.import !== false \n && isImportAble()\n && !iframely.import) {\n\n var elements = document.querySelectorAll('a[data-iframely-url]:not([data-import-uri])');\n if (elements.length > 1) {\n makeImportAPICall(elements);\n }\n }\n\n});\n\niframely.on('load', function(widget, importOptions) {\n\n if (widget && widget.uri && (widget.html || widget.cancel)) {\n\n var els = widgetsCache[widget.uri];\n // alternatively, could as well do querySelectorAll('a[data-iframely-url][data-import=\"' + template.getAttribute('data-uri') + '\"')\n\n if (els) {\n for (var i = 0; i < els.length; i++) {\n loadImportWidget(widget, els[i], importOptions);\n }\n }\n\n delete widgetsCache[widget.uri];\n }\n});\n\nfunction makeImportAPICall(elements) {\n var script = utils.createScript();\n\n var uris = [];\n var ids = [];\n \n var import_options = null; // will be populated from first element; or will remain as null if no params in elements...\n\n // couple helper functions first\n\n function pushElement(uri, el) {\n if (!widgetsCache[uri]) {\n widgetsCache[uri] = [];\n }\n\n widgetsCache[uri].push(el);\n }\n\n function queueElement(el) {\n var src = el.getAttribute('data-iframely-url');\n\n var mId = src.match(iframely.ID_RE);\n var id = mId && mId[1];\n\n var options = utils.parseQueryString(src, iframely.SUPPORTED_QUERY_STRING.concat('url'));\n\n var url = options.url; // can be undefined for IDs\n delete options.url;\n\n // skip import on import=0, playerjs=1\n var skipImport = options.import === '0' || options.import === 'false' \n || options.playerjs === '1' || options.playerjs === 'true';\n\n // or if link's query-string params or CDN are different from the others\n if (!skipImport) {\n var mBase = src.match(iframely.BASE_RE);\n options.CDN = mBase && mBase[0]; // will fall back to iframely.CDN in getEndpoint('/import...' ...)\n\n // set import options from the first el in import\n // that includes api keys \n if (!import_options) {\n import_options = options;\n\n // else check that this el's options are the same as the first one's in import\n } else if (JSON.stringify(options, Object.keys(options).sort()) \n !== JSON.stringify(import_options, Object.keys(import_options).sort())) {\n\n skipImport = true;\n }\n }\n\n\n if (skipImport) {\n // Usual build if no uri and app=1s.\n iframely.trigger('load', el);\n\n } else if (id) {\n el.setAttribute('data-import-uri', id);\n if (ids.indexOf(id) === -1) {\n ids.push(id);\n }\n pushElement(id, el);\n\n } else {\n\n if (!url) {\n url = el.getAttribute('href');\n }\n\n var key = import_options.key || import_options.api_key || iframely.config.api_key || iframely.config.key;\n\n if (key && url) {\n\n el.setAttribute('data-import-uri', url);\n if (uris.indexOf(url) === -1) {\n uris.push(url);\n }\n pushElement(url, el);\n } else {\n // Usual build if no uri.\n iframely.trigger('load', el);\n }\n }\n }\n\n\n // start actual filling up of import request\n\n for(var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (!el.getAttribute('data-import-uri') && el.hasAttribute('data-iframely-url')) {\n queueElement(el);\n }\n }\n\n if ((uris.length > 0 || ids.length > 0)) {\n\n import_options = import_options || {};\n import_options.touch = iframely.isTouch();\n import_options.flash = hasFlash();\n import_options.app = 1;\n // Do not override imports theme if global theme not set.\n if (iframely.config.theme) {\n import_options.theme = iframely.config.theme;\n }\n\n if (uris.length > 0) {\n import_options.uri = uris;\n }\n\n if (ids.length > 0) {\n import_options.ids = ids.join('&');\n }\n\n import_options.v = iframely.VERSION;\n\n script.src = utils.getEndpoint('/api/import/v2', import_options, iframely.SUPPORTED_QUERY_STRING);\n\n script.onerror = function() {\n // Error loading import. No import this time.\n importReady();\n };\n\n document.head.appendChild(script);\n iframely.import = script;\n\n } else {\n importReady();\n iframely.trigger('load');\n }\n}\n\niframely.buildImportWidgets = function(importOptions) {\n\n iframely.trigger('import-loaded', importOptions);\n\n importOptions.widgets.forEach(function(widget) {\n iframely.trigger('load', widget, importOptions);\n });\n\n importReady();\n};\n\nfunction loadImportWidget(widgetOptions, el, importOptions) {\n\n var needCancelWidget = widgetOptions.cancel;\n var shadow = widgetOptions.shadow;\n var hasRenderedEvent = widgetOptions.renderEvent;\n\n var wrapper = utils.getIframeWrapper(el, true);\n var widget;\n\n if (needCancelWidget) {\n widget = utils.getWidget(el);\n\n iframely.cancelWidget(widget || {\n maxWidthWrapper: el,\n iframe: el,\n url: el.getAttribute('href') \n });\n\n } else {\n\n widget = document.createElement('div');\n widget.innerHTML = widgetOptions.html;\n \n var parent, replacedEl;\n\n if (wrapper && !hasRenderedEvent) {\n // Inline widget will replace 'aspectWrapper' but keep 'maxWidthWrapper' as 'iframely-embed' to fix centering, etc.\n // If has rendered event - keep wrapper and remove attrs later by event.\n parent = wrapper.aspectWrapper.parentNode;\n replacedEl = wrapper.aspectWrapper;\n\n // Clear custom attributes.\n wrapper.maxWidthWrapper.removeAttribute('style');\n } else {\n // No wrapper or keep wrapper for later removal.\n parent = el.parentNode;\n replacedEl = el;\n }\n\n if (shadow) {\n\n var shadowContainer = document.createElement('div');\n var shadowRoot = shadowContainer.attachShadow({mode: 'open'});\n shadowRoot.appendChild(widget);\n\n var shadowWidgetOptions = {\n shadowRoot: shadowRoot,\n shadowContainer: shadowContainer,\n container: parent,\n context: widgetOptions.context,\n stylesIds: widgetOptions.stylesIds,\n stylesDict: importOptions.commonShadowStyles\n };\n \n iframely.trigger('import-shadow-widget-before-render', shadowWidgetOptions);\n \n parent.insertBefore(shadowContainer, replacedEl);\n\n iframely.trigger('import-shadow-widget-after-render', shadowWidgetOptions);\n \n } else {\n\n parent.insertBefore(widget, replacedEl);\n\n exec_body_scripts(widget);\n }\n\n parent.removeChild(replacedEl);\n\n if (hasRenderedEvent) {\n setTimeout(function() {\n clearWrapperStylesAndClass(parent);\n }, iframely.CLEAR_WRAPPER_STYLES_TIMEOUT);\n }\n }\n}\n\n\nfunction importReady() {\n\n delete iframely.import;\n\n // clean up all, let other loaders have a go\n var failed_elements = document.querySelectorAll('a[data-iframely-url][data-import-uri]');\n for(var i = 0; i < failed_elements.length; i++) {\n failed_elements[i].removeAttribute('data-import-uri');\n iframely.trigger('load', failed_elements[i]);\n }\n}\n\niframely.isTouch = function() {\n return 'ontouchstart' in window // works on most browsers\n || navigator.maxTouchPoints; // works on IE10/11 and Surface\n};\n\nfunction hasFlash() {\n\n var _hasFlash = false;\n\n try {\n var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');\n if (fo) {\n _hasFlash = true;\n } else {\n _hasFlash = false;\n }\n } catch (e) {\n if (navigator.mimeTypes\n && navigator.mimeTypes['application/x-shockwave-flash'] != undefined\n && navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {\n _hasFlash = true;\n } else {\n _hasFlash = false;\n }\n }\n\n return _hasFlash;\n}\n\nfunction isImportAble() {\n\n return document.head.attachShadow\n && document.location // Prevent `Cannot read properties of null (reading 'protocol')` for sandbox iframes.\n && (iframely.debug || document.location.protocol === 'http:' || document.location.protocol === 'https:') // Skip import on file:///\n && !iframely.config.playerjs && !iframely.config.lazy;\n // && !navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n // TODO: test in Firefox 63\n}\n\nfunction clearWrapperStylesAndClass(el) {\n var aspectWrapper = el;\n var parents = 0;\n while(aspectWrapper \n && (!aspectWrapper.getAttribute('class')\n || aspectWrapper.getAttribute('class').split(' ').indexOf(iframely.ASPECT_WRAPPER_CLASS) === -1)) {\n\n aspectWrapper = aspectWrapper.parentNode;\n parents++;\n if (parents > 4) {\n // Do not search further 4 parents.\n aspectWrapper = null;\n }\n }\n\n var maxWidthWrapper = aspectWrapper && aspectWrapper.parentNode;\n if (maxWidthWrapper \n && maxWidthWrapper.getAttribute('class')\n && maxWidthWrapper.getAttribute('class').split(' ').indexOf(iframely.MAXWIDTH_WRAPPER_CLASS) > -1) {\n\n // Remove wrapper specific data. Leave only 'iframely-embed' parent class.\n aspectWrapper.removeAttribute('style');\n aspectWrapper.removeAttribute('class');\n maxWidthWrapper.removeAttribute('style');\n }\n}\n\niframely.on('import-widget-ready', clearWrapperStylesAndClass);\n\n// used in server templates\n\nif (!iframely.addEventListener) {\n iframely.addEventListener = function(elem, type, eventHandle) {\n if (!elem) { return; }\n if ( elem.addEventListener ) {\n elem.addEventListener( type, eventHandle, false );\n } else if ( elem.attachEvent ) {\n elem.attachEvent( 'on' + type, eventHandle );\n } else {\n elem['on' + type] = eventHandle;\n }\n };\n}\n\nfunction exec_body_scripts(body_el) {\n function nodeName(elem, name) {\n return elem.nodeName && elem.nodeName.toUpperCase() ===\n name.toUpperCase();\n }\n\n function evalScript(elem) {\n var data = (elem.text || elem.textContent || elem.innerHTML || '' ),\n script = utils.createScript();\n\n // Copy all script attributes.\n script.type = 'text/javascript';\n for (var i = 0; i < elem.attributes.length; i++) {\n var attr = elem.attributes[i];\n script.setAttribute(attr.name, attr.value);\n }\n try {\n // doesn't work on ie...\n script.appendChild(document.createTextNode(data));\n } catch(e) {\n // IE has funky script nodes\n script.text = data;\n }\n\n body_el.appendChild(script);\n }\n\n // main section of function\n var scripts = [],\n script,\n children_nodes = body_el.childNodes,\n child,\n i;\n\n for (i = 0; children_nodes[i]; i++) {\n child = children_nodes[i];\n if (nodeName(child, 'script' ) &&\n (!child.type || child.type.toLowerCase() === 'text/javascript' || child.type.toLowerCase() === 'application/javascript')) {\n scripts.push(child);\n body_el.removeChild(child);\n } else {\n exec_body_scripts(child);\n }\n }\n\n for (i = 0; scripts[i]; i++) {\n script = scripts[i];\n if (script.parentNode) {script.parentNode.removeChild(script);}\n evalScript(scripts[i]);\n }\n}\n\n//# sourceURL=webpack:///./import.js?");
+eval("{var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// widgetsCache is used from inside import doc for js callbacks and custom features\nvar widgetsCache = {};\n\niframely.on('load', function(el) {\n\n // load once, if import is not in process and only if query-string from script src has not disabled import\n if (!el && iframely.config.import !== false \n && isImportAble()\n && !iframely.import) {\n\n var elements = document.querySelectorAll('a[data-iframely-url]:not([data-import-uri])');\n if (elements.length > 1) {\n makeImportAPICall(elements);\n }\n }\n\n});\n\niframely.on('load', function(widget, importOptions) {\n\n if (widget && widget.uri && (widget.html || widget.cancel)) {\n\n var els = widgetsCache[widget.uri];\n // alternatively, could as well do querySelectorAll('a[data-iframely-url][data-import=\"' + template.getAttribute('data-uri') + '\"')\n\n if (els) {\n for (var i = 0; i < els.length; i++) {\n loadImportWidget(widget, els[i], importOptions);\n }\n }\n\n delete widgetsCache[widget.uri];\n }\n});\n\nfunction makeImportAPICall(elements) {\n var script = utils.createScript();\n\n var uris = [];\n var ids = [];\n \n var import_options = null; // will be populated from first element; or will remain as null if no params in elements...\n\n // couple helper functions first\n\n function pushElement(uri, el) {\n if (!widgetsCache[uri]) {\n widgetsCache[uri] = [];\n }\n\n widgetsCache[uri].push(el);\n }\n\n function queueElement(el) {\n var src = el.getAttribute('data-iframely-url');\n\n var mId = src.match(iframely.ID_RE);\n var id = mId && mId[1];\n\n var options = utils.parseQueryString(src, iframely.SUPPORTED_QUERY_STRING.concat('url'));\n\n var url = options.url; // can be undefined for IDs\n delete options.url;\n\n // skip import on import=0, playerjs=1\n var skipImport = options.import === '0' || options.import === 'false' \n || options.playerjs === '1' || options.playerjs === 'true';\n\n // or if link's query-string params or CDN are different from the others\n if (!skipImport) {\n var mBase = src.match(iframely.BASE_RE);\n options.CDN = mBase && mBase[0]; // will fall back to iframely.CDN in getEndpoint('/import...' ...)\n\n // set import options from the first el in import\n // that includes api keys \n if (!import_options) {\n import_options = options;\n\n // else check that this el's options are the same as the first one's in import\n } else if (JSON.stringify(options, Object.keys(options).sort()) \n !== JSON.stringify(import_options, Object.keys(import_options).sort())) {\n\n skipImport = true;\n }\n }\n\n\n if (skipImport) {\n // Usual build if no uri and app=1s.\n iframely.trigger('load', el);\n\n } else if (id) {\n el.setAttribute('data-import-uri', id);\n if (ids.indexOf(id) === -1) {\n ids.push(id);\n }\n pushElement(id, el);\n\n } else {\n\n if (!url) {\n url = el.getAttribute('href');\n }\n\n var key = import_options.key || import_options.api_key || iframely.config.api_key || iframely.config.key;\n\n if (key && url) {\n\n el.setAttribute('data-import-uri', url);\n if (uris.indexOf(url) === -1) {\n uris.push(url);\n }\n pushElement(url, el);\n } else {\n // Usual build if no uri.\n iframely.trigger('load', el);\n }\n }\n }\n\n\n // start actual filling up of import request\n\n for(var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (!el.getAttribute('data-import-uri') && el.hasAttribute('data-iframely-url')) {\n queueElement(el);\n }\n }\n\n if ((uris.length > 0 || ids.length > 0)) {\n\n import_options = import_options || {};\n import_options.touch = iframely.isTouch();\n import_options.flash = hasFlash();\n import_options.app = 1;\n // Do not override imports theme if global theme not set.\n if (iframely.config.theme) {\n import_options.theme = iframely.config.theme;\n }\n\n if (uris.length > 0) {\n import_options.uri = uris;\n }\n\n if (ids.length > 0) {\n import_options.ids = ids.join('&');\n }\n\n import_options.v = iframely.VERSION;\n\n script.src = utils.getEndpoint('/api/import/v2', import_options, iframely.SUPPORTED_QUERY_STRING);\n\n script.onerror = function() {\n // Error loading import. No import this time.\n importReady();\n };\n\n document.head.appendChild(script);\n iframely.import = script;\n\n } else {\n importReady();\n iframely.trigger('load');\n }\n}\n\niframely.buildImportWidgets = function(importOptions) {\n\n iframely.trigger('import-loaded', importOptions);\n\n importOptions.widgets.forEach(function(widget) {\n iframely.trigger('load', widget, importOptions);\n });\n\n importReady();\n};\n\nfunction loadImportWidget(widgetOptions, el, importOptions) {\n\n var needCancelWidget = widgetOptions.cancel;\n var shadow = widgetOptions.shadow;\n var hasRenderedEvent = widgetOptions.renderEvent;\n\n var wrapper = utils.getIframeWrapper(el, true);\n var widget;\n\n if (needCancelWidget) {\n widget = utils.getWidget(el);\n\n iframely.cancelWidget(widget || {\n maxWidthWrapper: el,\n iframe: el,\n url: el.getAttribute('href') \n });\n\n } else {\n\n widget = document.createElement('div');\n widget.innerHTML = widgetOptions.html;\n \n var parent, replacedEl;\n\n if (wrapper && !hasRenderedEvent) {\n // Inline widget will replace 'aspectWrapper' but keep 'maxWidthWrapper' as 'iframely-embed' to fix centering, etc.\n // If has rendered event - keep wrapper and remove attrs later by event.\n parent = wrapper.aspectWrapper.parentNode;\n replacedEl = wrapper.aspectWrapper;\n\n // Clear custom attributes.\n wrapper.maxWidthWrapper.removeAttribute('style');\n } else {\n // No wrapper or keep wrapper for later removal.\n parent = el.parentNode;\n replacedEl = el;\n }\n\n if (shadow) {\n\n var shadowContainer = document.createElement('div');\n var shadowRoot = shadowContainer.attachShadow({mode: 'open'});\n shadowRoot.appendChild(widget);\n\n var shadowWidgetOptions = {\n shadowRoot: shadowRoot,\n shadowContainer: shadowContainer,\n container: parent,\n context: widgetOptions.context,\n stylesIds: widgetOptions.stylesIds,\n stylesDict: importOptions.commonShadowStyles\n };\n \n iframely.trigger('import-shadow-widget-before-render', shadowWidgetOptions);\n \n parent.insertBefore(shadowContainer, replacedEl);\n\n iframely.trigger('import-shadow-widget-after-render', shadowWidgetOptions);\n \n } else {\n\n parent.insertBefore(widget, replacedEl);\n\n exec_body_scripts(widget);\n }\n\n parent.removeChild(replacedEl);\n\n if (hasRenderedEvent) {\n setTimeout(function() {\n clearWrapperStylesAndClass(parent);\n }, iframely.CLEAR_WRAPPER_STYLES_TIMEOUT);\n }\n }\n}\n\n\nfunction importReady() {\n\n delete iframely.import;\n\n // clean up all, let other loaders have a go\n var failed_elements = document.querySelectorAll('a[data-iframely-url][data-import-uri]');\n for(var i = 0; i < failed_elements.length; i++) {\n failed_elements[i].removeAttribute('data-import-uri');\n iframely.trigger('load', failed_elements[i]);\n }\n}\n\niframely.isTouch = function() {\n return 'ontouchstart' in window // works on most browsers\n || navigator.maxTouchPoints; // works on IE10/11 and Surface\n};\n\nfunction hasFlash() {\n\n var _hasFlash = false;\n\n try {\n var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');\n if (fo) {\n _hasFlash = true;\n } else {\n _hasFlash = false;\n }\n } catch (e) {\n if (navigator.mimeTypes\n && navigator.mimeTypes['application/x-shockwave-flash'] != undefined\n && navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {\n _hasFlash = true;\n } else {\n _hasFlash = false;\n }\n }\n\n return _hasFlash;\n}\n\nfunction isImportAble() {\n\n return document.head.attachShadow\n && document.location // Prevent `Cannot read properties of null (reading 'protocol')` for sandbox iframes.\n && (iframely.debug || document.location.protocol === 'http:' || document.location.protocol === 'https:') // Skip import on file:///\n && !iframely.config.playerjs && !iframely.config.lazy;\n // && !navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n // TODO: test in Firefox 63\n}\n\nfunction clearWrapperStylesAndClass(el) {\n var aspectWrapper = el;\n var parents = 0;\n while(aspectWrapper \n && (!aspectWrapper.getAttribute('class')\n || aspectWrapper.getAttribute('class').split(' ').indexOf(iframely.ASPECT_WRAPPER_CLASS) === -1)) {\n\n aspectWrapper = aspectWrapper.parentNode;\n parents++;\n if (parents > 4) {\n // Do not search further 4 parents.\n aspectWrapper = null;\n }\n }\n\n var maxWidthWrapper = aspectWrapper && aspectWrapper.parentNode;\n if (maxWidthWrapper \n && maxWidthWrapper.getAttribute('class')\n && maxWidthWrapper.getAttribute('class').split(' ').indexOf(iframely.MAXWIDTH_WRAPPER_CLASS) > -1) {\n\n // Remove wrapper specific data. Leave only 'iframely-embed' parent class.\n aspectWrapper.removeAttribute('style');\n aspectWrapper.removeAttribute('class');\n maxWidthWrapper.removeAttribute('style');\n }\n}\n\niframely.on('import-widget-ready', clearWrapperStylesAndClass);\n\n// used in server templates\n\nif (!iframely.addEventListener) {\n iframely.addEventListener = function(elem, type, eventHandle) {\n if (!elem) { return; }\n if ( elem.addEventListener ) {\n elem.addEventListener( type, eventHandle, false );\n } else if ( elem.attachEvent ) {\n elem.attachEvent( 'on' + type, eventHandle );\n } else {\n elem['on' + type] = eventHandle;\n }\n };\n}\n\nfunction exec_body_scripts(body_el) {\n function nodeName(elem, name) {\n return elem.nodeName && elem.nodeName.toUpperCase() ===\n name.toUpperCase();\n }\n\n function evalScript(elem) {\n var data = (elem.text || elem.textContent || elem.innerHTML || '' ),\n script = utils.createScript();\n\n // Copy all script attributes.\n script.type = 'text/javascript';\n for (var i = 0; i < elem.attributes.length; i++) {\n var attr = elem.attributes[i];\n script.setAttribute(attr.name, attr.value);\n }\n try {\n // doesn't work on ie...\n script.appendChild(document.createTextNode(data));\n } catch(e) {\n // IE has funky script nodes\n script.text = data;\n }\n\n body_el.appendChild(script);\n }\n\n // main section of function\n var scripts = [],\n script,\n children_nodes = body_el.childNodes,\n child,\n i;\n\n for (i = 0; children_nodes[i]; i++) {\n child = children_nodes[i];\n if (nodeName(child, 'script' ) &&\n (!child.type || child.type.toLowerCase() === 'text/javascript' || child.type.toLowerCase() === 'application/javascript')) {\n scripts.push(child);\n body_el.removeChild(child);\n } else {\n exec_body_scripts(child);\n }\n }\n\n for (i = 0; scripts[i]; i++) {\n script = scripts[i];\n if (script.parentNode) {script.parentNode.removeChild(script);}\n evalScript(scripts[i]);\n }\n}\n\n//# sourceURL=webpack:///./import.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./index-options.js":
+/***/ "./index-options.js"
/*!**************************!*\
!*** ./index-options.js ***!
\**************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, exports, __webpack_require__) {
-eval("__webpack_require__(/*! ./dom-ready */ \"./dom-ready.js\");\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nif (!iframely._loaded) {\n\n iframely._loaded = true;\n\n __webpack_require__(/*! ./const */ \"./const.js\");\n __webpack_require__(/*! ./events */ \"./events.js\");\n // require('./utils'); // Loaded by other modules.\n __webpack_require__(/*! ./intersection */ \"./intersection.js\");\n __webpack_require__(/*! ./theme */ \"./theme.js\");\n __webpack_require__(/*! ./import */ \"./import.js\");\n __webpack_require__(/*! ./ahref */ \"./ahref.js\");\n __webpack_require__(/*! ./lazy-img-placeholder */ \"./lazy-img-placeholder.js\");\n __webpack_require__(/*! ./lazy-iframe */ \"./lazy-iframe.js\");\n // require('./messaging'); // Loaded by other modules.\n __webpack_require__(/*! ./widget-cancel */ \"./widget-cancel.js\");\n __webpack_require__(/*! ./widget-resize */ \"./widget-resize.js\");\n __webpack_require__(/*! ./widget-click */ \"./widget-click.js\");\n __webpack_require__(/*! ./widget-options */ \"./widget-options.js\");\n __webpack_require__(/*! ./deprecated */ \"./deprecated.js\");\n __webpack_require__(/*! ./lazy-loading-native */ \"./lazy-loading-native.js\");\n __webpack_require__(/*! ./options */ \"./options/index.js\");\n\n iframely.trigger('init');\n}\n\nexports.iframely = iframely;\n\n\n//# sourceURL=webpack:///./index-options.js?");
+eval("{__webpack_require__(/*! ./dom-ready */ \"./dom-ready.js\");\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nif (!iframely._loaded) {\n\n iframely._loaded = true;\n\n __webpack_require__(/*! ./const */ \"./const.js\");\n __webpack_require__(/*! ./events */ \"./events.js\");\n // require('./utils'); // Loaded by other modules.\n __webpack_require__(/*! ./intersection */ \"./intersection.js\");\n __webpack_require__(/*! ./theme */ \"./theme.js\");\n __webpack_require__(/*! ./import */ \"./import.js\");\n __webpack_require__(/*! ./ahref */ \"./ahref.js\");\n __webpack_require__(/*! ./lazy-img-placeholder */ \"./lazy-img-placeholder.js\");\n __webpack_require__(/*! ./lazy-iframe */ \"./lazy-iframe.js\");\n // require('./messaging'); // Loaded by other modules.\n __webpack_require__(/*! ./widget-cancel */ \"./widget-cancel.js\");\n __webpack_require__(/*! ./widget-resize */ \"./widget-resize.js\");\n __webpack_require__(/*! ./widget-click */ \"./widget-click.js\");\n __webpack_require__(/*! ./widget-options */ \"./widget-options.js\");\n __webpack_require__(/*! ./deprecated */ \"./deprecated.js\");\n __webpack_require__(/*! ./lazy-loading-native */ \"./lazy-loading-native.js\");\n __webpack_require__(/*! ./options */ \"./options/index.js\");\n\n iframely.trigger('init');\n}\n\nexports.iframely = iframely;\n\n\n//# sourceURL=webpack:///./index-options.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./intersection.js":
+/***/ "./intersection.js"
/*!*************************!*\
!*** ./intersection.js ***!
\*************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var messaging = __webpack_require__(/*! ./messaging */ \"./messaging.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar observers = {};\n\nfunction getObserver(options) {\n var optionsKey = JSON.stringify(options);\n var observer = observers[optionsKey];\n if (!observer) {\n\n observer = new IntersectionObserver(function(entries) {\n\n entries.forEach(function(entry) {\n messaging.postMessage({\n method: 'intersection',\n entry: {\n isIntersecting: entry.isIntersecting\n },\n options: options\n }, '*', entry.target.contentWindow);\n });\n\n }, getObserverOptions(options));\n\n observers[optionsKey] = observer;\n }\n return observer;\n}\n\nfunction getObserverOptions(options) {\n var result = {};\n if (options && options.threshold) {\n result.threshold = options.threshold;\n }\n if (options && options.margin) {\n result.rootMargin = options.margin + 'px ' + options.margin + 'px ' + options.margin + 'px ' + options.margin + 'px';\n }\n return result;\n}\n\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window) {\n\n iframely.on('init', function() {\n\n iframely.extendOptions({\n intersection: 1\n });\n \n });\n\n iframely.on('message', function(widget, message) {\n if (message.method === 'send-intersections' && widget.iframe) {\n\n var options = message.options;\n\n if (!options) {\n options = {\n margin: 1000\n };\n }\n\n getObserver(options).observe(widget.iframe);\n }\n });\n}\n\n\n//# sourceURL=webpack:///./intersection.js?");
+eval("{var messaging = __webpack_require__(/*! ./messaging */ \"./messaging.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar observers = {};\n\nfunction getObserver(options) {\n var optionsKey = JSON.stringify(options);\n var observer = observers[optionsKey];\n if (!observer) {\n\n observer = new IntersectionObserver(function(entries) {\n\n entries.forEach(function(entry) {\n messaging.postMessage({\n method: 'intersection',\n entry: {\n isIntersecting: entry.isIntersecting\n },\n options: options\n }, '*', entry.target.contentWindow);\n });\n\n }, getObserverOptions(options));\n\n observers[optionsKey] = observer;\n }\n return observer;\n}\n\nfunction getObserverOptions(options) {\n var result = {};\n if (options && options.threshold) {\n result.threshold = options.threshold;\n }\n if (options && options.margin) {\n result.rootMargin = options.margin + 'px ' + options.margin + 'px ' + options.margin + 'px ' + options.margin + 'px';\n }\n return result;\n}\n\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window) {\n\n iframely.on('init', function() {\n\n iframely.extendOptions({\n intersection: 1\n });\n \n });\n\n iframely.on('message', function(widget, message) {\n if (message.method === 'send-intersections' && widget.iframe) {\n\n var options = message.options;\n\n if (!options) {\n options = {\n margin: 1000\n };\n }\n\n getObserver(options).observe(widget.iframe);\n }\n });\n}\n\n\n//# sourceURL=webpack:///./intersection.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./lazy-iframe.js":
+/***/ "./lazy-iframe.js"
/*!************************!*\
!*** ./lazy-iframe.js ***!
\************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// Need 'load' handler here instead of on('init') - we load lazy iframes only when DOM ready.\niframely.on('load', function(el) { \n\n if (!el) { // initial load\n\n var elements = document.querySelectorAll('iframe[data-iframely-url]');\n for(var i = 0; i < elements.length; i++) {\n iframely.trigger('load', elements[i]);\n } \n }\n \n});\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'IFRAME'\n && el.hasAttribute('data-iframely-url')\n && !el.hasAttribute('data-img')\n && !el.getAttribute('src')) {\n\n loadLazyIframe(el);\n }\n \n});\n\n\nfunction loadLazyIframe(el) {\n\n var widget = utils.getWidget(el);\n var src = el.getAttribute('data-iframely-url');\n var dataImg = el.hasAttribute('data-img-created') || el.hasAttribute('data-img');\n var nativeLazyLoad = !dataImg && iframely.SUPPORT_IFRAME_LOADING_ATTR;\n\n if (widget && src) {\n\n var options = {\n v: iframely.VERSION,\n app: 1, // for example, will fall back to summary card if media is not longer available\n theme: iframely.config.theme\n };\n\n if (!nativeLazyLoad && iframely.config.intersection) {\n options.lazy = 1;\n }\n\n src = utils.getEndpoint(src, options);\n\n }\n\n if (nativeLazyLoad) {\n el.setAttribute('loading', 'lazy');\n }\n\n if (dataImg && iframely.SUPPORT_IFRAME_LOADING_ATTR) {\n // Disable lazy load with `data-img`.\n el.setAttribute('loading', 'edge');\n }\n\n el.setAttribute('src', src);\n el.removeAttribute('data-iframely-url');\n\n iframely.trigger('iframe-ready', el);\n}\n\n//# sourceURL=webpack:///./lazy-iframe.js?");
+eval("{var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// Need 'load' handler here instead of on('init') - we load lazy iframes only when DOM ready.\niframely.on('load', function(el) { \n\n if (!el) { // initial load\n\n var elements = document.querySelectorAll('iframe[data-iframely-url]');\n for(var i = 0; i < elements.length; i++) {\n iframely.trigger('load', elements[i]);\n } \n }\n \n});\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'IFRAME'\n && el.hasAttribute('data-iframely-url')\n && !el.hasAttribute('data-img')\n && !el.getAttribute('src')) {\n\n loadLazyIframe(el);\n }\n \n});\n\n\nfunction loadLazyIframe(el) {\n\n var widget = utils.getWidget(el);\n var src = el.getAttribute('data-iframely-url');\n var dataImg = el.hasAttribute('data-img-created') || el.hasAttribute('data-img');\n var nativeLazyLoad = !dataImg && iframely.SUPPORT_IFRAME_LOADING_ATTR;\n\n if (widget && src) {\n\n var options = {\n v: iframely.VERSION,\n app: 1, // for example, will fall back to summary card if media is not longer available\n theme: iframely.config.theme\n };\n\n if (!nativeLazyLoad && iframely.config.intersection) {\n options.lazy = 1;\n }\n\n src = utils.getEndpoint(src, options);\n\n }\n\n if (nativeLazyLoad) {\n el.setAttribute('loading', 'lazy');\n }\n\n if (dataImg && iframely.SUPPORT_IFRAME_LOADING_ATTR) {\n // Disable lazy load with `data-img`.\n el.setAttribute('loading', 'edge');\n }\n\n el.setAttribute('src', src);\n el.removeAttribute('data-iframely-url');\n\n iframely.trigger('iframe-ready', el);\n}\n\n//# sourceURL=webpack:///./lazy-iframe.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./lazy-img-placeholder.js":
+/***/ "./lazy-img-placeholder.js"
/*!*********************************!*\
!*** ./lazy-img-placeholder.js ***!
\*********************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'IFRAME'\n && el.hasAttribute('data-iframely-url')\n && el.hasAttribute('data-img')\n && !el.getAttribute('src')) {\n\n var dataImg = el.getAttribute('data-img');\n\n el.removeAttribute('data-img');\n el.setAttribute('data-img-created', '');\n\n var widget = utils.getWidget(el);\n var src = el.getAttribute('data-iframely-url');\n\n addPlaceholderThumbnail(widget, src, dataImg);\n\n src = utils.addQueryString(src, {img: 1});\n el.setAttribute('data-iframely-url', src);\n\n new WaitingWidget(widget);\n\n iframely.trigger('load', el);\n\n }\n});\n\niframely.on('message', function(widget, message) {\n\n var waitingWidget;\n\n if (message.method === 'widgetRendered') {\n hidePlaceholderThumbnail(widget);\n\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.deactivate();\n }\n\n if (message.method === 'begin-waiting-widget-render') {\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.clearLoadingTimeout();\n }\n\n if (message.method === 'end-waiting-widget-render') {\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.registerLoadingTimeout();\n }\n});\n\n\nfunction addPlaceholderThumbnail(widget, href, imageUrl) {\n\n var thumbHref;\n\n if (imageUrl && /^(https?:)?\\/\\//.test(imageUrl)) {\n thumbHref = imageUrl;\n } else {\n\n // Start of image url calculation.\n \n var query = utils.parseQueryString(href);\n \n // Extract widget params to invalidate image cache.\n var _params = {};\n for(var param in query) {\n if (param.indexOf('_') === 0) {\n _params[param] = query[param];\n }\n }\n \n // need to run through getEndpoint at least to avoid file:///\n if (href.match(/\\/api\\/iframe/)) {\n thumbHref = utils.getEndpoint(href.match(/^(.+)\\/api\\/iframe/i)[1] + '/api/thumbnail', Object.assign({\n url: query.url,\n api_key: query.api_key,\n key: query.key\n }, _params));\n } else if (href.match(iframely.ID_RE)) {\n // RE copied from `iframely.ID_RE` and modified to replace path part.\n thumbHref = utils.getEndpoint(href.replace(/^((?:https?:)?\\/\\/[^/]+\\/(\\w+-?\\w+))(?:\\?.*)?$/, '$1/thumbnail'), _params);\n } else {\n return;\n }\n }\n\n // End of image url calculation.\n\n var thumb = document.createElement('div');\n // Parent div not always has ASPECT_WRAPPER_CLASS. Need explicit inline styles.\n utils.setStyles(thumb, {\n position: 'absolute',\n width: '100%',\n height: '100%',\n backgroundImage: \"url('\" + thumbHref + \"')\",\n backgroundSize: 'cover',\n backgroundPosition: 'center'\n });\n\n var iframelyLoaderDiv = document.createElement('div');\n iframelyLoaderDiv.setAttribute('class', iframely.LOADER_CLASS);\n thumb.appendChild(iframelyLoaderDiv);\n\n var paddingTop = iframely.getElementComputedStyle(widget.aspectWrapper, 'padding-top');\n var paddingBottom = iframely.getElementComputedStyle(widget.aspectWrapper, 'padding-bottom');\n\n var paddingTopMatch = paddingTop.match(/^(\\d+)px$/);\n var paddingTopInt = paddingTopMatch && parseInt(paddingTopMatch[1]);\n\n if (paddingTopInt && paddingBottom) {\n\n var thumbWrapper = document.createElement('div');\n\n utils.setStyles(thumbWrapper, {\n top: '-' + paddingTop,\n width: '100%',\n height: 0,\n position: 'relative',\n paddingBottom: paddingBottom\n }); \n\n thumbWrapper.appendChild(thumb);\n\n widget.aspectWrapper.appendChild(thumbWrapper);\n\n } else {\n\n widget.aspectWrapper.appendChild(thumb);\n }\n}\n\nfunction getNthNonTextChildNode(nth, element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n // Nop.\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n if (nth === count) {\n return el;\n }\n count++;\n }\n }\n}\n\nfunction nonTextChildCount(element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n var text = el.textContent || el.innerText;\n text = text.replace(/\\s|\\n/g, '');\n if (text) {\n // Do not skip text node with text.\n count++;\n }\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n count++;\n }\n }\n return count;\n}\n\nfunction hidePlaceholderThumbnail(widget) {\n var thumb = widget.aspectWrapper && nonTextChildCount(widget.aspectWrapper) > 1 && getNthNonTextChildNode(1, widget.aspectWrapper);\n if (thumb && thumb.nodeName === 'DIV') {\n widget.aspectWrapper.removeChild(thumb);\n }\n}\n\n//===\n\n// Working WaitingWidgets' collection.\n\nvar waitingWidgets = [];\n\nfunction findWaitingWidgetIdx(widget) {\n var i = 0;\n while(i < waitingWidgets.length && waitingWidgets[i].widget.iframe !== widget.iframe) {\n i++;\n }\n if (i < waitingWidgets.length && waitingWidgets[i].widget.iframe === widget.iframe) {\n return i;\n }\n}\n\nfunction findWaitingWidget(widget) {\n var idx = findWaitingWidgetIdx(widget);\n if (idx || idx === 0) {\n return waitingWidgets[idx];\n }\n}\n\nfunction removeWaitingWidget(widget) {\n var idx = findWaitingWidgetIdx(widget);\n if (idx || idx === 0) {\n waitingWidgets.splice(idx, 1);\n }\n}\n\n//===\n\n// WaitingWidget proto.\n\nfunction WaitingWidget(widget) {\n this.widget = widget;\n this.loadCount = 0;\n\n var iframe = widget.iframe;\n\n var that = this;\n function iframeOnLoad() {\n // Bind method to self.\n that.iframeOnLoad();\n }\n\n iframely.addEventListener(iframe, 'load', iframeOnLoad);\n\n this.registerLoadingTimeout();\n\n waitingWidgets.push(this);\n}\n\nWaitingWidget.prototype.iframeOnLoad = function() {\n\n this.loadCount++;\n\n // Skip first load of hosted widget OR timeout call.\n if (this.loadCount !== 2) {\n return;\n }\n\n this.deactivate();\n\n var that = this;\n setTimeout(function() {\n hidePlaceholderThumbnail(that.widget);\n }, iframely.LAZY_IFRAME_FADE_TIMEOUT);\n};\n\nWaitingWidget.prototype.deactivate = function() {\n this.clearLoadingTimeout();\n removeWaitingWidget(this);\n};\n\nWaitingWidget.prototype.clearLoadingTimeout = function() {\n this.timeoutId && clearTimeout(this.timeoutId);\n this.timeoutId = null;\n};\n\nWaitingWidget.prototype.registerLoadingTimeout = function() {\n if (this.timeoutId) {\n return;\n }\n var that = this;\n this.timeoutId = setTimeout(function() {\n that.iframeOnLoad();\n }, iframely.LAZY_IFRAME_SHOW_TIMEOUT);\n};\n\n//# sourceURL=webpack:///./lazy-img-placeholder.js?");
+eval("{var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'IFRAME'\n && el.hasAttribute('data-iframely-url')\n && el.hasAttribute('data-img')\n && !el.getAttribute('src')) {\n\n var dataImg = el.getAttribute('data-img');\n\n el.removeAttribute('data-img');\n el.setAttribute('data-img-created', '');\n\n var widget = utils.getWidget(el);\n var src = el.getAttribute('data-iframely-url');\n\n addPlaceholderThumbnail(widget, src, dataImg);\n\n src = utils.addQueryString(src, {img: 1});\n el.setAttribute('data-iframely-url', src);\n\n new WaitingWidget(widget);\n\n iframely.trigger('load', el);\n\n }\n});\n\niframely.on('message', function(widget, message) {\n\n var waitingWidget;\n\n if (message.method === 'widgetRendered') {\n hidePlaceholderThumbnail(widget);\n\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.deactivate();\n }\n\n if (message.method === 'begin-waiting-widget-render') {\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.clearLoadingTimeout();\n }\n\n if (message.method === 'end-waiting-widget-render') {\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.registerLoadingTimeout();\n }\n});\n\n\nfunction addPlaceholderThumbnail(widget, href, imageUrl) {\n\n var thumbHref;\n\n if (imageUrl && /^(https?:)?\\/\\//.test(imageUrl)) {\n thumbHref = imageUrl;\n } else {\n\n // Start of image url calculation.\n \n var query = utils.parseQueryString(href);\n \n // Extract widget params to invalidate image cache.\n var _params = {};\n for(var param in query) {\n if (param.indexOf('_') === 0) {\n _params[param] = query[param];\n }\n }\n\n // Force proxy `media` param.\n if (query.media) {\n _params.media = query.media;\n }\n \n // need to run through getEndpoint at least to avoid file:///\n if (href.match(/\\/api\\/iframe/)) {\n thumbHref = utils.getEndpoint(href.match(/^(.+)\\/api\\/iframe/i)[1] + '/api/thumbnail', Object.assign({\n url: query.url,\n api_key: query.api_key,\n key: query.key\n }, _params));\n } else if (href.match(iframely.ID_RE)) {\n // RE copied from `iframely.ID_RE` and modified to replace path part.\n thumbHref = utils.getEndpoint(href.replace(/^((?:https?:)?\\/\\/[^/]+\\/(\\w+-?\\w+))(?:\\?.*)?$/, '$1/thumbnail'), _params);\n } else {\n return;\n }\n }\n\n // End of image url calculation.\n\n var thumb = document.createElement('div');\n // Parent div not always has ASPECT_WRAPPER_CLASS. Need explicit inline styles.\n utils.setStyles(thumb, {\n position: 'absolute',\n width: '100%',\n height: '100%',\n backgroundImage: \"url('\" + thumbHref + \"')\",\n backgroundSize: 'cover',\n backgroundPosition: 'center'\n });\n\n var iframelyLoaderDiv = document.createElement('div');\n iframelyLoaderDiv.setAttribute('class', iframely.LOADER_CLASS);\n thumb.appendChild(iframelyLoaderDiv);\n\n var paddingTop = iframely.getElementComputedStyle(widget.aspectWrapper, 'padding-top');\n var paddingBottom = iframely.getElementComputedStyle(widget.aspectWrapper, 'padding-bottom');\n\n var paddingTopMatch = paddingTop.match(/^(\\d+)px$/);\n var paddingTopInt = paddingTopMatch && parseInt(paddingTopMatch[1]);\n\n if (paddingTopInt && paddingBottom) {\n\n var thumbWrapper = document.createElement('div');\n\n utils.setStyles(thumbWrapper, {\n top: '-' + paddingTop,\n width: '100%',\n height: 0,\n position: 'relative',\n paddingBottom: paddingBottom\n }); \n\n thumbWrapper.appendChild(thumb);\n\n widget.aspectWrapper.appendChild(thumbWrapper);\n\n } else {\n\n widget.aspectWrapper.appendChild(thumb);\n }\n}\n\nfunction getNthNonTextChildNode(nth, element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n // Nop.\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n if (nth === count) {\n return el;\n }\n count++;\n }\n }\n}\n\nfunction nonTextChildCount(element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n var text = el.textContent || el.innerText;\n text = text.replace(/\\s|\\n/g, '');\n if (text) {\n // Do not skip text node with text.\n count++;\n }\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n count++;\n }\n }\n return count;\n}\n\nfunction hidePlaceholderThumbnail(widget) {\n var thumb = widget.aspectWrapper && nonTextChildCount(widget.aspectWrapper) > 1 && getNthNonTextChildNode(1, widget.aspectWrapper);\n if (thumb && thumb.nodeName === 'DIV') {\n widget.aspectWrapper.removeChild(thumb);\n }\n}\n\n//===\n\n// Working WaitingWidgets' collection.\n\nvar waitingWidgets = [];\n\nfunction findWaitingWidgetIdx(widget) {\n var i = 0;\n while(i < waitingWidgets.length && waitingWidgets[i].widget.iframe !== widget.iframe) {\n i++;\n }\n if (i < waitingWidgets.length && waitingWidgets[i].widget.iframe === widget.iframe) {\n return i;\n }\n}\n\nfunction findWaitingWidget(widget) {\n var idx = findWaitingWidgetIdx(widget);\n if (idx || idx === 0) {\n return waitingWidgets[idx];\n }\n}\n\nfunction removeWaitingWidget(widget) {\n var idx = findWaitingWidgetIdx(widget);\n if (idx || idx === 0) {\n waitingWidgets.splice(idx, 1);\n }\n}\n\n//===\n\n// WaitingWidget proto.\n\nfunction WaitingWidget(widget) {\n this.widget = widget;\n this.loadCount = 0;\n\n var iframe = widget.iframe;\n\n var that = this;\n function iframeOnLoad() {\n // Bind method to self.\n that.iframeOnLoad();\n }\n\n iframely.addEventListener(iframe, 'load', iframeOnLoad);\n\n this.registerLoadingTimeout();\n\n waitingWidgets.push(this);\n}\n\nWaitingWidget.prototype.iframeOnLoad = function() {\n\n this.loadCount++;\n\n // Skip first load of hosted widget OR timeout call.\n if (this.loadCount !== 2) {\n return;\n }\n\n this.deactivate();\n\n var that = this;\n setTimeout(function() {\n hidePlaceholderThumbnail(that.widget);\n }, iframely.LAZY_IFRAME_FADE_TIMEOUT);\n};\n\nWaitingWidget.prototype.deactivate = function() {\n this.clearLoadingTimeout();\n removeWaitingWidget(this);\n};\n\nWaitingWidget.prototype.clearLoadingTimeout = function() {\n this.timeoutId && clearTimeout(this.timeoutId);\n this.timeoutId = null;\n};\n\nWaitingWidget.prototype.registerLoadingTimeout = function() {\n if (this.timeoutId) {\n return;\n }\n var that = this;\n this.timeoutId = setTimeout(function() {\n that.iframeOnLoad();\n }, iframely.LAZY_IFRAME_SHOW_TIMEOUT);\n};\n\n\n//# sourceURL=webpack:///./lazy-img-placeholder.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./lazy-loading-native.js":
+/***/ "./lazy-loading-native.js"
/*!********************************!*\
!*** ./lazy-loading-native.js ***!
\********************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("function getChromeVersion() { \n var raw = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n\n return raw ? parseInt(raw[2], 10) : false;\n}\nvar chromeVersion = getChromeVersion();\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\niframely.SUPPORT_IFRAME_LOADING_ATTR = chromeVersion && chromeVersion >= 77;\n\n//# sourceURL=webpack:///./lazy-loading-native.js?");
+eval("{function getChromeVersion() { \n var raw = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n\n return raw ? parseInt(raw[2], 10) : false;\n}\nvar chromeVersion = getChromeVersion();\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\niframely.SUPPORT_IFRAME_LOADING_ATTR = chromeVersion && chromeVersion >= 77;\n\n//# sourceURL=webpack:///./lazy-loading-native.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./messaging.js":
+/***/ "./messaging.js"
/*!**********************!*\
!*** ./messaging.js ***!
\**********************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\nvar utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\n\nfunction receiveMessage(callback) {\n\n function cb(e) {\n var message;\n try {\n if (typeof e.data === 'string') {\n message = JSON.parse(e.data);\n } else if (typeof e.data === 'object') {\n message = e.data;\n }\n } catch (ex) {\n if (typeof e.data === 'string') {\n var m = e.data.match(/heightxPYMx(\\d+)/);\n if (m) {\n message = {\n method: 'resize',\n height: parseInt(m[1]) + 1,\n domains: 'all'\n };\n }\n }\n }\n\n callback(e, message);\n }\n\n // browser supports window.postMessage\n if (window['postMessage']) {\n if (window['addEventListener']) {\n window[callback ? 'addEventListener' : 'removeEventListener']('message', cb, !1);\n } else {\n window[callback ? 'attachEvent' : 'detachEvent']('onmessage', cb);\n }\n }\n}\n\nfunction findIframeByContentWindow(iframes, contentWindow) {\n var foundIframe;\n for(var i = 0; i < iframes.length && !foundIframe; i++) {\n var iframe = iframes[i];\n if (iframe.contentWindow === contentWindow) {\n foundIframe = iframe;\n }\n }\n return foundIframe;\n}\n\nfunction findIframeInElement(element, options) {\n var foundIframe, iframes;\n \n if (options.src) {\n iframes = element.querySelectorAll('iframe[src*=\"' + options.src.replace(/^https?:/, '') + '\"]');\n foundIframe = findIframeByContentWindow(iframes, options.contentWindow);\n }\n\n if (!foundIframe) {\n iframes = options.domains ?\n element.querySelectorAll('iframe[src*=\"' + (options.domains || iframely.DOMAINS).join('\"], iframe[src*=\"') + '\"]')\n : element.getElementsByTagName('iframe');\n foundIframe = findIframeByContentWindow(iframes, options.contentWindow);\n }\n\n return foundIframe;\n}\n\nfunction findIframeInShadowRoots(element, options) {\n var foundIframe;\n var className = '.' + (iframely.config.shadow || iframely.SHADOW);\n var shadowRoots = element.querySelectorAll(className);\n for(var i = 0; i < shadowRoots.length && !foundIframe; i++) {\n var shadowRoot = shadowRoots[i].shadowRoot;\n if (shadowRoot) {\n foundIframe = findIframeInElement(shadowRoot, options);\n if (!foundIframe) {\n foundIframe = findIframeInShadowRoots(shadowRoot, options);\n }\n }\n }\n return foundIframe;\n}\n\n// Do not override existing.\nif (!iframely.findIframe) {\n iframely.findIframe = function(options) {\n var foundIframe = findIframeInElement(document, options);\n if (!foundIframe) {\n foundIframe = findIframeInShadowRoots(document, options);\n }\n return foundIframe;\n };\n}\n\n\nreceiveMessage(function(e, message) {\n if (message && (message.method || message.type || message.context === 'player.js')) {\n\n var foundIframe = iframely.findIframe({\n contentWindow: e.source,\n src: message.context,\n domains: message.domains !== 'all' && iframely.DOMAINS.concat(iframely.CDN)\n });\n\n if (foundIframe) {\n var widget = utils.getWidget(foundIframe);\n if (widget && message.url) {\n widget.url = message.url;\n }\n iframely.trigger('message', widget, message);\n }\n }\n \n});\n\n\nexports.postMessage = function(message, target_url, target) {\n if (window['postMessage']) {\n\n if (typeof message === 'object') {\n message.context = document.location.href;\n }\n\n message = JSON.stringify(message);\n\n target_url = target_url || '*';\n\n target = target || window.parent; // default to parent\n\n // the browser supports window.postMessage, so call it with a targetOrigin\n // set appropriately, based on the target_url parameter.\n target['postMessage'](message, target_url.replace( /([^:]+:\\/\\/[^/]+).*/, '$1'));\n }\n};\n\n//# sourceURL=webpack:///./messaging.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\nvar utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\n\nfunction receiveMessage(callback) {\n\n function cb(e) {\n var message;\n try {\n if (typeof e.data === 'string') {\n message = JSON.parse(e.data);\n } else if (typeof e.data === 'object') {\n message = e.data;\n }\n } catch (ex) {\n if (typeof e.data === 'string') {\n var m = e.data.match(/heightxPYMx(\\d+)/);\n if (m) {\n message = {\n method: 'resize',\n height: parseInt(m[1]) + 1,\n domains: 'all'\n };\n }\n }\n }\n\n callback(e, message);\n }\n\n // browser supports window.postMessage\n if (window['postMessage']) {\n if (window['addEventListener']) {\n window[callback ? 'addEventListener' : 'removeEventListener']('message', cb, !1);\n } else {\n window[callback ? 'attachEvent' : 'detachEvent']('onmessage', cb);\n }\n }\n}\n\nfunction findIframeByContentWindow(iframes, contentWindow) {\n var foundIframe;\n for(var i = 0; i < iframes.length && !foundIframe; i++) {\n var iframe = iframes[i];\n if (iframe.contentWindow === contentWindow) {\n foundIframe = iframe;\n }\n }\n return foundIframe;\n}\n\nfunction findIframeInElement(element, options) {\n var foundIframe, iframes;\n \n if (options.src) {\n iframes = element.querySelectorAll('iframe[src*=\"' + options.src.replace(/^https?:/, '') + '\"]');\n foundIframe = findIframeByContentWindow(iframes, options.contentWindow);\n }\n\n if (!foundIframe) {\n iframes = options.domains ?\n element.querySelectorAll('iframe[src*=\"' + (options.domains || iframely.DOMAINS).join('\"], iframe[src*=\"') + '\"]')\n : element.getElementsByTagName('iframe');\n foundIframe = findIframeByContentWindow(iframes, options.contentWindow);\n }\n\n return foundIframe;\n}\n\nfunction findIframeInShadowRoots(element, options) {\n var foundIframe;\n var className = '.' + (iframely.config.shadow || iframely.SHADOW);\n var shadowRoots = element.querySelectorAll(className);\n for(var i = 0; i < shadowRoots.length && !foundIframe; i++) {\n var shadowRoot = shadowRoots[i].shadowRoot;\n if (shadowRoot) {\n foundIframe = findIframeInElement(shadowRoot, options);\n if (!foundIframe) {\n foundIframe = findIframeInShadowRoots(shadowRoot, options);\n }\n }\n }\n return foundIframe;\n}\n\n// Do not override existing.\nif (!iframely.findIframe) {\n iframely.findIframe = function(options) {\n var foundIframe = findIframeInElement(document, options);\n if (!foundIframe) {\n foundIframe = findIframeInShadowRoots(document, options);\n }\n return foundIframe;\n };\n}\n\n\nreceiveMessage(function(e, message) {\n\n if (message && (message.method || message.type || message.context)) {\n\n var foundIframe = iframely.findIframe({\n contentWindow: e.source,\n src: message.src || message.context,\n domains: message.domains !== 'all' && iframely.DOMAINS.concat(iframely.CDN)\n });\n\n if (foundIframe) {\n var widget = utils.getWidget(foundIframe);\n if (widget && message.url) {\n widget.url = message.url;\n }\n iframely.trigger('message', widget, message);\n }\n }\n \n});\n\n\nexports.postMessage = function(message, target_url, target) {\n if (window['postMessage']) {\n\n if (typeof message === 'object') {\n message.context = document.location.href;\n }\n\n message = JSON.stringify(message);\n\n target_url = target_url || '*';\n\n target = target || window.parent; // default to parent\n\n // the browser supports window.postMessage, so call it with a targetOrigin\n // set appropriately, based on the target_url parameter.\n target['postMessage'](message, target_url.replace( /([^:]+:\\/\\/[^/]+).*/, '$1'));\n }\n};\n\n\n//# sourceURL=webpack:///./messaging.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/form-builder.js":
+/***/ "./options/form-builder.js"
/*!*********************************!*\
!*** ./options/form-builder.js ***!
\*********************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(module, __unused_webpack_exports, __webpack_require__) {
-eval("var getFormElements = __webpack_require__(/*! ./form-generator */ \"./options/form-generator.js\");\nvar iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\n\nvar UIelements = {\n checkbox: {\n getValue: function(inputs) {\n var input = inputs[0];\n return input.checked;\n }\n },\n text: {\n getValue: function(inputs) {\n var input = inputs[0];\n var value = input.value;\n if (input.type === 'number') {\n value = parseInt(value);\n if (isNaN(value)) {\n value = '';\n }\n }\n return value;\n },\n customEvents: function(inputs, submitOptionsCb) {\n var input = inputs[0];\n iframely.addEventListener(input, 'click', function() {\n input.select();\n });\n iframely.addEventListener(input, 'blur', submitOptionsCb);\n iframely.addEventListener(input, 'keyup', function(e) {\n // Apply on enter.\n if (e.keyCode === 13) {\n submitOptionsCb();\n }\n });\n }\n },\n radio: {\n getValue: function(inputs) {\n var selectedInput;\n inputs.forEach(function(input) {\n if (input.checked) {\n selectedInput = input;\n }\n });\n return selectedInput.value;\n }\n }\n};\n\nvar defaultQueryById = {};\n\nmodule.exports = function(params) {\n\n var options = params.options;\n var formContainer = params.formContainer;\n\n if (!formContainer) {\n console.warn('No formContainer in form-builder options', params);\n return;\n }\n\n if (!options) {\n formContainer.innerHTML = '';\n return;\n }\n\n var elements = getFormElements(options, params.translator);\n var id = params.id;\n var renderer = params.renderer;\n\n var defaultQuery = defaultQueryById[id] = defaultQueryById[id] || {};\n // Exclude default values.\n Object.keys(options).forEach(function(key) {\n if (!options.query || options.query.indexOf(key) === -1) {\n // Store default value.\n defaultQuery[key] = options[key].value;\n }\n });\n\n function getQueryFromForm() {\n\n var query = {};\n\n var getOptionsFromElements = function(elements) {\n // Get options from all inputs.\n elements.forEach(function(element) {\n\n if (element.context && element.context.elements) {\n\n getOptionsFromElements(element.context.elements);\n\n } else if (element.inputs) {\n\n var elementUI = UIelements[element.type];\n var inputValue;\n if (elementUI && elementUI.getValue) {\n inputValue = elementUI.getValue(element.inputs);\n } else {\n inputValue = element.inputs[0].value;\n }\n Object.assign(query, element.getQuery(inputValue));\n }\n });\n };\n\n getOptionsFromElements(elements);\n \n return query;\n }\n\n function getAndSubmitOptions() {\n var query = getQueryFromForm();\n\n Object.keys(defaultQuery).forEach(function(key) {\n if (defaultQuery[key] === query[key] \n || query[key] === undefined) { // remove undefined so it's not included while JSON.stringify\n delete query[key];\n }\n });\n\n iframely.trigger('options-changed', id, formContainer, query);\n }\n\n // Render form.\n var renderElements = function(elements) {\n var html = '';\n elements.forEach(function(element) {\n if (element.context && element.context.elements) {\n element.context.elementsHtml = renderElements(element.context.elements);\n }\n html += renderer(element.type, element.context || {});\n });\n return html;\n };\n formContainer.innerHTML = renderElements(elements);\n\n // Bind events.\n var bindElements = function(elements) {\n \n elements.forEach(function(element) {\n\n if (element.context && element.context.elements) {\n\n bindElements(element.context.elements);\n\n } else {\n\n var elementUI = UIelements[element.type];\n if (element.context) {\n element.inputs = formContainer.querySelectorAll('[name=\"' + element.context.key + '\"]');\n if (element.inputs.length > 0) {\n if (elementUI && elementUI.customEvents) {\n elementUI.customEvents(element.inputs, getAndSubmitOptions);\n } else {\n element.inputs.forEach(function(input) {\n iframely.addEventListener(input, 'change', getAndSubmitOptions);\n });\n }\n } else {\n console.warn('No inputs found for option', element.key);\n }\n }\n }\n });\n };\n bindElements(elements);\n};\n\n//# sourceURL=webpack:///./options/form-builder.js?");
+eval("{var getFormElements = __webpack_require__(/*! ./form-generator */ \"./options/form-generator.js\");\nvar iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\n\nvar UIelements = {\n checkbox: {\n getValue: function(inputs) {\n var input = inputs[0];\n return input.checked;\n }\n },\n text: {\n getValue: function(inputs) {\n var input = inputs[0];\n var value = input.value;\n if (input.type === 'number') {\n value = parseInt(value);\n if (isNaN(value)) {\n value = '';\n }\n }\n return value;\n },\n customEvents: function(inputs, submitOptionsCb) {\n var input = inputs[0];\n iframely.addEventListener(input, 'click', function() {\n input.select();\n });\n iframely.addEventListener(input, 'blur', submitOptionsCb);\n iframely.addEventListener(input, 'keyup', function(e) {\n // Apply on enter.\n if (e.keyCode === 13) {\n submitOptionsCb();\n }\n });\n }\n },\n radio: {\n getValue: function(inputs) {\n var selectedInput;\n inputs.forEach(function(input) {\n if (input.checked) {\n selectedInput = input;\n }\n });\n return selectedInput.value;\n }\n }\n};\n\nvar defaultQueryById = {};\n\nmodule.exports = function(params) {\n\n var options = params.options;\n var formContainer = params.formContainer;\n\n if (!formContainer) {\n console.warn('No formContainer in form-builder options', params);\n return;\n }\n\n if (!options) {\n formContainer.innerHTML = '';\n return;\n }\n\n var elements = getFormElements(options, params.translator);\n var id = params.id;\n var renderer = params.renderer;\n\n var defaultQuery = defaultQueryById[id] = defaultQueryById[id] || {};\n // Exclude default values.\n Object.keys(options).forEach(function(key) {\n if (!options.query || options.query.indexOf(key) === -1) {\n // Store default value.\n defaultQuery[key] = options[key].value;\n }\n });\n\n function getQueryFromForm() {\n\n var query = {};\n\n var getOptionsFromElements = function(elements) {\n // Get options from all inputs.\n elements.forEach(function(element) {\n\n if (element.context && element.context.elements) {\n\n getOptionsFromElements(element.context.elements);\n\n } else if (element.inputs) {\n\n var elementUI = UIelements[element.type];\n var inputValue;\n if (elementUI && elementUI.getValue) {\n inputValue = elementUI.getValue(element.inputs);\n } else {\n inputValue = element.inputs[0].value;\n }\n Object.assign(query, element.getQuery(inputValue));\n }\n });\n };\n\n getOptionsFromElements(elements);\n \n return query;\n }\n\n function getAndSubmitOptions() {\n var query = getQueryFromForm();\n\n Object.keys(defaultQuery).forEach(function(key) {\n if (defaultQuery[key] === query[key] \n || query[key] === undefined) { // remove undefined so it's not included while JSON.stringify\n delete query[key];\n }\n });\n\n iframely.trigger('options-changed', id, formContainer, query);\n }\n\n // Render form.\n var renderElements = function(elements) {\n var html = '';\n elements.forEach(function(element) {\n if (element.context && element.context.elements) {\n element.context.elementsHtml = renderElements(element.context.elements);\n }\n html += renderer(element.type, element.context || {});\n });\n return html;\n };\n formContainer.innerHTML = renderElements(elements);\n\n // Bind events.\n var bindElements = function(elements) {\n \n elements.forEach(function(element) {\n\n if (element.context && element.context.elements) {\n\n bindElements(element.context.elements);\n\n } else {\n\n var elementUI = UIelements[element.type];\n if (element.context) {\n element.inputs = formContainer.querySelectorAll('[name=\"' + element.context.key + '\"]');\n if (element.inputs.length > 0) {\n if (elementUI && elementUI.customEvents) {\n elementUI.customEvents(element.inputs, getAndSubmitOptions);\n } else {\n element.inputs.forEach(function(input) {\n iframely.addEventListener(input, 'change', getAndSubmitOptions);\n });\n }\n } else {\n console.warn('No inputs found for option', element.key);\n }\n }\n }\n });\n };\n bindElements(elements);\n};\n\n//# sourceURL=webpack:///./options/form-builder.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/form-generator.js":
+/***/ "./options/form-generator.js"
/*!***********************************!*\
!*** ./options/form-generator.js ***!
\***********************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+(module) {
-eval("var _RE = /^_./;\n\nvar translate = function (label, translator) {\n return translator && typeof translator === 'function' \n ? translator (label) || label\n : label;\n};\n\nmodule.exports = function(options, translator) {\n\n if (!options) {\n return [];\n }\n\n // Remove query key.\n options = Object.assign({}, options);\n delete options.query;\n\n var items = [];\n var keys = Object.keys(options);\n var checkboxCount = 0;\n \n keys.forEach(function(key) {\n \n var context = {};\n\n var getQuery;\n var option = options[key];\n option.key = key;\n\n var forceCheckboxForSingleKeyValue;\n var valuesKeys = option.values && Object.keys(option.values);\n var singleKey, singleLabel;\n if (valuesKeys && valuesKeys.length === 1) {\n forceCheckboxForSingleKeyValue = true;\n singleKey = valuesKeys[0];\n singleLabel = option.values[singleKey];\n }\n\n context.label = translate(singleLabel || option.label, translator);\n context.key = option.key;\n\n if (forceCheckboxForSingleKeyValue || typeof option.value === 'boolean') {\n\n if (forceCheckboxForSingleKeyValue) {\n context.checked = (singleKey === option.value) || (!singleKey && !option.value);\n } else {\n context.checked = option.value;\n }\n\n checkboxCount++;\n\n items.push({\n type: 'checkbox',\n context: context,\n order: _RE.test(key) ? 0 : 1,\n getQuery: function(checked) {\n\n var value;\n if (forceCheckboxForSingleKeyValue) {\n value = checked ? singleKey : '';\n } else {\n value = checked;\n }\n\n var result = {};\n\n if (forceCheckboxForSingleKeyValue) {\n if (value === '') {\n // Empty.\n } else {\n result[option.key] = value;\n }\n } else {\n result[option.key] = checked;\n }\n return result;\n }\n });\n\n } else if ((typeof option.value === 'number' || typeof option.value === 'string') && !option.values) {\n\n var useSlider = option.range && typeof option.range.min === 'number' && typeof option.range.max === 'number';\n var useNumber = typeof option.value === 'number';\n\n context.value = option.value;\n\n getQuery = function(inputValue) {\n var result = {};\n if (inputValue === '') {\n // Empty.\n } else {\n result[option.key] = inputValue;\n }\n return result;\n };\n\n if (useSlider) {\n context.min = option.range.min;\n context.max = option.range.max;\n items.push({\n type: 'range',\n context: context,\n order: 9, // last one\n getQuery: getQuery\n });\n } else {\n context.placeholder = translate(option.placeholder || '', translator);\n context.inputType = useNumber ? 'number' : 'text';\n items.push({\n type: 'text',\n context: context,\n order: /start/i.test(key) ? 7 : 8, // start/end for player timing, ex.: youtube\n getQuery: getQuery\n });\n }\n\n } else if (option.values) {\n\n context.value = option.value + '';\n\n getQuery = function(inputValue) {\n var result = {};\n if (inputValue === '') {\n // Empty.\n } else {\n result[option.key] = inputValue;\n }\n return result;\n };\n\n if (Object.keys(option.values).length <= 3) {\n\n if (option.label) {\n context.label = translate(option.label, translator);\n } else {\n context.label = false;\n }\n\n var i = 0;\n var hasLongLabel = false;\n var values = Object.values(option.values);\n while (i < values.length && !hasLongLabel) {\n var label = values[i];\n hasLongLabel = label.length > 8;\n i++;\n }\n context.inline = !hasLongLabel;\n\n context.items = [];\n\n Object.keys(option.values).forEach(function(key, idx2) {\n context.items.push({\n id: context.key + '-' + idx2,\n value: key,\n label: translate(option.values[key], translator),\n checked: context.value === key\n });\n });\n\n items.push({\n type: 'radio',\n context: context,\n order: hasLongLabel ? -3 : (!/theme/.test(key) ? -2 : -1),\n getQuery: getQuery\n });\n\n } else {\n\n context.items = [];\n\n Object.keys(option.values).forEach(function(key) {\n context.items.push({\n value: key,\n label: translate(option.values[key], translator),\n checked: context.value === key\n });\n });\n\n items.push({\n type: 'select',\n context: context,\n order: 5,\n getQuery: getQuery\n });\n }\n }\n });\n\n items.sort(function(a, b) {\n return a.order - b.order;\n });\n\n items.forEach(function(item) {\n delete item.order;\n });\n\n if (checkboxCount > 0) {\n\n var groupedItems = [];\n var subItems;\n\n items.forEach(function(item, idx) {\n\n if (item.type === 'checkbox') {\n\n // Grouping for checkboxes.\n\n var newCheckboxGroup = \n checkboxCount > 2\n && idx > 0 \n && !_RE.test(item.context.key) \n && items[idx - 1].type === 'checkbox'\n && _RE.test(items[idx - 1].context.key);\n\n if (!subItems // First group.\n || newCheckboxGroup // Second group on _ prefix removed.\n ) {\n\n subItems = [];\n groupedItems.push({\n type: 'group',\n context: {\n elements: subItems\n }\n });\n }\n\n subItems.push(item);\n\n } else {\n // Other items. Just add.\n groupedItems.push(item);\n }\n });\n\n return groupedItems;\n\n } else {\n return items;\n }\n};\n\n//# sourceURL=webpack:///./options/form-generator.js?");
+eval("{var _RE = /^_./;\n\nvar translate = function (label, translator) {\n return translator && typeof translator === 'function' \n ? translator (label) || label\n : label;\n};\n\nmodule.exports = function(options, translator) {\n\n if (!options) {\n return [];\n }\n\n // Remove query key.\n options = Object.assign({}, options);\n delete options.query;\n\n var items = [];\n var keys = Object.keys(options);\n var checkboxCount = 0;\n \n keys.forEach(function(key) {\n \n var context = {};\n\n var getQuery;\n var option = options[key];\n option.key = key;\n\n var forceCheckboxForSingleKeyValue;\n var valuesKeys = option.values && Object.keys(option.values);\n var singleKey, singleLabel;\n if (valuesKeys && valuesKeys.length === 1) {\n forceCheckboxForSingleKeyValue = true;\n singleKey = valuesKeys[0];\n singleLabel = option.values[singleKey];\n }\n\n context.label = translate(singleLabel || option.label, translator);\n context.key = option.key;\n\n if (forceCheckboxForSingleKeyValue || typeof option.value === 'boolean') {\n\n if (forceCheckboxForSingleKeyValue) {\n context.checked = (singleKey === option.value) || (!singleKey && !option.value);\n } else {\n context.checked = option.value;\n }\n\n checkboxCount++;\n\n items.push({\n type: 'checkbox',\n context: context,\n order: _RE.test(key) ? 0 : 1,\n getQuery: function(checked) {\n\n var value;\n if (forceCheckboxForSingleKeyValue) {\n value = checked ? singleKey : '';\n } else {\n value = checked;\n }\n\n var result = {};\n\n if (forceCheckboxForSingleKeyValue) {\n if (value === '') {\n // Empty.\n } else {\n result[option.key] = value;\n }\n } else {\n result[option.key] = checked;\n }\n return result;\n }\n });\n\n } else if ((typeof option.value === 'number' || typeof option.value === 'string') && !option.values) {\n\n var useSlider = option.range && typeof option.range.min === 'number' && typeof option.range.max === 'number';\n var useNumber = typeof option.value === 'number';\n\n context.value = option.value;\n\n getQuery = function(inputValue) {\n var result = {};\n if (inputValue === '') {\n // Empty.\n } else {\n result[option.key] = inputValue;\n }\n return result;\n };\n\n if (useSlider) {\n context.min = option.range.min;\n context.max = option.range.max;\n items.push({\n type: 'range',\n context: context,\n order: 9, // last one\n getQuery: getQuery\n });\n } else {\n context.placeholder = translate(option.placeholder || '', translator);\n context.inputType = useNumber ? 'number' : 'text';\n items.push({\n type: 'text',\n context: context,\n order: /start/i.test(key) ? 7 : 8, // start/end for player timing, ex.: youtube\n getQuery: getQuery\n });\n }\n\n } else if (option.values) {\n\n context.value = option.value + '';\n\n getQuery = function(inputValue) {\n var result = {};\n if (inputValue === '') {\n // Empty.\n } else {\n result[option.key] = inputValue;\n }\n return result;\n };\n\n if (Object.keys(option.values).length <= 3) {\n\n if (option.label) {\n context.label = translate(option.label, translator);\n } else {\n context.label = false;\n }\n\n var i = 0;\n var hasLongLabel = false;\n var values = Object.values(option.values);\n while (i < values.length && !hasLongLabel) {\n var label = values[i];\n hasLongLabel = label.length > 8;\n i++;\n }\n context.inline = !hasLongLabel;\n\n context.items = [];\n\n Object.keys(option.values).forEach(function(key, idx2) {\n context.items.push({\n id: context.key + '-' + idx2,\n value: key,\n label: translate(option.values[key], translator),\n checked: context.value === key\n });\n });\n\n items.push({\n type: 'radio',\n context: context,\n order: hasLongLabel ? -3 : (!/theme/.test(key) ? -2 : -1),\n getQuery: getQuery\n });\n\n } else {\n\n context.items = [];\n\n Object.keys(option.values).forEach(function(key) {\n context.items.push({\n value: key,\n label: translate(option.values[key], translator),\n checked: context.value === key\n });\n });\n\n items.push({\n type: 'select',\n context: context,\n order: 5,\n getQuery: getQuery\n });\n }\n }\n });\n\n items.sort(function(a, b) {\n return a.order - b.order;\n });\n\n items.forEach(function(item) {\n delete item.order;\n });\n\n if (checkboxCount > 0) {\n\n var groupedItems = [];\n var subItems;\n\n items.forEach(function(item, idx) {\n\n if (item.type === 'checkbox') {\n\n // Grouping for checkboxes.\n\n var newCheckboxGroup = \n checkboxCount > 2\n && idx > 0 \n && !_RE.test(item.context.key) \n && items[idx - 1].type === 'checkbox'\n && _RE.test(items[idx - 1].context.key);\n\n if (!subItems // First group.\n || newCheckboxGroup // Second group on _ prefix removed.\n ) {\n\n subItems = [];\n groupedItems.push({\n type: 'group',\n context: {\n elements: subItems\n }\n });\n }\n\n subItems.push(item);\n\n } else {\n // Other items. Just add.\n groupedItems.push(item);\n }\n });\n\n return groupedItems;\n\n } else {\n return items;\n }\n};\n\n//# sourceURL=webpack:///./options/form-generator.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/index.js":
+/***/ "./options/index.js"
/*!**************************!*\
!*** ./options/index.js ***!
\**************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\nvar formBuilder = __webpack_require__(/*! ./form-builder */ \"./options/form-builder.js\");\nvar renderer = __webpack_require__(/*! ./renderer */ \"./options/renderer.js\");\n\niframely.buildOptionsForm = function(id, formContainer, options, translator) {\n formBuilder({\n id: id,\n formContainer: formContainer,\n options: options,\n renderer: renderer,\n translator: translator\n });\n};\n\nexports.iframely = iframely;\n\n//# sourceURL=webpack:///./options/index.js?");
+eval("{var iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\nvar formBuilder = __webpack_require__(/*! ./form-builder */ \"./options/form-builder.js\");\nvar renderer = __webpack_require__(/*! ./renderer */ \"./options/renderer.js\");\n\niframely.buildOptionsForm = function(id, formContainer, options, translator) {\n formBuilder({\n id: id,\n formContainer: formContainer,\n options: options,\n renderer: renderer,\n translator: translator\n });\n};\n\nexports.iframely = iframely;\n\n//# sourceURL=webpack:///./options/index.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/renderer.js":
+/***/ "./options/renderer.js"
/*!*****************************!*\
!*** ./options/renderer.js ***!
\*****************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(module, __unused_webpack_exports, __webpack_require__) {
-eval("var checkboxTemplate = __webpack_require__(/*! ./templates/checkbox.ejs */ \"./options/templates/checkbox.ejs\");\nvar rangeTemplate = __webpack_require__(/*! ./templates/range.ejs */ \"./options/templates/range.ejs\");\nvar textTemplate = __webpack_require__(/*! ./templates/text.ejs */ \"./options/templates/text.ejs\");\nvar radioTemplate = __webpack_require__(/*! ./templates/radio.ejs */ \"./options/templates/radio.ejs\");\nvar selectTemplate = __webpack_require__(/*! ./templates/select.ejs */ \"./options/templates/select.ejs\");\nvar groupTemplate = __webpack_require__(/*! ./templates/group.ejs */ \"./options/templates/group.ejs\");\n\nvar templates = {\n checkbox: checkboxTemplate,\n range: rangeTemplate,\n text: textTemplate,\n radio: radioTemplate,\n select: selectTemplate,\n group: groupTemplate\n};\n\nmodule.exports = function(type, context) {\n var template = templates[type];\n var renderedTemplate = template(context);\n return renderedTemplate;\n};\n\n//# sourceURL=webpack:///./options/renderer.js?");
+eval("{var checkboxTemplate = __webpack_require__(/*! ./templates/checkbox.ejs */ \"./options/templates/checkbox.ejs\");\nvar rangeTemplate = __webpack_require__(/*! ./templates/range.ejs */ \"./options/templates/range.ejs\");\nvar textTemplate = __webpack_require__(/*! ./templates/text.ejs */ \"./options/templates/text.ejs\");\nvar radioTemplate = __webpack_require__(/*! ./templates/radio.ejs */ \"./options/templates/radio.ejs\");\nvar selectTemplate = __webpack_require__(/*! ./templates/select.ejs */ \"./options/templates/select.ejs\");\nvar groupTemplate = __webpack_require__(/*! ./templates/group.ejs */ \"./options/templates/group.ejs\");\n\nvar templates = {\n checkbox: checkboxTemplate,\n range: rangeTemplate,\n text: textTemplate,\n radio: radioTemplate,\n select: selectTemplate,\n group: groupTemplate\n};\n\nmodule.exports = function(type, context) {\n var template = templates[type];\n var renderedTemplate = template(context);\n return renderedTemplate;\n};\n\n//# sourceURL=webpack:///./options/renderer.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/templates/checkbox.ejs":
-/*!****************************************!*\
- !*** ./options/templates/checkbox.ejs ***!
- \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n \" name=\"<%= key %>\"<% if (checked) { %> checked=\"checked\"<% } %>>\\n \">\\n <%= label %>\\n \\n
\\n', __filename = \"src/options/templates/checkbox.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n \\n \\n ');\n __line = 4;\n __append(escapeFn(label));\n __append(\"\\n \\n
\\n\");\n __line = 7;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/checkbox.ejs?");
-
-/***/ }),
-
-/***/ "./options/templates/group.ejs":
-/*!*************************************!*\
- !*** ./options/templates/group.ejs ***!
- \*************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n
\\n <%- elementsHtml %>\\n
\\n
', __filename = \"src/options/templates/group.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n
\\n ');\n __line = 3;\n __append(elementsHtml);\n __append(\"\\n
\\n
\");\n __line = 5;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/group.ejs?");
-
-/***/ }),
-
-/***/ "./options/templates/radio.ejs":
-/*!*************************************!*\
- !*** ./options/templates/radio.ejs ***!
- \*************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n <% if (label) { %>\\n
\\n <%= label %>:\\n \\n <% } %>\\n
iframely-option__group-inline<% } %>\">\\n <% items.forEach(function(subContext) { %>\\n
\\n \" name=\"<%= key %>\" value=\"<%= subContext.value %>\"<% if (subContext.checked) { %> checked=\"checked\"<% } %>>\\n \">\\n <%= subContext.label %>\\n \\n
\\n <% }); %>\\n
\\n
', __filename = \"src/options/templates/radio.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n ');\n __line = 2;\n if (label) {\n __append('\\n
\\n ');\n __line = 4;\n __append(escapeFn(label));\n __append(\":\\n \\n \");\n __line = 6;\n }\n __append('\\n
\\n ');\n __line = 8;\n items.forEach(function(subContext) {\n __append('\\n
\\n \\n \\n ');\n __line = 12;\n __append(escapeFn(subContext.label));\n __append(\"\\n \\n
\\n \");\n __line = 15;\n });\n __append(\"\\n
\\n
\");\n __line = 17;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/radio.ejs?");
-
-/***/ }),
-
-/***/ "./options/templates/range.ejs":
-/*!*************************************!*\
- !*** ./options/templates/range.ejs ***!
- \*************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n
\"><%= label %>: \\n
\\n \" name=\"<%= key %>\" min=\"<%= min %>\" max=\"<%= max %>\" step=\"1\" value=\"<%= value %>\" style=\"--min: <%= min %>; --max: <%= max %>; --val: <%= value %>;\">\\n
\\n
', __filename = \"src/options/templates/range.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n
');\n __append(escapeFn(label));\n __append(': \\n
\\n \\n
\\n
');\n __line = 6;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/range.ejs?");
-
-/***/ }),
-
-/***/ "./options/templates/select.ejs":
-/*!**************************************!*\
- !*** ./options/templates/select.ejs ***!
- \**************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n
\"><%= label %>: \\n
\\n \" name=\"<%= key %>\">\\n <% items.forEach(function(subContext) { %>\\n \"<% if (subContext.checked) { %> selected=\"selected\"<% } %>><%= subContext.label %> \\n <% }); %>\\n \\n
\\n
', __filename = \"src/options/templates/select.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n
');\n __append(escapeFn(label));\n __append(': \\n
\\n \\n ');\n __line = 5;\n items.forEach(function(subContext) {\n __append('\\n \");\n __append(escapeFn(subContext.label));\n __append(\" \\n \");\n __line = 7;\n });\n __append(\"\\n \\n
\\n
\");\n __line = 10;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/select.ejs?");
-
-/***/ }),
-
-/***/ "./options/templates/text.ejs":
-/*!************************************!*\
- !*** ./options/templates/text.ejs ***!
- \************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n
\"><%= label %>: \\n
\\n \" class=\"iframely-option__input iframely-option__text\" id=\"<%= key %>\" name=\"<%= key %>\" placeholder=\"<%= placeholder %>\" value=\"<%= value %>\">\\n
\\n
', __filename = \"src/options/templates/text.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n
');\n __append(escapeFn(label));\n __append(': \\n
\\n \\n
\\n
');\n __line = 6;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/text.ejs?");
-
-/***/ }),
-
-/***/ "./theme.js":
+/***/ "./theme.js"
/*!******************!*\
!*** ./theme.js ***!
\******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\nvar messaging = __webpack_require__(/*! ./messaging */ \"./messaging.js\");\n\nfunction setThemeInIframe(iframe, theme) {\n messaging.postMessage({\n method: 'setTheme',\n data: theme\n }, '*', iframe.contentWindow);\n}\n\nfunction setThemeInAllIframes(parent, theme) {\n var iframes = parent.getElementsByTagName('iframe');\n for(var i = 0; i < iframes.length; i++) {\n var iframe = iframes[i];\n setThemeInIframe(iframe, theme);\n }\n}\n\niframely.setTheme = function(theme, container) {\n if (theme && iframely.SUPPORTED_THEMES.indexOf(theme) > -1) {\n if (container) {\n if (container.tagName === 'IFRAME') {\n setThemeInIframe(container, theme);\n } else {\n setThemeInAllIframes(container, theme);\n }\n } else {\n // Send get param to next iframes.\n iframely.extendOptions({\n theme: theme\n });\n setThemeInAllIframes(document, theme);\n iframely.trigger('set-theme', theme);\n }\n } else {\n console.warn('Using iframely.setTheme with not supported theme: \"' + theme + '\". Supported themes are: ' + iframely.SUPPORTED_THEMES.join(', '));\n }\n};\n\n//# sourceURL=webpack:///./theme.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\nvar messaging = __webpack_require__(/*! ./messaging */ \"./messaging.js\");\n\nfunction setThemeInIframe(iframe, theme) {\n messaging.postMessage({\n method: 'setTheme',\n data: theme\n }, '*', iframe.contentWindow);\n}\n\nfunction setThemeInAllIframes(parent, theme) {\n var iframes = parent.getElementsByTagName('iframe');\n for(var i = 0; i < iframes.length; i++) {\n var iframe = iframes[i];\n setThemeInIframe(iframe, theme);\n }\n}\n\niframely.setTheme = function(theme, container) {\n if (theme && iframely.SUPPORTED_THEMES.indexOf(theme) > -1) {\n if (container) {\n if (container.tagName === 'IFRAME') {\n setThemeInIframe(container, theme);\n } else {\n setThemeInAllIframes(container, theme);\n }\n } else {\n // Send get param to next iframes.\n iframely.extendOptions({\n theme: theme\n });\n setThemeInAllIframes(document, theme);\n iframely.trigger('set-theme', theme);\n }\n } else {\n console.warn('Using iframely.setTheme with not supported theme: \"' + theme + '\". Supported themes are: ' + iframely.SUPPORTED_THEMES.join(', '));\n }\n};\n\n//# sourceURL=webpack:///./theme.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./utils.js":
+/***/ "./utils.js"
/*!******************!*\
!*** ./utils.js ***!
\******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\nvar messaging = __webpack_require__(/*! ./messaging */ \"./messaging.js\");\n\niframely.on('init', function() {\n\n\n iframely.extendOptions(parseQueryStringFromScriptSrc());\n // if it's hosted from elsewhere - we don't support customizing via query-string.\n // iframely.CDN will be default one unless changed by user (?cdn= or iframely.CDN= )\n\n defineDefaultStyles();\n\n // Set theme for existing iframes.\n if (iframely.config.theme) {\n iframely.setTheme(iframely.config.theme);\n }\n\n requestSizeOfExistingIframes(iframely.DOMAINS.concat(iframely.CDN.replace(/^https?:\\/\\//, '')));\n \n});\n\niframely.load = function() {\n var args = Array.prototype.slice.call(arguments);\n args.unshift('load');\n iframely.trigger.apply(this, args);\n};\n\nvar getIframeWrapper = exports.getIframeWrapper = function(iframe, checkClass) {\n\n var aspectWrapper = iframe.parentNode;\n\n if (!aspectWrapper\n || aspectWrapper.nodeName !== 'DIV'\n || nonTextChildCount(aspectWrapper) > 2 /* 2 is lazy-cover */\n || (checkClass && aspectWrapper.getAttribute('class') !== iframely.ASPECT_WRAPPER_CLASS)\n || (!checkClass && aspectWrapper.style.position !== 'relative' && aspectWrapper.getAttribute('class') !== iframely.ASPECT_WRAPPER_CLASS)) {\n return;\n }\n\n var maxWidthWrapper = aspectWrapper.parentNode;\n\n if (!maxWidthWrapper\n || maxWidthWrapper.nodeName !== 'DIV'\n || nonTextChildCount(maxWidthWrapper) > 1\n || (checkClass && maxWidthWrapper.getAttribute('class') && maxWidthWrapper.getAttribute('class').split(' ').indexOf(iframely.MAXWIDTH_WRAPPER_CLASS) === -1)\n || (!checkClass && maxWidthWrapper.getAttribute('class') && !maxWidthWrapper.getAttribute('class').match(/iframely/i) /* users can modify class */)\n ) {\n return;\n }\n\n return {\n aspectWrapper: aspectWrapper,\n maxWidthWrapper: maxWidthWrapper\n };\n};\n\nexports.addDefaultWrappers = function(el) {\n var parentNode = el.parentNode;\n\n var maxWidthWrapper = document.createElement('div');\n maxWidthWrapper.className = iframely.MAXWIDTH_WRAPPER_CLASS;\n\n var aspectWrapper = document.createElement('div');\n aspectWrapper.className = iframely.ASPECT_WRAPPER_CLASS;\n\n maxWidthWrapper.appendChild(aspectWrapper);\n\n parentNode.insertBefore(maxWidthWrapper, el);\n\n return {\n aspectWrapper: aspectWrapper,\n maxWidthWrapper: maxWidthWrapper\n };\n};\n\nexports.getWidget = function(iframe) {\n var wrapper = getIframeWrapper(iframe);\n if (!wrapper) {\n return;\n }\n var widget = {\n iframe: iframe, // can actually be ahref\n aspectWrapper: wrapper.aspectWrapper,\n maxWidthWrapper: wrapper.maxWidthWrapper\n };\n if (iframe.nodeName === 'A' && iframe.hasAttribute('href')) {\n widget.url = iframe.getAttribute('href');\n } else if (iframe.hasAttribute('src') && /url=/.test(iframe.getAttribute('src'))) {\n var qs = parseQueryString(iframe.getAttribute('src'));\n if (qs.url) {\n widget.url = qs.url;\n }\n }\n return widget;\n};\n\niframely.getElementComputedStyle = function(el, style) {\n return window.getComputedStyle && window.getComputedStyle(el).getPropertyValue(style);\n};\n\nexports.setStyles = function(el, styles) {\n if (el) { // let's check it's still defined, just in case\n Object.keys(styles).forEach(function(key) {\n\n var value = styles[key];\n if (typeof value === 'number' || (typeof value === 'string' && /^(\\d+)?\\.?(\\d+)$/.test(value))) {\n value = value + 'px';\n }\n\n var currentValue = el.style[key];\n\n if (!window.getComputedStyle ||\n // don't change CSS values in pixels, such as height:0\n (\n iframely.getElementComputedStyle(el, key) != value\n // && don't set default aspect ratio if it's defined in CSS anyway\n && !(el.className == 'iframely-responsive' && key === 'paddingBottom' && !currentValue && /^56\\.2\\d+%$/.test(value))\n // && do not change max-width if new value === 'keep'.\n && !(key === 'max-width' && value === 'keep')\n )) {\n\n el.style[key] = value || ''; // remove style that is no longer needed\n }\n });\n }\n};\n\nvar applyNonce = exports.applyNonce = function(element) {\n if (iframely.config.nonce) {\n element.nonce = iframely.config.nonce;\n }\n};\n\nfunction defineDefaultStyles() {\n\n var iframelyStylesId = 'iframely-styles';\n var styles = document.getElementById(iframelyStylesId);\n\n if (!styles) {\n // copy-paste default styles from https://iframely.com/docs/omit-css\n // box-sizing:border-box - need for iOS Safari .\n var iframelyStyles = '.iframely-responsive{top:0;left:0;width:100%;height:0;position:relative;padding-bottom:56.25%;box-sizing:border-box;}.iframely-responsive>*{top:0;left:0;width:100%;height:100%;position:absolute;border:0;box-sizing:border-box;}';\n\n styles = document.createElement('style');\n styles.id = iframelyStylesId;\n styles.type = 'text/css';\n applyNonce(styles);\n\n if (styles.styleSheet) {\n // IE.\n styles.styleSheet.cssText = iframelyStyles;\n } else {\n styles.innerHTML = iframelyStyles;\n }\n document.getElementsByTagName('head')[0].appendChild(styles);\n }\n}\n\n\nvar addQueryString = exports.addQueryString = function(href, options) {\n\n var query_string = '';\n\n Object.keys(options).forEach(function(key) {\n var value = options[key];\n\n // array is used e.g. for import: uris and ids\n if (Object.prototype.toString.call(value) === '[object Array]') {\n\n var values = value.map(function(uri) {\n return key + '=' + encodeURIComponent(uri);\n });\n query_string += '&' + values.join('&'); \n\n } else if (typeof value !== 'undefined' && href.indexOf(key + '=') === -1 ) { // set explicitely in options, skip undefines\n\n // Do not convert boolean for _option.\n if (typeof value === 'boolean' && key.charAt(0) !== '_') {\n value = value ? 1 : 0;\n }\n\n query_string += '&' + key + '=' + encodeURIComponent(value);\n }\n\n });\n\n return href + (query_string !== '' ? (href.indexOf('?') > -1 ? '&' : '?') + query_string.replace(/^&/, '') : '');\n};\n\nexports.getEndpoint = function(src, options, config_params) {\n\n var endpoint = src;\n\n if (!/^(https?:)?\\/\\//i.test(src)) {\n endpoint = (options.CDN || iframely.CDN) + endpoint;\n delete options.CDN;\n }\n\n if (!/^(?:https?:)?\\/\\//i.test(endpoint)) {\n endpoint = '//' + endpoint;\n } \n\n if (options) {\n endpoint = addQueryString(endpoint, options);\n }\n\n // get additional params from config\n if (config_params && config_params.length) {\n\n var more_options = {};\n\n var iframely_config_keys = Object.keys(iframely.config);\n for (var i = 0; i < iframely_config_keys.length; i++) {\n var key = iframely_config_keys[i];\n if (containsString(config_params, key)) {\n more_options[key] = iframely.config[key];\n }\n }\n\n endpoint = addQueryString(endpoint, more_options);\n }\n\n\n if (/^(https?:)?\\/\\//i.test(endpoint) // Path is url.\n && !endpoint.match(/^(https?:)?\\/\\//i)[1] // No http protocol specified.\n && document.location.protocol !== 'http:' // Document in `file:` or other protocol.\n && document.location.protocol !== 'https:') {\n\n endpoint = 'https:' + endpoint;\n }\n\n return endpoint;\n};\n\n// helper method to init more options through js code\niframely.extendOptions = function(options) {\n\n options && Object.keys(options).forEach(function(key) {\n var new_value = (\n options[key] === 0 || options[key] === '0' || options[key] === false || options[key] === 'false'\n ? false : (options[key] === 1 || options[key] === '1' || options[key] === true || options[key] === 'true'\n ? true : options[key]));\n\n if (iframely.config[key] !== false) { // set new value only when undefined or not previously disabled\n iframely.config[key] = new_value;\n }\n });\n\n};\n\nfunction parseQueryStringFromScriptSrc() {\n\n // Extract global iframely params.\n var scripts = document.querySelectorAll('script[src*=\"embed.js\"], script[src*=\"iframely.js\"]');\n\n for(var i = 0; i < scripts.length; i++) {\n var src = scripts[i].getAttribute('src').replace(/&/gi, '&');\n\n if (iframely.SCRIPT_RE.test(src)) { // found the script on custom origin or default Iframely CDN\n\n var options = parseQueryString(src, iframely.SUPPORTED_QUERY_STRING.concat('cdn', 'cancel', 'nonce'));\n\n var m2 = src.match(iframely.CDN_RE);\n if (m2 || options.cdn) { // ignore non-Iframely hosts such as s.imgur.com/min/embed.js\n iframely.CDN = options.cdn || m2[1];\n }\n\n if (options.cancel) {\n if (options.cancel === '0' || options.cancel === 'false') {\n iframely.RECOVER_HREFS_ON_CANCEL = true;\n }\n delete options.cancel;\n }\n\n if (Object.keys(options).length > 0) {\n // give preferrence to CDN from scripts that have query-string. \n // CDN is most critical for embeds with empty data-iframely-url\n // and those should have at least ?api_key... in script src\n\n return options;\n } // or keep searching\n }\n }\n // should have exited by now if any querystring found...\n return {};\n}\n\nfunction requestSizeOfExistingIframes(domains) {\n\n var iframes = document.querySelectorAll('iframe[src*=\"' + (domains || iframely.DOMAINS).join('\"], iframe[src*=\"') + '\"]');\n for(var i = 0; i < iframes.length; i++) {\n var iframe = iframes[i];\n var src = iframe.src;\n if (src.match(/^(https?:)?\\/\\/[^/]+\\/api\\/iframe\\?.+/)\n || src.match(/^(https?:)?\\/\\/[^/]+\\/\\w+(\\?.*)?$/)) {\n messaging.postMessage({\n method: 'getSize'\n }, '*', iframe.contentWindow);\n }\n }\n} \n\nfunction nonTextChildCount(element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n var text = el.textContent || el.innerText;\n text = text.replace(/\\s|\\n/g, '');\n if (text) {\n // Do not skip text node with text.\n count++;\n }\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n count++;\n }\n }\n return count;\n}\n\nfunction containsString(list, findValue) {\n var value, i = 0;\n while (i < list.length) {\n value = list[i];\n\n if (value == findValue) {\n return true;\n }\n\n if (value && value.test && value.test(findValue)) {\n return true;\n }\n\n i++;\n }\n}\n\nvar parseQueryString = exports.parseQueryString = function(url, allowed_query_string) {\n var query = url.match(/\\?(.+)/i);\n if (query) {\n query = query[1];\n var data = query.split('&');\n var result = {};\n for(var i=0; i 2 /* 2 is lazy-cover */\n || (checkClass && aspectWrapper.getAttribute('class') !== iframely.ASPECT_WRAPPER_CLASS)\n || (!checkClass && aspectWrapper.style.position !== 'relative' && aspectWrapper.getAttribute('class') !== iframely.ASPECT_WRAPPER_CLASS)) {\n return;\n }\n\n var maxWidthWrapper = aspectWrapper.parentNode;\n\n if (!maxWidthWrapper\n || maxWidthWrapper.nodeName !== 'DIV'\n || nonTextChildCount(maxWidthWrapper) > 1\n || (checkClass && maxWidthWrapper.getAttribute('class') && maxWidthWrapper.getAttribute('class').split(' ').indexOf(iframely.MAXWIDTH_WRAPPER_CLASS) === -1)\n || (!checkClass && maxWidthWrapper.getAttribute('class') && !maxWidthWrapper.getAttribute('class').match(/iframely/i) /* users can modify class */)\n ) {\n return;\n }\n\n return {\n aspectWrapper: aspectWrapper,\n maxWidthWrapper: maxWidthWrapper\n };\n};\n\nexports.addDefaultWrappers = function(el) {\n var parentNode = el.parentNode;\n\n var maxWidthWrapper = document.createElement('div');\n maxWidthWrapper.className = iframely.MAXWIDTH_WRAPPER_CLASS;\n\n var aspectWrapper = document.createElement('div');\n aspectWrapper.className = iframely.ASPECT_WRAPPER_CLASS;\n\n maxWidthWrapper.appendChild(aspectWrapper);\n\n parentNode.insertBefore(maxWidthWrapper, el);\n\n return {\n aspectWrapper: aspectWrapper,\n maxWidthWrapper: maxWidthWrapper\n };\n};\n\nexports.getWidget = function(iframe) {\n var wrapper = getIframeWrapper(iframe);\n if (!wrapper) {\n return;\n }\n var widget = {\n iframe: iframe, // can actually be ahref\n aspectWrapper: wrapper.aspectWrapper,\n maxWidthWrapper: wrapper.maxWidthWrapper\n };\n if (iframe.nodeName === 'A' && iframe.hasAttribute('href')) {\n widget.url = iframe.getAttribute('href');\n } else if (iframe.hasAttribute('src') && /url=/.test(iframe.getAttribute('src'))) {\n var qs = parseQueryString(iframe.getAttribute('src'));\n if (qs.url) {\n widget.url = qs.url;\n }\n }\n return widget;\n};\n\niframely.getElementComputedStyle = function(el, style) {\n return window.getComputedStyle && window.getComputedStyle(el).getPropertyValue(style);\n};\n\nexports.setStyles = function(el, styles) {\n if (el) { // let's check it's still defined, just in case\n Object.keys(styles).forEach(function(key) {\n\n var value = styles[key];\n if (typeof value === 'number' || (typeof value === 'string' && /^(\\d+)?\\.?(\\d+)$/.test(value))) {\n value = value + 'px';\n }\n\n var currentValue = el.style[key];\n\n if (!window.getComputedStyle ||\n // don't change CSS values in pixels, such as height:0\n (\n iframely.getElementComputedStyle(el, key) != value\n // && don't set default aspect ratio if it's defined in CSS anyway\n && !(el.className == 'iframely-responsive' && key === 'paddingBottom' && !currentValue && /^56\\.2\\d+%$/.test(value))\n // && do not change max-width if new value === 'keep'.\n && !(key === 'max-width' && value === 'keep')\n )) {\n\n el.style[key] = value || ''; // remove style that is no longer needed\n }\n });\n }\n};\n\nvar applyNonce = exports.applyNonce = function(element) {\n if (iframely.config.nonce) {\n element.nonce = iframely.config.nonce;\n }\n};\n\nfunction defineDefaultStyles() {\n\n var iframelyStylesId = 'iframely-styles';\n var styles = document.getElementById(iframelyStylesId);\n\n if (!styles) {\n // copy-paste default styles from https://iframely.com/docs/omit-css\n // box-sizing:border-box - need for iOS Safari .\n var iframelyStyles = '.iframely-responsive{top:0;left:0;width:100%;height:0;position:relative;padding-bottom:56.25%;box-sizing:border-box;}.iframely-responsive>*{top:0;left:0;width:100%;height:100%;position:absolute;border:0;box-sizing:border-box;}';\n\n styles = document.createElement('style');\n styles.id = iframelyStylesId;\n styles.type = 'text/css';\n applyNonce(styles);\n\n if (styles.styleSheet) {\n // IE.\n styles.styleSheet.cssText = iframelyStyles;\n } else {\n styles.innerHTML = iframelyStyles;\n }\n document.getElementsByTagName('head')[0].appendChild(styles);\n }\n}\n\n\nvar addQueryString = exports.addQueryString = function(href, options) {\n\n var query_string = '';\n\n Object.keys(options).forEach(function(key) {\n var value = options[key];\n\n // array is used e.g. for import: uris and ids\n if (Object.prototype.toString.call(value) === '[object Array]') {\n\n var values = value.map(function(uri) {\n return key + '=' + encodeURIComponent(uri);\n });\n query_string += '&' + values.join('&'); \n\n } else if (typeof value !== 'undefined' && href.indexOf(key + '=') === -1 ) { // set explicitely in options, skip undefines\n\n // Do not convert boolean for _option.\n if (typeof value === 'boolean' && key.charAt(0) !== '_') {\n value = value ? 1 : 0;\n }\n\n query_string += '&' + key + '=' + encodeURIComponent(value);\n }\n\n });\n\n return href + (query_string !== '' ? (href.indexOf('?') > -1 ? '&' : '?') + query_string.replace(/^&/, '') : '');\n};\n\nexports.getEndpoint = function(src, options, config_params) {\n\n var endpoint = src;\n\n if (!/^(https?:)?\\/\\//i.test(src)) {\n endpoint = (options.CDN || iframely.CDN) + endpoint;\n delete options.CDN;\n }\n\n if (!/^(?:https?:)?\\/\\//i.test(endpoint)) {\n endpoint = '//' + endpoint;\n } \n\n if (options) {\n endpoint = addQueryString(endpoint, options);\n }\n\n // get additional params from config\n if (config_params && config_params.length) {\n\n var more_options = {};\n\n var iframely_config_keys = Object.keys(iframely.config);\n for (var i = 0; i < iframely_config_keys.length; i++) {\n var key = iframely_config_keys[i];\n if (containsString(config_params, key)) {\n more_options[key] = iframely.config[key];\n }\n }\n\n endpoint = addQueryString(endpoint, more_options);\n }\n\n\n if (/^(https?:)?\\/\\//i.test(endpoint) // Path is url.\n && !endpoint.match(/^(https?:)?\\/\\//i)[1] // No http protocol specified.\n && document.location.protocol !== 'http:' // Document in `file:` or other protocol.\n && document.location.protocol !== 'https:') {\n\n endpoint = 'https:' + endpoint;\n }\n\n return endpoint;\n};\n\n// helper method to init more options through js code\niframely.extendOptions = function(options) {\n\n options && Object.keys(options).forEach(function(key) {\n var new_value = (\n options[key] === 0 || options[key] === '0' || options[key] === false || options[key] === 'false'\n ? false : (options[key] === 1 || options[key] === '1' || options[key] === true || options[key] === 'true'\n ? true : options[key]));\n\n if (iframely.config[key] !== false) { // set new value only when undefined or not previously disabled\n iframely.config[key] = new_value;\n }\n });\n\n};\n\nfunction parseQueryStringFromScriptSrc() {\n\n // Extract global iframely params.\n var scripts = document.querySelectorAll('script[src*=\"embed.js\"], script[src*=\"iframely.js\"]');\n\n for(var i = 0; i < scripts.length; i++) {\n var src = scripts[i].getAttribute('src').replace(/&/gi, '&');\n\n if (iframely.SCRIPT_RE.test(src)) { // found the script on custom origin or default Iframely CDN\n\n var options = parseQueryString(src, iframely.SUPPORTED_QUERY_STRING.concat('cdn', 'cancel', 'nonce'));\n\n var m2 = src.match(iframely.CDN_RE);\n if (m2 || options.cdn) { // ignore non-Iframely hosts such as s.imgur.com/min/embed.js\n iframely.CDN = options.cdn || m2[1];\n }\n\n if (options.cancel) {\n if (options.cancel === '0' || options.cancel === 'false') {\n iframely.RECOVER_HREFS_ON_CANCEL = true;\n }\n delete options.cancel;\n }\n\n if (Object.keys(options).length > 0) {\n // give preferrence to CDN from scripts that have query-string. \n // CDN is most critical for embeds with empty data-iframely-url\n // and those should have at least ?api_key... in script src\n\n return options;\n } // or keep searching\n }\n }\n // should have exited by now if any querystring found...\n return {};\n}\n\nfunction requestSizeOfExistingIframes(domains) {\n\n var iframes = document.querySelectorAll('iframe[src*=\"' + (domains || iframely.DOMAINS).join('\"], iframe[src*=\"') + '\"]');\n for(var i = 0; i < iframes.length; i++) {\n var iframe = iframes[i];\n var src = iframe.src;\n if (src.match(/^(https?:)?\\/\\/[^/]+\\/api\\/iframe\\?.+/)\n || src.match(/^(https?:)?\\/\\/[^/]+\\/\\w+(\\?.*)?$/)) {\n messaging.postMessage({\n method: 'getSize'\n }, '*', iframe.contentWindow);\n }\n }\n} \n\nfunction nonTextChildCount(element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n var text = el.textContent || el.innerText;\n text = text.replace(/\\s|\\n/g, '');\n if (text) {\n // Do not skip text node with text.\n count++;\n }\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n count++;\n }\n }\n return count;\n}\n\nfunction containsString(list, findValue) {\n var value, i = 0;\n while (i < list.length) {\n value = list[i];\n\n if (value == findValue) {\n return true;\n }\n\n if (value && value.test && value.test(findValue)) {\n return true;\n }\n\n i++;\n }\n}\n\nvar parseQueryString = exports.parseQueryString = function(url, allowed_query_string) {\n var query = url.match(/\\?(.+)/i);\n if (query) {\n query = query[1];\n var data = query.split('&');\n var result = {};\n for(var i=0; i= 0;\n }\n return found && el;\n }\n\n var parentNode = widget.maxWidthWrapper && widget.maxWidthWrapper.parentNode;\n var naNode = widget.maxWidthWrapper;\n\n // Try remove by parentClass first.\n if (iframely.config && iframely.config.parent) {\n // Remove by parent class.\n var parentElement = findParent(widget.maxWidthWrapper, iframely.config.parent);\n\n if (parentElement) {\n parentNode = parentElement.parentNode;\n naNode = parentElement;\n }\n }\n\n if (widget.url) {\n var text = widget.iframe && (widget.iframe.textContent || widget.iframe.innerText);\n\n iframely.triggerAsync('cancel', widget.url, parentNode, text, naNode.nextSibling);\n }\n // Re-creating a link if people had it as text is now deprecated (see in deprecated.js)\n // New use: iframely.on('cancel', function(url, parentNode, text) {...} );\n\n parentNode.removeChild(naNode);\n};\n\n//# sourceURL=webpack:///./widget-cancel.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n if (message.method === 'cancelWidget') { \n iframely.cancelWidget(widget);\n }\n});\n\niframely.cancelWidget = function(widget) {\n\n if (!widget) {\n console.warn('iframely.cancelWidget called without widget param');\n return;\n }\n\n function findParent(el, className) {\n var found = false;\n while(!found && el.parentNode) {\n el = el.parentNode;\n found = el.className && el.className.split(' ').indexOf(className) >= 0;\n }\n return found && el;\n }\n\n var parentNode = widget.maxWidthWrapper && widget.maxWidthWrapper.parentNode;\n var naNode = widget.maxWidthWrapper;\n\n // Try remove by parentClass first.\n if (iframely.config && iframely.config.parent) {\n // Remove by parent class.\n var parentElement = findParent(widget.maxWidthWrapper, iframely.config.parent);\n\n if (parentElement) {\n parentNode = parentElement.parentNode;\n naNode = parentElement;\n }\n }\n\n if (widget.url) {\n var text = widget.iframe && (widget.iframe.textContent || widget.iframe.innerText);\n\n iframely.triggerAsync('cancel', widget.url, parentNode, text, naNode.nextSibling);\n }\n // Re-creating a link if people had it as text is now deprecated (see in deprecated.js)\n // New use: iframely.on('cancel', function(url, parentNode, text) {...} );\n\n parentNode.removeChild(naNode);\n};\n\n//# sourceURL=webpack:///./widget-cancel.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./widget-click.js":
+/***/ "./widget-click.js"
/*!*************************!*\
!*** ./widget-click.js ***!
\*************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n if (message.method === 'open-href' || message.method === 'click') {\n iframely.trigger(message.method, message.href);\n }\n});\n\n// Do not override user defined handler.\nif (!iframely.openHref) {\n iframely.openHref = function(href) {\n if (href.indexOf(window.location.origin) === 0) {\n // Redirect top on same origin.\n window.location.href = href;\n } else {\n // Open new tab on another origin.\n window.open(href, '_blank', 'noopener');\n }\n };\n}\n\niframely.on('open-href', function(href) {\n iframely.triggerAsync('click', href);\n iframely.openHref(href);\n});\n\n//# sourceURL=webpack:///./widget-click.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n if (message.method === 'open-href' || message.method === 'click') {\n iframely.trigger(message.method, message.href);\n }\n});\n\n// Do not override user defined handler.\nif (!iframely.openHref) {\n iframely.openHref = function(href) {\n if (href.indexOf(window.location.origin) === 0) {\n // Redirect top on same origin.\n window.location.href = href;\n } else {\n // Open new tab on another origin.\n window.open(href, '_blank', 'noopener');\n }\n };\n}\n\niframely.on('open-href', function(href) {\n iframely.triggerAsync('click', href);\n iframely.openHref(href);\n});\n\n//# sourceURL=webpack:///./widget-click.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./widget-options.js":
+/***/ "./widget-options.js"
/*!***************************!*\
!*** ./widget-options.js ***!
\***************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n if (message.method === 'setIframelyEmbedOptions') {\n // console.log('setIframelyEmbedOptions', message.data);\n iframely.trigger('options', widget, message.data);\n }\n});\n\n//# sourceURL=webpack:///./widget-options.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n if (message.method === 'setIframelyEmbedOptions') {\n iframely.trigger('options', widget, message.data);\n }\n});\n\n\n//# sourceURL=webpack:///./widget-options.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./widget-resize.js":
+/***/ "./widget-resize.js"
/*!**************************!*\
!*** ./widget-resize.js ***!
\**************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n\n if (message.method === 'setIframelyWidgetSize' \n || message.method === 'resize' \n || message.method === 'setIframelyEmbedData' \n || message.type === 'embed-size'\n || message.context === 'iframe.resize') {\n\n var frame_styles = null;\n\n if (message.data && message.data.media && message.data.media.frame_style) {\n\n message.data.media.frame_style.split(';').forEach(function(str) {\n\n if(str.trim() !== '' && str.indexOf(':') > -1) {\n var props = str.split(':');\n if (props.length === 2) {\n frame_styles = frame_styles || {};\n frame_styles[props[0].trim()] = props[1].trim();\n }\n }\n });\n\n widgetDecorate(widget, frame_styles);\n\n } else if (message.method === 'setIframelyEmbedData') {\n\n // setIframelyEmbedData always sets frame_style. If not - reset.\n // setIframelyEmbedData without message.data resets border.\n widgetDecorate(widget, null);\n }\n\n var media = message.data && message.data.media;\n if (!media && message.height) {\n media = {\n height: message.height,\n 'max-width': 'keep'\n };\n }\n\n widgetResize(widget, media);\n }\n});\n\n// All frame_style attributes.\nvar resetWrapperBorderStyles = {'border': '', 'border-radius': '', 'box-shadow': '', 'overflow': ''};\nvar resetIframeBorderStyles = {'border': '0', 'border-radius': '', 'box-shadow': '', 'overflow': ''};\n\nfunction widgetDecorate(widget, styles) {\n\n if (styles && widget && widget.iframe) {\n\n if (styles['border-radius']) {\n // fix for Chrome?\n styles.overflow = 'hidden';\n utils.setStyles(widget.aspectWrapper, styles);\n } else {\n utils.setStyles(widget.iframe, styles);\n }\n\n } else if (!styles && widget && widget.iframe) {\n\n utils.setStyles(widget.aspectWrapper, resetWrapperBorderStyles);\n utils.setStyles(widget.iframe, resetIframeBorderStyles);\n }\n}\n\nfunction getTotalBorderWidth(widget) {\n\n // Get frame style from iframe or aspect wrapper as in widgetDecorate for Chrome fix.\n var frameStylesBorder = \n (widget.iframe && widget.iframe.style.border) \n || (widget.aspectWrapper && widget.aspectWrapper.style.border);\n\n // Get iframe border width from frame style.\n var borderWidth = frameStylesBorder && frameStylesBorder.match(/(\\d+)px/) || 0;\n if (borderWidth) {\n borderWidth = parseInt(borderWidth[1]);\n // For width and height border size will be 2x.\n borderWidth = borderWidth * 2;\n }\n\n return borderWidth;\n}\n\nfunction widgetResize(widget, media) {\n\n if (media && Object.keys(media).length > 0 && widget) {\n\n var borderWidth = getTotalBorderWidth(widget);\n\n var oldIframeHeight = window.getComputedStyle && window.getComputedStyle(widget.iframe).getPropertyValue('height');\n\n\n var maxWidth = media['max-width'];\n if (typeof maxWidth === 'number') {\n // Can be max-width: 56vh.\n maxWidth += borderWidth;\n }\n\n utils.setStyles(widget.maxWidthWrapper, {\n 'max-width': maxWidth,\n 'min-width': media['min-width'] && (media['min-width'] + borderWidth),\n width: media.width && (media.width + borderWidth)\n });\n\n if (media.scrolling && widget.iframe) {\n widget.iframe.setAttribute('scrolling', media.scrolling);\n }\n\n var aspectRatio = media['aspect-ratio'];\n\n // If no aspect and height - do not change aspect wrapper.\n if (aspectRatio || media.height) {\n utils.setStyles(widget.aspectWrapper, {\n paddingBottom: aspectRatio ? (Math.round(1000 * 100 / aspectRatio) / 1000 + '%') : 0, // if fixed-size, it will get set to 0\n paddingTop: aspectRatio && media['padding-bottom'], // if a fixed-height padding at the bottom of responsive div is required\n height: aspectRatio ? 0 : (media.height && (media.height + borderWidth)) // if defined\n });\n }\n\n\n var currentHeight = window.getComputedStyle && window.getComputedStyle(widget.iframe).getPropertyValue('height');\n\n if (oldIframeHeight && oldIframeHeight !== currentHeight) {\n iframely.triggerAsync('heightChanged', widget.iframe, oldIframeHeight, currentHeight);\n }\n\n }\n}\n\n//# sourceURL=webpack:///./widget-resize.js?");
+eval("{var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n\n if (message.method === 'setIframelyWidgetSize' \n || message.method === 'resize' \n || message.method === 'setIframelyEmbedData' \n || message.type === 'embed-size'\n || message.context === 'iframe.resize') {\n\n var frame_styles = null;\n\n if (message.data && message.data.media && message.data.media.frame_style) {\n\n message.data.media.frame_style.split(';').forEach(function(str) {\n\n if(str.trim() !== '' && str.indexOf(':') > -1) {\n var props = str.split(':');\n if (props.length === 2) {\n frame_styles = frame_styles || {};\n frame_styles[props[0].trim()] = props[1].trim();\n }\n }\n });\n\n widgetDecorate(widget, frame_styles);\n\n } else if (message.method === 'setIframelyEmbedData') {\n\n // setIframelyEmbedData always sets frame_style. If not - reset.\n // setIframelyEmbedData without message.data resets border.\n widgetDecorate(widget, null);\n }\n\n var media = message.data && message.data.media;\n if (!media && message.height) {\n media = {\n height: message.height,\n 'max-width': 'keep'\n };\n }\n\n widgetResize(widget, media);\n }\n});\n\n// All frame_style attributes.\nvar resetWrapperBorderStyles = {'border': '', 'border-radius': '', 'box-shadow': '', 'overflow': ''};\nvar resetIframeBorderStyles = {'border': '0', 'border-radius': '', 'box-shadow': '', 'overflow': ''};\n\nfunction widgetDecorate(widget, styles) {\n\n if (styles && widget && widget.iframe) {\n\n if (styles['border-radius']) {\n // fix for Chrome?\n styles.overflow = 'hidden';\n utils.setStyles(widget.aspectWrapper, styles);\n } else {\n utils.setStyles(widget.iframe, styles);\n }\n\n } else if (!styles && widget && widget.iframe) {\n\n utils.setStyles(widget.aspectWrapper, resetWrapperBorderStyles);\n utils.setStyles(widget.iframe, resetIframeBorderStyles);\n }\n}\n\nfunction getTotalBorderWidth(widget) {\n\n // Get frame style from iframe or aspect wrapper as in widgetDecorate for Chrome fix.\n var frameStylesBorder = \n (widget.iframe && widget.iframe.style.border) \n || (widget.aspectWrapper && widget.aspectWrapper.style.border);\n\n // Get iframe border width from frame style.\n var borderWidth = frameStylesBorder && frameStylesBorder.match(/(\\d+)px/) || 0;\n if (borderWidth) {\n borderWidth = parseInt(borderWidth[1]);\n // For width and height border size will be 2x.\n borderWidth = borderWidth * 2;\n }\n\n return borderWidth;\n}\n\nfunction widgetResize(widget, media) {\n\n if (media && Object.keys(media).length > 0 && widget) {\n\n var borderWidth = getTotalBorderWidth(widget);\n\n var oldIframeHeight = window.getComputedStyle && window.getComputedStyle(widget.iframe).getPropertyValue('height');\n\n\n var maxWidth = media['max-width'];\n if (typeof maxWidth === 'number') {\n // Can be max-width: 56vh.\n maxWidth += borderWidth;\n }\n\n utils.setStyles(widget.maxWidthWrapper, {\n 'max-width': maxWidth,\n 'min-width': media['min-width'] && (media['min-width'] + borderWidth),\n width: media.width && (media.width + borderWidth)\n });\n\n if (media.scrolling && widget.iframe) {\n widget.iframe.setAttribute('scrolling', media.scrolling);\n }\n\n var aspectRatio = media['aspect-ratio'];\n\n // If no aspect and height - do not change aspect wrapper.\n if (aspectRatio || media.height) {\n utils.setStyles(widget.aspectWrapper, {\n paddingBottom: aspectRatio ? (Math.round(1000 * 100 / aspectRatio) / 1000 + '%') : 0, // if fixed-size, it will get set to 0\n paddingTop: aspectRatio && media['padding-bottom'], // if a fixed-height padding at the bottom of responsive div is required\n height: aspectRatio ? 0 : (media.height && (media.height + borderWidth)) // if defined\n });\n }\n\n\n var currentHeight = window.getComputedStyle && window.getComputedStyle(widget.iframe).getPropertyValue('height');\n\n if (oldIframeHeight && oldIframeHeight !== currentHeight) {\n iframely.triggerAsync('heightChanged', widget.iframe, oldIframeHeight, currentHeight);\n }\n\n }\n}\n\n\n//# sourceURL=webpack:///./widget-resize.js?\n}");
-/***/ })
+/***/ }
-/******/ });
\ No newline at end of file
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ if (!(moduleId in __webpack_modules__)) {
+/******/ delete __webpack_module_cache__[moduleId];
+/******/ var e = new Error("Cannot find module '" + moduleId + "'");
+/******/ e.code = 'MODULE_NOT_FOUND';
+/******/ throw e;
+/******/ }
+/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/global */
+/******/ (() => {
+/******/ __webpack_require__.g = (function() {
+/******/ if (typeof globalThis === 'object') return globalThis;
+/******/ try {
+/******/ return this || new Function('return this')();
+/******/ } catch (e) {
+/******/ if (typeof window === 'object') return window;
+/******/ }
+/******/ })();
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // startup
+/******/ // Load entry module and return exports
+/******/ // This entry module can't be inlined because the eval devtool is used.
+/******/ var __webpack_exports__ = __webpack_require__("./index-options.js");
+/******/
+/******/ })()
+;
\ No newline at end of file
diff --git a/dist/embed-options.min.js b/dist/embed-options.min.js
index c8a0726..0b983c2 100644
--- a/dist/embed-options.min.js
+++ b/dist/embed-options.min.js
@@ -1 +1 @@
-!function(e){var t={};function n(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(a,r,function(t){return e[t]}.bind(null,r));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=31)}([function(e,t){var n=window.iframely=window.iframely||{};n.config=n.config||{},e.exports=n},function(e,t,n){var a=n(0),r=n(2);a.on("init",(function(){a.extendOptions(function(){for(var e=document.querySelectorAll('script[src*="embed.js"], script[src*="iframely.js"]'),t=0;t0)return r}}return{}}()),function(){var e=document.getElementById("iframely-styles");if(!e){var t=".iframely-responsive{top:0;left:0;width:100%;height:0;position:relative;padding-bottom:56.25%;box-sizing:border-box;}.iframely-responsive>*{top:0;left:0;width:100%;height:100%;position:absolute;border:0;box-sizing:border-box;}";(e=document.createElement("style")).id="iframely-styles",e.type="text/css",o(e),e.styleSheet?e.styleSheet.cssText=t:e.innerHTML=t,document.getElementsByTagName("head")[0].appendChild(e)}}(),a.config.theme&&a.setTheme(a.config.theme),function(e){for(var t=document.querySelectorAll('iframe[src*="'+(e||a.DOMAINS).join('"], iframe[src*="')+'"]'),n=0;n2||t&&n.getAttribute("class")!==a.ASPECT_WRAPPER_CLASS||!t&&"relative"!==n.style.position&&n.getAttribute("class")!==a.ASPECT_WRAPPER_CLASS)){var r=n.parentNode;if(!(!r||"DIV"!==r.nodeName||c(r)>1||t&&r.getAttribute("class")&&-1===r.getAttribute("class").split(" ").indexOf(a.MAXWIDTH_WRAPPER_CLASS)||!t&&r.getAttribute("class")&&!r.getAttribute("class").match(/iframely/i)))return{aspectWrapper:n,maxWidthWrapper:r}}};t.addDefaultWrappers=function(e){var t=e.parentNode,n=document.createElement("div");n.className=a.MAXWIDTH_WRAPPER_CLASS;var r=document.createElement("div");return r.className=a.ASPECT_WRAPPER_CLASS,n.appendChild(r),t.insertBefore(n,e),{aspectWrapper:r,maxWidthWrapper:n}},t.getWidget=function(e){var t=i(e);if(t){var n={iframe:e,aspectWrapper:t.aspectWrapper,maxWidthWrapper:t.maxWidthWrapper};if("A"===e.nodeName&&e.hasAttribute("href"))n.url=e.getAttribute("href");else if(e.hasAttribute("src")&&/url=/.test(e.getAttribute("src"))){var a=s(e.getAttribute("src"));a.url&&(n.url=a.url)}return n}},a.getElementComputedStyle=function(e,t){return window.getComputedStyle&&window.getComputedStyle(e).getPropertyValue(t)},t.setStyles=function(e,t){e&&Object.keys(t).forEach((function(n){var r=t[n];("number"==typeof r||"string"==typeof r&&/^(\d+)?\.?(\d+)$/.test(r))&&(r+="px");var i=e.style[n];window.getComputedStyle&&(a.getElementComputedStyle(e,n)==r||"iframely-responsive"==e.className&&"paddingBottom"===n&&!i&&/^56\.2\d+%$/.test(r)||"max-width"===n&&"keep"===r)||(e.style[n]=r||"")}))};var o=t.applyNonce=function(e){a.config.nonce&&(e.nonce=a.config.nonce)};var l=t.addQueryString=function(e,t){var n="";return Object.keys(t).forEach((function(a){var r=t[a];if("[object Array]"===Object.prototype.toString.call(r)){var i=r.map((function(e){return a+"="+encodeURIComponent(e)}));n+="&"+i.join("&")}else void 0!==r&&-1===e.indexOf(a+"=")&&("boolean"==typeof r&&"_"!==a.charAt(0)&&(r=r?1:0),n+="&"+a+"="+encodeURIComponent(r))})),e+(""!==n?(e.indexOf("?")>-1?"&":"?")+n.replace(/^&/,""):"")};function c(e){for(var t=0,n=0;n-1?t?"IFRAME"===t.tagName?i(t,e):o(t,e):(a.extendOptions({theme:e}),o(document,e),a.trigger("set-theme",e)):console.warn('Using iframely.setTheme with not supported theme: "'+e+'". Supported themes are: '+a.SUPPORTED_THEMES.join(", "))}},function(e,t,n){var a=n(1),r=n(0),i={};function o(e,t,n){var i,o=e.cancel,l=e.shadow,p=e.renderEvent,s=a.getIframeWrapper(t,!0);if(o)i=a.getWidget(t),r.cancelWidget(i||{maxWidthWrapper:t,iframe:t,url:t.getAttribute("href")});else{var d,u;if((i=document.createElement("div")).innerHTML=e.html,s&&!p?(d=s.aspectWrapper.parentNode,u=s.aspectWrapper,s.maxWidthWrapper.removeAttribute("style")):(d=t.parentNode,u=t),l){var f=document.createElement("div"),m=f.attachShadow({mode:"open"});m.appendChild(i);var _={shadowRoot:m,shadowContainer:f,container:d,context:e.context,stylesIds:e.stylesIds,stylesDict:n.commonShadowStyles};r.trigger("import-shadow-widget-before-render",_),d.insertBefore(f,u),r.trigger("import-shadow-widget-after-render",_)}else d.insertBefore(i,u),function e(t){function n(e){var n=e.text||e.textContent||e.innerHTML||"",r=a.createScript();r.type="text/javascript";for(var i=0;i4&&(t=null);var a=t&&t.parentNode;a&&a.getAttribute("class")&&a.getAttribute("class").split(" ").indexOf(r.MAXWIDTH_WRAPPER_CLASS)>-1&&(t.removeAttribute("style"),t.removeAttribute("class"),a.removeAttribute("style"))}r.on("load",(function(e){if(!e&&!1!==r.config.import&&document.head.attachShadow&&document.location&&(r.debug||"http:"===document.location.protocol||"https:"===document.location.protocol)&&!r.config.playerjs&&!r.config.lazy&&!r.import){var t=document.querySelectorAll("a[data-iframely-url]:not([data-import-uri])");t.length>1&&function(e){var t=a.createScript(),n=[],o=[],c=null;function p(e,t){i[e]||(i[e]=[]),i[e].push(t)}function s(e){var t=e.getAttribute("data-iframely-url"),i=t.match(r.ID_RE),l=i&&i[1],s=a.parseQueryString(t,r.SUPPORTED_QUERY_STRING.concat("url")),d=s.url;delete s.url;var u="0"===s.import||"false"===s.import||"1"===s.playerjs||"true"===s.playerjs;if(!u){var f=t.match(r.BASE_RE);s.CDN=f&&f[0],c?JSON.stringify(s,Object.keys(s).sort())!==JSON.stringify(c,Object.keys(c).sort())&&(u=!0):c=s}if(u)r.trigger("load",e);else if(l)e.setAttribute("data-import-uri",l),-1===o.indexOf(l)&&o.push(l),p(l,e);else{d||(d=e.getAttribute("href")),(c.key||c.api_key||r.config.api_key||r.config.key)&&d?(e.setAttribute("data-import-uri",d),-1===n.indexOf(d)&&n.push(d),p(d,e)):r.trigger("load",e)}}for(var d=0;d0||o.length>0?((c=c||{}).touch=r.isTouch(),c.flash=function(){var e=!1;try{var t=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");e=!!t}catch(t){e=!(!navigator.mimeTypes||null==navigator.mimeTypes["application/x-shockwave-flash"]||!navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)}return e}(),c.app=1,r.config.theme&&(c.theme=r.config.theme),n.length>0&&(c.uri=n),o.length>0&&(c.ids=o.join("&")),c.v=r.VERSION,t.src=a.getEndpoint("/api/import/v2",c,r.SUPPORTED_QUERY_STRING),t.onerror=function(){l()},document.head.appendChild(t),r.import=t):(l(),r.trigger("load"))}(t)}})),r.on("load",(function(e,t){if(e&&e.uri&&(e.html||e.cancel)){var n=i[e.uri];if(n)for(var a=0;a1&&function(e,t){for(var n=0,a=0;a=0;return n&&e}(e.maxWidthWrapper,a.config.parent);r&&(t=r.parentNode,n=r)}if(e.url){var i=e.iframe&&(e.iframe.textContent||e.iframe.innerText);a.triggerAsync("cancel",e.url,t,i,n.nextSibling)}t.removeChild(n)}else console.warn("iframely.cancelWidget called without widget param")}},function(e,t,n){var a=n(1),r=n(0);r.on("message",(function(e,t){if("setIframelyWidgetSize"===t.method||"resize"===t.method||"setIframelyEmbedData"===t.method||"embed-size"===t.type||"iframe.resize"===t.context){var n=null;t.data&&t.data.media&&t.data.media.frame_style?(t.data.media.frame_style.split(";").forEach((function(e){if(""!==e.trim()&&e.indexOf(":")>-1){var t=e.split(":");2===t.length&&((n=n||{})[t[0].trim()]=t[1].trim())}})),l(e,n)):"setIframelyEmbedData"===t.method&&l(e,null);var i=t.data&&t.data.media;!i&&t.height&&(i={height:t.height,"max-width":"keep"}),function(e,t){if(t&&Object.keys(t).length>0&&e){var n=function(e){var t=e.iframe&&e.iframe.style.border||e.aspectWrapper&&e.aspectWrapper.style.border,n=t&&t.match(/(\d+)px/)||0;n&&(n=parseInt(n[1]),n*=2);return n}(e),i=window.getComputedStyle&&window.getComputedStyle(e.iframe).getPropertyValue("height"),o=t["max-width"];"number"==typeof o&&(o+=n),a.setStyles(e.maxWidthWrapper,{"max-width":o,"min-width":t["min-width"]&&t["min-width"]+n,width:t.width&&t.width+n}),t.scrolling&&e.iframe&&e.iframe.setAttribute("scrolling",t.scrolling);var l=t["aspect-ratio"];(l||t.height)&&a.setStyles(e.aspectWrapper,{paddingBottom:l?Math.round(1e5/l)/1e3+"%":0,paddingTop:l&&t["padding-bottom"],height:l?0:t.height&&t.height+n});var c=window.getComputedStyle&&window.getComputedStyle(e.iframe).getPropertyValue("height");i&&i!==c&&r.triggerAsync("heightChanged",e.iframe,i,c)}}(e,i)}}));var i={border:"","border-radius":"","box-shadow":"",overflow:""},o={border:"0","border-radius":"","box-shadow":"",overflow:""};function l(e,t){t&&e&&e.iframe?t["border-radius"]?(t.overflow="hidden",a.setStyles(e.aspectWrapper,t)):a.setStyles(e.iframe,t):!t&&e&&e.iframe&&(a.setStyles(e.aspectWrapper,i),a.setStyles(e.iframe,o))}},function(e,t,n){var a=n(0);a.on("message",(function(e,t){"open-href"!==t.method&&"click"!==t.method||a.trigger(t.method,t.href)})),a.openHref||(a.openHref=function(e){0===e.indexOf(window.location.origin)?window.location.href=e:window.open(e,"_blank","noopener")}),a.on("open-href",(function(e){a.triggerAsync("click",e),a.openHref(e)}))},function(e,t,n){var a=n(0);a.on("message",(function(e,t){"setIframelyEmbedOptions"===t.method&&a.trigger("options",e,t.data)}))},function(e,t,n){var a=n(0);a.widgets=a.widgets||{},a.widgets.load=a.load,a.events||(a.events={},a.events.on=a.on,a.events.trigger=a.trigger),a.on("cancel",(function(e,t,n,r){if(a.RECOVER_HREFS_ON_CANCEL&&!n&&(n=e),e&&t&&n&&""!==n){var i=document.createElement("a");i.setAttribute("href",e),i.setAttribute("target","_blank"),i.setAttribute("rel","noopener"),i.textContent=n,r?t.insertBefore(i,r):t.appendChild(i)}}))},function(e,t,n){var a,r=!!(a=navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./))&&parseInt(a[2],10);n(0).SUPPORT_IFRAME_LOADING_ATTR=r&&r>=77},function(e,t,n){var a=n(0),r=n(20),i=n(22);a.buildOptionsForm=function(e,t,n,a){r({id:e,formContainer:t,options:n,renderer:i,translator:a})},t.iframely=a},function(e,t,n){var a=n(21),r=n(0),i={checkbox:{getValue:function(e){return e[0].checked}},text:{getValue:function(e){var t=e[0],n=t.value;return"number"===t.type&&(n=parseInt(n),isNaN(n)&&(n="")),n},customEvents:function(e,t){var n=e[0];r.addEventListener(n,"click",(function(){n.select()})),r.addEventListener(n,"blur",t),r.addEventListener(n,"keyup",(function(e){13===e.keyCode&&t()}))}},radio:{getValue:function(e){var t;return e.forEach((function(e){e.checked&&(t=e)})),t.value}}},o={};e.exports=function(e){var t=e.options,n=e.formContainer;if(n)if(t){var l=a(t,e.translator),c=e.id,p=e.renderer,s=o[c]=o[c]||{};Object.keys(t).forEach((function(e){t.query&&-1!==t.query.indexOf(e)||(s[e]=t[e].value)}));var d=function(e){var t="";return e.forEach((function(e){e.context&&e.context.elements&&(e.context.elementsHtml=d(e.context.elements)),t+=p(e.type,e.context||{})})),t};n.innerHTML=d(l);var u=function(e){e.forEach((function(e){if(e.context&&e.context.elements)u(e.context.elements);else{var t=i[e.type];e.context&&(e.inputs=n.querySelectorAll('[name="'+e.context.key+'"]'),e.inputs.length>0?t&&t.customEvents?t.customEvents(e.inputs,f):e.inputs.forEach((function(e){r.addEventListener(e,"change",f)})):console.warn("No inputs found for option",e.key))}}))};u(l)}else n.innerHTML="";else console.warn("No formContainer in form-builder options",e);function f(){var e=function(){var e={},t=function(n){n.forEach((function(n){if(n.context&&n.context.elements)t(n.context.elements);else if(n.inputs){var a,r=i[n.type];a=r&&r.getValue?r.getValue(n.inputs):n.inputs[0].value,Object.assign(e,n.getQuery(a))}}))};return t(l),e}();Object.keys(s).forEach((function(t){s[t]!==e[t]&&void 0!==e[t]||delete e[t]})),r.trigger("options-changed",c,n,e)}}},function(e,t){var n=/^_./,a=function(e,t){return t&&"function"==typeof t&&t(e)||e};e.exports=function(e,t){if(!e)return[];delete(e=Object.assign({},e)).query;var r=[],i=Object.keys(e),o=0;if(i.forEach((function(i){var l,c,p={},s=e[i];s.key=i;var d,u,f=s.values&&Object.keys(s.values);if(f&&1===f.length&&(c=!0,d=f[0],u=s.values[d]),p.label=a(u||s.label,t),p.key=s.key,c||"boolean"==typeof s.value)p.checked=c?d===s.value||!d&&!s.value:s.value,o++,r.push({type:"checkbox",context:p,order:n.test(i)?0:1,getQuery:function(e){var t;t=c?e?d:"":e;var n={};return c?""===t||(n[s.key]=t):n[s.key]=e,n}});else if("number"!=typeof s.value&&"string"!=typeof s.value||s.values){if(s.values)if(p.value=s.value+"",l=function(e){var t={};return""===e||(t[s.key]=e),t},Object.keys(s.values).length<=3){s.label?p.label=a(s.label,t):p.label=!1;for(var m=0,_=!1,h=Object.values(s.values);m8,m++}p.inline=!_,p.items=[],Object.keys(s.values).forEach((function(e,n){p.items.push({id:p.key+"-"+n,value:e,label:a(s.values[e],t),checked:p.value===e})})),r.push({type:"radio",context:p,order:_?-3:/theme/.test(i)?-1:-2,getQuery:l})}else p.items=[],Object.keys(s.values).forEach((function(e){p.items.push({value:e,label:a(s.values[e],t),checked:p.value===e})})),r.push({type:"select",context:p,order:5,getQuery:l})}else{var g=s.range&&"number"==typeof s.range.min&&"number"==typeof s.range.max,v="number"==typeof s.value;p.value=s.value,l=function(e){var t={};return""===e||(t[s.key]=e),t},g?(p.min=s.range.min,p.max=s.range.max,r.push({type:"range",context:p,order:9,getQuery:l})):(p.placeholder=a(s.placeholder||"",t),p.inputType=v?"number":"text",r.push({type:"text",context:p,order:/start/i.test(i)?7:8,getQuery:l}))}})),r.sort((function(e,t){return e.order-t.order})),r.forEach((function(e){delete e.order})),o>0){var l,c=[];return r.forEach((function(e,t){if("checkbox"===e.type){var a=o>2&&t>0&&!n.test(e.context.key)&&"checkbox"===r[t-1].type&&n.test(r[t-1].context.key);l&&!a||(l=[],c.push({type:"group",context:{elements:l}})),l.push(e)}else c.push(e)})),c}return r}},function(e,t,n){var a={checkbox:n(23),range:n(24),text:n(25),radio:n(26),select:n(27),group:n(28)};e.exports=function(e,t){return(0,a[e])(t)}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,t,n,a,r){var i=t.split("\n"),o=Math.max(a-3,0),l=Math.min(i.length,a+3),c=r(n),p=i.slice(o,l).map((function(e,t){var n=t+o+1;return(n==a?" >> ":" ")+n+"| "+e})).join("\n");throw e.path=c,e.message=(c||"ejs")+":"+a+"\n"+p+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n checked="checked"<% } %>>\n \n <%= label %>\n \n
\n',__filename="src/options/templates/checkbox.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n \n \n '),__line=4,__append(escapeFn(label)),__append("\n \n
\n"),__line=7;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,t,n,a,r){var i=t.split("\n"),o=Math.max(a-3,0),l=Math.min(i.length,a+3),c=r(n),p=i.slice(o,l).map((function(e,t){var n=t+o+1;return(n==a?" >> ":" ")+n+"| "+e})).join("\n");throw e.path=c,e.message=(c||"ejs")+":"+a+"\n"+p+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n
<%= label %>: \n
\n \n
\n
',__filename="src/options/templates/range.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n
'),__append(escapeFn(label)),__append(': \n
\n \n
\n
'),__line=6;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,t,n,a,r){var i=t.split("\n"),o=Math.max(a-3,0),l=Math.min(i.length,a+3),c=r(n),p=i.slice(o,l).map((function(e,t){var n=t+o+1;return(n==a?" >> ":" ")+n+"| "+e})).join("\n");throw e.path=c,e.message=(c||"ejs")+":"+a+"\n"+p+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n
<%= label %>: \n
\n \n
\n
',__filename="src/options/templates/text.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n
'),__append(escapeFn(label)),__append(': \n
\n \n
\n
'),__line=6;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,t,n,a,r){var i=t.split("\n"),o=Math.max(a-3,0),l=Math.min(i.length,a+3),c=r(n),p=i.slice(o,l).map((function(e,t){var n=t+o+1;return(n==a?" >> ":" ")+n+"| "+e})).join("\n");throw e.path=c,e.message=(c||"ejs")+":"+a+"\n"+p+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n <% if (label) { %>\n
\n <%= label %>:\n \n <% } %>\n
\n <% items.forEach(function(subContext) { %>\n
\n checked="checked"<% } %>>\n \n <%= subContext.label %>\n \n
\n <% }); %>\n
\n
',__filename="src/options/templates/radio.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n '),__line=2,label&&(__append('\n
\n '),__line=4,__append(escapeFn(label)),__append(":\n \n "),__line=6),__append('\n
\n '),__line=8,items.forEach((function(e){__append('\n
\n \n \n '),__line=12,__append(escapeFn(e.label)),__append("\n \n
\n "),__line=15})),__append("\n
\n
"),__line=17;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,t,n,a,r){var i=t.split("\n"),o=Math.max(a-3,0),l=Math.min(i.length,a+3),c=r(n),p=i.slice(o,l).map((function(e,t){var n=t+o+1;return(n==a?" >> ":" ")+n+"| "+e})).join("\n");throw e.path=c,e.message=(c||"ejs")+":"+a+"\n"+p+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n
<%= label %>: \n
\n \n <% items.forEach(function(subContext) { %>\n selected="selected"<% } %>><%= subContext.label %> \n <% }); %>\n \n
\n
',__filename="src/options/templates/select.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n
'),__append(escapeFn(label)),__append(': \n
\n \n '),__line=5,items.forEach((function(e){__append('\n "),__append(escapeFn(e.label)),__append(" \n "),__line=7})),__append("\n \n
\n
"),__line=10;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,t,n,a,r){var i=t.split("\n"),o=Math.max(a-3,0),l=Math.min(i.length,a+3),c=r(n),p=i.slice(o,l).map((function(e,t){var n=t+o+1;return(n==a?" >> ":" ")+n+"| "+e})).join("\n");throw e.path=c,e.message=(c||"ejs")+":"+a+"\n"+p+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n
\n <%- elementsHtml %>\n
\n
',__filename="src/options/templates/group.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n
\n '),__line=3,__append(elementsHtml),__append("\n
\n
"),__line=5;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}},,,function(e,t,n){n(3);var a=n(0);a._loaded||(a._loaded=!0,n(4),n(5),n(7),n(8),n(9),n(10),n(11),n(12),n(13),n(14),n(15),n(16),n(17),n(18),n(19),a.trigger("init")),t.iframely=a}]);
\ No newline at end of file
+(()=>{var __webpack_modules__={530(module){module.exports=function(obj){obj||(obj={});var __t,__p="",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,"")}with(obj)__p+='\n \n \n '+(null==(__t=label)?"":__t)+"\n \n
\n";return __p}},30(module){module.exports=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='\n
\n '+__e(elementsHtml)+"\n
\n
";return __p}},510(module){module.exports=function(obj){obj||(obj={});var __t,__p="",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,"")}with(obj)__p+='\n ',label&&(__p+='\n
\n '+(null==(__t=label)?"":__t)+":\n \n "),__p+='\n
\n ',items.forEach(function(e){__p+='\n
\n \n \n '+(null==(__t=e.label)?"":__t)+"\n \n
\n "}),__p+="\n
\n
";return __p}},300(module){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='\n
'+(null==(__t=label)?"":__t)+': \n
\n \n
\n
';return __p}},37(module){module.exports=function(obj){obj||(obj={});var __t,__p="",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,"")}with(obj)__p+='\n
'+(null==(__t=label)?"":__t)+': \n
\n \n ',items.forEach(function(e){__p+='\n "+(null==(__t=e.label)?"":__t)+" \n "}),__p+="\n \n
\n
";return __p}},712(module){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='\n
'+(null==(__t=label)?"":__t)+': \n
\n \n
\n
';return __p}},679(e,t,r){var n=r(672),a=r(774);a.on("load",function(e,t){if(e&&e.nodeName&&"string"==typeof t){var r=document.createElement("a");r.setAttribute("href",t),e.appendChild(r),a.trigger("load",r)}}),a.on("load",function(e){if(!e&&!a.import)for(var t=document.querySelectorAll("a[data-iframely-url]:not([data-import-uri])"),r=0;r4&&(t=null);var n=t&&t.parentNode;n&&n.getAttribute("class")&&n.getAttribute("class").split(" ").indexOf(a.MAXWIDTH_WRAPPER_CLASS)>-1&&(t.removeAttribute("style"),t.removeAttribute("class"),n.removeAttribute("style"))}function s(e){function t(e,t){return e.nodeName&&e.nodeName.toUpperCase()===t.toUpperCase()}function r(t){var r=t.text||t.textContent||t.innerHTML||"",a=n.createScript();a.type="text/javascript";for(var i=0;i1&&function(e){var t=n.createScript(),r=[],o=[],c=null;function s(e,t){i[e]||(i[e]=[]),i[e].push(t)}function d(e){var t=e.getAttribute("data-iframely-url"),i=t.match(a.ID_RE),l=i&&i[1],d=n.parseQueryString(t,a.SUPPORTED_QUERY_STRING.concat("url")),u=d.url;delete d.url;var p="0"===d.import||"false"===d.import||"1"===d.playerjs||"true"===d.playerjs;if(!p){var f=t.match(a.BASE_RE);d.CDN=f&&f[0],c?JSON.stringify(d,Object.keys(d).sort())!==JSON.stringify(c,Object.keys(c).sort())&&(p=!0):c=d}p?a.trigger("load",e):l?(e.setAttribute("data-import-uri",l),-1===o.indexOf(l)&&o.push(l),s(l,e)):(u||(u=e.getAttribute("href")),(c.key||c.api_key||a.config.api_key||a.config.key)&&u?(e.setAttribute("data-import-uri",u),-1===r.indexOf(u)&&r.push(u),s(u,e)):a.trigger("load",e))}for(var u=0;u0||o.length>0?((c=c||{}).touch=a.isTouch(),c.flash=function(){var e=!1;try{e=!!new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(t){e=!(!navigator.mimeTypes||null==navigator.mimeTypes["application/x-shockwave-flash"]||!navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)}return e}(),c.app=1,a.config.theme&&(c.theme=a.config.theme),r.length>0&&(c.uri=r),o.length>0&&(c.ids=o.join("&")),c.v=a.VERSION,t.src=n.getEndpoint("/api/import/v2",c,a.SUPPORTED_QUERY_STRING),t.onerror=function(){l()},document.head.appendChild(t),a.import=t):(l(),a.trigger("load"))}(t)}}),a.on("load",function(e,t){if(e&&e.uri&&(e.html||e.cancel)){var r=i[e.uri];if(r)for(var n=0;n1&&function(e,t){for(var r=0,n=0;n=77},369(e,t,r){var n=r(774),a=r(672);function i(e,t){for(var r,n=0;n0?t&&t.customEvents?t.customEvents(e.inputs,f):e.inputs.forEach(function(e){a.addEventListener(e,"change",f)}):console.warn("No inputs found for option",e.key))}})};p(l)}else r.innerHTML="";else console.warn("No formContainer in form-builder options",e);function f(){var e=function(){var e={},t=function(r){r.forEach(function(r){if(r.context&&r.context.elements)t(r.context.elements);else if(r.inputs){var n,a=i[r.type];n=a&&a.getValue?a.getValue(r.inputs):r.inputs[0].value,Object.assign(e,r.getQuery(n))}})};return t(l),e}();Object.keys(d).forEach(function(t){d[t]!==e[t]&&void 0!==e[t]||delete e[t]}),a.trigger("options-changed",c,r,e)}}},960(e){var t=/^_./,r=function(e,t){return t&&"function"==typeof t&&t(e)||e};e.exports=function(e,n){if(!e)return[];delete(e=Object.assign({},e)).query;var a=[],i=Object.keys(e),o=0;if(i.forEach(function(i){var l,c,s={},d=e[i];d.key=i;var u,p,f=d.values&&Object.keys(d.values);if(f&&1===f.length&&(c=!0,u=f[0],p=d.values[u]),s.label=r(p||d.label,n),s.key=d.key,c||"boolean"==typeof d.value)s.checked=c?u===d.value||!u&&!d.value:d.value,o++,a.push({type:"checkbox",context:s,order:t.test(i)?0:1,getQuery:function(e){var t;t=c?e?u:"":e;var r={};return c?""===t||(r[d.key]=t):r[d.key]=e,r}});else if("number"!=typeof d.value&&"string"!=typeof d.value||d.values){if(d.values)if(s.value=d.value+"",l=function(e){var t={};return""===e||(t[d.key]=e),t},Object.keys(d.values).length<=3){d.label?s.label=r(d.label,n):s.label=!1;for(var m=0,_=!1,h=Object.values(d.values);m8,m++;s.inline=!_,s.items=[],Object.keys(d.values).forEach(function(e,t){s.items.push({id:s.key+"-"+t,value:e,label:r(d.values[e],n),checked:s.value===e})}),a.push({type:"radio",context:s,order:_?-3:/theme/.test(i)?-1:-2,getQuery:l})}else s.items=[],Object.keys(d.values).forEach(function(e){s.items.push({value:e,label:r(d.values[e],n),checked:s.value===e})}),a.push({type:"select",context:s,order:5,getQuery:l})}else{var g=d.range&&"number"==typeof d.range.min&&"number"==typeof d.range.max,v="number"==typeof d.value;s.value=d.value,l=function(e){var t={};return""===e||(t[d.key]=e),t},g?(s.min=d.range.min,s.max=d.range.max,a.push({type:"range",context:s,order:9,getQuery:l})):(s.placeholder=r(d.placeholder||"",n),s.inputType=v?"number":"text",a.push({type:"text",context:s,order:/start/i.test(i)?7:8,getQuery:l}))}}),a.sort(function(e,t){return e.order-t.order}),a.forEach(function(e){delete e.order}),o>0){var l,c=[];return a.forEach(function(e,r){if("checkbox"===e.type){var n=o>2&&r>0&&!t.test(e.context.key)&&"checkbox"===a[r-1].type&&t.test(a[r-1].context.key);l&&!n||(l=[],c.push({type:"group",context:{elements:l}})),l.push(e)}else c.push(e)}),c}return a}},448(e,t,r){var n=r(774),a=r(410),i=r(505);n.buildOptionsForm=function(e,t,r,n){a({id:e,formContainer:t,options:r,renderer:i,translator:n})},t.iframely=n},505(e,t,r){var n={checkbox:r(530),range:r(300),text:r(712),radio:r(510),select:r(37),group:r(30)};e.exports=function(e,t){return(0,n[e])(t)}},908(e,t,r){var n=r(774),a=r(369);function i(e,t){a.postMessage({method:"setTheme",data:t},"*",e.contentWindow)}function o(e,t){for(var r=e.getElementsByTagName("iframe"),n=0;n-1?t?"IFRAME"===t.tagName?i(t,e):o(t,e):(n.extendOptions({theme:e}),o(document,e),n.trigger("set-theme",e)):console.warn('Using iframely.setTheme with not supported theme: "'+e+'". Supported themes are: '+n.SUPPORTED_THEMES.join(", "))}},672(e,t,r){var n=r(774),a=r(369);n.on("init",function(){n.extendOptions(function(){for(var e=document.querySelectorAll('script[src*="embed.js"], script[src*="iframely.js"]'),t=0;t0)return a}}return{}}()),function(){var e="iframely-styles",t=document.getElementById(e);if(!t){var r=".iframely-responsive{top:0;left:0;width:100%;height:0;position:relative;padding-bottom:56.25%;box-sizing:border-box;}.iframely-responsive>*{top:0;left:0;width:100%;height:100%;position:absolute;border:0;box-sizing:border-box;}";(t=document.createElement("style")).id=e,t.type="text/css",o(t),t.styleSheet?t.styleSheet.cssText=r:t.innerHTML=r,document.getElementsByTagName("head")[0].appendChild(t)}}(),n.config.theme&&n.setTheme(n.config.theme),function(e){for(var t=document.querySelectorAll('iframe[src*="'+(e||n.DOMAINS).join('"], iframe[src*="')+'"]'),r=0;r2||t&&r.getAttribute("class")!==n.ASPECT_WRAPPER_CLASS||!t&&"relative"!==r.style.position&&r.getAttribute("class")!==n.ASPECT_WRAPPER_CLASS)){var a=r.parentNode;if(!(!a||"DIV"!==a.nodeName||c(a)>1||t&&a.getAttribute("class")&&-1===a.getAttribute("class").split(" ").indexOf(n.MAXWIDTH_WRAPPER_CLASS)||!t&&a.getAttribute("class")&&!a.getAttribute("class").match(/iframely/i)))return{aspectWrapper:r,maxWidthWrapper:a}}};t.addDefaultWrappers=function(e){var t=e.parentNode,r=document.createElement("div");r.className=n.MAXWIDTH_WRAPPER_CLASS;var a=document.createElement("div");return a.className=n.ASPECT_WRAPPER_CLASS,r.appendChild(a),t.insertBefore(r,e),{aspectWrapper:a,maxWidthWrapper:r}},t.getWidget=function(e){var t=i(e);if(t){var r={iframe:e,aspectWrapper:t.aspectWrapper,maxWidthWrapper:t.maxWidthWrapper};if("A"===e.nodeName&&e.hasAttribute("href"))r.url=e.getAttribute("href");else if(e.hasAttribute("src")&&/url=/.test(e.getAttribute("src"))){var n=d(e.getAttribute("src"));n.url&&(r.url=n.url)}return r}},n.getElementComputedStyle=function(e,t){return window.getComputedStyle&&window.getComputedStyle(e).getPropertyValue(t)},t.setStyles=function(e,t){e&&Object.keys(t).forEach(function(r){var a=t[r];("number"==typeof a||"string"==typeof a&&/^(\d+)?\.?(\d+)$/.test(a))&&(a+="px");var i=e.style[r];window.getComputedStyle&&(n.getElementComputedStyle(e,r)==a||"iframely-responsive"==e.className&&"paddingBottom"===r&&!i&&/^56\.2\d+%$/.test(a)||"max-width"===r&&"keep"===a)||(e.style[r]=a||"")})};var o=t.applyNonce=function(e){n.config.nonce&&(e.nonce=n.config.nonce)},l=t.addQueryString=function(e,t){var r="";return Object.keys(t).forEach(function(n){var a=t[n];if("[object Array]"===Object.prototype.toString.call(a)){var i=a.map(function(e){return n+"="+encodeURIComponent(e)});r+="&"+i.join("&")}else void 0!==a&&-1===e.indexOf(n+"=")&&("boolean"==typeof a&&"_"!==n.charAt(0)&&(a=a?1:0),r+="&"+n+"="+encodeURIComponent(a))}),e+(""!==r?(e.indexOf("?")>-1?"&":"?")+r.replace(/^&/,""):"")};function c(e){for(var t=0,r=0;r=0;return r&&e}(e.maxWidthWrapper,n.config.parent);a&&(t=a.parentNode,r=a)}if(e.url){var i=e.iframe&&(e.iframe.textContent||e.iframe.innerText);n.triggerAsync("cancel",e.url,t,i,r.nextSibling)}t.removeChild(r)}else console.warn("iframely.cancelWidget called without widget param")}},612(e,t,r){var n=r(774);n.on("message",function(e,t){"open-href"!==t.method&&"click"!==t.method||n.trigger(t.method,t.href)}),n.openHref||(n.openHref=function(e){0===e.indexOf(window.location.origin)?window.location.href=e:window.open(e,"_blank","noopener")}),n.on("open-href",function(e){n.triggerAsync("click",e),n.openHref(e)})},742(e,t,r){var n=r(774);n.on("message",function(e,t){"setIframelyEmbedOptions"===t.method&&n.trigger("options",e,t.data)})},850(e,t,r){var n=r(672),a=r(774);a.on("message",function(e,t){if("setIframelyWidgetSize"===t.method||"resize"===t.method||"setIframelyEmbedData"===t.method||"embed-size"===t.type||"iframe.resize"===t.context){var r=null;t.data&&t.data.media&&t.data.media.frame_style?(t.data.media.frame_style.split(";").forEach(function(e){if(""!==e.trim()&&e.indexOf(":")>-1){var t=e.split(":");2===t.length&&((r=r||{})[t[0].trim()]=t[1].trim())}}),l(e,r)):"setIframelyEmbedData"===t.method&&l(e,null);var i=t.data&&t.data.media;!i&&t.height&&(i={height:t.height,"max-width":"keep"}),function(e,t){if(t&&Object.keys(t).length>0&&e){var r=function(e){var t=e.iframe&&e.iframe.style.border||e.aspectWrapper&&e.aspectWrapper.style.border,r=t&&t.match(/(\d+)px/)||0;return r&&(r=parseInt(r[1]),r*=2),r}(e),i=window.getComputedStyle&&window.getComputedStyle(e.iframe).getPropertyValue("height"),o=t["max-width"];"number"==typeof o&&(o+=r),n.setStyles(e.maxWidthWrapper,{"max-width":o,"min-width":t["min-width"]&&t["min-width"]+r,width:t.width&&t.width+r}),t.scrolling&&e.iframe&&e.iframe.setAttribute("scrolling",t.scrolling);var l=t["aspect-ratio"];(l||t.height)&&n.setStyles(e.aspectWrapper,{paddingBottom:l?Math.round(1e5/l)/1e3+"%":0,paddingTop:l&&t["padding-bottom"],height:l?0:t.height&&t.height+r});var c=window.getComputedStyle&&window.getComputedStyle(e.iframe).getPropertyValue("height");i&&i!==c&&a.triggerAsync("heightChanged",e.iframe,i,c)}}(e,i)}});var i={border:"","border-radius":"","box-shadow":"",overflow:""},o={border:"0","border-radius":"","box-shadow":"",overflow:""};function l(e,t){t&&e&&e.iframe?t["border-radius"]?(t.overflow="hidden",n.setStyles(e.aspectWrapper,t)):n.setStyles(e.iframe,t):!t&&e&&e.iframe&&(n.setStyles(e.aspectWrapper,i),n.setStyles(e.iframe,o))}}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var __webpack_exports__={};(()=>{__webpack_require__(331);var e=__webpack_require__(774);e._loaded||(e._loaded=!0,__webpack_require__(54),__webpack_require__(912),__webpack_require__(56),__webpack_require__(908),__webpack_require__(472),__webpack_require__(679),__webpack_require__(573),__webpack_require__(324),__webpack_require__(648),__webpack_require__(850),__webpack_require__(612),__webpack_require__(742),__webpack_require__(916),__webpack_require__(291),__webpack_require__(448),e.trigger("init"))})()})();
\ No newline at end of file
diff --git a/dist/embed.js b/dist/embed.js
index 53569db..75718c6 100644
--- a/dist/embed.js
+++ b/dist/embed.js
@@ -1,309 +1,255 @@
-/******/ (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 = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = "./index.js");
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ "../node_modules/.pnpm/webpack@4.46.0_webpack-cli@3.3.12/node_modules/webpack/buildin/global.js":
-/*!******************************************************************************************************!*\
- !*** ../node_modules/.pnpm/webpack@4.46.0_webpack-cli@3.3.12/node_modules/webpack/buildin/global.js ***!
- \******************************************************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n//# sourceURL=webpack:///../node_modules/.pnpm/webpack@4.46.0_webpack-cli@3.3.12/node_modules/webpack/buildin/global.js?");
-
-/***/ }),
-
-/***/ "./ahref.js":
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+/******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
+
+/***/ "./ahref.js"
/*!******************!*\
!*** ./ahref.js ***!
\******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('load', function(container, href) {\n if (container && container.nodeName && typeof href === 'string') {\n var a = document.createElement('a');\n a.setAttribute('href', href);\n container.appendChild(a);\n iframely.trigger('load', a);\n }\n});\n\niframely.on('load', function(el) {\n\n if (!el && !iframely.import) { \n\n var elements = document.querySelectorAll('a[data-iframely-url]:not([data-import-uri])');\n for(var i = 0; i < elements.length; i++) {\n iframely.trigger('load', elements[i]);\n }\n }\n \n});\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'A' && (el.getAttribute('data-iframely-url') || el.getAttribute('href')) && !el.hasAttribute('data-import-uri')) {\n unfurl(el);\n }\n \n});\n\nfunction unfurl(el) {\n if (!el.getAttribute('data-iframely-url') && !el.getAttribute('href')) {\n return; // isn't valid\n }\n var src;\n\n var dataIframelyUrl = el.getAttribute('data-iframely-url');\n if (dataIframelyUrl && /^((?:https?:)?\\/\\/[^/]+)\\/\\w+/i.test(dataIframelyUrl)) {\n src = utils.getEndpoint(dataIframelyUrl, {\n v: iframely.VERSION,\n app: 1,\n theme: iframely.config.theme\n });\n } else if ((iframely.config.api_key || iframely.config.key) && iframely.CDN) {\n\n if (!el.getAttribute('href')) {\n console.warn('Iframely cannot build embeds: \"href\" attribute missing in', el);\n return;\n }\n\n src = utils.getEndpoint('/api/iframe', {\n url: el.getAttribute('href'),\n v: iframely.VERSION,\n app: 1,\n theme: iframely.config.theme\n }, iframely.SUPPORTED_QUERY_STRING);\n } else {\n console.warn('Iframely cannot build embeds: api key is required as query-string of embed.js');\n }\n\n if (!src) {\n el.removeAttribute('data-iframely-url'); \n } else {\n\n var iframe = document.createElement('iframe');\n\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allow', 'autoplay *; encrypted-media *; ch-prefers-color-scheme *');\n\n if (el.hasAttribute('data-img')) {\n iframe.setAttribute('data-img', el.getAttribute('data-img'));\n }\n\n var isLazy = el.hasAttribute('data-lazy') || el.hasAttribute('data-img') || /&lazy=1/.test(src) || iframely.config.lazy;\n\n // support restoring failed links by its text\n var text = el.textContent || el.innerText;\n \n if (text && text !== '') {\n iframe.textContent = text;\n } \n\n var wrapper = utils.getIframeWrapper(el, true);\n \n if (wrapper) {\n\n // Delete all in aspect wrapper.\n while (wrapper.aspectWrapper.lastChild) {\n wrapper.aspectWrapper.removeChild(wrapper.aspectWrapper.lastChild);\n }\n\n } else {\n wrapper = utils.addDefaultWrappers(el);\n\n var parentNode = el.parentNode;\n parentNode.removeChild(el);\n }\n\n wrapper.aspectWrapper.appendChild(iframe);\n\n if (isLazy) {\n \n // send to lazy iframe flow\n iframe.setAttribute('data-iframely-url', src);\n iframely.trigger('load', iframe);\n\n } else {\n\n iframe.setAttribute('src', src);\n iframely.trigger('iframe-ready', iframe);\t\t\t\n }\n\n\n }\n\n\n}\n\n//# sourceURL=webpack:///./ahref.js?");
+eval("{var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('load', function(container, href) {\n if (container && container.nodeName && typeof href === 'string') {\n var a = document.createElement('a');\n a.setAttribute('href', href);\n container.appendChild(a);\n iframely.trigger('load', a);\n }\n});\n\niframely.on('load', function(el) {\n\n if (!el && !iframely.import) { \n\n var elements = document.querySelectorAll('a[data-iframely-url]:not([data-import-uri])');\n for(var i = 0; i < elements.length; i++) {\n iframely.trigger('load', elements[i]);\n }\n }\n \n});\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'A' && (el.getAttribute('data-iframely-url') || el.getAttribute('href')) && !el.hasAttribute('data-import-uri')) {\n unfurl(el);\n }\n \n});\n\nfunction unfurl(el) {\n if (!el.getAttribute('data-iframely-url') && !el.getAttribute('href')) {\n return; // isn't valid\n }\n var src;\n\n var dataIframelyUrl = el.getAttribute('data-iframely-url');\n if (dataIframelyUrl && /^((?:https?:)?\\/\\/[^/]+)\\/\\w+/i.test(dataIframelyUrl)) {\n src = utils.getEndpoint(dataIframelyUrl, {\n v: iframely.VERSION,\n app: 1,\n theme: iframely.config.theme\n });\n } else if ((iframely.config.api_key || iframely.config.key) && iframely.CDN) {\n\n if (!el.getAttribute('href')) {\n console.warn('Iframely cannot build embeds: \"href\" attribute missing in', el);\n return;\n }\n\n src = utils.getEndpoint('/api/iframe', {\n url: el.getAttribute('href'),\n v: iframely.VERSION,\n app: 1,\n theme: iframely.config.theme\n }, iframely.SUPPORTED_QUERY_STRING);\n } else {\n console.warn('Iframely cannot build embeds: api key is required as query-string of embed.js');\n }\n\n if (!src) {\n el.removeAttribute('data-iframely-url'); \n } else {\n\n var iframe = document.createElement('iframe');\n\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allow', 'autoplay *; encrypted-media *; ch-prefers-color-scheme *');\n\n if (el.hasAttribute('data-img')) {\n iframe.setAttribute('data-img', el.getAttribute('data-img'));\n }\n\n var isLazy = el.hasAttribute('data-lazy') || el.hasAttribute('data-img') || /&lazy=1/.test(src) || iframely.config.lazy;\n\n // support restoring failed links by its text\n var text = el.textContent || el.innerText;\n \n if (text && text !== '') {\n iframe.textContent = text;\n } \n\n var wrapper = utils.getIframeWrapper(el, true);\n \n if (wrapper) {\n\n // Delete all in aspect wrapper.\n while (wrapper.aspectWrapper.lastChild) {\n wrapper.aspectWrapper.removeChild(wrapper.aspectWrapper.lastChild);\n }\n\n } else {\n wrapper = utils.addDefaultWrappers(el);\n\n var parentNode = el.parentNode;\n parentNode.removeChild(el);\n }\n\n wrapper.aspectWrapper.appendChild(iframe);\n\n if (isLazy) {\n \n // send to lazy iframe flow\n iframe.setAttribute('data-iframely-url', src);\n iframely.trigger('load', iframe);\n\n } else {\n\n iframe.setAttribute('src', src);\n iframely.trigger('iframe-ready', iframe);\t\t\t\n }\n\n\n }\n\n\n}\n\n//# sourceURL=webpack:///./ahref.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./const.js":
+/***/ "./const.js"
/*!******************!*\
!*** ./const.js ***!
\******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.VERSION = 1;\n\niframely.ASPECT_WRAPPER_CLASS = 'iframely-responsive';\niframely.MAXWIDTH_WRAPPER_CLASS = 'iframely-embed';\niframely.LOADER_CLASS = 'iframely-loader';\n\niframely.DOMAINS = ['cdn.iframe.ly', 'iframe.ly', 'if-cdn.com', 'iframely.net'];\niframely.CDN = iframely.CDN || iframely.DOMAINS[0]; // default domain, user or script src can change CDN\n\niframely.BASE_RE = /^(?:https?:)?\\/\\/[^/]+/i;\niframely.ID_RE = /^(?:https?:)?\\/\\/[^/]+\\/(\\w+-?\\w+)(?:\\?.*)?$/;\niframely.SCRIPT_RE = /^(?:https?:|file:\\/)?\\/\\/[^/]+(?:.+)?\\/(?:embed|iframely)\\.js(?:[^/]+)?$/i;\niframely.CDN_RE = /^(?:https?:)?\\/\\/([^/]+)\\/(?:embed|iframely)\\.js(?:[^/]+)?$/i;\n\niframely.SUPPORTED_QUERY_STRING = ['api_key', 'key', 'iframe', 'html5', 'playerjs', 'align', 'language', 'media', 'maxwidth', 'maxheight', 'lazy', 'import', 'parent', 'shadow', 'click_to_play', 'autoplay', 'mute', 'card', 'consent', 'theme', /^_.+/];\n\niframely.SUPPORTED_THEMES = ['auto', 'light', 'dark'];\n\niframely.LAZY_IFRAME_SHOW_TIMEOUT = 3000;\niframely.LAZY_IFRAME_FADE_TIMEOUT = 200;\niframely.CLEAR_WRAPPER_STYLES_TIMEOUT = 3000;\n\niframely.RECOVER_HREFS_ON_CANCEL = false;\n\niframely.SHADOW = 'iframely-shadow';\n\n//# sourceURL=webpack:///./const.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.VERSION = 1;\n\niframely.ASPECT_WRAPPER_CLASS = 'iframely-responsive';\niframely.MAXWIDTH_WRAPPER_CLASS = 'iframely-embed';\niframely.LOADER_CLASS = 'iframely-loader';\n\niframely.DOMAINS = ['cdn.iframe.ly', 'iframe.ly', 'if-cdn.com', 'iframely.net'];\niframely.CDN = iframely.CDN || iframely.DOMAINS[0]; // default domain, user or script src can change CDN\n\niframely.BASE_RE = /^(?:https?:)?\\/\\/[^/]+/i;\niframely.ID_RE = /^(?:https?:)?\\/\\/[^/]+\\/(\\w+-?\\w+)(?:\\?.*)?$/;\niframely.SCRIPT_RE = /^(?:https?:|file:\\/)?\\/\\/[^/]+(?:.+)?\\/(?:embed|iframely)\\.js(?:[^/]+)?$/i;\niframely.CDN_RE = /^(?:https?:)?\\/\\/([^/]+)\\/(?:embed|iframely)\\.js(?:[^/]+)?$/i;\n\niframely.SUPPORTED_QUERY_STRING = ['api_key', 'key', 'iframe', 'html5', 'playerjs', 'align', 'language', 'media', 'maxwidth', 'maxheight', 'lazy', 'import', 'parent', 'shadow', 'click_to_play', 'autoplay', 'mute', 'card', 'consent', 'theme', /^_.+/];\n\niframely.SUPPORTED_THEMES = ['auto', 'light', 'dark'];\n\niframely.LAZY_IFRAME_SHOW_TIMEOUT = 3000;\niframely.LAZY_IFRAME_FADE_TIMEOUT = 200;\niframely.CLEAR_WRAPPER_STYLES_TIMEOUT = 3000;\n\niframely.RECOVER_HREFS_ON_CANCEL = false;\n\niframely.SHADOW = 'iframely-shadow';\n\n//# sourceURL=webpack:///./const.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./deprecated.js":
+/***/ "./deprecated.js"
/*!***********************!*\
!*** ./deprecated.js ***!
\***********************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// deprecated. Helper function only, for the reverse compatibility.\niframely.widgets = iframely.widgets || {};\niframely.widgets.load = iframely.load;\n\nif (!iframely.events) {\n iframely.events = {};\n iframely.events.on = iframely.on;\n iframely.events.trigger = iframely.trigger;\n}\n\niframely.on('cancel', function(url, parentNode, text, nextSibling) {\n\n if (iframely.RECOVER_HREFS_ON_CANCEL && !text) {\n text = url;\n }\n\n if (url && parentNode && text && text !== '') {\n var a = document.createElement('a');\n a.setAttribute('href', url);\n a.setAttribute('target', '_blank');\n a.setAttribute('rel', 'noopener');\n a.textContent = text;\n if (nextSibling) {\n parentNode.insertBefore(a, nextSibling);\n } else {\n parentNode.appendChild(a);\n }\n }\n});\n\n//# sourceURL=webpack:///./deprecated.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// deprecated. Helper function only, for the reverse compatibility.\niframely.widgets = iframely.widgets || {};\niframely.widgets.load = iframely.load;\n\nif (!iframely.events) {\n iframely.events = {};\n iframely.events.on = iframely.on;\n iframely.events.trigger = iframely.trigger;\n}\n\niframely.on('cancel', function(url, parentNode, text, nextSibling) {\n\n if (iframely.RECOVER_HREFS_ON_CANCEL && !text) {\n text = url;\n }\n\n if (url && parentNode && text && text !== '') {\n var a = document.createElement('a');\n a.setAttribute('href', url);\n a.setAttribute('target', '_blank');\n a.setAttribute('rel', 'noopener');\n a.textContent = text;\n if (nextSibling) {\n parentNode.insertBefore(a, nextSibling);\n } else {\n parentNode.appendChild(a);\n }\n }\n});\n\n//# sourceURL=webpack:///./deprecated.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./dom-ready.js":
+/***/ "./dom-ready.js"
/*!**********************!*\
!*** ./dom-ready.js ***!
\**********************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("// TODO: rename core.js to ready.js?\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar DOMReady = function(f) {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n // Run always (in case of async script).\n setTimeout(f, 0);\n }\n document['addEventListener'] ? document['addEventListener']('DOMContentLoaded', f) : window.attachEvent('onload', f);\n};\n\nDOMReady(function() {\n\n // Called each time on script load\n if (typeof iframely.config.autorun === 'undefined' || iframely.config.autorun !== false) {\n iframely.trigger('load');\n }\n});\n\n\n//# sourceURL=webpack:///./dom-ready.js?");
+eval("{// TODO: rename core.js to ready.js?\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar DOMReady = function(f) {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n // Run always (in case of async script).\n setTimeout(f, 0);\n }\n document['addEventListener'] ? document['addEventListener']('DOMContentLoaded', f) : window.attachEvent('onload', f);\n};\n\nDOMReady(function() {\n\n // Called each time on script load\n if (typeof iframely.config.autorun === 'undefined' || iframely.config.autorun !== false) {\n iframely.trigger('load');\n }\n});\n\n\n//# sourceURL=webpack:///./dom-ready.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./events.js":
+/***/ "./events.js"
/*!*******************!*\
!*** ./events.js ***!
\*******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("/* WEBPACK VAR INJECTION */(function(global) {var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar nextTick = (function(window, prefixes, i, fnc) {\n while (!fnc && i < prefixes.length) {\n fnc = window[prefixes[i++] + 'equestAnimationFrame'];\n }\n return (fnc && fnc.bind(window)) || window.setImmediate || function(fnc) {window.setTimeout(fnc, 0);};\n})(typeof window !== 'undefined' ? window : global, 'r webkitR mozR msR oR'.split(' '), 0);\n\nvar callbacksStack = {};\niframely.on = function(event, cb) {\n var events = callbacksStack[event] = callbacksStack[event] || [];\n events.push(cb);\n};\n\nfunction trigger(event, async, args) {\n var events = callbacksStack[event] || [];\n events.forEach(function(cb) {\n if (async) {\n nextTick(function() {\n cb.apply(iframely, args);\n });\n } else {\n cb.apply(iframely, args);\n }\n });\n\n if (event === 'init') {\n // everything inited, let's clear the callstack, just in case\n // TODO: not good.\n callbacksStack[event] = [];\n }\n}\n\niframely.trigger = function(event) {\n var args = Array.prototype.slice.call(arguments, 1);\n trigger(event, false, args);\n};\n\niframely.triggerAsync = function(event) {\n var args = Array.prototype.slice.call(arguments, 1);\n trigger(event, true, args);\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/.pnpm/webpack@4.46.0_webpack-cli@3.3.12/node_modules/webpack/buildin/global.js */ \"../node_modules/.pnpm/webpack@4.46.0_webpack-cli@3.3.12/node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./events.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar nextTick = (function(window, prefixes, i, fnc) {\n while (!fnc && i < prefixes.length) {\n fnc = window[prefixes[i++] + 'equestAnimationFrame'];\n }\n return (fnc && fnc.bind(window)) || window.setImmediate || function(fnc) {window.setTimeout(fnc, 0);};\n})(typeof window !== 'undefined' ? window : __webpack_require__.g, 'r webkitR mozR msR oR'.split(' '), 0);\n\nvar callbacksStack = {};\niframely.on = function(event, cb) {\n var events = callbacksStack[event] = callbacksStack[event] || [];\n events.push(cb);\n};\n\nfunction trigger(event, async, args) {\n var events = callbacksStack[event] || [];\n events.forEach(function(cb) {\n if (async) {\n nextTick(function() {\n cb.apply(iframely, args);\n });\n } else {\n cb.apply(iframely, args);\n }\n });\n\n if (event === 'init') {\n // everything inited, let's clear the callstack, just in case\n // TODO: not good.\n callbacksStack[event] = [];\n }\n}\n\niframely.trigger = function(event) {\n var args = Array.prototype.slice.call(arguments, 1);\n trigger(event, false, args);\n};\n\niframely.triggerAsync = function(event) {\n var args = Array.prototype.slice.call(arguments, 1);\n trigger(event, true, args);\n};\n\n//# sourceURL=webpack:///./events.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./iframely.js":
+/***/ "./iframely.js"
/*!*********************!*\
!*** ./iframely.js ***!
\*********************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+(module) {
-eval("var iframely = window.iframely = window.iframely || {};\niframely.config = iframely.config || {};\n\nmodule.exports = iframely;\n\n//# sourceURL=webpack:///./iframely.js?");
+eval("{var iframely = window.iframely = window.iframely || {};\niframely.config = iframely.config || {};\n\nmodule.exports = iframely;\n\n//# sourceURL=webpack:///./iframely.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./import.js":
+/***/ "./import.js"
/*!*******************!*\
!*** ./import.js ***!
\*******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// widgetsCache is used from inside import doc for js callbacks and custom features\nvar widgetsCache = {};\n\niframely.on('load', function(el) {\n\n // load once, if import is not in process and only if query-string from script src has not disabled import\n if (!el && iframely.config.import !== false \n && isImportAble()\n && !iframely.import) {\n\n var elements = document.querySelectorAll('a[data-iframely-url]:not([data-import-uri])');\n if (elements.length > 1) {\n makeImportAPICall(elements);\n }\n }\n\n});\n\niframely.on('load', function(widget, importOptions) {\n\n if (widget && widget.uri && (widget.html || widget.cancel)) {\n\n var els = widgetsCache[widget.uri];\n // alternatively, could as well do querySelectorAll('a[data-iframely-url][data-import=\"' + template.getAttribute('data-uri') + '\"')\n\n if (els) {\n for (var i = 0; i < els.length; i++) {\n loadImportWidget(widget, els[i], importOptions);\n }\n }\n\n delete widgetsCache[widget.uri];\n }\n});\n\nfunction makeImportAPICall(elements) {\n var script = utils.createScript();\n\n var uris = [];\n var ids = [];\n \n var import_options = null; // will be populated from first element; or will remain as null if no params in elements...\n\n // couple helper functions first\n\n function pushElement(uri, el) {\n if (!widgetsCache[uri]) {\n widgetsCache[uri] = [];\n }\n\n widgetsCache[uri].push(el);\n }\n\n function queueElement(el) {\n var src = el.getAttribute('data-iframely-url');\n\n var mId = src.match(iframely.ID_RE);\n var id = mId && mId[1];\n\n var options = utils.parseQueryString(src, iframely.SUPPORTED_QUERY_STRING.concat('url'));\n\n var url = options.url; // can be undefined for IDs\n delete options.url;\n\n // skip import on import=0, playerjs=1\n var skipImport = options.import === '0' || options.import === 'false' \n || options.playerjs === '1' || options.playerjs === 'true';\n\n // or if link's query-string params or CDN are different from the others\n if (!skipImport) {\n var mBase = src.match(iframely.BASE_RE);\n options.CDN = mBase && mBase[0]; // will fall back to iframely.CDN in getEndpoint('/import...' ...)\n\n // set import options from the first el in import\n // that includes api keys \n if (!import_options) {\n import_options = options;\n\n // else check that this el's options are the same as the first one's in import\n } else if (JSON.stringify(options, Object.keys(options).sort()) \n !== JSON.stringify(import_options, Object.keys(import_options).sort())) {\n\n skipImport = true;\n }\n }\n\n\n if (skipImport) {\n // Usual build if no uri and app=1s.\n iframely.trigger('load', el);\n\n } else if (id) {\n el.setAttribute('data-import-uri', id);\n if (ids.indexOf(id) === -1) {\n ids.push(id);\n }\n pushElement(id, el);\n\n } else {\n\n if (!url) {\n url = el.getAttribute('href');\n }\n\n var key = import_options.key || import_options.api_key || iframely.config.api_key || iframely.config.key;\n\n if (key && url) {\n\n el.setAttribute('data-import-uri', url);\n if (uris.indexOf(url) === -1) {\n uris.push(url);\n }\n pushElement(url, el);\n } else {\n // Usual build if no uri.\n iframely.trigger('load', el);\n }\n }\n }\n\n\n // start actual filling up of import request\n\n for(var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (!el.getAttribute('data-import-uri') && el.hasAttribute('data-iframely-url')) {\n queueElement(el);\n }\n }\n\n if ((uris.length > 0 || ids.length > 0)) {\n\n import_options = import_options || {};\n import_options.touch = iframely.isTouch();\n import_options.flash = hasFlash();\n import_options.app = 1;\n // Do not override imports theme if global theme not set.\n if (iframely.config.theme) {\n import_options.theme = iframely.config.theme;\n }\n\n if (uris.length > 0) {\n import_options.uri = uris;\n }\n\n if (ids.length > 0) {\n import_options.ids = ids.join('&');\n }\n\n import_options.v = iframely.VERSION;\n\n script.src = utils.getEndpoint('/api/import/v2', import_options, iframely.SUPPORTED_QUERY_STRING);\n\n script.onerror = function() {\n // Error loading import. No import this time.\n importReady();\n };\n\n document.head.appendChild(script);\n iframely.import = script;\n\n } else {\n importReady();\n iframely.trigger('load');\n }\n}\n\niframely.buildImportWidgets = function(importOptions) {\n\n iframely.trigger('import-loaded', importOptions);\n\n importOptions.widgets.forEach(function(widget) {\n iframely.trigger('load', widget, importOptions);\n });\n\n importReady();\n};\n\nfunction loadImportWidget(widgetOptions, el, importOptions) {\n\n var needCancelWidget = widgetOptions.cancel;\n var shadow = widgetOptions.shadow;\n var hasRenderedEvent = widgetOptions.renderEvent;\n\n var wrapper = utils.getIframeWrapper(el, true);\n var widget;\n\n if (needCancelWidget) {\n widget = utils.getWidget(el);\n\n iframely.cancelWidget(widget || {\n maxWidthWrapper: el,\n iframe: el,\n url: el.getAttribute('href') \n });\n\n } else {\n\n widget = document.createElement('div');\n widget.innerHTML = widgetOptions.html;\n \n var parent, replacedEl;\n\n if (wrapper && !hasRenderedEvent) {\n // Inline widget will replace 'aspectWrapper' but keep 'maxWidthWrapper' as 'iframely-embed' to fix centering, etc.\n // If has rendered event - keep wrapper and remove attrs later by event.\n parent = wrapper.aspectWrapper.parentNode;\n replacedEl = wrapper.aspectWrapper;\n\n // Clear custom attributes.\n wrapper.maxWidthWrapper.removeAttribute('style');\n } else {\n // No wrapper or keep wrapper for later removal.\n parent = el.parentNode;\n replacedEl = el;\n }\n\n if (shadow) {\n\n var shadowContainer = document.createElement('div');\n var shadowRoot = shadowContainer.attachShadow({mode: 'open'});\n shadowRoot.appendChild(widget);\n\n var shadowWidgetOptions = {\n shadowRoot: shadowRoot,\n shadowContainer: shadowContainer,\n container: parent,\n context: widgetOptions.context,\n stylesIds: widgetOptions.stylesIds,\n stylesDict: importOptions.commonShadowStyles\n };\n \n iframely.trigger('import-shadow-widget-before-render', shadowWidgetOptions);\n \n parent.insertBefore(shadowContainer, replacedEl);\n\n iframely.trigger('import-shadow-widget-after-render', shadowWidgetOptions);\n \n } else {\n\n parent.insertBefore(widget, replacedEl);\n\n exec_body_scripts(widget);\n }\n\n parent.removeChild(replacedEl);\n\n if (hasRenderedEvent) {\n setTimeout(function() {\n clearWrapperStylesAndClass(parent);\n }, iframely.CLEAR_WRAPPER_STYLES_TIMEOUT);\n }\n }\n}\n\n\nfunction importReady() {\n\n delete iframely.import;\n\n // clean up all, let other loaders have a go\n var failed_elements = document.querySelectorAll('a[data-iframely-url][data-import-uri]');\n for(var i = 0; i < failed_elements.length; i++) {\n failed_elements[i].removeAttribute('data-import-uri');\n iframely.trigger('load', failed_elements[i]);\n }\n}\n\niframely.isTouch = function() {\n return 'ontouchstart' in window // works on most browsers\n || navigator.maxTouchPoints; // works on IE10/11 and Surface\n};\n\nfunction hasFlash() {\n\n var _hasFlash = false;\n\n try {\n var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');\n if (fo) {\n _hasFlash = true;\n } else {\n _hasFlash = false;\n }\n } catch (e) {\n if (navigator.mimeTypes\n && navigator.mimeTypes['application/x-shockwave-flash'] != undefined\n && navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {\n _hasFlash = true;\n } else {\n _hasFlash = false;\n }\n }\n\n return _hasFlash;\n}\n\nfunction isImportAble() {\n\n return document.head.attachShadow\n && document.location // Prevent `Cannot read properties of null (reading 'protocol')` for sandbox iframes.\n && (iframely.debug || document.location.protocol === 'http:' || document.location.protocol === 'https:') // Skip import on file:///\n && !iframely.config.playerjs && !iframely.config.lazy;\n // && !navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n // TODO: test in Firefox 63\n}\n\nfunction clearWrapperStylesAndClass(el) {\n var aspectWrapper = el;\n var parents = 0;\n while(aspectWrapper \n && (!aspectWrapper.getAttribute('class')\n || aspectWrapper.getAttribute('class').split(' ').indexOf(iframely.ASPECT_WRAPPER_CLASS) === -1)) {\n\n aspectWrapper = aspectWrapper.parentNode;\n parents++;\n if (parents > 4) {\n // Do not search further 4 parents.\n aspectWrapper = null;\n }\n }\n\n var maxWidthWrapper = aspectWrapper && aspectWrapper.parentNode;\n if (maxWidthWrapper \n && maxWidthWrapper.getAttribute('class')\n && maxWidthWrapper.getAttribute('class').split(' ').indexOf(iframely.MAXWIDTH_WRAPPER_CLASS) > -1) {\n\n // Remove wrapper specific data. Leave only 'iframely-embed' parent class.\n aspectWrapper.removeAttribute('style');\n aspectWrapper.removeAttribute('class');\n maxWidthWrapper.removeAttribute('style');\n }\n}\n\niframely.on('import-widget-ready', clearWrapperStylesAndClass);\n\n// used in server templates\n\nif (!iframely.addEventListener) {\n iframely.addEventListener = function(elem, type, eventHandle) {\n if (!elem) { return; }\n if ( elem.addEventListener ) {\n elem.addEventListener( type, eventHandle, false );\n } else if ( elem.attachEvent ) {\n elem.attachEvent( 'on' + type, eventHandle );\n } else {\n elem['on' + type] = eventHandle;\n }\n };\n}\n\nfunction exec_body_scripts(body_el) {\n function nodeName(elem, name) {\n return elem.nodeName && elem.nodeName.toUpperCase() ===\n name.toUpperCase();\n }\n\n function evalScript(elem) {\n var data = (elem.text || elem.textContent || elem.innerHTML || '' ),\n script = utils.createScript();\n\n // Copy all script attributes.\n script.type = 'text/javascript';\n for (var i = 0; i < elem.attributes.length; i++) {\n var attr = elem.attributes[i];\n script.setAttribute(attr.name, attr.value);\n }\n try {\n // doesn't work on ie...\n script.appendChild(document.createTextNode(data));\n } catch(e) {\n // IE has funky script nodes\n script.text = data;\n }\n\n body_el.appendChild(script);\n }\n\n // main section of function\n var scripts = [],\n script,\n children_nodes = body_el.childNodes,\n child,\n i;\n\n for (i = 0; children_nodes[i]; i++) {\n child = children_nodes[i];\n if (nodeName(child, 'script' ) &&\n (!child.type || child.type.toLowerCase() === 'text/javascript' || child.type.toLowerCase() === 'application/javascript')) {\n scripts.push(child);\n body_el.removeChild(child);\n } else {\n exec_body_scripts(child);\n }\n }\n\n for (i = 0; scripts[i]; i++) {\n script = scripts[i];\n if (script.parentNode) {script.parentNode.removeChild(script);}\n evalScript(scripts[i]);\n }\n}\n\n//# sourceURL=webpack:///./import.js?");
+eval("{var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// widgetsCache is used from inside import doc for js callbacks and custom features\nvar widgetsCache = {};\n\niframely.on('load', function(el) {\n\n // load once, if import is not in process and only if query-string from script src has not disabled import\n if (!el && iframely.config.import !== false \n && isImportAble()\n && !iframely.import) {\n\n var elements = document.querySelectorAll('a[data-iframely-url]:not([data-import-uri])');\n if (elements.length > 1) {\n makeImportAPICall(elements);\n }\n }\n\n});\n\niframely.on('load', function(widget, importOptions) {\n\n if (widget && widget.uri && (widget.html || widget.cancel)) {\n\n var els = widgetsCache[widget.uri];\n // alternatively, could as well do querySelectorAll('a[data-iframely-url][data-import=\"' + template.getAttribute('data-uri') + '\"')\n\n if (els) {\n for (var i = 0; i < els.length; i++) {\n loadImportWidget(widget, els[i], importOptions);\n }\n }\n\n delete widgetsCache[widget.uri];\n }\n});\n\nfunction makeImportAPICall(elements) {\n var script = utils.createScript();\n\n var uris = [];\n var ids = [];\n \n var import_options = null; // will be populated from first element; or will remain as null if no params in elements...\n\n // couple helper functions first\n\n function pushElement(uri, el) {\n if (!widgetsCache[uri]) {\n widgetsCache[uri] = [];\n }\n\n widgetsCache[uri].push(el);\n }\n\n function queueElement(el) {\n var src = el.getAttribute('data-iframely-url');\n\n var mId = src.match(iframely.ID_RE);\n var id = mId && mId[1];\n\n var options = utils.parseQueryString(src, iframely.SUPPORTED_QUERY_STRING.concat('url'));\n\n var url = options.url; // can be undefined for IDs\n delete options.url;\n\n // skip import on import=0, playerjs=1\n var skipImport = options.import === '0' || options.import === 'false' \n || options.playerjs === '1' || options.playerjs === 'true';\n\n // or if link's query-string params or CDN are different from the others\n if (!skipImport) {\n var mBase = src.match(iframely.BASE_RE);\n options.CDN = mBase && mBase[0]; // will fall back to iframely.CDN in getEndpoint('/import...' ...)\n\n // set import options from the first el in import\n // that includes api keys \n if (!import_options) {\n import_options = options;\n\n // else check that this el's options are the same as the first one's in import\n } else if (JSON.stringify(options, Object.keys(options).sort()) \n !== JSON.stringify(import_options, Object.keys(import_options).sort())) {\n\n skipImport = true;\n }\n }\n\n\n if (skipImport) {\n // Usual build if no uri and app=1s.\n iframely.trigger('load', el);\n\n } else if (id) {\n el.setAttribute('data-import-uri', id);\n if (ids.indexOf(id) === -1) {\n ids.push(id);\n }\n pushElement(id, el);\n\n } else {\n\n if (!url) {\n url = el.getAttribute('href');\n }\n\n var key = import_options.key || import_options.api_key || iframely.config.api_key || iframely.config.key;\n\n if (key && url) {\n\n el.setAttribute('data-import-uri', url);\n if (uris.indexOf(url) === -1) {\n uris.push(url);\n }\n pushElement(url, el);\n } else {\n // Usual build if no uri.\n iframely.trigger('load', el);\n }\n }\n }\n\n\n // start actual filling up of import request\n\n for(var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (!el.getAttribute('data-import-uri') && el.hasAttribute('data-iframely-url')) {\n queueElement(el);\n }\n }\n\n if ((uris.length > 0 || ids.length > 0)) {\n\n import_options = import_options || {};\n import_options.touch = iframely.isTouch();\n import_options.flash = hasFlash();\n import_options.app = 1;\n // Do not override imports theme if global theme not set.\n if (iframely.config.theme) {\n import_options.theme = iframely.config.theme;\n }\n\n if (uris.length > 0) {\n import_options.uri = uris;\n }\n\n if (ids.length > 0) {\n import_options.ids = ids.join('&');\n }\n\n import_options.v = iframely.VERSION;\n\n script.src = utils.getEndpoint('/api/import/v2', import_options, iframely.SUPPORTED_QUERY_STRING);\n\n script.onerror = function() {\n // Error loading import. No import this time.\n importReady();\n };\n\n document.head.appendChild(script);\n iframely.import = script;\n\n } else {\n importReady();\n iframely.trigger('load');\n }\n}\n\niframely.buildImportWidgets = function(importOptions) {\n\n iframely.trigger('import-loaded', importOptions);\n\n importOptions.widgets.forEach(function(widget) {\n iframely.trigger('load', widget, importOptions);\n });\n\n importReady();\n};\n\nfunction loadImportWidget(widgetOptions, el, importOptions) {\n\n var needCancelWidget = widgetOptions.cancel;\n var shadow = widgetOptions.shadow;\n var hasRenderedEvent = widgetOptions.renderEvent;\n\n var wrapper = utils.getIframeWrapper(el, true);\n var widget;\n\n if (needCancelWidget) {\n widget = utils.getWidget(el);\n\n iframely.cancelWidget(widget || {\n maxWidthWrapper: el,\n iframe: el,\n url: el.getAttribute('href') \n });\n\n } else {\n\n widget = document.createElement('div');\n widget.innerHTML = widgetOptions.html;\n \n var parent, replacedEl;\n\n if (wrapper && !hasRenderedEvent) {\n // Inline widget will replace 'aspectWrapper' but keep 'maxWidthWrapper' as 'iframely-embed' to fix centering, etc.\n // If has rendered event - keep wrapper and remove attrs later by event.\n parent = wrapper.aspectWrapper.parentNode;\n replacedEl = wrapper.aspectWrapper;\n\n // Clear custom attributes.\n wrapper.maxWidthWrapper.removeAttribute('style');\n } else {\n // No wrapper or keep wrapper for later removal.\n parent = el.parentNode;\n replacedEl = el;\n }\n\n if (shadow) {\n\n var shadowContainer = document.createElement('div');\n var shadowRoot = shadowContainer.attachShadow({mode: 'open'});\n shadowRoot.appendChild(widget);\n\n var shadowWidgetOptions = {\n shadowRoot: shadowRoot,\n shadowContainer: shadowContainer,\n container: parent,\n context: widgetOptions.context,\n stylesIds: widgetOptions.stylesIds,\n stylesDict: importOptions.commonShadowStyles\n };\n \n iframely.trigger('import-shadow-widget-before-render', shadowWidgetOptions);\n \n parent.insertBefore(shadowContainer, replacedEl);\n\n iframely.trigger('import-shadow-widget-after-render', shadowWidgetOptions);\n \n } else {\n\n parent.insertBefore(widget, replacedEl);\n\n exec_body_scripts(widget);\n }\n\n parent.removeChild(replacedEl);\n\n if (hasRenderedEvent) {\n setTimeout(function() {\n clearWrapperStylesAndClass(parent);\n }, iframely.CLEAR_WRAPPER_STYLES_TIMEOUT);\n }\n }\n}\n\n\nfunction importReady() {\n\n delete iframely.import;\n\n // clean up all, let other loaders have a go\n var failed_elements = document.querySelectorAll('a[data-iframely-url][data-import-uri]');\n for(var i = 0; i < failed_elements.length; i++) {\n failed_elements[i].removeAttribute('data-import-uri');\n iframely.trigger('load', failed_elements[i]);\n }\n}\n\niframely.isTouch = function() {\n return 'ontouchstart' in window // works on most browsers\n || navigator.maxTouchPoints; // works on IE10/11 and Surface\n};\n\nfunction hasFlash() {\n\n var _hasFlash = false;\n\n try {\n var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');\n if (fo) {\n _hasFlash = true;\n } else {\n _hasFlash = false;\n }\n } catch (e) {\n if (navigator.mimeTypes\n && navigator.mimeTypes['application/x-shockwave-flash'] != undefined\n && navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {\n _hasFlash = true;\n } else {\n _hasFlash = false;\n }\n }\n\n return _hasFlash;\n}\n\nfunction isImportAble() {\n\n return document.head.attachShadow\n && document.location // Prevent `Cannot read properties of null (reading 'protocol')` for sandbox iframes.\n && (iframely.debug || document.location.protocol === 'http:' || document.location.protocol === 'https:') // Skip import on file:///\n && !iframely.config.playerjs && !iframely.config.lazy;\n // && !navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n // TODO: test in Firefox 63\n}\n\nfunction clearWrapperStylesAndClass(el) {\n var aspectWrapper = el;\n var parents = 0;\n while(aspectWrapper \n && (!aspectWrapper.getAttribute('class')\n || aspectWrapper.getAttribute('class').split(' ').indexOf(iframely.ASPECT_WRAPPER_CLASS) === -1)) {\n\n aspectWrapper = aspectWrapper.parentNode;\n parents++;\n if (parents > 4) {\n // Do not search further 4 parents.\n aspectWrapper = null;\n }\n }\n\n var maxWidthWrapper = aspectWrapper && aspectWrapper.parentNode;\n if (maxWidthWrapper \n && maxWidthWrapper.getAttribute('class')\n && maxWidthWrapper.getAttribute('class').split(' ').indexOf(iframely.MAXWIDTH_WRAPPER_CLASS) > -1) {\n\n // Remove wrapper specific data. Leave only 'iframely-embed' parent class.\n aspectWrapper.removeAttribute('style');\n aspectWrapper.removeAttribute('class');\n maxWidthWrapper.removeAttribute('style');\n }\n}\n\niframely.on('import-widget-ready', clearWrapperStylesAndClass);\n\n// used in server templates\n\nif (!iframely.addEventListener) {\n iframely.addEventListener = function(elem, type, eventHandle) {\n if (!elem) { return; }\n if ( elem.addEventListener ) {\n elem.addEventListener( type, eventHandle, false );\n } else if ( elem.attachEvent ) {\n elem.attachEvent( 'on' + type, eventHandle );\n } else {\n elem['on' + type] = eventHandle;\n }\n };\n}\n\nfunction exec_body_scripts(body_el) {\n function nodeName(elem, name) {\n return elem.nodeName && elem.nodeName.toUpperCase() ===\n name.toUpperCase();\n }\n\n function evalScript(elem) {\n var data = (elem.text || elem.textContent || elem.innerHTML || '' ),\n script = utils.createScript();\n\n // Copy all script attributes.\n script.type = 'text/javascript';\n for (var i = 0; i < elem.attributes.length; i++) {\n var attr = elem.attributes[i];\n script.setAttribute(attr.name, attr.value);\n }\n try {\n // doesn't work on ie...\n script.appendChild(document.createTextNode(data));\n } catch(e) {\n // IE has funky script nodes\n script.text = data;\n }\n\n body_el.appendChild(script);\n }\n\n // main section of function\n var scripts = [],\n script,\n children_nodes = body_el.childNodes,\n child,\n i;\n\n for (i = 0; children_nodes[i]; i++) {\n child = children_nodes[i];\n if (nodeName(child, 'script' ) &&\n (!child.type || child.type.toLowerCase() === 'text/javascript' || child.type.toLowerCase() === 'application/javascript')) {\n scripts.push(child);\n body_el.removeChild(child);\n } else {\n exec_body_scripts(child);\n }\n }\n\n for (i = 0; scripts[i]; i++) {\n script = scripts[i];\n if (script.parentNode) {script.parentNode.removeChild(script);}\n evalScript(scripts[i]);\n }\n}\n\n//# sourceURL=webpack:///./import.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./index.js":
+/***/ "./index.js"
/*!******************!*\
!*** ./index.js ***!
\******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, exports, __webpack_require__) {
-eval("__webpack_require__(/*! ./dom-ready */ \"./dom-ready.js\");\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nif (!iframely._loaded) {\n\n iframely._loaded = true;\n\n __webpack_require__(/*! ./const */ \"./const.js\");\n __webpack_require__(/*! ./events */ \"./events.js\");\n // require('./utils'); // Loaded by other modules.\n __webpack_require__(/*! ./intersection */ \"./intersection.js\");\n __webpack_require__(/*! ./theme */ \"./theme.js\");\n __webpack_require__(/*! ./import */ \"./import.js\");\n __webpack_require__(/*! ./ahref */ \"./ahref.js\");\n __webpack_require__(/*! ./lazy-img-placeholder */ \"./lazy-img-placeholder.js\");\n __webpack_require__(/*! ./lazy-iframe */ \"./lazy-iframe.js\");\n // require('./messaging'); // Loaded by other modules.\n __webpack_require__(/*! ./widget-cancel */ \"./widget-cancel.js\");\n __webpack_require__(/*! ./widget-resize */ \"./widget-resize.js\");\n __webpack_require__(/*! ./widget-click */ \"./widget-click.js\");\n __webpack_require__(/*! ./widget-options */ \"./widget-options.js\");\n __webpack_require__(/*! ./deprecated */ \"./deprecated.js\");\n __webpack_require__(/*! ./lazy-loading-native */ \"./lazy-loading-native.js\");\n\n iframely.trigger('init'); \n}\n\nexports.iframely = iframely;\n\n//# sourceURL=webpack:///./index.js?");
+eval("{__webpack_require__(/*! ./dom-ready */ \"./dom-ready.js\");\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nif (!iframely._loaded) {\n\n iframely._loaded = true;\n\n __webpack_require__(/*! ./const */ \"./const.js\");\n __webpack_require__(/*! ./events */ \"./events.js\");\n // require('./utils'); // Loaded by other modules.\n __webpack_require__(/*! ./intersection */ \"./intersection.js\");\n __webpack_require__(/*! ./theme */ \"./theme.js\");\n __webpack_require__(/*! ./import */ \"./import.js\");\n __webpack_require__(/*! ./ahref */ \"./ahref.js\");\n __webpack_require__(/*! ./lazy-img-placeholder */ \"./lazy-img-placeholder.js\");\n __webpack_require__(/*! ./lazy-iframe */ \"./lazy-iframe.js\");\n // require('./messaging'); // Loaded by other modules.\n __webpack_require__(/*! ./widget-cancel */ \"./widget-cancel.js\");\n __webpack_require__(/*! ./widget-resize */ \"./widget-resize.js\");\n __webpack_require__(/*! ./widget-click */ \"./widget-click.js\");\n __webpack_require__(/*! ./widget-options */ \"./widget-options.js\");\n __webpack_require__(/*! ./deprecated */ \"./deprecated.js\");\n __webpack_require__(/*! ./lazy-loading-native */ \"./lazy-loading-native.js\");\n\n iframely.trigger('init'); \n}\n\nexports.iframely = iframely;\n\n//# sourceURL=webpack:///./index.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./intersection.js":
+/***/ "./intersection.js"
/*!*************************!*\
!*** ./intersection.js ***!
\*************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var messaging = __webpack_require__(/*! ./messaging */ \"./messaging.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar observers = {};\n\nfunction getObserver(options) {\n var optionsKey = JSON.stringify(options);\n var observer = observers[optionsKey];\n if (!observer) {\n\n observer = new IntersectionObserver(function(entries) {\n\n entries.forEach(function(entry) {\n messaging.postMessage({\n method: 'intersection',\n entry: {\n isIntersecting: entry.isIntersecting\n },\n options: options\n }, '*', entry.target.contentWindow);\n });\n\n }, getObserverOptions(options));\n\n observers[optionsKey] = observer;\n }\n return observer;\n}\n\nfunction getObserverOptions(options) {\n var result = {};\n if (options && options.threshold) {\n result.threshold = options.threshold;\n }\n if (options && options.margin) {\n result.rootMargin = options.margin + 'px ' + options.margin + 'px ' + options.margin + 'px ' + options.margin + 'px';\n }\n return result;\n}\n\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window) {\n\n iframely.on('init', function() {\n\n iframely.extendOptions({\n intersection: 1\n });\n \n });\n\n iframely.on('message', function(widget, message) {\n if (message.method === 'send-intersections' && widget.iframe) {\n\n var options = message.options;\n\n if (!options) {\n options = {\n margin: 1000\n };\n }\n\n getObserver(options).observe(widget.iframe);\n }\n });\n}\n\n\n//# sourceURL=webpack:///./intersection.js?");
+eval("{var messaging = __webpack_require__(/*! ./messaging */ \"./messaging.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\nvar observers = {};\n\nfunction getObserver(options) {\n var optionsKey = JSON.stringify(options);\n var observer = observers[optionsKey];\n if (!observer) {\n\n observer = new IntersectionObserver(function(entries) {\n\n entries.forEach(function(entry) {\n messaging.postMessage({\n method: 'intersection',\n entry: {\n isIntersecting: entry.isIntersecting\n },\n options: options\n }, '*', entry.target.contentWindow);\n });\n\n }, getObserverOptions(options));\n\n observers[optionsKey] = observer;\n }\n return observer;\n}\n\nfunction getObserverOptions(options) {\n var result = {};\n if (options && options.threshold) {\n result.threshold = options.threshold;\n }\n if (options && options.margin) {\n result.rootMargin = options.margin + 'px ' + options.margin + 'px ' + options.margin + 'px ' + options.margin + 'px';\n }\n return result;\n}\n\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window) {\n\n iframely.on('init', function() {\n\n iframely.extendOptions({\n intersection: 1\n });\n \n });\n\n iframely.on('message', function(widget, message) {\n if (message.method === 'send-intersections' && widget.iframe) {\n\n var options = message.options;\n\n if (!options) {\n options = {\n margin: 1000\n };\n }\n\n getObserver(options).observe(widget.iframe);\n }\n });\n}\n\n\n//# sourceURL=webpack:///./intersection.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./lazy-iframe.js":
+/***/ "./lazy-iframe.js"
/*!************************!*\
!*** ./lazy-iframe.js ***!
\************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// Need 'load' handler here instead of on('init') - we load lazy iframes only when DOM ready.\niframely.on('load', function(el) { \n\n if (!el) { // initial load\n\n var elements = document.querySelectorAll('iframe[data-iframely-url]');\n for(var i = 0; i < elements.length; i++) {\n iframely.trigger('load', elements[i]);\n } \n }\n \n});\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'IFRAME'\n && el.hasAttribute('data-iframely-url')\n && !el.hasAttribute('data-img')\n && !el.getAttribute('src')) {\n\n loadLazyIframe(el);\n }\n \n});\n\n\nfunction loadLazyIframe(el) {\n\n var widget = utils.getWidget(el);\n var src = el.getAttribute('data-iframely-url');\n var dataImg = el.hasAttribute('data-img-created') || el.hasAttribute('data-img');\n var nativeLazyLoad = !dataImg && iframely.SUPPORT_IFRAME_LOADING_ATTR;\n\n if (widget && src) {\n\n var options = {\n v: iframely.VERSION,\n app: 1, // for example, will fall back to summary card if media is not longer available\n theme: iframely.config.theme\n };\n\n if (!nativeLazyLoad && iframely.config.intersection) {\n options.lazy = 1;\n }\n\n src = utils.getEndpoint(src, options);\n\n }\n\n if (nativeLazyLoad) {\n el.setAttribute('loading', 'lazy');\n }\n\n if (dataImg && iframely.SUPPORT_IFRAME_LOADING_ATTR) {\n // Disable lazy load with `data-img`.\n el.setAttribute('loading', 'edge');\n }\n\n el.setAttribute('src', src);\n el.removeAttribute('data-iframely-url');\n\n iframely.trigger('iframe-ready', el);\n}\n\n//# sourceURL=webpack:///./lazy-iframe.js?");
+eval("{var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\n// Need 'load' handler here instead of on('init') - we load lazy iframes only when DOM ready.\niframely.on('load', function(el) { \n\n if (!el) { // initial load\n\n var elements = document.querySelectorAll('iframe[data-iframely-url]');\n for(var i = 0; i < elements.length; i++) {\n iframely.trigger('load', elements[i]);\n } \n }\n \n});\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'IFRAME'\n && el.hasAttribute('data-iframely-url')\n && !el.hasAttribute('data-img')\n && !el.getAttribute('src')) {\n\n loadLazyIframe(el);\n }\n \n});\n\n\nfunction loadLazyIframe(el) {\n\n var widget = utils.getWidget(el);\n var src = el.getAttribute('data-iframely-url');\n var dataImg = el.hasAttribute('data-img-created') || el.hasAttribute('data-img');\n var nativeLazyLoad = !dataImg && iframely.SUPPORT_IFRAME_LOADING_ATTR;\n\n if (widget && src) {\n\n var options = {\n v: iframely.VERSION,\n app: 1, // for example, will fall back to summary card if media is not longer available\n theme: iframely.config.theme\n };\n\n if (!nativeLazyLoad && iframely.config.intersection) {\n options.lazy = 1;\n }\n\n src = utils.getEndpoint(src, options);\n\n }\n\n if (nativeLazyLoad) {\n el.setAttribute('loading', 'lazy');\n }\n\n if (dataImg && iframely.SUPPORT_IFRAME_LOADING_ATTR) {\n // Disable lazy load with `data-img`.\n el.setAttribute('loading', 'edge');\n }\n\n el.setAttribute('src', src);\n el.removeAttribute('data-iframely-url');\n\n iframely.trigger('iframe-ready', el);\n}\n\n//# sourceURL=webpack:///./lazy-iframe.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./lazy-img-placeholder.js":
+/***/ "./lazy-img-placeholder.js"
/*!*********************************!*\
!*** ./lazy-img-placeholder.js ***!
\*********************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'IFRAME'\n && el.hasAttribute('data-iframely-url')\n && el.hasAttribute('data-img')\n && !el.getAttribute('src')) {\n\n var dataImg = el.getAttribute('data-img');\n\n el.removeAttribute('data-img');\n el.setAttribute('data-img-created', '');\n\n var widget = utils.getWidget(el);\n var src = el.getAttribute('data-iframely-url');\n\n addPlaceholderThumbnail(widget, src, dataImg);\n\n src = utils.addQueryString(src, {img: 1});\n el.setAttribute('data-iframely-url', src);\n\n new WaitingWidget(widget);\n\n iframely.trigger('load', el);\n\n }\n});\n\niframely.on('message', function(widget, message) {\n\n var waitingWidget;\n\n if (message.method === 'widgetRendered') {\n hidePlaceholderThumbnail(widget);\n\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.deactivate();\n }\n\n if (message.method === 'begin-waiting-widget-render') {\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.clearLoadingTimeout();\n }\n\n if (message.method === 'end-waiting-widget-render') {\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.registerLoadingTimeout();\n }\n});\n\n\nfunction addPlaceholderThumbnail(widget, href, imageUrl) {\n\n var thumbHref;\n\n if (imageUrl && /^(https?:)?\\/\\//.test(imageUrl)) {\n thumbHref = imageUrl;\n } else {\n\n // Start of image url calculation.\n \n var query = utils.parseQueryString(href);\n \n // Extract widget params to invalidate image cache.\n var _params = {};\n for(var param in query) {\n if (param.indexOf('_') === 0) {\n _params[param] = query[param];\n }\n }\n \n // need to run through getEndpoint at least to avoid file:///\n if (href.match(/\\/api\\/iframe/)) {\n thumbHref = utils.getEndpoint(href.match(/^(.+)\\/api\\/iframe/i)[1] + '/api/thumbnail', Object.assign({\n url: query.url,\n api_key: query.api_key,\n key: query.key\n }, _params));\n } else if (href.match(iframely.ID_RE)) {\n // RE copied from `iframely.ID_RE` and modified to replace path part.\n thumbHref = utils.getEndpoint(href.replace(/^((?:https?:)?\\/\\/[^/]+\\/(\\w+-?\\w+))(?:\\?.*)?$/, '$1/thumbnail'), _params);\n } else {\n return;\n }\n }\n\n // End of image url calculation.\n\n var thumb = document.createElement('div');\n // Parent div not always has ASPECT_WRAPPER_CLASS. Need explicit inline styles.\n utils.setStyles(thumb, {\n position: 'absolute',\n width: '100%',\n height: '100%',\n backgroundImage: \"url('\" + thumbHref + \"')\",\n backgroundSize: 'cover',\n backgroundPosition: 'center'\n });\n\n var iframelyLoaderDiv = document.createElement('div');\n iframelyLoaderDiv.setAttribute('class', iframely.LOADER_CLASS);\n thumb.appendChild(iframelyLoaderDiv);\n\n var paddingTop = iframely.getElementComputedStyle(widget.aspectWrapper, 'padding-top');\n var paddingBottom = iframely.getElementComputedStyle(widget.aspectWrapper, 'padding-bottom');\n\n var paddingTopMatch = paddingTop.match(/^(\\d+)px$/);\n var paddingTopInt = paddingTopMatch && parseInt(paddingTopMatch[1]);\n\n if (paddingTopInt && paddingBottom) {\n\n var thumbWrapper = document.createElement('div');\n\n utils.setStyles(thumbWrapper, {\n top: '-' + paddingTop,\n width: '100%',\n height: 0,\n position: 'relative',\n paddingBottom: paddingBottom\n }); \n\n thumbWrapper.appendChild(thumb);\n\n widget.aspectWrapper.appendChild(thumbWrapper);\n\n } else {\n\n widget.aspectWrapper.appendChild(thumb);\n }\n}\n\nfunction getNthNonTextChildNode(nth, element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n // Nop.\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n if (nth === count) {\n return el;\n }\n count++;\n }\n }\n}\n\nfunction nonTextChildCount(element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n var text = el.textContent || el.innerText;\n text = text.replace(/\\s|\\n/g, '');\n if (text) {\n // Do not skip text node with text.\n count++;\n }\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n count++;\n }\n }\n return count;\n}\n\nfunction hidePlaceholderThumbnail(widget) {\n var thumb = widget.aspectWrapper && nonTextChildCount(widget.aspectWrapper) > 1 && getNthNonTextChildNode(1, widget.aspectWrapper);\n if (thumb && thumb.nodeName === 'DIV') {\n widget.aspectWrapper.removeChild(thumb);\n }\n}\n\n//===\n\n// Working WaitingWidgets' collection.\n\nvar waitingWidgets = [];\n\nfunction findWaitingWidgetIdx(widget) {\n var i = 0;\n while(i < waitingWidgets.length && waitingWidgets[i].widget.iframe !== widget.iframe) {\n i++;\n }\n if (i < waitingWidgets.length && waitingWidgets[i].widget.iframe === widget.iframe) {\n return i;\n }\n}\n\nfunction findWaitingWidget(widget) {\n var idx = findWaitingWidgetIdx(widget);\n if (idx || idx === 0) {\n return waitingWidgets[idx];\n }\n}\n\nfunction removeWaitingWidget(widget) {\n var idx = findWaitingWidgetIdx(widget);\n if (idx || idx === 0) {\n waitingWidgets.splice(idx, 1);\n }\n}\n\n//===\n\n// WaitingWidget proto.\n\nfunction WaitingWidget(widget) {\n this.widget = widget;\n this.loadCount = 0;\n\n var iframe = widget.iframe;\n\n var that = this;\n function iframeOnLoad() {\n // Bind method to self.\n that.iframeOnLoad();\n }\n\n iframely.addEventListener(iframe, 'load', iframeOnLoad);\n\n this.registerLoadingTimeout();\n\n waitingWidgets.push(this);\n}\n\nWaitingWidget.prototype.iframeOnLoad = function() {\n\n this.loadCount++;\n\n // Skip first load of hosted widget OR timeout call.\n if (this.loadCount !== 2) {\n return;\n }\n\n this.deactivate();\n\n var that = this;\n setTimeout(function() {\n hidePlaceholderThumbnail(that.widget);\n }, iframely.LAZY_IFRAME_FADE_TIMEOUT);\n};\n\nWaitingWidget.prototype.deactivate = function() {\n this.clearLoadingTimeout();\n removeWaitingWidget(this);\n};\n\nWaitingWidget.prototype.clearLoadingTimeout = function() {\n this.timeoutId && clearTimeout(this.timeoutId);\n this.timeoutId = null;\n};\n\nWaitingWidget.prototype.registerLoadingTimeout = function() {\n if (this.timeoutId) {\n return;\n }\n var that = this;\n this.timeoutId = setTimeout(function() {\n that.iframeOnLoad();\n }, iframely.LAZY_IFRAME_SHOW_TIMEOUT);\n};\n\n//# sourceURL=webpack:///./lazy-img-placeholder.js?");
+eval("{var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('load', function(el) {\n\n if (el && el.nodeName === 'IFRAME'\n && el.hasAttribute('data-iframely-url')\n && el.hasAttribute('data-img')\n && !el.getAttribute('src')) {\n\n var dataImg = el.getAttribute('data-img');\n\n el.removeAttribute('data-img');\n el.setAttribute('data-img-created', '');\n\n var widget = utils.getWidget(el);\n var src = el.getAttribute('data-iframely-url');\n\n addPlaceholderThumbnail(widget, src, dataImg);\n\n src = utils.addQueryString(src, {img: 1});\n el.setAttribute('data-iframely-url', src);\n\n new WaitingWidget(widget);\n\n iframely.trigger('load', el);\n\n }\n});\n\niframely.on('message', function(widget, message) {\n\n var waitingWidget;\n\n if (message.method === 'widgetRendered') {\n hidePlaceholderThumbnail(widget);\n\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.deactivate();\n }\n\n if (message.method === 'begin-waiting-widget-render') {\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.clearLoadingTimeout();\n }\n\n if (message.method === 'end-waiting-widget-render') {\n waitingWidget = findWaitingWidget(widget);\n waitingWidget && waitingWidget.registerLoadingTimeout();\n }\n});\n\n\nfunction addPlaceholderThumbnail(widget, href, imageUrl) {\n\n var thumbHref;\n\n if (imageUrl && /^(https?:)?\\/\\//.test(imageUrl)) {\n thumbHref = imageUrl;\n } else {\n\n // Start of image url calculation.\n \n var query = utils.parseQueryString(href);\n \n // Extract widget params to invalidate image cache.\n var _params = {};\n for(var param in query) {\n if (param.indexOf('_') === 0) {\n _params[param] = query[param];\n }\n }\n\n // Force proxy `media` param.\n if (query.media) {\n _params.media = query.media;\n }\n \n // need to run through getEndpoint at least to avoid file:///\n if (href.match(/\\/api\\/iframe/)) {\n thumbHref = utils.getEndpoint(href.match(/^(.+)\\/api\\/iframe/i)[1] + '/api/thumbnail', Object.assign({\n url: query.url,\n api_key: query.api_key,\n key: query.key\n }, _params));\n } else if (href.match(iframely.ID_RE)) {\n // RE copied from `iframely.ID_RE` and modified to replace path part.\n thumbHref = utils.getEndpoint(href.replace(/^((?:https?:)?\\/\\/[^/]+\\/(\\w+-?\\w+))(?:\\?.*)?$/, '$1/thumbnail'), _params);\n } else {\n return;\n }\n }\n\n // End of image url calculation.\n\n var thumb = document.createElement('div');\n // Parent div not always has ASPECT_WRAPPER_CLASS. Need explicit inline styles.\n utils.setStyles(thumb, {\n position: 'absolute',\n width: '100%',\n height: '100%',\n backgroundImage: \"url('\" + thumbHref + \"')\",\n backgroundSize: 'cover',\n backgroundPosition: 'center'\n });\n\n var iframelyLoaderDiv = document.createElement('div');\n iframelyLoaderDiv.setAttribute('class', iframely.LOADER_CLASS);\n thumb.appendChild(iframelyLoaderDiv);\n\n var paddingTop = iframely.getElementComputedStyle(widget.aspectWrapper, 'padding-top');\n var paddingBottom = iframely.getElementComputedStyle(widget.aspectWrapper, 'padding-bottom');\n\n var paddingTopMatch = paddingTop.match(/^(\\d+)px$/);\n var paddingTopInt = paddingTopMatch && parseInt(paddingTopMatch[1]);\n\n if (paddingTopInt && paddingBottom) {\n\n var thumbWrapper = document.createElement('div');\n\n utils.setStyles(thumbWrapper, {\n top: '-' + paddingTop,\n width: '100%',\n height: 0,\n position: 'relative',\n paddingBottom: paddingBottom\n }); \n\n thumbWrapper.appendChild(thumb);\n\n widget.aspectWrapper.appendChild(thumbWrapper);\n\n } else {\n\n widget.aspectWrapper.appendChild(thumb);\n }\n}\n\nfunction getNthNonTextChildNode(nth, element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n // Nop.\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n if (nth === count) {\n return el;\n }\n count++;\n }\n }\n}\n\nfunction nonTextChildCount(element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n var text = el.textContent || el.innerText;\n text = text.replace(/\\s|\\n/g, '');\n if (text) {\n // Do not skip text node with text.\n count++;\n }\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n count++;\n }\n }\n return count;\n}\n\nfunction hidePlaceholderThumbnail(widget) {\n var thumb = widget.aspectWrapper && nonTextChildCount(widget.aspectWrapper) > 1 && getNthNonTextChildNode(1, widget.aspectWrapper);\n if (thumb && thumb.nodeName === 'DIV') {\n widget.aspectWrapper.removeChild(thumb);\n }\n}\n\n//===\n\n// Working WaitingWidgets' collection.\n\nvar waitingWidgets = [];\n\nfunction findWaitingWidgetIdx(widget) {\n var i = 0;\n while(i < waitingWidgets.length && waitingWidgets[i].widget.iframe !== widget.iframe) {\n i++;\n }\n if (i < waitingWidgets.length && waitingWidgets[i].widget.iframe === widget.iframe) {\n return i;\n }\n}\n\nfunction findWaitingWidget(widget) {\n var idx = findWaitingWidgetIdx(widget);\n if (idx || idx === 0) {\n return waitingWidgets[idx];\n }\n}\n\nfunction removeWaitingWidget(widget) {\n var idx = findWaitingWidgetIdx(widget);\n if (idx || idx === 0) {\n waitingWidgets.splice(idx, 1);\n }\n}\n\n//===\n\n// WaitingWidget proto.\n\nfunction WaitingWidget(widget) {\n this.widget = widget;\n this.loadCount = 0;\n\n var iframe = widget.iframe;\n\n var that = this;\n function iframeOnLoad() {\n // Bind method to self.\n that.iframeOnLoad();\n }\n\n iframely.addEventListener(iframe, 'load', iframeOnLoad);\n\n this.registerLoadingTimeout();\n\n waitingWidgets.push(this);\n}\n\nWaitingWidget.prototype.iframeOnLoad = function() {\n\n this.loadCount++;\n\n // Skip first load of hosted widget OR timeout call.\n if (this.loadCount !== 2) {\n return;\n }\n\n this.deactivate();\n\n var that = this;\n setTimeout(function() {\n hidePlaceholderThumbnail(that.widget);\n }, iframely.LAZY_IFRAME_FADE_TIMEOUT);\n};\n\nWaitingWidget.prototype.deactivate = function() {\n this.clearLoadingTimeout();\n removeWaitingWidget(this);\n};\n\nWaitingWidget.prototype.clearLoadingTimeout = function() {\n this.timeoutId && clearTimeout(this.timeoutId);\n this.timeoutId = null;\n};\n\nWaitingWidget.prototype.registerLoadingTimeout = function() {\n if (this.timeoutId) {\n return;\n }\n var that = this;\n this.timeoutId = setTimeout(function() {\n that.iframeOnLoad();\n }, iframely.LAZY_IFRAME_SHOW_TIMEOUT);\n};\n\n\n//# sourceURL=webpack:///./lazy-img-placeholder.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./lazy-loading-native.js":
+/***/ "./lazy-loading-native.js"
/*!********************************!*\
!*** ./lazy-loading-native.js ***!
\********************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("function getChromeVersion() { \n var raw = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n\n return raw ? parseInt(raw[2], 10) : false;\n}\nvar chromeVersion = getChromeVersion();\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\niframely.SUPPORT_IFRAME_LOADING_ATTR = chromeVersion && chromeVersion >= 77;\n\n//# sourceURL=webpack:///./lazy-loading-native.js?");
+eval("{function getChromeVersion() { \n var raw = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n\n return raw ? parseInt(raw[2], 10) : false;\n}\nvar chromeVersion = getChromeVersion();\n\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\niframely.SUPPORT_IFRAME_LOADING_ATTR = chromeVersion && chromeVersion >= 77;\n\n//# sourceURL=webpack:///./lazy-loading-native.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./messaging.js":
+/***/ "./messaging.js"
/*!**********************!*\
!*** ./messaging.js ***!
\**********************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\nvar utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\n\nfunction receiveMessage(callback) {\n\n function cb(e) {\n var message;\n try {\n if (typeof e.data === 'string') {\n message = JSON.parse(e.data);\n } else if (typeof e.data === 'object') {\n message = e.data;\n }\n } catch (ex) {\n if (typeof e.data === 'string') {\n var m = e.data.match(/heightxPYMx(\\d+)/);\n if (m) {\n message = {\n method: 'resize',\n height: parseInt(m[1]) + 1,\n domains: 'all'\n };\n }\n }\n }\n\n callback(e, message);\n }\n\n // browser supports window.postMessage\n if (window['postMessage']) {\n if (window['addEventListener']) {\n window[callback ? 'addEventListener' : 'removeEventListener']('message', cb, !1);\n } else {\n window[callback ? 'attachEvent' : 'detachEvent']('onmessage', cb);\n }\n }\n}\n\nfunction findIframeByContentWindow(iframes, contentWindow) {\n var foundIframe;\n for(var i = 0; i < iframes.length && !foundIframe; i++) {\n var iframe = iframes[i];\n if (iframe.contentWindow === contentWindow) {\n foundIframe = iframe;\n }\n }\n return foundIframe;\n}\n\nfunction findIframeInElement(element, options) {\n var foundIframe, iframes;\n \n if (options.src) {\n iframes = element.querySelectorAll('iframe[src*=\"' + options.src.replace(/^https?:/, '') + '\"]');\n foundIframe = findIframeByContentWindow(iframes, options.contentWindow);\n }\n\n if (!foundIframe) {\n iframes = options.domains ?\n element.querySelectorAll('iframe[src*=\"' + (options.domains || iframely.DOMAINS).join('\"], iframe[src*=\"') + '\"]')\n : element.getElementsByTagName('iframe');\n foundIframe = findIframeByContentWindow(iframes, options.contentWindow);\n }\n\n return foundIframe;\n}\n\nfunction findIframeInShadowRoots(element, options) {\n var foundIframe;\n var className = '.' + (iframely.config.shadow || iframely.SHADOW);\n var shadowRoots = element.querySelectorAll(className);\n for(var i = 0; i < shadowRoots.length && !foundIframe; i++) {\n var shadowRoot = shadowRoots[i].shadowRoot;\n if (shadowRoot) {\n foundIframe = findIframeInElement(shadowRoot, options);\n if (!foundIframe) {\n foundIframe = findIframeInShadowRoots(shadowRoot, options);\n }\n }\n }\n return foundIframe;\n}\n\n// Do not override existing.\nif (!iframely.findIframe) {\n iframely.findIframe = function(options) {\n var foundIframe = findIframeInElement(document, options);\n if (!foundIframe) {\n foundIframe = findIframeInShadowRoots(document, options);\n }\n return foundIframe;\n };\n}\n\n\nreceiveMessage(function(e, message) {\n if (message && (message.method || message.type || message.context === 'player.js')) {\n\n var foundIframe = iframely.findIframe({\n contentWindow: e.source,\n src: message.context,\n domains: message.domains !== 'all' && iframely.DOMAINS.concat(iframely.CDN)\n });\n\n if (foundIframe) {\n var widget = utils.getWidget(foundIframe);\n if (widget && message.url) {\n widget.url = message.url;\n }\n iframely.trigger('message', widget, message);\n }\n }\n \n});\n\n\nexports.postMessage = function(message, target_url, target) {\n if (window['postMessage']) {\n\n if (typeof message === 'object') {\n message.context = document.location.href;\n }\n\n message = JSON.stringify(message);\n\n target_url = target_url || '*';\n\n target = target || window.parent; // default to parent\n\n // the browser supports window.postMessage, so call it with a targetOrigin\n // set appropriately, based on the target_url parameter.\n target['postMessage'](message, target_url.replace( /([^:]+:\\/\\/[^/]+).*/, '$1'));\n }\n};\n\n//# sourceURL=webpack:///./messaging.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\nvar utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\n\nfunction receiveMessage(callback) {\n\n function cb(e) {\n var message;\n try {\n if (typeof e.data === 'string') {\n message = JSON.parse(e.data);\n } else if (typeof e.data === 'object') {\n message = e.data;\n }\n } catch (ex) {\n if (typeof e.data === 'string') {\n var m = e.data.match(/heightxPYMx(\\d+)/);\n if (m) {\n message = {\n method: 'resize',\n height: parseInt(m[1]) + 1,\n domains: 'all'\n };\n }\n }\n }\n\n callback(e, message);\n }\n\n // browser supports window.postMessage\n if (window['postMessage']) {\n if (window['addEventListener']) {\n window[callback ? 'addEventListener' : 'removeEventListener']('message', cb, !1);\n } else {\n window[callback ? 'attachEvent' : 'detachEvent']('onmessage', cb);\n }\n }\n}\n\nfunction findIframeByContentWindow(iframes, contentWindow) {\n var foundIframe;\n for(var i = 0; i < iframes.length && !foundIframe; i++) {\n var iframe = iframes[i];\n if (iframe.contentWindow === contentWindow) {\n foundIframe = iframe;\n }\n }\n return foundIframe;\n}\n\nfunction findIframeInElement(element, options) {\n var foundIframe, iframes;\n \n if (options.src) {\n iframes = element.querySelectorAll('iframe[src*=\"' + options.src.replace(/^https?:/, '') + '\"]');\n foundIframe = findIframeByContentWindow(iframes, options.contentWindow);\n }\n\n if (!foundIframe) {\n iframes = options.domains ?\n element.querySelectorAll('iframe[src*=\"' + (options.domains || iframely.DOMAINS).join('\"], iframe[src*=\"') + '\"]')\n : element.getElementsByTagName('iframe');\n foundIframe = findIframeByContentWindow(iframes, options.contentWindow);\n }\n\n return foundIframe;\n}\n\nfunction findIframeInShadowRoots(element, options) {\n var foundIframe;\n var className = '.' + (iframely.config.shadow || iframely.SHADOW);\n var shadowRoots = element.querySelectorAll(className);\n for(var i = 0; i < shadowRoots.length && !foundIframe; i++) {\n var shadowRoot = shadowRoots[i].shadowRoot;\n if (shadowRoot) {\n foundIframe = findIframeInElement(shadowRoot, options);\n if (!foundIframe) {\n foundIframe = findIframeInShadowRoots(shadowRoot, options);\n }\n }\n }\n return foundIframe;\n}\n\n// Do not override existing.\nif (!iframely.findIframe) {\n iframely.findIframe = function(options) {\n var foundIframe = findIframeInElement(document, options);\n if (!foundIframe) {\n foundIframe = findIframeInShadowRoots(document, options);\n }\n return foundIframe;\n };\n}\n\n\nreceiveMessage(function(e, message) {\n\n if (message && (message.method || message.type || message.context)) {\n\n var foundIframe = iframely.findIframe({\n contentWindow: e.source,\n src: message.src || message.context,\n domains: message.domains !== 'all' && iframely.DOMAINS.concat(iframely.CDN)\n });\n\n if (foundIframe) {\n var widget = utils.getWidget(foundIframe);\n if (widget && message.url) {\n widget.url = message.url;\n }\n iframely.trigger('message', widget, message);\n }\n }\n \n});\n\n\nexports.postMessage = function(message, target_url, target) {\n if (window['postMessage']) {\n\n if (typeof message === 'object') {\n message.context = document.location.href;\n }\n\n message = JSON.stringify(message);\n\n target_url = target_url || '*';\n\n target = target || window.parent; // default to parent\n\n // the browser supports window.postMessage, so call it with a targetOrigin\n // set appropriately, based on the target_url parameter.\n target['postMessage'](message, target_url.replace( /([^:]+:\\/\\/[^/]+).*/, '$1'));\n }\n};\n\n\n//# sourceURL=webpack:///./messaging.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./theme.js":
+/***/ "./theme.js"
/*!******************!*\
!*** ./theme.js ***!
\******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\nvar messaging = __webpack_require__(/*! ./messaging */ \"./messaging.js\");\n\nfunction setThemeInIframe(iframe, theme) {\n messaging.postMessage({\n method: 'setTheme',\n data: theme\n }, '*', iframe.contentWindow);\n}\n\nfunction setThemeInAllIframes(parent, theme) {\n var iframes = parent.getElementsByTagName('iframe');\n for(var i = 0; i < iframes.length; i++) {\n var iframe = iframes[i];\n setThemeInIframe(iframe, theme);\n }\n}\n\niframely.setTheme = function(theme, container) {\n if (theme && iframely.SUPPORTED_THEMES.indexOf(theme) > -1) {\n if (container) {\n if (container.tagName === 'IFRAME') {\n setThemeInIframe(container, theme);\n } else {\n setThemeInAllIframes(container, theme);\n }\n } else {\n // Send get param to next iframes.\n iframely.extendOptions({\n theme: theme\n });\n setThemeInAllIframes(document, theme);\n iframely.trigger('set-theme', theme);\n }\n } else {\n console.warn('Using iframely.setTheme with not supported theme: \"' + theme + '\". Supported themes are: ' + iframely.SUPPORTED_THEMES.join(', '));\n }\n};\n\n//# sourceURL=webpack:///./theme.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\nvar messaging = __webpack_require__(/*! ./messaging */ \"./messaging.js\");\n\nfunction setThemeInIframe(iframe, theme) {\n messaging.postMessage({\n method: 'setTheme',\n data: theme\n }, '*', iframe.contentWindow);\n}\n\nfunction setThemeInAllIframes(parent, theme) {\n var iframes = parent.getElementsByTagName('iframe');\n for(var i = 0; i < iframes.length; i++) {\n var iframe = iframes[i];\n setThemeInIframe(iframe, theme);\n }\n}\n\niframely.setTheme = function(theme, container) {\n if (theme && iframely.SUPPORTED_THEMES.indexOf(theme) > -1) {\n if (container) {\n if (container.tagName === 'IFRAME') {\n setThemeInIframe(container, theme);\n } else {\n setThemeInAllIframes(container, theme);\n }\n } else {\n // Send get param to next iframes.\n iframely.extendOptions({\n theme: theme\n });\n setThemeInAllIframes(document, theme);\n iframely.trigger('set-theme', theme);\n }\n } else {\n console.warn('Using iframely.setTheme with not supported theme: \"' + theme + '\". Supported themes are: ' + iframely.SUPPORTED_THEMES.join(', '));\n }\n};\n\n//# sourceURL=webpack:///./theme.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./utils.js":
+/***/ "./utils.js"
/*!******************!*\
!*** ./utils.js ***!
\******************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\nvar messaging = __webpack_require__(/*! ./messaging */ \"./messaging.js\");\n\niframely.on('init', function() {\n\n\n iframely.extendOptions(parseQueryStringFromScriptSrc());\n // if it's hosted from elsewhere - we don't support customizing via query-string.\n // iframely.CDN will be default one unless changed by user (?cdn= or iframely.CDN= )\n\n defineDefaultStyles();\n\n // Set theme for existing iframes.\n if (iframely.config.theme) {\n iframely.setTheme(iframely.config.theme);\n }\n\n requestSizeOfExistingIframes(iframely.DOMAINS.concat(iframely.CDN.replace(/^https?:\\/\\//, '')));\n \n});\n\niframely.load = function() {\n var args = Array.prototype.slice.call(arguments);\n args.unshift('load');\n iframely.trigger.apply(this, args);\n};\n\nvar getIframeWrapper = exports.getIframeWrapper = function(iframe, checkClass) {\n\n var aspectWrapper = iframe.parentNode;\n\n if (!aspectWrapper\n || aspectWrapper.nodeName !== 'DIV'\n || nonTextChildCount(aspectWrapper) > 2 /* 2 is lazy-cover */\n || (checkClass && aspectWrapper.getAttribute('class') !== iframely.ASPECT_WRAPPER_CLASS)\n || (!checkClass && aspectWrapper.style.position !== 'relative' && aspectWrapper.getAttribute('class') !== iframely.ASPECT_WRAPPER_CLASS)) {\n return;\n }\n\n var maxWidthWrapper = aspectWrapper.parentNode;\n\n if (!maxWidthWrapper\n || maxWidthWrapper.nodeName !== 'DIV'\n || nonTextChildCount(maxWidthWrapper) > 1\n || (checkClass && maxWidthWrapper.getAttribute('class') && maxWidthWrapper.getAttribute('class').split(' ').indexOf(iframely.MAXWIDTH_WRAPPER_CLASS) === -1)\n || (!checkClass && maxWidthWrapper.getAttribute('class') && !maxWidthWrapper.getAttribute('class').match(/iframely/i) /* users can modify class */)\n ) {\n return;\n }\n\n return {\n aspectWrapper: aspectWrapper,\n maxWidthWrapper: maxWidthWrapper\n };\n};\n\nexports.addDefaultWrappers = function(el) {\n var parentNode = el.parentNode;\n\n var maxWidthWrapper = document.createElement('div');\n maxWidthWrapper.className = iframely.MAXWIDTH_WRAPPER_CLASS;\n\n var aspectWrapper = document.createElement('div');\n aspectWrapper.className = iframely.ASPECT_WRAPPER_CLASS;\n\n maxWidthWrapper.appendChild(aspectWrapper);\n\n parentNode.insertBefore(maxWidthWrapper, el);\n\n return {\n aspectWrapper: aspectWrapper,\n maxWidthWrapper: maxWidthWrapper\n };\n};\n\nexports.getWidget = function(iframe) {\n var wrapper = getIframeWrapper(iframe);\n if (!wrapper) {\n return;\n }\n var widget = {\n iframe: iframe, // can actually be ahref\n aspectWrapper: wrapper.aspectWrapper,\n maxWidthWrapper: wrapper.maxWidthWrapper\n };\n if (iframe.nodeName === 'A' && iframe.hasAttribute('href')) {\n widget.url = iframe.getAttribute('href');\n } else if (iframe.hasAttribute('src') && /url=/.test(iframe.getAttribute('src'))) {\n var qs = parseQueryString(iframe.getAttribute('src'));\n if (qs.url) {\n widget.url = qs.url;\n }\n }\n return widget;\n};\n\niframely.getElementComputedStyle = function(el, style) {\n return window.getComputedStyle && window.getComputedStyle(el).getPropertyValue(style);\n};\n\nexports.setStyles = function(el, styles) {\n if (el) { // let's check it's still defined, just in case\n Object.keys(styles).forEach(function(key) {\n\n var value = styles[key];\n if (typeof value === 'number' || (typeof value === 'string' && /^(\\d+)?\\.?(\\d+)$/.test(value))) {\n value = value + 'px';\n }\n\n var currentValue = el.style[key];\n\n if (!window.getComputedStyle ||\n // don't change CSS values in pixels, such as height:0\n (\n iframely.getElementComputedStyle(el, key) != value\n // && don't set default aspect ratio if it's defined in CSS anyway\n && !(el.className == 'iframely-responsive' && key === 'paddingBottom' && !currentValue && /^56\\.2\\d+%$/.test(value))\n // && do not change max-width if new value === 'keep'.\n && !(key === 'max-width' && value === 'keep')\n )) {\n\n el.style[key] = value || ''; // remove style that is no longer needed\n }\n });\n }\n};\n\nvar applyNonce = exports.applyNonce = function(element) {\n if (iframely.config.nonce) {\n element.nonce = iframely.config.nonce;\n }\n};\n\nfunction defineDefaultStyles() {\n\n var iframelyStylesId = 'iframely-styles';\n var styles = document.getElementById(iframelyStylesId);\n\n if (!styles) {\n // copy-paste default styles from https://iframely.com/docs/omit-css\n // box-sizing:border-box - need for iOS Safari .\n var iframelyStyles = '.iframely-responsive{top:0;left:0;width:100%;height:0;position:relative;padding-bottom:56.25%;box-sizing:border-box;}.iframely-responsive>*{top:0;left:0;width:100%;height:100%;position:absolute;border:0;box-sizing:border-box;}';\n\n styles = document.createElement('style');\n styles.id = iframelyStylesId;\n styles.type = 'text/css';\n applyNonce(styles);\n\n if (styles.styleSheet) {\n // IE.\n styles.styleSheet.cssText = iframelyStyles;\n } else {\n styles.innerHTML = iframelyStyles;\n }\n document.getElementsByTagName('head')[0].appendChild(styles);\n }\n}\n\n\nvar addQueryString = exports.addQueryString = function(href, options) {\n\n var query_string = '';\n\n Object.keys(options).forEach(function(key) {\n var value = options[key];\n\n // array is used e.g. for import: uris and ids\n if (Object.prototype.toString.call(value) === '[object Array]') {\n\n var values = value.map(function(uri) {\n return key + '=' + encodeURIComponent(uri);\n });\n query_string += '&' + values.join('&'); \n\n } else if (typeof value !== 'undefined' && href.indexOf(key + '=') === -1 ) { // set explicitely in options, skip undefines\n\n // Do not convert boolean for _option.\n if (typeof value === 'boolean' && key.charAt(0) !== '_') {\n value = value ? 1 : 0;\n }\n\n query_string += '&' + key + '=' + encodeURIComponent(value);\n }\n\n });\n\n return href + (query_string !== '' ? (href.indexOf('?') > -1 ? '&' : '?') + query_string.replace(/^&/, '') : '');\n};\n\nexports.getEndpoint = function(src, options, config_params) {\n\n var endpoint = src;\n\n if (!/^(https?:)?\\/\\//i.test(src)) {\n endpoint = (options.CDN || iframely.CDN) + endpoint;\n delete options.CDN;\n }\n\n if (!/^(?:https?:)?\\/\\//i.test(endpoint)) {\n endpoint = '//' + endpoint;\n } \n\n if (options) {\n endpoint = addQueryString(endpoint, options);\n }\n\n // get additional params from config\n if (config_params && config_params.length) {\n\n var more_options = {};\n\n var iframely_config_keys = Object.keys(iframely.config);\n for (var i = 0; i < iframely_config_keys.length; i++) {\n var key = iframely_config_keys[i];\n if (containsString(config_params, key)) {\n more_options[key] = iframely.config[key];\n }\n }\n\n endpoint = addQueryString(endpoint, more_options);\n }\n\n\n if (/^(https?:)?\\/\\//i.test(endpoint) // Path is url.\n && !endpoint.match(/^(https?:)?\\/\\//i)[1] // No http protocol specified.\n && document.location.protocol !== 'http:' // Document in `file:` or other protocol.\n && document.location.protocol !== 'https:') {\n\n endpoint = 'https:' + endpoint;\n }\n\n return endpoint;\n};\n\n// helper method to init more options through js code\niframely.extendOptions = function(options) {\n\n options && Object.keys(options).forEach(function(key) {\n var new_value = (\n options[key] === 0 || options[key] === '0' || options[key] === false || options[key] === 'false'\n ? false : (options[key] === 1 || options[key] === '1' || options[key] === true || options[key] === 'true'\n ? true : options[key]));\n\n if (iframely.config[key] !== false) { // set new value only when undefined or not previously disabled\n iframely.config[key] = new_value;\n }\n });\n\n};\n\nfunction parseQueryStringFromScriptSrc() {\n\n // Extract global iframely params.\n var scripts = document.querySelectorAll('script[src*=\"embed.js\"], script[src*=\"iframely.js\"]');\n\n for(var i = 0; i < scripts.length; i++) {\n var src = scripts[i].getAttribute('src').replace(/&/gi, '&');\n\n if (iframely.SCRIPT_RE.test(src)) { // found the script on custom origin or default Iframely CDN\n\n var options = parseQueryString(src, iframely.SUPPORTED_QUERY_STRING.concat('cdn', 'cancel', 'nonce'));\n\n var m2 = src.match(iframely.CDN_RE);\n if (m2 || options.cdn) { // ignore non-Iframely hosts such as s.imgur.com/min/embed.js\n iframely.CDN = options.cdn || m2[1];\n }\n\n if (options.cancel) {\n if (options.cancel === '0' || options.cancel === 'false') {\n iframely.RECOVER_HREFS_ON_CANCEL = true;\n }\n delete options.cancel;\n }\n\n if (Object.keys(options).length > 0) {\n // give preferrence to CDN from scripts that have query-string. \n // CDN is most critical for embeds with empty data-iframely-url\n // and those should have at least ?api_key... in script src\n\n return options;\n } // or keep searching\n }\n }\n // should have exited by now if any querystring found...\n return {};\n}\n\nfunction requestSizeOfExistingIframes(domains) {\n\n var iframes = document.querySelectorAll('iframe[src*=\"' + (domains || iframely.DOMAINS).join('\"], iframe[src*=\"') + '\"]');\n for(var i = 0; i < iframes.length; i++) {\n var iframe = iframes[i];\n var src = iframe.src;\n if (src.match(/^(https?:)?\\/\\/[^/]+\\/api\\/iframe\\?.+/)\n || src.match(/^(https?:)?\\/\\/[^/]+\\/\\w+(\\?.*)?$/)) {\n messaging.postMessage({\n method: 'getSize'\n }, '*', iframe.contentWindow);\n }\n }\n} \n\nfunction nonTextChildCount(element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n var text = el.textContent || el.innerText;\n text = text.replace(/\\s|\\n/g, '');\n if (text) {\n // Do not skip text node with text.\n count++;\n }\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n count++;\n }\n }\n return count;\n}\n\nfunction containsString(list, findValue) {\n var value, i = 0;\n while (i < list.length) {\n value = list[i];\n\n if (value == findValue) {\n return true;\n }\n\n if (value && value.test && value.test(findValue)) {\n return true;\n }\n\n i++;\n }\n}\n\nvar parseQueryString = exports.parseQueryString = function(url, allowed_query_string) {\n var query = url.match(/\\?(.+)/i);\n if (query) {\n query = query[1];\n var data = query.split('&');\n var result = {};\n for(var i=0; i 2 /* 2 is lazy-cover */\n || (checkClass && aspectWrapper.getAttribute('class') !== iframely.ASPECT_WRAPPER_CLASS)\n || (!checkClass && aspectWrapper.style.position !== 'relative' && aspectWrapper.getAttribute('class') !== iframely.ASPECT_WRAPPER_CLASS)) {\n return;\n }\n\n var maxWidthWrapper = aspectWrapper.parentNode;\n\n if (!maxWidthWrapper\n || maxWidthWrapper.nodeName !== 'DIV'\n || nonTextChildCount(maxWidthWrapper) > 1\n || (checkClass && maxWidthWrapper.getAttribute('class') && maxWidthWrapper.getAttribute('class').split(' ').indexOf(iframely.MAXWIDTH_WRAPPER_CLASS) === -1)\n || (!checkClass && maxWidthWrapper.getAttribute('class') && !maxWidthWrapper.getAttribute('class').match(/iframely/i) /* users can modify class */)\n ) {\n return;\n }\n\n return {\n aspectWrapper: aspectWrapper,\n maxWidthWrapper: maxWidthWrapper\n };\n};\n\nexports.addDefaultWrappers = function(el) {\n var parentNode = el.parentNode;\n\n var maxWidthWrapper = document.createElement('div');\n maxWidthWrapper.className = iframely.MAXWIDTH_WRAPPER_CLASS;\n\n var aspectWrapper = document.createElement('div');\n aspectWrapper.className = iframely.ASPECT_WRAPPER_CLASS;\n\n maxWidthWrapper.appendChild(aspectWrapper);\n\n parentNode.insertBefore(maxWidthWrapper, el);\n\n return {\n aspectWrapper: aspectWrapper,\n maxWidthWrapper: maxWidthWrapper\n };\n};\n\nexports.getWidget = function(iframe) {\n var wrapper = getIframeWrapper(iframe);\n if (!wrapper) {\n return;\n }\n var widget = {\n iframe: iframe, // can actually be ahref\n aspectWrapper: wrapper.aspectWrapper,\n maxWidthWrapper: wrapper.maxWidthWrapper\n };\n if (iframe.nodeName === 'A' && iframe.hasAttribute('href')) {\n widget.url = iframe.getAttribute('href');\n } else if (iframe.hasAttribute('src') && /url=/.test(iframe.getAttribute('src'))) {\n var qs = parseQueryString(iframe.getAttribute('src'));\n if (qs.url) {\n widget.url = qs.url;\n }\n }\n return widget;\n};\n\niframely.getElementComputedStyle = function(el, style) {\n return window.getComputedStyle && window.getComputedStyle(el).getPropertyValue(style);\n};\n\nexports.setStyles = function(el, styles) {\n if (el) { // let's check it's still defined, just in case\n Object.keys(styles).forEach(function(key) {\n\n var value = styles[key];\n if (typeof value === 'number' || (typeof value === 'string' && /^(\\d+)?\\.?(\\d+)$/.test(value))) {\n value = value + 'px';\n }\n\n var currentValue = el.style[key];\n\n if (!window.getComputedStyle ||\n // don't change CSS values in pixels, such as height:0\n (\n iframely.getElementComputedStyle(el, key) != value\n // && don't set default aspect ratio if it's defined in CSS anyway\n && !(el.className == 'iframely-responsive' && key === 'paddingBottom' && !currentValue && /^56\\.2\\d+%$/.test(value))\n // && do not change max-width if new value === 'keep'.\n && !(key === 'max-width' && value === 'keep')\n )) {\n\n el.style[key] = value || ''; // remove style that is no longer needed\n }\n });\n }\n};\n\nvar applyNonce = exports.applyNonce = function(element) {\n if (iframely.config.nonce) {\n element.nonce = iframely.config.nonce;\n }\n};\n\nfunction defineDefaultStyles() {\n\n var iframelyStylesId = 'iframely-styles';\n var styles = document.getElementById(iframelyStylesId);\n\n if (!styles) {\n // copy-paste default styles from https://iframely.com/docs/omit-css\n // box-sizing:border-box - need for iOS Safari .\n var iframelyStyles = '.iframely-responsive{top:0;left:0;width:100%;height:0;position:relative;padding-bottom:56.25%;box-sizing:border-box;}.iframely-responsive>*{top:0;left:0;width:100%;height:100%;position:absolute;border:0;box-sizing:border-box;}';\n\n styles = document.createElement('style');\n styles.id = iframelyStylesId;\n styles.type = 'text/css';\n applyNonce(styles);\n\n if (styles.styleSheet) {\n // IE.\n styles.styleSheet.cssText = iframelyStyles;\n } else {\n styles.innerHTML = iframelyStyles;\n }\n document.getElementsByTagName('head')[0].appendChild(styles);\n }\n}\n\n\nvar addQueryString = exports.addQueryString = function(href, options) {\n\n var query_string = '';\n\n Object.keys(options).forEach(function(key) {\n var value = options[key];\n\n // array is used e.g. for import: uris and ids\n if (Object.prototype.toString.call(value) === '[object Array]') {\n\n var values = value.map(function(uri) {\n return key + '=' + encodeURIComponent(uri);\n });\n query_string += '&' + values.join('&'); \n\n } else if (typeof value !== 'undefined' && href.indexOf(key + '=') === -1 ) { // set explicitely in options, skip undefines\n\n // Do not convert boolean for _option.\n if (typeof value === 'boolean' && key.charAt(0) !== '_') {\n value = value ? 1 : 0;\n }\n\n query_string += '&' + key + '=' + encodeURIComponent(value);\n }\n\n });\n\n return href + (query_string !== '' ? (href.indexOf('?') > -1 ? '&' : '?') + query_string.replace(/^&/, '') : '');\n};\n\nexports.getEndpoint = function(src, options, config_params) {\n\n var endpoint = src;\n\n if (!/^(https?:)?\\/\\//i.test(src)) {\n endpoint = (options.CDN || iframely.CDN) + endpoint;\n delete options.CDN;\n }\n\n if (!/^(?:https?:)?\\/\\//i.test(endpoint)) {\n endpoint = '//' + endpoint;\n } \n\n if (options) {\n endpoint = addQueryString(endpoint, options);\n }\n\n // get additional params from config\n if (config_params && config_params.length) {\n\n var more_options = {};\n\n var iframely_config_keys = Object.keys(iframely.config);\n for (var i = 0; i < iframely_config_keys.length; i++) {\n var key = iframely_config_keys[i];\n if (containsString(config_params, key)) {\n more_options[key] = iframely.config[key];\n }\n }\n\n endpoint = addQueryString(endpoint, more_options);\n }\n\n\n if (/^(https?:)?\\/\\//i.test(endpoint) // Path is url.\n && !endpoint.match(/^(https?:)?\\/\\//i)[1] // No http protocol specified.\n && document.location.protocol !== 'http:' // Document in `file:` or other protocol.\n && document.location.protocol !== 'https:') {\n\n endpoint = 'https:' + endpoint;\n }\n\n return endpoint;\n};\n\n// helper method to init more options through js code\niframely.extendOptions = function(options) {\n\n options && Object.keys(options).forEach(function(key) {\n var new_value = (\n options[key] === 0 || options[key] === '0' || options[key] === false || options[key] === 'false'\n ? false : (options[key] === 1 || options[key] === '1' || options[key] === true || options[key] === 'true'\n ? true : options[key]));\n\n if (iframely.config[key] !== false) { // set new value only when undefined or not previously disabled\n iframely.config[key] = new_value;\n }\n });\n\n};\n\nfunction parseQueryStringFromScriptSrc() {\n\n // Extract global iframely params.\n var scripts = document.querySelectorAll('script[src*=\"embed.js\"], script[src*=\"iframely.js\"]');\n\n for(var i = 0; i < scripts.length; i++) {\n var src = scripts[i].getAttribute('src').replace(/&/gi, '&');\n\n if (iframely.SCRIPT_RE.test(src)) { // found the script on custom origin or default Iframely CDN\n\n var options = parseQueryString(src, iframely.SUPPORTED_QUERY_STRING.concat('cdn', 'cancel', 'nonce'));\n\n var m2 = src.match(iframely.CDN_RE);\n if (m2 || options.cdn) { // ignore non-Iframely hosts such as s.imgur.com/min/embed.js\n iframely.CDN = options.cdn || m2[1];\n }\n\n if (options.cancel) {\n if (options.cancel === '0' || options.cancel === 'false') {\n iframely.RECOVER_HREFS_ON_CANCEL = true;\n }\n delete options.cancel;\n }\n\n if (Object.keys(options).length > 0) {\n // give preferrence to CDN from scripts that have query-string. \n // CDN is most critical for embeds with empty data-iframely-url\n // and those should have at least ?api_key... in script src\n\n return options;\n } // or keep searching\n }\n }\n // should have exited by now if any querystring found...\n return {};\n}\n\nfunction requestSizeOfExistingIframes(domains) {\n\n var iframes = document.querySelectorAll('iframe[src*=\"' + (domains || iframely.DOMAINS).join('\"], iframe[src*=\"') + '\"]');\n for(var i = 0; i < iframes.length; i++) {\n var iframe = iframes[i];\n var src = iframe.src;\n if (src.match(/^(https?:)?\\/\\/[^/]+\\/api\\/iframe\\?.+/)\n || src.match(/^(https?:)?\\/\\/[^/]+\\/\\w+(\\?.*)?$/)) {\n messaging.postMessage({\n method: 'getSize'\n }, '*', iframe.contentWindow);\n }\n }\n} \n\nfunction nonTextChildCount(element) {\n var count = 0;\n for(var i = 0; i < element.childNodes.length; i++) {\n var el = element.childNodes[i];\n if (el.nodeType === Node.TEXT_NODE) {\n var text = el.textContent || el.innerText;\n text = text.replace(/\\s|\\n/g, '');\n if (text) {\n // Do not skip text node with text.\n count++;\n }\n } else if (el.nodeType === Node.ELEMENT_NODE) {\n count++;\n }\n }\n return count;\n}\n\nfunction containsString(list, findValue) {\n var value, i = 0;\n while (i < list.length) {\n value = list[i];\n\n if (value == findValue) {\n return true;\n }\n\n if (value && value.test && value.test(findValue)) {\n return true;\n }\n\n i++;\n }\n}\n\nvar parseQueryString = exports.parseQueryString = function(url, allowed_query_string) {\n var query = url.match(/\\?(.+)/i);\n if (query) {\n query = query[1];\n var data = query.split('&');\n var result = {};\n for(var i=0; i= 0;\n }\n return found && el;\n }\n\n var parentNode = widget.maxWidthWrapper && widget.maxWidthWrapper.parentNode;\n var naNode = widget.maxWidthWrapper;\n\n // Try remove by parentClass first.\n if (iframely.config && iframely.config.parent) {\n // Remove by parent class.\n var parentElement = findParent(widget.maxWidthWrapper, iframely.config.parent);\n\n if (parentElement) {\n parentNode = parentElement.parentNode;\n naNode = parentElement;\n }\n }\n\n if (widget.url) {\n var text = widget.iframe && (widget.iframe.textContent || widget.iframe.innerText);\n\n iframely.triggerAsync('cancel', widget.url, parentNode, text, naNode.nextSibling);\n }\n // Re-creating a link if people had it as text is now deprecated (see in deprecated.js)\n // New use: iframely.on('cancel', function(url, parentNode, text) {...} );\n\n parentNode.removeChild(naNode);\n};\n\n//# sourceURL=webpack:///./widget-cancel.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n if (message.method === 'cancelWidget') { \n iframely.cancelWidget(widget);\n }\n});\n\niframely.cancelWidget = function(widget) {\n\n if (!widget) {\n console.warn('iframely.cancelWidget called without widget param');\n return;\n }\n\n function findParent(el, className) {\n var found = false;\n while(!found && el.parentNode) {\n el = el.parentNode;\n found = el.className && el.className.split(' ').indexOf(className) >= 0;\n }\n return found && el;\n }\n\n var parentNode = widget.maxWidthWrapper && widget.maxWidthWrapper.parentNode;\n var naNode = widget.maxWidthWrapper;\n\n // Try remove by parentClass first.\n if (iframely.config && iframely.config.parent) {\n // Remove by parent class.\n var parentElement = findParent(widget.maxWidthWrapper, iframely.config.parent);\n\n if (parentElement) {\n parentNode = parentElement.parentNode;\n naNode = parentElement;\n }\n }\n\n if (widget.url) {\n var text = widget.iframe && (widget.iframe.textContent || widget.iframe.innerText);\n\n iframely.triggerAsync('cancel', widget.url, parentNode, text, naNode.nextSibling);\n }\n // Re-creating a link if people had it as text is now deprecated (see in deprecated.js)\n // New use: iframely.on('cancel', function(url, parentNode, text) {...} );\n\n parentNode.removeChild(naNode);\n};\n\n//# sourceURL=webpack:///./widget-cancel.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./widget-click.js":
+/***/ "./widget-click.js"
/*!*************************!*\
!*** ./widget-click.js ***!
\*************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n if (message.method === 'open-href' || message.method === 'click') {\n iframely.trigger(message.method, message.href);\n }\n});\n\n// Do not override user defined handler.\nif (!iframely.openHref) {\n iframely.openHref = function(href) {\n if (href.indexOf(window.location.origin) === 0) {\n // Redirect top on same origin.\n window.location.href = href;\n } else {\n // Open new tab on another origin.\n window.open(href, '_blank', 'noopener');\n }\n };\n}\n\niframely.on('open-href', function(href) {\n iframely.triggerAsync('click', href);\n iframely.openHref(href);\n});\n\n//# sourceURL=webpack:///./widget-click.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n if (message.method === 'open-href' || message.method === 'click') {\n iframely.trigger(message.method, message.href);\n }\n});\n\n// Do not override user defined handler.\nif (!iframely.openHref) {\n iframely.openHref = function(href) {\n if (href.indexOf(window.location.origin) === 0) {\n // Redirect top on same origin.\n window.location.href = href;\n } else {\n // Open new tab on another origin.\n window.open(href, '_blank', 'noopener');\n }\n };\n}\n\niframely.on('open-href', function(href) {\n iframely.triggerAsync('click', href);\n iframely.openHref(href);\n});\n\n//# sourceURL=webpack:///./widget-click.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./widget-options.js":
+/***/ "./widget-options.js"
/*!***************************!*\
!*** ./widget-options.js ***!
\***************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n if (message.method === 'setIframelyEmbedOptions') {\n // console.log('setIframelyEmbedOptions', message.data);\n iframely.trigger('options', widget, message.data);\n }\n});\n\n//# sourceURL=webpack:///./widget-options.js?");
+eval("{var iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n if (message.method === 'setIframelyEmbedOptions') {\n iframely.trigger('options', widget, message.data);\n }\n});\n\n\n//# sourceURL=webpack:///./widget-options.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./widget-resize.js":
+/***/ "./widget-resize.js"
/*!**************************!*\
!*** ./widget-resize.js ***!
\**************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n\n if (message.method === 'setIframelyWidgetSize' \n || message.method === 'resize' \n || message.method === 'setIframelyEmbedData' \n || message.type === 'embed-size'\n || message.context === 'iframe.resize') {\n\n var frame_styles = null;\n\n if (message.data && message.data.media && message.data.media.frame_style) {\n\n message.data.media.frame_style.split(';').forEach(function(str) {\n\n if(str.trim() !== '' && str.indexOf(':') > -1) {\n var props = str.split(':');\n if (props.length === 2) {\n frame_styles = frame_styles || {};\n frame_styles[props[0].trim()] = props[1].trim();\n }\n }\n });\n\n widgetDecorate(widget, frame_styles);\n\n } else if (message.method === 'setIframelyEmbedData') {\n\n // setIframelyEmbedData always sets frame_style. If not - reset.\n // setIframelyEmbedData without message.data resets border.\n widgetDecorate(widget, null);\n }\n\n var media = message.data && message.data.media;\n if (!media && message.height) {\n media = {\n height: message.height,\n 'max-width': 'keep'\n };\n }\n\n widgetResize(widget, media);\n }\n});\n\n// All frame_style attributes.\nvar resetWrapperBorderStyles = {'border': '', 'border-radius': '', 'box-shadow': '', 'overflow': ''};\nvar resetIframeBorderStyles = {'border': '0', 'border-radius': '', 'box-shadow': '', 'overflow': ''};\n\nfunction widgetDecorate(widget, styles) {\n\n if (styles && widget && widget.iframe) {\n\n if (styles['border-radius']) {\n // fix for Chrome?\n styles.overflow = 'hidden';\n utils.setStyles(widget.aspectWrapper, styles);\n } else {\n utils.setStyles(widget.iframe, styles);\n }\n\n } else if (!styles && widget && widget.iframe) {\n\n utils.setStyles(widget.aspectWrapper, resetWrapperBorderStyles);\n utils.setStyles(widget.iframe, resetIframeBorderStyles);\n }\n}\n\nfunction getTotalBorderWidth(widget) {\n\n // Get frame style from iframe or aspect wrapper as in widgetDecorate for Chrome fix.\n var frameStylesBorder = \n (widget.iframe && widget.iframe.style.border) \n || (widget.aspectWrapper && widget.aspectWrapper.style.border);\n\n // Get iframe border width from frame style.\n var borderWidth = frameStylesBorder && frameStylesBorder.match(/(\\d+)px/) || 0;\n if (borderWidth) {\n borderWidth = parseInt(borderWidth[1]);\n // For width and height border size will be 2x.\n borderWidth = borderWidth * 2;\n }\n\n return borderWidth;\n}\n\nfunction widgetResize(widget, media) {\n\n if (media && Object.keys(media).length > 0 && widget) {\n\n var borderWidth = getTotalBorderWidth(widget);\n\n var oldIframeHeight = window.getComputedStyle && window.getComputedStyle(widget.iframe).getPropertyValue('height');\n\n\n var maxWidth = media['max-width'];\n if (typeof maxWidth === 'number') {\n // Can be max-width: 56vh.\n maxWidth += borderWidth;\n }\n\n utils.setStyles(widget.maxWidthWrapper, {\n 'max-width': maxWidth,\n 'min-width': media['min-width'] && (media['min-width'] + borderWidth),\n width: media.width && (media.width + borderWidth)\n });\n\n if (media.scrolling && widget.iframe) {\n widget.iframe.setAttribute('scrolling', media.scrolling);\n }\n\n var aspectRatio = media['aspect-ratio'];\n\n // If no aspect and height - do not change aspect wrapper.\n if (aspectRatio || media.height) {\n utils.setStyles(widget.aspectWrapper, {\n paddingBottom: aspectRatio ? (Math.round(1000 * 100 / aspectRatio) / 1000 + '%') : 0, // if fixed-size, it will get set to 0\n paddingTop: aspectRatio && media['padding-bottom'], // if a fixed-height padding at the bottom of responsive div is required\n height: aspectRatio ? 0 : (media.height && (media.height + borderWidth)) // if defined\n });\n }\n\n\n var currentHeight = window.getComputedStyle && window.getComputedStyle(widget.iframe).getPropertyValue('height');\n\n if (oldIframeHeight && oldIframeHeight !== currentHeight) {\n iframely.triggerAsync('heightChanged', widget.iframe, oldIframeHeight, currentHeight);\n }\n\n }\n}\n\n//# sourceURL=webpack:///./widget-resize.js?");
+eval("{var utils = __webpack_require__(/*! ./utils */ \"./utils.js\");\nvar iframely = __webpack_require__(/*! ./iframely */ \"./iframely.js\");\n\niframely.on('message', function(widget, message) {\n\n if (message.method === 'setIframelyWidgetSize' \n || message.method === 'resize' \n || message.method === 'setIframelyEmbedData' \n || message.type === 'embed-size'\n || message.context === 'iframe.resize') {\n\n var frame_styles = null;\n\n if (message.data && message.data.media && message.data.media.frame_style) {\n\n message.data.media.frame_style.split(';').forEach(function(str) {\n\n if(str.trim() !== '' && str.indexOf(':') > -1) {\n var props = str.split(':');\n if (props.length === 2) {\n frame_styles = frame_styles || {};\n frame_styles[props[0].trim()] = props[1].trim();\n }\n }\n });\n\n widgetDecorate(widget, frame_styles);\n\n } else if (message.method === 'setIframelyEmbedData') {\n\n // setIframelyEmbedData always sets frame_style. If not - reset.\n // setIframelyEmbedData without message.data resets border.\n widgetDecorate(widget, null);\n }\n\n var media = message.data && message.data.media;\n if (!media && message.height) {\n media = {\n height: message.height,\n 'max-width': 'keep'\n };\n }\n\n widgetResize(widget, media);\n }\n});\n\n// All frame_style attributes.\nvar resetWrapperBorderStyles = {'border': '', 'border-radius': '', 'box-shadow': '', 'overflow': ''};\nvar resetIframeBorderStyles = {'border': '0', 'border-radius': '', 'box-shadow': '', 'overflow': ''};\n\nfunction widgetDecorate(widget, styles) {\n\n if (styles && widget && widget.iframe) {\n\n if (styles['border-radius']) {\n // fix for Chrome?\n styles.overflow = 'hidden';\n utils.setStyles(widget.aspectWrapper, styles);\n } else {\n utils.setStyles(widget.iframe, styles);\n }\n\n } else if (!styles && widget && widget.iframe) {\n\n utils.setStyles(widget.aspectWrapper, resetWrapperBorderStyles);\n utils.setStyles(widget.iframe, resetIframeBorderStyles);\n }\n}\n\nfunction getTotalBorderWidth(widget) {\n\n // Get frame style from iframe or aspect wrapper as in widgetDecorate for Chrome fix.\n var frameStylesBorder = \n (widget.iframe && widget.iframe.style.border) \n || (widget.aspectWrapper && widget.aspectWrapper.style.border);\n\n // Get iframe border width from frame style.\n var borderWidth = frameStylesBorder && frameStylesBorder.match(/(\\d+)px/) || 0;\n if (borderWidth) {\n borderWidth = parseInt(borderWidth[1]);\n // For width and height border size will be 2x.\n borderWidth = borderWidth * 2;\n }\n\n return borderWidth;\n}\n\nfunction widgetResize(widget, media) {\n\n if (media && Object.keys(media).length > 0 && widget) {\n\n var borderWidth = getTotalBorderWidth(widget);\n\n var oldIframeHeight = window.getComputedStyle && window.getComputedStyle(widget.iframe).getPropertyValue('height');\n\n\n var maxWidth = media['max-width'];\n if (typeof maxWidth === 'number') {\n // Can be max-width: 56vh.\n maxWidth += borderWidth;\n }\n\n utils.setStyles(widget.maxWidthWrapper, {\n 'max-width': maxWidth,\n 'min-width': media['min-width'] && (media['min-width'] + borderWidth),\n width: media.width && (media.width + borderWidth)\n });\n\n if (media.scrolling && widget.iframe) {\n widget.iframe.setAttribute('scrolling', media.scrolling);\n }\n\n var aspectRatio = media['aspect-ratio'];\n\n // If no aspect and height - do not change aspect wrapper.\n if (aspectRatio || media.height) {\n utils.setStyles(widget.aspectWrapper, {\n paddingBottom: aspectRatio ? (Math.round(1000 * 100 / aspectRatio) / 1000 + '%') : 0, // if fixed-size, it will get set to 0\n paddingTop: aspectRatio && media['padding-bottom'], // if a fixed-height padding at the bottom of responsive div is required\n height: aspectRatio ? 0 : (media.height && (media.height + borderWidth)) // if defined\n });\n }\n\n\n var currentHeight = window.getComputedStyle && window.getComputedStyle(widget.iframe).getPropertyValue('height');\n\n if (oldIframeHeight && oldIframeHeight !== currentHeight) {\n iframely.triggerAsync('heightChanged', widget.iframe, oldIframeHeight, currentHeight);\n }\n\n }\n}\n\n\n//# sourceURL=webpack:///./widget-resize.js?\n}");
-/***/ })
+/***/ }
-/******/ });
\ No newline at end of file
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ if (!(moduleId in __webpack_modules__)) {
+/******/ delete __webpack_module_cache__[moduleId];
+/******/ var e = new Error("Cannot find module '" + moduleId + "'");
+/******/ e.code = 'MODULE_NOT_FOUND';
+/******/ throw e;
+/******/ }
+/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/global */
+/******/ (() => {
+/******/ __webpack_require__.g = (function() {
+/******/ if (typeof globalThis === 'object') return globalThis;
+/******/ try {
+/******/ return this || new Function('return this')();
+/******/ } catch (e) {
+/******/ if (typeof window === 'object') return window;
+/******/ }
+/******/ })();
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // startup
+/******/ // Load entry module and return exports
+/******/ // This entry module can't be inlined because the eval devtool is used.
+/******/ var __webpack_exports__ = __webpack_require__("./index.js");
+/******/
+/******/ })()
+;
\ No newline at end of file
diff --git a/dist/embed.min.js b/dist/embed.min.js
index 3c9ba3a..efcca27 100644
--- a/dist/embed.min.js
+++ b/dist/embed.min.js
@@ -1 +1 @@
-!function(e){var t={};function r(i){if(t[i])return t[i].exports;var n=t[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(i,n,function(t){return e[t]}.bind(null,n));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=30)}([function(e,t){var r=window.iframely=window.iframely||{};r.config=r.config||{},e.exports=r},function(e,t,r){var i=r(0),n=r(2);i.on("init",(function(){i.extendOptions(function(){for(var e=document.querySelectorAll('script[src*="embed.js"], script[src*="iframely.js"]'),t=0;t0)return n}}return{}}()),function(){var e=document.getElementById("iframely-styles");if(!e){var t=".iframely-responsive{top:0;left:0;width:100%;height:0;position:relative;padding-bottom:56.25%;box-sizing:border-box;}.iframely-responsive>*{top:0;left:0;width:100%;height:100%;position:absolute;border:0;box-sizing:border-box;}";(e=document.createElement("style")).id="iframely-styles",e.type="text/css",o(e),e.styleSheet?e.styleSheet.cssText=t:e.innerHTML=t,document.getElementsByTagName("head")[0].appendChild(e)}}(),i.config.theme&&i.setTheme(i.config.theme),function(e){for(var t=document.querySelectorAll('iframe[src*="'+(e||i.DOMAINS).join('"], iframe[src*="')+'"]'),r=0;r2||t&&r.getAttribute("class")!==i.ASPECT_WRAPPER_CLASS||!t&&"relative"!==r.style.position&&r.getAttribute("class")!==i.ASPECT_WRAPPER_CLASS)){var n=r.parentNode;if(!(!n||"DIV"!==n.nodeName||c(n)>1||t&&n.getAttribute("class")&&-1===n.getAttribute("class").split(" ").indexOf(i.MAXWIDTH_WRAPPER_CLASS)||!t&&n.getAttribute("class")&&!n.getAttribute("class").match(/iframely/i)))return{aspectWrapper:r,maxWidthWrapper:n}}};t.addDefaultWrappers=function(e){var t=e.parentNode,r=document.createElement("div");r.className=i.MAXWIDTH_WRAPPER_CLASS;var n=document.createElement("div");return n.className=i.ASPECT_WRAPPER_CLASS,r.appendChild(n),t.insertBefore(r,e),{aspectWrapper:n,maxWidthWrapper:r}},t.getWidget=function(e){var t=a(e);if(t){var r={iframe:e,aspectWrapper:t.aspectWrapper,maxWidthWrapper:t.maxWidthWrapper};if("A"===e.nodeName&&e.hasAttribute("href"))r.url=e.getAttribute("href");else if(e.hasAttribute("src")&&/url=/.test(e.getAttribute("src"))){var i=l(e.getAttribute("src"));i.url&&(r.url=i.url)}return r}},i.getElementComputedStyle=function(e,t){return window.getComputedStyle&&window.getComputedStyle(e).getPropertyValue(t)},t.setStyles=function(e,t){e&&Object.keys(t).forEach((function(r){var n=t[r];("number"==typeof n||"string"==typeof n&&/^(\d+)?\.?(\d+)$/.test(n))&&(n+="px");var a=e.style[r];window.getComputedStyle&&(i.getElementComputedStyle(e,r)==n||"iframely-responsive"==e.className&&"paddingBottom"===r&&!a&&/^56\.2\d+%$/.test(n)||"max-width"===r&&"keep"===n)||(e.style[r]=n||"")}))};var o=t.applyNonce=function(e){i.config.nonce&&(e.nonce=i.config.nonce)};var d=t.addQueryString=function(e,t){var r="";return Object.keys(t).forEach((function(i){var n=t[i];if("[object Array]"===Object.prototype.toString.call(n)){var a=n.map((function(e){return i+"="+encodeURIComponent(e)}));r+="&"+a.join("&")}else void 0!==n&&-1===e.indexOf(i+"=")&&("boolean"==typeof n&&"_"!==i.charAt(0)&&(n=n?1:0),r+="&"+i+"="+encodeURIComponent(n))})),e+(""!==r?(e.indexOf("?")>-1?"&":"?")+r.replace(/^&/,""):"")};function c(e){for(var t=0,r=0;r-1?t?"IFRAME"===t.tagName?a(t,e):o(t,e):(i.extendOptions({theme:e}),o(document,e),i.trigger("set-theme",e)):console.warn('Using iframely.setTheme with not supported theme: "'+e+'". Supported themes are: '+i.SUPPORTED_THEMES.join(", "))}},function(e,t,r){var i=r(1),n=r(0),a={};function o(e,t,r){var a,o=e.cancel,d=e.shadow,s=e.renderEvent,l=i.getIframeWrapper(t,!0);if(o)a=i.getWidget(t),n.cancelWidget(a||{maxWidthWrapper:t,iframe:t,url:t.getAttribute("href")});else{var u,f;if((a=document.createElement("div")).innerHTML=e.html,l&&!s?(u=l.aspectWrapper.parentNode,f=l.aspectWrapper,l.maxWidthWrapper.removeAttribute("style")):(u=t.parentNode,f=t),d){var p=document.createElement("div"),m=p.attachShadow({mode:"open"});m.appendChild(a);var g={shadowRoot:m,shadowContainer:p,container:u,context:e.context,stylesIds:e.stylesIds,stylesDict:r.commonShadowStyles};n.trigger("import-shadow-widget-before-render",g),u.insertBefore(p,f),n.trigger("import-shadow-widget-after-render",g)}else u.insertBefore(a,f),function e(t){function r(e){var r=e.text||e.textContent||e.innerHTML||"",n=i.createScript();n.type="text/javascript";for(var a=0;a4&&(t=null);var i=t&&t.parentNode;i&&i.getAttribute("class")&&i.getAttribute("class").split(" ").indexOf(n.MAXWIDTH_WRAPPER_CLASS)>-1&&(t.removeAttribute("style"),t.removeAttribute("class"),i.removeAttribute("style"))}n.on("load",(function(e){if(!e&&!1!==n.config.import&&document.head.attachShadow&&document.location&&(n.debug||"http:"===document.location.protocol||"https:"===document.location.protocol)&&!n.config.playerjs&&!n.config.lazy&&!n.import){var t=document.querySelectorAll("a[data-iframely-url]:not([data-import-uri])");t.length>1&&function(e){var t=i.createScript(),r=[],o=[],c=null;function s(e,t){a[e]||(a[e]=[]),a[e].push(t)}function l(e){var t=e.getAttribute("data-iframely-url"),a=t.match(n.ID_RE),d=a&&a[1],l=i.parseQueryString(t,n.SUPPORTED_QUERY_STRING.concat("url")),u=l.url;delete l.url;var f="0"===l.import||"false"===l.import||"1"===l.playerjs||"true"===l.playerjs;if(!f){var p=t.match(n.BASE_RE);l.CDN=p&&p[0],c?JSON.stringify(l,Object.keys(l).sort())!==JSON.stringify(c,Object.keys(c).sort())&&(f=!0):c=l}if(f)n.trigger("load",e);else if(d)e.setAttribute("data-import-uri",d),-1===o.indexOf(d)&&o.push(d),s(d,e);else{u||(u=e.getAttribute("href")),(c.key||c.api_key||n.config.api_key||n.config.key)&&u?(e.setAttribute("data-import-uri",u),-1===r.indexOf(u)&&r.push(u),s(u,e)):n.trigger("load",e)}}for(var u=0;u0||o.length>0?((c=c||{}).touch=n.isTouch(),c.flash=function(){var e=!1;try{var t=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");e=!!t}catch(t){e=!(!navigator.mimeTypes||null==navigator.mimeTypes["application/x-shockwave-flash"]||!navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)}return e}(),c.app=1,n.config.theme&&(c.theme=n.config.theme),r.length>0&&(c.uri=r),o.length>0&&(c.ids=o.join("&")),c.v=n.VERSION,t.src=i.getEndpoint("/api/import/v2",c,n.SUPPORTED_QUERY_STRING),t.onerror=function(){d()},document.head.appendChild(t),n.import=t):(d(),n.trigger("load"))}(t)}})),n.on("load",(function(e,t){if(e&&e.uri&&(e.html||e.cancel)){var r=a[e.uri];if(r)for(var i=0;i1&&function(e,t){for(var r=0,i=0;i=0;return r&&e}(e.maxWidthWrapper,i.config.parent);n&&(t=n.parentNode,r=n)}if(e.url){var a=e.iframe&&(e.iframe.textContent||e.iframe.innerText);i.triggerAsync("cancel",e.url,t,a,r.nextSibling)}t.removeChild(r)}else console.warn("iframely.cancelWidget called without widget param")}},function(e,t,r){var i=r(1),n=r(0);n.on("message",(function(e,t){if("setIframelyWidgetSize"===t.method||"resize"===t.method||"setIframelyEmbedData"===t.method||"embed-size"===t.type||"iframe.resize"===t.context){var r=null;t.data&&t.data.media&&t.data.media.frame_style?(t.data.media.frame_style.split(";").forEach((function(e){if(""!==e.trim()&&e.indexOf(":")>-1){var t=e.split(":");2===t.length&&((r=r||{})[t[0].trim()]=t[1].trim())}})),d(e,r)):"setIframelyEmbedData"===t.method&&d(e,null);var a=t.data&&t.data.media;!a&&t.height&&(a={height:t.height,"max-width":"keep"}),function(e,t){if(t&&Object.keys(t).length>0&&e){var r=function(e){var t=e.iframe&&e.iframe.style.border||e.aspectWrapper&&e.aspectWrapper.style.border,r=t&&t.match(/(\d+)px/)||0;r&&(r=parseInt(r[1]),r*=2);return r}(e),a=window.getComputedStyle&&window.getComputedStyle(e.iframe).getPropertyValue("height"),o=t["max-width"];"number"==typeof o&&(o+=r),i.setStyles(e.maxWidthWrapper,{"max-width":o,"min-width":t["min-width"]&&t["min-width"]+r,width:t.width&&t.width+r}),t.scrolling&&e.iframe&&e.iframe.setAttribute("scrolling",t.scrolling);var d=t["aspect-ratio"];(d||t.height)&&i.setStyles(e.aspectWrapper,{paddingBottom:d?Math.round(1e5/d)/1e3+"%":0,paddingTop:d&&t["padding-bottom"],height:d?0:t.height&&t.height+r});var c=window.getComputedStyle&&window.getComputedStyle(e.iframe).getPropertyValue("height");a&&a!==c&&n.triggerAsync("heightChanged",e.iframe,a,c)}}(e,a)}}));var a={border:"","border-radius":"","box-shadow":"",overflow:""},o={border:"0","border-radius":"","box-shadow":"",overflow:""};function d(e,t){t&&e&&e.iframe?t["border-radius"]?(t.overflow="hidden",i.setStyles(e.aspectWrapper,t)):i.setStyles(e.iframe,t):!t&&e&&e.iframe&&(i.setStyles(e.aspectWrapper,a),i.setStyles(e.iframe,o))}},function(e,t,r){var i=r(0);i.on("message",(function(e,t){"open-href"!==t.method&&"click"!==t.method||i.trigger(t.method,t.href)})),i.openHref||(i.openHref=function(e){0===e.indexOf(window.location.origin)?window.location.href=e:window.open(e,"_blank","noopener")}),i.on("open-href",(function(e){i.triggerAsync("click",e),i.openHref(e)}))},function(e,t,r){var i=r(0);i.on("message",(function(e,t){"setIframelyEmbedOptions"===t.method&&i.trigger("options",e,t.data)}))},function(e,t,r){var i=r(0);i.widgets=i.widgets||{},i.widgets.load=i.load,i.events||(i.events={},i.events.on=i.on,i.events.trigger=i.trigger),i.on("cancel",(function(e,t,r,n){if(i.RECOVER_HREFS_ON_CANCEL&&!r&&(r=e),e&&t&&r&&""!==r){var a=document.createElement("a");a.setAttribute("href",e),a.setAttribute("target","_blank"),a.setAttribute("rel","noopener"),a.textContent=r,n?t.insertBefore(a,n):t.appendChild(a)}}))},function(e,t,r){var i,n=!!(i=navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./))&&parseInt(i[2],10);r(0).SUPPORT_IFRAME_LOADING_ATTR=n&&n>=77},,,,,,,,,,,,function(e,t,r){r(3);var i=r(0);i._loaded||(i._loaded=!0,r(4),r(5),r(7),r(8),r(9),r(10),r(11),r(12),r(13),r(14),r(15),r(16),r(17),r(18),i.trigger("init")),t.iframely=i}]);
\ No newline at end of file
+(()=>{var e={679(e,t,r){var i=r(672),a=r(774);a.on("load",function(e,t){if(e&&e.nodeName&&"string"==typeof t){var r=document.createElement("a");r.setAttribute("href",t),e.appendChild(r),a.trigger("load",r)}}),a.on("load",function(e){if(!e&&!a.import)for(var t=document.querySelectorAll("a[data-iframely-url]:not([data-import-uri])"),r=0;r4&&(t=null);var i=t&&t.parentNode;i&&i.getAttribute("class")&&i.getAttribute("class").split(" ").indexOf(a.MAXWIDTH_WRAPPER_CLASS)>-1&&(t.removeAttribute("style"),t.removeAttribute("class"),i.removeAttribute("style"))}function c(e){function t(e,t){return e.nodeName&&e.nodeName.toUpperCase()===t.toUpperCase()}function r(t){var r=t.text||t.textContent||t.innerHTML||"",a=i.createScript();a.type="text/javascript";for(var n=0;n1&&function(e){var t=i.createScript(),r=[],o=[],s=null;function c(e,t){n[e]||(n[e]=[]),n[e].push(t)}function l(e){var t=e.getAttribute("data-iframely-url"),n=t.match(a.ID_RE),d=n&&n[1],l=i.parseQueryString(t,a.SUPPORTED_QUERY_STRING.concat("url")),p=l.url;delete l.url;var u="0"===l.import||"false"===l.import||"1"===l.playerjs||"true"===l.playerjs;if(!u){var m=t.match(a.BASE_RE);l.CDN=m&&m[0],s?JSON.stringify(l,Object.keys(l).sort())!==JSON.stringify(s,Object.keys(s).sort())&&(u=!0):s=l}u?a.trigger("load",e):d?(e.setAttribute("data-import-uri",d),-1===o.indexOf(d)&&o.push(d),c(d,e)):(p||(p=e.getAttribute("href")),(s.key||s.api_key||a.config.api_key||a.config.key)&&p?(e.setAttribute("data-import-uri",p),-1===r.indexOf(p)&&r.push(p),c(p,e)):a.trigger("load",e))}for(var p=0;p0||o.length>0?((s=s||{}).touch=a.isTouch(),s.flash=function(){var e=!1;try{e=!!new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(t){e=!(!navigator.mimeTypes||null==navigator.mimeTypes["application/x-shockwave-flash"]||!navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)}return e}(),s.app=1,a.config.theme&&(s.theme=a.config.theme),r.length>0&&(s.uri=r),o.length>0&&(s.ids=o.join("&")),s.v=a.VERSION,t.src=i.getEndpoint("/api/import/v2",s,a.SUPPORTED_QUERY_STRING),t.onerror=function(){d()},document.head.appendChild(t),a.import=t):(d(),a.trigger("load"))}(t)}}),a.on("load",function(e,t){if(e&&e.uri&&(e.html||e.cancel)){var r=n[e.uri];if(r)for(var i=0;i1&&function(e,t){for(var r=0,i=0;i=77},369(e,t,r){var i=r(774),a=r(672);function n(e,t){for(var r,i=0;i-1?t?"IFRAME"===t.tagName?n(t,e):o(t,e):(i.extendOptions({theme:e}),o(document,e),i.trigger("set-theme",e)):console.warn('Using iframely.setTheme with not supported theme: "'+e+'". Supported themes are: '+i.SUPPORTED_THEMES.join(", "))}},672(e,t,r){var i=r(774),a=r(369);i.on("init",function(){i.extendOptions(function(){for(var e=document.querySelectorAll('script[src*="embed.js"], script[src*="iframely.js"]'),t=0;t0)return a}}return{}}()),function(){var e="iframely-styles",t=document.getElementById(e);if(!t){var r=".iframely-responsive{top:0;left:0;width:100%;height:0;position:relative;padding-bottom:56.25%;box-sizing:border-box;}.iframely-responsive>*{top:0;left:0;width:100%;height:100%;position:absolute;border:0;box-sizing:border-box;}";(t=document.createElement("style")).id=e,t.type="text/css",o(t),t.styleSheet?t.styleSheet.cssText=r:t.innerHTML=r,document.getElementsByTagName("head")[0].appendChild(t)}}(),i.config.theme&&i.setTheme(i.config.theme),function(e){for(var t=document.querySelectorAll('iframe[src*="'+(e||i.DOMAINS).join('"], iframe[src*="')+'"]'),r=0;r2||t&&r.getAttribute("class")!==i.ASPECT_WRAPPER_CLASS||!t&&"relative"!==r.style.position&&r.getAttribute("class")!==i.ASPECT_WRAPPER_CLASS)){var a=r.parentNode;if(!(!a||"DIV"!==a.nodeName||s(a)>1||t&&a.getAttribute("class")&&-1===a.getAttribute("class").split(" ").indexOf(i.MAXWIDTH_WRAPPER_CLASS)||!t&&a.getAttribute("class")&&!a.getAttribute("class").match(/iframely/i)))return{aspectWrapper:r,maxWidthWrapper:a}}};t.addDefaultWrappers=function(e){var t=e.parentNode,r=document.createElement("div");r.className=i.MAXWIDTH_WRAPPER_CLASS;var a=document.createElement("div");return a.className=i.ASPECT_WRAPPER_CLASS,r.appendChild(a),t.insertBefore(r,e),{aspectWrapper:a,maxWidthWrapper:r}},t.getWidget=function(e){var t=n(e);if(t){var r={iframe:e,aspectWrapper:t.aspectWrapper,maxWidthWrapper:t.maxWidthWrapper};if("A"===e.nodeName&&e.hasAttribute("href"))r.url=e.getAttribute("href");else if(e.hasAttribute("src")&&/url=/.test(e.getAttribute("src"))){var i=l(e.getAttribute("src"));i.url&&(r.url=i.url)}return r}},i.getElementComputedStyle=function(e,t){return window.getComputedStyle&&window.getComputedStyle(e).getPropertyValue(t)},t.setStyles=function(e,t){e&&Object.keys(t).forEach(function(r){var a=t[r];("number"==typeof a||"string"==typeof a&&/^(\d+)?\.?(\d+)$/.test(a))&&(a+="px");var n=e.style[r];window.getComputedStyle&&(i.getElementComputedStyle(e,r)==a||"iframely-responsive"==e.className&&"paddingBottom"===r&&!n&&/^56\.2\d+%$/.test(a)||"max-width"===r&&"keep"===a)||(e.style[r]=a||"")})};var o=t.applyNonce=function(e){i.config.nonce&&(e.nonce=i.config.nonce)},d=t.addQueryString=function(e,t){var r="";return Object.keys(t).forEach(function(i){var a=t[i];if("[object Array]"===Object.prototype.toString.call(a)){var n=a.map(function(e){return i+"="+encodeURIComponent(e)});r+="&"+n.join("&")}else void 0!==a&&-1===e.indexOf(i+"=")&&("boolean"==typeof a&&"_"!==i.charAt(0)&&(a=a?1:0),r+="&"+i+"="+encodeURIComponent(a))}),e+(""!==r?(e.indexOf("?")>-1?"&":"?")+r.replace(/^&/,""):"")};function s(e){for(var t=0,r=0;r=0;return r&&e}(e.maxWidthWrapper,i.config.parent);a&&(t=a.parentNode,r=a)}if(e.url){var n=e.iframe&&(e.iframe.textContent||e.iframe.innerText);i.triggerAsync("cancel",e.url,t,n,r.nextSibling)}t.removeChild(r)}else console.warn("iframely.cancelWidget called without widget param")}},612(e,t,r){var i=r(774);i.on("message",function(e,t){"open-href"!==t.method&&"click"!==t.method||i.trigger(t.method,t.href)}),i.openHref||(i.openHref=function(e){0===e.indexOf(window.location.origin)?window.location.href=e:window.open(e,"_blank","noopener")}),i.on("open-href",function(e){i.triggerAsync("click",e),i.openHref(e)})},742(e,t,r){var i=r(774);i.on("message",function(e,t){"setIframelyEmbedOptions"===t.method&&i.trigger("options",e,t.data)})},850(e,t,r){var i=r(672),a=r(774);a.on("message",function(e,t){if("setIframelyWidgetSize"===t.method||"resize"===t.method||"setIframelyEmbedData"===t.method||"embed-size"===t.type||"iframe.resize"===t.context){var r=null;t.data&&t.data.media&&t.data.media.frame_style?(t.data.media.frame_style.split(";").forEach(function(e){if(""!==e.trim()&&e.indexOf(":")>-1){var t=e.split(":");2===t.length&&((r=r||{})[t[0].trim()]=t[1].trim())}}),d(e,r)):"setIframelyEmbedData"===t.method&&d(e,null);var n=t.data&&t.data.media;!n&&t.height&&(n={height:t.height,"max-width":"keep"}),function(e,t){if(t&&Object.keys(t).length>0&&e){var r=function(e){var t=e.iframe&&e.iframe.style.border||e.aspectWrapper&&e.aspectWrapper.style.border,r=t&&t.match(/(\d+)px/)||0;return r&&(r=parseInt(r[1]),r*=2),r}(e),n=window.getComputedStyle&&window.getComputedStyle(e.iframe).getPropertyValue("height"),o=t["max-width"];"number"==typeof o&&(o+=r),i.setStyles(e.maxWidthWrapper,{"max-width":o,"min-width":t["min-width"]&&t["min-width"]+r,width:t.width&&t.width+r}),t.scrolling&&e.iframe&&e.iframe.setAttribute("scrolling",t.scrolling);var d=t["aspect-ratio"];(d||t.height)&&i.setStyles(e.aspectWrapper,{paddingBottom:d?Math.round(1e5/d)/1e3+"%":0,paddingTop:d&&t["padding-bottom"],height:d?0:t.height&&t.height+r});var s=window.getComputedStyle&&window.getComputedStyle(e.iframe).getPropertyValue("height");n&&n!==s&&a.triggerAsync("heightChanged",e.iframe,n,s)}}(e,n)}});var n={border:"","border-radius":"","box-shadow":"",overflow:""},o={border:"0","border-radius":"","box-shadow":"",overflow:""};function d(e,t){t&&e&&e.iframe?t["border-radius"]?(t.overflow="hidden",i.setStyles(e.aspectWrapper,t)):i.setStyles(e.iframe,t):!t&&e&&e.iframe&&(i.setStyles(e.aspectWrapper,n),i.setStyles(e.iframe,o))}}},t={};function r(i){var a=t[i];if(void 0!==a)return a.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,r),n.exports}r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{r(331);var e=r(774);e._loaded||(e._loaded=!0,r(54),r(912),r(56),r(908),r(472),r(679),r(573),r(324),r(648),r(850),r(612),r(742),r(916),r(291),e.trigger("init"))})()})();
\ No newline at end of file
diff --git a/dist/options.i18n.de.js b/dist/options.i18n.de.js
index 7719cd5..814415b 100644
--- a/dist/options.i18n.de.js
+++ b/dist/options.i18n.de.js
@@ -1,122 +1,82 @@
-/******/ (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 = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = "./options/lang/labels.de.js");
-/******/ })
-/************************************************************************/
-/******/ ({
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+/******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
-/***/ "./iframely.js":
+/***/ "./iframely.js"
/*!*********************!*\
!*** ./iframely.js ***!
\*********************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+(module) {
-eval("var iframely = window.iframely = window.iframely || {};\niframely.config = iframely.config || {};\n\nmodule.exports = iframely;\n\n//# sourceURL=webpack:///./iframely.js?");
+eval("{var iframely = window.iframely = window.iframely || {};\niframely.config = iframely.config || {};\n\nmodule.exports = iframely;\n\n//# sourceURL=webpack:///./iframely.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/lang/labels.de.js":
+/***/ "./options/lang/labels.de.js"
/*!***********************************!*\
!*** ./options/lang/labels.de.js ***!
\***********************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var translator = __webpack_require__(/*! ../translator */ \"./options/translator.js\");\n\nvar lang ='de';\n\nvar labels = {\n // general options\n 'Slimmer horizontal player': 'Schlanker horizontaler Player',\n 'Include playlist': 'Wiedergabeliste anzeigen',\n 'Hide artwork': 'Artwork ausblenden',\n 'Theme color': 'Theme Farbe',\n 'Light': 'Hell',\n 'Dark': 'Dunkel',\n 'Auto': 'Automatisch',\n 'Default': 'Standard',\n 'Adjust height': 'Höhe einstellen',\n 'Active page': 'Aktive Seite',\n\n // Codepen\n 'Use click-to-load': 'Verwende click-to-load',\n 'ex.: 600, in px': 'Z.B. 600, in px',\n\n //Instagram\n 'Hide timed comments': 'Kommentare ausblenden',\n\n //Soundcloud\n 'Let Iframely optimize player for the artwork': 'Optimierung des Players durch IFramely',\n\n // scribd\n 'Show as slideshow': 'Als Slideshow zeigen',\n\n // youtube\n 'Start from': 'Start ab',\n 'ex.: 11, 1m10s': 'z.B. 11, 1m10s',\n 'End on': 'Ende an',\n 'Closed captions': 'Untertitel',\n\n // twitter\n 'Include up to 20 tweets': 'Bis zu 20 Tweets anzeigen',\n 'Hide photos, videos, and cards': 'Verberge Fotos, Videos und Cards',\n 'Hide previous Tweet in conversation thread': 'Verberge den vorigen Tweet in der Konversation',\n 'Use dark theme': 'Verwende dunkles Farbschema',\n 'Adjust width': 'Breite anpassen',\n\n // pinterest\n 'Hide description': 'Beschreibung verbergen',\n\n //mixcloud\n 'Widget style': 'Widget-Style',\n 'Mini': 'Mini',\n 'Classic': 'Klassisch',\n 'Picture': 'Bild',\n\n //google maps\n 'Zoom': 'Zoom',\n 'Map orientation': 'Karten-Ausrichtung',\n 'Album': 'Album',\n 'Portrait': 'Portrait',\n 'Square': 'Quadratisch',\n\n // Flickr\n 'Show context slideshow': 'Als Slideshow anzeigen',\n 'Show description footer': 'Fußzeile anzeigen',\n 'Show user header': 'Kopfbereich anzeigen',\n\n //facebook\n 'Show author\\'s text caption': 'Beschriftung des Autors anzeigen',\n 'Hide author\\'s text caption': 'Beschriftung des Autors verbergen',\n 'Include parent comment (if url is a reply)': 'Ursprünglichen Kommentar einschließen (wenn die Url eine Antwort ist)',\n\n 'Show recent posts': 'Neueste Beiträge anzeigen',\n 'Show profile photos when friends like this': 'Profilfotos anzeigen, wenn Freunde dies mögen',\n 'Use the small header instead': 'Kleine Kopfzeile stattdessen verwenden',\n\n //bandcamp\n 'Artwork': 'Artwork',\n 'Small': 'klein',\n 'Big': 'groß',\n 'None': 'Keines',\n\n 'Layout': 'Layout',\n 'Slim': 'Schlank',\n 'Artwork-only': 'Nur Artwork',\n 'Standard': 'Standard',\n\n //omny.fm\n 'Size & style': 'Größe & Stil',\n 'Wide image': 'Breite Darstellung',\n 'Wide simple': 'Breite Darstellung (Einfach)',\n\n // Vimeo\n 'Text language (ignored if no captions)': 'Sprache der Untertitel (wird ignoriert, wenn keine Untertitel vorhanden)',\n 'Two letters: en, fr, es, de...': 'Zwei Buchstaben: en, fr, es, de...',\n \n // Kickstarter\n 'Don\\'t include attached player': 'Player nicht integrieren',\n 'Attached player only, no card': 'Nur Player, keine Card',\n\n //iframely options\n 'Hold load & play until clicked': 'Klicken zum Abspielen',\n 'Make it a small card': 'Kleine Card verwenden',\n //iframely media cards\n 'Keep using full media card': 'Verwende weiterhin vollständige Media-Cards',\n 'Don\\'t include player': 'Player nicht hinzufügen',\n 'Player only, no card': 'Nur Player, keine Card',\n //iframely media=1\n 'Just the player': 'Nur Player',\n 'Just the image': 'Nur Bild'\n};\n\ntranslator.registerLabels(lang, labels);\n\n\n//# sourceURL=webpack:///./options/lang/labels.de.js?");
+eval("{var translator = __webpack_require__(/*! ../translator */ \"./options/translator.js\");\n\nvar lang ='de';\n\nvar labels = {\n // general options\n 'Slimmer horizontal player': 'Schlanker horizontaler Player',\n 'Include playlist': 'Wiedergabeliste anzeigen',\n 'Hide artwork': 'Artwork ausblenden',\n 'Theme color': 'Theme Farbe',\n 'Light': 'Hell',\n 'Dark': 'Dunkel',\n 'Auto': 'Automatisch',\n 'Default': 'Standard',\n 'Adjust height': 'Höhe einstellen',\n 'Active page': 'Aktive Seite',\n\n // Codepen\n 'Use click-to-load': 'Verwende click-to-load',\n 'ex.: 600, in px': 'Z.B. 600, in px',\n\n //Instagram\n 'Hide timed comments': 'Kommentare ausblenden',\n\n //Soundcloud\n 'Let Iframely optimize player for the artwork': 'Optimierung des Players durch IFramely',\n\n // scribd\n 'Show as slideshow': 'Als Slideshow zeigen',\n\n // youtube\n 'Start from': 'Start ab',\n 'ex.: 11, 1m10s': 'z.B. 11, 1m10s',\n 'End on': 'Ende an',\n 'Closed captions': 'Untertitel',\n\n // twitter\n 'Include up to 20 tweets': 'Bis zu 20 Tweets anzeigen',\n 'Hide photos, videos, and cards': 'Verberge Fotos, Videos und Cards',\n 'Hide previous Tweet in conversation thread': 'Verberge den vorigen Tweet in der Konversation',\n 'Use dark theme': 'Verwende dunkles Farbschema',\n 'Adjust width': 'Breite anpassen',\n\n // pinterest\n 'Hide description': 'Beschreibung verbergen',\n\n //mixcloud\n 'Widget style': 'Widget-Style',\n 'Mini': 'Mini',\n 'Classic': 'Klassisch',\n 'Picture': 'Bild',\n\n //google maps\n 'Zoom': 'Zoom',\n 'Map orientation': 'Karten-Ausrichtung',\n 'Album': 'Album',\n 'Portrait': 'Portrait',\n 'Square': 'Quadratisch',\n\n // Flickr\n 'Show context slideshow': 'Als Slideshow anzeigen',\n 'Show description footer': 'Fußzeile anzeigen',\n 'Show user header': 'Kopfbereich anzeigen',\n\n //facebook\n 'Show author\\'s text caption': 'Beschriftung des Autors anzeigen',\n 'Hide author\\'s text caption': 'Beschriftung des Autors verbergen',\n 'Include parent comment (if url is a reply)': 'Ursprünglichen Kommentar einschließen (wenn die Url eine Antwort ist)',\n\n 'Show recent posts': 'Neueste Beiträge anzeigen',\n 'Show profile photos when friends like this': 'Profilfotos anzeigen, wenn Freunde dies mögen',\n 'Use the small header instead': 'Kleine Kopfzeile stattdessen verwenden',\n\n //bandcamp\n 'Artwork': 'Artwork',\n 'Small': 'klein',\n 'Big': 'groß',\n 'None': 'Keines',\n\n 'Layout': 'Layout',\n 'Slim': 'Schlank',\n 'Artwork-only': 'Nur Artwork',\n 'Standard': 'Standard',\n\n //omny.fm\n 'Size & style': 'Größe & Stil',\n 'Wide image': 'Breite Darstellung',\n 'Wide simple': 'Breite Darstellung (Einfach)',\n\n // Vimeo\n 'Text language (ignored if no captions)': 'Sprache der Untertitel (wird ignoriert, wenn keine Untertitel vorhanden)',\n 'Two letters: en, fr, es, de...': 'Zwei Buchstaben: en, fr, es, de...',\n \n // Kickstarter\n 'Don\\'t include attached player': 'Player nicht integrieren',\n 'Attached player only, no card': 'Nur Player, keine Card',\n\n //iframely options\n 'Hold load & play until clicked': 'Klicken zum Abspielen',\n 'Make it a small card': 'Kleine Card verwenden',\n //iframely media cards\n 'Keep using full media card': 'Verwende weiterhin vollständige Media-Cards',\n 'Don\\'t include player': 'Player nicht hinzufügen',\n 'Player only, no card': 'Nur Player, keine Card',\n //iframely media=1\n 'Just the player': 'Nur Player',\n 'Just the image': 'Nur Bild'\n};\n\ntranslator.registerLabels(lang, labels);\n\n\n//# sourceURL=webpack:///./options/lang/labels.de.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/translator.js":
+/***/ "./options/translator.js"
/*!*******************************!*\
!*** ./options/translator.js ***!
\*******************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, exports, __webpack_require__) {
-eval("/*\nTo add more languages to the translator -\nsee ./lang/labels.LAN.example.js\n\n - use the template for the list of currently available labels\n - save it as labels.LAN.js // replace LAN with your actual value, e.g. es, de, ru, etc.\n - fill in the labels translations\n - add to webpack config options as \n\t'options.i18n.fr': './options/lang/labels.fr.js' \n\t(see webpack.common.js as example)\n\nYou can then call iframely.optionsTranslator('LAN') - with your chosen language - to build the options form\n\nYou don't need to translate all the labels. The ones without a translation will be left as-is\n*/\n\nvar iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\n\nvar langs = {};\n\nexports.registerLabels = function(lang, labels) {\n var existingLabels = langs[lang] = langs[lang] || {};\n Object.assign(existingLabels, labels);\n};\n\niframely.optionsTranslator = function(lang) {\n return function (label) {\n return langs[lang] && langs[lang][label] && langs[lang][label] !== '' ? langs[lang][label] : label;\n };\n};\n\n//# sourceURL=webpack:///./options/translator.js?");
+eval("{/*\nTo add more languages to the translator -\nsee ./lang/labels.LAN.example.js\n\n - use the template for the list of currently available labels\n - save it as labels.LAN.js // replace LAN with your actual value, e.g. es, de, ru, etc.\n - fill in the labels translations\n - add to webpack config options as \n\t'options.i18n.fr': './options/lang/labels.fr.js' \n\t(see webpack.common.js as example)\n\nYou can then call iframely.optionsTranslator('LAN') - with your chosen language - to build the options form\n\nYou don't need to translate all the labels. The ones without a translation will be left as-is\n*/\n\nvar iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\n\nvar langs = {};\n\nexports.registerLabels = function(lang, labels) {\n var existingLabels = langs[lang] = langs[lang] || {};\n Object.assign(existingLabels, labels);\n};\n\niframely.optionsTranslator = function(lang) {\n return function (label) {\n return langs[lang] && langs[lang][label] && langs[lang][label] !== '' ? langs[lang][label] : label;\n };\n};\n\n//# sourceURL=webpack:///./options/translator.js?\n}");
-/***/ })
+/***/ }
-/******/ });
\ No newline at end of file
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ if (!(moduleId in __webpack_modules__)) {
+/******/ delete __webpack_module_cache__[moduleId];
+/******/ var e = new Error("Cannot find module '" + moduleId + "'");
+/******/ e.code = 'MODULE_NOT_FOUND';
+/******/ throw e;
+/******/ }
+/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/
+/******/ // startup
+/******/ // Load entry module and return exports
+/******/ // This entry module can't be inlined because the eval devtool is used.
+/******/ var __webpack_exports__ = __webpack_require__("./options/lang/labels.de.js");
+/******/
+/******/ })()
+;
\ No newline at end of file
diff --git a/dist/options.i18n.de.min.js b/dist/options.i18n.de.min.js
index c19cc48..1eb6778 100644
--- a/dist/options.i18n.de.min.js
+++ b/dist/options.i18n.de.min.js
@@ -1 +1 @@
-!function(e){var n={};function r(t){if(n[t])return n[t].exports;var i=n[t]={i:t,l:!1,exports:{}};return e[t].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=e,r.c=n,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,n){if(1&n&&(e=r(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(r.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var i in e)r.d(t,i,function(n){return e[n]}.bind(null,i));return t},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=33)}({0:function(e,n){var r=window.iframely=window.iframely||{};r.config=r.config||{},e.exports=r},29:function(e,n,r){var t=r(0),i={};n.registerLabels=function(e,n){var r=i[e]=i[e]||{};Object.assign(r,n)},t.optionsTranslator=function(e){return function(n){return i[e]&&i[e][n]&&""!==i[e][n]?i[e][n]:n}}},33:function(e,n,r){r(29).registerLabels("de",{"Slimmer horizontal player":"Schlanker horizontaler Player","Include playlist":"Wiedergabeliste anzeigen","Hide artwork":"Artwork ausblenden","Theme color":"Theme Farbe",Light:"Hell",Dark:"Dunkel",Auto:"Automatisch",Default:"Standard","Adjust height":"Höhe einstellen","Active page":"Aktive Seite","Use click-to-load":"Verwende click-to-load","ex.: 600, in px":"Z.B. 600, in px","Hide timed comments":"Kommentare ausblenden","Let Iframely optimize player for the artwork":"Optimierung des Players durch IFramely","Show as slideshow":"Als Slideshow zeigen","Start from":"Start ab","ex.: 11, 1m10s":"z.B. 11, 1m10s","End on":"Ende an","Closed captions":"Untertitel","Include up to 20 tweets":"Bis zu 20 Tweets anzeigen","Hide photos, videos, and cards":"Verberge Fotos, Videos und Cards","Hide previous Tweet in conversation thread":"Verberge den vorigen Tweet in der Konversation","Use dark theme":"Verwende dunkles Farbschema","Adjust width":"Breite anpassen","Hide description":"Beschreibung verbergen","Widget style":"Widget-Style",Mini:"Mini",Classic:"Klassisch",Picture:"Bild",Zoom:"Zoom","Map orientation":"Karten-Ausrichtung",Album:"Album",Portrait:"Portrait",Square:"Quadratisch","Show context slideshow":"Als Slideshow anzeigen","Show description footer":"Fußzeile anzeigen","Show user header":"Kopfbereich anzeigen","Show author's text caption":"Beschriftung des Autors anzeigen","Hide author's text caption":"Beschriftung des Autors verbergen","Include parent comment (if url is a reply)":"Ursprünglichen Kommentar einschließen (wenn die Url eine Antwort ist)","Show recent posts":"Neueste Beiträge anzeigen","Show profile photos when friends like this":"Profilfotos anzeigen, wenn Freunde dies mögen","Use the small header instead":"Kleine Kopfzeile stattdessen verwenden",Artwork:"Artwork",Small:"klein",Big:"groß",None:"Keines",Layout:"Layout",Slim:"Schlank","Artwork-only":"Nur Artwork",Standard:"Standard","Size & style":"Größe & Stil","Wide image":"Breite Darstellung","Wide simple":"Breite Darstellung (Einfach)","Text language (ignored if no captions)":"Sprache der Untertitel (wird ignoriert, wenn keine Untertitel vorhanden)","Two letters: en, fr, es, de...":"Zwei Buchstaben: en, fr, es, de...","Don't include attached player":"Player nicht integrieren","Attached player only, no card":"Nur Player, keine Card","Hold load & play until clicked":"Klicken zum Abspielen","Make it a small card":"Kleine Card verwenden","Keep using full media card":"Verwende weiterhin vollständige Media-Cards","Don't include player":"Player nicht hinzufügen","Player only, no card":"Nur Player, keine Card","Just the player":"Nur Player","Just the image":"Nur Bild"})}});
\ No newline at end of file
+(()=>{var e={774(e){var r=window.iframely=window.iframely||{};r.config=r.config||{},e.exports=r},132(e,r,n){var i=n(774),t={};r.registerLabels=function(e,r){var n=t[e]=t[e]||{};Object.assign(n,r)},i.optionsTranslator=function(e){return function(r){return t[e]&&t[e][r]&&""!==t[e][r]?t[e][r]:r}}}},r={};(function n(i){var t=r[i];if(void 0!==t)return t.exports;var a=r[i]={exports:{}};return e[i](a,a.exports,n),a.exports})(132).registerLabels("de",{"Slimmer horizontal player":"Schlanker horizontaler Player","Include playlist":"Wiedergabeliste anzeigen","Hide artwork":"Artwork ausblenden","Theme color":"Theme Farbe",Light:"Hell",Dark:"Dunkel",Auto:"Automatisch",Default:"Standard","Adjust height":"Höhe einstellen","Active page":"Aktive Seite","Use click-to-load":"Verwende click-to-load","ex.: 600, in px":"Z.B. 600, in px","Hide timed comments":"Kommentare ausblenden","Let Iframely optimize player for the artwork":"Optimierung des Players durch IFramely","Show as slideshow":"Als Slideshow zeigen","Start from":"Start ab","ex.: 11, 1m10s":"z.B. 11, 1m10s","End on":"Ende an","Closed captions":"Untertitel","Include up to 20 tweets":"Bis zu 20 Tweets anzeigen","Hide photos, videos, and cards":"Verberge Fotos, Videos und Cards","Hide previous Tweet in conversation thread":"Verberge den vorigen Tweet in der Konversation","Use dark theme":"Verwende dunkles Farbschema","Adjust width":"Breite anpassen","Hide description":"Beschreibung verbergen","Widget style":"Widget-Style",Mini:"Mini",Classic:"Klassisch",Picture:"Bild",Zoom:"Zoom","Map orientation":"Karten-Ausrichtung",Album:"Album",Portrait:"Portrait",Square:"Quadratisch","Show context slideshow":"Als Slideshow anzeigen","Show description footer":"Fußzeile anzeigen","Show user header":"Kopfbereich anzeigen","Show author's text caption":"Beschriftung des Autors anzeigen","Hide author's text caption":"Beschriftung des Autors verbergen","Include parent comment (if url is a reply)":"Ursprünglichen Kommentar einschließen (wenn die Url eine Antwort ist)","Show recent posts":"Neueste Beiträge anzeigen","Show profile photos when friends like this":"Profilfotos anzeigen, wenn Freunde dies mögen","Use the small header instead":"Kleine Kopfzeile stattdessen verwenden",Artwork:"Artwork",Small:"klein",Big:"groß",None:"Keines",Layout:"Layout",Slim:"Schlank","Artwork-only":"Nur Artwork",Standard:"Standard","Size & style":"Größe & Stil","Wide image":"Breite Darstellung","Wide simple":"Breite Darstellung (Einfach)","Text language (ignored if no captions)":"Sprache der Untertitel (wird ignoriert, wenn keine Untertitel vorhanden)","Two letters: en, fr, es, de...":"Zwei Buchstaben: en, fr, es, de...","Don't include attached player":"Player nicht integrieren","Attached player only, no card":"Nur Player, keine Card","Hold load & play until clicked":"Klicken zum Abspielen","Make it a small card":"Kleine Card verwenden","Keep using full media card":"Verwende weiterhin vollständige Media-Cards","Don't include player":"Player nicht hinzufügen","Player only, no card":"Nur Player, keine Card","Just the player":"Nur Player","Just the image":"Nur Bild"})})();
\ No newline at end of file
diff --git a/dist/options.i18n.fr.js b/dist/options.i18n.fr.js
index 8e31610..2caa881 100644
--- a/dist/options.i18n.fr.js
+++ b/dist/options.i18n.fr.js
@@ -1,122 +1,82 @@
-/******/ (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 = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = "./options/lang/labels.fr.js");
-/******/ })
-/************************************************************************/
-/******/ ({
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+/******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
-/***/ "./iframely.js":
+/***/ "./iframely.js"
/*!*********************!*\
!*** ./iframely.js ***!
\*********************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+(module) {
-eval("var iframely = window.iframely = window.iframely || {};\niframely.config = iframely.config || {};\n\nmodule.exports = iframely;\n\n//# sourceURL=webpack:///./iframely.js?");
+eval("{var iframely = window.iframely = window.iframely || {};\niframely.config = iframely.config || {};\n\nmodule.exports = iframely;\n\n//# sourceURL=webpack:///./iframely.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/lang/labels.fr.js":
+/***/ "./options/lang/labels.fr.js"
/*!***********************************!*\
!*** ./options/lang/labels.fr.js ***!
\***********************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
-eval("var translator = __webpack_require__(/*! ../translator */ \"./options/translator.js\");\n\nvar lang ='fr';\n\nvar labels = {\n // general options\n 'Slimmer horizontal player': 'Joueur de audio classique',\n 'Include playlist': 'Inclure la playlist',\n 'Hide artwork': 'Masquer la illustration',\n 'Theme color': 'Couleur du thème',\n 'Light': 'Lumière',\n 'Dark': 'Sombre',\n 'Auto': '',\n 'Default': 'Défaut',\n 'Adjust height': 'Height',\n 'Active page': 'Page active',\n\n // Codepen\n 'Use click-to-load': 'Utilisez click-to-load',\n 'ex.: 600, in px': '',\n\n //Instagram\n 'Hide timed comments': 'Masquer les commentaires',\n\n //Soundcloud\n 'Let Iframely optimize player for the artwork': 'Optimiser le lecteur pour l\\'illustration',\n\n // scribd\n 'Show as slideshow': 'Montrer en diaporama',\n\n // youtube\n 'Start from': 'Commencer',\n 'ex.: 11, 1m10s': '',\n 'End on': 'Fin sur',\n\n // twitter\n 'Include up to 20 tweets': 'Incluez jusqu\\'à 20 tweets',\n 'Hide photos, videos, and cards': 'Masquer les photos, les vidéos et les cartes',\n 'Hide previous Tweet in conversation thread': 'Masquer le tweet parent',\n\n // pinterest\n 'Hide description': 'Masquer la description',\n\n //mixcloud\n 'Widget style': 'Style de widget',\n 'Mini': '', // can leave empty - will remain as is\n 'Classic': 'Classique',\n 'Picture': 'Image',\n\n //google maps\n 'Zoom': '',\n 'Map orientation': 'Orientation de la carte',\n 'Album': '',\n 'Portrait': '',\n 'Square': 'Carré',\n\n // Flickr\n 'Show context slideshow': 'Afficher le diaporama contextuel',\n 'Show description footer': 'Afficher la description pied de page',\n 'Show user header': 'Afficher l\\'en-tête de l\\'utilisateur',\n\n //facebook\n 'Show author\\'s text caption': 'Afficher la description de l\\'auteur',\n 'Hide author\\'s text caption': 'Masquer la description de l\\'auteur',\n 'Include parent comment (if url is a reply)': '',\n\n 'Show recent posts': 'Afficher les messages récents',\n 'Show profile photos when friends like this': '',\n 'Use the small header instead': 'Utilisez plutôt le petit en-tête',\n\n //bandcamp\n 'Artwork': 'Ouvrages d\\'art',\n 'Small': 'Petite',\n 'Big': 'Grosse',\n 'None': 'Aucune',\n\n 'Layout': 'Disposition',\n 'Slim': 'Svelte',\n 'Artwork-only': 'Oeuvre seule',\n 'Standard': 'Standard',\n\n //omny.fm\n 'Size & style': 'Style',\n 'Wide image': 'Image large',\n 'Wide simple': 'Large simple',\n\n\n //iframely options\n 'Hold load & play until clicked': 'Click-to-play',\n 'Make it a small card': 'Carte compacte',\n //iframely media cards\n 'Keep using full media card': 'Continuez à utiliser la carte média complète',\n 'Don\\'t include player': 'Ne pas inclure la vidéo',\n 'Player only, no card': 'La vidéo seulement, pas de carte',\n //iframely media=1\n 'Just the player': 'Seulement la vidéo',\n 'Just the image': 'Seulement l\\'image'\n};\n\ntranslator.registerLabels(lang, labels);\n\n//# sourceURL=webpack:///./options/lang/labels.fr.js?");
+eval("{var translator = __webpack_require__(/*! ../translator */ \"./options/translator.js\");\n\nvar lang ='fr';\n\nvar labels = {\n // general options\n 'Slimmer horizontal player': 'Joueur de audio classique',\n 'Include playlist': 'Inclure la playlist',\n 'Hide artwork': 'Masquer la illustration',\n 'Theme color': 'Couleur du thème',\n 'Light': 'Lumière',\n 'Dark': 'Sombre',\n 'Auto': '',\n 'Default': 'Défaut',\n 'Adjust height': 'Height',\n 'Active page': 'Page active',\n\n // Codepen\n 'Use click-to-load': 'Utilisez click-to-load',\n 'ex.: 600, in px': '',\n\n //Instagram\n 'Hide timed comments': 'Masquer les commentaires',\n\n //Soundcloud\n 'Let Iframely optimize player for the artwork': 'Optimiser le lecteur pour l\\'illustration',\n\n // scribd\n 'Show as slideshow': 'Montrer en diaporama',\n\n // youtube\n 'Start from': 'Commencer',\n 'ex.: 11, 1m10s': '',\n 'End on': 'Fin sur',\n\n // twitter\n 'Include up to 20 tweets': 'Incluez jusqu\\'à 20 tweets',\n 'Hide photos, videos, and cards': 'Masquer les photos, les vidéos et les cartes',\n 'Hide previous Tweet in conversation thread': 'Masquer le tweet parent',\n\n // pinterest\n 'Hide description': 'Masquer la description',\n\n //mixcloud\n 'Widget style': 'Style de widget',\n 'Mini': '', // can leave empty - will remain as is\n 'Classic': 'Classique',\n 'Picture': 'Image',\n\n //google maps\n 'Zoom': '',\n 'Map orientation': 'Orientation de la carte',\n 'Album': '',\n 'Portrait': '',\n 'Square': 'Carré',\n\n // Flickr\n 'Show context slideshow': 'Afficher le diaporama contextuel',\n 'Show description footer': 'Afficher la description pied de page',\n 'Show user header': 'Afficher l\\'en-tête de l\\'utilisateur',\n\n //facebook\n 'Show author\\'s text caption': 'Afficher la description de l\\'auteur',\n 'Hide author\\'s text caption': 'Masquer la description de l\\'auteur',\n 'Include parent comment (if url is a reply)': '',\n\n 'Show recent posts': 'Afficher les messages récents',\n 'Show profile photos when friends like this': '',\n 'Use the small header instead': 'Utilisez plutôt le petit en-tête',\n\n //bandcamp\n 'Artwork': 'Ouvrages d\\'art',\n 'Small': 'Petite',\n 'Big': 'Grosse',\n 'None': 'Aucune',\n\n 'Layout': 'Disposition',\n 'Slim': 'Svelte',\n 'Artwork-only': 'Oeuvre seule',\n 'Standard': 'Standard',\n\n //omny.fm\n 'Size & style': 'Style',\n 'Wide image': 'Image large',\n 'Wide simple': 'Large simple',\n\n\n //iframely options\n 'Hold load & play until clicked': 'Click-to-play',\n 'Make it a small card': 'Carte compacte',\n //iframely media cards\n 'Keep using full media card': 'Continuez à utiliser la carte média complète',\n 'Don\\'t include player': 'Ne pas inclure la vidéo',\n 'Player only, no card': 'La vidéo seulement, pas de carte',\n //iframely media=1\n 'Just the player': 'Seulement la vidéo',\n 'Just the image': 'Seulement l\\'image'\n};\n\ntranslator.registerLabels(lang, labels);\n\n//# sourceURL=webpack:///./options/lang/labels.fr.js?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/translator.js":
+/***/ "./options/translator.js"
/*!*******************************!*\
!*** ./options/translator.js ***!
\*******************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+(__unused_webpack_module, exports, __webpack_require__) {
-eval("/*\nTo add more languages to the translator -\nsee ./lang/labels.LAN.example.js\n\n - use the template for the list of currently available labels\n - save it as labels.LAN.js // replace LAN with your actual value, e.g. es, de, ru, etc.\n - fill in the labels translations\n - add to webpack config options as \n\t'options.i18n.fr': './options/lang/labels.fr.js' \n\t(see webpack.common.js as example)\n\nYou can then call iframely.optionsTranslator('LAN') - with your chosen language - to build the options form\n\nYou don't need to translate all the labels. The ones without a translation will be left as-is\n*/\n\nvar iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\n\nvar langs = {};\n\nexports.registerLabels = function(lang, labels) {\n var existingLabels = langs[lang] = langs[lang] || {};\n Object.assign(existingLabels, labels);\n};\n\niframely.optionsTranslator = function(lang) {\n return function (label) {\n return langs[lang] && langs[lang][label] && langs[lang][label] !== '' ? langs[lang][label] : label;\n };\n};\n\n//# sourceURL=webpack:///./options/translator.js?");
+eval("{/*\nTo add more languages to the translator -\nsee ./lang/labels.LAN.example.js\n\n - use the template for the list of currently available labels\n - save it as labels.LAN.js // replace LAN with your actual value, e.g. es, de, ru, etc.\n - fill in the labels translations\n - add to webpack config options as \n\t'options.i18n.fr': './options/lang/labels.fr.js' \n\t(see webpack.common.js as example)\n\nYou can then call iframely.optionsTranslator('LAN') - with your chosen language - to build the options form\n\nYou don't need to translate all the labels. The ones without a translation will be left as-is\n*/\n\nvar iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\n\nvar langs = {};\n\nexports.registerLabels = function(lang, labels) {\n var existingLabels = langs[lang] = langs[lang] || {};\n Object.assign(existingLabels, labels);\n};\n\niframely.optionsTranslator = function(lang) {\n return function (label) {\n return langs[lang] && langs[lang][label] && langs[lang][label] !== '' ? langs[lang][label] : label;\n };\n};\n\n//# sourceURL=webpack:///./options/translator.js?\n}");
-/***/ })
+/***/ }
-/******/ });
\ No newline at end of file
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ if (!(moduleId in __webpack_modules__)) {
+/******/ delete __webpack_module_cache__[moduleId];
+/******/ var e = new Error("Cannot find module '" + moduleId + "'");
+/******/ e.code = 'MODULE_NOT_FOUND';
+/******/ throw e;
+/******/ }
+/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/
+/******/ // startup
+/******/ // Load entry module and return exports
+/******/ // This entry module can't be inlined because the eval devtool is used.
+/******/ var __webpack_exports__ = __webpack_require__("./options/lang/labels.fr.js");
+/******/
+/******/ })()
+;
\ No newline at end of file
diff --git a/dist/options.i18n.fr.min.js b/dist/options.i18n.fr.min.js
index 4fa3ced..486b022 100644
--- a/dist/options.i18n.fr.min.js
+++ b/dist/options.i18n.fr.min.js
@@ -1 +1 @@
-!function(e){var t={};function r(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(i,o,function(t){return e[t]}.bind(null,o));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=32)}({0:function(e,t){var r=window.iframely=window.iframely||{};r.config=r.config||{},e.exports=r},29:function(e,t,r){var i=r(0),o={};t.registerLabels=function(e,t){var r=o[e]=o[e]||{};Object.assign(r,t)},i.optionsTranslator=function(e){return function(t){return o[e]&&o[e][t]&&""!==o[e][t]?o[e][t]:t}}},32:function(e,t,r){r(29).registerLabels("fr",{"Slimmer horizontal player":"Joueur de audio classique","Include playlist":"Inclure la playlist","Hide artwork":"Masquer la illustration","Theme color":"Couleur du thème",Light:"Lumière",Dark:"Sombre",Auto:"",Default:"Défaut","Adjust height":"Height","Active page":"Page active","Use click-to-load":"Utilisez click-to-load","ex.: 600, in px":"","Hide timed comments":"Masquer les commentaires","Let Iframely optimize player for the artwork":"Optimiser le lecteur pour l'illustration","Show as slideshow":"Montrer en diaporama","Start from":"Commencer","ex.: 11, 1m10s":"","End on":"Fin sur","Include up to 20 tweets":"Incluez jusqu'à 20 tweets","Hide photos, videos, and cards":"Masquer les photos, les vidéos et les cartes","Hide previous Tweet in conversation thread":"Masquer le tweet parent","Hide description":"Masquer la description","Widget style":"Style de widget",Mini:"",Classic:"Classique",Picture:"Image",Zoom:"","Map orientation":"Orientation de la carte",Album:"",Portrait:"",Square:"Carré","Show context slideshow":"Afficher le diaporama contextuel","Show description footer":"Afficher la description pied de page","Show user header":"Afficher l'en-tête de l'utilisateur","Show author's text caption":"Afficher la description de l'auteur","Hide author's text caption":"Masquer la description de l'auteur","Include parent comment (if url is a reply)":"","Show recent posts":"Afficher les messages récents","Show profile photos when friends like this":"","Use the small header instead":"Utilisez plutôt le petit en-tête",Artwork:"Ouvrages d'art",Small:"Petite",Big:"Grosse",None:"Aucune",Layout:"Disposition",Slim:"Svelte","Artwork-only":"Oeuvre seule",Standard:"Standard","Size & style":"Style","Wide image":"Image large","Wide simple":"Large simple","Hold load & play until clicked":"Click-to-play","Make it a small card":"Carte compacte","Keep using full media card":"Continuez à utiliser la carte média complète","Don't include player":"Ne pas inclure la vidéo","Player only, no card":"La vidéo seulement, pas de carte","Just the player":"Seulement la vidéo","Just the image":"Seulement l'image"})}});
\ No newline at end of file
+(()=>{var e={774(e){var t=window.iframely=window.iframely||{};t.config=t.config||{},e.exports=t},132(e,t,i){var r=i(774),a={};t.registerLabels=function(e,t){var i=a[e]=a[e]||{};Object.assign(i,t)},r.optionsTranslator=function(e){return function(t){return a[e]&&a[e][t]&&""!==a[e][t]?a[e][t]:t}}}},t={};(function i(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,i),o.exports})(132).registerLabels("fr",{"Slimmer horizontal player":"Joueur de audio classique","Include playlist":"Inclure la playlist","Hide artwork":"Masquer la illustration","Theme color":"Couleur du thème",Light:"Lumière",Dark:"Sombre",Auto:"",Default:"Défaut","Adjust height":"Height","Active page":"Page active","Use click-to-load":"Utilisez click-to-load","ex.: 600, in px":"","Hide timed comments":"Masquer les commentaires","Let Iframely optimize player for the artwork":"Optimiser le lecteur pour l'illustration","Show as slideshow":"Montrer en diaporama","Start from":"Commencer","ex.: 11, 1m10s":"","End on":"Fin sur","Include up to 20 tweets":"Incluez jusqu'à 20 tweets","Hide photos, videos, and cards":"Masquer les photos, les vidéos et les cartes","Hide previous Tweet in conversation thread":"Masquer le tweet parent","Hide description":"Masquer la description","Widget style":"Style de widget",Mini:"",Classic:"Classique",Picture:"Image",Zoom:"","Map orientation":"Orientation de la carte",Album:"",Portrait:"",Square:"Carré","Show context slideshow":"Afficher le diaporama contextuel","Show description footer":"Afficher la description pied de page","Show user header":"Afficher l'en-tête de l'utilisateur","Show author's text caption":"Afficher la description de l'auteur","Hide author's text caption":"Masquer la description de l'auteur","Include parent comment (if url is a reply)":"","Show recent posts":"Afficher les messages récents","Show profile photos when friends like this":"","Use the small header instead":"Utilisez plutôt le petit en-tête",Artwork:"Ouvrages d'art",Small:"Petite",Big:"Grosse",None:"Aucune",Layout:"Disposition",Slim:"Svelte","Artwork-only":"Oeuvre seule",Standard:"Standard","Size & style":"Style","Wide image":"Image large","Wide simple":"Large simple","Hold load & play until clicked":"Click-to-play","Make it a small card":"Carte compacte","Keep using full media card":"Continuez à utiliser la carte média complète","Don't include player":"Ne pas inclure la vidéo","Player only, no card":"La vidéo seulement, pas de carte","Just the player":"Seulement la vidéo","Just the image":"Seulement l'image"})})();
\ No newline at end of file
diff --git a/dist/options.js b/dist/options.js
index be42306..98d463b 100644
--- a/dist/options.js
+++ b/dist/options.js
@@ -1,210 +1,162 @@
-/******/ (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 = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = "./options/index.js");
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ "./iframely.js":
-/*!*********************!*\
- !*** ./iframely.js ***!
- \*********************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-eval("var iframely = window.iframely = window.iframely || {};\niframely.config = iframely.config || {};\n\nmodule.exports = iframely;\n\n//# sourceURL=webpack:///./iframely.js?");
-
-/***/ }),
-
-/***/ "./options/form-builder.js":
-/*!*********************************!*\
- !*** ./options/form-builder.js ***!
- \*********************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("var getFormElements = __webpack_require__(/*! ./form-generator */ \"./options/form-generator.js\");\nvar iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\n\nvar UIelements = {\n checkbox: {\n getValue: function(inputs) {\n var input = inputs[0];\n return input.checked;\n }\n },\n text: {\n getValue: function(inputs) {\n var input = inputs[0];\n var value = input.value;\n if (input.type === 'number') {\n value = parseInt(value);\n if (isNaN(value)) {\n value = '';\n }\n }\n return value;\n },\n customEvents: function(inputs, submitOptionsCb) {\n var input = inputs[0];\n iframely.addEventListener(input, 'click', function() {\n input.select();\n });\n iframely.addEventListener(input, 'blur', submitOptionsCb);\n iframely.addEventListener(input, 'keyup', function(e) {\n // Apply on enter.\n if (e.keyCode === 13) {\n submitOptionsCb();\n }\n });\n }\n },\n radio: {\n getValue: function(inputs) {\n var selectedInput;\n inputs.forEach(function(input) {\n if (input.checked) {\n selectedInput = input;\n }\n });\n return selectedInput.value;\n }\n }\n};\n\nvar defaultQueryById = {};\n\nmodule.exports = function(params) {\n\n var options = params.options;\n var formContainer = params.formContainer;\n\n if (!formContainer) {\n console.warn('No formContainer in form-builder options', params);\n return;\n }\n\n if (!options) {\n formContainer.innerHTML = '';\n return;\n }\n\n var elements = getFormElements(options, params.translator);\n var id = params.id;\n var renderer = params.renderer;\n\n var defaultQuery = defaultQueryById[id] = defaultQueryById[id] || {};\n // Exclude default values.\n Object.keys(options).forEach(function(key) {\n if (!options.query || options.query.indexOf(key) === -1) {\n // Store default value.\n defaultQuery[key] = options[key].value;\n }\n });\n\n function getQueryFromForm() {\n\n var query = {};\n\n var getOptionsFromElements = function(elements) {\n // Get options from all inputs.\n elements.forEach(function(element) {\n\n if (element.context && element.context.elements) {\n\n getOptionsFromElements(element.context.elements);\n\n } else if (element.inputs) {\n\n var elementUI = UIelements[element.type];\n var inputValue;\n if (elementUI && elementUI.getValue) {\n inputValue = elementUI.getValue(element.inputs);\n } else {\n inputValue = element.inputs[0].value;\n }\n Object.assign(query, element.getQuery(inputValue));\n }\n });\n };\n\n getOptionsFromElements(elements);\n \n return query;\n }\n\n function getAndSubmitOptions() {\n var query = getQueryFromForm();\n\n Object.keys(defaultQuery).forEach(function(key) {\n if (defaultQuery[key] === query[key] \n || query[key] === undefined) { // remove undefined so it's not included while JSON.stringify\n delete query[key];\n }\n });\n\n iframely.trigger('options-changed', id, formContainer, query);\n }\n\n // Render form.\n var renderElements = function(elements) {\n var html = '';\n elements.forEach(function(element) {\n if (element.context && element.context.elements) {\n element.context.elementsHtml = renderElements(element.context.elements);\n }\n html += renderer(element.type, element.context || {});\n });\n return html;\n };\n formContainer.innerHTML = renderElements(elements);\n\n // Bind events.\n var bindElements = function(elements) {\n \n elements.forEach(function(element) {\n\n if (element.context && element.context.elements) {\n\n bindElements(element.context.elements);\n\n } else {\n\n var elementUI = UIelements[element.type];\n if (element.context) {\n element.inputs = formContainer.querySelectorAll('[name=\"' + element.context.key + '\"]');\n if (element.inputs.length > 0) {\n if (elementUI && elementUI.customEvents) {\n elementUI.customEvents(element.inputs, getAndSubmitOptions);\n } else {\n element.inputs.forEach(function(input) {\n iframely.addEventListener(input, 'change', getAndSubmitOptions);\n });\n }\n } else {\n console.warn('No inputs found for option', element.key);\n }\n }\n }\n });\n };\n bindElements(elements);\n};\n\n//# sourceURL=webpack:///./options/form-builder.js?");
-
-/***/ }),
-
-/***/ "./options/form-generator.js":
-/*!***********************************!*\
- !*** ./options/form-generator.js ***!
- \***********************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-eval("var _RE = /^_./;\n\nvar translate = function (label, translator) {\n return translator && typeof translator === 'function' \n ? translator (label) || label\n : label;\n};\n\nmodule.exports = function(options, translator) {\n\n if (!options) {\n return [];\n }\n\n // Remove query key.\n options = Object.assign({}, options);\n delete options.query;\n\n var items = [];\n var keys = Object.keys(options);\n var checkboxCount = 0;\n \n keys.forEach(function(key) {\n \n var context = {};\n\n var getQuery;\n var option = options[key];\n option.key = key;\n\n var forceCheckboxForSingleKeyValue;\n var valuesKeys = option.values && Object.keys(option.values);\n var singleKey, singleLabel;\n if (valuesKeys && valuesKeys.length === 1) {\n forceCheckboxForSingleKeyValue = true;\n singleKey = valuesKeys[0];\n singleLabel = option.values[singleKey];\n }\n\n context.label = translate(singleLabel || option.label, translator);\n context.key = option.key;\n\n if (forceCheckboxForSingleKeyValue || typeof option.value === 'boolean') {\n\n if (forceCheckboxForSingleKeyValue) {\n context.checked = (singleKey === option.value) || (!singleKey && !option.value);\n } else {\n context.checked = option.value;\n }\n\n checkboxCount++;\n\n items.push({\n type: 'checkbox',\n context: context,\n order: _RE.test(key) ? 0 : 1,\n getQuery: function(checked) {\n\n var value;\n if (forceCheckboxForSingleKeyValue) {\n value = checked ? singleKey : '';\n } else {\n value = checked;\n }\n\n var result = {};\n\n if (forceCheckboxForSingleKeyValue) {\n if (value === '') {\n // Empty.\n } else {\n result[option.key] = value;\n }\n } else {\n result[option.key] = checked;\n }\n return result;\n }\n });\n\n } else if ((typeof option.value === 'number' || typeof option.value === 'string') && !option.values) {\n\n var useSlider = option.range && typeof option.range.min === 'number' && typeof option.range.max === 'number';\n var useNumber = typeof option.value === 'number';\n\n context.value = option.value;\n\n getQuery = function(inputValue) {\n var result = {};\n if (inputValue === '') {\n // Empty.\n } else {\n result[option.key] = inputValue;\n }\n return result;\n };\n\n if (useSlider) {\n context.min = option.range.min;\n context.max = option.range.max;\n items.push({\n type: 'range',\n context: context,\n order: 9, // last one\n getQuery: getQuery\n });\n } else {\n context.placeholder = translate(option.placeholder || '', translator);\n context.inputType = useNumber ? 'number' : 'text';\n items.push({\n type: 'text',\n context: context,\n order: /start/i.test(key) ? 7 : 8, // start/end for player timing, ex.: youtube\n getQuery: getQuery\n });\n }\n\n } else if (option.values) {\n\n context.value = option.value + '';\n\n getQuery = function(inputValue) {\n var result = {};\n if (inputValue === '') {\n // Empty.\n } else {\n result[option.key] = inputValue;\n }\n return result;\n };\n\n if (Object.keys(option.values).length <= 3) {\n\n if (option.label) {\n context.label = translate(option.label, translator);\n } else {\n context.label = false;\n }\n\n var i = 0;\n var hasLongLabel = false;\n var values = Object.values(option.values);\n while (i < values.length && !hasLongLabel) {\n var label = values[i];\n hasLongLabel = label.length > 8;\n i++;\n }\n context.inline = !hasLongLabel;\n\n context.items = [];\n\n Object.keys(option.values).forEach(function(key, idx2) {\n context.items.push({\n id: context.key + '-' + idx2,\n value: key,\n label: translate(option.values[key], translator),\n checked: context.value === key\n });\n });\n\n items.push({\n type: 'radio',\n context: context,\n order: hasLongLabel ? -3 : (!/theme/.test(key) ? -2 : -1),\n getQuery: getQuery\n });\n\n } else {\n\n context.items = [];\n\n Object.keys(option.values).forEach(function(key) {\n context.items.push({\n value: key,\n label: translate(option.values[key], translator),\n checked: context.value === key\n });\n });\n\n items.push({\n type: 'select',\n context: context,\n order: 5,\n getQuery: getQuery\n });\n }\n }\n });\n\n items.sort(function(a, b) {\n return a.order - b.order;\n });\n\n items.forEach(function(item) {\n delete item.order;\n });\n\n if (checkboxCount > 0) {\n\n var groupedItems = [];\n var subItems;\n\n items.forEach(function(item, idx) {\n\n if (item.type === 'checkbox') {\n\n // Grouping for checkboxes.\n\n var newCheckboxGroup = \n checkboxCount > 2\n && idx > 0 \n && !_RE.test(item.context.key) \n && items[idx - 1].type === 'checkbox'\n && _RE.test(items[idx - 1].context.key);\n\n if (!subItems // First group.\n || newCheckboxGroup // Second group on _ prefix removed.\n ) {\n\n subItems = [];\n groupedItems.push({\n type: 'group',\n context: {\n elements: subItems\n }\n });\n }\n\n subItems.push(item);\n\n } else {\n // Other items. Just add.\n groupedItems.push(item);\n }\n });\n\n return groupedItems;\n\n } else {\n return items;\n }\n};\n\n//# sourceURL=webpack:///./options/form-generator.js?");
-
-/***/ }),
-
-/***/ "./options/index.js":
-/*!**************************!*\
- !*** ./options/index.js ***!
- \**************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("var iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\nvar formBuilder = __webpack_require__(/*! ./form-builder */ \"./options/form-builder.js\");\nvar renderer = __webpack_require__(/*! ./renderer */ \"./options/renderer.js\");\n\niframely.buildOptionsForm = function(id, formContainer, options, translator) {\n formBuilder({\n id: id,\n formContainer: formContainer,\n options: options,\n renderer: renderer,\n translator: translator\n });\n};\n\nexports.iframely = iframely;\n\n//# sourceURL=webpack:///./options/index.js?");
-
-/***/ }),
-
-/***/ "./options/renderer.js":
-/*!*****************************!*\
- !*** ./options/renderer.js ***!
- \*****************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("var checkboxTemplate = __webpack_require__(/*! ./templates/checkbox.ejs */ \"./options/templates/checkbox.ejs\");\nvar rangeTemplate = __webpack_require__(/*! ./templates/range.ejs */ \"./options/templates/range.ejs\");\nvar textTemplate = __webpack_require__(/*! ./templates/text.ejs */ \"./options/templates/text.ejs\");\nvar radioTemplate = __webpack_require__(/*! ./templates/radio.ejs */ \"./options/templates/radio.ejs\");\nvar selectTemplate = __webpack_require__(/*! ./templates/select.ejs */ \"./options/templates/select.ejs\");\nvar groupTemplate = __webpack_require__(/*! ./templates/group.ejs */ \"./options/templates/group.ejs\");\n\nvar templates = {\n checkbox: checkboxTemplate,\n range: rangeTemplate,\n text: textTemplate,\n radio: radioTemplate,\n select: selectTemplate,\n group: groupTemplate\n};\n\nmodule.exports = function(type, context) {\n var template = templates[type];\n var renderedTemplate = template(context);\n return renderedTemplate;\n};\n\n//# sourceURL=webpack:///./options/renderer.js?");
-
-/***/ }),
-
-/***/ "./options/templates/checkbox.ejs":
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+/******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
+
+/***/ "./options/templates/checkbox.ejs"
/*!****************************************!*\
!*** ./options/templates/checkbox.ejs ***!
\****************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+(module) {
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n \" name=\"<%= key %>\"<% if (checked) { %> checked=\"checked\"<% } %>>\\n \">\\n <%= label %>\\n \\n
\\n', __filename = \"src/options/templates/checkbox.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n \\n \\n ');\n __line = 4;\n __append(escapeFn(label));\n __append(\"\\n \\n
\\n\");\n __line = 7;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/checkbox.ejs?");
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '\\n \\n \\n ' +\n((__t = ( label )) == null ? '' : __t) +\n'\\n \\n
\\n';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/checkbox.ejs?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/templates/group.ejs":
+/***/ "./options/templates/group.ejs"
/*!*************************************!*\
!*** ./options/templates/group.ejs ***!
\*************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+(module) {
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n
\\n <%- elementsHtml %>\\n
\\n
', __filename = \"src/options/templates/group.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n
\\n ');\n __line = 3;\n __append(elementsHtml);\n __append(\"\\n
\\n
\");\n __line = 5;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/group.ejs?");
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '\\n
\\n ' +\n__e( elementsHtml ) +\n'\\n
\\n
';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/group.ejs?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/templates/radio.ejs":
+/***/ "./options/templates/radio.ejs"
/*!*************************************!*\
!*** ./options/templates/radio.ejs ***!
\*************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+(module) {
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n <% if (label) { %>\\n
\\n <%= label %>:\\n \\n <% } %>\\n
iframely-option__group-inline<% } %>\">\\n <% items.forEach(function(subContext) { %>\\n
\\n \" name=\"<%= key %>\" value=\"<%= subContext.value %>\"<% if (subContext.checked) { %> checked=\"checked\"<% } %>>\\n \">\\n <%= subContext.label %>\\n \\n
\\n <% }); %>\\n
\\n
', __filename = \"src/options/templates/radio.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n ');\n __line = 2;\n if (label) {\n __append('\\n
\\n ');\n __line = 4;\n __append(escapeFn(label));\n __append(\":\\n \\n \");\n __line = 6;\n }\n __append('\\n
\\n ');\n __line = 8;\n items.forEach(function(subContext) {\n __append('\\n
\\n \\n \\n ');\n __line = 12;\n __append(escapeFn(subContext.label));\n __append(\"\\n \\n
\\n \");\n __line = 15;\n });\n __append(\"\\n
\\n
\");\n __line = 17;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/radio.ejs?");
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '\\n ';\n if (label) { ;\n__p += '\\n
\\n ' +\n((__t = ( label )) == null ? '' : __t) +\n':\\n \\n ';\n } ;\n__p += '\\n
\\n ';\n items.forEach(function(subContext) { ;\n__p += '\\n
\\n \\n \\n ' +\n((__t = ( subContext.label )) == null ? '' : __t) +\n'\\n \\n
\\n ';\n }); ;\n__p += '\\n
\\n
';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/radio.ejs?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/templates/range.ejs":
+/***/ "./options/templates/range.ejs"
/*!*************************************!*\
!*** ./options/templates/range.ejs ***!
\*************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+(module) {
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n
\"><%= label %>: \\n
\\n \" name=\"<%= key %>\" min=\"<%= min %>\" max=\"<%= max %>\" step=\"1\" value=\"<%= value %>\" style=\"--min: <%= min %>; --max: <%= max %>; --val: <%= value %>;\">\\n
\\n
', __filename = \"src/options/templates/range.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n
');\n __append(escapeFn(label));\n __append(': \\n
\\n \\n
\\n
');\n __line = 6;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/range.ejs?");
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '';\nwith (obj) {\n__p += '\\n
' +\n((__t = ( label )) == null ? '' : __t) +\n': \\n
\\n \\n
\\n
';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/range.ejs?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/templates/select.ejs":
+/***/ "./options/templates/select.ejs"
/*!**************************************!*\
!*** ./options/templates/select.ejs ***!
\**************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+(module) {
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n
\"><%= label %>: \\n
\\n \" name=\"<%= key %>\">\\n <% items.forEach(function(subContext) { %>\\n \"<% if (subContext.checked) { %> selected=\"selected\"<% } %>><%= subContext.label %> \\n <% }); %>\\n \\n
\\n
', __filename = \"src/options/templates/select.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n
');\n __append(escapeFn(label));\n __append(': \\n
\\n \\n ');\n __line = 5;\n items.forEach(function(subContext) {\n __append('\\n \");\n __append(escapeFn(subContext.label));\n __append(\" \\n \");\n __line = 7;\n });\n __append(\"\\n \\n
\\n
\");\n __line = 10;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/select.ejs?");
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '\\n
' +\n((__t = ( label )) == null ? '' : __t) +\n': \\n
\\n \\n ';\n items.forEach(function(subContext) { ;\n__p += '\\n ' +\n((__t = ( subContext.label )) == null ? '' : __t) +\n' \\n ';\n }); ;\n__p += '\\n \\n
\\n
';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/select.ejs?\n}");
-/***/ }),
+/***/ },
-/***/ "./options/templates/text.ejs":
+/***/ "./options/templates/text.ejs"
/*!************************************!*\
!*** ./options/templates/text.ejs ***!
\************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+(module) {
-eval("module.exports = function anonymous(locals, escapeFn, include, rethrow) {\n rethrow = rethrow || function rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split(\"\\n\");\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n var context = lines.slice(start, end).map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? \" >> \" : \" \") + curr + \"| \" + line;\n }).join(\"\\n\");\n err.path = filename;\n err.message = (filename || \"ejs\") + \":\" + lineno + \"\\n\" + context + \"\\n\\n\" + err.message;\n throw err;\n };\n escapeFn = escapeFn || function(markup) {\n return markup == undefined ? \"\" : String(markup).replace(_MATCH_HTML, encode_char);\n };\n var _ENCODE_HTML_RULES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, _MATCH_HTML = /[&<>'\"]/g;\n function encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n }\n var __line = 1, __lines = '\\n
\"><%= label %>: \\n
\\n \" class=\"iframely-option__input iframely-option__text\" id=\"<%= key %>\" name=\"<%= key %>\" placeholder=\"<%= placeholder %>\" value=\"<%= value %>\">\\n
\\n
', __filename = \"src/options/templates/text.ejs\";\n try {\n var __output = \"\";\n function __append(s) {\n if (s !== undefined && s !== null) __output += s;\n }\n with (locals || {}) {\n __append('\\n
');\n __append(escapeFn(label));\n __append(': \\n
\\n \\n
\\n
');\n __line = 6;\n }\n return __output;\n } catch (e) {\n rethrow(e, __lines, __filename, __line, escapeFn);\n }\n}\n\n//# sourceURL=webpack:///./options/templates/text.ejs?");
+eval("{module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '';\nwith (obj) {\n__p += '\\n
' +\n((__t = ( label )) == null ? '' : __t) +\n': \\n
\\n \\n
\\n
';\n\n}\nreturn __p\n}\n\n//# sourceURL=webpack:///./options/templates/text.ejs?\n}");
-/***/ })
+/***/ },
-/******/ });
\ No newline at end of file
+/***/ "./iframely.js"
+/*!*********************!*\
+ !*** ./iframely.js ***!
+ \*********************/
+(module) {
+
+eval("{var iframely = window.iframely = window.iframely || {};\niframely.config = iframely.config || {};\n\nmodule.exports = iframely;\n\n//# sourceURL=webpack:///./iframely.js?\n}");
+
+/***/ },
+
+/***/ "./options/form-builder.js"
+/*!*********************************!*\
+ !*** ./options/form-builder.js ***!
+ \*********************************/
+(module, __unused_webpack_exports, __webpack_require__) {
+
+eval("{var getFormElements = __webpack_require__(/*! ./form-generator */ \"./options/form-generator.js\");\nvar iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\n\nvar UIelements = {\n checkbox: {\n getValue: function(inputs) {\n var input = inputs[0];\n return input.checked;\n }\n },\n text: {\n getValue: function(inputs) {\n var input = inputs[0];\n var value = input.value;\n if (input.type === 'number') {\n value = parseInt(value);\n if (isNaN(value)) {\n value = '';\n }\n }\n return value;\n },\n customEvents: function(inputs, submitOptionsCb) {\n var input = inputs[0];\n iframely.addEventListener(input, 'click', function() {\n input.select();\n });\n iframely.addEventListener(input, 'blur', submitOptionsCb);\n iframely.addEventListener(input, 'keyup', function(e) {\n // Apply on enter.\n if (e.keyCode === 13) {\n submitOptionsCb();\n }\n });\n }\n },\n radio: {\n getValue: function(inputs) {\n var selectedInput;\n inputs.forEach(function(input) {\n if (input.checked) {\n selectedInput = input;\n }\n });\n return selectedInput.value;\n }\n }\n};\n\nvar defaultQueryById = {};\n\nmodule.exports = function(params) {\n\n var options = params.options;\n var formContainer = params.formContainer;\n\n if (!formContainer) {\n console.warn('No formContainer in form-builder options', params);\n return;\n }\n\n if (!options) {\n formContainer.innerHTML = '';\n return;\n }\n\n var elements = getFormElements(options, params.translator);\n var id = params.id;\n var renderer = params.renderer;\n\n var defaultQuery = defaultQueryById[id] = defaultQueryById[id] || {};\n // Exclude default values.\n Object.keys(options).forEach(function(key) {\n if (!options.query || options.query.indexOf(key) === -1) {\n // Store default value.\n defaultQuery[key] = options[key].value;\n }\n });\n\n function getQueryFromForm() {\n\n var query = {};\n\n var getOptionsFromElements = function(elements) {\n // Get options from all inputs.\n elements.forEach(function(element) {\n\n if (element.context && element.context.elements) {\n\n getOptionsFromElements(element.context.elements);\n\n } else if (element.inputs) {\n\n var elementUI = UIelements[element.type];\n var inputValue;\n if (elementUI && elementUI.getValue) {\n inputValue = elementUI.getValue(element.inputs);\n } else {\n inputValue = element.inputs[0].value;\n }\n Object.assign(query, element.getQuery(inputValue));\n }\n });\n };\n\n getOptionsFromElements(elements);\n \n return query;\n }\n\n function getAndSubmitOptions() {\n var query = getQueryFromForm();\n\n Object.keys(defaultQuery).forEach(function(key) {\n if (defaultQuery[key] === query[key] \n || query[key] === undefined) { // remove undefined so it's not included while JSON.stringify\n delete query[key];\n }\n });\n\n iframely.trigger('options-changed', id, formContainer, query);\n }\n\n // Render form.\n var renderElements = function(elements) {\n var html = '';\n elements.forEach(function(element) {\n if (element.context && element.context.elements) {\n element.context.elementsHtml = renderElements(element.context.elements);\n }\n html += renderer(element.type, element.context || {});\n });\n return html;\n };\n formContainer.innerHTML = renderElements(elements);\n\n // Bind events.\n var bindElements = function(elements) {\n \n elements.forEach(function(element) {\n\n if (element.context && element.context.elements) {\n\n bindElements(element.context.elements);\n\n } else {\n\n var elementUI = UIelements[element.type];\n if (element.context) {\n element.inputs = formContainer.querySelectorAll('[name=\"' + element.context.key + '\"]');\n if (element.inputs.length > 0) {\n if (elementUI && elementUI.customEvents) {\n elementUI.customEvents(element.inputs, getAndSubmitOptions);\n } else {\n element.inputs.forEach(function(input) {\n iframely.addEventListener(input, 'change', getAndSubmitOptions);\n });\n }\n } else {\n console.warn('No inputs found for option', element.key);\n }\n }\n }\n });\n };\n bindElements(elements);\n};\n\n//# sourceURL=webpack:///./options/form-builder.js?\n}");
+
+/***/ },
+
+/***/ "./options/form-generator.js"
+/*!***********************************!*\
+ !*** ./options/form-generator.js ***!
+ \***********************************/
+(module) {
+
+eval("{var _RE = /^_./;\n\nvar translate = function (label, translator) {\n return translator && typeof translator === 'function' \n ? translator (label) || label\n : label;\n};\n\nmodule.exports = function(options, translator) {\n\n if (!options) {\n return [];\n }\n\n // Remove query key.\n options = Object.assign({}, options);\n delete options.query;\n\n var items = [];\n var keys = Object.keys(options);\n var checkboxCount = 0;\n \n keys.forEach(function(key) {\n \n var context = {};\n\n var getQuery;\n var option = options[key];\n option.key = key;\n\n var forceCheckboxForSingleKeyValue;\n var valuesKeys = option.values && Object.keys(option.values);\n var singleKey, singleLabel;\n if (valuesKeys && valuesKeys.length === 1) {\n forceCheckboxForSingleKeyValue = true;\n singleKey = valuesKeys[0];\n singleLabel = option.values[singleKey];\n }\n\n context.label = translate(singleLabel || option.label, translator);\n context.key = option.key;\n\n if (forceCheckboxForSingleKeyValue || typeof option.value === 'boolean') {\n\n if (forceCheckboxForSingleKeyValue) {\n context.checked = (singleKey === option.value) || (!singleKey && !option.value);\n } else {\n context.checked = option.value;\n }\n\n checkboxCount++;\n\n items.push({\n type: 'checkbox',\n context: context,\n order: _RE.test(key) ? 0 : 1,\n getQuery: function(checked) {\n\n var value;\n if (forceCheckboxForSingleKeyValue) {\n value = checked ? singleKey : '';\n } else {\n value = checked;\n }\n\n var result = {};\n\n if (forceCheckboxForSingleKeyValue) {\n if (value === '') {\n // Empty.\n } else {\n result[option.key] = value;\n }\n } else {\n result[option.key] = checked;\n }\n return result;\n }\n });\n\n } else if ((typeof option.value === 'number' || typeof option.value === 'string') && !option.values) {\n\n var useSlider = option.range && typeof option.range.min === 'number' && typeof option.range.max === 'number';\n var useNumber = typeof option.value === 'number';\n\n context.value = option.value;\n\n getQuery = function(inputValue) {\n var result = {};\n if (inputValue === '') {\n // Empty.\n } else {\n result[option.key] = inputValue;\n }\n return result;\n };\n\n if (useSlider) {\n context.min = option.range.min;\n context.max = option.range.max;\n items.push({\n type: 'range',\n context: context,\n order: 9, // last one\n getQuery: getQuery\n });\n } else {\n context.placeholder = translate(option.placeholder || '', translator);\n context.inputType = useNumber ? 'number' : 'text';\n items.push({\n type: 'text',\n context: context,\n order: /start/i.test(key) ? 7 : 8, // start/end for player timing, ex.: youtube\n getQuery: getQuery\n });\n }\n\n } else if (option.values) {\n\n context.value = option.value + '';\n\n getQuery = function(inputValue) {\n var result = {};\n if (inputValue === '') {\n // Empty.\n } else {\n result[option.key] = inputValue;\n }\n return result;\n };\n\n if (Object.keys(option.values).length <= 3) {\n\n if (option.label) {\n context.label = translate(option.label, translator);\n } else {\n context.label = false;\n }\n\n var i = 0;\n var hasLongLabel = false;\n var values = Object.values(option.values);\n while (i < values.length && !hasLongLabel) {\n var label = values[i];\n hasLongLabel = label.length > 8;\n i++;\n }\n context.inline = !hasLongLabel;\n\n context.items = [];\n\n Object.keys(option.values).forEach(function(key, idx2) {\n context.items.push({\n id: context.key + '-' + idx2,\n value: key,\n label: translate(option.values[key], translator),\n checked: context.value === key\n });\n });\n\n items.push({\n type: 'radio',\n context: context,\n order: hasLongLabel ? -3 : (!/theme/.test(key) ? -2 : -1),\n getQuery: getQuery\n });\n\n } else {\n\n context.items = [];\n\n Object.keys(option.values).forEach(function(key) {\n context.items.push({\n value: key,\n label: translate(option.values[key], translator),\n checked: context.value === key\n });\n });\n\n items.push({\n type: 'select',\n context: context,\n order: 5,\n getQuery: getQuery\n });\n }\n }\n });\n\n items.sort(function(a, b) {\n return a.order - b.order;\n });\n\n items.forEach(function(item) {\n delete item.order;\n });\n\n if (checkboxCount > 0) {\n\n var groupedItems = [];\n var subItems;\n\n items.forEach(function(item, idx) {\n\n if (item.type === 'checkbox') {\n\n // Grouping for checkboxes.\n\n var newCheckboxGroup = \n checkboxCount > 2\n && idx > 0 \n && !_RE.test(item.context.key) \n && items[idx - 1].type === 'checkbox'\n && _RE.test(items[idx - 1].context.key);\n\n if (!subItems // First group.\n || newCheckboxGroup // Second group on _ prefix removed.\n ) {\n\n subItems = [];\n groupedItems.push({\n type: 'group',\n context: {\n elements: subItems\n }\n });\n }\n\n subItems.push(item);\n\n } else {\n // Other items. Just add.\n groupedItems.push(item);\n }\n });\n\n return groupedItems;\n\n } else {\n return items;\n }\n};\n\n//# sourceURL=webpack:///./options/form-generator.js?\n}");
+
+/***/ },
+
+/***/ "./options/index.js"
+/*!**************************!*\
+ !*** ./options/index.js ***!
+ \**************************/
+(__unused_webpack_module, exports, __webpack_require__) {
+
+eval("{var iframely = __webpack_require__(/*! ../iframely */ \"./iframely.js\");\nvar formBuilder = __webpack_require__(/*! ./form-builder */ \"./options/form-builder.js\");\nvar renderer = __webpack_require__(/*! ./renderer */ \"./options/renderer.js\");\n\niframely.buildOptionsForm = function(id, formContainer, options, translator) {\n formBuilder({\n id: id,\n formContainer: formContainer,\n options: options,\n renderer: renderer,\n translator: translator\n });\n};\n\nexports.iframely = iframely;\n\n//# sourceURL=webpack:///./options/index.js?\n}");
+
+/***/ },
+
+/***/ "./options/renderer.js"
+/*!*****************************!*\
+ !*** ./options/renderer.js ***!
+ \*****************************/
+(module, __unused_webpack_exports, __webpack_require__) {
+
+eval("{var checkboxTemplate = __webpack_require__(/*! ./templates/checkbox.ejs */ \"./options/templates/checkbox.ejs\");\nvar rangeTemplate = __webpack_require__(/*! ./templates/range.ejs */ \"./options/templates/range.ejs\");\nvar textTemplate = __webpack_require__(/*! ./templates/text.ejs */ \"./options/templates/text.ejs\");\nvar radioTemplate = __webpack_require__(/*! ./templates/radio.ejs */ \"./options/templates/radio.ejs\");\nvar selectTemplate = __webpack_require__(/*! ./templates/select.ejs */ \"./options/templates/select.ejs\");\nvar groupTemplate = __webpack_require__(/*! ./templates/group.ejs */ \"./options/templates/group.ejs\");\n\nvar templates = {\n checkbox: checkboxTemplate,\n range: rangeTemplate,\n text: textTemplate,\n radio: radioTemplate,\n select: selectTemplate,\n group: groupTemplate\n};\n\nmodule.exports = function(type, context) {\n var template = templates[type];\n var renderedTemplate = template(context);\n return renderedTemplate;\n};\n\n//# sourceURL=webpack:///./options/renderer.js?\n}");
+
+/***/ }
+
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ if (!(moduleId in __webpack_modules__)) {
+/******/ delete __webpack_module_cache__[moduleId];
+/******/ var e = new Error("Cannot find module '" + moduleId + "'");
+/******/ e.code = 'MODULE_NOT_FOUND';
+/******/ throw e;
+/******/ }
+/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/
+/******/ // startup
+/******/ // Load entry module and return exports
+/******/ // This entry module can't be inlined because the eval devtool is used.
+/******/ var __webpack_exports__ = __webpack_require__("./options/index.js");
+/******/
+/******/ })()
+;
\ No newline at end of file
diff --git a/dist/options.min.js b/dist/options.min.js
index e353356..2be8265 100644
--- a/dist/options.min.js
+++ b/dist/options.min.js
@@ -1 +1 @@
-!function(e){var n={};function t(a){if(n[a])return n[a].exports;var l=n[a]={i:a,l:!1,exports:{}};return e[a].call(l.exports,l,l.exports,t),l.l=!0,l.exports}t.m=e,t.c=n,t.d=function(e,n,a){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:a})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(t.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var l in e)t.d(a,l,function(n){return e[n]}.bind(null,l));return a},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=19)}([function(e,n){var t=window.iframely=window.iframely||{};t.config=t.config||{},e.exports=t},,,,,,,,,,,,,,,,,,,function(e,n,t){var a=t(0),l=t(20),o=t(22);a.buildOptionsForm=function(e,n,t,a){l({id:e,formContainer:n,options:t,renderer:o,translator:a})},n.iframely=a},function(e,n,t){var a=t(21),l=t(0),o={checkbox:{getValue:function(e){return e[0].checked}},text:{getValue:function(e){var n=e[0],t=n.value;return"number"===n.type&&(t=parseInt(t),isNaN(t)&&(t="")),t},customEvents:function(e,n){var t=e[0];l.addEventListener(t,"click",(function(){t.select()})),l.addEventListener(t,"blur",n),l.addEventListener(t,"keyup",(function(e){13===e.keyCode&&n()}))}},radio:{getValue:function(e){var n;return e.forEach((function(e){e.checked&&(n=e)})),n.value}}},i={};e.exports=function(e){var n=e.options,t=e.formContainer;if(t)if(n){var _=a(n,e.translator),p=e.id,r=e.renderer,c=i[p]=i[p]||{};Object.keys(n).forEach((function(e){n.query&&-1!==n.query.indexOf(e)||(c[e]=n[e].value)}));var s=function(e){var n="";return e.forEach((function(e){e.context&&e.context.elements&&(e.context.elementsHtml=s(e.context.elements)),n+=r(e.type,e.context||{})})),n};t.innerHTML=s(_);var u=function(e){e.forEach((function(e){if(e.context&&e.context.elements)u(e.context.elements);else{var n=o[e.type];e.context&&(e.inputs=t.querySelectorAll('[name="'+e.context.key+'"]'),e.inputs.length>0?n&&n.customEvents?n.customEvents(e.inputs,d):e.inputs.forEach((function(e){l.addEventListener(e,"change",d)})):console.warn("No inputs found for option",e.key))}}))};u(_)}else t.innerHTML="";else console.warn("No formContainer in form-builder options",e);function d(){var e=function(){var e={},n=function(t){t.forEach((function(t){if(t.context&&t.context.elements)n(t.context.elements);else if(t.inputs){var a,l=o[t.type];a=l&&l.getValue?l.getValue(t.inputs):t.inputs[0].value,Object.assign(e,t.getQuery(a))}}))};return n(_),e}();Object.keys(c).forEach((function(n){c[n]!==e[n]&&void 0!==e[n]||delete e[n]})),l.trigger("options-changed",p,t,e)}}},function(e,n){var t=/^_./,a=function(e,n){return n&&"function"==typeof n&&n(e)||e};e.exports=function(e,n){if(!e)return[];delete(e=Object.assign({},e)).query;var l=[],o=Object.keys(e),i=0;if(o.forEach((function(o){var _,p,r={},c=e[o];c.key=o;var s,u,d=c.values&&Object.keys(c.values);if(d&&1===d.length&&(p=!0,s=d[0],u=c.values[s]),r.label=a(u||c.label,n),r.key=c.key,p||"boolean"==typeof c.value)r.checked=p?s===c.value||!s&&!c.value:c.value,i++,l.push({type:"checkbox",context:r,order:t.test(o)?0:1,getQuery:function(e){var n;n=p?e?s:"":e;var t={};return p?""===n||(t[c.key]=n):t[c.key]=e,t}});else if("number"!=typeof c.value&&"string"!=typeof c.value||c.values){if(c.values)if(r.value=c.value+"",_=function(e){var n={};return""===e||(n[c.key]=e),n},Object.keys(c.values).length<=3){c.label?r.label=a(c.label,n):r.label=!1;for(var f=0,m=!1,v=Object.values(c.values);f8,f++}r.inline=!m,r.items=[],Object.keys(c.values).forEach((function(e,t){r.items.push({id:r.key+"-"+t,value:e,label:a(c.values[e],n),checked:r.value===e})})),l.push({type:"radio",context:r,order:m?-3:/theme/.test(o)?-1:-2,getQuery:_})}else r.items=[],Object.keys(c.values).forEach((function(e){r.items.push({value:e,label:a(c.values[e],n),checked:r.value===e})})),l.push({type:"select",context:r,order:5,getQuery:_})}else{var y=c.range&&"number"==typeof c.range.min&&"number"==typeof c.range.max,h="number"==typeof c.value;r.value=c.value,_=function(e){var n={};return""===e||(n[c.key]=e),n},y?(r.min=c.range.min,r.max=c.range.max,l.push({type:"range",context:r,order:9,getQuery:_})):(r.placeholder=a(c.placeholder||"",n),r.inputType=h?"number":"text",l.push({type:"text",context:r,order:/start/i.test(o)?7:8,getQuery:_}))}})),l.sort((function(e,n){return e.order-n.order})),l.forEach((function(e){delete e.order})),i>0){var _,p=[];return l.forEach((function(e,n){if("checkbox"===e.type){var a=i>2&&n>0&&!t.test(e.context.key)&&"checkbox"===l[n-1].type&&t.test(l[n-1].context.key);_&&!a||(_=[],p.push({type:"group",context:{elements:_}})),_.push(e)}else p.push(e)})),p}return l}},function(e,n,t){var a={checkbox:t(23),range:t(24),text:t(25),radio:t(26),select:t(27),group:t(28)};e.exports=function(e,n){return(0,a[e])(n)}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,n,t,a,l){var o=n.split("\n"),i=Math.max(a-3,0),_=Math.min(o.length,a+3),p=l(t),r=o.slice(i,_).map((function(e,n){var t=n+i+1;return(t==a?" >> ":" ")+t+"| "+e})).join("\n");throw e.path=p,e.message=(p||"ejs")+":"+a+"\n"+r+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n checked="checked"<% } %>>\n \n <%= label %>\n \n
\n',__filename="src/options/templates/checkbox.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n \n \n '),__line=4,__append(escapeFn(label)),__append("\n \n
\n"),__line=7;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,n,t,a,l){var o=n.split("\n"),i=Math.max(a-3,0),_=Math.min(o.length,a+3),p=l(t),r=o.slice(i,_).map((function(e,n){var t=n+i+1;return(t==a?" >> ":" ")+t+"| "+e})).join("\n");throw e.path=p,e.message=(p||"ejs")+":"+a+"\n"+r+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n
<%= label %>: \n
\n \n
\n
',__filename="src/options/templates/range.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n
'),__append(escapeFn(label)),__append(': \n
\n \n
\n
'),__line=6;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,n,t,a,l){var o=n.split("\n"),i=Math.max(a-3,0),_=Math.min(o.length,a+3),p=l(t),r=o.slice(i,_).map((function(e,n){var t=n+i+1;return(t==a?" >> ":" ")+t+"| "+e})).join("\n");throw e.path=p,e.message=(p||"ejs")+":"+a+"\n"+r+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n
<%= label %>: \n
\n \n
\n
',__filename="src/options/templates/text.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n
'),__append(escapeFn(label)),__append(': \n
\n \n
\n
'),__line=6;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,n,t,a,l){var o=n.split("\n"),i=Math.max(a-3,0),_=Math.min(o.length,a+3),p=l(t),r=o.slice(i,_).map((function(e,n){var t=n+i+1;return(t==a?" >> ":" ")+t+"| "+e})).join("\n");throw e.path=p,e.message=(p||"ejs")+":"+a+"\n"+r+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n <% if (label) { %>\n
\n <%= label %>:\n \n <% } %>\n
\n <% items.forEach(function(subContext) { %>\n
\n checked="checked"<% } %>>\n \n <%= subContext.label %>\n \n
\n <% }); %>\n
\n
',__filename="src/options/templates/radio.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n '),__line=2,label&&(__append('\n
\n '),__line=4,__append(escapeFn(label)),__append(":\n \n "),__line=6),__append('\n
\n '),__line=8,items.forEach((function(e){__append('\n
\n \n \n '),__line=12,__append(escapeFn(e.label)),__append("\n \n
\n "),__line=15})),__append("\n
\n
"),__line=17;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,n,t,a,l){var o=n.split("\n"),i=Math.max(a-3,0),_=Math.min(o.length,a+3),p=l(t),r=o.slice(i,_).map((function(e,n){var t=n+i+1;return(t==a?" >> ":" ")+t+"| "+e})).join("\n");throw e.path=p,e.message=(p||"ejs")+":"+a+"\n"+r+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n
<%= label %>: \n
\n \n <% items.forEach(function(subContext) { %>\n selected="selected"<% } %>><%= subContext.label %> \n <% }); %>\n \n
\n
',__filename="src/options/templates/select.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n
'),__append(escapeFn(label)),__append(': \n
\n \n '),__line=5,items.forEach((function(e){__append('\n "),__append(escapeFn(e.label)),__append(" \n "),__line=7})),__append("\n \n
\n
"),__line=10;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}},function(module,exports){module.exports=function anonymous(locals,escapeFn,include,rethrow){rethrow=rethrow||function(e,n,t,a,l){var o=n.split("\n"),i=Math.max(a-3,0),_=Math.min(o.length,a+3),p=l(t),r=o.slice(i,_).map((function(e,n){var t=n+i+1;return(t==a?" >> ":" ")+t+"| "+e})).join("\n");throw e.path=p,e.message=(p||"ejs")+":"+a+"\n"+r+"\n\n"+e.message,e},escapeFn=escapeFn||function(e){return null==e?"":String(e).replace(_MATCH_HTML,encode_char)};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"},_MATCH_HTML=/[&<>'"]/g;function encode_char(e){return _ENCODE_HTML_RULES[e]||e}var __line=1,__lines='\n
\n <%- elementsHtml %>\n
\n
',__filename="src/options/templates/group.ejs";try{var __output="";function __append(e){null!=e&&(__output+=e)}with(locals||{})__append('\n
\n '),__line=3,__append(elementsHtml),__append("\n
\n
"),__line=5;return __output}catch(e){rethrow(e,__lines,__filename,__line,escapeFn)}}}]);
\ No newline at end of file
+(()=>{var __webpack_modules__={530(module){module.exports=function(obj){obj||(obj={});var __t,__p="",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,"")}with(obj)__p+='\n \n \n '+(null==(__t=label)?"":__t)+"\n \n
\n";return __p}},30(module){module.exports=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='\n
\n '+__e(elementsHtml)+"\n
\n
";return __p}},510(module){module.exports=function(obj){obj||(obj={});var __t,__p="",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,"")}with(obj)__p+='\n ',label&&(__p+='\n
\n '+(null==(__t=label)?"":__t)+":\n \n "),__p+='\n
\n ',items.forEach(function(e){__p+='\n
\n \n \n '+(null==(__t=e.label)?"":__t)+"\n \n
\n "}),__p+="\n
\n
";return __p}},300(module){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='\n
'+(null==(__t=label)?"":__t)+': \n
\n \n
\n
';return __p}},37(module){module.exports=function(obj){obj||(obj={});var __t,__p="",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,"")}with(obj)__p+='\n
'+(null==(__t=label)?"":__t)+': \n
\n \n ',items.forEach(function(e){__p+='\n "+(null==(__t=e.label)?"":__t)+" \n "}),__p+="\n \n
\n
";return __p}},712(module){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='\n
'+(null==(__t=label)?"":__t)+': \n
\n \n
\n
';return __p}},774(e){var t=window.iframely=window.iframely||{};t.config=t.config||{},e.exports=t},410(e,t,n){var _=n(960),l=n(774),o={checkbox:{getValue:function(e){return e[0].checked}},text:{getValue:function(e){var t=e[0],n=t.value;return"number"===t.type&&(n=parseInt(n),isNaN(n)&&(n="")),n},customEvents:function(e,t){var n=e[0];l.addEventListener(n,"click",function(){n.select()}),l.addEventListener(n,"blur",t),l.addEventListener(n,"keyup",function(e){13===e.keyCode&&t()})}},radio:{getValue:function(e){var t;return e.forEach(function(e){e.checked&&(t=e)}),t.value}}},r={};e.exports=function(e){var t=e.options,n=e.formContainer;if(n)if(t){var a=_(t,e.translator),i=e.id,u=e.renderer,c=r[i]=r[i]||{};Object.keys(t).forEach(function(e){t.query&&-1!==t.query.indexOf(e)||(c[e]=t[e].value)});var p=function(e){var t="";return e.forEach(function(e){e.context&&e.context.elements&&(e.context.elementsHtml=p(e.context.elements)),t+=u(e.type,e.context||{})}),t};n.innerHTML=p(a);var s=function(e){e.forEach(function(e){if(e.context&&e.context.elements)s(e.context.elements);else{var t=o[e.type];e.context&&(e.inputs=n.querySelectorAll('[name="'+e.context.key+'"]'),e.inputs.length>0?t&&t.customEvents?t.customEvents(e.inputs,f):e.inputs.forEach(function(e){l.addEventListener(e,"change",f)}):console.warn("No inputs found for option",e.key))}})};s(a)}else n.innerHTML="";else console.warn("No formContainer in form-builder options",e);function f(){var e=function(){var e={},t=function(n){n.forEach(function(n){if(n.context&&n.context.elements)t(n.context.elements);else if(n.inputs){var _,l=o[n.type];_=l&&l.getValue?l.getValue(n.inputs):n.inputs[0].value,Object.assign(e,n.getQuery(_))}})};return t(a),e}();Object.keys(c).forEach(function(t){c[t]!==e[t]&&void 0!==e[t]||delete e[t]}),l.trigger("options-changed",i,n,e)}}},960(e){var t=/^_./,n=function(e,t){return t&&"function"==typeof t&&t(e)||e};e.exports=function(e,_){if(!e)return[];delete(e=Object.assign({},e)).query;var l=[],o=Object.keys(e),r=0;if(o.forEach(function(o){var a,i,u={},c=e[o];c.key=o;var p,s,f=c.values&&Object.keys(c.values);if(f&&1===f.length&&(i=!0,p=f[0],s=c.values[p]),u.label=n(s||c.label,_),u.key=c.key,i||"boolean"==typeof c.value)u.checked=i?p===c.value||!p&&!c.value:c.value,r++,l.push({type:"checkbox",context:u,order:t.test(o)?0:1,getQuery:function(e){var t;t=i?e?p:"":e;var n={};return i?""===t||(n[c.key]=t):n[c.key]=e,n}});else if("number"!=typeof c.value&&"string"!=typeof c.value||c.values){if(c.values)if(u.value=c.value+"",a=function(e){var t={};return""===e||(t[c.key]=e),t},Object.keys(c.values).length<=3){c.label?u.label=n(c.label,_):u.label=!1;for(var v=0,d=!1,y=Object.values(c.values);v8,v++;u.inline=!d,u.items=[],Object.keys(c.values).forEach(function(e,t){u.items.push({id:u.key+"-"+t,value:e,label:n(c.values[e],_),checked:u.value===e})}),l.push({type:"radio",context:u,order:d?-3:/theme/.test(o)?-1:-2,getQuery:a})}else u.items=[],Object.keys(c.values).forEach(function(e){u.items.push({value:e,label:n(c.values[e],_),checked:u.value===e})}),l.push({type:"select",context:u,order:5,getQuery:a})}else{var m=c.range&&"number"==typeof c.range.min&&"number"==typeof c.range.max,b="number"==typeof c.value;u.value=c.value,a=function(e){var t={};return""===e||(t[c.key]=e),t},m?(u.min=c.range.min,u.max=c.range.max,l.push({type:"range",context:u,order:9,getQuery:a})):(u.placeholder=n(c.placeholder||"",_),u.inputType=b?"number":"text",l.push({type:"text",context:u,order:/start/i.test(o)?7:8,getQuery:a}))}}),l.sort(function(e,t){return e.order-t.order}),l.forEach(function(e){delete e.order}),r>0){var a,i=[];return l.forEach(function(e,n){if("checkbox"===e.type){var _=r>2&&n>0&&!t.test(e.context.key)&&"checkbox"===l[n-1].type&&t.test(l[n-1].context.key);a&&!_||(a=[],i.push({type:"group",context:{elements:a}})),a.push(e)}else i.push(e)}),i}return l}},505(e,t,n){var _={checkbox:n(530),range:n(300),text:n(712),radio:n(510),select:n(37),group:n(30)};e.exports=function(e,t){return(0,_[e])(t)}}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](n,n.exports,__webpack_require__),n.exports}var __webpack_exports__={},iframely,formBuilder,renderer;iframely=__webpack_require__(774),formBuilder=__webpack_require__(410),renderer=__webpack_require__(505),iframely.buildOptionsForm=function(e,t,n,_){formBuilder({id:e,formContainer:t,options:n,renderer,translator:_})}})();
\ No newline at end of file
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000..99a278c
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,64 @@
+module.exports = [
+ {
+ languageOptions: {
+ ecmaVersion: 2018,
+ sourceType: 'module',
+ globals: {
+ ActiveXObject: 'readonly',
+ console: 'readonly',
+ window: 'readonly',
+ document: 'readonly',
+ navigator: 'readonly',
+ setTimeout: 'readonly',
+ clearTimeout: 'readonly',
+ setInterval: 'readonly',
+ clearInterval: 'readonly',
+ requestAnimationFrame: 'readonly',
+ cancelAnimationFrame: 'readonly',
+ IntersectionObserver: 'readonly',
+ MutationObserver: 'readonly',
+ XMLHttpRequest: 'readonly',
+ location: 'readonly',
+ module: 'readonly',
+ require: 'readonly',
+ exports: 'readonly'
+ }
+ },
+ rules: {
+ 'indent': [
+ 'error',
+ 4,
+ {
+ 'ignoreComments': true
+ }
+ ],
+ 'linebreak-style': [
+ 'error',
+ 'unix'
+ ],
+ 'quotes': [
+ 'error',
+ 'single',
+ {
+ 'avoidEscape': true
+ }
+ ],
+ 'semi': [
+ 'error',
+ 'always'
+ ],
+ 'no-console': [
+ 'warn',
+ {
+ 'allow': ['warn', 'error']
+ }
+ ],
+ 'no-empty': [
+ 'error',
+ {
+ 'allowEmptyCatch': true
+ }
+ ]
+ }
+ }
+];
diff --git a/package.json b/package.json
index 453a2ad..800e1b2 100644
--- a/package.json
+++ b/package.json
@@ -20,21 +20,20 @@
},
"main": "src/index.js",
"scripts": {
- "start": "webpack --env development --progress --profile --colors --watch",
- "build": "webpack --env production --progress --profile --colors",
+ "start": "webpack --env development --progress --watch",
+ "prebuild": "eslint ./src/**.js",
+ "build": "webpack --env production --progress",
"all": "webpack --env production && webpack --env development",
"lint": "eslint ./src/**.js"
},
"devDependencies": {
- "compile-ejs-loader": "0.0.2",
- "eslint": "^5.15.3",
- "eslint-loader": "^2.1.2",
- "webpack": "^4.29.6",
- "webpack-cli": "^3.3.0",
- "webpack-merge": "^4.2.1",
- "ejs": "^2.6.1",
- "html-minifier": "^3.5.19",
- "uglify-js": "^3.4.6"
+ "ejs-loader": "^0.5.0",
+ "eslint": "^10.0.0",
+ "eslint-webpack-plugin": "^5.0.1",
+ "webpack": "^5.90.0",
+ "webpack-cli": "^5.1.4",
+ "webpack-merge": "^6.0.1",
+ "ejs": "^5.0.1"
},
"license": "MIT",
"dependencies": {}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..62d73f6
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,1661 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ ejs:
+ specifier: ^5.0.1
+ version: 5.0.1
+ ejs-loader:
+ specifier: ^0.5.0
+ version: 0.5.0
+ eslint:
+ specifier: ^10.0.0
+ version: 10.0.3
+ eslint-webpack-plugin:
+ specifier: ^5.0.1
+ version: 5.0.3(eslint@10.0.3)(webpack@5.105.4)
+ webpack:
+ specifier: ^5.90.0
+ version: 5.105.4(webpack-cli@5.1.4)
+ webpack-cli:
+ specifier: ^5.1.4
+ version: 5.1.4(webpack@5.105.4)
+ webpack-merge:
+ specifier: ^6.0.1
+ version: 6.0.1
+
+packages:
+
+ '@discoveryjs/json-ext@0.5.7':
+ resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
+ engines: {node: '>=10.0.0'}
+
+ '@eslint-community/eslint-utils@4.9.1':
+ resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.12.2':
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/config-array@0.23.3':
+ resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@eslint/config-helpers@0.5.3':
+ resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@eslint/core@1.1.1':
+ resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@eslint/object-schema@3.0.3':
+ resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@eslint/plugin-kit@0.6.1':
+ resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.7':
+ resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
+
+ '@jest/schemas@29.6.3':
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/types@29.6.3':
+ resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@sinclair/typebox@0.27.10':
+ resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==}
+
+ '@types/eslint-scope@3.7.7':
+ resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
+
+ '@types/eslint@9.6.1':
+ resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
+
+ '@types/esrecurse@4.3.1':
+ resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
+ '@types/istanbul-lib-report@3.0.3':
+ resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
+
+ '@types/istanbul-reports@3.0.4':
+ resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/node@25.5.0':
+ resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==}
+
+ '@types/yargs-parser@21.0.3':
+ resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
+
+ '@types/yargs@17.0.35':
+ resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==}
+
+ '@webassemblyjs/ast@1.14.1':
+ resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
+
+ '@webassemblyjs/floating-point-hex-parser@1.13.2':
+ resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
+
+ '@webassemblyjs/helper-api-error@1.13.2':
+ resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
+
+ '@webassemblyjs/helper-buffer@1.14.1':
+ resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
+
+ '@webassemblyjs/helper-numbers@1.13.2':
+ resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
+
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2':
+ resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
+
+ '@webassemblyjs/helper-wasm-section@1.14.1':
+ resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
+
+ '@webassemblyjs/ieee754@1.13.2':
+ resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
+
+ '@webassemblyjs/leb128@1.13.2':
+ resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
+
+ '@webassemblyjs/utf8@1.13.2':
+ resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
+
+ '@webassemblyjs/wasm-edit@1.14.1':
+ resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
+
+ '@webassemblyjs/wasm-gen@1.14.1':
+ resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
+
+ '@webassemblyjs/wasm-opt@1.14.1':
+ resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
+
+ '@webassemblyjs/wasm-parser@1.14.1':
+ resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
+
+ '@webassemblyjs/wast-printer@1.14.1':
+ resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
+
+ '@webpack-cli/configtest@2.1.1':
+ resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==}
+ engines: {node: '>=14.15.0'}
+ peerDependencies:
+ webpack: 5.x.x
+ webpack-cli: 5.x.x
+
+ '@webpack-cli/info@2.0.2':
+ resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==}
+ engines: {node: '>=14.15.0'}
+ peerDependencies:
+ webpack: 5.x.x
+ webpack-cli: 5.x.x
+
+ '@webpack-cli/serve@2.0.5':
+ resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==}
+ engines: {node: '>=14.15.0'}
+ peerDependencies:
+ webpack: 5.x.x
+ webpack-cli: 5.x.x
+ webpack-dev-server: '*'
+ peerDependenciesMeta:
+ webpack-dev-server:
+ optional: true
+
+ '@xtuc/ieee754@1.2.0':
+ resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+
+ '@xtuc/long@4.2.2':
+ resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+
+ acorn-import-phases@1.0.4:
+ resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==}
+ engines: {node: '>=10.13.0'}
+ peerDependencies:
+ acorn: ^8.14.0
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.16.0:
+ resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ ajv-formats@2.1.1:
+ resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv-keywords@5.1.0:
+ resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
+ peerDependencies:
+ ajv: ^8.8.2
+
+ ajv@6.14.0:
+ resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==}
+
+ ajv@8.18.0:
+ resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
+
+ baseline-browser-mapping@2.10.7:
+ resolution: {integrity: sha512-1ghYO3HnxGec0TCGBXiDLVns4eCSx4zJpxnHrlqFQajmhfKMQBzUGDdkMK7fUW7PTHTeLf+j87aTuKuuwWzMGw==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ big.js@5.2.2:
+ resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
+
+ brace-expansion@5.0.4:
+ resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==}
+ engines: {node: 18 || 20 || >=22}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ caniuse-lite@1.0.30001778:
+ resolution: {integrity: sha512-PN7uxFL+ExFJO61aVmP1aIEG4i9whQd4eoSCebav62UwDyp5OHh06zN4jqKSMePVgxHifCw1QJxdRkA1Pisekg==}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chrome-trace-event@1.0.4:
+ resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
+ engines: {node: '>=6.0'}
+
+ ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+
+ clone-deep@4.0.1:
+ resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
+ engines: {node: '>=6'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+
+ commander@10.0.1:
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+ engines: {node: '>=14'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ ejs-loader@0.5.0:
+ resolution: {integrity: sha512-iirFqlP3tiFoedNZ7dQcjvechunl054VbW6Ki38T/pabgXMAncduSE0ZXLeVGn1NbmcUJF9Z5TC0EvQ4RIpP9Q==}
+
+ ejs@5.0.1:
+ resolution: {integrity: sha512-COqBPFMxuPTPspXl2DkVYaDS3HtrD1GpzOGkNTJ1IYkifq/r9h8SVEFrjA3D9/VJGOEoMQcrlhpntcSUrM8k6A==}
+ engines: {node: '>=0.12.18'}
+ hasBin: true
+
+ electron-to-chromium@1.5.313:
+ resolution: {integrity: sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==}
+
+ emojis-list@3.0.0:
+ resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
+ engines: {node: '>= 4'}
+
+ enhanced-resolve@5.20.0:
+ resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==}
+ engines: {node: '>=10.13.0'}
+
+ envinfo@7.21.0:
+ resolution: {integrity: sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ es-module-lexer@2.0.0:
+ resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+
+ eslint-scope@9.1.2:
+ resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@5.0.1:
+ resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ eslint-webpack-plugin@5.0.3:
+ resolution: {integrity: sha512-P2Id4RMSMQMwMEuw3W9x3n2qDbKPeD+tehWMY3ENFsoSPKNZ9i3WTZEsFE7NeQIpNebhNEGw8qorvpLVq1rK1g==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ eslint: ^8.0.0 || ^9.0.0
+ webpack: ^5.0.0
+
+ eslint@10.0.3:
+ resolution: {integrity: sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
+ espree@11.2.0:
+ resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ esquery@1.7.0:
+ resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fast-uri@3.1.0:
+ resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+
+ fastest-levenshtein@1.0.16:
+ resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
+ engines: {node: '>= 4.9.1'}
+
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ flatted@3.4.1:
+ resolution: {integrity: sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==}
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ import-local@3.2.0:
+ resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ interpret@3.1.1:
+ resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
+ engines: {node: '>=10.13.0'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-object@2.0.4:
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+ engines: {node: '>=0.10.0'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isobject@3.0.1:
+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+ engines: {node: '>=0.10.0'}
+
+ jest-util@29.7.0:
+ resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-worker@27.5.1:
+ resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
+ engines: {node: '>= 10.13.0'}
+
+ jest-worker@29.7.0:
+ resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ loader-runner@4.3.1:
+ resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==}
+ engines: {node: '>=6.11.5'}
+
+ loader-utils@2.0.4:
+ resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
+ engines: {node: '>=8.9.0'}
+
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash@4.17.23:
+ resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ minimatch@10.2.4:
+ resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==}
+ engines: {node: 18 || 20 || >=22}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
+ node-releases@2.0.36:
+ resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ pkg-dir@4.2.0:
+ resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
+ engines: {node: '>=8'}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ rechoir@0.8.0:
+ resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
+ engines: {node: '>= 10.13.0'}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-cwd@3.0.0:
+ resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
+ engines: {node: '>=8'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ schema-utils@4.3.3:
+ resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
+ engines: {node: '>= 10.13.0'}
+
+ shallow-clone@3.0.1:
+ resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
+ engines: {node: '>=8'}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ tapable@2.3.0:
+ resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
+ engines: {node: '>=6'}
+
+ terser-webpack-plugin@5.4.0:
+ resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@swc/core': '*'
+ esbuild: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+
+ terser@5.46.0:
+ resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ undici-types@7.18.2:
+ resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
+
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ watchpack@2.5.1:
+ resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==}
+ engines: {node: '>=10.13.0'}
+
+ webpack-cli@5.1.4:
+ resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==}
+ engines: {node: '>=14.15.0'}
+ hasBin: true
+ peerDependencies:
+ '@webpack-cli/generators': '*'
+ webpack: 5.x.x
+ webpack-bundle-analyzer: '*'
+ webpack-dev-server: '*'
+ peerDependenciesMeta:
+ '@webpack-cli/generators':
+ optional: true
+ webpack-bundle-analyzer:
+ optional: true
+ webpack-dev-server:
+ optional: true
+
+ webpack-merge@5.10.0:
+ resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==}
+ engines: {node: '>=10.0.0'}
+
+ webpack-merge@6.0.1:
+ resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==}
+ engines: {node: '>=18.0.0'}
+
+ webpack-sources@3.3.4:
+ resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==}
+ engines: {node: '>=10.13.0'}
+
+ webpack@5.105.4:
+ resolution: {integrity: sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wildcard@2.0.1:
+ resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@discoveryjs/json-ext@0.5.7': {}
+
+ '@eslint-community/eslint-utils@4.9.1(eslint@10.0.3)':
+ dependencies:
+ eslint: 10.0.3
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.2': {}
+
+ '@eslint/config-array@0.23.3':
+ dependencies:
+ '@eslint/object-schema': 3.0.3
+ debug: 4.4.3
+ minimatch: 10.2.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.5.3':
+ dependencies:
+ '@eslint/core': 1.1.1
+
+ '@eslint/core@1.1.1':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/object-schema@3.0.3': {}
+
+ '@eslint/plugin-kit@0.6.1':
+ dependencies:
+ '@eslint/core': 1.1.1
+ levn: 0.4.1
+
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.7':
+ dependencies:
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.4.3
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.4.3': {}
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.10
+
+ '@jest/types@29.6.3':
+ dependencies:
+ '@jest/schemas': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 25.5.0
+ '@types/yargs': 17.0.35
+ chalk: 4.1.2
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/source-map@0.3.11':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@sinclair/typebox@0.27.10': {}
+
+ '@types/eslint-scope@3.7.7':
+ dependencies:
+ '@types/eslint': 9.6.1
+ '@types/estree': 1.0.8
+
+ '@types/eslint@9.6.1':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+
+ '@types/esrecurse@4.3.1': {}
+
+ '@types/estree@1.0.8': {}
+
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/istanbul-lib-report@3.0.3':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+
+ '@types/istanbul-reports@3.0.4':
+ dependencies:
+ '@types/istanbul-lib-report': 3.0.3
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/node@25.5.0':
+ dependencies:
+ undici-types: 7.18.2
+
+ '@types/yargs-parser@21.0.3': {}
+
+ '@types/yargs@17.0.35':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ '@webassemblyjs/ast@1.14.1':
+ dependencies:
+ '@webassemblyjs/helper-numbers': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+
+ '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
+
+ '@webassemblyjs/helper-api-error@1.13.2': {}
+
+ '@webassemblyjs/helper-buffer@1.14.1': {}
+
+ '@webassemblyjs/helper-numbers@1.13.2':
+ dependencies:
+ '@webassemblyjs/floating-point-hex-parser': 1.13.2
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
+
+ '@webassemblyjs/helper-wasm-section@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/wasm-gen': 1.14.1
+
+ '@webassemblyjs/ieee754@1.13.2':
+ dependencies:
+ '@xtuc/ieee754': 1.2.0
+
+ '@webassemblyjs/leb128@1.13.2':
+ dependencies:
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/utf8@1.13.2': {}
+
+ '@webassemblyjs/wasm-edit@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/helper-wasm-section': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-opt': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ '@webassemblyjs/wast-printer': 1.14.1
+
+ '@webassemblyjs/wasm-gen@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wasm-opt@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+
+ '@webassemblyjs/wasm-parser@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wast-printer@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@xtuc/long': 4.2.2
+
+ '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.105.4)':
+ dependencies:
+ webpack: 5.105.4(webpack-cli@5.1.4)
+ webpack-cli: 5.1.4(webpack@5.105.4)
+
+ '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.105.4)':
+ dependencies:
+ webpack: 5.105.4(webpack-cli@5.1.4)
+ webpack-cli: 5.1.4(webpack@5.105.4)
+
+ '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.105.4)':
+ dependencies:
+ webpack: 5.105.4(webpack-cli@5.1.4)
+ webpack-cli: 5.1.4(webpack@5.105.4)
+
+ '@xtuc/ieee754@1.2.0': {}
+
+ '@xtuc/long@4.2.2': {}
+
+ acorn-import-phases@1.0.4(acorn@8.16.0):
+ dependencies:
+ acorn: 8.16.0
+
+ acorn-jsx@5.3.2(acorn@8.16.0):
+ dependencies:
+ acorn: 8.16.0
+
+ acorn@8.16.0: {}
+
+ ajv-formats@2.1.1(ajv@8.18.0):
+ optionalDependencies:
+ ajv: 8.18.0
+
+ ajv-keywords@5.1.0(ajv@8.18.0):
+ dependencies:
+ ajv: 8.18.0
+ fast-deep-equal: 3.1.3
+
+ ajv@6.14.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ajv@8.18.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ balanced-match@4.0.4: {}
+
+ baseline-browser-mapping@2.10.7: {}
+
+ big.js@5.2.2: {}
+
+ brace-expansion@5.0.4:
+ dependencies:
+ balanced-match: 4.0.4
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserslist@4.28.1:
+ dependencies:
+ baseline-browser-mapping: 2.10.7
+ caniuse-lite: 1.0.30001778
+ electron-to-chromium: 1.5.313
+ node-releases: 2.0.36
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
+
+ buffer-from@1.1.2: {}
+
+ caniuse-lite@1.0.30001778: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chrome-trace-event@1.0.4: {}
+
+ ci-info@3.9.0: {}
+
+ clone-deep@4.0.1:
+ dependencies:
+ is-plain-object: 2.0.4
+ kind-of: 6.0.3
+ shallow-clone: 3.0.1
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ colorette@2.0.20: {}
+
+ commander@10.0.1: {}
+
+ commander@2.20.3: {}
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ deep-is@0.1.4: {}
+
+ ejs-loader@0.5.0:
+ dependencies:
+ loader-utils: 2.0.4
+ lodash: 4.17.23
+
+ ejs@5.0.1: {}
+
+ electron-to-chromium@1.5.313: {}
+
+ emojis-list@3.0.0: {}
+
+ enhanced-resolve@5.20.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.0
+
+ envinfo@7.21.0: {}
+
+ es-module-lexer@2.0.0: {}
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eslint-scope@5.1.1:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+
+ eslint-scope@9.1.2:
+ dependencies:
+ '@types/esrecurse': 4.3.1
+ '@types/estree': 1.0.8
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@5.0.1: {}
+
+ eslint-webpack-plugin@5.0.3(eslint@10.0.3)(webpack@5.105.4):
+ dependencies:
+ '@types/eslint': 9.6.1
+ eslint: 10.0.3
+ flatted: 3.4.1
+ jest-worker: 29.7.0
+ micromatch: 4.0.8
+ normalize-path: 3.0.0
+ schema-utils: 4.3.3
+ webpack: 5.105.4(webpack-cli@5.1.4)
+
+ eslint@10.0.3:
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3)
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.23.3
+ '@eslint/config-helpers': 0.5.3
+ '@eslint/core': 1.1.1
+ '@eslint/plugin-kit': 0.6.1
+ '@humanfs/node': 0.16.7
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ ajv: 6.14.0
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint-scope: 9.1.2
+ eslint-visitor-keys: 5.0.1
+ espree: 11.2.0
+ esquery: 1.7.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ minimatch: 10.2.4
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ transitivePeerDependencies:
+ - supports-color
+
+ espree@11.2.0:
+ dependencies:
+ acorn: 8.16.0
+ acorn-jsx: 5.3.2(acorn@8.16.0)
+ eslint-visitor-keys: 5.0.1
+
+ esquery@1.7.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@4.3.0: {}
+
+ estraverse@5.3.0: {}
+
+ esutils@2.0.3: {}
+
+ events@3.3.0: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fast-uri@3.1.0: {}
+
+ fastest-levenshtein@1.0.16: {}
+
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.4.1
+ keyv: 4.5.4
+
+ flat@5.0.2: {}
+
+ flatted@3.4.1: {}
+
+ function-bind@1.1.2: {}
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-to-regexp@0.4.1: {}
+
+ graceful-fs@4.2.11: {}
+
+ has-flag@4.0.0: {}
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ ignore@5.3.2: {}
+
+ import-local@3.2.0:
+ dependencies:
+ pkg-dir: 4.2.0
+ resolve-cwd: 3.0.0
+
+ imurmurhash@0.1.4: {}
+
+ interpret@3.1.1: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-object@2.0.4:
+ dependencies:
+ isobject: 3.0.1
+
+ isexe@2.0.0: {}
+
+ isobject@3.0.1: {}
+
+ jest-util@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 25.5.0
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ graceful-fs: 4.2.11
+ picomatch: 2.3.1
+
+ jest-worker@27.5.1:
+ dependencies:
+ '@types/node': 25.5.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jest-worker@29.7.0:
+ dependencies:
+ '@types/node': 25.5.0
+ jest-util: 29.7.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ json-buffer@3.0.1: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-schema-traverse@1.0.0: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json5@2.2.3: {}
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ kind-of@6.0.3: {}
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ loader-runner@4.3.1: {}
+
+ loader-utils@2.0.4:
+ dependencies:
+ big.js: 5.2.2
+ emojis-list: 3.0.0
+ json5: 2.2.3
+
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash@4.17.23: {}
+
+ merge-stream@2.0.0: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ minimatch@10.2.4:
+ dependencies:
+ brace-expansion: 5.0.4
+
+ ms@2.1.3: {}
+
+ natural-compare@1.4.0: {}
+
+ neo-async@2.6.2: {}
+
+ node-releases@2.0.36: {}
+
+ normalize-path@3.0.0: {}
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.3.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-try@2.2.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ pkg-dir@4.2.0:
+ dependencies:
+ find-up: 4.1.0
+
+ prelude-ls@1.2.1: {}
+
+ punycode@2.3.1: {}
+
+ rechoir@0.8.0:
+ dependencies:
+ resolve: 1.22.11
+
+ require-from-string@2.0.2: {}
+
+ resolve-cwd@3.0.0:
+ dependencies:
+ resolve-from: 5.0.0
+
+ resolve-from@5.0.0: {}
+
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ schema-utils@4.3.3:
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 8.18.0
+ ajv-formats: 2.1.1(ajv@8.18.0)
+ ajv-keywords: 5.1.0(ajv@8.18.0)
+
+ shallow-clone@3.0.1:
+ dependencies:
+ kind-of: 6.0.3
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ tapable@2.3.0: {}
+
+ terser-webpack-plugin@5.4.0(webpack@5.105.4):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ jest-worker: 27.5.1
+ schema-utils: 4.3.3
+ terser: 5.46.0
+ webpack: 5.105.4(webpack-cli@5.1.4)
+
+ terser@5.46.0:
+ dependencies:
+ '@jridgewell/source-map': 0.3.11
+ acorn: 8.16.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ undici-types@7.18.2: {}
+
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
+ dependencies:
+ browserslist: 4.28.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ watchpack@2.5.1:
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+
+ webpack-cli@5.1.4(webpack@5.105.4):
+ dependencies:
+ '@discoveryjs/json-ext': 0.5.7
+ '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.105.4)
+ '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.105.4)
+ '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.105.4)
+ colorette: 2.0.20
+ commander: 10.0.1
+ cross-spawn: 7.0.6
+ envinfo: 7.21.0
+ fastest-levenshtein: 1.0.16
+ import-local: 3.2.0
+ interpret: 3.1.1
+ rechoir: 0.8.0
+ webpack: 5.105.4(webpack-cli@5.1.4)
+ webpack-merge: 5.10.0
+
+ webpack-merge@5.10.0:
+ dependencies:
+ clone-deep: 4.0.1
+ flat: 5.0.2
+ wildcard: 2.0.1
+
+ webpack-merge@6.0.1:
+ dependencies:
+ clone-deep: 4.0.1
+ flat: 5.0.2
+ wildcard: 2.0.1
+
+ webpack-sources@3.3.4: {}
+
+ webpack@5.105.4(webpack-cli@5.1.4):
+ dependencies:
+ '@types/eslint-scope': 3.7.7
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/wasm-edit': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ acorn: 8.16.0
+ acorn-import-phases: 1.0.4(acorn@8.16.0)
+ browserslist: 4.28.1
+ chrome-trace-event: 1.0.4
+ enhanced-resolve: 5.20.0
+ es-module-lexer: 2.0.0
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ json-parse-even-better-errors: 2.3.1
+ loader-runner: 4.3.1
+ mime-types: 2.1.35
+ neo-async: 2.6.2
+ schema-utils: 4.3.3
+ tapable: 2.3.0
+ terser-webpack-plugin: 5.4.0(webpack@5.105.4)
+ watchpack: 2.5.1
+ webpack-sources: 3.3.4
+ optionalDependencies:
+ webpack-cli: 5.1.4(webpack@5.105.4)
+ transitivePeerDependencies:
+ - '@swc/core'
+ - esbuild
+ - uglify-js
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wildcard@2.0.1: {}
+
+ word-wrap@1.2.5: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/src/lazy-img-placeholder.js b/src/lazy-img-placeholder.js
index 1582c05..56c9458 100644
--- a/src/lazy-img-placeholder.js
+++ b/src/lazy-img-placeholder.js
@@ -70,6 +70,11 @@ function addPlaceholderThumbnail(widget, href, imageUrl) {
_params[param] = query[param];
}
}
+
+ // Force proxy `media` param.
+ if (query.media) {
+ _params.media = query.media;
+ }
// need to run through getEndpoint at least to avoid file:///
if (href.match(/\/api\/iframe/)) {
@@ -259,4 +264,4 @@ WaitingWidget.prototype.registerLoadingTimeout = function() {
this.timeoutId = setTimeout(function() {
that.iframeOnLoad();
}, iframely.LAZY_IFRAME_SHOW_TIMEOUT);
-};
\ No newline at end of file
+};
diff --git a/webpack.config.js b/webpack.config.js
index 611a672..8f08f95 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,3 +1,4 @@
module.exports = function(env) {
- return require(`./conf/webpack.${env}.js`);
-};
\ No newline at end of file
+ const environment = env.production ? 'production' : 'development';
+ return require(`./conf/webpack.${environment}.js`);
+};