UNPKG

styledot

Version:
233 lines (194 loc) 24.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.stop = exports.pill = exports.button = exports.box = void 0; /** * Escapes HTML to prevent XSS attacks passed in through `text` param. * @param {string} unsafeText * @return {string} */ function escape(unsafeText) { var escape = document.createElement('textarea'); escape.textContent = unsafeText; return escape.innerHTML; } /** * Returns an array of Javascript elements for iterating in function * @param {Object} element - The Javascript element (or NodeList or HTMLCollection) * @return {array} */ function parseElement(element) { if (NodeList.prototype.isPrototypeOf(element) || HTMLCollection.prototype.isPrototypeOf(element)) { return element; } return [element]; } /** * Kills loading animation for given element. * @param {Object} element - The Javascript element (or NodeList or HTMLCollection) * @param {function} callback - Callback to run after loading fade out */ var stop = function stop(element, callback) { if (!element) { return false; } var selectors = '.sd-loading-box-wrapper, .sd-loading-pill-wrapper, .sd-button-loading-wrapper'; var elements = parseElement(element); elements.forEach(function (element) { var wrappers = element.querySelectorAll(selectors); wrappers.forEach(function (wrapper) { var opacity = 1; var timer = setInterval(function () { opacity -= 50 / 150; if (opacity <= 0) { clearInterval(timer); opacity = 0; wrapper.remove(); element.classList.remove('sd-loadingstate'); if (typeof callback === 'function') { callback(); } } wrapper.style.opacity = opacity; }, 50); }); }); }; /** * Apply all necessary button-related loading logic to a specific Javascript element * @param {Object} button - A single Javascript element * @param {string} [text] - The text to render during loading * @param {string} [style] - The modified loading style string * @return {boolean} */ exports.stop = stop; function attachToButton(button, text, style) { var display = window.getComputedStyle(button).display; if (display === 'inline-block' || display === 'inline-flex') { button.classList.add('mod-loading-button-inline'); } if (style) { button.classList.add("mod-loading-".concat(style)); } if (!button.querySelector('.sd-button-loading')) { var sdLoadingButtonWrapper = document.createElement('div'); sdLoadingButtonWrapper.classList.add('sd-button-loading-wrapper'); var sdBoxLoading = document.createElement('div'); sdBoxLoading.classList.add('sd-button-loading'); sdLoadingButtonWrapper.appendChild(sdBoxLoading); if (text) { var textNode = document.createTextNode(escape(text)); button.replaceChild(textNode, button.lastChild); } button.insertBefore(sdLoadingButtonWrapper, button.firstChild); } button.classList.add('sd-loadingstate'); } /** * Button loading initialization. * @param {Object} el - The Javascript element (or NodeList or HTMLCollection) * @param {string} [text] - The text to render during loading * @param {string} [style] - The modified loading style string * @param {Object} [opts] - The additional configuration options * @return {boolean} */ var button = function button(el, text, style, opts) { if (!el) { return false; } var elements = parseElement(el); elements.forEach(function (element) { element.classList.add('sd-loading-button'); element.addEventListener('click', function () { if (opts) { if (typeof opts.check === 'function' && (opts.check() === false || opts.check() === undefined)) { return false; } else { attachToButton(element, text, style); return true; } } else { attachToButton(element, text, style); } }); }); return true; }; /** * Box loading initialization. * @param {Object} el - The Javascript element (or NodeList or HTMLCollection) * @param {string} [text] - The text to render during loading * @param {string} [style] - The modified loading style string * @return {boolean} */ exports.button = button; var box = function box(el, text, style) { if (!el) { return false; } text = text || ''; var elements = parseElement(el); elements.forEach(function (element) { element.classList.add('sd-loading-box', 'sd-loadingstate'); if (!element.querySelector('.sd-loading-box-wrapper')) { var sdLoadingBoxWrapper = document.createElement('div'); sdLoadingBoxWrapper.classList.add('sd-loading-box-wrapper'); var sdBoxLoading = document.createElement('div'); sdBoxLoading.classList.add('sd-box-loading'); var span = document.createElement('span'); var textNode = document.createTextNode(text); sdLoadingBoxWrapper.appendChild(sdBoxLoading); span.appendChild(textNode); sdLoadingBoxWrapper.appendChild(span); if (style) { element.classList.add("mod-loading-".concat(style)); } element.insertBefore(sdLoadingBoxWrapper, element.firstChild); } }); return true; }; /** * Pill loading initialization. * @param {Object} el - The Javascript element (or NodeList or HTMLCollection) * @param {string} text - The text to render during loading * @param {string} [style] - The modified loading style string * @return {boolean} */ exports.box = box; var pill = function pill(el, text, style) { if (!el) { return false; } if (!text) { throw new Error('no text passed in'); } var elements = parseElement(el); elements.forEach(function (element) { element.classList.add('sd-loading-pill', 'sd-loadingstate'); if (!element.querySelector('.sd-loading-pill-wrapper')) { var sdLoadingPillWrapper = document.createElement('div'); sdLoadingPillWrapper.classList.add('sd-loading-pill-wrapper'); var sdPillShape = document.createElement('div'); sdPillShape.classList.add('sd-loading-pill-shape'); var sdPillLoading = document.createElement('div'); sdPillLoading.classList.add('sd-pill-loading'); var span = document.createElement('span'); var textNode = document.createTextNode(escape(text)); sdPillShape.appendChild(sdPillLoading); sdPillShape.appendChild(span); span.appendChild(textNode); sdLoadingPillWrapper.appendChild(sdPillShape); if (style) { element.classList.add("mod-loading-".concat(style)); } element.insertBefore(sdLoadingPillWrapper, element.firstChild); } else { return false; } }); return true; }; exports.pill = pill; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlc2NhcGUiLCJ1bnNhZmVUZXh0IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJpbm5lckhUTUwiLCJwYXJzZUVsZW1lbnQiLCJlbGVtZW50IiwiTm9kZUxpc3QiLCJwcm90b3R5cGUiLCJpc1Byb3RvdHlwZU9mIiwiSFRNTENvbGxlY3Rpb24iLCJzdG9wIiwiY2FsbGJhY2siLCJzZWxlY3RvcnMiLCJlbGVtZW50cyIsImZvckVhY2giLCJ3cmFwcGVycyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ3cmFwcGVyIiwib3BhY2l0eSIsInRpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwicmVtb3ZlIiwiY2xhc3NMaXN0Iiwic3R5bGUiLCJhdHRhY2hUb0J1dHRvbiIsImJ1dHRvbiIsInRleHQiLCJkaXNwbGF5Iiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImFkZCIsInF1ZXJ5U2VsZWN0b3IiLCJzZExvYWRpbmdCdXR0b25XcmFwcGVyIiwic2RCb3hMb2FkaW5nIiwiYXBwZW5kQ2hpbGQiLCJ0ZXh0Tm9kZSIsImNyZWF0ZVRleHROb2RlIiwicmVwbGFjZUNoaWxkIiwibGFzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsImVsIiwib3B0cyIsImFkZEV2ZW50TGlzdGVuZXIiLCJjaGVjayIsInVuZGVmaW5lZCIsImJveCIsInNkTG9hZGluZ0JveFdyYXBwZXIiLCJzcGFuIiwicGlsbCIsIkVycm9yIiwic2RMb2FkaW5nUGlsbFdyYXBwZXIiLCJzZFBpbGxTaGFwZSIsInNkUGlsbExvYWRpbmciXSwic291cmNlcyI6WyIuLi9zcmMvbGliL2xvYWRpbmcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFc2NhcGVzIEhUTUwgdG8gcHJldmVudCBYU1MgYXR0YWNrcyBwYXNzZWQgaW4gdGhyb3VnaCBgdGV4dGAgcGFyYW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gdW5zYWZlVGV4dFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGUodW5zYWZlVGV4dCkge1xuICAgIGNvbnN0IGVzY2FwZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgZXNjYXBlLnRleHRDb250ZW50ID0gdW5zYWZlVGV4dDtcbiAgICByZXR1cm4gZXNjYXBlLmlubmVySFRNTDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIEphdmFzY3JpcHQgZWxlbWVudHMgZm9yIGl0ZXJhdGluZyBpbiBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBUaGUgSmF2YXNjcmlwdCBlbGVtZW50IChvciBOb2RlTGlzdCBvciBIVE1MQ29sbGVjdGlvbilcbiAqIEByZXR1cm4ge2FycmF5fVxuICovXG5mdW5jdGlvbiBwYXJzZUVsZW1lbnQoZWxlbWVudCkge1xuICAgIGlmIChOb2RlTGlzdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlbGVtZW50KSB8fCBIVE1MQ29sbGVjdGlvbi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIFtlbGVtZW50XTtcbn1cblxuLyoqXG4gKiBLaWxscyBsb2FkaW5nIGFuaW1hdGlvbiBmb3IgZ2l2ZW4gZWxlbWVudC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0gVGhlIEphdmFzY3JpcHQgZWxlbWVudCAob3IgTm9kZUxpc3Qgb3IgSFRNTENvbGxlY3Rpb24pXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIENhbGxiYWNrIHRvIHJ1biBhZnRlciBsb2FkaW5nIGZhZGUgb3V0XG4gKi9cbmNvbnN0IHN0b3AgPSAoZWxlbWVudCwgY2FsbGJhY2spID0+IHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdG9ycyA9ICcuc2QtbG9hZGluZy1ib3gtd3JhcHBlciwgLnNkLWxvYWRpbmctcGlsbC13cmFwcGVyLCAuc2QtYnV0dG9uLWxvYWRpbmctd3JhcHBlcic7XG5cbiAgICBjb25zdCBlbGVtZW50cyA9IHBhcnNlRWxlbWVudChlbGVtZW50KTtcblxuICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXJzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ycyk7XG4gICAgICAgIHdyYXBwZXJzLmZvckVhY2god3JhcHBlciA9PiB7XG4gICAgICAgICAgICBsZXQgb3BhY2l0eSA9IDE7XG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5IC09IDUwIC8gMTUwO1xuICAgICAgICAgICAgICAgIGlmIChvcGFjaXR5IDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3NkLWxvYWRpbmdzdGF0ZScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdyYXBwZXIuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7XG4gICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBBcHBseSBhbGwgbmVjZXNzYXJ5IGJ1dHRvbi1yZWxhdGVkIGxvYWRpbmcgbG9naWMgdG8gYSBzcGVjaWZpYyBKYXZhc2NyaXB0IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBidXR0b24gLSBBIHNpbmdsZSBKYXZhc2NyaXB0IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdGV4dF0gLSBUaGUgdGV4dCB0byByZW5kZXIgZHVyaW5nIGxvYWRpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3R5bGVdIC0gVGhlIG1vZGlmaWVkIGxvYWRpbmcgc3R5bGUgc3RyaW5nXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBhdHRhY2hUb0J1dHRvbihidXR0b24sIHRleHQsIHN0eWxlKSB7XG4gICAgY29uc3QgZGlzcGxheSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGJ1dHRvbikuZGlzcGxheTtcbiAgICBpZiAoZGlzcGxheSA9PT0gJ2lubGluZS1ibG9jaycgfHwgZGlzcGxheSA9PT0gJ2lubGluZS1mbGV4Jykge1xuICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnbW9kLWxvYWRpbmctYnV0dG9uLWlubGluZScpO1xuICAgIH1cbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoYG1vZC1sb2FkaW5nLSR7c3R5bGV9YCk7XG4gICAgfVxuICAgIGlmICghYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoJy5zZC1idXR0b24tbG9hZGluZycpKSB7XG4gICAgICAgIGNvbnN0IHNkTG9hZGluZ0J1dHRvbldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgc2RMb2FkaW5nQnV0dG9uV3JhcHBlci5jbGFzc0xpc3QuYWRkKCdzZC1idXR0b24tbG9hZGluZy13cmFwcGVyJyk7XG4gICAgICAgIGNvbnN0IHNkQm94TG9hZGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZEJveExvYWRpbmcuY2xhc3NMaXN0LmFkZCgnc2QtYnV0dG9uLWxvYWRpbmcnKTtcbiAgICAgICAgc2RMb2FkaW5nQnV0dG9uV3JhcHBlci5hcHBlbmRDaGlsZChzZEJveExvYWRpbmcpO1xuXG4gICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGVzY2FwZSh0ZXh0KSk7XG4gICAgICAgICAgICBidXR0b24ucmVwbGFjZUNoaWxkKHRleHROb2RlLCBidXR0b24ubGFzdENoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1dHRvbi5pbnNlcnRCZWZvcmUoc2RMb2FkaW5nQnV0dG9uV3JhcHBlciwgYnV0dG9uLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnc2QtbG9hZGluZ3N0YXRlJyk7XG59XG5cbi8qKlxuICogQnV0dG9uIGxvYWRpbmcgaW5pdGlhbGl6YXRpb24uXG4gKiBAcGFyYW0ge09iamVjdH0gZWwgLSBUaGUgSmF2YXNjcmlwdCBlbGVtZW50IChvciBOb2RlTGlzdCBvciBIVE1MQ29sbGVjdGlvbilcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdGV4dF0gLSBUaGUgdGV4dCB0byByZW5kZXIgZHVyaW5nIGxvYWRpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3R5bGVdIC0gVGhlIG1vZGlmaWVkIGxvYWRpbmcgc3R5bGUgc3RyaW5nXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gVGhlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5jb25zdCBidXR0b24gPSAoZWwsIHRleHQsIHN0eWxlLCBvcHRzKSA9PiB7XG4gICAgaWYgKCFlbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudHMgPSBwYXJzZUVsZW1lbnQoZWwpO1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdzZC1sb2FkaW5nLWJ1dHRvbicpO1xuXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0cykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cy5jaGVjayA9PT0gJ2Z1bmN0aW9uJyAmJiAob3B0cy5jaGVjaygpID09PSBmYWxzZSB8fCBvcHRzLmNoZWNrKCkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaFRvQnV0dG9uKGVsZW1lbnQsIHRleHQsIHN0eWxlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhdHRhY2hUb0J1dHRvbihlbGVtZW50LCB0ZXh0LCBzdHlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBCb3ggbG9hZGluZyBpbml0aWFsaXphdGlvbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBlbCAtIFRoZSBKYXZhc2NyaXB0IGVsZW1lbnQgKG9yIE5vZGVMaXN0IG9yIEhUTUxDb2xsZWN0aW9uKVxuICogQHBhcmFtIHtzdHJpbmd9IFt0ZXh0XSAtIFRoZSB0ZXh0IHRvIHJlbmRlciBkdXJpbmcgbG9hZGluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHlsZV0gLSBUaGUgbW9kaWZpZWQgbG9hZGluZyBzdHlsZSBzdHJpbmdcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGJveCA9IChlbCwgdGV4dCwgc3R5bGUpID0+IHtcbiAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGV4dCA9IHRleHQgfHwgJyc7XG5cbiAgICBjb25zdCBlbGVtZW50cyA9IHBhcnNlRWxlbWVudChlbCk7XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3NkLWxvYWRpbmctYm94JywgJ3NkLWxvYWRpbmdzdGF0ZScpO1xuICAgICAgICBpZiAoIWVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNkLWxvYWRpbmctYm94LXdyYXBwZXInKSkge1xuICAgICAgICAgICAgY29uc3Qgc2RMb2FkaW5nQm94V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc2RMb2FkaW5nQm94V3JhcHBlci5jbGFzc0xpc3QuYWRkKCdzZC1sb2FkaW5nLWJveC13cmFwcGVyJyk7XG4gICAgICAgICAgICBjb25zdCBzZEJveExvYWRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHNkQm94TG9hZGluZy5jbGFzc0xpc3QuYWRkKCdzZC1ib3gtbG9hZGluZycpO1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgICAgICAgICBzZExvYWRpbmdCb3hXcmFwcGVyLmFwcGVuZENoaWxkKHNkQm94TG9hZGluZyk7XG4gICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKHRleHROb2RlKTtcbiAgICAgICAgICAgIHNkTG9hZGluZ0JveFdyYXBwZXIuYXBwZW5kQ2hpbGQoc3Bhbik7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbW9kLWxvYWRpbmctJHtzdHlsZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHNkTG9hZGluZ0JveFdyYXBwZXIsIGVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogUGlsbCBsb2FkaW5nIGluaXRpYWxpemF0aW9uLlxuICogQHBhcmFtIHtPYmplY3R9IGVsIC0gVGhlIEphdmFzY3JpcHQgZWxlbWVudCAob3IgTm9kZUxpc3Qgb3IgSFRNTENvbGxlY3Rpb24pXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIHJlbmRlciBkdXJpbmcgbG9hZGluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHlsZV0gLSBUaGUgbW9kaWZpZWQgbG9hZGluZyBzdHlsZSBzdHJpbmdcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmNvbnN0IHBpbGwgPSAoZWwsIHRleHQsIHN0eWxlKSA9PiB7XG4gICAgaWYgKCFlbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHRleHQgcGFzc2VkIGluJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudHMgPSBwYXJzZUVsZW1lbnQoZWwpO1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdzZC1sb2FkaW5nLXBpbGwnLCAnc2QtbG9hZGluZ3N0YXRlJyk7XG4gICAgICAgIGlmICghZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2QtbG9hZGluZy1waWxsLXdyYXBwZXInKSkge1xuICAgICAgICAgICAgY29uc3Qgc2RMb2FkaW5nUGlsbFdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHNkTG9hZGluZ1BpbGxXcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ3NkLWxvYWRpbmctcGlsbC13cmFwcGVyJyk7XG4gICAgICAgICAgICBjb25zdCBzZFBpbGxTaGFwZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc2RQaWxsU2hhcGUuY2xhc3NMaXN0LmFkZCgnc2QtbG9hZGluZy1waWxsLXNoYXBlJyk7XG4gICAgICAgICAgICBjb25zdCBzZFBpbGxMb2FkaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzZFBpbGxMb2FkaW5nLmNsYXNzTGlzdC5hZGQoJ3NkLXBpbGwtbG9hZGluZycpO1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZXNjYXBlKHRleHQpKTtcbiAgICAgICAgICAgIHNkUGlsbFNoYXBlLmFwcGVuZENoaWxkKHNkUGlsbExvYWRpbmcpO1xuICAgICAgICAgICAgc2RQaWxsU2hhcGUuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKHRleHROb2RlKTtcbiAgICAgICAgICAgIHNkTG9hZGluZ1BpbGxXcmFwcGVyLmFwcGVuZENoaWxkKHNkUGlsbFNoYXBlKTtcblxuICAgICAgICAgICAgaWYgKHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGBtb2QtbG9hZGluZy0ke3N0eWxlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUoc2RMb2FkaW5nUGlsbFdyYXBwZXIsIGVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCB7IHN0b3AsIGJ1dHRvbiwgYm94LCBwaWxsIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FB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