UNPKG

storm-toggler

Version:
184 lines (153 loc) 20.4 kB
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ (function (global){ 'use strict'; var _stormToggler = require('./libs/storm-toggler'); var _stormToggler2 = _interopRequireDefault(_stormToggler); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var onDOMContentLoadedTasks = [function () { _stormToggler2.default.init('.js-toggle'); _stormToggler2.default.init('.js-toggle__local', { local: true, delay: 0, callback: function callback() { var _this = this; if (this.open) { global.Togglers.forEach(function (toggler) { if (toggler !== _this && !!toggler.open && toggler.DOMElement !== _this.targetElement) { toggler.toggle(); } }); } } }); }]; global.Togglers = {}; if ('addEventListener' in window) window.addEventListener('DOMContentLoaded', function () { onDOMContentLoadedTasks.forEach(function (fn) { return fn(); }); }); }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"./libs/storm-toggler":2}],2:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); /** * @name storm-toggler: Class and ARIA toggle UI state manipulation * @version 0.11.0: Wed, 15 Mar 2017 13:46:42 GMT * @author mjbp * @license MIT */ var defaults = { delay: 0, startOpen: false, local: false, prehook: false, callback: false, focus: true, trapTab: false }; var StormToggler = { init: function init() { var _this = this; this.targetElement = document.getElementById(this.targetId); this.classTarget = !this.settings.local ? document.documentElement : this.targetElement.parentNode; this.siblingBtns = [].slice.call(document.querySelectorAll('[href="#' + this.targetId + '"], [data-target="#' + this.targetId + '"]')); if (this.settings.focus) this.focusableChildren = this.getFocusableChildren(); if (this.settings.trapTab) this.boundKeyListener = this.keyListener.bind(this); this.statusClass = !this.settings.local ? 'on--' + this.targetId : 'active'; this.animatingClass = !this.settings.local ? 'animating--' + this.targetId : 'animating'; this.siblingBtns.forEach(function (btn) { btn.setAttribute('role', 'button'); btn.setAttribute('aria-controls', _this.targetId); btn.setAttribute('aria-expanded', 'false'); }); this.btn.addEventListener('click', function (e) { _this.toggle(e); }); this.settings.startOpen && this.toggle(); return this; }, getFocusableChildren: function getFocusableChildren() { var focusableElements = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex="-1"])']; return [].slice.call(this.targetElement.querySelectorAll(focusableElements.join(','))); }, toggleAttributes: function toggleAttributes() { this.isOpen = !this.isOpen; this.siblingBtns.forEach(function (sibling) { sibling.setAttribute('aria-expanded', sibling.getAttribute('aria-expanded') === 'true' ? 'false' : 'true'); }); }, toggleDocumentState: function toggleDocumentState() { this.classTarget.classList.remove(this.animatingClass); this.classTarget.classList.toggle(this.statusClass); }, manageFocus: function manageFocus() { var _this2 = this; if (!this.isOpen) { this.lastFocused = document.activeElement; this.focusableChildren.length && window.setTimeout(function () { return _this2.focusableChildren[0].focus(); }, this.settings.delay); this.settings.trapTab && document.addEventListener('keydown', this.boundKeyListener); } else { this.settings.trapTab && document.removeEventListener('keydown', this.boundKeyListener); this.focusableChildren.length && window.setTimeout(function () { _this2.lastFocused.focus(); _this2.lastFocused = false; }, this.settings.delay); } }, trapTab: function trapTab(e) { var focusedIndex = this.focusableChildren.indexOf(document.activeElement); if (e.shiftKey && focusedIndex === 0) { e.preventDefault(); this.focusableChildren[this.focusableChildren.length - 1].focus(); } else { if (!e.shiftKey && focusedIndex === this.focusableChildren.length - 1) { e.preventDefault(); this.focusableChildren[0].focus(); } } }, keyListener: function keyListener(e) { if (this.isOpen && e.keyCode === 27) { e.preventDefault(); this.toggle(); } if (this.isOpen && e.keyCode === 9) { this.trapTab(e); } }, toggle: function toggle(e) { var _this3 = this; var delay = this.classTarget.classList.contains(this.statusClass) ? this.settings.delay : 0; !!this.settings.prehook && typeof this.settings.prehook === 'function' && this.settings.prehook.call(this); if (e) { e.preventDefault(); e.stopPropagation(); } this.classTarget.classList.add(this.animatingClass); window.setTimeout(function () { !!_this3.settings.focus && _this3.focusableChildren && _this3.manageFocus(); _this3.toggleAttributes(); _this3.toggleDocumentState(); !!_this3.settings.callback && typeof _this3.settings.callback === 'function' && _this3.settings.callback.call(_this3); }, delay); } }; var init = function init(sel, opts) { var els = [].slice.call(document.querySelectorAll(sel)); if (!els.length) throw new Error('Toggler cannot be initialised, no augmentable elements found'); return els.map(function (el) { return Object.assign(Object.create(StormToggler), { btn: el, targetId: (el.getAttribute('href') || el.getAttribute('data-target')).substr(1), settings: Object.assign({}, defaults, opts) }).init(); }); }; exports.default = { init: init }; },{}]},{},[1]) //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJleGFtcGxlL3NyYy9hcHAuanMiLCJleGFtcGxlL3NyYy9saWJzL3N0b3JtLXRvZ2dsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7QUNBQTs7Ozs7O0FBRUEsSUFBTSwwQkFBMEIsQ0FBQyxZQUFNO0FBQ3RDLHdCQUFRLElBQVIsQ0FBYSxZQUFiO0FBQ0Esd0JBQVEsSUFBUixDQUFhLG1CQUFiLEVBQWtDO0FBQ2pDLFNBQU8sSUFEMEI7QUFFakMsU0FBTyxDQUYwQjtBQUdqQyxZQUFVLG9CQUFXO0FBQUE7O0FBQ3BCLE9BQUcsS0FBSyxJQUFSLEVBQWE7QUFDWixXQUFPLFFBQVAsQ0FBZ0IsT0FBaEIsQ0FBd0IsbUJBQVc7QUFDbEMsU0FBRyxxQkFBb0IsQ0FBQyxDQUFDLFFBQVEsSUFBOUIsSUFBc0MsUUFBUSxVQUFSLEtBQXVCLE1BQUssYUFBckUsRUFBbUY7QUFDbEYsY0FBUSxNQUFSO0FBQ0E7QUFDRCxLQUpEO0FBS0E7QUFDRDtBQVhnQyxFQUFsQztBQWFBLENBZitCLENBQWhDOztBQWlCQSxPQUFPLFFBQVAsR0FBa0IsRUFBbEI7O0FBRUEsSUFBRyxzQkFBc0IsTUFBekIsRUFBaUMsT0FBTyxnQkFBUCxDQUF3QixrQkFBeEIsRUFBNEMsWUFBTTtBQUFFLHlCQUF3QixPQUF4QixDQUFnQyxVQUFDLEVBQUQ7QUFBQSxTQUFRLElBQVI7QUFBQSxFQUFoQztBQUFnRCxDQUFwRzs7Ozs7Ozs7OztBQ3JCakM7Ozs7OztBQU1BLElBQU0sV0FBVztBQUNoQixRQUFPLENBRFM7QUFFaEIsWUFBVyxLQUZLO0FBR2hCLFFBQU8sS0FIUztBQUloQixVQUFTLEtBSk87QUFLaEIsV0FBVSxLQUxNO0FBTWhCLFFBQU8sSUFOUztBQU9oQixVQUFTO0FBUE8sQ0FBakI7O0FBVUEsSUFBTSxlQUFlO0FBQ3BCLEtBRG9CLGtCQUNiO0FBQUE7O0FBQ04sT0FBSyxhQUFMLEdBQXFC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SSxLQUFKLENBQVUsOERBQVYsQ0FBTjs7QUFFaEIsUUFBTyxJQUFJLEdBQUosQ0FBUSxVQUFDLEVBQUQsRUFBUTtBQUN0QixTQUFPLE9BQU8sTUFBUCxDQUFjLE9BQU8sTUFBUCxDQUFjLFlBQWQsQ0FBZCxFQUEyQztBQUNqRCxRQUFLLEVBRDRDO0FBRWpELGFBQVUsQ0FBQyxHQUFHLFlBQUgsQ0FBZ0IsTUFBaEIsS0FBMEIsR0FBRyxZQUFILENBQWdCLGFBQWhCLENBQTNCLEVBQTJELE1BQTNELENBQWtFLENBQWxFLENBRnVDO0FBR2pELGFBQVUsT0FBTyxNQUFQLENBQWMsRUFBZCxFQUFrQixRQUFsQixFQUE0QixJQUE1QjtBQUh1QyxHQUEzQyxFQUlKLElBSkksRUFBUDtBQUtBLEVBTk0sQ0FBUDtBQU9BLENBWkQ7O2tCQWNlLEVBQUUsVUFBRixFIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsImltcG9ydCBUb2dnbGVyIGZyb20gJy4vbGlicy9zdG9ybS10b2dnbGVyJztcblxuY29uc3Qgb25ET01Db250ZW50TG9hZGVkVGFza3MgPSBbKCkgPT4ge1xuXHRUb2dnbGVyLmluaXQoJy5qcy10b2dnbGUnKTtcblx0VG9nZ2xlci5pbml0KCcuanMtdG9nZ2xlX19sb2NhbCcsIHtcblx0XHRsb2NhbDogdHJ1ZSxcblx0XHRkZWxheTogMCxcblx0XHRjYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZih0aGlzLm9wZW4pe1xuXHRcdFx0XHRnbG9iYWwuVG9nZ2xlcnMuZm9yRWFjaCh0b2dnbGVyID0+IHtcblx0XHRcdFx0XHRpZih0b2dnbGVyICE9PSB0aGlzICYmICEhdG9nZ2xlci5vcGVuICYmIHRvZ2dsZXIuRE9NRWxlbWVudCAhPT0gdGhpcy50YXJnZXRFbGVtZW50KXtcblx0XHRcdFx0XHRcdHRvZ2dsZXIudG9nZ2xlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufV07XG5cbmdsb2JhbC5Ub2dnbGVycyA9IHt9O1xuICAgIFxuaWYoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHdpbmRvdykgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7IG9uRE9NQ29udGVudExvYWRlZFRhc2tzLmZvckVhY2goKGZuKSA9PiBmbigpKTsgfSk7XG4iLCIvKipcbiAqIEBuYW1lIHN0b3JtLXRvZ2dsZXI6IENsYXNzIGFuZCBBUklBIHRvZ2dsZSBVSSBzdGF0ZSBtYW5pcHVsYXRpb25cbiAqIEB2ZXJzaW9uIDAuMTEuMDogV2VkLCAxNSBNYXIgMjAxNyAxMzo0Njo0MiBHTVRcbiAqIEBhdXRob3IgbWpicFxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbmNvbnN0IGRlZmF1bHRzID0ge1xuXHRkZWxheTogMCxcblx0c3RhcnRPcGVuOiBmYWxzZSxcblx0bG9jYWw6IGZhbHNlLFxuXHRwcmVob29rOiBmYWxzZSxcblx0Y2FsbGJhY2s6IGZhbHNlLFxuXHRmb2N1czogdHJ1ZSxcblx0dHJhcFRhYjogZmFsc2Vcbn07XG5cbmNvbnN0IFN0b3JtVG9nZ2xlciA9IHtcblx0aW5pdCgpIHtcblx0XHR0aGlzLnRhcmdldEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnRhcmdldElkKTtcblx0XHR0aGlzLmNsYXNzVGFyZ2V0ID0gKCF0aGlzLnNldHRpbmdzLmxvY2FsKSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IHRoaXMudGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdHRoaXMuc2libGluZ0J0bnMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tocmVmPVwiIycgKyB0aGlzLnRhcmdldElkICsgJ1wiXSwgW2RhdGEtdGFyZ2V0PVwiIycgKyB0aGlzLnRhcmdldElkICsgJ1wiXScpKTtcblx0XHRpZih0aGlzLnNldHRpbmdzLmZvY3VzKSB0aGlzLmZvY3VzYWJsZUNoaWxkcmVuID0gdGhpcy5nZXRGb2N1c2FibGVDaGlsZHJlbigpO1xuXHRcdGlmKHRoaXMuc2V0dGluZ3MudHJhcFRhYikgdGhpcy5ib3VuZEtleUxpc3RlbmVyID0gdGhpcy5rZXlMaXN0ZW5lci5iaW5kKHRoaXMpO1xuXG5cdFx0dGhpcy5zdGF0dXNDbGFzcyA9ICF0aGlzLnNldHRpbmdzLmxvY2FsID8gYG9uLS0ke3RoaXMudGFyZ2V0SWR9YCA6ICdhY3RpdmUnO1xuXHRcdHRoaXMuYW5pbWF0aW5nQ2xhc3MgPSAhdGhpcy5zZXR0aW5ncy5sb2NhbCA/IGBhbmltYXRpbmctLSR7dGhpcy50YXJnZXRJZH1gIDogJ2FuaW1hdGluZyc7XG5cblx0XHR0aGlzLnNpYmxpbmdCdG5zLmZvckVhY2goYnRuID0+IHtcblx0XHRcdGJ0bi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCdidXR0b24nKTtcblx0XHRcdGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnLCB0aGlzLnRhcmdldElkKTtcblx0XHRcdGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7IHRoaXMudG9nZ2xlKGUpOyB9KTtcblx0XHR0aGlzLnNldHRpbmdzLnN0YXJ0T3BlbiAmJiB0aGlzLnRvZ2dsZSgpO1xuXHRcdFxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRnZXRGb2N1c2FibGVDaGlsZHJlbigpIHtcblx0XHRjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IFsnYVtocmVmXScsICdhcmVhW2hyZWZdJywgJ2lucHV0Om5vdChbZGlzYWJsZWRdKScsICdzZWxlY3Q6bm90KFtkaXNhYmxlZF0pJywgJ3RleHRhcmVhOm5vdChbZGlzYWJsZWRdKScsICdidXR0b246bm90KFtkaXNhYmxlZF0pJywgJ2lmcmFtZScsICdvYmplY3QnLCAnZW1iZWQnLCAnW2NvbnRlbnRlZGl0YWJsZV0nLCAnW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJ107XG5cblx0XHRyZXR1cm4gW10uc2xpY2UuY2FsbCh0aGlzLnRhcmdldEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChmb2N1c2FibGVFbGVtZW50cy5qb2luKCcsJykpKTtcblx0fSxcblx0dG9nZ2xlQXR0cmlidXRlczogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3Blbjtcblx0XHR0aGlzLnNpYmxpbmdCdG5zLmZvckVhY2goc2libGluZyA9PiB7XG5cdFx0XHRzaWJsaW5nLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHNpYmxpbmcuZ2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJykgPT09ICd0cnVlJyA/ICdmYWxzZScgOiAndHJ1ZScpO1xuXHRcdH0pO1xuXHR9LFxuXHR0b2dnbGVEb2N1bWVudFN0YXRlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuY2xhc3NUYXJnZXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmFuaW1hdGluZ0NsYXNzKTtcblx0XHR0aGlzLmNsYXNzVGFyZ2V0LmNsYXNzTGlzdC50b2dnbGUodGhpcy5zdGF0dXNDbGFzcyk7XG5cdH0sXG5cdG1hbmFnZUZvY3VzOiBmdW5jdGlvbigpe1xuXHRcdGlmKCF0aGlzLmlzT3Blbil7XG5cdFx0XHR0aGlzLmxhc3RGb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0XHRcdHRoaXMuZm9jdXNhYmxlQ2hpbGRyZW4ubGVuZ3RoICYmIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXNhYmxlQ2hpbGRyZW5bMF0uZm9jdXMoKSwgdGhpcy5zZXR0aW5ncy5kZWxheSk7XG5cdFx0XHR0aGlzLnNldHRpbmdzLnRyYXBUYWIgJiYgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuYm91bmRLZXlMaXN0ZW5lcik7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy5zZXR0aW5ncy50cmFwVGFiICYmIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmJvdW5kS2V5TGlzdGVuZXIpO1xuXHRcdFx0dGhpcy5mb2N1c2FibGVDaGlsZHJlbi5sZW5ndGggJiYgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmxhc3RGb2N1c2VkLmZvY3VzKCk7XG5cdFx0XHRcdHRoaXMubGFzdEZvY3VzZWQgPSBmYWxzZTtcblx0XHRcdH0sIHRoaXMuc2V0dGluZ3MuZGVsYXkpO1xuXHRcdH1cblx0fSxcblx0dHJhcFRhYjogZnVuY3Rpb24oZSl7XG5cdFx0bGV0IGZvY3VzZWRJbmRleCA9IHRoaXMuZm9jdXNhYmxlQ2hpbGRyZW4uaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcblx0XHRpZihlLnNoaWZ0S2V5ICYmIGZvY3VzZWRJbmRleCA9PT0gMCkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5mb2N1c2FibGVDaGlsZHJlblt0aGlzLmZvY3VzYWJsZUNoaWxkcmVuLmxlbmd0aCAtIDFdLmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKCFlLnNoaWZ0S2V5ICYmIGZvY3VzZWRJbmRleCA9PT0gdGhpcy5mb2N1c2FibGVDaGlsZHJlbi5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0dGhpcy5mb2N1c2FibGVDaGlsZHJlblswXS5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0a2V5TGlzdGVuZXIoZSl7XG5cdFx0aWYgKHRoaXMuaXNPcGVuICYmIGUua2V5Q29kZSA9PT0gMjcpIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMudG9nZ2xlKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmlzT3BlbiAmJiBlLmtleUNvZGUgPT09IDkpIHtcblx0XHRcdHRoaXMudHJhcFRhYihlKTtcblx0XHR9XG5cdH0sXG5cdHRvZ2dsZTogZnVuY3Rpb24oZSl7XG5cdFx0bGV0IGRlbGF5ID0gdGhpcy5jbGFzc1RhcmdldC5jbGFzc0xpc3QuY29udGFpbnModGhpcy5zdGF0dXNDbGFzcykgPyAgdGhpcy5zZXR0aW5ncy5kZWxheSA6IDA7XG5cblx0XHQoISF0aGlzLnNldHRpbmdzLnByZWhvb2sgJiYgdHlwZW9mIHRoaXMuc2V0dGluZ3MucHJlaG9vayA9PT0gJ2Z1bmN0aW9uJykgJiYgdGhpcy5zZXR0aW5ncy5wcmVob29rLmNhbGwodGhpcyk7XG5cdFx0XG5cdFx0aWYoZSl7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0XHRcblx0XHR0aGlzLmNsYXNzVGFyZ2V0LmNsYXNzTGlzdC5hZGQodGhpcy5hbmltYXRpbmdDbGFzcyk7XG5cdFx0XG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0KCEhdGhpcy5zZXR0aW5ncy5mb2N1cyAmJiB0aGlzLmZvY3VzYWJsZUNoaWxkcmVuKSAmJiB0aGlzLm1hbmFnZUZvY3VzKCk7XG5cdFx0XHR0aGlzLnRvZ2dsZUF0dHJpYnV0ZXMoKTtcblx0XHRcdHRoaXMudG9nZ2xlRG9jdW1lbnRTdGF0ZSgpO1xuXHRcdFx0KCEhdGhpcy5zZXR0aW5ncy5jYWxsYmFjayAmJiB0eXBlb2YgdGhpcy5zZXR0aW5ncy5jYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgJiYgdGhpcy5zZXR0aW5ncy5jYWxsYmFjay5jYWxsKHRoaXMpO1xuXHRcdH0sIGRlbGF5KTtcblx0fVxufTtcblxuY29uc3QgaW5pdCA9IChzZWwsIG9wdHMpID0+IHtcblx0bGV0IGVscyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWwpKTtcblx0XG5cdGlmKCFlbHMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ1RvZ2dsZXIgY2Fubm90IGJlIGluaXRpYWxpc2VkLCBubyBhdWdtZW50YWJsZSBlbGVtZW50cyBmb3VuZCcpO1xuXG5cdHJldHVybiBlbHMubWFwKChlbCkgPT4ge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoU3Rvcm1Ub2dnbGVyKSwge1xuXHRcdFx0YnRuOiBlbCxcblx0XHRcdHRhcmdldElkOiAoZWwuZ2V0QXR0cmlidXRlKCdocmVmJyl8fCBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0JykpLnN1YnN0cigxKSxcblx0XHRcdHNldHRpbmdzOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgb3B0cylcblx0XHR9KS5pbml0KCk7XG5cdH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgeyBpbml0IH07Il19