From 1f7c665733a7f3ac784537adad6875a171b61446 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Sun, 19 Feb 2017 18:44:17 +0000 Subject: Updated droplab version to webpack version --- .eslintignore | 1 + app/assets/javascripts/droplab/droplab.js | 1394 ++++++++++++-------- app/assets/javascripts/droplab/droplab_ajax.js | 103 -- .../javascripts/droplab/droplab_ajax_filter.js | 164 --- app/assets/javascripts/droplab/droplab_filter.js | 74 -- app/assets/javascripts/droplab/plugins/ajax.js | 159 +++ .../javascripts/droplab/plugins/ajax_filter.js | 216 +++ app/assets/javascripts/droplab/plugins/filter.js | 172 +++ .../javascripts/droplab/plugins/input_setter.js | 129 ++ .../javascripts/filtered_search/dropdown_hint.js | 1 - .../filtered_search/dropdown_non_user.js | 1 + .../filtered_search/filtered_search_dropdown.js | 2 +- .../filtered_search/filtered_search_manager.js | 2 +- app/assets/javascripts/main.js | 6 +- app/assets/stylesheets/framework/filters.scss | 2 +- app/views/shared/issuable/_search_bar.html.haml | 2 +- .../issues/filtered_search/dropdown_hint_spec.rb | 14 +- .../issues/filtered_search/dropdown_label_spec.rb | 31 +- .../issues/filtered_search/search_bar_spec.rb | 18 +- 19 files changed, 1533 insertions(+), 958 deletions(-) delete mode 100644 app/assets/javascripts/droplab/droplab_ajax.js delete mode 100644 app/assets/javascripts/droplab/droplab_ajax_filter.js delete mode 100644 app/assets/javascripts/droplab/droplab_filter.js create mode 100644 app/assets/javascripts/droplab/plugins/ajax.js create mode 100644 app/assets/javascripts/droplab/plugins/ajax_filter.js create mode 100644 app/assets/javascripts/droplab/plugins/filter.js create mode 100644 app/assets/javascripts/droplab/plugins/input_setter.js diff --git a/.eslintignore b/.eslintignore index c742b08c005..fe0766d8a44 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,5 +5,6 @@ /public/ /tmp/ /vendor/ +/app/assets/javascripts/droplab karma.config.js webpack.config.js diff --git a/app/assets/javascripts/droplab/droplab.js b/app/assets/javascripts/droplab/droplab.js index 8b14191395b..b5d6a43b83f 100644 --- a/app/assets/javascripts/droplab/droplab.js +++ b/app/assets/javascripts/droplab/droplab.js @@ -1,741 +1,983 @@ -/* eslint-disable */ -// Determine where to place this -if (typeof Object.assign != 'function') { - Object.assign = function (target, varArgs) { // .length of function is 2 - 'use strict'; - if (target == null) { // TypeError if undefined or null - throw new TypeError('Cannot convert undefined or null to object'); - } +/******/ (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; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // 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 = 9); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var DATA_TRIGGER = 'data-dropdown-trigger'; +var DATA_DROPDOWN = 'data-dropdown'; +var SELECTED_CLASS = 'droplab-item-selected'; +var ACTIVE_CLASS = 'droplab-item-active'; + +var constants = { + DATA_TRIGGER: DATA_TRIGGER, + DATA_DROPDOWN: DATA_DROPDOWN, + SELECTED_CLASS: SELECTED_CLASS, + ACTIVE_CLASS: ACTIVE_CLASS +}; + +exports.default = constants; - var to = Object(target); +/***/ }), +/* 1 */ +/***/ (function(module, exports) { - for (var index = 1; index < arguments.length; index++) { - var nextSource = arguments[index]; +// Polyfill for creating CustomEvents on IE9/10/11 + +// code pulled from: +// https://github.com/d4tocchini/customevent-polyfill +// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill + +try { + var ce = new window.CustomEvent('test'); + ce.preventDefault(); + if (ce.defaultPrevented !== true) { + // IE has problems with .preventDefault() on custom events + // http://stackoverflow.com/questions/23349191 + throw new Error('Could not prevent default'); + } +} catch(e) { + var CustomEvent = function(event, params) { + var evt, origPrevent; + params = params || { + bubbles: false, + cancelable: false, + detail: undefined + }; - if (nextSource != null) { // Skip over if undefined or null - for (var nextKey in nextSource) { - // Avoid bugs when hasOwnProperty is shadowed - if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { - to[nextKey] = nextSource[nextKey]; + evt = document.createEvent("CustomEvent"); + evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); + origPrevent = evt.preventDefault; + evt.preventDefault = function () { + origPrevent.call(this); + try { + Object.defineProperty(this, 'defaultPrevented', { + get: function () { + return true; } - } + }); + } catch(e) { + this.defaultPrevented = true; } - } - return to; + }; + return evt; }; + + CustomEvent.prototype = window.Event.prototype; + window.CustomEvent = CustomEvent; // expose definition to window } -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.droplab = f()}})(function(){var define,module,exports;return (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 0) { + if (!listItems[list.currentIndex - 1]) { + list.currentIndex = list.currentIndex - 1; + } + + if (listItems[list.currentIndex - 1]) { + var el = listItems[list.currentIndex - 1]; + var filterDropdownEl = el.closest('.filter-dropdown'); + el.classList.add(_constants2.default.ACTIVE_CLASS); + + if (filterDropdownEl) { + var filterDropdownBottom = filterDropdownEl.offsetHeight; + var elOffsetTop = el.offsetTop - 30; + + if (elOffsetTop > filterDropdownBottom) { + filterDropdownEl.scrollTop = elOffsetTop - filterDropdownBottom; + } + } + } + } + }; + + var mousedown = function mousedown(e) { + var list = e.detail.hook.list; + removeHighlight(list); + list.show(); + list.currentIndex = 0; + isUpArrow = false; + isDownArrow = false; + }; + var selectItem = function selectItem(list) { + var listItems = removeHighlight(list); + var currentItem = listItems[list.currentIndex - 1]; + var listEvent = new CustomEvent('click.dl', { + detail: { + list: list, + selected: currentItem, + data: currentItem.dataset + } + }); + list.list.dispatchEvent(listEvent); + list.hide(); + }; + + var keydown = function keydown(e) { + var typedOn = e.target; + var list = e.detail.hook.list; + var currentIndex = list.currentIndex; + isUpArrow = false; + isDownArrow = false; + + if (e.detail.which) { + currentKey = e.detail.which; + if (currentKey === 13) { + selectItem(e.detail.hook.list); + return; + } + if (currentKey === 38) { + isUpArrow = true; + } + if (currentKey === 40) { + isDownArrow = true; + } + } else if (e.detail.key) { + currentKey = e.detail.key; + if (currentKey === 'Enter') { + selectItem(e.detail.hook.list); + return; + } + if (currentKey === 'ArrowUp') { + isUpArrow = true; + } + if (currentKey === 'ArrowDown') { + isDownArrow = true; + } + } + if (isUpArrow) { + currentIndex--; + } + if (isDownArrow) { + currentIndex++; + } + if (currentIndex < 0) { + currentIndex = 0; + } + list.currentIndex = currentIndex; + setMenuForArrows(e.detail.hook.list); + }; -var DropDown = function(list) { + document.addEventListener('mousedown.dl', mousedown); + document.addEventListener('keydown.dl', keydown); +}; + +var _constants = __webpack_require__(0); + +var _constants2 = _interopRequireDefault(_constants); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _Object$assign; + +__webpack_require__(1); + +var _utils = __webpack_require__(3); + +var _utils2 = _interopRequireDefault(_utils); + +var _constants = __webpack_require__(0); + +var _constants2 = _interopRequireDefault(_constants); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var DropDown = function DropDown(list) { this.currentIndex = 0; this.hidden = true; - this.list = list; + this.list = typeof list === 'string' ? document.querySelector(list) : list; this.items = []; + + this.eventWrapper = {}; + this.getItems(); this.initTemplateString(); this.addEvents(); + this.initialState = list.innerHTML; }; -Object.assign(DropDown.prototype, { - getItems: function() { +Object.assign(DropDown.prototype, (_Object$assign = { + getItems: function getItems() { this.items = [].slice.call(this.list.querySelectorAll('li')); return this.items; }, - initTemplateString: function() { + initTemplateString: function initTemplateString() { var items = this.items || this.getItems(); var templateString = ''; - if(items.length > 0) { - templateString = items[items.length - 1].outerHTML; - } + if (items.length > 0) templateString = items[items.length - 1].outerHTML; this.templateString = templateString; + return this.templateString; }, - clickEvent: function(e) { - // climb up the tree to find the LI - var selected = utils.closest(e.target, 'LI'); + clickEvent: function clickEvent(e) { + var selected = _utils2.default.closest(e.target, 'LI'); + if (!selected) return; - if(selected) { - e.preventDefault(); - this.hide(); - var listEvent = new CustomEvent('click.dl', { - detail: { - list: this, - selected: selected, - data: e.target.dataset, - }, - }); - this.list.dispatchEvent(listEvent); - } - }, + this.addSelectedClass(selected); - addEvents: function() { - this.clickWrapper = this.clickEvent.bind(this); - // event delegation. - this.list.addEventListener('click', this.clickWrapper); - }, - - toggle: function() { - if(this.hidden) { - this.show(); - } else { - this.hide(); - } - }, + e.preventDefault(); + this.hide(); - setData: function(data) { - this.data = data; - this.render(data); + var listEvent = new CustomEvent('click.dl', { + detail: { + list: this, + selected: selected, + data: e.target.dataset + } + }); + this.list.dispatchEvent(listEvent); }, - addData: function(data) { - this.data = (this.data || []).concat(data); - this.render(this.data); + addSelectedClass: function addSelectedClass(selected) { + this.removeSelectedClasses(); + selected.classList.add(_constants2.default.SELECTED_CLASS); }, - // call render manually on data; - render: function(data){ - // debugger - // empty the list first - var templateString = this.templateString; - var newChildren = []; - var toAppend; - - newChildren = (data ||[]).map(function(dat){ - var html = utils.t(templateString, dat); - var template = document.createElement('div'); - template.innerHTML = html; - - // Help set the image src template - var imageTags = template.querySelectorAll('img[data-src]'); - // debugger - for(var i = 0; i < imageTags.length; i++) { - var imageTag = imageTags[i]; - imageTag.src = imageTag.getAttribute('data-src'); - imageTag.removeAttribute('data-src'); - } + removeSelectedClasses: function removeSelectedClasses() { + var items = this.items || this.getItems(); - if(dat.hasOwnProperty('droplab_hidden') && dat.droplab_hidden){ - template.firstChild.style.display = 'none' - }else{ - template.firstChild.style.display = 'block'; - } - return template.firstChild.outerHTML; + items.forEach(function (item) { + item.classList.remove(_constants2.default.SELECTED_CLASS); }); - toAppend = this.list.querySelector('ul[data-dynamic]'); - if(toAppend) { - toAppend.innerHTML = newChildren.join(''); - } else { - this.list.innerHTML = newChildren.join(''); - } }, - show: function() { - if (this.hidden) { - // debugger - this.list.style.display = 'block'; - this.currentIndex = 0; - this.hidden = false; - } + addEvents: function addEvents() { + this.eventWrapper.clickEvent = this.clickEvent.bind(this); + this.list.addEventListener('click', this.eventWrapper.clickEvent); }, - hide: function() { - if (!this.hidden) { - // debugger - this.list.style.display = 'none'; - this.currentIndex = 0; - this.hidden = true; - } + toggle: function toggle() { + this.hidden ? this.show() : this.hide(); }, - destroy: function() { - this.hide(); - this.list.removeEventListener('click', this.clickWrapper); - } -}); - -module.exports = DropDown; - -},{"./custom_event_polyfill":2,"./utils":10}],4:[function(require,module,exports){ -require('./window')(function(w){ - module.exports = function(deps) { - deps = deps || {}; - var window = deps.window || w; - var document = deps.document || window.document; - var CustomEvent = deps.CustomEvent || require('./custom_event_polyfill'); - var HookButton = deps.HookButton || require('./hook_button'); - var HookInput = deps.HookInput || require('./hook_input'); - var utils = deps.utils || require('./utils'); - var DATA_TRIGGER = require('./constants').DATA_TRIGGER; - - var DropLab = function(hook){ - if (!(this instanceof DropLab)) return new DropLab(hook); - this.ready = false; - this.hooks = []; - this.queuedData = []; - this.config = {}; - this.loadWrapper; - if(typeof hook !== 'undefined'){ - this.addHook(hook); - } - }; - - - Object.assign(DropLab.prototype, { - load: function() { - this.loadWrapper(); - }, - - loadWrapper: function(){ - var dropdownTriggers = [].slice.apply(document.querySelectorAll('['+DATA_TRIGGER+']')); - this.addHooks(dropdownTriggers).init(); - }, + setData: function setData(data) { + this.data = data; + this.render(data); + }, - addData: function () { - var args = [].slice.apply(arguments); - this.applyArgs(args, '_addData'); - }, + addData: function addData(data) { + this.data = (this.data || []).concat(data); + this.render(this.data); + }, - setData: function() { - var args = [].slice.apply(arguments); - this.applyArgs(args, '_setData'); - }, + render: function render(data) { + var children = data ? data.map(this.renderChildren.bind(this)) : []; + var renderableList = this.list.querySelector('ul[data-dynamic]') || this.list; - destroy: function() { - for(var i = 0; i < this.hooks.length; i++) { - this.hooks[i].destroy(); - } - this.hooks = []; - this.removeEvents(); - }, + renderableList.innerHTML = children.join(''); + }, - applyArgs: function(args, methodName) { - if(this.ready) { - this[methodName].apply(this, args); - } else { - this.queuedData = this.queuedData || []; - this.queuedData.push(args); - } - }, + renderChildren: function renderChildren(data) { + var html = _utils2.default.t(this.templateString, data); + var template = document.createElement('div'); - _addData: function(trigger, data) { - this._processData(trigger, data, 'addData'); - }, + template.innerHTML = html; + this.setImagesSrc(template); + template.firstChild.style.display = data.droplab_hidden ? 'none' : 'block'; - _setData: function(trigger, data) { - this._processData(trigger, data, 'setData'); - }, + return template.firstChild.outerHTML; + }, - _processData: function(trigger, data, methodName) { - for(var i = 0; i < this.hooks.length; i++) { - var hook = this.hooks[i]; - if(hook.trigger.dataset.hasOwnProperty('id')) { - if(hook.trigger.dataset.id === trigger) { - hook.list[methodName](data); - } - } - } - }, + setImagesSrc: function setImagesSrc(template) { + var images = [].slice.call(template.querySelectorAll('img[data-src]')); - addEvents: function() { - var self = this; - this.windowClickedWrapper = function(e){ - var thisTag = e.target; - if(thisTag.tagName !== 'UL'){ - // climb up the tree to find the UL - thisTag = utils.closest(thisTag, 'UL'); - } - if(utils.isDropDownParts(thisTag)){ return } - if(utils.isDropDownParts(e.target)){ return } - for(var i = 0; i < self.hooks.length; i++) { - self.hooks[i].list.hide(); - } - }.bind(this); - document.addEventListener('click', this.windowClickedWrapper); - }, + images.forEach(function (image) { + image.src = image.getAttribute('data-src'); + image.removeAttribute('data-src'); + }); + }, - removeEvents: function(){ - w.removeEventListener('click', this.windowClickedWrapper); - w.removeEventListener('load', this.loadWrapper); - }, + show: function show() { + if (!this.hidden) return; + this.list.style.display = 'block'; + this.currentIndex = 0; + this.hidden = false; + }, - changeHookList: function(trigger, list, plugins, config) { - trigger = document.querySelector('[data-id="'+trigger+'"]'); - // list = document.querySelector(list); - this.hooks.every(function(hook, i) { - if(hook.trigger === trigger) { - hook.destroy(); - this.hooks.splice(i, 1); - this.addHook(trigger, list, plugins, config); - return false; - } - return true - }.bind(this)); - }, + hide: function hide() { + if (this.hidden) return; + this.list.style.display = 'none'; + this.currentIndex = 0; + this.hidden = true; + } - addHook: function(hook, list, plugins, config) { - if(!(hook instanceof HTMLElement) && typeof hook === 'string'){ - hook = document.querySelector(hook); - } - if(!list){ - list = document.querySelector(hook.dataset[utils.toDataCamelCase(DATA_TRIGGER)]); - } +}, _defineProperty(_Object$assign, 'toggle', function toggle() { + this.hidden ? this.show() : this.hide(); +}), _defineProperty(_Object$assign, 'destroy', function destroy() { + this.hide(); + this.list.removeEventListener('click', this.eventWrapper.clickEvent); +}), _Object$assign)); - if(hook) { - if(hook.tagName === 'A' || hook.tagName === 'BUTTON') { - this.hooks.push(new HookButton(hook, list, plugins, config)); - } else if(hook.tagName === 'INPUT') { - this.hooks.push(new HookInput(hook, list, plugins, config)); - } - } - return this; - }, +exports.default = DropDown; - addHooks: function(hooks, plugins, config) { - for(var i = 0; i < hooks.length; i++) { - var hook = hooks[i]; - this.addHook(hook, null, plugins, config); - } - return this; - }, +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { - setConfig: function(obj){ - this.config = obj; - }, +"use strict"; - init: function () { - this.addEvents(); - var readyEvent = new CustomEvent('ready.dl', { - detail: { - dropdown: this, - }, - }); - window.dispatchEvent(readyEvent); - this.ready = true; - for(var i = 0; i < this.queuedData.length; i++) { - this.addData.apply(this, this.queuedData[i]); - } - this.queuedData = []; - return this; - }, - }); - return DropLab; - }; +Object.defineProperty(exports, "__esModule", { + value: true }); -},{"./constants":1,"./custom_event_polyfill":2,"./hook_button":6,"./hook_input":7,"./utils":10,"./window":11}],5:[function(require,module,exports){ -var DropDown = require('./dropdown'); +__webpack_require__(1); -var Hook = function(trigger, list, plugins, config){ - this.trigger = trigger; - this.list = new DropDown(list); - this.type = 'Hook'; - this.event = 'click'; - this.plugins = plugins || []; - this.config = config || {}; - this.id = trigger.dataset.id; -}; +var _hook = __webpack_require__(2); -Object.assign(Hook.prototype, { +var _hook2 = _interopRequireDefault(_hook); - addEvents: function(){}, +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - constructor: Hook, -}); - -module.exports = Hook; - -},{"./dropdown":3}],6:[function(require,module,exports){ -var CustomEvent = require('./custom_event_polyfill'); -var Hook = require('./hook'); +var HookButton = function HookButton(trigger, list, plugins, config) { + _hook2.default.call(this, trigger, list, plugins, config); -var HookButton = function(trigger, list, plugins, config) { - Hook.call(this, trigger, list, plugins, config); this.type = 'button'; this.event = 'click'; + + this.eventWrapper = {}; + this.addEvents(); this.addPlugins(); }; -HookButton.prototype = Object.create(Hook.prototype); +HookButton.prototype = Object.create(_hook2.default.prototype); Object.assign(HookButton.prototype, { - addPlugins: function() { - for(var i = 0; i < this.plugins.length; i++) { - this.plugins[i].init(this); - } + addPlugins: function addPlugins() { + var _this = this; + + this.plugins.forEach(function (plugin) { + return plugin.init(_this); + }); }, - clicked: function(e){ + clicked: function clicked(e) { var buttonEvent = new CustomEvent('click.dl', { detail: { - hook: this, + hook: this }, bubbles: true, cancelable: true }); - this.list.show(); e.target.dispatchEvent(buttonEvent); + + this.list.toggle(); }, - addEvents: function(){ - this.clickedWrapper = this.clicked.bind(this); - this.trigger.addEventListener('click', this.clickedWrapper); + addEvents: function addEvents() { + this.eventWrapper.clicked = this.clicked.bind(this); + this.trigger.addEventListener('click', this.eventWrapper.clicked); }, - removeEvents: function(){ - this.trigger.removeEventListener('click', this.clickedWrapper); + removeEvents: function removeEvents() { + this.trigger.removeEventListener('click', this.eventWrapper.clicked); }, - restoreInitialState: function() { + restoreInitialState: function restoreInitialState() { this.list.list.innerHTML = this.list.initialState; }, - removePlugins: function() { - for(var i = 0; i < this.plugins.length; i++) { - this.plugins[i].destroy(); - } + removePlugins: function removePlugins() { + this.plugins.forEach(function (plugin) { + return plugin.destroy(); + }); }, - destroy: function() { + destroy: function destroy() { this.restoreInitialState(); + this.removeEvents(); this.removePlugins(); }, + constructor: HookButton +}); + +exports.default = HookButton; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { - constructor: HookButton, +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true }); +__webpack_require__(1); + +var _hook = __webpack_require__(2); -module.exports = HookButton; +var _hook2 = _interopRequireDefault(_hook); -},{"./custom_event_polyfill":2,"./hook":5}],7:[function(require,module,exports){ -var CustomEvent = require('./custom_event_polyfill'); -var Hook = require('./hook'); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var HookInput = function HookInput(trigger, list, plugins, config) { + _hook2.default.call(this, trigger, list, plugins, config); -var HookInput = function(trigger, list, plugins, config) { - Hook.call(this, trigger, list, plugins, config); this.type = 'input'; this.event = 'input'; - this.addPlugins(); + + this.eventWrapper = {}; + this.addEvents(); + this.addPlugins(); }; Object.assign(HookInput.prototype, { - addPlugins: function() { - var self = this; - for(var i = 0; i < this.plugins.length; i++) { - this.plugins[i].init(self); - } + addPlugins: function addPlugins() { + var _this = this; + + this.plugins.forEach(function (plugin) { + return plugin.init(_this); + }); }, - addEvents: function(){ - var self = this; + addEvents: function addEvents() { + this.eventWrapper.mousedown = this.mousedown.bind(this); + this.eventWrapper.input = this.input.bind(this); + this.eventWrapper.keyup = this.keyup.bind(this); + this.eventWrapper.keydown = this.keydown.bind(this); - this.mousedown = function mousedown(e) { - if(self.hasRemovedEvents) return; + this.trigger.addEventListener('mousedown', this.eventWrapper.mousedown); + this.trigger.addEventListener('input', this.eventWrapper.input); + this.trigger.addEventListener('keyup', this.eventWrapper.keyup); + this.trigger.addEventListener('keydown', this.eventWrapper.keydown); + }, - var mouseEvent = new CustomEvent('mousedown.dl', { - detail: { - hook: self, - text: e.target.value, - }, - bubbles: true, - cancelable: true - }); - e.target.dispatchEvent(mouseEvent); - } + removeEvents: function removeEvents() { + this.hasRemovedEvents = true; - this.input = function input(e) { - if(self.hasRemovedEvents) return; + this.trigger.removeEventListener('mousedown', this.eventWrapper.mousedown); + this.trigger.removeEventListener('input', this.eventWrapper.input); + this.trigger.removeEventListener('keyup', this.eventWrapper.keyup); + this.trigger.removeEventListener('keydown', this.eventWrapper.keydown); + }, - self.list.show(); + input: function input(e) { + if (this.hasRemovedEvents) return; - var inputEvent = new CustomEvent('input.dl', { - detail: { - hook: self, - text: e.target.value, - }, - bubbles: true, - cancelable: true - }); - e.target.dispatchEvent(inputEvent); - } + this.list.show(); - this.keyup = function keyup(e) { - if(self.hasRemovedEvents) return; + var inputEvent = new CustomEvent('input.dl', { + detail: { + hook: this, + text: e.target.value + }, + bubbles: true, + cancelable: true + }); + e.target.dispatchEvent(inputEvent); + }, - keyEvent(e, 'keyup.dl'); - } + mousedown: function mousedown(e) { + if (this.hasRemovedEvents) return; - this.keydown = function keydown(e) { - if(self.hasRemovedEvents) return; + var mouseEvent = new CustomEvent('mousedown.dl', { + detail: { + hook: this, + text: e.target.value + }, + bubbles: true, + cancelable: true + }); + e.target.dispatchEvent(mouseEvent); + }, - keyEvent(e, 'keydown.dl'); - } + keyup: function keyup(e) { + if (this.hasRemovedEvents) return; - function keyEvent(e, keyEventName){ - self.list.show(); + this.keyEvent(e, 'keyup.dl'); + }, - var keyEvent = new CustomEvent(keyEventName, { - detail: { - hook: self, - text: e.target.value, - which: e.which, - key: e.key, - }, - bubbles: true, - cancelable: true - }); - e.target.dispatchEvent(keyEvent); - } + keydown: function keydown(e) { + if (this.hasRemovedEvents) return; - this.events = this.events || {}; - this.events.mousedown = this.mousedown; - this.events.input = this.input; - this.events.keyup = this.keyup; - this.events.keydown = this.keydown; - this.trigger.addEventListener('mousedown', this.mousedown); - this.trigger.addEventListener('input', this.input); - this.trigger.addEventListener('keyup', this.keyup); - this.trigger.addEventListener('keydown', this.keydown); + this.keyEvent(e, 'keydown.dl'); }, - removeEvents: function() { - this.hasRemovedEvents = true; - this.trigger.removeEventListener('mousedown', this.mousedown); - this.trigger.removeEventListener('input', this.input); - this.trigger.removeEventListener('keyup', this.keyup); - this.trigger.removeEventListener('keydown', this.keydown); + keyEvent: function keyEvent(e, eventName) { + this.list.show(); + + var keyEvent = new CustomEvent(eventName, { + detail: { + hook: this, + text: e.target.value, + which: e.which, + key: e.key + }, + bubbles: true, + cancelable: true + }); + e.target.dispatchEvent(keyEvent); }, - restoreInitialState: function() { + restoreInitialState: function restoreInitialState() { this.list.list.innerHTML = this.list.initialState; }, - removePlugins: function() { - for(var i = 0; i < this.plugins.length; i++) { - this.plugins[i].destroy(); - } + removePlugins: function removePlugins() { + this.plugins.forEach(function (plugin) { + return plugin.destroy(); + }); }, - destroy: function() { + destroy: function destroy() { this.restoreInitialState(); + this.removeEvents(); this.removePlugins(); + this.list.destroy(); } }); -module.exports = HookInput; +exports.default = HookInput; -},{"./custom_event_polyfill":2,"./hook":5}],8:[function(require,module,exports){ -var DropLab = require('./droplab')(); -var DATA_TRIGGER = require('./constants').DATA_TRIGGER; -var keyboard = require('./keyboard')(); -var setup = function() { - window.DropLab = DropLab; -}; +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { +"use strict"; -module.exports = setup(); - -},{"./constants":1,"./droplab":4,"./keyboard":9}],9:[function(require,module,exports){ -require('./window')(function(w){ - module.exports = function(){ - var currentKey; - var currentFocus; - var isUpArrow = false; - var isDownArrow = false; - var removeHighlight = function removeHighlight(list) { - var listItems = Array.prototype.slice.call(list.list.querySelectorAll('li:not(.divider)'), 0); - var listItemsTmp = []; - for(var i = 0; i < listItems.length; i++) { - var listItem = listItems[i]; - listItem.classList.remove('dropdown-active'); - - if (listItem.style.display !== 'none') { - listItemsTmp.push(listItem); - } - } - return listItemsTmp; - }; - var setMenuForArrows = function setMenuForArrows(list) { - var listItems = removeHighlight(list); - if(list.currentIndex>0){ - if(!listItems[list.currentIndex-1]){ - list.currentIndex = list.currentIndex-1; - } +Object.defineProperty(exports, "__esModule", { + value: true +}); - if (listItems[list.currentIndex-1]) { - var el = listItems[list.currentIndex-1]; - var filterDropdownEl = el.closest('.filter-dropdown'); - el.classList.add('dropdown-active'); +var _droplab = __webpack_require__(4); - if (filterDropdownEl) { - var filterDropdownBottom = filterDropdownEl.offsetHeight; - var elOffsetTop = el.offsetTop - 30; +var _droplab2 = _interopRequireDefault(_droplab); - if (elOffsetTop > filterDropdownBottom) { - filterDropdownEl.scrollTop = elOffsetTop - filterDropdownBottom; - } - } - } - } - }; +var _constants = __webpack_require__(0); - var mousedown = function mousedown(e) { - var list = e.detail.hook.list; - removeHighlight(list); - list.show(); - list.currentIndex = 0; - isUpArrow = false; - isDownArrow = false; - }; - var selectItem = function selectItem(list) { - var listItems = removeHighlight(list); - var currentItem = listItems[list.currentIndex-1]; - var listEvent = new CustomEvent('click.dl', { - detail: { - list: list, - selected: currentItem, - data: currentItem.dataset, - }, - }); - list.list.dispatchEvent(listEvent); - list.hide(); - } +var _constants2 = _interopRequireDefault(_constants); - var keydown = function keydown(e){ - var typedOn = e.target; - var list = e.detail.hook.list; - var currentIndex = list.currentIndex; - isUpArrow = false; - isDownArrow = false; - - if(e.detail.which){ - currentKey = e.detail.which; - if(currentKey === 13){ - selectItem(e.detail.hook.list); - return; - } - if(currentKey === 38) { - isUpArrow = true; - } - if(currentKey === 40) { - isDownArrow = true; - } - } else if(e.detail.key) { - currentKey = e.detail.key; - if(currentKey === 'Enter'){ - selectItem(e.detail.hook.list); - return; - } - if(currentKey === 'ArrowUp') { - isUpArrow = true; - } - if(currentKey === 'ArrowDown') { - isDownArrow = true; - } - } - if(isUpArrow){ currentIndex--; } - if(isDownArrow){ currentIndex++; } - if(currentIndex < 0){ currentIndex = 0; } - list.currentIndex = currentIndex; - setMenuForArrows(e.detail.hook.list); - }; +var _keyboard = __webpack_require__(5); - w.addEventListener('mousedown.dl', mousedown); - w.addEventListener('keydown.dl', keydown); - }; -}); -},{"./window":11}],10:[function(require,module,exports){ -var DATA_TRIGGER = require('./constants').DATA_TRIGGER; -var DATA_DROPDOWN = require('./constants').DATA_DROPDOWN; +var _keyboard2 = _interopRequireDefault(_keyboard); -var toDataCamelCase = function(attr){ - return this.camelize(attr.split('-').slice(1).join(' ')); -}; +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -// the tiniest damn templating I can do -var t = function(s,d){ - for(var p in d) - s=s.replace(new RegExp('{{'+p+'}}','g'), d[p]); - return s; -}; +var DATA_TRIGGER = _constants2.default.DATA_TRIGGER; +var keyboard = (0, _keyboard2.default)(); -var camelize = function(str) { - return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(letter, index) { - return index == 0 ? letter.toLowerCase() : letter.toUpperCase(); - }).replace(/\s+/g, ''); +var setup = function setup() { + window.DropLab = (0, _droplab2.default)(); }; -var closest = function(thisTag, stopTag) { - while(thisTag && thisTag.tagName !== stopTag && thisTag.tagName !== 'HTML'){ - thisTag = thisTag.parentNode; - } - return thisTag; -}; +setup(); -var isDropDownParts = function(target) { - if(!target || target.tagName === 'HTML') { return false; } - return ( - target.hasAttribute(DATA_TRIGGER) || - target.hasAttribute(DATA_DROPDOWN) - ); -}; +exports.default = setup; -module.exports = { - toDataCamelCase: toDataCamelCase, - t: t, - camelize: camelize, - closest: closest, - isDropDownParts: isDropDownParts, -}; - -},{"./constants":1}],11:[function(require,module,exports){ -module.exports = function(callback) { - return (function() { - callback(this); - }).call(null); -}; - -},{}]},{},[8])(8) -}); +/***/ }) +/******/ ]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2N1c3RvbS1ldmVudC1wb2x5ZmlsbC9jdXN0b20tZXZlbnQtcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2suanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzLmpzIiwid2VicGFjazovLy8uL3NyYy9kcm9wbGFiLmpzIiwid2VicGFjazovLy8uL3NyYy9rZXlib2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2tfYnV0dG9uLmpzIiwid2VicGFjazovLy8uL3NyYy9ob29rX2lucHV0LmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJEQVRBX1RSSUdHRVIiLCJEQVRBX0RST1BET1dOIiwiU0VMRUNURURfQ0xBU1MiLCJBQ1RJVkVfQ0xBU1MiLCJjb25zdGFudHMiLCJIb29rIiwidHJpZ2dlciIsImxpc3QiLCJwbHVnaW5zIiwiY29uZmlnIiwidHlwZSIsImV2ZW50IiwiaWQiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJhZGRFdmVudHMiLCJjb25zdHJ1Y3RvciIsInV0aWxzIiwidG9DYW1lbENhc2UiLCJhdHRyIiwiY2FtZWxpemUiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsInQiLCJzIiwiZCIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBsYWNlIiwiUmVnRXhwIiwic3RyIiwibGV0dGVyIiwiaW5kZXgiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwiY2xvc2VzdCIsInRoaXNUYWciLCJzdG9wVGFnIiwidGFnTmFtZSIsInBhcmVudE5vZGUiLCJpc0Ryb3BEb3duUGFydHMiLCJ0YXJnZXQiLCJoYXNBdHRyaWJ1dGUiLCJEcm9wTGFiIiwiaG9vayIsInJlYWR5IiwiaG9va3MiLCJxdWV1ZWREYXRhIiwiZXZlbnRXcmFwcGVyIiwibG9hZFN0YXRpYyIsImFkZEhvb2siLCJpbml0IiwiZHJvcGRvd25UcmlnZ2VycyIsImFwcGx5IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiYWRkSG9va3MiLCJhZGREYXRhIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5QXJncyIsInNldERhdGEiLCJkZXN0cm95IiwiZm9yRWFjaCIsInJlbW92ZUV2ZW50cyIsIm1ldGhvZE5hbWUiLCJwdXNoIiwiX2FkZERhdGEiLCJkYXRhIiwiX3Byb2Nlc3NEYXRhIiwiX3NldERhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJkb2N1bWVudENsaWNrZWQiLCJiaW5kIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJoaWRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNoYW5nZUhvb2tMaXN0IiwiYXZhaWxhYmxlVHJpZ2dlciIsImdldEVsZW1lbnRCeUlkIiwiaSIsImRhdGFzZXQiLCJkcm9wZG93bkFjdGl2ZSIsInNwbGljZSIsImF2YWlsYWJsZUhvb2siLCJxdWVyeVNlbGVjdG9yIiwiYXZhaWxhYmxlTGlzdCIsIkVsZW1lbnQiLCJIb29rT2JqZWN0Iiwic2V0Q29uZmlnIiwib2JqIiwiZmlyZVJlYWR5IiwicmVhZHlFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZHJvcGRvd24iLCJkaXNwYXRjaEV2ZW50IiwiY3VycmVudEtleSIsImN1cnJlbnRGb2N1cyIsImlzVXBBcnJvdyIsImlzRG93bkFycm93IiwicmVtb3ZlSGlnaGxpZ2h0IiwiaXRlbUVsZW1lbnRzIiwibGlzdEl0ZW1zIiwibGVuZ3RoIiwibGlzdEl0ZW0iLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJzdHlsZSIsImRpc3BsYXkiLCJzZXRNZW51Rm9yQXJyb3dzIiwiY3VycmVudEluZGV4IiwiZWwiLCJmaWx0ZXJEcm9wZG93bkVsIiwiYWRkIiwiZmlsdGVyRHJvcGRvd25Cb3R0b20iLCJvZmZzZXRIZWlnaHQiLCJlbE9mZnNldFRvcCIsIm9mZnNldFRvcCIsInNjcm9sbFRvcCIsIm1vdXNlZG93biIsInNob3ciLCJzZWxlY3RJdGVtIiwiY3VycmVudEl0ZW0iLCJsaXN0RXZlbnQiLCJzZWxlY3RlZCIsImtleWRvd24iLCJ0eXBlZE9uIiwid2hpY2giLCJrZXkiLCJEcm9wRG93biIsImhpZGRlbiIsIml0ZW1zIiwiZ2V0SXRlbXMiLCJpbml0VGVtcGxhdGVTdHJpbmciLCJpbml0aWFsU3RhdGUiLCJpbm5lckhUTUwiLCJ0ZW1wbGF0ZVN0cmluZyIsIm91dGVySFRNTCIsImNsaWNrRXZlbnQiLCJhZGRTZWxlY3RlZENsYXNzIiwicHJldmVudERlZmF1bHQiLCJyZW1vdmVTZWxlY3RlZENsYXNzZXMiLCJpdGVtIiwidG9nZ2xlIiwicmVuZGVyIiwiY29uY2F0IiwiY2hpbGRyZW4iLCJtYXAiLCJyZW5kZXJDaGlsZHJlbiIsInJlbmRlcmFibGVMaXN0IiwiaHRtbCIsInRlbXBsYXRlIiwiY3JlYXRlRWxlbWVudCIsInNldEltYWdlc1NyYyIsImZpcnN0Q2hpbGQiLCJkcm9wbGFiX2hpZGRlbiIsImltYWdlcyIsImltYWdlIiwic3JjIiwiZ2V0QXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwiSG9va0J1dHRvbiIsImFkZFBsdWdpbnMiLCJjcmVhdGUiLCJwbHVnaW4iLCJjbGlja2VkIiwiYnV0dG9uRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsInJlc3RvcmVJbml0aWFsU3RhdGUiLCJyZW1vdmVQbHVnaW5zIiwiSG9va0lucHV0IiwiaW5wdXQiLCJrZXl1cCIsImhhc1JlbW92ZWRFdmVudHMiLCJpbnB1dEV2ZW50IiwidGV4dCIsInZhbHVlIiwibW91c2VFdmVudCIsImtleUV2ZW50IiwiZXZlbnROYW1lIiwia2V5Ym9hcmQiLCJzZXR1cCIsIndpbmRvdyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFD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QUlOQyxhQUFLdkQsRUFBRXVEO0FBSkQsT0FEa0M7QUFPMUN1QyxlQUFTLElBUGlDO0FBUTFDQyxrQkFBWTtBQVI4QixLQUEzQixDQUFqQjtBQVVBL0YsTUFBRW5DLE1BQUYsQ0FBU3lELGFBQVQsQ0FBdUJvRixRQUF2QjtBQUNELEdBbEZnQzs7QUFvRmpDVix1QkFBcUIsK0JBQVc7QUFDOUIsU0FBS3hLLElBQUwsQ0FBVUEsSUFBVixDQUFlc0ksU0FBZixHQUEyQixLQUFLdEksSUFBTCxDQUFVcUksWUFBckM7QUFDRCxHQXRGZ0M7O0FBd0ZqQ29DLGlCQUFlLHlCQUFXO0FBQ3hCLFNBQUt4SyxPQUFMLENBQWEwRCxPQUFiLENBQXFCO0FBQUEsYUFBVXdHLE9BQU96RyxPQUFQLEVBQVY7QUFBQSxLQUFyQjtBQUNELEdBMUZnQzs7QUE0RmpDQSxXQUFTLG1CQUFXO0FBQ2xCLFNBQUs4RyxtQkFBTDs7QUFFQSxTQUFLNUcsWUFBTDtBQUNBLFNBQUs2RyxhQUFMOztBQUVBLFNBQUt6SyxJQUFMLENBQVUwRCxPQUFWO0FBQ0Q7QUFuR2dDLENBQW5DOztrQkFzR2VnSCxTOzs7Ozs7Ozs7Ozs7O0FDckhmOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTWpMLGVBQWUsb0JBQVVBLFlBQS9CO0FBQ0EsSUFBTTJMLFdBQVcseUJBQWpCOztBQUVBLElBQU1DLFFBQVEsU0FBUkEsS0FBUSxHQUFZO0FBQ3hCQyxTQUFPL0ksT0FBUCxHQUFpQix3QkFBakI7QUFDRCxDQUZEOztBQUlBOEk7O2tCQUVlQSxLIiwiZmlsZSI6Ii4vZGlzdC9kcm9wbGFiLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gOSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGMiLCJjb25zdCBEQVRBX1RSSUdHRVIgPSAnZGF0YS1kcm9wZG93bi10cmlnZ2VyJztcbmNvbnN0IERBVEFfRFJPUERPV04gPSAnZGF0YS1kcm9wZG93bic7XG5jb25zdCBTRUxFQ1RFRF9DTEFTUyA9ICdkcm9wbGFiLWl0ZW0tc2VsZWN0ZWQnO1xuY29uc3QgQUNUSVZFX0NMQVNTID0gJ2Ryb3BsYWItaXRlbS1hY3RpdmUnO1xuXG5jb25zdCBjb25zdGFudHMgPSB7XG4gIERBVEFfVFJJR0dFUixcbiAgREFUQV9EUk9QRE9XTixcbiAgU0VMRUNURURfQ0xBU1MsXG4gIEFDVElWRV9DTEFTUyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbnN0YW50cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25zdGFudHMuanMiLCIvLyBQb2x5ZmlsbCBmb3IgY3JlYXRpbmcgQ3VzdG9tRXZlbnRzIG9uIElFOS8xMC8xMVxuXG4vLyBjb2RlIHB1bGxlZCBmcm9tOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Q0dG9jY2hpbmkvY3VzdG9tZXZlbnQtcG9seWZpbGxcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudCNQb2x5ZmlsbFxuXG50cnkge1xuICAgIHZhciBjZSA9IG5ldyB3aW5kb3cuQ3VzdG9tRXZlbnQoJ3Rlc3QnKTtcbiAgICBjZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChjZS5kZWZhdWx0UHJldmVudGVkICE9PSB0cnVlKSB7XG4gICAgICAgIC8vIElFIGhhcyBwcm9ibGVtcyB3aXRoIC5wcmV2ZW50RGVmYXVsdCgpIG9uIGN1c3RvbSBldmVudHNcbiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMzM0OTE5MVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBwcmV2ZW50IGRlZmF1bHQnKTtcbiAgICB9XG59IGNhdGNoKGUpIHtcbiAgdmFyIEN1c3RvbUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQsIHBhcmFtcykge1xuICAgIHZhciBldnQsIG9yaWdQcmV2ZW50O1xuICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7XG4gICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgZGV0YWlsOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJDdXN0b21FdmVudFwiKTtcbiAgICBldnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUsIHBhcmFtcy5kZXRhaWwpO1xuICAgIG9yaWdQcmV2ZW50ID0gZXZ0LnByZXZlbnREZWZhdWx0O1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG9yaWdQcmV2ZW50LmNhbGwodGhpcyk7XG4gICAgICB0cnkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2RlZmF1bHRQcmV2ZW50ZWQnLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gZXZ0O1xuICB9O1xuXG4gIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IHdpbmRvdy5FdmVudC5wcm90b3R5cGU7XG4gIHdpbmRvdy5DdXN0b21FdmVudCA9IEN1c3RvbUV2ZW50OyAvLyBleHBvc2UgZGVmaW5pdGlvbiB0byB3aW5kb3dcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jdXN0b20tZXZlbnQtcG9seWZpbGwvY3VzdG9tLWV2ZW50LXBvbHlmaWxsLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBEcm9wRG93biBmcm9tICcuL2Ryb3Bkb3duJztcblxudmFyIEhvb2sgPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpe1xuICB0aGlzLnRyaWdnZXIgPSB0cmlnZ2VyO1xuICB0aGlzLmxpc3QgPSBuZXcgRHJvcERvd24obGlzdCk7XG4gIHRoaXMudHlwZSA9ICdIb29rJztcbiAgdGhpcy5ldmVudCA9ICdjbGljayc7XG4gIHRoaXMucGx1Z2lucyA9IHBsdWdpbnMgfHwgW107XG4gIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB0aGlzLmlkID0gdHJpZ2dlci5pZDtcbn07XG5cbk9iamVjdC5hc3NpZ24oSG9vay5wcm90b3R5cGUsIHtcblxuICBhZGRFdmVudHM6IGZ1bmN0aW9uKCl7fSxcblxuICBjb25zdHJ1Y3RvcjogSG9vayxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIb29rO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2hvb2suanMiLCJpbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3QgeyBEQVRBX1RSSUdHRVIsIERBVEFfRFJPUERPV04gfSA9IGNvbnN0YW50cztcblxuY29uc3QgdXRpbHMgPSB7XG4gIHRvQ2FtZWxDYXNlKGF0dHIpIHtcbiAgICByZXR1cm4gdGhpcy5jYW1lbGl6ZShhdHRyLnNwbGl0KCctJykuc2xpY2UoMSkuam9pbignICcpKTtcbiAgfSxcblxuICB0KHMsIGQpIHtcbiAgICBmb3IgKGNvbnN0IHAgaW4gZCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLCBwKSkge1xuICAgICAgICBzID0gcy5yZXBsYWNlKG5ldyBSZWdFeHAoYHt7JHtwfX19YCwgJ2cnKSwgZFtwXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzO1xuICB9LFxuXG4gIGNhbWVsaXplKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvKD86Xlxcd3xbQS1aXXxcXGJcXHcpL2csIChsZXR0ZXIsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gaW5kZXggPT09IDAgPyBsZXR0ZXIudG9Mb3dlckNhc2UoKSA6IGxldHRlci50b1VwcGVyQ2FzZSgpO1xuICAgIH0pLnJlcGxhY2UoL1xccysvZywgJycpO1xuICB9LFxuXG4gIGNsb3Nlc3QodGhpc1RhZywgc3RvcFRhZykge1xuICAgIHdoaWxlICh0aGlzVGFnICYmIHRoaXNUYWcudGFnTmFtZSAhPT0gc3RvcFRhZyAmJiB0aGlzVGFnLnRhZ05hbWUgIT09ICdIVE1MJykge1xuICAgICAgdGhpc1RhZyA9IHRoaXNUYWcucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNUYWc7XG4gIH0sXG5cbiAgaXNEcm9wRG93blBhcnRzKHRhcmdldCkge1xuICAgIGlmICghdGFyZ2V0IHx8IHRhcmdldC50YWdOYW1lID09PSAnSFRNTCcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGFyZ2V0Lmhhc0F0dHJpYnV0ZShEQVRBX1RSSUdHRVIpIHx8IHRhcmdldC5oYXNBdHRyaWJ1dGUoREFUQV9EUk9QRE9XTik7XG4gIH0sXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3V0aWxzLmpzIiwiaW1wb3J0ICdjdXN0b20tZXZlbnQtcG9seWZpbGwnO1xuaW1wb3J0IEhvb2tCdXR0b24gZnJvbSAnLi9ob29rX2J1dHRvbic7XG5pbXBvcnQgSG9va0lucHV0IGZyb20gJy4vaG9va19pbnB1dCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJztcbmNvbnN0IERBVEFfVFJJR0dFUiA9IGNvbnN0YW50cy5EQVRBX1RSSUdHRVI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgdmFyIERyb3BMYWIgPSBmdW5jdGlvbihob29rLCBsaXN0KSB7XG4gICAgaWYgKCF0aGlzIGluc3RhbmNlb2YgRHJvcExhYikgcmV0dXJuIG5ldyBEcm9wTGFiKGhvb2spO1xuXG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMuaG9va3MgPSBbXTtcbiAgICB0aGlzLnF1ZXVlZERhdGEgPSBbXTtcbiAgICB0aGlzLmNvbmZpZyA9IHt9O1xuXG4gICAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcblxuICAgIGlmICghaG9vaykgcmV0dXJuIHRoaXMubG9hZFN0YXRpYygpO1xuICAgIHRoaXMuYWRkSG9vayhob29rLCBsaXN0KTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfTtcblxuICBPYmplY3QuYXNzaWduKERyb3BMYWIucHJvdG90eXBlLCB7XG4gICAgbG9hZFN0YXRpYzogZnVuY3Rpb24oKXtcbiAgICAgIHZhciBkcm9wZG93blRyaWdnZXJzID0gW10uc2xpY2UuYXBwbHkoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7REFUQV9UUklHR0VSfV1gKSk7XG4gICAgICB0aGlzLmFkZEhvb2tzKGRyb3Bkb3duVHJpZ2dlcnMpLmluaXQoKTtcbiAgICB9LFxuXG4gICAgYWRkRGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpO1xuICAgICAgdGhpcy5hcHBseUFyZ3MoYXJncywgJ19hZGREYXRhJyk7XG4gICAgfSxcblxuICAgIHNldERhdGE6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpO1xuICAgICAgdGhpcy5hcHBseUFyZ3MoYXJncywgJ19zZXREYXRhJyk7XG4gICAgfSxcblxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5ob29rcy5mb3JFYWNoKGhvb2sgPT4gaG9vay5kZXN0cm95KCkpO1xuICAgICAgdGhpcy5ob29rcyA9IFtdO1xuICAgICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcbiAgICB9LFxuXG4gICAgYXBwbHlBcmdzOiBmdW5jdGlvbihhcmdzLCBtZXRob2ROYW1lKSB7XG4gICAgICBpZiAodGhpcy5yZWFkeSkgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICAgIHRoaXMucXVldWVkRGF0YSA9IHRoaXMucXVldWVkRGF0YSB8fCBbXTtcbiAgICAgIHRoaXMucXVldWVkRGF0YS5wdXNoKGFyZ3MpO1xuICAgIH0sXG5cbiAgICBfYWRkRGF0YTogZnVuY3Rpb24odHJpZ2dlciwgZGF0YSkge1xuICAgICAgdGhpcy5fcHJvY2Vzc0RhdGEodHJpZ2dlciwgZGF0YSwgJ2FkZERhdGEnKTtcbiAgICB9LFxuXG4gICAgX3NldERhdGE6IGZ1bmN0aW9uKHRyaWdnZXIsIGRhdGEpIHtcbiAgICAgIHRoaXMuX3Byb2Nlc3NEYXRhKHRyaWdnZXIsIGRhdGEsICdzZXREYXRhJyk7XG4gICAgfSxcblxuICAgIF9wcm9jZXNzRGF0YTogZnVuY3Rpb24odHJpZ2dlciwgZGF0YSwgbWV0aG9kTmFtZSkge1xuICAgICAgdGhpcy5ob29rcy5mb3JFYWNoKChob29rKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRyaWdnZXIpKSBob29rLmxpc3RbbWV0aG9kTmFtZV0odHJpZ2dlcik7XG5cbiAgICAgICAgaWYgKGhvb2sudHJpZ2dlci5pZCA9PT0gdHJpZ2dlcikgaG9vay5saXN0W21ldGhvZE5hbWVdKGRhdGEpO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFkZEV2ZW50czogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmV2ZW50V3JhcHBlci5kb2N1bWVudENsaWNrZWQgPSB0aGlzLmRvY3VtZW50Q2xpY2tlZC5iaW5kKHRoaXMpXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZXZlbnRXcmFwcGVyLmRvY3VtZW50Q2xpY2tlZCk7XG4gICAgfSxcblxuICAgIGRvY3VtZW50Q2xpY2tlZDogZnVuY3Rpb24oZSkge1xuICAgICAgbGV0IHRoaXNUYWcgPSBlLnRhcmdldDtcblxuICAgICAgaWYgKHRoaXNUYWcudGFnTmFtZSAhPT0gJ1VMJykgdGhpc1RhZyA9IHV0aWxzLmNsb3Nlc3QodGhpc1RhZywgJ1VMJyk7XG4gICAgICBpZiAodXRpbHMuaXNEcm9wRG93blBhcnRzKHRoaXNUYWcsIHRoaXMuaG9va3MpIHx8IHV0aWxzLmlzRHJvcERvd25QYXJ0cyhlLnRhcmdldCwgdGhpcy5ob29rcykpIHJldHVybjtcblxuICAgICAgdGhpcy5ob29rcy5mb3JFYWNoKGhvb2sgPT4gaG9vay5saXN0LmhpZGUoKSk7XG4gICAgfSxcblxuICAgIHJlbW92ZUV2ZW50czogZnVuY3Rpb24oKXtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuZG9jdW1lbnRDbGlja2VkKTtcbiAgICB9LFxuXG4gICAgY2hhbmdlSG9va0xpc3Q6IGZ1bmN0aW9uKHRyaWdnZXIsIGxpc3QsIHBsdWdpbnMsIGNvbmZpZykge1xuICAgICAgY29uc3QgYXZhaWxhYmxlVHJpZ2dlciA9ICB0eXBlb2YgdHJpZ2dlciA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0cmlnZ2VyKSA6IHRyaWdnZXI7XG5cblxuICAgICAgdGhpcy5ob29rcy5mb3JFYWNoKChob29rLCBpKSA9PiB7XG4gICAgICAgIGhvb2subGlzdC5saXN0LmRhdGFzZXQuZHJvcGRvd25BY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICBpZiAoaG9vay50cmlnZ2VyICE9PSBhdmFpbGFibGVUcmlnZ2VyKSByZXR1cm47XG5cbiAgICAgICAgaG9vay5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaG9va3Muc3BsaWNlKGksIDEpO1xuICAgICAgICB0aGlzLmFkZEhvb2soYXZhaWxhYmxlVHJpZ2dlciwgbGlzdCwgcGx1Z2lucywgY29uZmlnKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhZGRIb29rOiBmdW5jdGlvbihob29rLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUhvb2sgPSB0eXBlb2YgaG9vayA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGhvb2spIDogaG9vaztcbiAgICAgIGxldCBhdmFpbGFibGVMaXN0O1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGF2YWlsYWJsZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxpc3QpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICBhdmFpbGFibGVMaXN0ID0gbGlzdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF2YWlsYWJsZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGhvb2suZGF0YXNldFt1dGlscy50b0NhbWVsQ2FzZShEQVRBX1RSSUdHRVIpXSk7XG4gICAgICB9XG5cbiAgICAgIGF2YWlsYWJsZUxpc3QuZGF0YXNldC5kcm9wZG93bkFjdGl2ZSA9IHRydWU7XG5cbiAgICAgIGNvbnN0IEhvb2tPYmplY3QgPSBhdmFpbGFibGVIb29rLnRhZ05hbWUgPT09ICdJTlBVVCcgPyBIb29rSW5wdXQgOiBIb29rQnV0dG9uO1xuICAgICAgdGhpcy5ob29rcy5wdXNoKG5ldyBIb29rT2JqZWN0KGF2YWlsYWJsZUhvb2ssIGF2YWlsYWJsZUxpc3QsIHBsdWdpbnMsIGNvbmZpZykpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgYWRkSG9va3M6IGZ1bmN0aW9uKGhvb2tzLCBwbHVnaW5zLCBjb25maWcpIHtcbiAgICAgIGhvb2tzLmZvckVhY2goaG9vayA9PiB0aGlzLmFkZEhvb2soaG9vaywgbnVsbCwgcGx1Z2lucywgY29uZmlnKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgc2V0Q29uZmlnOiBmdW5jdGlvbihvYmope1xuICAgICAgdGhpcy5jb25maWcgPSBvYmo7XG4gICAgfSxcblxuICAgIGZpcmVSZWFkeTogZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCByZWFkeUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWFkeS5kbCcsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgZHJvcGRvd246IHRoaXMsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQocmVhZHlFdmVudCk7XG5cbiAgICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgIH0sXG5cbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmFkZEV2ZW50cygpO1xuXG4gICAgICB0aGlzLmZpcmVSZWFkeSgpO1xuXG4gICAgICB0aGlzLnF1ZXVlZERhdGEuZm9yRWFjaChkYXRhID0+IHRoaXMuYWRkRGF0YShkYXRhKSk7XG4gICAgICB0aGlzLnF1ZXVlZERhdGEgPSBbXTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIERyb3BMYWI7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Ryb3BsYWIuanMiLCJpbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICB2YXIgY3VycmVudEtleTtcbiAgdmFyIGN1cnJlbnRGb2N1cztcbiAgdmFyIGlzVXBBcnJvdyA9IGZhbHNlO1xuICB2YXIgaXNEb3duQXJyb3cgPSBmYWxzZTtcbiAgdmFyIHJlbW92ZUhpZ2hsaWdodCA9IGZ1bmN0aW9uIHJlbW92ZUhpZ2hsaWdodChsaXN0KSB7XG4gICAgdmFyIGl0ZW1FbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGxpc3QubGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaTpub3QoLmRpdmlkZXIpJyksIDApO1xuICAgIHZhciBsaXN0SXRlbXMgPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgaXRlbUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGlzdEl0ZW0gPSBpdGVtRWxlbWVudHNbaV07XG4gICAgICBsaXN0SXRlbS5jbGFzc0xpc3QucmVtb3ZlKGNvbnN0YW50cy5BQ1RJVkVfQ0xBU1MpO1xuXG4gICAgICBpZiAobGlzdEl0ZW0uc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGxpc3RJdGVtcy5wdXNoKGxpc3RJdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpc3RJdGVtcztcbiAgfTtcblxuICB2YXIgc2V0TWVudUZvckFycm93cyA9IGZ1bmN0aW9uIHNldE1lbnVGb3JBcnJvd3MobGlzdCkge1xuICAgIHZhciBsaXN0SXRlbXMgPSByZW1vdmVIaWdobGlnaHQobGlzdCk7XG4gICAgaWYobGlzdC5jdXJyZW50SW5kZXg+MCl7XG4gICAgICBpZighbGlzdEl0ZW1zW2xpc3QuY3VycmVudEluZGV4LTFdKXtcbiAgICAgICAgbGlzdC5jdXJyZW50SW5kZXggPSBsaXN0LmN1cnJlbnRJbmRleC0xO1xuICAgICAgfVxuXG4gICAgICBpZiAobGlzdEl0ZW1zW2xpc3QuY3VycmVudEluZGV4LTFdKSB7XG4gICAgICAgIHZhciBlbCA9IGxpc3RJdGVtc1tsaXN0LmN1cnJlbnRJbmRleC0xXTtcbiAgICAgICAgdmFyIGZpbHRlckRyb3Bkb3duRWwgPSBlbC5jbG9zZXN0KCcuZmlsdGVyLWRyb3Bkb3duJyk7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY29uc3RhbnRzLkFDVElWRV9DTEFTUyk7XG5cbiAgICAgICAgaWYgKGZpbHRlckRyb3Bkb3duRWwpIHtcbiAgICAgICAgICB2YXIgZmlsdGVyRHJvcGRvd25Cb3R0b20gPSBmaWx0ZXJEcm9wZG93bkVsLm9mZnNldEhlaWdodDtcbiAgICAgICAgICB2YXIgZWxPZmZzZXRUb3AgPSBlbC5vZmZzZXRUb3AgLSAzMDtcblxuICAgICAgICAgIGlmIChlbE9mZnNldFRvcCA+IGZpbHRlckRyb3Bkb3duQm90dG9tKSB7XG4gICAgICAgICAgICBmaWx0ZXJEcm9wZG93bkVsLnNjcm9sbFRvcCA9IGVsT2Zmc2V0VG9wIC0gZmlsdGVyRHJvcGRvd25Cb3R0b207XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBtb3VzZWRvd24gPSBmdW5jdGlvbiBtb3VzZWRvd24oZSkge1xuICAgIHZhciBsaXN0ID0gZS5kZXRhaWwuaG9vay5saXN0O1xuICAgIHJlbW92ZUhpZ2hsaWdodChsaXN0KTtcbiAgICBsaXN0LnNob3coKTtcbiAgICBsaXN0LmN1cnJlbnRJbmRleCA9IDA7XG4gICAgaXNVcEFycm93ID0gZmFsc2U7XG4gICAgaXNEb3duQXJyb3cgPSBmYWxzZTtcbiAgfTtcbiAgdmFyIHNlbGVjdEl0ZW0gPSBmdW5jdGlvbiBzZWxlY3RJdGVtKGxpc3QpIHtcbiAgICB2YXIgbGlzdEl0ZW1zID0gcmVtb3ZlSGlnaGxpZ2h0KGxpc3QpO1xuICAgIHZhciBjdXJyZW50SXRlbSA9IGxpc3RJdGVtc1tsaXN0LmN1cnJlbnRJbmRleC0xXTtcbiAgICB2YXIgbGlzdEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjbGljay5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBsaXN0OiBsaXN0LFxuICAgICAgICBzZWxlY3RlZDogY3VycmVudEl0ZW0sXG4gICAgICAgIGRhdGE6IGN1cnJlbnRJdGVtLmRhdGFzZXQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGxpc3QubGlzdC5kaXNwYXRjaEV2ZW50KGxpc3RFdmVudCk7XG4gICAgbGlzdC5oaWRlKCk7XG4gIH1cblxuICB2YXIga2V5ZG93biA9IGZ1bmN0aW9uIGtleWRvd24oZSl7XG4gICAgdmFyIHR5cGVkT24gPSBlLnRhcmdldDtcbiAgICB2YXIgbGlzdCA9IGUuZGV0YWlsLmhvb2subGlzdDtcbiAgICB2YXIgY3VycmVudEluZGV4ID0gbGlzdC5jdXJyZW50SW5kZXg7XG4gICAgaXNVcEFycm93ID0gZmFsc2U7XG4gICAgaXNEb3duQXJyb3cgPSBmYWxzZTtcblxuICAgIGlmKGUuZGV0YWlsLndoaWNoKXtcbiAgICAgIGN1cnJlbnRLZXkgPSBlLmRldGFpbC53aGljaDtcbiAgICAgIGlmKGN1cnJlbnRLZXkgPT09IDEzKXtcbiAgICAgICAgc2VsZWN0SXRlbShlLmRldGFpbC5ob29rLmxpc3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZihjdXJyZW50S2V5ID09PSAzOCkge1xuICAgICAgICBpc1VwQXJyb3cgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYoY3VycmVudEtleSA9PT0gNDApIHtcbiAgICAgICAgaXNEb3duQXJyb3cgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZihlLmRldGFpbC5rZXkpIHtcbiAgICAgIGN1cnJlbnRLZXkgPSBlLmRldGFpbC5rZXk7XG4gICAgICBpZihjdXJyZW50S2V5ID09PSAnRW50ZXInKXtcbiAgICAgICAgc2VsZWN0SXRlbShlLmRldGFpbC5ob29rLmxpc3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZihjdXJyZW50S2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgaXNVcEFycm93ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmKGN1cnJlbnRLZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIGlzRG93bkFycm93ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoaXNVcEFycm93KXsgY3VycmVudEluZGV4LS07IH1cbiAgICBpZihpc0Rvd25BcnJvdyl7IGN1cnJlbnRJbmRleCsrOyB9XG4gICAgaWYoY3VycmVudEluZGV4IDwgMCl7IGN1cnJlbnRJbmRleCA9IDA7IH1cbiAgICBsaXN0LmN1cnJlbnRJbmRleCA9IGN1cnJlbnRJbmRleDtcbiAgICBzZXRNZW51Rm9yQXJyb3dzKGUuZGV0YWlsLmhvb2subGlzdCk7XG4gIH07XG5cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duLmRsJywgbW91c2Vkb3duKTtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bi5kbCcsIGtleWRvd24pO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2tleWJvYXJkLmpzIiwiaW1wb3J0ICdjdXN0b20tZXZlbnQtcG9seWZpbGwnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuLi9zcmMvY29uc3RhbnRzJztcblxudmFyIERyb3BEb3duID0gZnVuY3Rpb24obGlzdCkge1xuICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgdGhpcy5saXN0ID0gdHlwZW9mIGxpc3QgPT09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsaXN0KSA6IGxpc3Q7XG4gIHRoaXMuaXRlbXMgPSBbXTtcblxuICB0aGlzLmV2ZW50V3JhcHBlciA9IHt9O1xuXG4gIHRoaXMuZ2V0SXRlbXMoKTtcbiAgdGhpcy5pbml0VGVtcGxhdGVTdHJpbmcoKTtcbiAgdGhpcy5hZGRFdmVudHMoKTtcblxuICB0aGlzLmluaXRpYWxTdGF0ZSA9IGxpc3QuaW5uZXJIVE1MO1xufTtcblxuT2JqZWN0LmFzc2lnbihEcm9wRG93bi5wcm90b3R5cGUsIHtcbiAgZ2V0SXRlbXM6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXRlbXMgPSBbXS5zbGljZS5jYWxsKHRoaXMubGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpKTtcbiAgICByZXR1cm4gdGhpcy5pdGVtcztcbiAgfSxcblxuICBpbml0VGVtcGxhdGVTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXMgfHwgdGhpcy5nZXRJdGVtcygpO1xuXG4gICAgdmFyIHRlbXBsYXRlU3RyaW5nID0gJyc7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHRlbXBsYXRlU3RyaW5nID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0ub3V0ZXJIVE1MO1xuICAgIHRoaXMudGVtcGxhdGVTdHJpbmcgPSB0ZW1wbGF0ZVN0cmluZztcblxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlU3RyaW5nO1xuICB9LFxuXG4gIGNsaWNrRXZlbnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgc2VsZWN0ZWQgPSB1dGlscy5jbG9zZXN0KGUudGFyZ2V0LCAnTEknKTtcbiAgICBpZiAoIXNlbGVjdGVkKSByZXR1cm47XG5cbiAgICB0aGlzLmFkZFNlbGVjdGVkQ2xhc3Moc2VsZWN0ZWQpO1xuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaGlkZSgpO1xuXG4gICAgdmFyIGxpc3RFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2xpY2suZGwnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgbGlzdDogdGhpcyxcbiAgICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkLFxuICAgICAgICBkYXRhOiBlLnRhcmdldC5kYXRhc2V0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmxpc3QuZGlzcGF0Y2hFdmVudChsaXN0RXZlbnQpO1xuICB9LFxuXG4gIGFkZFNlbGVjdGVkQ2xhc3M6IGZ1bmN0aW9uIChzZWxlY3RlZCkge1xuICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRDbGFzc2VzKCk7XG4gICAgc2VsZWN0ZWQuY2xhc3NMaXN0LmFkZChjb25zdGFudHMuU0VMRUNURURfQ0xBU1MpO1xuICB9LFxuXG4gIHJlbW92ZVNlbGVjdGVkQ2xhc3NlczogZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcyB8fCB0aGlzLmdldEl0ZW1zKCk7XG5cbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoY29uc3RhbnRzLlNFTEVDVEVEX0NMQVNTKVxuICAgIH0pO1xuICB9LFxuXG4gIGFkZEV2ZW50czogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tFdmVudCA9IHRoaXMuY2xpY2tFdmVudC5iaW5kKHRoaXMpXG4gICAgdGhpcy5saXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tFdmVudCk7XG4gIH0sXG5cbiAgdG9nZ2xlOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmhpZGRlbiA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG4gIH0sXG5cbiAgc2V0RGF0YTogZnVuY3Rpb24oZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5yZW5kZXIoZGF0YSk7XG4gIH0sXG5cbiAgYWRkRGF0YTogZnVuY3Rpb24oZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9ICh0aGlzLmRhdGEgfHwgW10pLmNvbmNhdChkYXRhKTtcbiAgICB0aGlzLnJlbmRlcih0aGlzLmRhdGEpO1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oZGF0YSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YSA/IGRhdGEubWFwKHRoaXMucmVuZGVyQ2hpbGRyZW4uYmluZCh0aGlzKSkgOiBbXTtcbiAgICBjb25zdCByZW5kZXJhYmxlTGlzdCA9IHRoaXMubGlzdC5xdWVyeVNlbGVjdG9yKCd1bFtkYXRhLWR5bmFtaWNdJykgfHwgdGhpcy5saXN0O1xuXG4gICAgcmVuZGVyYWJsZUxpc3QuaW5uZXJIVE1MID0gY2hpbGRyZW4uam9pbignJyk7XG4gIH0sXG5cbiAgcmVuZGVyQ2hpbGRyZW46IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICB2YXIgaHRtbCA9IHV0aWxzLnQodGhpcy50ZW1wbGF0ZVN0cmluZywgZGF0YSk7XG4gICAgdmFyIHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xuICAgIHRoaXMuc2V0SW1hZ2VzU3JjKHRlbXBsYXRlKTtcbiAgICB0ZW1wbGF0ZS5maXJzdENoaWxkLnN0eWxlLmRpc3BsYXkgPSBkYXRhLmRyb3BsYWJfaGlkZGVuID8gJ25vbmUnIDogJ2Jsb2NrJztcblxuICAgIHJldHVybiB0ZW1wbGF0ZS5maXJzdENoaWxkLm91dGVySFRNTDtcbiAgfSxcblxuICBzZXRJbWFnZXNTcmM6IGZ1bmN0aW9uKHRlbXBsYXRlKSB7XG4gICAgY29uc3QgaW1hZ2VzID0gW10uc2xpY2UuY2FsbCh0ZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKCdpbWdbZGF0YS1zcmNdJykpO1xuXG4gICAgaW1hZ2VzLmZvckVhY2goKGltYWdlKSA9PiB7XG4gICAgICBpbWFnZS5zcmMgPSBpbWFnZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG4gICAgICBpbWFnZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG4gICAgfSk7XG4gIH0sXG5cbiAgc2hvdzogZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmhpZGRlbikgcmV0dXJuO1xuICAgIHRoaXMubGlzdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcbiAgfSxcblxuICBoaWRlOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oaWRkZW4pIHJldHVybjtcbiAgICB0aGlzLmxpc3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICB9LFxuXG4gIHRvZ2dsZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuaGlkZGVuID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcbiAgfSxcblxuICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmhpZGUoKTtcbiAgICB0aGlzLmxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmV2ZW50V3JhcHBlci5jbGlja0V2ZW50KTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IERyb3BEb3duO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Ryb3Bkb3duLmpzIiwiaW1wb3J0ICdjdXN0b20tZXZlbnQtcG9seWZpbGwnO1xuaW1wb3J0IEhvb2sgZnJvbSAnLi9ob29rJztcblxudmFyIEhvb2tCdXR0b24gPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgSG9vay5jYWxsKHRoaXMsIHRyaWdnZXIsIGxpc3QsIHBsdWdpbnMsIGNvbmZpZyk7XG5cbiAgdGhpcy50eXBlID0gJ2J1dHRvbic7XG4gIHRoaXMuZXZlbnQgPSAnY2xpY2snO1xuXG4gIHRoaXMuZXZlbnRXcmFwcGVyID0ge307XG5cbiAgdGhpcy5hZGRFdmVudHMoKTtcbiAgdGhpcy5hZGRQbHVnaW5zKCk7XG59O1xuXG5Ib29rQnV0dG9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSG9vay5wcm90b3R5cGUpO1xuXG5PYmplY3QuYXNzaWduKEhvb2tCdXR0b24ucHJvdG90eXBlLCB7XG4gIGFkZFBsdWdpbnM6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiBwbHVnaW4uaW5pdCh0aGlzKSk7XG4gIH0sXG5cbiAgY2xpY2tlZDogZnVuY3Rpb24oZSl7XG4gICAgdmFyIGJ1dHRvbkV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjbGljay5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgfSxcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZS50YXJnZXQuZGlzcGF0Y2hFdmVudChidXR0b25FdmVudCk7XG5cbiAgICB0aGlzLmxpc3QudG9nZ2xlKCk7XG4gIH0sXG5cbiAgYWRkRXZlbnRzOiBmdW5jdGlvbigpe1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmNsaWNrZWQgPSB0aGlzLmNsaWNrZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmV2ZW50V3JhcHBlci5jbGlja2VkKTtcbiAgfSxcblxuICByZW1vdmVFdmVudHM6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tlZCk7XG4gIH0sXG5cbiAgcmVzdG9yZUluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0Lmxpc3QuaW5uZXJIVE1MID0gdGhpcy5saXN0LmluaXRpYWxTdGF0ZTtcbiAgfSxcblxuICByZW1vdmVQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmRlc3Ryb3koKSk7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXN0b3JlSW5pdGlhbFN0YXRlKCk7XG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICAgIHRoaXMucmVtb3ZlUGx1Z2lucygpO1xuICB9LFxuXG4gIGNvbnN0cnVjdG9yOiBIb29rQnV0dG9uLFxufSk7XG5cblxuZXhwb3J0IGRlZmF1bHQgSG9va0J1dHRvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9ob29rX2J1dHRvbi5qcyIsImltcG9ydCAnY3VzdG9tLWV2ZW50LXBvbHlmaWxsJztcbmltcG9ydCBIb29rIGZyb20gJy4vaG9vayc7XG5cbnZhciBIb29rSW5wdXQgPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgSG9vay5jYWxsKHRoaXMsIHRyaWdnZXIsIGxpc3QsIHBsdWdpbnMsIGNvbmZpZyk7XG5cbiAgdGhpcy50eXBlID0gJ2lucHV0JztcbiAgdGhpcy5ldmVudCA9ICdpbnB1dCc7XG5cbiAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcblxuICB0aGlzLmFkZEV2ZW50cygpO1xuICB0aGlzLmFkZFBsdWdpbnMoKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oSG9va0lucHV0LnByb3RvdHlwZSwge1xuICBhZGRQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmluaXQodGhpcykpO1xuICB9LFxuXG4gIGFkZEV2ZW50czogZnVuY3Rpb24oKXtcbiAgICB0aGlzLmV2ZW50V3JhcHBlci5tb3VzZWRvd24gPSB0aGlzLm1vdXNlZG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmlucHV0ID0gdGhpcy5pbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmtleXVwID0gdGhpcy5rZXl1cC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmtleWRvd24gPSB0aGlzLmtleWRvd24uYmluZCh0aGlzKTtcblxuICAgIHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmV2ZW50V3JhcHBlci5tb3VzZWRvd24pO1xuICAgIHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuZXZlbnRXcmFwcGVyLmlucHV0KTtcbiAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmV2ZW50V3JhcHBlci5rZXl1cCk7XG4gICAgdGhpcy50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmV2ZW50V3JhcHBlci5rZXlkb3duKTtcbiAgfSxcblxuICByZW1vdmVFdmVudHM6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaGFzUmVtb3ZlZEV2ZW50cyA9IHRydWU7XG5cbiAgICB0aGlzLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5ldmVudFdyYXBwZXIubW91c2Vkb3duKTtcbiAgICB0aGlzLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLmV2ZW50V3JhcHBlci5pbnB1dCk7XG4gICAgdGhpcy50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5ldmVudFdyYXBwZXIua2V5dXApO1xuICAgIHRoaXMudHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5ldmVudFdyYXBwZXIua2V5ZG93bik7XG4gIH0sXG5cbiAgaW5wdXQ6IGZ1bmN0aW9uKGUpIHtcbiAgICBpZih0aGlzLmhhc1JlbW92ZWRFdmVudHMpIHJldHVybjtcblxuICAgIHRoaXMubGlzdC5zaG93KCk7XG5cbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdpbnB1dC5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgICB0ZXh0OiBlLnRhcmdldC52YWx1ZSxcbiAgICAgIH0sXG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQoaW5wdXRFdmVudCk7XG4gIH0sXG5cbiAgbW91c2Vkb3duOiBmdW5jdGlvbihlKSB7XG4gICAgaWYgKHRoaXMuaGFzUmVtb3ZlZEV2ZW50cykgcmV0dXJuO1xuXG4gICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbW91c2Vkb3duLmRsJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIGhvb2s6IHRoaXMsXG4gICAgICAgIHRleHQ6IGUudGFyZ2V0LnZhbHVlLFxuICAgICAgfSxcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQobW91c2VFdmVudCk7XG4gIH0sXG5cbiAga2V5dXA6IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAodGhpcy5oYXNSZW1vdmVkRXZlbnRzKSByZXR1cm47XG5cbiAgICB0aGlzLmtleUV2ZW50KGUsICdrZXl1cC5kbCcpO1xuICB9LFxuXG4gIGtleWRvd246IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAodGhpcy5oYXNSZW1vdmVkRXZlbnRzKSByZXR1cm47XG5cbiAgICB0aGlzLmtleUV2ZW50KGUsICdrZXlkb3duLmRsJyk7XG4gIH0sXG5cbiAga2V5RXZlbnQ6IGZ1bmN0aW9uKGUsIGV2ZW50TmFtZSkge1xuICAgIHRoaXMubGlzdC5zaG93KCk7XG5cbiAgICBjb25zdCBrZXlFdmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgICB0ZXh0OiBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgd2hpY2g6IGUud2hpY2gsXG4gICAgICAgIGtleTogZS5rZXksXG4gICAgICB9LFxuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgZS50YXJnZXQuZGlzcGF0Y2hFdmVudChrZXlFdmVudCk7XG4gIH0sXG5cbiAgcmVzdG9yZUluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0Lmxpc3QuaW5uZXJIVE1MID0gdGhpcy5saXN0LmluaXRpYWxTdGF0ZTtcbiAgfSxcblxuICByZW1vdmVQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmRlc3Ryb3koKSk7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXN0b3JlSW5pdGlhbFN0YXRlKCk7XG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICAgIHRoaXMucmVtb3ZlUGx1Z2lucygpO1xuXG4gICAgdGhpcy5saXN0LmRlc3Ryb3koKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEhvb2tJbnB1dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9ob29rX2lucHV0LmpzIiwiaW1wb3J0IERyb3BMYWIgZnJvbSAnLi9kcm9wbGFiJztcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IEtleWJvYXJkIGZyb20gJy4va2V5Ym9hcmQnO1xuXG5jb25zdCBEQVRBX1RSSUdHRVIgPSBjb25zdGFudHMuREFUQV9UUklHR0VSO1xuY29uc3Qga2V5Ym9hcmQgPSBLZXlib2FyZCgpO1xuXG5jb25zdCBzZXR1cCA9IGZ1bmN0aW9uICgpIHtcbiAgd2luZG93LkRyb3BMYWIgPSBEcm9wTGFiKCk7XG59O1xuXG5zZXR1cCgpO1xuXG5leHBvcnQgZGVmYXVsdCBzZXR1cFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2luZGV4LmpzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/app/assets/javascripts/droplab/droplab_ajax.js b/app/assets/javascripts/droplab/droplab_ajax.js deleted file mode 100644 index 020f8b4ac65..00000000000 --- a/app/assets/javascripts/droplab/droplab_ajax.js +++ /dev/null @@ -1,103 +0,0 @@ -/* eslint-disable */ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g=(g.droplab||(g.droplab = {}));g=(g.ajax||(g.ajax = {}));g=(g.datasource||(g.datasource = {}));g.js = f()}})(function(){var define,module,exports;return (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 -1; - var focusEvent = e.type === 'focus'; - - if (invalidKeyPressed || this.loading) { - return; - } - - if (this.timeout) { - clearTimeout(this.timeout); - } - - this.timeout = setTimeout(this.trigger.bind(this, focusEvent), 200); - }, - - trigger: function trigger(getEntireList) { - var config = this.hook.config.droplabAjaxFilter; - var searchValue = this.trigger.value; - - if (!config || !config.endpoint || !config.searchKey) { - return; - } - - if (config.searchValueFunction) { - searchValue = config.searchValueFunction(); - } - - if (config.loadingTemplate && this.hook.list.data === undefined || - this.hook.list.data.length === 0) { - var dynamicList = this.hook.list.list.querySelector('[data-dynamic]'); - - var loadingTemplate = document.createElement('div'); - loadingTemplate.innerHTML = config.loadingTemplate; - loadingTemplate.setAttribute('data-loading-template', true); - - this.listTemplate = dynamicList.outerHTML; - dynamicList.outerHTML = loadingTemplate.outerHTML; - } - - if (getEntireList) { - searchValue = ''; - } - - if (config.searchKey === searchValue) { - return this.list.show(); - } - - this.loading = true; - - var params = config.params || {}; - params[config.searchKey] = searchValue; - var self = this; - self.cache = self.cache || {}; - var url = config.endpoint + this.buildParams(params); - var urlCachedData = self.cache[url]; - - if (urlCachedData) { - self._loadData(urlCachedData, config, self); - } else { - this._loadUrlData(url) - .then(function(data) { - self._loadData(data, config, self); - }, function(xhrError) { - // TODO: properly handle errors due to XHR cancellation - return; - }); - } - }, - - _loadUrlData: function _loadUrlData(url) { - var self = this; - return new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest; - xhr.open('GET', url, true); - xhr.onreadystatechange = function () { - if(xhr.readyState === XMLHttpRequest.DONE) { - if (xhr.status === 200) { - var data = JSON.parse(xhr.responseText); - self.cache[url] = data; - return resolve(data); - } else { - return reject([xhr.responseText, xhr.status]); - } - } - }; - xhr.send(); - }); - }, - - _loadData: function _loadData(data, config, self) { - if (config.loadingTemplate && self.hook.list.data === undefined || - self.hook.list.data.length === 0) { - const dataLoadingTemplate = self.hook.list.list.querySelector('[data-loading-template]'); - - if (dataLoadingTemplate) { - dataLoadingTemplate.outerHTML = self.listTemplate; - } - } - - if (!self.destroyed) { - var hookListChildren = self.hook.list.list.children; - var onlyDynamicList = hookListChildren.length === 1 && hookListChildren[0].hasAttribute('data-dynamic'); - - if (onlyDynamicList && data.length === 0) { - self.hook.list.hide(); - } - - self.hook.list.setData.call(self.hook.list, data); - } - self.notLoading(); - self.hook.list.currentIndex = 0; - }, - - buildParams: function(params) { - if (!params) return ''; - var paramsArray = Object.keys(params).map(function(param) { - return param + '=' + (params[param] || ''); - }); - return '?' + paramsArray.join('&'); - }, - - destroy: function destroy() { - if (this.timeout) { - clearTimeout(this.timeout); - } - - this.destroyed = true; - - this.hook.trigger.removeEventListener('keydown.dl', this.debounceTriggerWrapper); - this.hook.trigger.removeEventListener('focus', this.debounceTriggerWrapper); - } - }; -}); -},{"../window":2}],2:[function(require,module,exports){ -module.exports = function(callback) { - return (function() { - callback(this); - }).call(null); -}; - -},{}]},{},[1])(1) -}); diff --git a/app/assets/javascripts/droplab/droplab_filter.js b/app/assets/javascripts/droplab/droplab_filter.js deleted file mode 100644 index 9b40a3f20a4..00000000000 --- a/app/assets/javascripts/droplab/droplab_filter.js +++ /dev/null @@ -1,74 +0,0 @@ -/* eslint-disable */ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g=(g.droplab||(g.droplab = {}));g=(g.filter||(g.filter = {}));g.js = f()}})(function(){var define,module,exports;return (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 -1; + var focusEvent = e.type === 'focus'; + if (invalidKeyPressed || this.loading) { + return; + } + if (this.timeout) { + clearTimeout(this.timeout); + } + this.timeout = setTimeout(this.trigger.bind(this, focusEvent), 200); + }, + + trigger: function trigger(getEntireList) { + var config = this.hook.config.droplabAjaxFilter; + var searchValue = this.trigger.value; + if (!config || !config.endpoint || !config.searchKey) { + return; + } + if (config.searchValueFunction) { + searchValue = config.searchValueFunction(); + } + if (config.loadingTemplate && this.hook.list.data === undefined || this.hook.list.data.length === 0) { + var dynamicList = this.hook.list.list.querySelector('[data-dynamic]'); + var loadingTemplate = document.createElement('div'); + loadingTemplate.innerHTML = config.loadingTemplate; + loadingTemplate.setAttribute('data-loading-template', true); + this.listTemplate = dynamicList.outerHTML; + dynamicList.outerHTML = loadingTemplate.outerHTML; + } + if (getEntireList) { + searchValue = ''; + } + if (config.searchKey === searchValue) { + return this.list.show(); + } + this.loading = true; + var params = config.params || {}; + params[config.searchKey] = searchValue; + var self = this; + self.cache = self.cache || {}; + var url = config.endpoint + this.buildParams(params); + var urlCachedData = self.cache[url]; + if (urlCachedData) { + self._loadData(urlCachedData, config, self); + } else { + this._loadUrlData(url).then(function (data) { + self._loadData(data, config, self); + }); + } + }, + + _loadUrlData: function _loadUrlData(url) { + var self = this; + return new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.onreadystatechange = function () { + if (xhr.readyState === XMLHttpRequest.DONE) { + if (xhr.status === 200) { + var data = JSON.parse(xhr.responseText); + self.cache[url] = data; + return resolve(data); + } else { + return reject([xhr.responseText, xhr.status]); + } + } + }; + xhr.send(); + }); + }, + + _loadData: function _loadData(data, config, self) { + var list = self.hook.list; + if (config.loadingTemplate && list.data === undefined || list.data.length === 0) { + var dataLoadingTemplate = list.list.querySelector('[data-loading-template]'); + if (dataLoadingTemplate) { + dataLoadingTemplate.outerHTML = self.listTemplate; + } + } + if (!self.destroyed) { + var hookListChildren = list.list.children; + var onlyDynamicList = hookListChildren.length === 1 && hookListChildren[0].hasAttribute('data-dynamic'); + if (onlyDynamicList && data.length === 0) { + list.hide(); + } + list.setData.call(list, data); + } + self.notLoading(); + list.currentIndex = 0; + }, + + buildParams: function buildParams(params) { + if (!params) return ''; + var paramsArray = Object.keys(params).map(function (param) { + return param + '=' + (params[param] || ''); + }); + return '?' + paramsArray.join('&'); + }, + + destroy: function destroy() { + if (this.timeout) { + clearTimeout(this.timeout); + } + + this.destroyed = true; + this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceTrigger); + this.hook.trigger.removeEventListener('focus', this.eventWrapper.debounceTrigger); + } +}; + +window.droplabAjaxFilter = droplabAjaxFilter; + +exports.default = droplabAjaxFilter; + +/***/ }) + +/******/ }); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGM/ZWM1ZioqIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2FqYXhfZmlsdGVyLmpzIl0sIm5hbWVzIjpbImRyb3BsYWJBamF4RmlsdGVyIiwiaW5pdCIsImhvb2siLCJkZXN0cm95ZWQiLCJub3RMb2FkaW5nIiwiZXZlbnRXcmFwcGVyIiwiZGVib3VuY2VUcmlnZ2VyIiwiYmluZCIsInRyaWdnZXIiLCJhZGRFdmVudExpc3RlbmVyIiwibG9hZGluZyIsImUiLCJOT05fQ0hBUkFDVEVSX0tFWVMiLCJpbnZhbGlkS2V5UHJlc3NlZCIsImluZGV4T2YiLCJkZXRhaWwiLCJ3aGljaCIsImtleUNvZGUiLCJmb2N1c0V2ZW50IiwidHlwZSIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiZ2V0RW50aXJlTGlzdCIsImNvbmZpZyIsInNlYXJjaFZhbHVlIiwidmFsdWUiLCJlbmRwb2ludCIsInNlYXJjaEtleSIsInNlYXJjaFZhbHVlRnVuY3Rpb24iLCJsb2FkaW5nVGVtcGxhdGUiLCJsaXN0IiwiZGF0YSIsInVuZGVmaW5lZCIsImxlbmd0aCIsImR5bmFtaWNMaXN0IiwicXVlcnlTZWxlY3RvciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInNldEF0dHJpYnV0ZSIsImxpc3RUZW1wbGF0ZSIsIm91dGVySFRNTCIsInNob3ciLCJwYXJhbXMiLCJzZWxmIiwiY2FjaGUiLCJ1cmwiLCJidWlsZFBhcmFtcyIsInVybENhY2hlZERhdGEiLCJfbG9hZERhdGEiLCJfbG9hZFVybERhdGEiLCJ0aGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInN0YXR1cyIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsInNlbmQiLCJkYXRhTG9hZGluZ1RlbXBsYXRlIiwiaG9va0xpc3RDaGlsZHJlbiIsImNoaWxkcmVuIiwib25seUR5bmFtaWNMaXN0IiwiaGFzQXR0cmlidXRlIiwiaGlkZSIsInNldERhdGEiLCJjYWxsIiwiY3VycmVudEluZGV4IiwicGFyYW1zQXJyYXkiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwicGFyYW0iLCJqb2luIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ3aW5kb3ciXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQ2hFQSxJQUFNQSxvQkFBb0I7QUFDeEJDLFFBQU0sY0FBU0MsSUFBVCxFQUFlO0FBQ25CLFNBQUtDLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxTQUFLRCxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLRSxVQUFMOztBQUVBLFNBQUtDLFlBQUwsR0FBb0IsRUFBcEI7QUFDQSxTQUFLQSxZQUFMLENBQWtCQyxlQUFsQixHQUFvQyxLQUFLQSxlQUFMLENBQXFCQyxJQUFyQixDQUEwQixJQUExQixDQUFwQztBQUNBLFNBQUtMLElBQUwsQ0FBVU0sT0FBVixDQUFrQkMsZ0JBQWxCLENBQW1DLFlBQW5DLEVBQWlELEtBQUtKLFlBQUwsQ0FBa0JDLGVBQW5FO0FB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QU9BLFFBQVEsR0FBUixJQUFlcEMsT0FBT29DLEtBQVAsS0FBaUIsRUFBaEMsQ0FBUDtBQUNELEtBRmlCLENBQWxCO0FBR0EsV0FBTyxNQUFNSixZQUFZSyxJQUFaLENBQWlCLEdBQWpCLENBQWI7QUFDRCxHQXZIdUI7O0FBeUh4QkMsV0FBUyxTQUFTQSxPQUFULEdBQW1CO0FBQzFCLFFBQUksS0FBSzlELE9BQVQsRUFBa0I7QUFDaEJDLG1CQUFhLEtBQUtELE9BQWxCO0FBQ0Q7O0FBRUQsU0FBS2pCLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxTQUFLRCxJQUFMLENBQVVNLE9BQVYsQ0FBa0IyRSxtQkFBbEIsQ0FBc0MsWUFBdEMsRUFBb0QsS0FBSzlFLFlBQUwsQ0FBa0JDLGVBQXRFO0FBQ0EsU0FBS0osSUFBTCxDQUFVTSxPQUFWLENBQWtCMkUsbUJBQWxCLENBQXNDLE9BQXRDLEVBQStDLEtBQUs5RSxZQUFMLENBQWtCQyxlQUFqRTtBQUNEO0FBakl1QixDQUExQjs7QUFvSUE4RSxPQUFPcEYsaUJBQVAsR0FBMkJBLGlCQUEzQjs7a0JBRWVBLGlCIiwiZmlsZSI6Ii4vZGlzdC9wbHVnaW5zL2FqYXhfZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTEpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGYzNzY3MmI3ZjUyOGI0NzJhNDRjIiwiY29uc3QgZHJvcGxhYkFqYXhGaWx0ZXIgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uKGhvb2spIHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgdGhpcy5ub3RMb2FkaW5nKCk7XG5cbiAgICB0aGlzLmV2ZW50V3JhcHBlciA9IHt9O1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlVHJpZ2dlciA9IHRoaXMuZGVib3VuY2VUcmlnZ2VyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ob29rLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bi5kbCcsIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlVHJpZ2dlcik7XG4gICAgdGhpcy5ob29rLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZVRyaWdnZXIpO1xuXG4gICAgdGhpcy50cmlnZ2VyKHRydWUpO1xuICB9LFxuXG4gIG5vdExvYWRpbmc6IGZ1bmN0aW9uIG5vdExvYWRpbmcoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH0sXG5cbiAgZGVib3VuY2VUcmlnZ2VyOiBmdW5jdGlvbiBkZWJvdW5jZVRyaWdnZXIoZSkge1xuICAgIHZhciBOT05fQ0hBUkFDVEVSX0tFWVMgPSBbMTYsIDE3LCAxOCwgMjAsIDM3LCAzOCwgMzksIDQwLCA5MSwgOTNdO1xuICAgIHZhciBpbnZhbGlkS2V5UHJlc3NlZCA9IE5PTl9DSEFSQUNURVJfS0VZUy5pbmRleE9mKGUuZGV0YWlsLndoaWNoIHx8IGUuZGV0YWlsLmtleUNvZGUpID4gLTE7XG4gICAgdmFyIGZvY3VzRXZlbnQgPSBlLnR5cGUgPT09ICdmb2N1cyc7XG4gICAgaWYgKGludmFsaWRLZXlQcmVzc2VkIHx8IHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLnRyaWdnZXIuYmluZCh0aGlzLCBmb2N1c0V2ZW50KSwgMjAwKTtcbiAgfSxcblxuICB0cmlnZ2VyOiBmdW5jdGlvbiB0cmlnZ2VyKGdldEVudGlyZUxpc3QpIHtcbiAgICB2YXIgY29uZmlnID0gdGhpcy5ob29rLmNvbmZpZy5kcm9wbGFiQWpheEZpbHRlcjtcbiAgICB2YXIgc2VhcmNoVmFsdWUgPSB0aGlzLnRyaWdnZXIudmFsdWU7XG4gICAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5lbmRwb2ludCB8fCAhY29uZmlnLnNlYXJjaEtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlYXJjaFZhbHVlRnVuY3Rpb24pIHtcbiAgICAgIHNlYXJjaFZhbHVlID0gY29uZmlnLnNlYXJjaFZhbHVlRnVuY3Rpb24oKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5sb2FkaW5nVGVtcGxhdGUgJiYgdGhpcy5ob29rLmxpc3QuZGF0YSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmhvb2subGlzdC5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdmFyIGR5bmFtaWNMaXN0ID0gdGhpcy5ob29rLmxpc3QubGlzdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1keW5hbWljXScpO1xuICAgICAgdmFyIGxvYWRpbmdUZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgbG9hZGluZ1RlbXBsYXRlLmlubmVySFRNTCA9IGNvbmZpZy5sb2FkaW5nVGVtcGxhdGU7XG4gICAgICBsb2FkaW5nVGVtcGxhdGUuc2V0QXR0cmlidXRlKCdkYXRhLWxvYWRpbmctdGVtcGxhdGUnLCB0cnVlKTtcbiAgICAgIHRoaXMubGlzdFRlbXBsYXRlID0gZHluYW1pY0xpc3Qub3V0ZXJIVE1MO1xuICAgICAgZHluYW1pY0xpc3Qub3V0ZXJIVE1MID0gbG9hZGluZ1RlbXBsYXRlLm91dGVySFRNTDtcbiAgICB9XG4gICAgaWYgKGdldEVudGlyZUxpc3QpIHtcbiAgICAgIHNlYXJjaFZhbHVlID0gJyc7XG4gICAgfVxuICAgIGlmIChjb25maWcuc2VhcmNoS2V5ID09PSBzZWFyY2hWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubGlzdC5zaG93KCk7XG4gICAgfVxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdmFyIHBhcmFtcyA9IGNvbmZpZy5wYXJhbXMgfHwge307XG4gICAgcGFyYW1zW2NvbmZpZy5zZWFyY2hLZXldID0gc2VhcmNoVmFsdWU7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuY2FjaGUgPSBzZWxmLmNhY2hlIHx8IHt9O1xuICAgIHZhciB1cmwgPSBjb25maWcuZW5kcG9pbnQgKyB0aGlzLmJ1aWxkUGFyYW1zKHBhcmFtcyk7XG4gICAgdmFyIHVybENhY2hlZERhdGEgPSBzZWxmLmNhY2hlW3VybF07XG4gICAgaWYgKHVybENhY2hlZERhdGEpIHtcbiAgICAgIHNlbGYuX2xvYWREYXRhKHVybENhY2hlZERhdGEsIGNvbmZpZywgc2VsZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvYWRVcmxEYXRhKHVybClcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIHNlbGYuX2xvYWREYXRhKGRhdGEsIGNvbmZpZywgc2VsZik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBfbG9hZFVybERhdGE6IGZ1bmN0aW9uIF9sb2FkVXJsRGF0YSh1cmwpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdDtcbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICBzZWxmLmNhY2hlW3VybF0gPSBkYXRhO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoW3hoci5yZXNwb25zZVRleHQsIHhoci5zdGF0dXNdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xuICB9LFxuXG4gIF9sb2FkRGF0YTogZnVuY3Rpb24gX2xvYWREYXRhKGRhdGEsIGNvbmZpZywgc2VsZikge1xuICAgIGNvbnN0IGxpc3QgPSBzZWxmLmhvb2subGlzdDtcbiAgICBpZiAoY29uZmlnLmxvYWRpbmdUZW1wbGF0ZSAmJiBsaXN0LmRhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgbGlzdC5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgZGF0YUxvYWRpbmdUZW1wbGF0ZSA9IGxpc3QubGlzdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1sb2FkaW5nLXRlbXBsYXRlXScpO1xuICAgICAgaWYgKGRhdGFMb2FkaW5nVGVtcGxhdGUpIHtcbiAgICAgICAgZGF0YUxvYWRpbmdUZW1wbGF0ZS5vdXRlckhUTUwgPSBzZWxmLmxpc3RUZW1wbGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFzZWxmLmRlc3Ryb3llZCkge1xuICAgICAgdmFyIGhvb2tMaXN0Q2hpbGRyZW4gPSBsaXN0Lmxpc3QuY2hpbGRyZW47XG4gICAgICB2YXIgb25seUR5bmFtaWNMaXN0ID0gaG9va0xpc3RDaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgaG9va0xpc3RDaGlsZHJlblswXS5oYXNBdHRyaWJ1dGUoJ2RhdGEtZHluYW1pYycpO1xuICAgICAgaWYgKG9ubHlEeW5hbWljTGlzdCAmJiBkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBsaXN0LmhpZGUoKTtcbiAgICAgIH1cbiAgICAgIGxpc3Quc2V0RGF0YS5jYWxsKGxpc3QsIGRhdGEpO1xuICAgIH1cbiAgICBzZWxmLm5vdExvYWRpbmcoKTtcbiAgICBsaXN0LmN1cnJlbnRJbmRleCA9IDA7XG4gIH0sXG5cbiAgYnVpbGRQYXJhbXM6IGZ1bmN0aW9uKHBhcmFtcykge1xuICAgIGlmICghcGFyYW1zKSByZXR1cm4gJyc7XG4gICAgdmFyIHBhcmFtc0FycmF5ID0gT2JqZWN0LmtleXMocGFyYW1zKS5tYXAoZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbSArICc9JyArIChwYXJhbXNbcGFyYW1dIHx8ICcnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gJz8nICsgcGFyYW1zQXJyYXkuam9pbignJicpO1xuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMuaG9vay50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24uZGwnLCB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZVRyaWdnZXIpO1xuICAgIHRoaXMuaG9vay50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VUcmlnZ2VyKTtcbiAgfVxufTtcblxud2luZG93LmRyb3BsYWJBamF4RmlsdGVyID0gZHJvcGxhYkFqYXhGaWx0ZXI7XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3BsYWJBamF4RmlsdGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BsdWdpbnMvYWpheF9maWx0ZXIuanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app/assets/javascripts/droplab/plugins/filter.js b/app/assets/javascripts/droplab/plugins/filter.js new file mode 100644 index 00000000000..183d137b3a3 --- /dev/null +++ b/app/assets/javascripts/droplab/plugins/filter.js @@ -0,0 +1,172 @@ +/******/ (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; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // 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 = 12); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 12: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var droplabFilter = { + keydown: function keydown(e) { + var hiddenCount = 0; + var dataHiddenCount = 0; + + var list = e.detail.hook.list; + var data = list.data; + var value = e.detail.hook.trigger.value.toLowerCase(); + var config = e.detail.hook.config.droplabFilter; + var matches = []; + var filterFunction; + // will only work on dynamically set data + if (!data) { + return; + } + + if (config && config.filterFunction && typeof config.filterFunction === 'function') { + filterFunction = config.filterFunction; + } else { + filterFunction = function filterFunction(o) { + // cheap string search + o.droplab_hidden = o[config.template].toLowerCase().indexOf(value) === -1; + return o; + }; + } + + dataHiddenCount = data.filter(function (o) { + return !o.droplab_hidden; + }).length; + + matches = data.map(function (o) { + return filterFunction(o, value); + }); + + hiddenCount = matches.filter(function (o) { + return !o.droplab_hidden; + }).length; + + if (dataHiddenCount !== hiddenCount) { + list.render(matches); + list.currentIndex = 0; + } + }, + + debounceKeydown: function debounceKeydown(e) { + if ([13, // enter + 16, // shift + 17, // ctrl + 18, // alt + 20, // caps lock + 37, // left arrow + 38, // up arrow + 39, // right arrow + 40, // down arrow + 91, // left window + 92, // right window + 93].indexOf(e.detail.which || e.detail.keyCode) > -1) return; + + if (this.timeout) clearTimeout(this.timeout); + this.timeout = setTimeout(this.keydown.bind(this, e), 200); + }, + + init: function init(hook) { + var config = hook.config.droplabFilter; + + if (!config || !config.template) return; + + this.hook = hook; + + this.eventWrapper = {}; + this.eventWrapper.debounceKeydown = this.debounceKeydown.bind(this); + + this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceKeydown); + }, + + destroy: function destroy() { + this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceKeydown); + + var dynamicList = this.hook.list.list.querySelector('[data-dynamic]'); + if (this.listTemplate && dynamicList) { + dynamicList.outerHTML = this.listTemplate; + } + } +}; + +window.droplabFilter = droplabFilter; + +exports.default = droplabFilter; + +/***/ }) + +/******/ }); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGM/ZWM1ZioiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvZmlsdGVyLmpzIl0sIm5hbWVzIjpbImRyb3BsYWJGaWx0ZXIiLCJrZXlkb3duIiwiZSIsImhpZGRlbkNvdW50IiwiZGF0YUhpZGRlbkNvdW50IiwibGlzdCIsImRldGFpbCIsImhvb2siLCJkYXRhIiwidmFsdWUiLCJ0cmlnZ2VyIiwidG9Mb3dlckNhc2UiLCJjb25maWciLCJtYXRjaGVzIiwiZmlsdGVyRnVuY3Rpb24iLCJvIiwiZHJvcGxhYl9oaWRkZW4iLCJ0ZW1wbGF0ZSIsImluZGV4T2YiLCJmaWx0ZXIiLCJsZW5ndGgiLCJtYXAiLCJyZW5kZXIiLCJjdXJyZW50SW5kZXgiLCJkZWJvdW5jZUtleWRvd24iLCJ3aGljaCIsImtleUNvZGUiLCJ0aW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImJpbmQiLCJpbml0IiwiZXZlbnRXcmFwcGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRlc3Ryb3kiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZHluYW1pY0xpc3QiLCJxdWVyeVNlbGVjdG9yIiwibGlzdFRlbXBsYXRlIiwib3V0ZXJIVE1MIiwid2luZG93Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQTJDLGNBQWM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFF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QixZQUFMLEdBQW9CLEVBQXBCO0FBQ0EsU0FBS0EsWUFBTCxDQUFrQlIsZUFBbEIsR0FBb0MsS0FBS0EsZUFBTCxDQUFxQk0sSUFBckIsQ0FBMEIsSUFBMUIsQ0FBcEM7O0FBRUEsU0FBS3ZCLElBQUwsQ0FBVUcsT0FBVixDQUFrQnVCLGdCQUFsQixDQUFtQyxZQUFuQyxFQUFpRCxLQUFLRCxZQUFMLENBQWtCUixlQUFuRTtBQUNELEdBM0VtQjs7QUE2RXBCVSxXQUFTLFNBQVNBLE9BQVQsR0FBbUI7QUFDMUIsU0FBSzNCLElBQUwsQ0FBVUcsT0FBVixDQUFrQnlCLG1CQUFsQixDQUFzQyxZQUF0QyxFQUFvRCxLQUFLSCxZQUFMLENBQWtCUixlQUF0RTs7QUFFQSxRQUFJWSxjQUFjLEtBQUs3QixJQUFMLENBQVVGLElBQVYsQ0FBZUEsSUFBZixDQUFvQmdDLGFBQXBCLENBQWtDLGdCQUFsQyxDQUFsQjtBQUNBLFFBQUksS0FBS0MsWUFBTCxJQUFxQkYsV0FBekIsRUFBc0M7QUFDcENBLGtCQUFZRyxTQUFaLEdBQXdCLEtBQUtELFlBQTdCO0FBQ0Q7QUFDRjtBQXBGbUIsQ0FBdEI7O0FBdUZBRSxPQUFPeEMsYUFBUCxHQUF1QkEsYUFBdkI7O2tCQUVlQSxhIiwiZmlsZSI6Ii4vZGlzdC9wbHVnaW5zL2ZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEyKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBmMzc2NzJiN2Y1MjhiNDcyYTQ0YyIsImNvbnN0IGRyb3BsYWJGaWx0ZXIgPSB7XG4gIGtleWRvd246IGZ1bmN0aW9uKGUpe1xuICAgIHZhciBoaWRkZW5Db3VudCA9IDA7XG4gICAgdmFyIGRhdGFIaWRkZW5Db3VudCA9IDA7XG5cbiAgICB2YXIgbGlzdCA9IGUuZGV0YWlsLmhvb2subGlzdDtcbiAgICB2YXIgZGF0YSA9IGxpc3QuZGF0YTtcbiAgICB2YXIgdmFsdWUgPSBlLmRldGFpbC5ob29rLnRyaWdnZXIudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgY29uZmlnID0gZS5kZXRhaWwuaG9vay5jb25maWcuZHJvcGxhYkZpbHRlcjtcbiAgICB2YXIgbWF0Y2hlcyA9IFtdO1xuICAgIHZhciBmaWx0ZXJGdW5jdGlvbjtcbiAgICAvLyB3aWxsIG9ubHkgd29yayBvbiBkeW5hbWljYWxseSBzZXQgZGF0YVxuICAgIGlmKCFkYXRhKXtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5maWx0ZXJGdW5jdGlvbiAmJiB0eXBlb2YgY29uZmlnLmZpbHRlckZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmaWx0ZXJGdW5jdGlvbiA9IGNvbmZpZy5maWx0ZXJGdW5jdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsdGVyRnVuY3Rpb24gPSBmdW5jdGlvbihvKXtcbiAgICAgICAgLy8gY2hlYXAgc3RyaW5nIHNlYXJjaFxuICAgICAgICBvLmRyb3BsYWJfaGlkZGVuID0gb1tjb25maWcudGVtcGxhdGVdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih2YWx1ZSkgPT09IC0xO1xuICAgICAgICByZXR1cm4gbztcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZGF0YUhpZGRlbkNvdW50ID0gZGF0YS5maWx0ZXIoZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuICFvLmRyb3BsYWJfaGlkZGVuO1xuICAgIH0pLmxlbmd0aDtcblxuICAgIG1hdGNoZXMgPSBkYXRhLm1hcChmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gZmlsdGVyRnVuY3Rpb24obywgdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaGlkZGVuQ291bnQgPSBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gIW8uZHJvcGxhYl9oaWRkZW47XG4gICAgfSkubGVuZ3RoO1xuXG4gICAgaWYgKGRhdGFIaWRkZW5Db3VudCAhPT0gaGlkZGVuQ291bnQpIHtcbiAgICAgIGxpc3QucmVuZGVyKG1hdGNoZXMpO1xuICAgICAgbGlzdC5jdXJyZW50SW5kZXggPSAwO1xuICAgIH1cbiAgfSxcblxuICBkZWJvdW5jZUtleWRvd246IGZ1bmN0aW9uIGRlYm91bmNlS2V5ZG93bihlKSB7XG4gICAgaWYgKFtcbiAgICAgIDEzLCAvLyBlbnRlclxuICAgICAgMTYsIC8vIHNoaWZ0XG4gICAgICAxNywgLy8gY3RybFxuICAgICAgMTgsIC8vIGFsdFxuICAgICAgMjAsIC8vIGNhcHMgbG9ja1xuICAgICAgMzcsIC8vIGxlZnQgYXJyb3dcbiAgICAgIDM4LCAvLyB1cCBhcnJvd1xuICAgICAgMzksIC8vIHJpZ2h0IGFycm93XG4gICAgICA0MCwgLy8gZG93biBhcnJvd1xuICAgICAgOTEsIC8vIGxlZnQgd2luZG93XG4gICAgICA5MiwgLy8gcmlnaHQgd2luZG93XG4gICAgICA5MywgLy8gc2VsZWN0XG4gICAgXS5pbmRleE9mKGUuZGV0YWlsLndoaWNoIHx8IGUuZGV0YWlsLmtleUNvZGUpID4gLTEpIHJldHVybjtcblxuICAgIGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5rZXlkb3duLmJpbmQodGhpcywgZSksIDIwMCk7XG4gIH0sXG5cbiAgaW5pdDogZnVuY3Rpb24gaW5pdChob29rKSB7XG4gICAgdmFyIGNvbmZpZyA9IGhvb2suY29uZmlnLmRyb3BsYWJGaWx0ZXI7XG5cbiAgICBpZiAoIWNvbmZpZyB8fCAhY29uZmlnLnRlbXBsYXRlKSByZXR1cm47XG5cbiAgICB0aGlzLmhvb2sgPSBob29rO1xuXG4gICAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcbiAgICB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZUtleWRvd24gPSB0aGlzLmRlYm91bmNlS2V5ZG93bi5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5ob29rLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bi5kbCcsIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlS2V5ZG93bik7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmhvb2sudHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duLmRsJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VLZXlkb3duKTtcblxuICAgIHZhciBkeW5hbWljTGlzdCA9IHRoaXMuaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICBpZiAodGhpcy5saXN0VGVtcGxhdGUgJiYgZHluYW1pY0xpc3QpIHtcbiAgICAgIGR5bmFtaWNMaXN0Lm91dGVySFRNTCA9IHRoaXMubGlzdFRlbXBsYXRlO1xuICAgIH1cbiAgfVxufTtcblxud2luZG93LmRyb3BsYWJGaWx0ZXIgPSBkcm9wbGFiRmlsdGVyO1xuXG5leHBvcnQgZGVmYXVsdCBkcm9wbGFiRmlsdGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BsdWdpbnMvZmlsdGVyLmpzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/app/assets/javascripts/droplab/plugins/input_setter.js b/app/assets/javascripts/droplab/plugins/input_setter.js new file mode 100644 index 00000000000..ffc9af0476d --- /dev/null +++ b/app/assets/javascripts/droplab/plugins/input_setter.js @@ -0,0 +1,129 @@ +/******/ (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; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // 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 = 13); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 13: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var droplabInputSetter = { + init: function init(hook) { + this.hook = hook; + this.config = hook.config.droplabInputSetter || (this.hook.config.droplabInputSetter = {}); + + this.eventWrapper = {}; + + this.addEvents(); + }, + addEvents: function addEvents() { + this.eventWrapper.setInputs = this.setInputs.bind(this); + this.hook.list.list.addEventListener('click.dl', this.eventWrapper.setInputs); + }, + removeEvents: function removeEvents() { + this.hook.list.list.removeEventListener('click.dl', this.eventWrapper.setInputs); + }, + setInputs: function setInputs(e) { + var _this = this; + + var selectedItem = e.detail.selected; + + if (!Array.isArray(this.config)) this.config = [this.config]; + + this.config.forEach(function (config) { + return _this.setInput(config, selectedItem); + }); + }, + setInput: function setInput(config, selectedItem) { + var input = config.input || this.hook.trigger; + var newValue = selectedItem.getAttribute(config.valueAttribute); + + if (input.tagName === 'INPUT') { + input.value = newValue; + } else { + input.textContent = newValue; + } + }, + destroy: function destroy() { + this.removeEvents(); + } +}; + +window.droplabInputSetter = droplabInputSetter; + +exports.default = droplabInputSetter; + +/***/ }) + +/******/ }); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGM/ZWM1ZiIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9pbnB1dF9zZXR0ZXIuanMiXSwibmFtZXMiOlsiZHJvcGxhYklucHV0U2V0dGVyIiwiaW5pdCIsImhvb2siLCJjb25maWciLCJldmVudFdyYXBwZXIiLCJhZGRFdmVudHMiLCJzZXRJbnB1dHMiLCJiaW5kIiwibGlzdCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudHMiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZSIsInNlbGVjdGVkSXRlbSIsImRldGFpbCIsInNlbGVjdGVkIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9yRWFjaCIsInNldElucHV0IiwiaW5wdXQiLCJ0cmlnZ2VyIiwibmV3VmFsdWUiLCJnZXRBdHRyaWJ1dGUiLCJ2YWx1ZUF0dHJpYnV0ZSIsInRhZ05hbWUiLCJ2YWx1ZSIsInRleHRDb250ZW50IiwiZGVzdHJveSIsIndpbmRvdyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FDaEVBLElBQU1BLHFCQUFxQjtBQUN6QkMsTUFEeUIsZ0JBQ3BCQyxJQURvQixFQUNkO0FBQ1QsU0FBS0EsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsTUFBTCxHQUFjRCxLQUFLQyxNQUFMLENBQVlILGtCQUFaLEtBQW1DLEtBQUtFLElBQUwsQ0FBVUMsTUFBVixDQUFpQkgsa0JBQWpCLEdBQXNDLEVBQXpFLENBQWQ7O0FBRUEsU0FBS0ksWUFBTCxHQUFvQixFQUFwQjs7QUFFQSxTQUFLQyxTQUFMO0FBQ0QsR0FSd0I7QUFVekJBLFdBVnlCLHVCQVViO0FBQ1YsU0FBS0QsWUFBTCxDQUFrQkUsU0FBbEIsR0FBOEIsS0FBS0EsU0FBTCxDQUFlQyxJQUFmLENBQW9CLElBQXBCLENBQTlCO0FBQ0EsU0FBS0wsSUFBTCxDQUFVTSxJQUFWLENBQWVBLElBQWYsQ0FBb0JDLGdCQUFwQixDQUFxQyxVQUFyQyxFQUFpRCxLQUFLTCxZQUFMLENBQWtCRSxTQUFuRTtBQUNELEdBYndCO0FBZXpCSSxjQWZ5QiwwQkFlVjtBQUNiLFNBQUtSLElBQUwsQ0FBVU0sSUFBVixDQUFlQSxJQUFmLENBQW9CRyxtQkFBcEIsQ0FBd0MsVUFBeEMsRUFBb0QsS0FBS1AsWUFBTCxDQUFrQkUsU0FBdEU7QUFDRCxHQWpCd0I7QUFtQnpCQSxXQW5CeUIscUJBbUJmTSxDQW5CZSxFQW1CWjtBQUFBOztBQUNYLFFBQU1DLGVBQWVELEVBQUVFLE1BQUYsQ0FBU0MsUUFBOUI7O0FBRUEsUUFBSSxDQUFDQyxNQUFNQyxPQUFOLENBQWMsS0FBS2QsTUFBbkIsQ0FBTCxFQUFpQyxLQUFLQSxNQUFMLEdBQWMsQ0FBQyxLQUFLQSxNQUFOLENBQWQ7O0FBRWpDLFNBQUtBLE1BQUwsQ0FBWWUsT0FBWixDQUFvQjtBQUFBLGFBQVUsTUFBS0MsUUFBTCxDQUFjaEIsTUFBZCxFQUFzQlUsWUFBdEIsQ0FBVjtBQUFBLEtBQXBCO0FBQ0QsR0F6QndCO0FBMkJ6Qk0sVUEzQnlCLG9CQTJCaEJoQixNQTNCZ0IsRUEyQlJVLFlBM0JRLEVBMkJNO0FBQzdCLFFBQU1PLFFBQVFqQixPQUFPaUIsS0FBUCxJQUFnQixLQUFLbEIsSUFBTCxDQUFVbUIsT0FBeEM7QUFDQSxRQUFNQyxXQUFXVCxhQUFhVSxZQUFiLENBQTBCcEIsT0FBT3FCLGNBQWpDLENBQWpCOztBQUVBLFFBQUlKLE1BQU1LLE9BQU4sS0FBa0IsT0FBdEIsRUFBK0I7QUFDN0JMLFlBQU1NLEtBQU4sR0FBY0osUUFBZDtBQUNELEtBRkQsTUFFTztBQUNMRixZQUFNTyxXQUFOLEdBQW9CTCxRQUFwQjtBQUNEO0FBQ0YsR0FwQ3dCO0FBc0N6Qk0sU0F0Q3lCLHFCQXNDZjtBQUNSLFNBQUtsQixZQUFMO0FBQ0Q7QUF4Q3dCLENBQTNCOztBQTJDQW1CLE9BQU83QixrQkFBUCxHQUE0QkEsa0JBQTVCOztrQkFFZUEsa0IiLCJmaWxlIjoiLi9kaXN0L3BsdWdpbnMvaW5wdXRfc2V0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTMpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGYzNzY3MmI3ZjUyOGI0NzJhNDRjIiwiY29uc3QgZHJvcGxhYklucHV0U2V0dGVyID0ge1xuICBpbml0KGhvb2spIHtcbiAgICB0aGlzLmhvb2sgPSBob29rO1xuICAgIHRoaXMuY29uZmlnID0gaG9vay5jb25maWcuZHJvcGxhYklucHV0U2V0dGVyIHx8ICh0aGlzLmhvb2suY29uZmlnLmRyb3BsYWJJbnB1dFNldHRlciA9IHt9KTtcblxuICAgIHRoaXMuZXZlbnRXcmFwcGVyID0ge307XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xuICB9LFxuXG4gIGFkZEV2ZW50cygpIHtcbiAgICB0aGlzLmV2ZW50V3JhcHBlci5zZXRJbnB1dHMgPSB0aGlzLnNldElucHV0cy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaG9vay5saXN0Lmxpc3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2suZGwnLCB0aGlzLmV2ZW50V3JhcHBlci5zZXRJbnB1dHMpO1xuICB9LFxuXG4gIHJlbW92ZUV2ZW50cygpIHtcbiAgICB0aGlzLmhvb2subGlzdC5saXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrLmRsJywgdGhpcy5ldmVudFdyYXBwZXIuc2V0SW5wdXRzKTtcbiAgfSxcblxuICBzZXRJbnB1dHMoZSkge1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IGUuZGV0YWlsLnNlbGVjdGVkO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuY29uZmlnKSkgdGhpcy5jb25maWcgPSBbdGhpcy5jb25maWddO1xuXG4gICAgdGhpcy5jb25maWcuZm9yRWFjaChjb25maWcgPT4gdGhpcy5zZXRJbnB1dChjb25maWcsIHNlbGVjdGVkSXRlbSkpO1xuICB9LFxuXG4gIHNldElucHV0KGNvbmZpZywgc2VsZWN0ZWRJdGVtKSB7XG4gICAgY29uc3QgaW5wdXQgPSBjb25maWcuaW5wdXQgfHwgdGhpcy5ob29rLnRyaWdnZXI7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBzZWxlY3RlZEl0ZW0uZ2V0QXR0cmlidXRlKGNvbmZpZy52YWx1ZUF0dHJpYnV0ZSk7XG5cbiAgICBpZiAoaW5wdXQudGFnTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgICAgaW5wdXQudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQudGV4dENvbnRlbnQgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICB9LFxufTtcblxud2luZG93LmRyb3BsYWJJbnB1dFNldHRlciA9IGRyb3BsYWJJbnB1dFNldHRlcjtcblxuZXhwb3J0IGRlZmF1bHQgZHJvcGxhYklucHV0U2V0dGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BsdWdpbnMvaW5wdXRfc2V0dGVyLmpzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/app/assets/javascripts/filtered_search/dropdown_hint.js b/app/assets/javascripts/filtered_search/dropdown_hint.js index 38ff3fb7158..2927ee3ebf3 100644 --- a/app/assets/javascripts/filtered_search/dropdown_hint.js +++ b/app/assets/javascripts/filtered_search/dropdown_hint.js @@ -55,7 +55,6 @@ require('./filtered_search_dropdown'); renderContent() { const dropdownData = []; - [].forEach.call(this.input.closest('.filtered-search-input-container').querySelectorAll('.dropdown-menu'), (dropdownMenu) => { const { icon, hint, tag } = dropdownMenu.dataset; if (icon && hint && tag) { diff --git a/app/assets/javascripts/filtered_search/dropdown_non_user.js b/app/assets/javascripts/filtered_search/dropdown_non_user.js index b3dc3e502c5..9ee805a08cb 100644 --- a/app/assets/javascripts/filtered_search/dropdown_non_user.js +++ b/app/assets/javascripts/filtered_search/dropdown_non_user.js @@ -16,6 +16,7 @@ require('./filtered_search_dropdown'); }, droplabFilter: { filterFunction: gl.DropdownUtils.filterWithSymbol.bind(null, this.symbol, input), + template: 'title', }, }; } diff --git a/app/assets/javascripts/filtered_search/filtered_search_dropdown.js b/app/assets/javascripts/filtered_search/filtered_search_dropdown.js index 134bdc6ad80..8679b7d106f 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_dropdown.js +++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown.js @@ -4,7 +4,7 @@ class FilteredSearchDropdown { constructor(droplab, dropdown, input, filter) { this.droplab = droplab; - this.hookId = input && input.getAttribute('data-id'); + this.hookId = input && input.id; this.input = input; this.filter = filter; this.dropdown = dropdown; diff --git a/app/assets/javascripts/filtered_search/filtered_search_manager.js b/app/assets/javascripts/filtered_search/filtered_search_manager.js index f885932bd91..57ad5a8c49e 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_manager.js +++ b/app/assets/javascripts/filtered_search/filtered_search_manager.js @@ -101,7 +101,7 @@ if (e.keyCode === 13) { const dropdown = this.dropdownManager.mapping[this.dropdownManager.currentDropdown]; const dropdownEl = dropdown.element; - const activeElements = dropdownEl.querySelectorAll('.dropdown-active'); + const activeElements = dropdownEl.querySelectorAll('.droplab-item-active'); e.preventDefault(); diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js index 81d5748191d..5918182bece 100644 --- a/app/assets/javascripts/main.js +++ b/app/assets/javascripts/main.js @@ -88,9 +88,9 @@ import './u2f/util'; // droplab import './droplab/droplab'; -import './droplab/droplab_ajax'; -import './droplab/droplab_ajax_filter'; -import './droplab/droplab_filter'; +import './droplab/plugins/ajax'; +import './droplab/plugins/ajax_filter'; +import './droplab/plugins/filter'; // everything else import './abuse_reports'; diff --git a/app/assets/stylesheets/framework/filters.scss b/app/assets/stylesheets/framework/filters.scss index dd2daa4b872..75dd47cb070 100644 --- a/app/assets/stylesheets/framework/filters.scss +++ b/app/assets/stylesheets/framework/filters.scss @@ -326,7 +326,7 @@ } } -.filter-dropdown-item.dropdown-active { +.filter-dropdown-item.droplab-item-active { .btn { @extend %filter-dropdown-item-btn-hover; } diff --git a/app/views/shared/issuable/_search_bar.html.haml b/app/views/shared/issuable/_search_bar.html.haml index f1730b1791c..bd7e80ea477 100644 --- a/app/views/shared/issuable/_search_bar.html.haml +++ b/app/views/shared/issuable/_search_bar.html.haml @@ -14,7 +14,7 @@ .scroll-container %ul.tokens-container.list-unstyled %li.input-token - %input.form-control.filtered-search{ placeholder: 'Search or filter results...', data: { id: 'filtered-search', 'project-id' => @project.id, 'username-params' => @users.to_json(only: [:id, :username]), 'base-endpoint' => namespace_project_path(@project.namespace, @project) } } + %input#filtered-search.form-control.filtered-search{ placeholder: 'Search or filter results...', data: { 'project-id' => @project.id, 'username-params' => @users.to_json(only: [:id, :username]), 'base-endpoint' => namespace_project_path(@project.namespace, @project) } } = icon('filter') %button.clear-search.hidden{ type: 'button' } = icon('times') diff --git a/spec/features/issues/filtered_search/dropdown_hint_spec.rb b/spec/features/issues/filtered_search/dropdown_hint_spec.rb index 01b657bcada..a5b22247a68 100644 --- a/spec/features/issues/filtered_search/dropdown_hint_spec.rb +++ b/spec/features/issues/filtered_search/dropdown_hint_spec.rb @@ -1,6 +1,6 @@ require 'rails_helper' -describe 'Dropdown hint', js: true, feature: true do +describe 'Dropdown hint', :js, :feature do include FilteredSearchHelpers include WaitForAjax @@ -9,10 +9,6 @@ describe 'Dropdown hint', js: true, feature: true do let(:filtered_search) { find('.filtered-search') } let(:js_dropdown_hint) { '#js-dropdown-hint' } - def dropdown_hint_size - page.all('#js-dropdown-hint .filter-dropdown .filter-dropdown-item').size - end - def click_hint(text) find('#js-dropdown-hint .filter-dropdown .filter-dropdown-item', text: text).click end @@ -46,14 +42,16 @@ describe 'Dropdown hint', js: true, feature: true do it 'does not filter `Keep typing and press Enter`' do filtered_search.set('randomtext') - expect(page).to have_css(js_dropdown_hint, text: 'Keep typing and press Enter', visible: false) - expect(dropdown_hint_size).to eq(0) + hint_dropdown = find(js_dropdown_hint) + + expect(hint_dropdown).to have_content('Keep typing and press Enter') + expect(hint_dropdown).to have_selector('.filter-dropdown .filter-dropdown-item', count: 0) end it 'filters with text' do filtered_search.set('a') - expect(dropdown_hint_size).to eq(3) + expect(find(js_dropdown_hint)).to have_selector('.filter-dropdown .filter-dropdown-item', count: 3) end end diff --git a/spec/features/issues/filtered_search/dropdown_label_spec.rb b/spec/features/issues/filtered_search/dropdown_label_spec.rb index b192064b693..d7d71b0eba9 100644 --- a/spec/features/issues/filtered_search/dropdown_label_spec.rb +++ b/spec/features/issues/filtered_search/dropdown_label_spec.rb @@ -28,10 +28,6 @@ describe 'Dropdown label', js: true, feature: true do filter_dropdown.find('.filter-dropdown-item', text: text).click end - def dropdown_label_size - filter_dropdown.all('.filter-dropdown-item').size - end - def clear_search_field find('.filtered-search-input-container .clear-search').click end @@ -81,7 +77,7 @@ describe 'Dropdown label', js: true, feature: true do filtered_search.set('label:') expect(filter_dropdown).to have_content(bug_label.title) - expect(dropdown_label_size).to eq(1) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 1) end end @@ -97,7 +93,8 @@ describe 'Dropdown label', js: true, feature: true do expect(filter_dropdown.find('.filter-dropdown-item', text: bug_label.title)).to be_visible expect(filter_dropdown.find('.filter-dropdown-item', text: uppercase_label.title)).to be_visible - expect(dropdown_label_size).to eq(2) + + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 2) clear_search_field init_label_search @@ -106,14 +103,14 @@ describe 'Dropdown label', js: true, feature: true do expect(filter_dropdown.find('.filter-dropdown-item', text: bug_label.title)).to be_visible expect(filter_dropdown.find('.filter-dropdown-item', text: uppercase_label.title)).to be_visible - expect(dropdown_label_size).to eq(2) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 2) end it 'filters by multiple words with or without symbol' do filtered_search.send_keys('Hig') expect(filter_dropdown.find('.filter-dropdown-item', text: two_words_label.title)).to be_visible - expect(dropdown_label_size).to eq(1) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 1) clear_search_field init_label_search @@ -121,14 +118,14 @@ describe 'Dropdown label', js: true, feature: true do filtered_search.send_keys('~Hig') expect(filter_dropdown.find('.filter-dropdown-item', text: two_words_label.title)).to be_visible - expect(dropdown_label_size).to eq(1) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 1) end it 'filters by multiple words containing single quotes with or without symbol' do filtered_search.send_keys('won\'t') expect(filter_dropdown.find('.filter-dropdown-item', text: wont_fix_single_label.title)).to be_visible - expect(dropdown_label_size).to eq(1) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 1) clear_search_field init_label_search @@ -136,14 +133,14 @@ describe 'Dropdown label', js: true, feature: true do filtered_search.send_keys('~won\'t') expect(filter_dropdown.find('.filter-dropdown-item', text: wont_fix_single_label.title)).to be_visible - expect(dropdown_label_size).to eq(1) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 1) end it 'filters by multiple words containing double quotes with or without symbol' do filtered_search.send_keys('won"t') expect(filter_dropdown.find('.filter-dropdown-item', text: wont_fix_label.title)).to be_visible - expect(dropdown_label_size).to eq(1) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 1) clear_search_field init_label_search @@ -151,14 +148,14 @@ describe 'Dropdown label', js: true, feature: true do filtered_search.send_keys('~won"t') expect(filter_dropdown.find('.filter-dropdown-item', text: wont_fix_label.title)).to be_visible - expect(dropdown_label_size).to eq(1) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 1) end it 'filters by special characters with or without symbol' do filtered_search.send_keys('^+') expect(filter_dropdown.find('.filter-dropdown-item', text: special_label.title)).to be_visible - expect(dropdown_label_size).to eq(1) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 1) clear_search_field init_label_search @@ -166,7 +163,7 @@ describe 'Dropdown label', js: true, feature: true do filtered_search.send_keys('~^+') expect(filter_dropdown.find('.filter-dropdown-item', text: special_label.title)).to be_visible - expect(dropdown_label_size).to eq(1) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 1) end end @@ -280,13 +277,13 @@ describe 'Dropdown label', js: true, feature: true do create(:label, project: project, title: 'bug-label') init_label_search - expect(dropdown_label_size).to eq(1) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 1) create(:label, project: project) clear_search_field init_label_search - expect(dropdown_label_size).to eq(1) + expect(filter_dropdown).to have_selector('.filter-dropdown-item', count: 1) end end end diff --git a/spec/features/issues/filtered_search/search_bar_spec.rb b/spec/features/issues/filtered_search/search_bar_spec.rb index 59244d65eec..3b2b6347bc0 100644 --- a/spec/features/issues/filtered_search/search_bar_spec.rb +++ b/spec/features/issues/filtered_search/search_bar_spec.rb @@ -26,7 +26,7 @@ describe 'Search bar', js: true, feature: true do filtered_search.native.send_keys(:down) page.within '#js-dropdown-hint' do - expect(page).to have_selector('.dropdown-active') + expect(page).to have_selector('.droplab-item-active') end end @@ -79,28 +79,30 @@ describe 'Search bar', js: true, feature: true do filtered_search.set('author') - expect(page.all('#js-dropdown-hint .filter-dropdown .filter-dropdown-item').size).to eq(1) + expect(find('#js-dropdown-hint')).to have_selector('.filter-dropdown .filter-dropdown-item', count: 1) find('.filtered-search-input-container .clear-search').click filtered_search.click - expect(page.all('#js-dropdown-hint .filter-dropdown .filter-dropdown-item').size).to eq(original_size) + expect(find('#js-dropdown-hint')).to have_selector('.filter-dropdown .filter-dropdown-item', count: original_size) end it 'resets the dropdown filters' do + filtered_search.click + + hint_offset = get_left_style(find('#js-dropdown-hint')['style']) + filtered_search.set('a') - hint_style = page.find('#js-dropdown-hint')['style'] - hint_offset = get_left_style(hint_style) filtered_search.set('author:') - expect(page.all('#js-dropdown-hint .filter-dropdown .filter-dropdown-item').size).to eq(0) + find('#js-dropdown-hint', visible: false) find('.filtered-search-input-container .clear-search').click filtered_search.click - expect(page.all('#js-dropdown-hint .filter-dropdown .filter-dropdown-item').size).to be > 0 - expect(get_left_style(page.find('#js-dropdown-hint')['style'])).to eq(hint_offset) + expect(find('#js-dropdown-hint')).to have_selector('.filter-dropdown .filter-dropdown-item', count: 4) + expect(get_left_style(find('#js-dropdown-hint')['style'])).to eq(hint_offset) end end end -- cgit v1.2.1 From 06df12e999f68b80c86e8c6d841918a53b80f0c2 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Sat, 25 Mar 2017 12:20:49 +0000 Subject: update droplab --- app/assets/javascripts/droplab/droplab.js | 584 ++++++++++----------- app/assets/javascripts/droplab/plugins/ajax.js | 8 +- .../javascripts/droplab/plugins/ajax_filter.js | 8 +- app/assets/javascripts/droplab/plugins/filter.js | 10 +- .../javascripts/droplab/plugins/input_setter.js | 8 +- .../javascripts/filtered_search/dropdown_hint.js | 4 +- .../filtered_search/dropdown_non_user.js | 6 +- .../javascripts/filtered_search/dropdown_user.js | 4 +- .../filtered_search_dropdown_manager.js | 2 +- app/assets/javascripts/main.js | 6 - 10 files changed, 299 insertions(+), 341 deletions(-) diff --git a/app/assets/javascripts/droplab/droplab.js b/app/assets/javascripts/droplab/droplab.js index b5d6a43b83f..d1d8447d165 100644 --- a/app/assets/javascripts/droplab/droplab.js +++ b/app/assets/javascripts/droplab/droplab.js @@ -63,7 +63,7 @@ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 9); +/******/ return __webpack_require__(__webpack_require__.s = 14); /******/ }) /************************************************************************/ /******/ ([ @@ -81,14 +81,10 @@ var DATA_DROPDOWN = 'data-dropdown'; var SELECTED_CLASS = 'droplab-item-selected'; var ACTIVE_CLASS = 'droplab-item-active'; -var constants = { - DATA_TRIGGER: DATA_TRIGGER, - DATA_DROPDOWN: DATA_DROPDOWN, - SELECTED_CLASS: SELECTED_CLASS, - ACTIVE_CLASS: ACTIVE_CLASS -}; - -exports.default = constants; +exports.DATA_TRIGGER = DATA_TRIGGER; +exports.DATA_DROPDOWN = DATA_DROPDOWN; +exports.SELECTED_CLASS = SELECTED_CLASS; +exports.ACTIVE_CLASS = ACTIVE_CLASS; /***/ }), /* 1 */ @@ -151,7 +147,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _dropdown = __webpack_require__(6); +var _dropdown = __webpack_require__(9); var _dropdown2 = _interopRequireDefault(_dropdown); @@ -189,14 +185,6 @@ Object.defineProperty(exports, "__esModule", { var _constants = __webpack_require__(0); -var _constants2 = _interopRequireDefault(_constants); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var DATA_TRIGGER = _constants2.default.DATA_TRIGGER, - DATA_DROPDOWN = _constants2.default.DATA_DROPDOWN; - - var utils = { toCamelCase: function toCamelCase(attr) { return this.camelize(attr.split('-').slice(1).join(' ')); @@ -222,7 +210,7 @@ var utils = { }, isDropDownParts: function isDropDownParts(target) { if (!target || target.tagName === 'HTML') return false; - return target.hasAttribute(DATA_TRIGGER) || target.hasAttribute(DATA_DROPDOWN); + return target.hasAttribute(_constants.DATA_TRIGGER) || target.hasAttribute(_constants.DATA_DROPDOWN); } }; @@ -239,325 +227,192 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = function () { - var DropLab = function DropLab(hook, list) { - if (!this instanceof DropLab) return new DropLab(hook); +__webpack_require__(1); - this.ready = false; - this.hooks = []; - this.queuedData = []; - this.config = {}; +var _hook_button = __webpack_require__(10); - this.eventWrapper = {}; +var _hook_button2 = _interopRequireDefault(_hook_button); - if (!hook) return this.loadStatic(); - this.addHook(hook, list); - this.init(); - }; +var _hook_input = __webpack_require__(11); - Object.assign(DropLab.prototype, { - loadStatic: function loadStatic() { - var dropdownTriggers = [].slice.apply(document.querySelectorAll('[' + DATA_TRIGGER + ']')); - this.addHooks(dropdownTriggers).init(); - }, - - addData: function addData() { - var args = [].slice.apply(arguments); - this.applyArgs(args, '_addData'); - }, - - setData: function setData() { - var args = [].slice.apply(arguments); - this.applyArgs(args, '_setData'); - }, - - destroy: function destroy() { - this.hooks.forEach(function (hook) { - return hook.destroy(); - }); - this.hooks = []; - this.removeEvents(); - }, - - applyArgs: function applyArgs(args, methodName) { - if (this.ready) return this[methodName].apply(this, args); - - this.queuedData = this.queuedData || []; - this.queuedData.push(args); - }, - - _addData: function _addData(trigger, data) { - this._processData(trigger, data, 'addData'); - }, - - _setData: function _setData(trigger, data) { - this._processData(trigger, data, 'setData'); - }, - - _processData: function _processData(trigger, data, methodName) { - this.hooks.forEach(function (hook) { - if (Array.isArray(trigger)) hook.list[methodName](trigger); - - if (hook.trigger.id === trigger) hook.list[methodName](data); - }); - }, - - addEvents: function addEvents() { - this.eventWrapper.documentClicked = this.documentClicked.bind(this); - document.addEventListener('click', this.eventWrapper.documentClicked); - }, - - documentClicked: function documentClicked(e) { - var thisTag = e.target; - - if (thisTag.tagName !== 'UL') thisTag = _utils2.default.closest(thisTag, 'UL'); - if (_utils2.default.isDropDownParts(thisTag, this.hooks) || _utils2.default.isDropDownParts(e.target, this.hooks)) return; - - this.hooks.forEach(function (hook) { - return hook.list.hide(); - }); - }, - - removeEvents: function removeEvents() { - document.removeEventListener('click', this.eventWrapper.documentClicked); - }, - - changeHookList: function changeHookList(trigger, list, plugins, config) { - var _this = this; - - var availableTrigger = typeof trigger === 'string' ? document.getElementById(trigger) : trigger; - - this.hooks.forEach(function (hook, i) { - hook.list.list.dataset.dropdownActive = false; - - if (hook.trigger !== availableTrigger) return; - - hook.destroy(); - _this.hooks.splice(i, 1); - _this.addHook(availableTrigger, list, plugins, config); - }); - }, - - addHook: function addHook(hook, list, plugins, config) { - var availableHook = typeof hook === 'string' ? document.querySelector(hook) : hook; - var availableList = void 0; - - if (typeof list === 'string') { - availableList = document.querySelector(list); - } else if (list instanceof Element) { - availableList = list; - } else { - availableList = document.querySelector(hook.dataset[_utils2.default.toCamelCase(DATA_TRIGGER)]); - } +var _hook_input2 = _interopRequireDefault(_hook_input); - availableList.dataset.dropdownActive = true; +var _utils = __webpack_require__(3); - var HookObject = availableHook.tagName === 'INPUT' ? _hook_input2.default : _hook_button2.default; - this.hooks.push(new HookObject(availableHook, availableList, plugins, config)); +var _utils2 = _interopRequireDefault(_utils); - return this; - }, +var _keyboard = __webpack_require__(12); - addHooks: function addHooks(hooks, plugins, config) { - var _this2 = this; +var _keyboard2 = _interopRequireDefault(_keyboard); - hooks.forEach(function (hook) { - return _this2.addHook(hook, null, plugins, config); - }); - return this; - }, +var _constants = __webpack_require__(0); - setConfig: function setConfig(obj) { - this.config = obj; - }, +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - fireReady: function fireReady() { - var readyEvent = new CustomEvent('ready.dl', { - detail: { - dropdown: this - } - }); - document.dispatchEvent(readyEvent); +var DropLab = function DropLab() { + this.ready = false; + this.hooks = []; + this.queuedData = []; + this.config = {}; - this.ready = true; - }, + this.eventWrapper = {}; +}; - init: function init() { - var _this3 = this; +Object.assign(DropLab.prototype, { + loadStatic: function loadStatic() { + var dropdownTriggers = [].slice.apply(document.querySelectorAll('[' + _constants.DATA_TRIGGER + ']')); + this.addHooks(dropdownTriggers); + }, - this.addEvents(); + addData: function addData() { + var args = [].slice.apply(arguments); + this.applyArgs(args, '_addData'); + }, - this.fireReady(); + setData: function setData() { + var args = [].slice.apply(arguments); + this.applyArgs(args, '_setData'); + }, - this.queuedData.forEach(function (data) { - return _this3.addData(data); - }); - this.queuedData = []; + destroy: function destroy() { + this.hooks.forEach(function (hook) { + return hook.destroy(); + }); + this.hooks = []; + this.removeEvents(); + }, - return this; - } - }); + applyArgs: function applyArgs(args, methodName) { + if (this.ready) return this[methodName].apply(this, args); - return DropLab; -}; + this.queuedData = this.queuedData || []; + this.queuedData.push(args); + }, -__webpack_require__(1); + _addData: function _addData(trigger, data) { + this._processData(trigger, data, 'addData'); + }, -var _hook_button = __webpack_require__(7); + _setData: function _setData(trigger, data) { + this._processData(trigger, data, 'setData'); + }, -var _hook_button2 = _interopRequireDefault(_hook_button); + _processData: function _processData(trigger, data, methodName) { + this.hooks.forEach(function (hook) { + if (Array.isArray(trigger)) hook.list[methodName](trigger); -var _hook_input = __webpack_require__(8); + if (hook.trigger.id === trigger) hook.list[methodName](data); + }); + }, -var _hook_input2 = _interopRequireDefault(_hook_input); + addEvents: function addEvents() { + this.eventWrapper.documentClicked = this.documentClicked.bind(this); + document.addEventListener('click', this.eventWrapper.documentClicked); + }, -var _utils = __webpack_require__(3); + documentClicked: function documentClicked(e) { + var thisTag = e.target; -var _utils2 = _interopRequireDefault(_utils); + if (thisTag.tagName !== 'UL') thisTag = _utils2.default.closest(thisTag, 'UL'); + if (_utils2.default.isDropDownParts(thisTag, this.hooks) || _utils2.default.isDropDownParts(e.target, this.hooks)) return; -var _constants = __webpack_require__(0); + this.hooks.forEach(function (hook) { + return hook.list.hide(); + }); + }, -var _constants2 = _interopRequireDefault(_constants); + removeEvents: function removeEvents() { + document.removeEventListener('click', this.eventWrapper.documentClicked); + }, -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + changeHookList: function changeHookList(trigger, list, plugins, config) { + var _this = this; -var DATA_TRIGGER = _constants2.default.DATA_TRIGGER; + var availableTrigger = typeof trigger === 'string' ? document.getElementById(trigger) : trigger; -; + this.hooks.forEach(function (hook, i) { + hook.list.list.dataset.dropdownActive = false; -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { + if (hook.trigger !== availableTrigger) return; -"use strict"; + hook.destroy(); + _this.hooks.splice(i, 1); + _this.addHook(availableTrigger, list, plugins, config); + }); + }, + addHook: function addHook(hook, list, plugins, config) { + var availableHook = typeof hook === 'string' ? document.querySelector(hook) : hook; + var availableList = void 0; -Object.defineProperty(exports, "__esModule", { - value: true -}); + if (typeof list === 'string') { + availableList = document.querySelector(list); + } else if (list instanceof Element) { + availableList = list; + } else { + availableList = document.querySelector(hook.dataset[_utils2.default.toCamelCase(_constants.DATA_TRIGGER)]); + } -exports.default = function () { - var currentKey; - var currentFocus; - var isUpArrow = false; - var isDownArrow = false; - var removeHighlight = function removeHighlight(list) { - var itemElements = Array.prototype.slice.call(list.list.querySelectorAll('li:not(.divider)'), 0); - var listItems = []; - for (var i = 0; i < itemElements.length; i++) { - var listItem = itemElements[i]; - listItem.classList.remove(_constants2.default.ACTIVE_CLASS); + availableList.dataset.dropdownActive = true; - if (listItem.style.display !== 'none') { - listItems.push(listItem); - } - } - return listItems; - }; + var HookObject = availableHook.tagName === 'INPUT' ? _hook_input2.default : _hook_button2.default; + this.hooks.push(new HookObject(availableHook, availableList, plugins, config)); - var setMenuForArrows = function setMenuForArrows(list) { - var listItems = removeHighlight(list); - if (list.currentIndex > 0) { - if (!listItems[list.currentIndex - 1]) { - list.currentIndex = list.currentIndex - 1; - } + return this; + }, - if (listItems[list.currentIndex - 1]) { - var el = listItems[list.currentIndex - 1]; - var filterDropdownEl = el.closest('.filter-dropdown'); - el.classList.add(_constants2.default.ACTIVE_CLASS); + addHooks: function addHooks(hooks, plugins, config) { + var _this2 = this; - if (filterDropdownEl) { - var filterDropdownBottom = filterDropdownEl.offsetHeight; - var elOffsetTop = el.offsetTop - 30; + hooks.forEach(function (hook) { + return _this2.addHook(hook, null, plugins, config); + }); + return this; + }, - if (elOffsetTop > filterDropdownBottom) { - filterDropdownEl.scrollTop = elOffsetTop - filterDropdownBottom; - } - } - } - } - }; + setConfig: function setConfig(obj) { + this.config = obj; + }, - var mousedown = function mousedown(e) { - var list = e.detail.hook.list; - removeHighlight(list); - list.show(); - list.currentIndex = 0; - isUpArrow = false; - isDownArrow = false; - }; - var selectItem = function selectItem(list) { - var listItems = removeHighlight(list); - var currentItem = listItems[list.currentIndex - 1]; - var listEvent = new CustomEvent('click.dl', { + fireReady: function fireReady() { + var readyEvent = new CustomEvent('ready.dl', { detail: { - list: list, - selected: currentItem, - data: currentItem.dataset + dropdown: this } }); - list.list.dispatchEvent(listEvent); - list.hide(); - }; + document.dispatchEvent(readyEvent); - var keydown = function keydown(e) { - var typedOn = e.target; - var list = e.detail.hook.list; - var currentIndex = list.currentIndex; - isUpArrow = false; - isDownArrow = false; + this.ready = true; + }, - if (e.detail.which) { - currentKey = e.detail.which; - if (currentKey === 13) { - selectItem(e.detail.hook.list); - return; - } - if (currentKey === 38) { - isUpArrow = true; - } - if (currentKey === 40) { - isDownArrow = true; - } - } else if (e.detail.key) { - currentKey = e.detail.key; - if (currentKey === 'Enter') { - selectItem(e.detail.hook.list); - return; - } - if (currentKey === 'ArrowUp') { - isUpArrow = true; - } - if (currentKey === 'ArrowDown') { - isDownArrow = true; - } - } - if (isUpArrow) { - currentIndex--; - } - if (isDownArrow) { - currentIndex++; - } - if (currentIndex < 0) { - currentIndex = 0; - } - list.currentIndex = currentIndex; - setMenuForArrows(e.detail.hook.list); - }; + init: function init(hook, list, plugins, config) { + var _this3 = this; - document.addEventListener('mousedown.dl', mousedown); - document.addEventListener('keydown.dl', keydown); -}; + hook ? this.addHook(hook, list, plugins, config) : this.loadStatic(); -var _constants = __webpack_require__(0); + this.addEvents(); -var _constants2 = _interopRequireDefault(_constants); + (0, _keyboard2.default)(); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + this.fireReady(); + + this.queuedData.forEach(function (data) { + return _this3.addData(data); + }); + this.queuedData = []; + + return this; + } +}); + +exports.default = DropLab; /***/ }), -/* 6 */ +/* 5 */, +/* 6 */, +/* 7 */, +/* 8 */, +/* 9 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -577,8 +432,6 @@ var _utils2 = _interopRequireDefault(_utils); var _constants = __webpack_require__(0); -var _constants2 = _interopRequireDefault(_constants); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -635,14 +488,14 @@ Object.assign(DropDown.prototype, (_Object$assign = { addSelectedClass: function addSelectedClass(selected) { this.removeSelectedClasses(); - selected.classList.add(_constants2.default.SELECTED_CLASS); + selected.classList.add(_constants.SELECTED_CLASS); }, removeSelectedClasses: function removeSelectedClasses() { var items = this.items || this.getItems(); items.forEach(function (item) { - item.classList.remove(_constants2.default.SELECTED_CLASS); + return item.classList.remove(_constants.SELECTED_CLASS); }); }, @@ -716,7 +569,7 @@ Object.assign(DropDown.prototype, (_Object$assign = { exports.default = DropDown; /***/ }), -/* 7 */ +/* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -802,7 +655,7 @@ Object.assign(HookButton.prototype, { exports.default = HookButton; /***/ }), -/* 8 */ +/* 11 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -943,7 +796,7 @@ Object.assign(HookInput.prototype, { exports.default = HookInput; /***/ }), -/* 9 */ +/* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -953,31 +806,148 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _droplab = __webpack_require__(4); +var _constants = __webpack_require__(0); -var _droplab2 = _interopRequireDefault(_droplab); +var Keyboard = function Keyboard() { + var currentKey; + var currentFocus; + var isUpArrow = false; + var isDownArrow = false; + var removeHighlight = function removeHighlight(list) { + var itemElements = Array.prototype.slice.call(list.list.querySelectorAll('li:not(.divider)'), 0); + var listItems = []; + for (var i = 0; i < itemElements.length; i++) { + var listItem = itemElements[i]; + listItem.classList.remove(_constants.ACTIVE_CLASS); -var _constants = __webpack_require__(0); + if (listItem.style.display !== 'none') { + listItems.push(listItem); + } + } + return listItems; + }; -var _constants2 = _interopRequireDefault(_constants); + var setMenuForArrows = function setMenuForArrows(list) { + var listItems = removeHighlight(list); + if (list.currentIndex > 0) { + if (!listItems[list.currentIndex - 1]) { + list.currentIndex = list.currentIndex - 1; + } -var _keyboard = __webpack_require__(5); + if (listItems[list.currentIndex - 1]) { + var el = listItems[list.currentIndex - 1]; + var filterDropdownEl = el.closest('.filter-dropdown'); + el.classList.add(_constants.ACTIVE_CLASS); -var _keyboard2 = _interopRequireDefault(_keyboard); + if (filterDropdownEl) { + var filterDropdownBottom = filterDropdownEl.offsetHeight; + var elOffsetTop = el.offsetTop - 30; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + if (elOffsetTop > filterDropdownBottom) { + filterDropdownEl.scrollTop = elOffsetTop - filterDropdownBottom; + } + } + } + } + }; -var DATA_TRIGGER = _constants2.default.DATA_TRIGGER; -var keyboard = (0, _keyboard2.default)(); + var mousedown = function mousedown(e) { + var list = e.detail.hook.list; + removeHighlight(list); + list.show(); + list.currentIndex = 0; + isUpArrow = false; + isDownArrow = false; + }; + var selectItem = function selectItem(list) { + var listItems = removeHighlight(list); + var currentItem = listItems[list.currentIndex - 1]; + var listEvent = new CustomEvent('click.dl', { + detail: { + list: list, + selected: currentItem, + data: currentItem.dataset + } + }); + list.list.dispatchEvent(listEvent); + list.hide(); + }; + + var keydown = function keydown(e) { + var typedOn = e.target; + var list = e.detail.hook.list; + var currentIndex = list.currentIndex; + isUpArrow = false; + isDownArrow = false; + + if (e.detail.which) { + currentKey = e.detail.which; + if (currentKey === 13) { + selectItem(e.detail.hook.list); + return; + } + if (currentKey === 38) { + isUpArrow = true; + } + if (currentKey === 40) { + isDownArrow = true; + } + } else if (e.detail.key) { + currentKey = e.detail.key; + if (currentKey === 'Enter') { + selectItem(e.detail.hook.list); + return; + } + if (currentKey === 'ArrowUp') { + isUpArrow = true; + } + if (currentKey === 'ArrowDown') { + isDownArrow = true; + } + } + if (isUpArrow) { + currentIndex--; + } + if (isDownArrow) { + currentIndex++; + } + if (currentIndex < 0) { + currentIndex = 0; + } + list.currentIndex = currentIndex; + setMenuForArrows(e.detail.hook.list); + }; -var setup = function setup() { - window.DropLab = (0, _droplab2.default)(); + document.addEventListener('mousedown.dl', mousedown); + document.addEventListener('keydown.dl', keydown); }; -setup(); +exports.default = Keyboard; + +/***/ }), +/* 13 */, +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + -exports.default = setup; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _droplab = __webpack_require__(4); + +Object.keys(_droplab).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _droplab[key]; + } + }); +}); /***/ }) /******/ ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2N1c3RvbS1ldmVudC1wb2x5ZmlsbC9jdXN0b20tZXZlbnQtcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2suanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzLmpzIiwid2VicGFjazovLy8uL3NyYy9kcm9wbGFiLmpzIiwid2VicGFjazovLy8uL3NyYy9rZXlib2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2tfYnV0dG9uLmpzIiwid2VicGFjazovLy8uL3NyYy9ob29rX2lucHV0LmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJEQVRBX1RSSUdHRVIiLCJEQVRBX0RST1BET1dOIiwiU0VMRUNURURfQ0xBU1MiLCJBQ1RJVkVfQ0xBU1MiLCJjb25zdGFudHMiLCJIb29rIiwidHJpZ2dlciIsImxpc3QiLCJwbHVnaW5zIiwiY29uZmlnIiwidHlwZSIsImV2ZW50IiwiaWQiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJhZGRFdmVudHMiLCJjb25zdHJ1Y3RvciIsInV0aWxzIiwidG9DYW1lbENhc2UiLCJhdHRyIiwiY2FtZWxpemUiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsInQiLCJzIiwiZCIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBsYWNlIiwiUmVnRXhwIiwic3RyIiwibGV0dGVyIiwiaW5kZXgiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwiY2xvc2VzdCIsInRoaXNUYWciLCJzdG9wVGFnIiwidGFnTmFtZSIsInBhcmVudE5vZGUiLCJpc0Ryb3BEb3duUGFydHMiLCJ0YXJnZXQiLCJoYXNBdHRyaWJ1dGUiLCJEcm9wTGFiIiwiaG9vayIsInJlYWR5IiwiaG9va3MiLCJxdWV1ZWREYXRhIiwiZXZlbnRXcmFwcGVyIiwibG9hZFN0YXRpYyIsImFkZEhvb2siLCJpbml0IiwiZHJvcGRvd25UcmlnZ2VycyIsImFwcGx5IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiYWRkSG9va3MiLCJhZGREYXRhIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5QXJncyIsInNldERhdGEiLCJkZXN0cm95IiwiZm9yRWFjaCIsInJlbW92ZUV2ZW50cyIsIm1ldGhvZE5hbWUiLCJwdXNoIiwiX2FkZERhdGEiLCJkYXRhIiwiX3Byb2Nlc3NEYXRhIiwiX3NldERhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJkb2N1bWVudENsaWNrZWQiLCJiaW5kIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJoaWRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNoYW5nZUhvb2tMaXN0IiwiYXZhaWxhYmxlVHJpZ2dlciIsImdldEVsZW1lbnRCeUlkIiwiaSIsImRhdGFzZXQiLCJkcm9wZG93bkFjdGl2ZSIsInNwbGljZSIsImF2YWlsYWJsZUhvb2siLCJxdWVyeVNlbGVjdG9yIiwiYXZhaWxhYmxlTGlzdCIsIkVsZW1lbnQiLCJIb29rT2JqZWN0Iiwic2V0Q29uZmlnIiwib2JqIiwiZmlyZVJlYWR5IiwicmVhZHlFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZHJvcGRvd24iLCJkaXNwYXRjaEV2ZW50IiwiY3VycmVudEtleSIsImN1cnJlbnRGb2N1cyIsImlzVXBBcnJvdyIsImlzRG93bkFycm93IiwicmVtb3ZlSGlnaGxpZ2h0IiwiaXRlbUVsZW1lbnRzIiwibGlzdEl0ZW1zIiwibGVuZ3RoIiwibGlzdEl0ZW0iLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJzdHlsZSIsImRpc3BsYXkiLCJzZXRNZW51Rm9yQXJyb3dzIiwiY3VycmVudEluZGV4IiwiZWwiLCJmaWx0ZXJEcm9wZG93bkVsIiwiYWRkIiwiZmlsdGVyRHJvcGRvd25Cb3R0b20iLCJvZmZzZXRIZWlnaHQiLCJlbE9mZnNldFRvcCIsIm9mZnNldFRvcCIsInNjcm9sbFRvcCIsIm1vdXNlZG93biIsInNob3ciLCJzZWxlY3RJdGVtIiwiY3VycmVudEl0ZW0iLCJsaXN0RXZlbnQiLCJzZWxlY3RlZCIsImtleWRvd24iLCJ0eXBlZE9uIiwid2hpY2giLCJrZXkiLCJEcm9wRG93biIsImhpZGRlbiIsIml0ZW1zIiwiZ2V0SXRlbXMiLCJpbml0VGVtcGxhdGVTdHJpbmciLCJpbml0aWFsU3RhdGUiLCJpbm5lckhUTUwiLCJ0ZW1wbGF0ZVN0cmluZyIsIm91dGVySFRNTCIsImNsaWNrRXZlbnQiLCJhZGRTZWxlY3RlZENsYXNzIiwicHJldmVudERlZmF1bHQiLCJyZW1vdmVTZWxlY3RlZENsYXNzZXMiLCJpdGVtIiwidG9nZ2xlIiwicmVuZGVyIiwiY29uY2F0IiwiY2hpbGRyZW4iLCJtYXAiLCJyZW5kZXJDaGlsZHJlbiIsInJlbmRlcmFibGVMaXN0IiwiaHRtbCIsInRlbXBsYXRlIiwiY3JlYXRlRWxlbWVudCIsInNldEltYWdlc1NyYyIsImZpcnN0Q2hpbGQiLCJkcm9wbGFiX2hpZGRlbiIsImltYWdlcyIsImltYWdlIiwic3JjIiwiZ2V0QXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwiSG9va0J1dHRvbiIsImFkZFBsdWdpbnMiLCJjcmVhdGUiLCJwbHVnaW4iLCJjbGlja2VkIiwiYnV0dG9uRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsInJlc3RvcmVJbml0aWFsU3RhdGUiLCJyZW1vdmVQbHVnaW5zIiwiSG9va0lucHV0IiwiaW5wdXQiLCJrZXl1cCIsImhhc1JlbW92ZWRFdmVudHMiLCJpbnB1dEV2ZW50IiwidGV4dCIsInZhbHVlIiwibW91c2VFdmVudCIsImtleUV2ZW50IiwiZXZlbnROYW1lIiwia2V5Ym9hcmQiLCJzZXR1cCIsIndpbmRvdyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNoRUEsSUFBTUEsZUFBZSx1QkFBckI7QUFDQSxJQUFNQyxnQkFBZ0IsZUFBdEI7QUFDQSxJQUFNQyxpQkFBaUIsdUJBQXZCO0FBQ0EsSUFBTUMsZUFBZSxxQkFBckI7O0FBRUEsSUFBTUMsWUFBWTtBQUNoQkosNEJBRGdCO0FBRWhCQyw4QkFGZ0I7QUFHaEJDLGdDQUhnQjtBQUloQkM7QUFKZ0IsQ0FBbEI7O2tCQU9lQyxTOzs7Ozs7QUNaZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQztBQUNuQzs7Ozs7Ozs7Ozs7Ozs7QUMzQ0E7Ozs7OztBQUVBLElBQUlDLE9BQU8sU0FBUEEsSUFBTyxDQUFTQyxPQUFULEVBQWtCQyxJQUFsQixFQUF3QkMsT0FBeEIsRUFBaUNDLE1BQWpDLEVBQXdDO0FBQ2pELE9BQUtILE9BQUwsR0FBZUEsT0FBZjtBQUNBLE9BQUtDLElBQUwsR0FBWSx1QkFBYUEsSUFBYixDQUFaO0FBQ0EsT0FBS0csSUFBTCxHQUFZLE1BQVo7QUFDQSxPQUFLQyxLQUFMLEdBQWEsT0FBYjtBQUNBLE9BQUtILE9BQUwsR0FBZUEsV0FBVyxFQUExQjtBQUNBLE9BQUtDLE1BQUwsR0FBY0EsVUFBVSxFQUF4QjtBQUNBLE9BQUtHLEVBQUwsR0FBVU4sUUFBUU0sRUFBbEI7QUFDRCxDQVJEOztBQVVBQyxPQUFPQyxNQUFQLENBQWNULEtBQUtVLFNBQW5CLEVBQThCOztBQUU1QkMsYUFBVyxxQkFBVSxDQUFFLENBRks7O0FBSTVCQyxlQUFhWjtBQUplLENBQTlCOztrQkFPZUEsSTs7Ozs7Ozs7Ozs7OztBQ25CZjs7Ozs7O0lBRVFMLFksdUJBQUFBLFk7SUFBY0MsYSx1QkFBQUEsYTs7O0FBRXRCLElBQU1pQixRQUFRO0FBQ1pDLGFBRFksdUJBQ0FDLElBREEsRUFDTTtBQUNoQixXQUFPLEtBQUtDLFFBQUwsQ0FBY0QsS0FBS0UsS0FBTCxDQUFXLEdBQVgsRUFBZ0JDLEtBQWhCLENBQXNCLENBQXRCLEVBQXlCQyxJQUF6QixDQUE4QixHQUE5QixDQUFkLENBQVA7QUFDRCxHQUhXO0FBS1pDLEdBTFksYUFLVkMsQ0FMVSxFQUtQQyxDQUxPLEVBS0o7QUFDTixTQUFLLElBQU1DLENBQVgsSUFBZ0JELENBQWhCLEVBQW1CO0FBQ2pCLFVBQUlkLE9BQU9FLFNBQVAsQ0FBaUJjLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ0gsQ0FBckMsRUFBd0NDLENBQXhDLENBQUosRUFBZ0Q7QUFDOUNGLFlBQUlBLEVBQUVLLE9BQUYsQ0FBVSxJQUFJQyxNQUFKLFFBQWdCSixDQUFoQixTQUF1QixHQUF2QixDQUFWLEVBQXVDRCxFQUFFQyxDQUFGLENBQXZDLENBQUo7QUFDRDtBQUNGO0FBQ0QsV0FBT0YsQ0FBUDtBQUNELEdBWlc7QUFjWkwsVUFkWSxvQkFjSFksR0FkRyxFQWNFO0FBQ1osV0FBT0EsSUFBSUYsT0FBSixDQUFZLHFCQUFaLEVBQW1DLFVBQUNHLE1BQUQsRUFBU0MsS0FBVCxFQUFtQjtBQUMzRCxhQUFPQSxVQUFVLENBQVYsR0FBY0QsT0FBT0UsV0FBUCxFQUFkLEdBQXFDRixPQUFPRyxXQUFQLEVBQTVDO0FBQ0QsS0FGTSxFQUVKTixPQUZJLENBRUksTUFGSixFQUVZLEVBRlosQ0FBUDtBQUdELEdBbEJXO0FBb0JaTyxTQXBCWSxtQkFvQkpDLE9BcEJJLEVBb0JLQyxPQXBCTCxFQW9CYztBQUN4QixXQUFPRCxXQUFXQSxRQUFRRSxPQUFSLEtBQW9CRCxPQUEvQixJQUEwQ0QsUUFBUUUsT0FBUixLQUFvQixNQUFyRSxFQUE2RTtBQUMzRUYsZ0JBQVVBLFFBQVFHLFVBQWxCO0FBQ0Q7QUFDRCxXQUFPSCxPQUFQO0FBQ0QsR0F6Qlc7QUEyQlpJLGlCQTNCWSwyQkEyQklDLE1BM0JKLEVBMkJZO0FBQ3RCLFFBQUksQ0FBQ0EsTUFBRCxJQUFXQSxPQUFPSCxPQUFQLEtBQW1CLE1BQWxDLEVBQTBDLE9BQU8sS0FBUDtBQUMxQyxXQUFPRyxPQUFPQyxZQUFQLENBQW9CN0MsWUFBcEIsS0FBcUM0QyxPQUFPQyxZQUFQLENBQW9CNUMsYUFBcEIsQ0FBNUM7QUFDRDtBQTlCVyxDQUFkOztrQkFrQ2VpQixLOzs7Ozs7Ozs7Ozs7O2tCQy9CQSxZQUFZO0FBQ3pCLE1BQUk0QixVQUFVLFNBQVZBLE9BQVUsQ0FBU0MsSUFBVCxFQUFleEMsSUFBZixFQUFxQjtBQUNqQyxRQUFJLENBQUMsSUFBRCxZQUFpQnVDLE9BQXJCLEVBQThCLE9BQU8sSUFBSUEsT0FBSixDQUFZQyxJQUFaLENBQVA7O0FBRTlCLFNBQUtDLEtBQUwsR0FBYSxLQUFiO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLEVBQWI7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLEVBQWxCO0FBQ0EsU0FBS3pDLE1BQUwsR0FBYyxFQUFkOztBQUVBLFNBQUswQyxZQUFMLEdBQW9CLEVBQXBCOztBQUVBLFFBQUksQ0FBQ0osSUFBTCxFQUFXLE9BQU8sS0FBS0ssVUFBTCxFQUFQO0FBQ1gsU0FBS0MsT0FBTCxDQUFhTixJQUFiLEVBQW1CeEMsSUFBbkI7QUFDQSxTQUFLK0MsSUFBTDtBQUNELEdBYkQ7O0FBZUF6QyxTQUFPQyxNQUFQLENBQWNnQyxRQUFRL0IsU0FBdEIsRUFBaUM7QUFDL0JxQyxnQkFBWSxzQkFBVTtBQUNwQixVQUFJRyxtQkFBbUIsR0FBR2hDLEtBQUgsQ0FBU2lDLEtBQVQsQ0FBZUMsU0FBU0MsZ0JBQVQsT0FBOEIxRCxZQUE5QixPQUFmLENBQXZCO0FBQ0EsV0FBSzJELFFBQUwsQ0FBY0osZ0JBQWQsRUFBZ0NELElBQWhDO0FBQ0QsS0FKOEI7O0FBTS9CTSxhQUFTLG1CQUFZO0FBQ25CLFVBQUlDLE9BQU8sR0FBR3RDLEtBQUgsQ0FBU2lDLEtBQVQsQ0FBZU0sU0FBZixDQUFYO0FBQ0EsV0FBS0MsU0FBTCxDQUFlRixJQUFmLEVBQXFCLFVBQXJCO0FBQ0QsS0FUOEI7O0FBVy9CRyxhQUFTLG1CQUFXO0FBQ2xCLFVBQUlILE9BQU8sR0FBR3RDLEtBQUgsQ0FBU2lDLEtBQVQsQ0FBZU0sU0FBZixDQUFYO0FBQ0EsV0FBS0MsU0FBTCxDQUFlRixJQUFmLEVBQXFCLFVBQXJCO0FBQ0QsS0FkOEI7O0FBZ0IvQkksYUFBUyxtQkFBVztBQUNsQixXQUFLaEIsS0FBTCxDQUFXaUIsT0FBWCxDQUFtQjtBQUFBLGVBQVFuQixLQUFLa0IsT0FBTCxFQUFSO0FBQUEsT0FBbkI7QUFDQSxXQUFLaEIsS0FBTCxHQUFhLEVBQWI7QUFDQSxXQUFLa0IsWUFBTDtBQUNELEtBcEI4Qjs7QUFzQi9CSixlQUFXLG1CQUFTRixJQUFULEVBQWVPLFVBQWYsRUFBMkI7QUFDcEMsVUFBSSxLQUFLcEIsS0FBVCxFQUFnQixPQUFPLEtBQUtvQixVQUFMLEVBQWlCWixLQUFqQixDQUF1QixJQUF2QixFQUE2QkssSUFBN0IsQ0FBUDs7QUFFaEIsV0FBS1gsVUFBTCxHQUFrQixLQUFLQSxVQUFMLElBQW1CLEVBQXJDO0FBQ0EsV0FBS0EsVUFBTCxDQUFnQm1CLElBQWhCLENBQXFCUixJQUFyQjtBQUNELEtBM0I4Qjs7QUE2Qi9CUyxjQUFVLGtCQUFTaEUsT0FBVCxFQUFrQmlFLElBQWxCLEVBQXdCO0FBQ2hDLFdBQUtDLFlBQUwsQ0FBa0JsRSxPQUFsQixFQUEyQmlFLElBQTNCLEVBQWlDLFNBQWpDO0FBQ0QsS0EvQjhCOztBQWlDL0JFLGNBQVUsa0JBQVNuRSxPQUFULEVBQWtCaUUsSUFBbEIsRUFBd0I7QUFDaEMsV0FBS0MsWUFBTCxDQUFrQmxFLE9BQWxCLEVBQTJCaUUsSUFBM0IsRUFBaUMsU0FBakM7QUFDRCxLQW5DOEI7O0FBcUMvQkMsa0JBQWMsc0JBQVNsRSxPQUFULEVBQWtCaUUsSUFBbEIsRUFBd0JILFVBQXhCLEVBQW9DO0FBQ2hELFdBQUtuQixLQUFMLENBQVdpQixPQUFYLENBQW1CLFVBQUNuQixJQUFELEVBQVU7QUFDM0IsWUFBSTJCLE1BQU1DLE9BQU4sQ0FBY3JFLE9BQWQsQ0FBSixFQUE0QnlDLEtBQUt4QyxJQUFMLENBQVU2RCxVQUFWLEVBQXNCOUQsT0FBdEI7O0FBRTVCLFlBQUl5QyxLQUFLekMsT0FBTCxDQUFhTSxFQUFiLEtBQW9CTixPQUF4QixFQUFpQ3lDLEtBQUt4QyxJQUFMLENBQVU2RCxVQUFWLEVBQXNCRyxJQUF0QjtBQUNsQyxPQUpEO0FBS0QsS0EzQzhCOztBQTZDL0J2RCxlQUFXLHFCQUFXO0FBQ3BCLFdBQUttQyxZQUFMLENBQWtCeUIsZUFBbEIsR0FBb0MsS0FBS0EsZUFBTCxDQUFxQkMsSUFBckIsQ0FBMEIsSUFBMUIsQ0FBcEM7QUFDQXBCLGVBQVNxQixnQkFBVCxDQUEwQixPQUExQixFQUFtQyxLQUFLM0IsWUFBTCxDQUFrQnlCLGVBQXJEO0FBQ0QsS0FoRDhCOztBQWtEL0JBLHFCQUFpQix5QkFBU0csQ0FBVCxFQUFZO0FBQzNCLFVBQUl4QyxVQUFVd0MsRUFBRW5DLE1BQWhCOztBQUVBLFVBQUlMLFFBQVFFLE9BQVIsS0FBb0IsSUFBeEIsRUFBOEJGLFVBQVUsZ0JBQU1ELE9BQU4sQ0FBY0MsT0FBZCxFQUF1QixJQUF2QixDQUFWO0FBQzlCLFVBQUksZ0JBQU1JLGVBQU4sQ0FBc0JKLE9BQXRCLEVBQStCLEtBQUtVLEtBQXBDLEtBQThDLGdCQUFNTixlQUFOLENBQXNCb0MsRUFBRW5DLE1BQXhCLEVBQWdDLEtBQUtLLEtBQXJDLENBQWxELEVBQStGOztBQUUvRixXQUFLQSxLQUFMLENBQVdpQixPQUFYLENBQW1CO0FBQUEsZUFBUW5CLEtBQUt4QyxJQUFMLENBQVV5RSxJQUFWLEVBQVI7QUFBQSxPQUFuQjtBQUNELEtBekQ4Qjs7QUEyRC9CYixrQkFBYyx3QkFBVTtBQUN0QlYsZUFBU3dCLG1CQUFULENBQTZCLE9BQTdCLEVBQXNDLEtBQUs5QixZQUFMLENBQWtCeUIsZUFBeEQ7QUFDRCxLQTdEOEI7O0FBK0QvQk0sb0JBQWdCLHdCQUFTNUUsT0FBVCxFQUFrQkMsSUFBbEIsRUFBd0JDLE9BQXhCLEVBQWlDQyxNQUFqQyxFQUF5QztBQUFBOztBQUN2RCxVQUFNMEUsbUJBQW9CLE9BQU83RSxPQUFQLEtBQW1CLFFBQW5CLEdBQThCbUQsU0FBUzJCLGNBQVQsQ0FBd0I5RSxPQUF4QixDQUE5QixHQUFpRUEsT0FBM0Y7O0FBR0EsV0FBSzJDLEtBQUwsQ0FBV2lCLE9BQVgsQ0FBbUIsVUFBQ25CLElBQUQsRUFBT3NDLENBQVAsRUFBYTtBQUM5QnRDLGFBQUt4QyxJQUFMLENBQVVBLElBQVYsQ0FBZStFLE9BQWYsQ0FBdUJDLGNBQXZCLEdBQXdDLEtBQXhDOztBQUVBLFlBQUl4QyxLQUFLekMsT0FBTCxLQUFpQjZFLGdCQUFyQixFQUF1Qzs7QUFFdkNwQyxhQUFLa0IsT0FBTDtBQUNBLGNBQUtoQixLQUFMLENBQVd1QyxNQUFYLENBQWtCSCxDQUFsQixFQUFxQixDQUFyQjtBQUNBLGNBQUtoQyxPQUFMLENBQWE4QixnQkFBYixFQUErQjVFLElBQS9CLEVBQXFDQyxPQUFyQyxFQUE4Q0MsTUFBOUM7QUFDRCxPQVJEO0FBU0QsS0E1RThCOztBQThFL0I0QyxhQUFTLGlCQUFTTixJQUFULEVBQWV4QyxJQUFmLEVBQXFCQyxPQUFyQixFQUE4QkMsTUFBOUIsRUFBc0M7QUFDN0MsVUFBTWdGLGdCQUFnQixPQUFPMUMsSUFBUCxLQUFnQixRQUFoQixHQUEyQlUsU0FBU2lDLGFBQVQsQ0FBdUIzQyxJQUF2QixDQUEzQixHQUEwREEsSUFBaEY7QUFDQSxVQUFJNEMsc0JBQUo7O0FBRUEsVUFBSSxPQUFPcEYsSUFBUCxLQUFnQixRQUFwQixFQUE4QjtBQUM1Qm9GLHdCQUFnQmxDLFNBQVNpQyxhQUFULENBQXVCbkYsSUFBdkIsQ0FBaEI7QUFDRCxPQUZELE1BRU8sSUFBSUEsZ0JBQWdCcUYsT0FBcEIsRUFBNkI7QUFDbENELHdCQUFnQnBGLElBQWhCO0FBQ0QsT0FGTSxNQUVBO0FBQ0xvRix3QkFBZ0JsQyxTQUFTaUMsYUFBVCxDQUF1QjNDLEtBQUt1QyxPQUFMLENBQWEsZ0JBQU1uRSxXQUFOLENBQWtCbkIsWUFBbEIsQ0FBYixDQUF2QixDQUFoQjtBQUNEOztBQUVEMkYsb0JBQWNMLE9BQWQsQ0FBc0JDLGNBQXRCLEdBQXVDLElBQXZDOztBQUVBLFVBQU1NLGFBQWFKLGNBQWNoRCxPQUFkLEtBQTBCLE9BQTFCLCtDQUFuQjtBQUNBLFdBQUtRLEtBQUwsQ0FBV29CLElBQVgsQ0FBZ0IsSUFBSXdCLFVBQUosQ0FBZUosYUFBZixFQUE4QkUsYUFBOUIsRUFBNkNuRixPQUE3QyxFQUFzREMsTUFBdEQsQ0FBaEI7O0FBRUEsYUFBTyxJQUFQO0FBQ0QsS0FoRzhCOztBQWtHL0JrRCxjQUFVLGtCQUFTVixLQUFULEVBQWdCekMsT0FBaEIsRUFBeUJDLE1BQXpCLEVBQWlDO0FBQUE7O0FBQ3pDd0MsWUFBTWlCLE9BQU4sQ0FBYztBQUFBLGVBQVEsT0FBS2IsT0FBTCxDQUFhTixJQUFiLEVBQW1CLElBQW5CLEVBQXlCdkMsT0FBekIsRUFBa0NDLE1BQWxDLENBQVI7QUFBQSxPQUFkO0FBQ0EsYUFBTyxJQUFQO0FBQ0QsS0FyRzhCOztBQXVHL0JxRixlQUFXLG1CQUFTQyxHQUFULEVBQWE7QUFDdEIsV0FBS3RGLE1BQUwsR0FBY3NGLEdBQWQ7QUFDRCxLQXpHOEI7O0FBMkcvQkMsZUFBVyxxQkFBVztBQUNwQixVQUFNQyxhQUFhLElBQUlDLFdBQUosQ0FBZ0IsVUFBaEIsRUFBNEI7QUFDN0NDLGdCQUFRO0FBQ05DLG9CQUFVO0FBREo7QUFEcUMsT0FBNUIsQ0FBbkI7QUFLQTNDLGVBQVM0QyxhQUFULENBQXVCSixVQUF2Qjs7QUFFQSxXQUFLakQsS0FBTCxHQUFhLElBQWI7QUFDRCxLQXBIOEI7O0FBc0gvQk0sVUFBTSxnQkFBWTtBQUFBOztBQUNoQixXQUFLdEMsU0FBTDs7QUFFQSxXQUFLZ0YsU0FBTDs7QUFFQSxXQUFLOUMsVUFBTCxDQUFnQmdCLE9BQWhCLENBQXdCO0FBQUEsZUFBUSxPQUFLTixPQUFMLENBQWFXLElBQWIsQ0FBUjtBQUFBLE9BQXhCO0FBQ0EsV0FBS3JCLFVBQUwsR0FBa0IsRUFBbEI7O0FBRUEsYUFBTyxJQUFQO0FBQ0Q7QUEvSDhCLEdBQWpDOztBQWtJQSxTQUFPSixPQUFQO0FBQ0QsQzs7QUExSkQ7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUNBLElBQU05QyxlQUFlLG9CQUFVQSxZQUEvQjs7QUFxSkMsQzs7Ozs7Ozs7Ozs7OztrQkN4SmMsWUFBWTtBQUN6QixNQUFJc0csVUFBSjtBQUNBLE1BQUlDLFlBQUo7QUFDQSxNQUFJQyxZQUFZLEtBQWhCO0FBQ0EsTUFBSUMsY0FBYyxLQUFsQjtBQUNBLE1BQUlDLGtCQUFrQixTQUFTQSxlQUFULENBQXlCbkcsSUFBekIsRUFBK0I7QUFDbkQsUUFBSW9HLGVBQWVqQyxNQUFNM0QsU0FBTixDQUFnQlEsS0FBaEIsQ0FBc0JPLElBQXRCLENBQTJCdkIsS0FBS0EsSUFBTCxDQUFVbUQsZ0JBQVYsQ0FBMkIsa0JBQTNCLENBQTNCLEVBQTJFLENBQTNFLENBQW5CO0FBQ0EsUUFBSWtELFlBQVksRUFBaEI7QUFDQSxTQUFJLElBQUl2QixJQUFJLENBQVosRUFBZUEsSUFBSXNCLGFBQWFFLE1BQWhDLEVBQXdDeEIsR0FBeEMsRUFBNkM7QUFDM0MsVUFBSXlCLFdBQVdILGFBQWF0QixDQUFiLENBQWY7QUFDQXlCLGVBQVNDLFNBQVQsQ0FBbUJDLE1BQW5CLENBQTBCLG9CQUFVN0csWUFBcEM7O0FBRUEsVUFBSTJHLFNBQVNHLEtBQVQsQ0FBZUMsT0FBZixLQUEyQixNQUEvQixFQUF1QztBQUNyQ04sa0JBQVV2QyxJQUFWLENBQWV5QyxRQUFmO0FBQ0Q7QUFDRjtBQUNELFdBQU9GLFNBQVA7QUFDRCxHQVpEOztBQWNBLE1BQUlPLG1CQUFtQixTQUFTQSxnQkFBVCxDQUEwQjVHLElBQTFCLEVBQWdDO0FBQ3JELFFBQUlxRyxZQUFZRixnQkFBZ0JuRyxJQUFoQixDQUFoQjtBQUNBLFFBQUdBLEtBQUs2RyxZQUFMLEdBQWtCLENBQXJCLEVBQXVCO0FBQ3JCLFVBQUcsQ0FBQ1IsVUFBVXJHLEtBQUs2RyxZQUFMLEdBQWtCLENBQTVCLENBQUosRUFBbUM7QUFDakM3RyxhQUFLNkcsWUFBTCxHQUFvQjdHLEtBQUs2RyxZQUFMLEdBQWtCLENBQXRDO0FBQ0Q7O0FBRUQsVUFBSVIsVUFBVXJHLEtBQUs2RyxZQUFMLEdBQWtCLENBQTVCLENBQUosRUFBb0M7QUFDbEMsWUFBSUMsS0FBS1QsVUFBVXJHLEtBQUs2RyxZQUFMLEdBQWtCLENBQTVCLENBQVQ7QUFDQSxZQUFJRSxtQkFBbUJELEdBQUcvRSxPQUFILENBQVcsa0JBQVgsQ0FBdkI7QUFDQStFLFdBQUdOLFNBQUgsQ0FBYVEsR0FBYixDQUFpQixvQkFBVXBILFlBQTNCOztBQUVBLFlBQUltSCxnQkFBSixFQUFzQjtBQUNwQixjQUFJRSx1QkFBdUJGLGlCQUFpQkcsWUFBNUM7QUFDQSxjQUFJQyxjQUFjTCxHQUFHTSxTQUFILEdBQWUsRUFBakM7O0FBRUEsY0FBSUQsY0FBY0Ysb0JBQWxCLEVBQXdDO0FBQ3RDRiw2QkFBaUJNLFNBQWpCLEdBQTZCRixjQUFjRixvQkFBM0M7QUFDRDtBQUNGO0FBQ0Y7QUFDRjtBQUNGLEdBdEJEOztBQXdCQSxNQUFJSyxZQUFZLFNBQVNBLFNBQVQsQ0FBbUI5QyxDQUFuQixFQUFzQjtBQUNwQyxRQUFJeEUsT0FBT3dFLEVBQUVvQixNQUFGLENBQVNwRCxJQUFULENBQWN4QyxJQUF6QjtBQUNBbUcsb0JBQWdCbkcsSUFBaEI7QUFDQUEsU0FBS3VILElBQUw7QUFDQXZILFNBQUs2RyxZQUFMLEdBQW9CLENBQXBCO0FBQ0FaLGdCQUFZLEtBQVo7QUFDQUMsa0JBQWMsS0FBZDtBQUNELEdBUEQ7QUFRQSxNQUFJc0IsYUFBYSxTQUFTQSxVQUFULENBQW9CeEgsSUFBcEIsRUFBMEI7QUFDekMsUUFBSXFHLFlBQVlGLGdCQUFnQm5HLElBQWhCLENBQWhCO0FBQ0EsUUFBSXlILGNBQWNwQixVQUFVckcsS0FBSzZHLFlBQUwsR0FBa0IsQ0FBNUIsQ0FBbEI7QUFDQSxRQUFJYSxZQUFZLElBQUkvQixXQUFKLENBQWdCLFVBQWhCLEVBQTRCO0FBQzFDQyxjQUFRO0FBQ041RixjQUFNQSxJQURBO0FBRU4ySCxrQkFBVUYsV0FGSjtBQUdOekQsY0FBTXlELFlBQVkxQztBQUhaO0FBRGtDLEtBQTVCLENBQWhCO0FBT0EvRSxTQUFLQSxJQUFMLENBQVU4RixhQUFWLENBQXdCNEIsU0FBeEI7QUFDQTFILFNBQUt5RSxJQUFMO0FBQ0QsR0FaRDs7QUFjQSxNQUFJbUQsVUFBVSxTQUFTQSxPQUFULENBQWlCcEQsQ0FBakIsRUFBbUI7QUFDL0IsUUFBSXFELFVBQVVyRCxFQUFFbkMsTUFBaEI7QUFDQSxRQUFJckMsT0FBT3dFLEVBQUVvQixNQUFGLENBQVNwRCxJQUFULENBQWN4QyxJQUF6QjtBQUNBLFFBQUk2RyxlQUFlN0csS0FBSzZHLFlBQXhCO0FBQ0FaLGdCQUFZLEtBQVo7QUFDQUMsa0JBQWMsS0FBZDs7QUFFQSxRQUFHMUIsRUFBRW9CLE1BQUYsQ0FBU2tDLEtBQVosRUFBa0I7QUFDaEIvQixtQkFBYXZCLEVBQUVvQixNQUFGLENBQVNrQyxLQUF0QjtBQUNBLFVBQUcvQixlQUFlLEVBQWxCLEVBQXFCO0FBQ25CeUIsbUJBQVdoRCxFQUFFb0IsTUFBRixDQUFTcEQsSUFBVCxDQUFjeEMsSUFBekI7QUFDQTtBQUNEO0FBQ0QsVUFBRytGLGVBQWUsRUFBbEIsRUFBc0I7QUFDcEJFLG9CQUFZLElBQVo7QUFDRDtBQUNELFVBQUdGLGVBQWUsRUFBbEIsRUFBc0I7QUFDcEJHLHNCQUFjLElBQWQ7QUFDRDtBQUNGLEtBWkQsTUFZTyxJQUFHMUIsRUFBRW9CLE1BQUYsQ0FBU21DLEdBQVosRUFBaUI7QUFDdEJoQyxtQkFBYXZCLEVBQUVvQixNQUFGLENBQVNtQyxHQUF0QjtBQUNBLFVBQUdoQyxlQUFlLE9BQWxCLEVBQTBCO0FBQ3hCeUIsbUJBQVdoRCxFQUFFb0IsTUFBRixDQUFTcEQsSUFBVCxDQUFjeEMsSUFBekI7QUFDQTtBQUNEO0FBQ0QsVUFBRytGLGVBQWUsU0FBbEIsRUFBNkI7QUFDM0JFLG9CQUFZLElBQVo7QUFDRDtBQUNELFVBQUdGLGVBQWUsV0FBbEIsRUFBK0I7QUFDN0JHLHNCQUFjLElBQWQ7QUFDRDtBQUNGO0FBQ0QsUUFBR0QsU0FBSCxFQUFhO0FBQUVZO0FBQWlCO0FBQ2hDLFFBQUdYLFdBQUgsRUFBZTtBQUFFVztBQUFpQjtBQUNsQyxRQUFHQSxlQUFlLENBQWxCLEVBQW9CO0FBQUVBLHFCQUFlLENBQWY7QUFBbUI7QUFDekM3RyxTQUFLNkcsWUFBTCxHQUFvQkEsWUFBcEI7QUFDQUQscUJBQWlCcEMsRUFBRW9CLE1BQUYsQ0FBU3BELElBQVQsQ0FBY3hDLElBQS9CO0FBQ0QsR0FyQ0Q7O0FBdUNBa0QsV0FBU3FCLGdCQUFULENBQTBCLGNBQTFCLEVBQTBDK0MsU0FBMUM7QUFDQXBFLFdBQVNxQixnQkFBVCxDQUEwQixZQUExQixFQUF3Q3FELE9BQXhDO0FBQ0QsQzs7QUE1R0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUVBLElBQUlJLFdBQVcsU0FBWEEsUUFBVyxDQUFTaEksSUFBVCxFQUFlO0FBQzVCLE9BQUs2RyxZQUFMLEdBQW9CLENBQXBCO0FBQ0EsT0FBS29CLE1BQUwsR0FBYyxJQUFkO0FBQ0EsT0FBS2pJLElBQUwsR0FBWSxPQUFPQSxJQUFQLEtBQWdCLFFBQWhCLEdBQTJCa0QsU0FBU2lDLGFBQVQsQ0FBdUJuRixJQUF2QixDQUEzQixHQUEwREEsSUFBdEU7QUFDQSxPQUFLa0ksS0FBTCxHQUFhLEVBQWI7O0FBRUEsT0FBS3RGLFlBQUwsR0FBb0IsRUFBcEI7O0FBRUEsT0FBS3VGLFFBQUw7QUFDQSxPQUFLQyxrQkFBTDtBQUNBLE9BQUszSCxTQUFMOztBQUVBLE9BQUs0SCxZQUFMLEdBQW9CckksS0FBS3NJLFNBQXpCO0FBQ0QsQ0FiRDs7QUFlQWhJLE9BQU9DLE1BQVAsQ0FBY3lILFNBQVN4SCxTQUF2QjtBQUNFMkgsWUFBVSxvQkFBVztBQUNuQixTQUFLRCxLQUFMLEdBQWEsR0FBR2xILEtBQUgsQ0FBU08sSUFBVCxDQUFjLEtBQUt2QixJQUFMLENBQVVtRCxnQkFBVixDQUEyQixJQUEzQixDQUFkLENBQWI7QUFDQSxXQUFPLEtBQUsrRSxLQUFaO0FBQ0QsR0FKSDs7QUFNRUUsc0JBQW9CLDhCQUFXO0FBQzdCLFFBQUlGLFFBQVEsS0FBS0EsS0FBTCxJQUFjLEtBQUtDLFFBQUwsRUFBMUI7O0FBRUEsUUFBSUksaUJBQWlCLEVBQXJCO0FBQ0EsUUFBSUwsTUFBTTVCLE1BQU4sR0FBZSxDQUFuQixFQUFzQmlDLGlCQUFpQkwsTUFBTUEsTUFBTTVCLE1BQU4sR0FBZSxDQUFyQixFQUF3QmtDLFNBQXpDO0FBQ3RCLFNBQUtELGNBQUwsR0FBc0JBLGNBQXRCOztBQUVBLFdBQU8sS0FBS0EsY0FBWjtBQUNELEdBZEg7O0FBZ0JFRSxjQUFZLG9CQUFTakUsQ0FBVCxFQUFZO0FBQ3RCLFFBQUltRCxXQUFXLGdCQUFNNUYsT0FBTixDQUFjeUMsRUFBRW5DLE1BQWhCLEVBQXdCLElBQXhCLENBQWY7QUFDQSxRQUFJLENBQUNzRixRQUFMLEVBQWU7O0FBRWYsU0FBS2UsZ0JBQUwsQ0FBc0JmLFFBQXRCOztBQUVBbkQsTUFBRW1FLGNBQUY7QUFDQSxTQUFLbEUsSUFBTDs7QUFFQSxRQUFJaUQsWUFBWSxJQUFJL0IsV0FBSixDQUFnQixVQUFoQixFQUE0QjtBQUMxQ0MsY0FBUTtBQUNONUYsY0FBTSxJQURBO0FBRU4ySCxrQkFBVUEsUUFGSjtBQUdOM0QsY0FBTVEsRUFBRW5DLE1BQUYsQ0FBUzBDO0FBSFQ7QUFEa0MsS0FBNUIsQ0FBaEI7QUFPQSxTQUFLL0UsSUFBTCxDQUFVOEYsYUFBVixDQUF3QjRCLFNBQXhCO0FBQ0QsR0FqQ0g7O0FBbUNFZ0Isb0JBQWtCLDBCQUFVZixRQUFWLEVBQW9CO0FBQ3BDLFNBQUtpQixxQkFBTDtBQUNBakIsYUFBU25CLFNBQVQsQ0FBbUJRLEdBQW5CLENBQXVCLG9CQUFVckgsY0FBakM7QUFDRCxHQXRDSDs7QUF3Q0VpSix5QkFBdUIsaUNBQVk7QUFDakMsUUFBTVYsUUFBUSxLQUFLQSxLQUFMLElBQWMsS0FBS0MsUUFBTCxFQUE1Qjs7QUFFQUQsVUFBTXZFLE9BQU4sQ0FBYyxVQUFDa0YsSUFBRCxFQUFVO0FBQ3RCQSxXQUFLckMsU0FBTCxDQUFlQyxNQUFmLENBQXNCLG9CQUFVOUcsY0FBaEM7QUFDRCxLQUZEO0FBR0QsR0E5Q0g7O0FBZ0RFYyxhQUFXLHFCQUFXO0FBQ3BCLFNBQUttQyxZQUFMLENBQWtCNkYsVUFBbEIsR0FBK0IsS0FBS0EsVUFBTCxDQUFnQm5FLElBQWhCLENBQXFCLElBQXJCLENBQS9CO0FBQ0EsU0FBS3RFLElBQUwsQ0FBVXVFLGdCQUFWLENBQTJCLE9BQTNCLEVBQW9DLEtBQUszQixZQUFMLENBQWtCNkYsVUFBdEQ7QUFDRCxHQW5ESDs7QUFxREVLLFVBQVEsa0JBQVc7QUFDakIsU0FBS2IsTUFBTCxHQUFjLEtBQUtWLElBQUwsRUFBZCxHQUE0QixLQUFLOUMsSUFBTCxFQUE1QjtBQUNELEdBdkRIOztBQXlERWhCLFdBQVMsaUJBQVNPLElBQVQsRUFBZTtBQUN0QixTQUFLQSxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLK0UsTUFBTCxDQUFZL0UsSUFBWjtBQUNELEdBNURIOztBQThERVgsV0FBUyxpQkFBU1csSUFBVCxFQUFlO0FBQ3RCLFNBQUtBLElBQUwsR0FBWSxDQUFDLEtBQUtBLElBQUwsSUFBYSxFQUFkLEVBQWtCZ0YsTUFBbEIsQ0FBeUJoRixJQUF6QixDQUFaO0FBQ0EsU0FBSytFLE1BQUwsQ0FBWSxLQUFLL0UsSUFBakI7QUFDRCxHQWpFSDs7QUFtRUUrRSxVQUFRLGdCQUFTL0UsSUFBVCxFQUFlO0FBQ3JCLFFBQU1pRixXQUFXakYsT0FBT0EsS0FBS2tGLEdBQUwsQ0FBUyxLQUFLQyxjQUFMLENBQW9CN0UsSUFBcEIsQ0FBeUIsSUFBekIsQ0FBVCxDQUFQLEdBQWtELEVBQW5FO0FBQ0EsUUFBTThFLGlCQUFpQixLQUFLcEosSUFBTCxDQUFVbUYsYUFBVixDQUF3QixrQkFBeEIsS0FBK0MsS0FBS25GLElBQTNFOztBQUVBb0osbUJBQWVkLFNBQWYsR0FBMkJXLFNBQVNoSSxJQUFULENBQWMsRUFBZCxDQUEzQjtBQUNELEdBeEVIOztBQTBFRWtJLGtCQUFnQix3QkFBU25GLElBQVQsRUFBZTtBQUM3QixRQUFJcUYsT0FBTyxnQkFBTW5JLENBQU4sQ0FBUSxLQUFLcUgsY0FBYixFQUE2QnZFLElBQTdCLENBQVg7QUFDQSxRQUFJc0YsV0FBV3BHLFNBQVNxRyxhQUFULENBQXVCLEtBQXZCLENBQWY7O0FBRUFELGFBQVNoQixTQUFULEdBQXFCZSxJQUFyQjtBQUNBLFNBQUtHLFlBQUwsQ0FBa0JGLFFBQWxCO0FBQ0FBLGFBQVNHLFVBQVQsQ0FBb0IvQyxLQUFwQixDQUEwQkMsT0FBMUIsR0FBb0MzQyxLQUFLMEYsY0FBTCxHQUFzQixNQUF0QixHQUErQixPQUFuRTs7QUFFQSxXQUFPSixTQUFTRyxVQUFULENBQW9CakIsU0FBM0I7QUFDRCxHQW5GSDs7QUFxRkVnQixnQkFBYyxzQkFBU0YsUUFBVCxFQUFtQjtBQUMvQixRQUFNSyxTQUFTLEdBQUczSSxLQUFILENBQVNPLElBQVQsQ0FBYytILFNBQVNuRyxnQkFBVCxDQUEwQixlQUExQixDQUFkLENBQWY7O0FBRUF3RyxXQUFPaEcsT0FBUCxDQUFlLFVBQUNpRyxLQUFELEVBQVc7QUFDeEJBLFlBQU1DLEdBQU4sR0FBWUQsTUFBTUUsWUFBTixDQUFtQixVQUFuQixDQUFaO0FBQ0FGLFlBQU1HLGVBQU4sQ0FBc0IsVUFBdEI7QUFDRCxLQUhEO0FBSUQsR0E1Rkg7O0FBOEZFeEMsUUFBTSxnQkFBVztBQUNmLFFBQUksQ0FBQyxLQUFLVSxNQUFWLEVBQWtCO0FBQ2xCLFNBQUtqSSxJQUFMLENBQVUwRyxLQUFWLENBQWdCQyxPQUFoQixHQUEwQixPQUExQjtBQUNBLFNBQUtFLFlBQUwsR0FBb0IsQ0FBcEI7QUFDQSxTQUFLb0IsTUFBTCxHQUFjLEtBQWQ7QUFDRCxHQW5HSDs7QUFxR0V4RCxRQUFNLGdCQUFXO0FBQ2YsUUFBSSxLQUFLd0QsTUFBVCxFQUFpQjtBQUNqQixTQUFLakksSUFBTCxDQUFVMEcsS0FBVixDQUFnQkMsT0FBaEIsR0FBMEIsTUFBMUI7QUFDQSxTQUFLRSxZQUFMLEdBQW9CLENBQXBCO0FBQ0EsU0FBS29CLE1BQUwsR0FBYyxJQUFkO0FBQ0Q7O0FBMUdILDZDQTRHVSxrQkFBWTtBQUNsQixPQUFLQSxNQUFMLEdBQWMsS0FBS1YsSUFBTCxFQUFkLEdBQTRCLEtBQUs5QyxJQUFMLEVBQTVCO0FBQ0QsQ0E5R0gsOENBZ0hXLG1CQUFXO0FBQ2xCLE9BQUtBLElBQUw7QUFDQSxPQUFLekUsSUFBTCxDQUFVMEUsbUJBQVYsQ0FBOEIsT0FBOUIsRUFBdUMsS0FBSzlCLFlBQUwsQ0FBa0I2RixVQUF6RDtBQUNELENBbkhIOztrQkFzSGVULFE7Ozs7Ozs7Ozs7Ozs7QUN6SWY7O0FBQ0E7Ozs7OztBQUVBLElBQUlnQyxhQUFhLFNBQWJBLFVBQWEsQ0FBU2pLLE9BQVQsRUFBa0JDLElBQWxCLEVBQXdCQyxPQUF4QixFQUFpQ0MsTUFBakMsRUFBeUM7QUFDeEQsaUJBQUtxQixJQUFMLENBQVUsSUFBVixFQUFnQnhCLE9BQWhCLEVBQXlCQyxJQUF6QixFQUErQkMsT0FBL0IsRUFBd0NDLE1BQXhDOztBQUVBLE9BQUtDLElBQUwsR0FBWSxRQUFaO0FBQ0EsT0FBS0MsS0FBTCxHQUFhLE9BQWI7O0FBRUEsT0FBS3dDLFlBQUwsR0FBb0IsRUFBcEI7O0FBRUEsT0FBS25DLFNBQUw7QUFDQSxPQUFLd0osVUFBTDtBQUNELENBVkQ7O0FBWUFELFdBQVd4SixTQUFYLEdBQXVCRixPQUFPNEosTUFBUCxDQUFjLGVBQUsxSixTQUFuQixDQUF2Qjs7QUFFQUYsT0FBT0MsTUFBUCxDQUFjeUosV0FBV3hKLFNBQXpCLEVBQW9DO0FBQ2xDeUosY0FBWSxzQkFBVztBQUFBOztBQUNyQixTQUFLaEssT0FBTCxDQUFhMEQsT0FBYixDQUFxQjtBQUFBLGFBQVV3RyxPQUFPcEgsSUFBUCxPQUFWO0FBQUEsS0FBckI7QUFDRCxHQUhpQzs7QUFLbENxSCxXQUFTLGlCQUFTNUYsQ0FBVCxFQUFXO0FBQ2xCLFFBQUk2RixjQUFjLElBQUkxRSxXQUFKLENBQWdCLFVBQWhCLEVBQTRCO0FBQzVDQyxjQUFRO0FBQ05wRCxjQUFNO0FBREEsT0FEb0M7QUFJNUM4SCxlQUFTLElBSm1DO0FBSzVDQyxrQkFBWTtBQUxnQyxLQUE1QixDQUFsQjtBQU9BL0YsTUFBRW5DLE1BQUYsQ0FBU3lELGFBQVQsQ0FBdUJ1RSxXQUF2Qjs7QUFFQSxTQUFLckssSUFBTCxDQUFVOEksTUFBVjtBQUNELEdBaEJpQzs7QUFrQmxDckksYUFBVyxxQkFBVTtBQUNuQixTQUFLbUMsWUFBTCxDQUFrQndILE9BQWxCLEdBQTRCLEtBQUtBLE9BQUwsQ0FBYTlGLElBQWIsQ0FBa0IsSUFBbEIsQ0FBNUI7QUFDQSxTQUFLdkUsT0FBTCxDQUFhd0UsZ0JBQWIsQ0FBOEIsT0FBOUIsRUFBdUMsS0FBSzNCLFlBQUwsQ0FBa0J3SCxPQUF6RDtBQUNELEdBckJpQzs7QUF1QmxDeEcsZ0JBQWMsd0JBQVU7QUFDdEIsU0FBSzdELE9BQUwsQ0FBYTJFLG1CQUFiLENBQWlDLE9BQWpDLEVBQTBDLEtBQUs5QixZQUFMLENBQWtCd0gsT0FBNUQ7QUFDRCxHQXpCaUM7O0FBMkJsQ0ksdUJBQXFCLCtCQUFXO0FBQzlCLFNBQUt4SyxJQUFMLENBQVVBLElBQVYsQ0FBZXNJLFNBQWYsR0FBMkIsS0FBS3RJLElBQUwsQ0FBVXFJLFlBQXJDO0FBQ0QsR0E3QmlDOztBQStCbENvQyxpQkFBZSx5QkFBVztBQUN4QixTQUFLeEssT0FBTCxDQUFhMEQsT0FBYixDQUFxQjtBQUFBLGFBQVV3RyxPQUFPekcsT0FBUCxFQUFWO0FBQUEsS0FBckI7QUFDRCxHQWpDaUM7O0FBbUNsQ0EsV0FBUyxtQkFBVztBQUNsQixTQUFLOEcsbUJBQUw7O0FBRUEsU0FBSzVHLFlBQUw7QUFDQSxTQUFLNkcsYUFBTDtBQUNELEdBeENpQzs7QUEwQ2xDL0osZUFBYXNKO0FBMUNxQixDQUFwQzs7a0JBOENlQSxVOzs7Ozs7Ozs7Ozs7O0FDL0RmOztBQUNBOzs7Ozs7QUFFQSxJQUFJVSxZQUFZLFNBQVpBLFNBQVksQ0FBUzNLLE9BQVQsRUFBa0JDLElBQWxCLEVBQXdCQyxPQUF4QixFQUFpQ0MsTUFBakMsRUFBeUM7QUFDdkQsaUJBQUtxQixJQUFMLENBQVUsSUFBVixFQUFnQnhCLE9BQWhCLEVBQXlCQyxJQUF6QixFQUErQkMsT0FBL0IsRUFBd0NDLE1BQXhDOztBQUVBLE9BQUtDLElBQUwsR0FBWSxPQUFaO0FBQ0EsT0FBS0MsS0FBTCxHQUFhLE9BQWI7O0FBRUEsT0FBS3dDLFlBQUwsR0FBb0IsRUFBcEI7O0FBRUEsT0FBS25DLFNBQUw7QUFDQSxPQUFLd0osVUFBTDtBQUNELENBVkQ7O0FBWUEzSixPQUFPQyxNQUFQLENBQWNtSyxVQUFVbEssU0FBeEIsRUFBbUM7QUFDakN5SixjQUFZLHNCQUFXO0FBQUE7O0FBQ3JCLFNBQUtoSyxPQUFMLENBQWEwRCxPQUFiLENBQXFCO0FBQUEsYUFBVXdHLE9BQU9wSCxJQUFQLE9BQVY7QUFBQSxLQUFyQjtBQUNELEdBSGdDOztBQUtqQ3RDLGFBQVcscUJBQVU7QUFDbkIsU0FBS21DLFlBQUwsQ0FBa0IwRSxTQUFsQixHQUE4QixLQUFLQSxTQUFMLENBQWVoRCxJQUFmLENBQW9CLElBQXBCLENBQTlCO0FBQ0EsU0FBSzFCLFlBQUwsQ0FBa0IrSCxLQUFsQixHQUEwQixLQUFLQSxLQUFMLENBQVdyRyxJQUFYLENBQWdCLElBQWhCLENBQTFCO0FBQ0EsU0FBSzFCLFlBQUwsQ0FBa0JnSSxLQUFsQixHQUEwQixLQUFLQSxLQUFMLENBQVd0RyxJQUFYLENBQWdCLElBQWhCLENBQTFCO0FBQ0EsU0FBSzFCLFlBQUwsQ0FBa0JnRixPQUFsQixHQUE0QixLQUFLQSxPQUFMLENBQWF0RCxJQUFiLENBQWtCLElBQWxCLENBQTVCOztBQUVBLFNBQUt2RSxPQUFMLENBQWF3RSxnQkFBYixDQUE4QixXQUE5QixFQUEyQyxLQUFLM0IsWUFBTCxDQUFrQjBFLFNBQTdEO0FBQ0EsU0FBS3ZILE9BQUwsQ0FBYXdFLGdCQUFiLENBQThCLE9BQTlCLEVBQXVDLEtBQUszQixZQUFMLENBQWtCK0gsS0FBekQ7QUFDQSxTQUFLNUssT0FBTCxDQUFhd0UsZ0JBQWIsQ0FBOEIsT0FBOUIsRUFBdUMsS0FBSzNCLFlBQUwsQ0FBa0JnSSxLQUF6RDtBQUNBLFNBQUs3SyxPQUFMLENBQWF3RSxnQkFBYixDQUE4QixTQUE5QixFQUF5QyxLQUFLM0IsWUFBTCxDQUFrQmdGLE9BQTNEO0FBQ0QsR0FmZ0M7O0FBaUJqQ2hFLGdCQUFjLHdCQUFXO0FBQ3ZCLFNBQUtpSCxnQkFBTCxHQUF3QixJQUF4Qjs7QUFFQSxTQUFLOUssT0FBTCxDQUFhMkUsbUJBQWIsQ0FBaUMsV0FBakMsRUFBOEMsS0FBSzlCLFlBQUwsQ0FBa0IwRSxTQUFoRTtBQUNBLFNBQUt2SCxPQUFMLENBQWEyRSxtQkFBYixDQUFpQyxPQUFqQyxFQUEwQyxLQUFLOUIsWUFBTCxDQUFrQitILEtBQTVEO0FBQ0EsU0FBSzVLLE9BQUwsQ0FBYTJFLG1CQUFiLENBQWlDLE9BQWpDLEVBQTBDLEtBQUs5QixZQUFMLENBQWtCZ0ksS0FBNUQ7QUFDQSxTQUFLN0ssT0FBTCxDQUFhMkUsbUJBQWIsQ0FBaUMsU0FBakMsRUFBNEMsS0FBSzlCLFlBQUwsQ0FBa0JnRixPQUE5RDtBQUNELEdBeEJnQzs7QUEwQmpDK0MsU0FBTyxlQUFTbkcsQ0FBVCxFQUFZO0FBQ2pCLFFBQUcsS0FBS3FHLGdCQUFSLEVBQTBCOztBQUUxQixTQUFLN0ssSUFBTCxDQUFVdUgsSUFBVjs7QUFFQSxRQUFNdUQsYUFBYSxJQUFJbkYsV0FBSixDQUFnQixVQUFoQixFQUE0QjtBQUM3Q0MsY0FBUTtBQUNOcEQsY0FBTSxJQURBO0FBRU51SSxjQUFNdkcsRUFBRW5DLE1BQUYsQ0FBUzJJO0FBRlQsT0FEcUM7QUFLN0NWLGVBQVMsSUFMb0M7QUFNN0NDLGtCQUFZO0FBTmlDLEtBQTVCLENBQW5CO0FBUUEvRixNQUFFbkMsTUFBRixDQUFTeUQsYUFBVCxDQUF1QmdGLFVBQXZCO0FBQ0QsR0F4Q2dDOztBQTBDakN4RCxhQUFXLG1CQUFTOUMsQ0FBVCxFQUFZO0FBQ3JCLFFBQUksS0FBS3FHLGdCQUFULEVBQTJCOztBQUUzQixRQUFNSSxhQUFhLElBQUl0RixXQUFKLENBQWdCLGNBQWhCLEVBQWdDO0FBQ2pEQyxjQUFRO0FBQ05wRCxjQUFNLElBREE7QUFFTnVJLGNBQU12RyxFQUFFbkMsTUFBRixDQUFTMkk7QUFGVCxPQUR5QztBQUtqRFYsZUFBUyxJQUx3QztBQU1qREMsa0JBQVk7QUFOcUMsS0FBaEMsQ0FBbkI7QUFRQS9GLE1BQUVuQyxNQUFGLENBQVN5RCxhQUFULENBQXVCbUYsVUFBdkI7QUFDRCxHQXREZ0M7O0FBd0RqQ0wsU0FBTyxlQUFTcEcsQ0FBVCxFQUFZO0FBQ2pCLFFBQUksS0FBS3FHLGdCQUFULEVBQTJCOztBQUUzQixTQUFLSyxRQUFMLENBQWMxRyxDQUFkLEVBQWlCLFVBQWpCO0FBQ0QsR0E1RGdDOztBQThEakNvRCxXQUFTLGlCQUFTcEQsQ0FBVCxFQUFZO0FBQ25CLFFBQUksS0FBS3FHLGdCQUFULEVBQTJCOztBQUUzQixTQUFLSyxRQUFMLENBQWMxRyxDQUFkLEVBQWlCLFlBQWpCO0FBQ0QsR0FsRWdDOztBQW9FakMwRyxZQUFVLGtCQUFTMUcsQ0FBVCxFQUFZMkcsU0FBWixFQUF1QjtBQUMvQixTQUFLbkwsSUFBTCxDQUFVdUgsSUFBVjs7QUFFQSxRQUFNMkQsV0FBVyxJQUFJdkYsV0FBSixDQUFnQndGLFNBQWhCLEVBQTJCO0FBQzFDdkYsY0FBUTtBQUNOcEQsY0FBTSxJQURBO0FBRU51SSxjQUFNdkcsRUFBRW5DLE1BQUYsQ0FBUzJJLEtBRlQ7QUFHTmxELGVBQU90RCxFQUFFc0QsS0FISDtBQUlOQyxhQUFLdkQsRUFBRXVEO0FBSkQsT0FEa0M7QUFPMUN1QyxlQUFTLElBUGlDO0FBUTFDQyxrQkFBWTtBQVI4QixLQUEzQixDQUFqQjtBQVVBL0YsTUFBRW5DLE1BQUYsQ0FBU3lELGFBQVQsQ0FBdUJvRixRQUF2QjtBQUNELEdBbEZnQzs7QUFvRmpDVix1QkFBcUIsK0JBQVc7QUFDOUIsU0FBS3hLLElBQUwsQ0FBVUEsSUFBVixDQUFlc0ksU0FBZixHQUEyQixLQUFLdEksSUFBTCxDQUFVcUksWUFBckM7QUFDRCxHQXRGZ0M7O0FBd0ZqQ29DLGlCQUFlLHlCQUFXO0FBQ3hCLFNBQUt4SyxPQUFMLENBQWEwRCxPQUFiLENBQXFCO0FBQUEsYUFBVXdHLE9BQU96RyxPQUFQLEVBQVY7QUFBQSxLQUFyQjtBQUNELEdBMUZnQzs7QUE0RmpDQSxXQUFTLG1CQUFXO0FBQ2xCLFNBQUs4RyxtQkFBTDs7QUFFQSxTQUFLNUcsWUFBTDtBQUNBLFNBQUs2RyxhQUFMOztBQUVBLFNBQUt6SyxJQUFMLENBQVUwRCxPQUFWO0FBQ0Q7QUFuR2dDLENBQW5DOztrQkFzR2VnSCxTOzs7Ozs7Ozs7Ozs7O0FDckhmOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTWpMLGVBQWUsb0JBQVVBLFlBQS9CO0FBQ0EsSUFBTTJMLFdBQVcseUJBQWpCOztBQUVBLElBQU1DLFFBQVEsU0FBUkEsS0FBUSxHQUFZO0FBQ3hCQyxTQUFPL0ksT0FBUCxHQUFpQix3QkFBakI7QUFDRCxDQUZEOztBQUlBOEk7O2tCQUVlQSxLIiwiZmlsZSI6Ii4vZGlzdC9kcm9wbGFiLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gOSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGMiLCJjb25zdCBEQVRBX1RSSUdHRVIgPSAnZGF0YS1kcm9wZG93bi10cmlnZ2VyJztcbmNvbnN0IERBVEFfRFJPUERPV04gPSAnZGF0YS1kcm9wZG93bic7XG5jb25zdCBTRUxFQ1RFRF9DTEFTUyA9ICdkcm9wbGFiLWl0ZW0tc2VsZWN0ZWQnO1xuY29uc3QgQUNUSVZFX0NMQVNTID0gJ2Ryb3BsYWItaXRlbS1hY3RpdmUnO1xuXG5jb25zdCBjb25zdGFudHMgPSB7XG4gIERBVEFfVFJJR0dFUixcbiAgREFUQV9EUk9QRE9XTixcbiAgU0VMRUNURURfQ0xBU1MsXG4gIEFDVElWRV9DTEFTUyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbnN0YW50cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25zdGFudHMuanMiLCIvLyBQb2x5ZmlsbCBmb3IgY3JlYXRpbmcgQ3VzdG9tRXZlbnRzIG9uIElFOS8xMC8xMVxuXG4vLyBjb2RlIHB1bGxlZCBmcm9tOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Q0dG9jY2hpbmkvY3VzdG9tZXZlbnQtcG9seWZpbGxcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudCNQb2x5ZmlsbFxuXG50cnkge1xuICAgIHZhciBjZSA9IG5ldyB3aW5kb3cuQ3VzdG9tRXZlbnQoJ3Rlc3QnKTtcbiAgICBjZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChjZS5kZWZhdWx0UHJldmVudGVkICE9PSB0cnVlKSB7XG4gICAgICAgIC8vIElFIGhhcyBwcm9ibGVtcyB3aXRoIC5wcmV2ZW50RGVmYXVsdCgpIG9uIGN1c3RvbSBldmVudHNcbiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMzM0OTE5MVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBwcmV2ZW50IGRlZmF1bHQnKTtcbiAgICB9XG59IGNhdGNoKGUpIHtcbiAgdmFyIEN1c3RvbUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQsIHBhcmFtcykge1xuICAgIHZhciBldnQsIG9yaWdQcmV2ZW50O1xuICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7XG4gICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgZGV0YWlsOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJDdXN0b21FdmVudFwiKTtcbiAgICBldnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUsIHBhcmFtcy5kZXRhaWwpO1xuICAgIG9yaWdQcmV2ZW50ID0gZXZ0LnByZXZlbnREZWZhdWx0O1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG9yaWdQcmV2ZW50LmNhbGwodGhpcyk7XG4gICAgICB0cnkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2RlZmF1bHRQcmV2ZW50ZWQnLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gZXZ0O1xuICB9O1xuXG4gIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IHdpbmRvdy5FdmVudC5wcm90b3R5cGU7XG4gIHdpbmRvdy5DdXN0b21FdmVudCA9IEN1c3RvbUV2ZW50OyAvLyBleHBvc2UgZGVmaW5pdGlvbiB0byB3aW5kb3dcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jdXN0b20tZXZlbnQtcG9seWZpbGwvY3VzdG9tLWV2ZW50LXBvbHlmaWxsLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBEcm9wRG93biBmcm9tICcuL2Ryb3Bkb3duJztcblxudmFyIEhvb2sgPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpe1xuICB0aGlzLnRyaWdnZXIgPSB0cmlnZ2VyO1xuICB0aGlzLmxpc3QgPSBuZXcgRHJvcERvd24obGlzdCk7XG4gIHRoaXMudHlwZSA9ICdIb29rJztcbiAgdGhpcy5ldmVudCA9ICdjbGljayc7XG4gIHRoaXMucGx1Z2lucyA9IHBsdWdpbnMgfHwgW107XG4gIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB0aGlzLmlkID0gdHJpZ2dlci5pZDtcbn07XG5cbk9iamVjdC5hc3NpZ24oSG9vay5wcm90b3R5cGUsIHtcblxuICBhZGRFdmVudHM6IGZ1bmN0aW9uKCl7fSxcblxuICBjb25zdHJ1Y3RvcjogSG9vayxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIb29rO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2hvb2suanMiLCJpbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3QgeyBEQVRBX1RSSUdHRVIsIERBVEFfRFJPUERPV04gfSA9IGNvbnN0YW50cztcblxuY29uc3QgdXRpbHMgPSB7XG4gIHRvQ2FtZWxDYXNlKGF0dHIpIHtcbiAgICByZXR1cm4gdGhpcy5jYW1lbGl6ZShhdHRyLnNwbGl0KCctJykuc2xpY2UoMSkuam9pbignICcpKTtcbiAgfSxcblxuICB0KHMsIGQpIHtcbiAgICBmb3IgKGNvbnN0IHAgaW4gZCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLCBwKSkge1xuICAgICAgICBzID0gcy5yZXBsYWNlKG5ldyBSZWdFeHAoYHt7JHtwfX19YCwgJ2cnKSwgZFtwXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzO1xuICB9LFxuXG4gIGNhbWVsaXplKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvKD86Xlxcd3xbQS1aXXxcXGJcXHcpL2csIChsZXR0ZXIsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gaW5kZXggPT09IDAgPyBsZXR0ZXIudG9Mb3dlckNhc2UoKSA6IGxldHRlci50b1VwcGVyQ2FzZSgpO1xuICAgIH0pLnJlcGxhY2UoL1xccysvZywgJycpO1xuICB9LFxuXG4gIGNsb3Nlc3QodGhpc1RhZywgc3RvcFRhZykge1xuICAgIHdoaWxlICh0aGlzVGFnICYmIHRoaXNUYWcudGFnTmFtZSAhPT0gc3RvcFRhZyAmJiB0aGlzVGFnLnRhZ05hbWUgIT09ICdIVE1MJykge1xuICAgICAgdGhpc1RhZyA9IHRoaXNUYWcucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNUYWc7XG4gIH0sXG5cbiAgaXNEcm9wRG93blBhcnRzKHRhcmdldCkge1xuICAgIGlmICghdGFyZ2V0IHx8IHRhcmdldC50YWdOYW1lID09PSAnSFRNTCcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGFyZ2V0Lmhhc0F0dHJpYnV0ZShEQVRBX1RSSUdHRVIpIHx8IHRhcmdldC5oYXNBdHRyaWJ1dGUoREFUQV9EUk9QRE9XTik7XG4gIH0sXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3V0aWxzLmpzIiwiaW1wb3J0ICdjdXN0b20tZXZlbnQtcG9seWZpbGwnO1xuaW1wb3J0IEhvb2tCdXR0b24gZnJvbSAnLi9ob29rX2J1dHRvbic7XG5pbXBvcnQgSG9va0lucHV0IGZyb20gJy4vaG9va19pbnB1dCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJztcbmNvbnN0IERBVEFfVFJJR0dFUiA9IGNvbnN0YW50cy5EQVRBX1RSSUdHRVI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgdmFyIERyb3BMYWIgPSBmdW5jdGlvbihob29rLCBsaXN0KSB7XG4gICAgaWYgKCF0aGlzIGluc3RhbmNlb2YgRHJvcExhYikgcmV0dXJuIG5ldyBEcm9wTGFiKGhvb2spO1xuXG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMuaG9va3MgPSBbXTtcbiAgICB0aGlzLnF1ZXVlZERhdGEgPSBbXTtcbiAgICB0aGlzLmNvbmZpZyA9IHt9O1xuXG4gICAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcblxuICAgIGlmICghaG9vaykgcmV0dXJuIHRoaXMubG9hZFN0YXRpYygpO1xuICAgIHRoaXMuYWRkSG9vayhob29rLCBsaXN0KTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfTtcblxuICBPYmplY3QuYXNzaWduKERyb3BMYWIucHJvdG90eXBlLCB7XG4gICAgbG9hZFN0YXRpYzogZnVuY3Rpb24oKXtcbiAgICAgIHZhciBkcm9wZG93blRyaWdnZXJzID0gW10uc2xpY2UuYXBwbHkoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7REFUQV9UUklHR0VSfV1gKSk7XG4gICAgICB0aGlzLmFkZEhvb2tzKGRyb3Bkb3duVHJpZ2dlcnMpLmluaXQoKTtcbiAgICB9LFxuXG4gICAgYWRkRGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpO1xuICAgICAgdGhpcy5hcHBseUFyZ3MoYXJncywgJ19hZGREYXRhJyk7XG4gICAgfSxcblxuICAgIHNldERhdGE6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpO1xuICAgICAgdGhpcy5hcHBseUFyZ3MoYXJncywgJ19zZXREYXRhJyk7XG4gICAgfSxcblxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5ob29rcy5mb3JFYWNoKGhvb2sgPT4gaG9vay5kZXN0cm95KCkpO1xuICAgICAgdGhpcy5ob29rcyA9IFtdO1xuICAgICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcbiAgICB9LFxuXG4gICAgYXBwbHlBcmdzOiBmdW5jdGlvbihhcmdzLCBtZXRob2ROYW1lKSB7XG4gICAgICBpZiAodGhpcy5yZWFkeSkgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICAgIHRoaXMucXVldWVkRGF0YSA9IHRoaXMucXVldWVkRGF0YSB8fCBbXTtcbiAgICAgIHRoaXMucXVldWVkRGF0YS5wdXNoKGFyZ3MpO1xuICAgIH0sXG5cbiAgICBfYWRkRGF0YTogZnVuY3Rpb24odHJpZ2dlciwgZGF0YSkge1xuICAgICAgdGhpcy5fcHJvY2Vzc0RhdGEodHJpZ2dlciwgZGF0YSwgJ2FkZERhdGEnKTtcbiAgICB9LFxuXG4gICAgX3NldERhdGE6IGZ1bmN0aW9uKHRyaWdnZXIsIGRhdGEpIHtcbiAgICAgIHRoaXMuX3Byb2Nlc3NEYXRhKHRyaWdnZXIsIGRhdGEsICdzZXREYXRhJyk7XG4gICAgfSxcblxuICAgIF9wcm9jZXNzRGF0YTogZnVuY3Rpb24odHJpZ2dlciwgZGF0YSwgbWV0aG9kTmFtZSkge1xuICAgICAgdGhpcy5ob29rcy5mb3JFYWNoKChob29rKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRyaWdnZXIpKSBob29rLmxpc3RbbWV0aG9kTmFtZV0odHJpZ2dlcik7XG5cbiAgICAgICAgaWYgKGhvb2sudHJpZ2dlci5pZCA9PT0gdHJpZ2dlcikgaG9vay5saXN0W21ldGhvZE5hbWVdKGRhdGEpO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFkZEV2ZW50czogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmV2ZW50V3JhcHBlci5kb2N1bWVudENsaWNrZWQgPSB0aGlzLmRvY3VtZW50Q2xpY2tlZC5iaW5kKHRoaXMpXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZXZlbnRXcmFwcGVyLmRvY3VtZW50Q2xpY2tlZCk7XG4gICAgfSxcblxuICAgIGRvY3VtZW50Q2xpY2tlZDogZnVuY3Rpb24oZSkge1xuICAgICAgbGV0IHRoaXNUYWcgPSBlLnRhcmdldDtcblxuICAgICAgaWYgKHRoaXNUYWcudGFnTmFtZSAhPT0gJ1VMJykgdGhpc1RhZyA9IHV0aWxzLmNsb3Nlc3QodGhpc1RhZywgJ1VMJyk7XG4gICAgICBpZiAodXRpbHMuaXNEcm9wRG93blBhcnRzKHRoaXNUYWcsIHRoaXMuaG9va3MpIHx8IHV0aWxzLmlzRHJvcERvd25QYXJ0cyhlLnRhcmdldCwgdGhpcy5ob29rcykpIHJldHVybjtcblxuICAgICAgdGhpcy5ob29rcy5mb3JFYWNoKGhvb2sgPT4gaG9vay5saXN0LmhpZGUoKSk7XG4gICAgfSxcblxuICAgIHJlbW92ZUV2ZW50czogZnVuY3Rpb24oKXtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuZG9jdW1lbnRDbGlja2VkKTtcbiAgICB9LFxuXG4gICAgY2hhbmdlSG9va0xpc3Q6IGZ1bmN0aW9uKHRyaWdnZXIsIGxpc3QsIHBsdWdpbnMsIGNvbmZpZykge1xuICAgICAgY29uc3QgYXZhaWxhYmxlVHJpZ2dlciA9ICB0eXBlb2YgdHJpZ2dlciA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0cmlnZ2VyKSA6IHRyaWdnZXI7XG5cblxuICAgICAgdGhpcy5ob29rcy5mb3JFYWNoKChob29rLCBpKSA9PiB7XG4gICAgICAgIGhvb2subGlzdC5saXN0LmRhdGFzZXQuZHJvcGRvd25BY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICBpZiAoaG9vay50cmlnZ2VyICE9PSBhdmFpbGFibGVUcmlnZ2VyKSByZXR1cm47XG5cbiAgICAgICAgaG9vay5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaG9va3Muc3BsaWNlKGksIDEpO1xuICAgICAgICB0aGlzLmFkZEhvb2soYXZhaWxhYmxlVHJpZ2dlciwgbGlzdCwgcGx1Z2lucywgY29uZmlnKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhZGRIb29rOiBmdW5jdGlvbihob29rLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUhvb2sgPSB0eXBlb2YgaG9vayA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGhvb2spIDogaG9vaztcbiAgICAgIGxldCBhdmFpbGFibGVMaXN0O1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGF2YWlsYWJsZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxpc3QpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICBhdmFpbGFibGVMaXN0ID0gbGlzdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF2YWlsYWJsZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGhvb2suZGF0YXNldFt1dGlscy50b0NhbWVsQ2FzZShEQVRBX1RSSUdHRVIpXSk7XG4gICAgICB9XG5cbiAgICAgIGF2YWlsYWJsZUxpc3QuZGF0YXNldC5kcm9wZG93bkFjdGl2ZSA9IHRydWU7XG5cbiAgICAgIGNvbnN0IEhvb2tPYmplY3QgPSBhdmFpbGFibGVIb29rLnRhZ05hbWUgPT09ICdJTlBVVCcgPyBIb29rSW5wdXQgOiBIb29rQnV0dG9uO1xuICAgICAgdGhpcy5ob29rcy5wdXNoKG5ldyBIb29rT2JqZWN0KGF2YWlsYWJsZUhvb2ssIGF2YWlsYWJsZUxpc3QsIHBsdWdpbnMsIGNvbmZpZykpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgYWRkSG9va3M6IGZ1bmN0aW9uKGhvb2tzLCBwbHVnaW5zLCBjb25maWcpIHtcbiAgICAgIGhvb2tzLmZvckVhY2goaG9vayA9PiB0aGlzLmFkZEhvb2soaG9vaywgbnVsbCwgcGx1Z2lucywgY29uZmlnKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgc2V0Q29uZmlnOiBmdW5jdGlvbihvYmope1xuICAgICAgdGhpcy5jb25maWcgPSBvYmo7XG4gICAgfSxcblxuICAgIGZpcmVSZWFkeTogZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCByZWFkeUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWFkeS5kbCcsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgZHJvcGRvd246IHRoaXMsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQocmVhZHlFdmVudCk7XG5cbiAgICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgIH0sXG5cbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmFkZEV2ZW50cygpO1xuXG4gICAgICB0aGlzLmZpcmVSZWFkeSgpO1xuXG4gICAgICB0aGlzLnF1ZXVlZERhdGEuZm9yRWFjaChkYXRhID0+IHRoaXMuYWRkRGF0YShkYXRhKSk7XG4gICAgICB0aGlzLnF1ZXVlZERhdGEgPSBbXTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIERyb3BMYWI7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Ryb3BsYWIuanMiLCJpbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICB2YXIgY3VycmVudEtleTtcbiAgdmFyIGN1cnJlbnRGb2N1cztcbiAgdmFyIGlzVXBBcnJvdyA9IGZhbHNlO1xuICB2YXIgaXNEb3duQXJyb3cgPSBmYWxzZTtcbiAgdmFyIHJlbW92ZUhpZ2hsaWdodCA9IGZ1bmN0aW9uIHJlbW92ZUhpZ2hsaWdodChsaXN0KSB7XG4gICAgdmFyIGl0ZW1FbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGxpc3QubGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaTpub3QoLmRpdmlkZXIpJyksIDApO1xuICAgIHZhciBsaXN0SXRlbXMgPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgaXRlbUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGlzdEl0ZW0gPSBpdGVtRWxlbWVudHNbaV07XG4gICAgICBsaXN0SXRlbS5jbGFzc0xpc3QucmVtb3ZlKGNvbnN0YW50cy5BQ1RJVkVfQ0xBU1MpO1xuXG4gICAgICBpZiAobGlzdEl0ZW0uc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGxpc3RJdGVtcy5wdXNoKGxpc3RJdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpc3RJdGVtcztcbiAgfTtcblxuICB2YXIgc2V0TWVudUZvckFycm93cyA9IGZ1bmN0aW9uIHNldE1lbnVGb3JBcnJvd3MobGlzdCkge1xuICAgIHZhciBsaXN0SXRlbXMgPSByZW1vdmVIaWdobGlnaHQobGlzdCk7XG4gICAgaWYobGlzdC5jdXJyZW50SW5kZXg+MCl7XG4gICAgICBpZighbGlzdEl0ZW1zW2xpc3QuY3VycmVudEluZGV4LTFdKXtcbiAgICAgICAgbGlzdC5jdXJyZW50SW5kZXggPSBsaXN0LmN1cnJlbnRJbmRleC0xO1xuICAgICAgfVxuXG4gICAgICBpZiAobGlzdEl0ZW1zW2xpc3QuY3VycmVudEluZGV4LTFdKSB7XG4gICAgICAgIHZhciBlbCA9IGxpc3RJdGVtc1tsaXN0LmN1cnJlbnRJbmRleC0xXTtcbiAgICAgICAgdmFyIGZpbHRlckRyb3Bkb3duRWwgPSBlbC5jbG9zZXN0KCcuZmlsdGVyLWRyb3Bkb3duJyk7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY29uc3RhbnRzLkFDVElWRV9DTEFTUyk7XG5cbiAgICAgICAgaWYgKGZpbHRlckRyb3Bkb3duRWwpIHtcbiAgICAgICAgICB2YXIgZmlsdGVyRHJvcGRvd25Cb3R0b20gPSBmaWx0ZXJEcm9wZG93bkVsLm9mZnNldEhlaWdodDtcbiAgICAgICAgICB2YXIgZWxPZmZzZXRUb3AgPSBlbC5vZmZzZXRUb3AgLSAzMDtcblxuICAgICAgICAgIGlmIChlbE9mZnNldFRvcCA+IGZpbHRlckRyb3Bkb3duQm90dG9tKSB7XG4gICAgICAgICAgICBmaWx0ZXJEcm9wZG93bkVsLnNjcm9sbFRvcCA9IGVsT2Zmc2V0VG9wIC0gZmlsdGVyRHJvcGRvd25Cb3R0b207XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBtb3VzZWRvd24gPSBmdW5jdGlvbiBtb3VzZWRvd24oZSkge1xuICAgIHZhciBsaXN0ID0gZS5kZXRhaWwuaG9vay5saXN0O1xuICAgIHJlbW92ZUhpZ2hsaWdodChsaXN0KTtcbiAgICBsaXN0LnNob3coKTtcbiAgICBsaXN0LmN1cnJlbnRJbmRleCA9IDA7XG4gICAgaXNVcEFycm93ID0gZmFsc2U7XG4gICAgaXNEb3duQXJyb3cgPSBmYWxzZTtcbiAgfTtcbiAgdmFyIHNlbGVjdEl0ZW0gPSBmdW5jdGlvbiBzZWxlY3RJdGVtKGxpc3QpIHtcbiAgICB2YXIgbGlzdEl0ZW1zID0gcmVtb3ZlSGlnaGxpZ2h0KGxpc3QpO1xuICAgIHZhciBjdXJyZW50SXRlbSA9IGxpc3RJdGVtc1tsaXN0LmN1cnJlbnRJbmRleC0xXTtcbiAgICB2YXIgbGlzdEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjbGljay5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBsaXN0OiBsaXN0LFxuICAgICAgICBzZWxlY3RlZDogY3VycmVudEl0ZW0sXG4gICAgICAgIGRhdGE6IGN1cnJlbnRJdGVtLmRhdGFzZXQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGxpc3QubGlzdC5kaXNwYXRjaEV2ZW50KGxpc3RFdmVudCk7XG4gICAgbGlzdC5oaWRlKCk7XG4gIH1cblxuICB2YXIga2V5ZG93biA9IGZ1bmN0aW9uIGtleWRvd24oZSl7XG4gICAgdmFyIHR5cGVkT24gPSBlLnRhcmdldDtcbiAgICB2YXIgbGlzdCA9IGUuZGV0YWlsLmhvb2subGlzdDtcbiAgICB2YXIgY3VycmVudEluZGV4ID0gbGlzdC5jdXJyZW50SW5kZXg7XG4gICAgaXNVcEFycm93ID0gZmFsc2U7XG4gICAgaXNEb3duQXJyb3cgPSBmYWxzZTtcblxuICAgIGlmKGUuZGV0YWlsLndoaWNoKXtcbiAgICAgIGN1cnJlbnRLZXkgPSBlLmRldGFpbC53aGljaDtcbiAgICAgIGlmKGN1cnJlbnRLZXkgPT09IDEzKXtcbiAgICAgICAgc2VsZWN0SXRlbShlLmRldGFpbC5ob29rLmxpc3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZihjdXJyZW50S2V5ID09PSAzOCkge1xuICAgICAgICBpc1VwQXJyb3cgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYoY3VycmVudEtleSA9PT0gNDApIHtcbiAgICAgICAgaXNEb3duQXJyb3cgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZihlLmRldGFpbC5rZXkpIHtcbiAgICAgIGN1cnJlbnRLZXkgPSBlLmRldGFpbC5rZXk7XG4gICAgICBpZihjdXJyZW50S2V5ID09PSAnRW50ZXInKXtcbiAgICAgICAgc2VsZWN0SXRlbShlLmRldGFpbC5ob29rLmxpc3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZihjdXJyZW50S2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgaXNVcEFycm93ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmKGN1cnJlbnRLZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIGlzRG93bkFycm93ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoaXNVcEFycm93KXsgY3VycmVudEluZGV4LS07IH1cbiAgICBpZihpc0Rvd25BcnJvdyl7IGN1cnJlbnRJbmRleCsrOyB9XG4gICAgaWYoY3VycmVudEluZGV4IDwgMCl7IGN1cnJlbnRJbmRleCA9IDA7IH1cbiAgICBsaXN0LmN1cnJlbnRJbmRleCA9IGN1cnJlbnRJbmRleDtcbiAgICBzZXRNZW51Rm9yQXJyb3dzKGUuZGV0YWlsLmhvb2subGlzdCk7XG4gIH07XG5cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duLmRsJywgbW91c2Vkb3duKTtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bi5kbCcsIGtleWRvd24pO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2tleWJvYXJkLmpzIiwiaW1wb3J0ICdjdXN0b20tZXZlbnQtcG9seWZpbGwnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuLi9zcmMvY29uc3RhbnRzJztcblxudmFyIERyb3BEb3duID0gZnVuY3Rpb24obGlzdCkge1xuICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgdGhpcy5saXN0ID0gdHlwZW9mIGxpc3QgPT09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsaXN0KSA6IGxpc3Q7XG4gIHRoaXMuaXRlbXMgPSBbXTtcblxuICB0aGlzLmV2ZW50V3JhcHBlciA9IHt9O1xuXG4gIHRoaXMuZ2V0SXRlbXMoKTtcbiAgdGhpcy5pbml0VGVtcGxhdGVTdHJpbmcoKTtcbiAgdGhpcy5hZGRFdmVudHMoKTtcblxuICB0aGlzLmluaXRpYWxTdGF0ZSA9IGxpc3QuaW5uZXJIVE1MO1xufTtcblxuT2JqZWN0LmFzc2lnbihEcm9wRG93bi5wcm90b3R5cGUsIHtcbiAgZ2V0SXRlbXM6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXRlbXMgPSBbXS5zbGljZS5jYWxsKHRoaXMubGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpKTtcbiAgICByZXR1cm4gdGhpcy5pdGVtcztcbiAgfSxcblxuICBpbml0VGVtcGxhdGVTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXMgfHwgdGhpcy5nZXRJdGVtcygpO1xuXG4gICAgdmFyIHRlbXBsYXRlU3RyaW5nID0gJyc7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHRlbXBsYXRlU3RyaW5nID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0ub3V0ZXJIVE1MO1xuICAgIHRoaXMudGVtcGxhdGVTdHJpbmcgPSB0ZW1wbGF0ZVN0cmluZztcblxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlU3RyaW5nO1xuICB9LFxuXG4gIGNsaWNrRXZlbnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgc2VsZWN0ZWQgPSB1dGlscy5jbG9zZXN0KGUudGFyZ2V0LCAnTEknKTtcbiAgICBpZiAoIXNlbGVjdGVkKSByZXR1cm47XG5cbiAgICB0aGlzLmFkZFNlbGVjdGVkQ2xhc3Moc2VsZWN0ZWQpO1xuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaGlkZSgpO1xuXG4gICAgdmFyIGxpc3RFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2xpY2suZGwnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgbGlzdDogdGhpcyxcbiAgICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkLFxuICAgICAgICBkYXRhOiBlLnRhcmdldC5kYXRhc2V0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmxpc3QuZGlzcGF0Y2hFdmVudChsaXN0RXZlbnQpO1xuICB9LFxuXG4gIGFkZFNlbGVjdGVkQ2xhc3M6IGZ1bmN0aW9uIChzZWxlY3RlZCkge1xuICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRDbGFzc2VzKCk7XG4gICAgc2VsZWN0ZWQuY2xhc3NMaXN0LmFkZChjb25zdGFudHMuU0VMRUNURURfQ0xBU1MpO1xuICB9LFxuXG4gIHJlbW92ZVNlbGVjdGVkQ2xhc3NlczogZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcyB8fCB0aGlzLmdldEl0ZW1zKCk7XG5cbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoY29uc3RhbnRzLlNFTEVDVEVEX0NMQVNTKVxuICAgIH0pO1xuICB9LFxuXG4gIGFkZEV2ZW50czogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tFdmVudCA9IHRoaXMuY2xpY2tFdmVudC5iaW5kKHRoaXMpXG4gICAgdGhpcy5saXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tFdmVudCk7XG4gIH0sXG5cbiAgdG9nZ2xlOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmhpZGRlbiA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG4gIH0sXG5cbiAgc2V0RGF0YTogZnVuY3Rpb24oZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5yZW5kZXIoZGF0YSk7XG4gIH0sXG5cbiAgYWRkRGF0YTogZnVuY3Rpb24oZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9ICh0aGlzLmRhdGEgfHwgW10pLmNvbmNhdChkYXRhKTtcbiAgICB0aGlzLnJlbmRlcih0aGlzLmRhdGEpO1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oZGF0YSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YSA/IGRhdGEubWFwKHRoaXMucmVuZGVyQ2hpbGRyZW4uYmluZCh0aGlzKSkgOiBbXTtcbiAgICBjb25zdCByZW5kZXJhYmxlTGlzdCA9IHRoaXMubGlzdC5xdWVyeVNlbGVjdG9yKCd1bFtkYXRhLWR5bmFtaWNdJykgfHwgdGhpcy5saXN0O1xuXG4gICAgcmVuZGVyYWJsZUxpc3QuaW5uZXJIVE1MID0gY2hpbGRyZW4uam9pbignJyk7XG4gIH0sXG5cbiAgcmVuZGVyQ2hpbGRyZW46IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICB2YXIgaHRtbCA9IHV0aWxzLnQodGhpcy50ZW1wbGF0ZVN0cmluZywgZGF0YSk7XG4gICAgdmFyIHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xuICAgIHRoaXMuc2V0SW1hZ2VzU3JjKHRlbXBsYXRlKTtcbiAgICB0ZW1wbGF0ZS5maXJzdENoaWxkLnN0eWxlLmRpc3BsYXkgPSBkYXRhLmRyb3BsYWJfaGlkZGVuID8gJ25vbmUnIDogJ2Jsb2NrJztcblxuICAgIHJldHVybiB0ZW1wbGF0ZS5maXJzdENoaWxkLm91dGVySFRNTDtcbiAgfSxcblxuICBzZXRJbWFnZXNTcmM6IGZ1bmN0aW9uKHRlbXBsYXRlKSB7XG4gICAgY29uc3QgaW1hZ2VzID0gW10uc2xpY2UuY2FsbCh0ZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKCdpbWdbZGF0YS1zcmNdJykpO1xuXG4gICAgaW1hZ2VzLmZvckVhY2goKGltYWdlKSA9PiB7XG4gICAgICBpbWFnZS5zcmMgPSBpbWFnZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG4gICAgICBpbWFnZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG4gICAgfSk7XG4gIH0sXG5cbiAgc2hvdzogZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmhpZGRlbikgcmV0dXJuO1xuICAgIHRoaXMubGlzdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcbiAgfSxcblxuICBoaWRlOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oaWRkZW4pIHJldHVybjtcbiAgICB0aGlzLmxpc3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICB9LFxuXG4gIHRvZ2dsZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuaGlkZGVuID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcbiAgfSxcblxuICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmhpZGUoKTtcbiAgICB0aGlzLmxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmV2ZW50V3JhcHBlci5jbGlja0V2ZW50KTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IERyb3BEb3duO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Ryb3Bkb3duLmpzIiwiaW1wb3J0ICdjdXN0b20tZXZlbnQtcG9seWZpbGwnO1xuaW1wb3J0IEhvb2sgZnJvbSAnLi9ob29rJztcblxudmFyIEhvb2tCdXR0b24gPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgSG9vay5jYWxsKHRoaXMsIHRyaWdnZXIsIGxpc3QsIHBsdWdpbnMsIGNvbmZpZyk7XG5cbiAgdGhpcy50eXBlID0gJ2J1dHRvbic7XG4gIHRoaXMuZXZlbnQgPSAnY2xpY2snO1xuXG4gIHRoaXMuZXZlbnRXcmFwcGVyID0ge307XG5cbiAgdGhpcy5hZGRFdmVudHMoKTtcbiAgdGhpcy5hZGRQbHVnaW5zKCk7XG59O1xuXG5Ib29rQnV0dG9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSG9vay5wcm90b3R5cGUpO1xuXG5PYmplY3QuYXNzaWduKEhvb2tCdXR0b24ucHJvdG90eXBlLCB7XG4gIGFkZFBsdWdpbnM6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiBwbHVnaW4uaW5pdCh0aGlzKSk7XG4gIH0sXG5cbiAgY2xpY2tlZDogZnVuY3Rpb24oZSl7XG4gICAgdmFyIGJ1dHRvbkV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjbGljay5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgfSxcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZS50YXJnZXQuZGlzcGF0Y2hFdmVudChidXR0b25FdmVudCk7XG5cbiAgICB0aGlzLmxpc3QudG9nZ2xlKCk7XG4gIH0sXG5cbiAgYWRkRXZlbnRzOiBmdW5jdGlvbigpe1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmNsaWNrZWQgPSB0aGlzLmNsaWNrZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmV2ZW50V3JhcHBlci5jbGlja2VkKTtcbiAgfSxcblxuICByZW1vdmVFdmVudHM6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tlZCk7XG4gIH0sXG5cbiAgcmVzdG9yZUluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0Lmxpc3QuaW5uZXJIVE1MID0gdGhpcy5saXN0LmluaXRpYWxTdGF0ZTtcbiAgfSxcblxuICByZW1vdmVQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmRlc3Ryb3koKSk7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXN0b3JlSW5pdGlhbFN0YXRlKCk7XG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICAgIHRoaXMucmVtb3ZlUGx1Z2lucygpO1xuICB9LFxuXG4gIGNvbnN0cnVjdG9yOiBIb29rQnV0dG9uLFxufSk7XG5cblxuZXhwb3J0IGRlZmF1bHQgSG9va0J1dHRvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9ob29rX2J1dHRvbi5qcyIsImltcG9ydCAnY3VzdG9tLWV2ZW50LXBvbHlmaWxsJztcbmltcG9ydCBIb29rIGZyb20gJy4vaG9vayc7XG5cbnZhciBIb29rSW5wdXQgPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgSG9vay5jYWxsKHRoaXMsIHRyaWdnZXIsIGxpc3QsIHBsdWdpbnMsIGNvbmZpZyk7XG5cbiAgdGhpcy50eXBlID0gJ2lucHV0JztcbiAgdGhpcy5ldmVudCA9ICdpbnB1dCc7XG5cbiAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcblxuICB0aGlzLmFkZEV2ZW50cygpO1xuICB0aGlzLmFkZFBsdWdpbnMoKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oSG9va0lucHV0LnByb3RvdHlwZSwge1xuICBhZGRQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmluaXQodGhpcykpO1xuICB9LFxuXG4gIGFkZEV2ZW50czogZnVuY3Rpb24oKXtcbiAgICB0aGlzLmV2ZW50V3JhcHBlci5tb3VzZWRvd24gPSB0aGlzLm1vdXNlZG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmlucHV0ID0gdGhpcy5pbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmtleXVwID0gdGhpcy5rZXl1cC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmtleWRvd24gPSB0aGlzLmtleWRvd24uYmluZCh0aGlzKTtcblxuICAgIHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmV2ZW50V3JhcHBlci5tb3VzZWRvd24pO1xuICAgIHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuZXZlbnRXcmFwcGVyLmlucHV0KTtcbiAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmV2ZW50V3JhcHBlci5rZXl1cCk7XG4gICAgdGhpcy50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmV2ZW50V3JhcHBlci5rZXlkb3duKTtcbiAgfSxcblxuICByZW1vdmVFdmVudHM6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaGFzUmVtb3ZlZEV2ZW50cyA9IHRydWU7XG5cbiAgICB0aGlzLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5ldmVudFdyYXBwZXIubW91c2Vkb3duKTtcbiAgICB0aGlzLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLmV2ZW50V3JhcHBlci5pbnB1dCk7XG4gICAgdGhpcy50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5ldmVudFdyYXBwZXIua2V5dXApO1xuICAgIHRoaXMudHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5ldmVudFdyYXBwZXIua2V5ZG93bik7XG4gIH0sXG5cbiAgaW5wdXQ6IGZ1bmN0aW9uKGUpIHtcbiAgICBpZih0aGlzLmhhc1JlbW92ZWRFdmVudHMpIHJldHVybjtcblxuICAgIHRoaXMubGlzdC5zaG93KCk7XG5cbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdpbnB1dC5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgICB0ZXh0OiBlLnRhcmdldC52YWx1ZSxcbiAgICAgIH0sXG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQoaW5wdXRFdmVudCk7XG4gIH0sXG5cbiAgbW91c2Vkb3duOiBmdW5jdGlvbihlKSB7XG4gICAgaWYgKHRoaXMuaGFzUmVtb3ZlZEV2ZW50cykgcmV0dXJuO1xuXG4gICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbW91c2Vkb3duLmRsJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIGhvb2s6IHRoaXMsXG4gICAgICAgIHRleHQ6IGUudGFyZ2V0LnZhbHVlLFxuICAgICAgfSxcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQobW91c2VFdmVudCk7XG4gIH0sXG5cbiAga2V5dXA6IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAodGhpcy5oYXNSZW1vdmVkRXZlbnRzKSByZXR1cm47XG5cbiAgICB0aGlzLmtleUV2ZW50KGUsICdrZXl1cC5kbCcpO1xuICB9LFxuXG4gIGtleWRvd246IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAodGhpcy5oYXNSZW1vdmVkRXZlbnRzKSByZXR1cm47XG5cbiAgICB0aGlzLmtleUV2ZW50KGUsICdrZXlkb3duLmRsJyk7XG4gIH0sXG5cbiAga2V5RXZlbnQ6IGZ1bmN0aW9uKGUsIGV2ZW50TmFtZSkge1xuICAgIHRoaXMubGlzdC5zaG93KCk7XG5cbiAgICBjb25zdCBrZXlFdmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgICB0ZXh0OiBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgd2hpY2g6IGUud2hpY2gsXG4gICAgICAgIGtleTogZS5rZXksXG4gICAgICB9LFxuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgZS50YXJnZXQuZGlzcGF0Y2hFdmVudChrZXlFdmVudCk7XG4gIH0sXG5cbiAgcmVzdG9yZUluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0Lmxpc3QuaW5uZXJIVE1MID0gdGhpcy5saXN0LmluaXRpYWxTdGF0ZTtcbiAgfSxcblxuICByZW1vdmVQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmRlc3Ryb3koKSk7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXN0b3JlSW5pdGlhbFN0YXRlKCk7XG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICAgIHRoaXMucmVtb3ZlUGx1Z2lucygpO1xuXG4gICAgdGhpcy5saXN0LmRlc3Ryb3koKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEhvb2tJbnB1dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9ob29rX2lucHV0LmpzIiwiaW1wb3J0IERyb3BMYWIgZnJvbSAnLi9kcm9wbGFiJztcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IEtleWJvYXJkIGZyb20gJy4va2V5Ym9hcmQnO1xuXG5jb25zdCBEQVRBX1RSSUdHRVIgPSBjb25zdGFudHMuREFUQV9UUklHR0VSO1xuY29uc3Qga2V5Ym9hcmQgPSBLZXlib2FyZCgpO1xuXG5jb25zdCBzZXR1cCA9IGZ1bmN0aW9uICgpIHtcbiAgd2luZG93LkRyb3BMYWIgPSBEcm9wTGFiKCk7XG59O1xuXG5zZXR1cCgpO1xuXG5leHBvcnQgZGVmYXVsdCBzZXR1cFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2luZGV4LmpzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2EiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2N1c3RvbS1ldmVudC1wb2x5ZmlsbC9jdXN0b20tZXZlbnQtcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2suanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzLmpzIiwid2VicGFjazovLy8uL3NyYy9kcm9wbGFiLmpzIiwid2VicGFjazovLy8uL3NyYy9kcm9wZG93bi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9va19idXR0b24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2tfaW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2tleWJvYXJkLmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJEQVRBX1RSSUdHRVIiLCJEQVRBX0RST1BET1dOIiwiU0VMRUNURURfQ0xBU1MiLCJBQ1RJVkVfQ0xBU1MiLCJIb29rIiwidHJpZ2dlciIsImxpc3QiLCJwbHVnaW5zIiwiY29uZmlnIiwidHlwZSIsImV2ZW50IiwiaWQiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJhZGRFdmVudHMiLCJjb25zdHJ1Y3RvciIsInV0aWxzIiwidG9DYW1lbENhc2UiLCJhdHRyIiwiY2FtZWxpemUiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsInQiLCJzIiwiZCIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBsYWNlIiwiUmVnRXhwIiwic3RyIiwibGV0dGVyIiwiaW5kZXgiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwiY2xvc2VzdCIsInRoaXNUYWciLCJzdG9wVGFnIiwidGFnTmFtZSIsInBhcmVudE5vZGUiLCJpc0Ryb3BEb3duUGFydHMiLCJ0YXJnZXQiLCJoYXNBdHRyaWJ1dGUiLCJEcm9wTGFiIiwicmVhZHkiLCJob29rcyIsInF1ZXVlZERhdGEiLCJldmVudFdyYXBwZXIiLCJsb2FkU3RhdGljIiwiZHJvcGRvd25UcmlnZ2VycyIsImFwcGx5IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiYWRkSG9va3MiLCJhZGREYXRhIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5QXJncyIsInNldERhdGEiLCJkZXN0cm95IiwiZm9yRWFjaCIsImhvb2siLCJyZW1vdmVFdmVudHMiLCJtZXRob2ROYW1lIiwicHVzaCIsIl9hZGREYXRhIiwiZGF0YSIsIl9wcm9jZXNzRGF0YSIsIl9zZXREYXRhIiwiQXJyYXkiLCJpc0FycmF5IiwiZG9jdW1lbnRDbGlja2VkIiwiYmluZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwiaGlkZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjaGFuZ2VIb29rTGlzdCIsImF2YWlsYWJsZVRyaWdnZXIiLCJnZXRFbGVtZW50QnlJZCIsImkiLCJkYXRhc2V0IiwiZHJvcGRvd25BY3RpdmUiLCJzcGxpY2UiLCJhZGRIb29rIiwiYXZhaWxhYmxlSG9vayIsInF1ZXJ5U2VsZWN0b3IiLCJhdmFpbGFibGVMaXN0IiwiRWxlbWVudCIsIkhvb2tPYmplY3QiLCJzZXRDb25maWciLCJvYmoiLCJmaXJlUmVhZHkiLCJyZWFkeUV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJkcm9wZG93biIsImRpc3BhdGNoRXZlbnQiLCJpbml0IiwiRHJvcERvd24iLCJjdXJyZW50SW5kZXgiLCJoaWRkZW4iLCJpdGVtcyIsImdldEl0ZW1zIiwiaW5pdFRlbXBsYXRlU3RyaW5nIiwiaW5pdGlhbFN0YXRlIiwiaW5uZXJIVE1MIiwidGVtcGxhdGVTdHJpbmciLCJsZW5ndGgiLCJvdXRlckhUTUwiLCJjbGlja0V2ZW50Iiwic2VsZWN0ZWQiLCJhZGRTZWxlY3RlZENsYXNzIiwicHJldmVudERlZmF1bHQiLCJsaXN0RXZlbnQiLCJyZW1vdmVTZWxlY3RlZENsYXNzZXMiLCJjbGFzc0xpc3QiLCJhZGQiLCJpdGVtIiwicmVtb3ZlIiwidG9nZ2xlIiwic2hvdyIsInJlbmRlciIsImNvbmNhdCIsImNoaWxkcmVuIiwibWFwIiwicmVuZGVyQ2hpbGRyZW4iLCJyZW5kZXJhYmxlTGlzdCIsImh0bWwiLCJ0ZW1wbGF0ZSIsImNyZWF0ZUVsZW1lbnQiLCJzZXRJbWFnZXNTcmMiLCJmaXJzdENoaWxkIiwic3R5bGUiLCJkaXNwbGF5IiwiZHJvcGxhYl9oaWRkZW4iLCJpbWFnZXMiLCJpbWFnZSIsInNyYyIsImdldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsIkhvb2tCdXR0b24iLCJhZGRQbHVnaW5zIiwiY3JlYXRlIiwicGx1Z2luIiwiY2xpY2tlZCIsImJ1dHRvbkV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJyZXN0b3JlSW5pdGlhbFN0YXRlIiwicmVtb3ZlUGx1Z2lucyIsIkhvb2tJbnB1dCIsIm1vdXNlZG93biIsImlucHV0Iiwia2V5dXAiLCJrZXlkb3duIiwiaGFzUmVtb3ZlZEV2ZW50cyIsImlucHV0RXZlbnQiLCJ0ZXh0IiwidmFsdWUiLCJtb3VzZUV2ZW50Iiwia2V5RXZlbnQiLCJldmVudE5hbWUiLCJ3aGljaCIsImtleSIsIktleWJvYXJkIiwiY3VycmVudEtleSIsImN1cnJlbnRGb2N1cyIsImlzVXBBcnJvdyIsImlzRG93bkFycm93IiwicmVtb3ZlSGlnaGxpZ2h0IiwiaXRlbUVsZW1lbnRzIiwibGlzdEl0ZW1zIiwibGlzdEl0ZW0iLCJzZXRNZW51Rm9yQXJyb3dzIiwiZWwiLCJmaWx0ZXJEcm9wZG93bkVsIiwiZmlsdGVyRHJvcGRvd25Cb3R0b20iLCJvZmZzZXRIZWlnaHQiLCJlbE9mZnNldFRvcCIsIm9mZnNldFRvcCIsInNjcm9sbFRvcCIsInNlbGVjdEl0ZW0iLCJjdXJyZW50SXRlbSIsInR5cGVkT24iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7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RXFCLE1BQUYsQ0FBU2xDLElBQVQsQ0FBY3pELElBQS9CO0FBQ0QsR0FyQ0Q7O0FBdUNBK0MsV0FBU3NCLGdCQUFULENBQTBCLGNBQTFCLEVBQTBDK0UsU0FBMUM7QUFDQXJHLFdBQVNzQixnQkFBVCxDQUEwQixZQUExQixFQUF3Q2tGLE9BQXhDO0FBQ0QsQ0ExR0Q7O2tCQTRHZVUsUTs7Ozs7Ozs7Ozs7Ozs7OztBQzlHZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRyIsImZpbGUiOiIuL2Rpc3QvZHJvcGxhYi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE0KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA5MzNmZjdkNWVkMzkzZGM2M2JjYSIsImNvbnN0IERBVEFfVFJJR0dFUiA9ICdkYXRhLWRyb3Bkb3duLXRyaWdnZXInO1xuY29uc3QgREFUQV9EUk9QRE9XTiA9ICdkYXRhLWRyb3Bkb3duJztcbmNvbnN0IFNFTEVDVEVEX0NMQVNTID0gJ2Ryb3BsYWItaXRlbS1zZWxlY3RlZCc7XG5jb25zdCBBQ1RJVkVfQ0xBU1MgPSAnZHJvcGxhYi1pdGVtLWFjdGl2ZSc7XG5cbmV4cG9ydCB7XG4gIERBVEFfVFJJR0dFUixcbiAgREFUQV9EUk9QRE9XTixcbiAgU0VMRUNURURfQ0xBU1MsXG4gIEFDVElWRV9DTEFTUyxcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29uc3RhbnRzLmpzIiwiLy8gUG9seWZpbGwgZm9yIGNyZWF0aW5nIEN1c3RvbUV2ZW50cyBvbiBJRTkvMTAvMTFcblxuLy8gY29kZSBwdWxsZWQgZnJvbTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kNHRvY2NoaW5pL2N1c3RvbWV2ZW50LXBvbHlmaWxsXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRXZlbnQjUG9seWZpbGxcblxudHJ5IHtcbiAgICB2YXIgY2UgPSBuZXcgd2luZG93LkN1c3RvbUV2ZW50KCd0ZXN0Jyk7XG4gICAgY2UucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoY2UuZGVmYXVsdFByZXZlbnRlZCAhPT0gdHJ1ZSkge1xuICAgICAgICAvLyBJRSBoYXMgcHJvYmxlbXMgd2l0aCAucHJldmVudERlZmF1bHQoKSBvbiBjdXN0b20gZXZlbnRzXG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjMzNDkxOTFcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcHJldmVudCBkZWZhdWx0Jyk7XG4gICAgfVxufSBjYXRjaChlKSB7XG4gIHZhciBDdXN0b21FdmVudCA9IGZ1bmN0aW9uKGV2ZW50LCBwYXJhbXMpIHtcbiAgICB2YXIgZXZ0LCBvcmlnUHJldmVudDtcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwge1xuICAgICAgYnViYmxlczogZmFsc2UsXG4gICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgIGRldGFpbDogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiQ3VzdG9tRXZlbnRcIik7XG4gICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudCwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlLCBwYXJhbXMuZGV0YWlsKTtcbiAgICBvcmlnUHJldmVudCA9IGV2dC5wcmV2ZW50RGVmYXVsdDtcbiAgICBldnQucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBvcmlnUHJldmVudC5jYWxsKHRoaXMpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdkZWZhdWx0UHJldmVudGVkJywge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGV2dDtcbiAgfTtcblxuICBDdXN0b21FdmVudC5wcm90b3R5cGUgPSB3aW5kb3cuRXZlbnQucHJvdG90eXBlO1xuICB3aW5kb3cuQ3VzdG9tRXZlbnQgPSBDdXN0b21FdmVudDsgLy8gZXhwb3NlIGRlZmluaXRpb24gdG8gd2luZG93XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY3VzdG9tLWV2ZW50LXBvbHlmaWxsL2N1c3RvbS1ldmVudC1wb2x5ZmlsbC5qc1xuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBEcm9wRG93biBmcm9tICcuL2Ryb3Bkb3duJztcblxudmFyIEhvb2sgPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpe1xuICB0aGlzLnRyaWdnZXIgPSB0cmlnZ2VyO1xuICB0aGlzLmxpc3QgPSBuZXcgRHJvcERvd24obGlzdCk7XG4gIHRoaXMudHlwZSA9ICdIb29rJztcbiAgdGhpcy5ldmVudCA9ICdjbGljayc7XG4gIHRoaXMucGx1Z2lucyA9IHBsdWdpbnMgfHwgW107XG4gIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB0aGlzLmlkID0gdHJpZ2dlci5pZDtcbn07XG5cbk9iamVjdC5hc3NpZ24oSG9vay5wcm90b3R5cGUsIHtcblxuICBhZGRFdmVudHM6IGZ1bmN0aW9uKCl7fSxcblxuICBjb25zdHJ1Y3RvcjogSG9vayxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIb29rO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2hvb2suanMiLCJpbXBvcnQgeyBEQVRBX1RSSUdHRVIsIERBVEFfRFJPUERPV04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IHV0aWxzID0ge1xuICB0b0NhbWVsQ2FzZShhdHRyKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FtZWxpemUoYXR0ci5zcGxpdCgnLScpLnNsaWNlKDEpLmpvaW4oJyAnKSk7XG4gIH0sXG5cbiAgdChzLCBkKSB7XG4gICAgZm9yIChjb25zdCBwIGluIGQpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCwgcCkpIHtcbiAgICAgICAgcyA9IHMucmVwbGFjZShuZXcgUmVnRXhwKGB7eyR7cH19fWAsICdnJyksIGRbcF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfSxcblxuICBjYW1lbGl6ZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAobGV0dGVyLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIGluZGV4ID09PSAwID8gbGV0dGVyLnRvTG93ZXJDYXNlKCkgOiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbiAgICB9KS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgfSxcblxuICBjbG9zZXN0KHRoaXNUYWcsIHN0b3BUYWcpIHtcbiAgICB3aGlsZSAodGhpc1RhZyAmJiB0aGlzVGFnLnRhZ05hbWUgIT09IHN0b3BUYWcgJiYgdGhpc1RhZy50YWdOYW1lICE9PSAnSFRNTCcpIHtcbiAgICAgIHRoaXNUYWcgPSB0aGlzVGFnLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzVGFnO1xuICB9LFxuXG4gIGlzRHJvcERvd25QYXJ0cyh0YXJnZXQpIHtcbiAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ0hUTUwnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRhcmdldC5oYXNBdHRyaWJ1dGUoREFUQV9UUklHR0VSKSB8fCB0YXJnZXQuaGFzQXR0cmlidXRlKERBVEFfRFJPUERPV04pO1xuICB9LFxufTtcblxuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy5qcyIsImltcG9ydCAnY3VzdG9tLWV2ZW50LXBvbHlmaWxsJztcbmltcG9ydCBIb29rQnV0dG9uIGZyb20gJy4vaG9va19idXR0b24nO1xuaW1wb3J0IEhvb2tJbnB1dCBmcm9tICcuL2hvb2tfaW5wdXQnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEtleWJvYXJkIGZyb20gJy4va2V5Ym9hcmQnO1xuaW1wb3J0IHsgREFUQV9UUklHR0VSIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG52YXIgRHJvcExhYiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gIHRoaXMuaG9va3MgPSBbXTtcbiAgdGhpcy5xdWV1ZWREYXRhID0gW107XG4gIHRoaXMuY29uZmlnID0ge307XG5cbiAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcbn07XG5cbk9iamVjdC5hc3NpZ24oRHJvcExhYi5wcm90b3R5cGUsIHtcbiAgbG9hZFN0YXRpYzogZnVuY3Rpb24oKXtcbiAgICB2YXIgZHJvcGRvd25UcmlnZ2VycyA9IFtdLnNsaWNlLmFwcGx5KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0RBVEFfVFJJR0dFUn1dYCkpO1xuICAgIHRoaXMuYWRkSG9va3MoZHJvcGRvd25UcmlnZ2Vycyk7XG4gIH0sXG5cbiAgYWRkRGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10uc2xpY2UuYXBwbHkoYXJndW1lbnRzKTtcbiAgICB0aGlzLmFwcGx5QXJncyhhcmdzLCAnX2FkZERhdGEnKTtcbiAgfSxcblxuICBzZXREYXRhOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyk7XG4gICAgdGhpcy5hcHBseUFyZ3MoYXJncywgJ19zZXREYXRhJyk7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5ob29rcy5mb3JFYWNoKGhvb2sgPT4gaG9vay5kZXN0cm95KCkpO1xuICAgIHRoaXMuaG9va3MgPSBbXTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICB9LFxuXG4gIGFwcGx5QXJnczogZnVuY3Rpb24oYXJncywgbWV0aG9kTmFtZSkge1xuICAgIGlmICh0aGlzLnJlYWR5KSByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgIHRoaXMucXVldWVkRGF0YSA9IHRoaXMucXVldWVkRGF0YSB8fCBbXTtcbiAgICB0aGlzLnF1ZXVlZERhdGEucHVzaChhcmdzKTtcbiAgfSxcblxuICBfYWRkRGF0YTogZnVuY3Rpb24odHJpZ2dlciwgZGF0YSkge1xuICAgIHRoaXMuX3Byb2Nlc3NEYXRhKHRyaWdnZXIsIGRhdGEsICdhZGREYXRhJyk7XG4gIH0sXG5cbiAgX3NldERhdGE6IGZ1bmN0aW9uKHRyaWdnZXIsIGRhdGEpIHtcbiAgICB0aGlzLl9wcm9jZXNzRGF0YSh0cmlnZ2VyLCBkYXRhLCAnc2V0RGF0YScpO1xuICB9LFxuXG4gIF9wcm9jZXNzRGF0YTogZnVuY3Rpb24odHJpZ2dlciwgZGF0YSwgbWV0aG9kTmFtZSkge1xuICAgIHRoaXMuaG9va3MuZm9yRWFjaCgoaG9vaykgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHJpZ2dlcikpIGhvb2subGlzdFttZXRob2ROYW1lXSh0cmlnZ2VyKTtcblxuICAgICAgaWYgKGhvb2sudHJpZ2dlci5pZCA9PT0gdHJpZ2dlcikgaG9vay5saXN0W21ldGhvZE5hbWVdKGRhdGEpO1xuICAgIH0pO1xuICB9LFxuXG4gIGFkZEV2ZW50czogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5ldmVudFdyYXBwZXIuZG9jdW1lbnRDbGlja2VkID0gdGhpcy5kb2N1bWVudENsaWNrZWQuYmluZCh0aGlzKVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuZG9jdW1lbnRDbGlja2VkKTtcbiAgfSxcblxuICBkb2N1bWVudENsaWNrZWQ6IGZ1bmN0aW9uKGUpIHtcbiAgICBsZXQgdGhpc1RhZyA9IGUudGFyZ2V0O1xuXG4gICAgaWYgKHRoaXNUYWcudGFnTmFtZSAhPT0gJ1VMJykgdGhpc1RhZyA9IHV0aWxzLmNsb3Nlc3QodGhpc1RhZywgJ1VMJyk7XG4gICAgaWYgKHV0aWxzLmlzRHJvcERvd25QYXJ0cyh0aGlzVGFnLCB0aGlzLmhvb2tzKSB8fCB1dGlscy5pc0Ryb3BEb3duUGFydHMoZS50YXJnZXQsIHRoaXMuaG9va3MpKSByZXR1cm47XG5cbiAgICB0aGlzLmhvb2tzLmZvckVhY2goaG9vayA9PiBob29rLmxpc3QuaGlkZSgpKTtcbiAgfSxcblxuICByZW1vdmVFdmVudHM6IGZ1bmN0aW9uKCl7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmV2ZW50V3JhcHBlci5kb2N1bWVudENsaWNrZWQpO1xuICB9LFxuXG4gIGNoYW5nZUhvb2tMaXN0OiBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgICBjb25zdCBhdmFpbGFibGVUcmlnZ2VyID0gIHR5cGVvZiB0cmlnZ2VyID09PSAnc3RyaW5nJyA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRyaWdnZXIpIDogdHJpZ2dlcjtcblxuXG4gICAgdGhpcy5ob29rcy5mb3JFYWNoKChob29rLCBpKSA9PiB7XG4gICAgICBob29rLmxpc3QubGlzdC5kYXRhc2V0LmRyb3Bkb3duQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgIGlmIChob29rLnRyaWdnZXIgIT09IGF2YWlsYWJsZVRyaWdnZXIpIHJldHVybjtcblxuICAgICAgaG9vay5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhvb2tzLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuYWRkSG9vayhhdmFpbGFibGVUcmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpO1xuICAgIH0pO1xuICB9LFxuXG4gIGFkZEhvb2s6IGZ1bmN0aW9uKGhvb2ssIGxpc3QsIHBsdWdpbnMsIGNvbmZpZykge1xuICAgIGNvbnN0IGF2YWlsYWJsZUhvb2sgPSB0eXBlb2YgaG9vayA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGhvb2spIDogaG9vaztcbiAgICBsZXQgYXZhaWxhYmxlTGlzdDtcblxuICAgIGlmICh0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGF2YWlsYWJsZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxpc3QpO1xuICAgIH0gZWxzZSBpZiAobGlzdCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgIGF2YWlsYWJsZUxpc3QgPSBsaXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBhdmFpbGFibGVMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihob29rLmRhdGFzZXRbdXRpbHMudG9DYW1lbENhc2UoREFUQV9UUklHR0VSKV0pO1xuICAgIH1cblxuICAgIGF2YWlsYWJsZUxpc3QuZGF0YXNldC5kcm9wZG93bkFjdGl2ZSA9IHRydWU7XG5cbiAgICBjb25zdCBIb29rT2JqZWN0ID0gYXZhaWxhYmxlSG9vay50YWdOYW1lID09PSAnSU5QVVQnID8gSG9va0lucHV0IDogSG9va0J1dHRvbjtcbiAgICB0aGlzLmhvb2tzLnB1c2gobmV3IEhvb2tPYmplY3QoYXZhaWxhYmxlSG9vaywgYXZhaWxhYmxlTGlzdCwgcGx1Z2lucywgY29uZmlnKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBhZGRIb29rczogZnVuY3Rpb24oaG9va3MsIHBsdWdpbnMsIGNvbmZpZykge1xuICAgIGhvb2tzLmZvckVhY2goaG9vayA9PiB0aGlzLmFkZEhvb2soaG9vaywgbnVsbCwgcGx1Z2lucywgY29uZmlnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgc2V0Q29uZmlnOiBmdW5jdGlvbihvYmope1xuICAgIHRoaXMuY29uZmlnID0gb2JqO1xuICB9LFxuXG4gIGZpcmVSZWFkeTogZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcmVhZHlFdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVhZHkuZGwnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgZHJvcGRvd246IHRoaXMsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQocmVhZHlFdmVudCk7XG5cbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgfSxcblxuICBpbml0OiBmdW5jdGlvbiAoaG9vaywgbGlzdCwgcGx1Z2lucywgY29uZmlnKSB7XG4gICAgaG9vayA/IHRoaXMuYWRkSG9vayhob29rLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIDogdGhpcy5sb2FkU3RhdGljKCk7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xuXG4gICAgS2V5Ym9hcmQoKTtcblxuICAgIHRoaXMuZmlyZVJlYWR5KCk7XG5cbiAgICB0aGlzLnF1ZXVlZERhdGEuZm9yRWFjaChkYXRhID0+IHRoaXMuYWRkRGF0YShkYXRhKSk7XG4gICAgdGhpcy5xdWV1ZWREYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBEcm9wTGFiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Ryb3BsYWIuanMiLCJpbXBvcnQgJ2N1c3RvbS1ldmVudC1wb2x5ZmlsbCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBTRUxFQ1RFRF9DTEFTUyB9IGZyb20gJy4uL3NyYy9jb25zdGFudHMnO1xuXG52YXIgRHJvcERvd24gPSBmdW5jdGlvbihsaXN0KSB7XG4gIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICB0aGlzLmxpc3QgPSB0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxpc3QpIDogbGlzdDtcbiAgdGhpcy5pdGVtcyA9IFtdO1xuXG4gIHRoaXMuZXZlbnRXcmFwcGVyID0ge307XG5cbiAgdGhpcy5nZXRJdGVtcygpO1xuICB0aGlzLmluaXRUZW1wbGF0ZVN0cmluZygpO1xuICB0aGlzLmFkZEV2ZW50cygpO1xuXG4gIHRoaXMuaW5pdGlhbFN0YXRlID0gbGlzdC5pbm5lckhUTUw7XG59O1xuXG5PYmplY3QuYXNzaWduKERyb3BEb3duLnByb3RvdHlwZSwge1xuICBnZXRJdGVtczogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pdGVtcyA9IFtdLnNsaWNlLmNhbGwodGhpcy5saXN0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJykpO1xuICAgIHJldHVybiB0aGlzLml0ZW1zO1xuICB9LFxuXG4gIGluaXRUZW1wbGF0ZVN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcyB8fCB0aGlzLmdldEl0ZW1zKCk7XG5cbiAgICB2YXIgdGVtcGxhdGVTdHJpbmcgPSAnJztcbiAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkgdGVtcGxhdGVTdHJpbmcgPSBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS5vdXRlckhUTUw7XG4gICAgdGhpcy50ZW1wbGF0ZVN0cmluZyA9IHRlbXBsYXRlU3RyaW5nO1xuXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVTdHJpbmc7XG4gIH0sXG5cbiAgY2xpY2tFdmVudDogZnVuY3Rpb24oZSkge1xuICAgIHZhciBzZWxlY3RlZCA9IHV0aWxzLmNsb3Nlc3QoZS50YXJnZXQsICdMSScpO1xuICAgIGlmICghc2VsZWN0ZWQpIHJldHVybjtcblxuICAgIHRoaXMuYWRkU2VsZWN0ZWRDbGFzcyhzZWxlY3RlZCk7XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5oaWRlKCk7XG5cbiAgICB2YXIgbGlzdEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjbGljay5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBsaXN0OiB0aGlzLFxuICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgICAgIGRhdGE6IGUudGFyZ2V0LmRhdGFzZXQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMubGlzdC5kaXNwYXRjaEV2ZW50KGxpc3RFdmVudCk7XG4gIH0sXG5cbiAgYWRkU2VsZWN0ZWRDbGFzczogZnVuY3Rpb24gKHNlbGVjdGVkKSB7XG4gICAgdGhpcy5yZW1vdmVTZWxlY3RlZENsYXNzZXMoKTtcbiAgICBzZWxlY3RlZC5jbGFzc0xpc3QuYWRkKFNFTEVDVEVEX0NMQVNTKTtcbiAgfSxcblxuICByZW1vdmVTZWxlY3RlZENsYXNzZXM6IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMgfHwgdGhpcy5nZXRJdGVtcygpO1xuXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uY2xhc3NMaXN0LnJlbW92ZShTRUxFQ1RFRF9DTEFTUykpO1xuICB9LFxuXG4gIGFkZEV2ZW50czogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tFdmVudCA9IHRoaXMuY2xpY2tFdmVudC5iaW5kKHRoaXMpXG4gICAgdGhpcy5saXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tFdmVudCk7XG4gIH0sXG5cbiAgdG9nZ2xlOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmhpZGRlbiA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG4gIH0sXG5cbiAgc2V0RGF0YTogZnVuY3Rpb24oZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5yZW5kZXIoZGF0YSk7XG4gIH0sXG5cbiAgYWRkRGF0YTogZnVuY3Rpb24oZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9ICh0aGlzLmRhdGEgfHwgW10pLmNvbmNhdChkYXRhKTtcbiAgICB0aGlzLnJlbmRlcih0aGlzLmRhdGEpO1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oZGF0YSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YSA/IGRhdGEubWFwKHRoaXMucmVuZGVyQ2hpbGRyZW4uYmluZCh0aGlzKSkgOiBbXTtcbiAgICBjb25zdCByZW5kZXJhYmxlTGlzdCA9IHRoaXMubGlzdC5xdWVyeVNlbGVjdG9yKCd1bFtkYXRhLWR5bmFtaWNdJykgfHwgdGhpcy5saXN0O1xuXG4gICAgcmVuZGVyYWJsZUxpc3QuaW5uZXJIVE1MID0gY2hpbGRyZW4uam9pbignJyk7XG4gIH0sXG5cbiAgcmVuZGVyQ2hpbGRyZW46IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICB2YXIgaHRtbCA9IHV0aWxzLnQodGhpcy50ZW1wbGF0ZVN0cmluZywgZGF0YSk7XG4gICAgdmFyIHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xuICAgIHRoaXMuc2V0SW1hZ2VzU3JjKHRlbXBsYXRlKTtcbiAgICB0ZW1wbGF0ZS5maXJzdENoaWxkLnN0eWxlLmRpc3BsYXkgPSBkYXRhLmRyb3BsYWJfaGlkZGVuID8gJ25vbmUnIDogJ2Jsb2NrJztcblxuICAgIHJldHVybiB0ZW1wbGF0ZS5maXJzdENoaWxkLm91dGVySFRNTDtcbiAgfSxcblxuICBzZXRJbWFnZXNTcmM6IGZ1bmN0aW9uKHRlbXBsYXRlKSB7XG4gICAgY29uc3QgaW1hZ2VzID0gW10uc2xpY2UuY2FsbCh0ZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKCdpbWdbZGF0YS1zcmNdJykpO1xuXG4gICAgaW1hZ2VzLmZvckVhY2goKGltYWdlKSA9PiB7XG4gICAgICBpbWFnZS5zcmMgPSBpbWFnZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG4gICAgICBpbWFnZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG4gICAgfSk7XG4gIH0sXG5cbiAgc2hvdzogZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmhpZGRlbikgcmV0dXJuO1xuICAgIHRoaXMubGlzdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcbiAgfSxcblxuICBoaWRlOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oaWRkZW4pIHJldHVybjtcbiAgICB0aGlzLmxpc3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICB9LFxuXG4gIHRvZ2dsZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuaGlkZGVuID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcbiAgfSxcblxuICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmhpZGUoKTtcbiAgICB0aGlzLmxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmV2ZW50V3JhcHBlci5jbGlja0V2ZW50KTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IERyb3BEb3duO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Ryb3Bkb3duLmpzIiwiaW1wb3J0ICdjdXN0b20tZXZlbnQtcG9seWZpbGwnO1xuaW1wb3J0IEhvb2sgZnJvbSAnLi9ob29rJztcblxudmFyIEhvb2tCdXR0b24gPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgSG9vay5jYWxsKHRoaXMsIHRyaWdnZXIsIGxpc3QsIHBsdWdpbnMsIGNvbmZpZyk7XG5cbiAgdGhpcy50eXBlID0gJ2J1dHRvbic7XG4gIHRoaXMuZXZlbnQgPSAnY2xpY2snO1xuXG4gIHRoaXMuZXZlbnRXcmFwcGVyID0ge307XG5cbiAgdGhpcy5hZGRFdmVudHMoKTtcbiAgdGhpcy5hZGRQbHVnaW5zKCk7XG59O1xuXG5Ib29rQnV0dG9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSG9vay5wcm90b3R5cGUpO1xuXG5PYmplY3QuYXNzaWduKEhvb2tCdXR0b24ucHJvdG90eXBlLCB7XG4gIGFkZFBsdWdpbnM6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiBwbHVnaW4uaW5pdCh0aGlzKSk7XG4gIH0sXG5cbiAgY2xpY2tlZDogZnVuY3Rpb24oZSl7XG4gICAgdmFyIGJ1dHRvbkV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjbGljay5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgfSxcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZS50YXJnZXQuZGlzcGF0Y2hFdmVudChidXR0b25FdmVudCk7XG5cbiAgICB0aGlzLmxpc3QudG9nZ2xlKCk7XG4gIH0sXG5cbiAgYWRkRXZlbnRzOiBmdW5jdGlvbigpe1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmNsaWNrZWQgPSB0aGlzLmNsaWNrZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmV2ZW50V3JhcHBlci5jbGlja2VkKTtcbiAgfSxcblxuICByZW1vdmVFdmVudHM6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tlZCk7XG4gIH0sXG5cbiAgcmVzdG9yZUluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0Lmxpc3QuaW5uZXJIVE1MID0gdGhpcy5saXN0LmluaXRpYWxTdGF0ZTtcbiAgfSxcblxuICByZW1vdmVQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmRlc3Ryb3koKSk7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXN0b3JlSW5pdGlhbFN0YXRlKCk7XG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICAgIHRoaXMucmVtb3ZlUGx1Z2lucygpO1xuICB9LFxuXG4gIGNvbnN0cnVjdG9yOiBIb29rQnV0dG9uLFxufSk7XG5cblxuZXhwb3J0IGRlZmF1bHQgSG9va0J1dHRvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9ob29rX2J1dHRvbi5qcyIsImltcG9ydCAnY3VzdG9tLWV2ZW50LXBvbHlmaWxsJztcbmltcG9ydCBIb29rIGZyb20gJy4vaG9vayc7XG5cbnZhciBIb29rSW5wdXQgPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgSG9vay5jYWxsKHRoaXMsIHRyaWdnZXIsIGxpc3QsIHBsdWdpbnMsIGNvbmZpZyk7XG5cbiAgdGhpcy50eXBlID0gJ2lucHV0JztcbiAgdGhpcy5ldmVudCA9ICdpbnB1dCc7XG5cbiAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcblxuICB0aGlzLmFkZEV2ZW50cygpO1xuICB0aGlzLmFkZFBsdWdpbnMoKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oSG9va0lucHV0LnByb3RvdHlwZSwge1xuICBhZGRQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmluaXQodGhpcykpO1xuICB9LFxuXG4gIGFkZEV2ZW50czogZnVuY3Rpb24oKXtcbiAgICB0aGlzLmV2ZW50V3JhcHBlci5tb3VzZWRvd24gPSB0aGlzLm1vdXNlZG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmlucHV0ID0gdGhpcy5pbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmtleXVwID0gdGhpcy5rZXl1cC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmtleWRvd24gPSB0aGlzLmtleWRvd24uYmluZCh0aGlzKTtcblxuICAgIHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmV2ZW50V3JhcHBlci5tb3VzZWRvd24pO1xuICAgIHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuZXZlbnRXcmFwcGVyLmlucHV0KTtcbiAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmV2ZW50V3JhcHBlci5rZXl1cCk7XG4gICAgdGhpcy50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmV2ZW50V3JhcHBlci5rZXlkb3duKTtcbiAgfSxcblxuICByZW1vdmVFdmVudHM6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaGFzUmVtb3ZlZEV2ZW50cyA9IHRydWU7XG5cbiAgICB0aGlzLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5ldmVudFdyYXBwZXIubW91c2Vkb3duKTtcbiAgICB0aGlzLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLmV2ZW50V3JhcHBlci5pbnB1dCk7XG4gICAgdGhpcy50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5ldmVudFdyYXBwZXIua2V5dXApO1xuICAgIHRoaXMudHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5ldmVudFdyYXBwZXIua2V5ZG93bik7XG4gIH0sXG5cbiAgaW5wdXQ6IGZ1bmN0aW9uKGUpIHtcbiAgICBpZih0aGlzLmhhc1JlbW92ZWRFdmVudHMpIHJldHVybjtcblxuICAgIHRoaXMubGlzdC5zaG93KCk7XG5cbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdpbnB1dC5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgICB0ZXh0OiBlLnRhcmdldC52YWx1ZSxcbiAgICAgIH0sXG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQoaW5wdXRFdmVudCk7XG4gIH0sXG5cbiAgbW91c2Vkb3duOiBmdW5jdGlvbihlKSB7XG4gICAgaWYgKHRoaXMuaGFzUmVtb3ZlZEV2ZW50cykgcmV0dXJuO1xuXG4gICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbW91c2Vkb3duLmRsJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIGhvb2s6IHRoaXMsXG4gICAgICAgIHRleHQ6IGUudGFyZ2V0LnZhbHVlLFxuICAgICAgfSxcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQobW91c2VFdmVudCk7XG4gIH0sXG5cbiAga2V5dXA6IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAodGhpcy5oYXNSZW1vdmVkRXZlbnRzKSByZXR1cm47XG5cbiAgICB0aGlzLmtleUV2ZW50KGUsICdrZXl1cC5kbCcpO1xuICB9LFxuXG4gIGtleWRvd246IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAodGhpcy5oYXNSZW1vdmVkRXZlbnRzKSByZXR1cm47XG5cbiAgICB0aGlzLmtleUV2ZW50KGUsICdrZXlkb3duLmRsJyk7XG4gIH0sXG5cbiAga2V5RXZlbnQ6IGZ1bmN0aW9uKGUsIGV2ZW50TmFtZSkge1xuICAgIHRoaXMubGlzdC5zaG93KCk7XG5cbiAgICBjb25zdCBrZXlFdmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgICB0ZXh0OiBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgd2hpY2g6IGUud2hpY2gsXG4gICAgICAgIGtleTogZS5rZXksXG4gICAgICB9LFxuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgZS50YXJnZXQuZGlzcGF0Y2hFdmVudChrZXlFdmVudCk7XG4gIH0sXG5cbiAgcmVzdG9yZUluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0Lmxpc3QuaW5uZXJIVE1MID0gdGhpcy5saXN0LmluaXRpYWxTdGF0ZTtcbiAgfSxcblxuICByZW1vdmVQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmRlc3Ryb3koKSk7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXN0b3JlSW5pdGlhbFN0YXRlKCk7XG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICAgIHRoaXMucmVtb3ZlUGx1Z2lucygpO1xuXG4gICAgdGhpcy5saXN0LmRlc3Ryb3koKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEhvb2tJbnB1dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9ob29rX2lucHV0LmpzIiwiaW1wb3J0IHsgQUNUSVZFX0NMQVNTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBLZXlib2FyZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGN1cnJlbnRLZXk7XG4gIHZhciBjdXJyZW50Rm9jdXM7XG4gIHZhciBpc1VwQXJyb3cgPSBmYWxzZTtcbiAgdmFyIGlzRG93bkFycm93ID0gZmFsc2U7XG4gIHZhciByZW1vdmVIaWdobGlnaHQgPSBmdW5jdGlvbiByZW1vdmVIaWdobGlnaHQobGlzdCkge1xuICAgIHZhciBpdGVtRWxlbWVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChsaXN0Lmxpc3QucXVlcnlTZWxlY3RvckFsbCgnbGk6bm90KC5kaXZpZGVyKScpLCAwKTtcbiAgICB2YXIgbGlzdEl0ZW1zID0gW107XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGl0ZW1FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpc3RJdGVtID0gaXRlbUVsZW1lbnRzW2ldO1xuICAgICAgbGlzdEl0ZW0uY2xhc3NMaXN0LnJlbW92ZShBQ1RJVkVfQ0xBU1MpO1xuXG4gICAgICBpZiAobGlzdEl0ZW0uc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGxpc3RJdGVtcy5wdXNoKGxpc3RJdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpc3RJdGVtcztcbiAgfTtcblxuICB2YXIgc2V0TWVudUZvckFycm93cyA9IGZ1bmN0aW9uIHNldE1lbnVGb3JBcnJvd3MobGlzdCkge1xuICAgIHZhciBsaXN0SXRlbXMgPSByZW1vdmVIaWdobGlnaHQobGlzdCk7XG4gICAgaWYobGlzdC5jdXJyZW50SW5kZXg+MCl7XG4gICAgICBpZighbGlzdEl0ZW1zW2xpc3QuY3VycmVudEluZGV4LTFdKXtcbiAgICAgICAgbGlzdC5jdXJyZW50SW5kZXggPSBsaXN0LmN1cnJlbnRJbmRleC0xO1xuICAgICAgfVxuXG4gICAgICBpZiAobGlzdEl0ZW1zW2xpc3QuY3VycmVudEluZGV4LTFdKSB7XG4gICAgICAgIHZhciBlbCA9IGxpc3RJdGVtc1tsaXN0LmN1cnJlbnRJbmRleC0xXTtcbiAgICAgICAgdmFyIGZpbHRlckRyb3Bkb3duRWwgPSBlbC5jbG9zZXN0KCcuZmlsdGVyLWRyb3Bkb3duJyk7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoQUNUSVZFX0NMQVNTKTtcblxuICAgICAgICBpZiAoZmlsdGVyRHJvcGRvd25FbCkge1xuICAgICAgICAgIHZhciBmaWx0ZXJEcm9wZG93bkJvdHRvbSA9IGZpbHRlckRyb3Bkb3duRWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgIHZhciBlbE9mZnNldFRvcCA9IGVsLm9mZnNldFRvcCAtIDMwO1xuXG4gICAgICAgICAgaWYgKGVsT2Zmc2V0VG9wID4gZmlsdGVyRHJvcGRvd25Cb3R0b20pIHtcbiAgICAgICAgICAgIGZpbHRlckRyb3Bkb3duRWwuc2Nyb2xsVG9wID0gZWxPZmZzZXRUb3AgLSBmaWx0ZXJEcm9wZG93bkJvdHRvbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIG1vdXNlZG93biA9IGZ1bmN0aW9uIG1vdXNlZG93bihlKSB7XG4gICAgdmFyIGxpc3QgPSBlLmRldGFpbC5ob29rLmxpc3Q7XG4gICAgcmVtb3ZlSGlnaGxpZ2h0KGxpc3QpO1xuICAgIGxpc3Quc2hvdygpO1xuICAgIGxpc3QuY3VycmVudEluZGV4ID0gMDtcbiAgICBpc1VwQXJyb3cgPSBmYWxzZTtcbiAgICBpc0Rvd25BcnJvdyA9IGZhbHNlO1xuICB9O1xuICB2YXIgc2VsZWN0SXRlbSA9IGZ1bmN0aW9uIHNlbGVjdEl0ZW0obGlzdCkge1xuICAgIHZhciBsaXN0SXRlbXMgPSByZW1vdmVIaWdobGlnaHQobGlzdCk7XG4gICAgdmFyIGN1cnJlbnRJdGVtID0gbGlzdEl0ZW1zW2xpc3QuY3VycmVudEluZGV4LTFdO1xuICAgIHZhciBsaXN0RXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NsaWNrLmRsJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIGxpc3Q6IGxpc3QsXG4gICAgICAgIHNlbGVjdGVkOiBjdXJyZW50SXRlbSxcbiAgICAgICAgZGF0YTogY3VycmVudEl0ZW0uZGF0YXNldCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgbGlzdC5saXN0LmRpc3BhdGNoRXZlbnQobGlzdEV2ZW50KTtcbiAgICBsaXN0LmhpZGUoKTtcbiAgfVxuXG4gIHZhciBrZXlkb3duID0gZnVuY3Rpb24ga2V5ZG93bihlKXtcbiAgICB2YXIgdHlwZWRPbiA9IGUudGFyZ2V0O1xuICAgIHZhciBsaXN0ID0gZS5kZXRhaWwuaG9vay5saXN0O1xuICAgIHZhciBjdXJyZW50SW5kZXggPSBsaXN0LmN1cnJlbnRJbmRleDtcbiAgICBpc1VwQXJyb3cgPSBmYWxzZTtcbiAgICBpc0Rvd25BcnJvdyA9IGZhbHNlO1xuXG4gICAgaWYoZS5kZXRhaWwud2hpY2gpe1xuICAgICAgY3VycmVudEtleSA9IGUuZGV0YWlsLndoaWNoO1xuICAgICAgaWYoY3VycmVudEtleSA9PT0gMTMpe1xuICAgICAgICBzZWxlY3RJdGVtKGUuZGV0YWlsLmhvb2subGlzdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmKGN1cnJlbnRLZXkgPT09IDM4KSB7XG4gICAgICAgIGlzVXBBcnJvdyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZihjdXJyZW50S2V5ID09PSA0MCkge1xuICAgICAgICBpc0Rvd25BcnJvdyA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGUuZGV0YWlsLmtleSkge1xuICAgICAgY3VycmVudEtleSA9IGUuZGV0YWlsLmtleTtcbiAgICAgIGlmKGN1cnJlbnRLZXkgPT09ICdFbnRlcicpe1xuICAgICAgICBzZWxlY3RJdGVtKGUuZGV0YWlsLmhvb2subGlzdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmKGN1cnJlbnRLZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICBpc1VwQXJyb3cgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYoY3VycmVudEtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgaXNEb3duQXJyb3cgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZihpc1VwQXJyb3cpeyBjdXJyZW50SW5kZXgtLTsgfVxuICAgIGlmKGlzRG93bkFycm93KXsgY3VycmVudEluZGV4Kys7IH1cbiAgICBpZihjdXJyZW50SW5kZXggPCAwKXsgY3VycmVudEluZGV4ID0gMDsgfVxuICAgIGxpc3QuY3VycmVudEluZGV4ID0gY3VycmVudEluZGV4O1xuICAgIHNldE1lbnVGb3JBcnJvd3MoZS5kZXRhaWwuaG9vay5saXN0KTtcbiAgfTtcblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24uZGwnLCBtb3VzZWRvd24pO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duLmRsJywga2V5ZG93bik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBLZXlib2FyZDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rZXlib2FyZC5qcyIsImV4cG9ydCAqIGZyb20gJy4vZHJvcGxhYic7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvaW5kZXguanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app/assets/javascripts/droplab/plugins/ajax.js b/app/assets/javascripts/droplab/plugins/ajax.js index e68983416ec..afc423b7f0e 100644 --- a/app/assets/javascripts/droplab/plugins/ajax.js +++ b/app/assets/javascripts/droplab/plugins/ajax.js @@ -63,12 +63,12 @@ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 10); +/******/ return __webpack_require__(__webpack_require__.s = 5); /******/ }) /************************************************************************/ /******/ ({ -/***/ 10: +/***/ 5: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -149,11 +149,9 @@ var droplabAjax = { } }; -window.droplabAjax = droplabAjax; - exports.default = droplabAjax; /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGM/ZWM1ZioqKiIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9hamF4LmpzIl0sIm5hbWVzIjpbImRyb3BsYWJBamF4RXhjZXB0aW9uIiwibWVzc2FnZSIsImRyb3BsYWJBamF4IiwiX2xvYWRVcmxEYXRhIiwidXJsIiwic2VsZiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJzdGF0dXMiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwiY2FjaGUiLCJzZW5kIiwiX2xvYWREYXRhIiwiY29uZmlnIiwibG9hZGluZ1RlbXBsYXRlIiwiZGF0YUxvYWRpbmdUZW1wbGF0ZSIsImhvb2siLCJsaXN0IiwicXVlcnlTZWxlY3RvciIsIm91dGVySFRNTCIsImxpc3RUZW1wbGF0ZSIsImRlc3Ryb3llZCIsIm1ldGhvZCIsImNhbGwiLCJpbml0IiwiZW5kcG9pbnQiLCJkeW5hbWljTGlzdCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInNldEF0dHJpYnV0ZSIsInRoZW4iLCJkIiwiY2F0Y2giLCJlIiwiZGVzdHJveSIsIndpbmRvdyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFB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QUFvQk0sWUFBWVAsU0FBaEM7QUFDQU8sa0JBQVlQLFNBQVosR0FBd0JMLGdCQUFnQkssU0FBeEM7QUFDRDtBQUNELFFBQUl4QixLQUFLZSxLQUFMLENBQVdHLE9BQU9ZLFFBQWxCLENBQUosRUFBaUM7QUFDL0I5QixXQUFLaUIsU0FBTCxDQUFlakIsS0FBS2UsS0FBTCxDQUFXRyxPQUFPWSxRQUFsQixDQUFmLEVBQTRDWixNQUE1QyxFQUFvRGxCLElBQXBEO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsV0FBS0YsWUFBTCxDQUFrQm9CLE9BQU9ZLFFBQXpCLEVBQ0dNLElBREgsQ0FDUSxVQUFTQyxDQUFULEVBQVk7QUFDaEJyQyxhQUFLaUIsU0FBTCxDQUFlb0IsQ0FBZixFQUFrQm5CLE1BQWxCLEVBQTBCbEIsSUFBMUI7QUFDRCxPQUhILEVBR0tzQyxLQUhMLENBR1csVUFBU0MsQ0FBVCxFQUFZO0FBQ25CLGNBQU0sSUFBSTVDLG9CQUFKLENBQXlCNEMsRUFBRTNDLE9BQUYsSUFBYTJDLENBQXRDLENBQU47QUFDRCxPQUxIO0FBTUQ7QUFDRixHQTFEaUI7QUEyRGxCQyxXQUFTLG1CQUFXO0FBQ2xCLFNBQUtkLFNBQUwsR0FBaUIsSUFBakI7O0FBRUEsUUFBSUssY0FBYyxLQUFLVixJQUFMLENBQVVDLElBQVYsQ0FBZUEsSUFBZixDQUFvQkMsYUFBcEIsQ0FBa0MsZ0JBQWxDLENBQWxCO0FBQ0EsUUFBSSxLQUFLRSxZQUFMLElBQXFCTSxXQUF6QixFQUFzQztBQUNwQ0Esa0JBQVlQLFNBQVosR0FBd0IsS0FBS0MsWUFBN0I7QUFDRDtBQUNGO0FBbEVpQixDQUFwQjs7QUFxRUFnQixPQUFPNUMsV0FBUCxHQUFxQkEsV0FBckI7O2tCQUVlQSxXIiwiZmlsZSI6Ii4vZGlzdC9wbHVnaW5zL2FqYXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGMiLCJmdW5jdGlvbiBkcm9wbGFiQWpheEV4Y2VwdGlvbihtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbmNvbnN0IGRyb3BsYWJBamF4ID0ge1xuICBfbG9hZFVybERhdGE6IGZ1bmN0aW9uIF9sb2FkVXJsRGF0YSh1cmwpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdDtcbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICBzZWxmLmNhY2hlW3VybF0gPSBkYXRhO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoW3hoci5yZXNwb25zZVRleHQsIHhoci5zdGF0dXNdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xuICB9LFxuICBfbG9hZERhdGE6IGZ1bmN0aW9uIF9sb2FkRGF0YShkYXRhLCBjb25maWcsIHNlbGYpIHtcbiAgICBpZiAoY29uZmlnLmxvYWRpbmdUZW1wbGF0ZSkge1xuICAgICAgdmFyIGRhdGFMb2FkaW5nVGVtcGxhdGUgPSBzZWxmLmhvb2subGlzdC5saXN0LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWxvYWRpbmctdGVtcGxhdGVdJyk7XG4gICAgICBpZiAoZGF0YUxvYWRpbmdUZW1wbGF0ZSkgZGF0YUxvYWRpbmdUZW1wbGF0ZS5vdXRlckhUTUwgPSBzZWxmLmxpc3RUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoIXNlbGYuZGVzdHJveWVkKSBzZWxmLmhvb2subGlzdFtjb25maWcubWV0aG9kXS5jYWxsKHNlbGYuaG9vay5saXN0LCBkYXRhKTtcbiAgfSxcbiAgaW5pdDogZnVuY3Rpb24gaW5pdChob29rKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgc2VsZi5jYWNoZSA9IHNlbGYuY2FjaGUgfHwge307XG4gICAgdmFyIGNvbmZpZyA9IGhvb2suY29uZmlnLmRyb3BsYWJBamF4O1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5lbmRwb2ludCB8fCAhY29uZmlnLm1ldGhvZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLm1ldGhvZCAhPT0gJ3NldERhdGEnICYmIGNvbmZpZy5tZXRob2QgIT09ICdhZGREYXRhJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmxvYWRpbmdUZW1wbGF0ZSkge1xuICAgICAgdmFyIGR5bmFtaWNMaXN0ID0gaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICAgIHZhciBsb2FkaW5nVGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGxvYWRpbmdUZW1wbGF0ZS5pbm5lckhUTUwgPSBjb25maWcubG9hZGluZ1RlbXBsYXRlO1xuICAgICAgbG9hZGluZ1RlbXBsYXRlLnNldEF0dHJpYnV0ZSgnZGF0YS1sb2FkaW5nLXRlbXBsYXRlJywgJycpO1xuICAgICAgdGhpcy5saXN0VGVtcGxhdGUgPSBkeW5hbWljTGlzdC5vdXRlckhUTUw7XG4gICAgICBkeW5hbWljTGlzdC5vdXRlckhUTUwgPSBsb2FkaW5nVGVtcGxhdGUub3V0ZXJIVE1MO1xuICAgIH1cbiAgICBpZiAoc2VsZi5jYWNoZVtjb25maWcuZW5kcG9pbnRdKSB7XG4gICAgICBzZWxmLl9sb2FkRGF0YShzZWxmLmNhY2hlW2NvbmZpZy5lbmRwb2ludF0sIGNvbmZpZywgc2VsZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvYWRVcmxEYXRhKGNvbmZpZy5lbmRwb2ludClcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHNlbGYuX2xvYWREYXRhKGQsIGNvbmZpZywgc2VsZik7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgZHJvcGxhYkFqYXhFeGNlcHRpb24oZS5tZXNzYWdlIHx8IGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcblxuICAgIHZhciBkeW5hbWljTGlzdCA9IHRoaXMuaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICBpZiAodGhpcy5saXN0VGVtcGxhdGUgJiYgZHluYW1pY0xpc3QpIHtcbiAgICAgIGR5bmFtaWNMaXN0Lm91dGVySFRNTCA9IHRoaXMubGlzdFRlbXBsYXRlO1xuICAgIH1cbiAgfVxufTtcblxud2luZG93LmRyb3BsYWJBamF4ID0gZHJvcGxhYkFqYXg7XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3BsYWJBamF4O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BsdWdpbnMvYWpheC5qcyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2E/MGFiZioqKioqKioqIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2FqYXgvYWpheC5qcz8yMTc4Il0sIm5hbWVzIjpbImRyb3BsYWJBamF4RXhjZXB0aW9uIiwibWVzc2FnZSIsImRyb3BsYWJBamF4IiwiX2xvYWRVcmxEYXRhIiwidXJsIiwic2VsZiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJzdGF0dXMiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwiY2FjaGUiLCJzZW5kIiwiX2xvYWREYXRhIiwiY29uZmlnIiwibG9hZGluZ1RlbXBsYXRlIiwiZGF0YUxvYWRpbmdUZW1wbGF0ZSIsImhvb2siLCJsaXN0IiwicXVlcnlTZWxlY3RvciIsIm91dGVySFRNTCIsImxpc3RUZW1wbGF0ZSIsImRlc3Ryb3llZCIsIm1ldGhvZCIsImNhbGwiLCJpbml0IiwiZW5kcG9pbnQiLCJkeW5hbWljTGlzdCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInNldEF0dHJpYnV0ZSIsInRoZW4iLCJkIiwiY2F0Y2giLCJlIiwiZGVzdHJveSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFB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WUFBTCxHQUFvQk0sWUFBWVAsU0FBaEM7QUFDQU8sa0JBQVlQLFNBQVosR0FBd0JMLGdCQUFnQkssU0FBeEM7QUFDRDtBQUNELFFBQUl4QixLQUFLZSxLQUFMLENBQVdHLE9BQU9ZLFFBQWxCLENBQUosRUFBaUM7QUFDL0I5QixXQUFLaUIsU0FBTCxDQUFlakIsS0FBS2UsS0FBTCxDQUFXRyxPQUFPWSxRQUFsQixDQUFmLEVBQTRDWixNQUE1QyxFQUFvRGxCLElBQXBEO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsV0FBS0YsWUFBTCxDQUFrQm9CLE9BQU9ZLFFBQXpCLEVBQ0dNLElBREgsQ0FDUSxVQUFTQyxDQUFULEVBQVk7QUFDaEJyQyxhQUFLaUIsU0FBTCxDQUFlb0IsQ0FBZixFQUFrQm5CLE1BQWxCLEVBQTBCbEIsSUFBMUI7QUFDRCxPQUhILEVBR0tzQyxLQUhMLENBR1csVUFBU0MsQ0FBVCxFQUFZO0FBQ25CLGNBQU0sSUFBSTVDLG9CQUFKLENBQXlCNEMsRUFBRTNDLE9BQUYsSUFBYTJDLENBQXRDLENBQU47QUFDRCxPQUxIO0FBTUQ7QUFDRixHQTFEaUI7QUEyRGxCQyxXQUFTLG1CQUFXO0FBQ2xCLFNBQUtkLFNBQUwsR0FBaUIsSUFBakI7O0FBRUEsUUFBSUssY0FBYyxLQUFLVixJQUFMLENBQVVDLElBQVYsQ0FBZUEsSUFBZixDQUFvQkMsYUFBcEIsQ0FBa0MsZ0JBQWxDLENBQWxCO0FBQ0EsUUFBSSxLQUFLRSxZQUFMLElBQXFCTSxXQUF6QixFQUFzQztBQUNwQ0Esa0JBQVlQLFNBQVosR0FBd0IsS0FBS0MsWUFBN0I7QUFDRDtBQUNGO0FBbEVpQixDQUFwQjs7a0JBcUVlNUIsVyIsImZpbGUiOiIuL2Rpc3QvcGx1Z2lucy9hamF4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2EiLCJmdW5jdGlvbiBkcm9wbGFiQWpheEV4Y2VwdGlvbihtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbmNvbnN0IGRyb3BsYWJBamF4ID0ge1xuICBfbG9hZFVybERhdGE6IGZ1bmN0aW9uIF9sb2FkVXJsRGF0YSh1cmwpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdDtcbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICBzZWxmLmNhY2hlW3VybF0gPSBkYXRhO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoW3hoci5yZXNwb25zZVRleHQsIHhoci5zdGF0dXNdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xuICB9LFxuICBfbG9hZERhdGE6IGZ1bmN0aW9uIF9sb2FkRGF0YShkYXRhLCBjb25maWcsIHNlbGYpIHtcbiAgICBpZiAoY29uZmlnLmxvYWRpbmdUZW1wbGF0ZSkge1xuICAgICAgdmFyIGRhdGFMb2FkaW5nVGVtcGxhdGUgPSBzZWxmLmhvb2subGlzdC5saXN0LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWxvYWRpbmctdGVtcGxhdGVdJyk7XG4gICAgICBpZiAoZGF0YUxvYWRpbmdUZW1wbGF0ZSkgZGF0YUxvYWRpbmdUZW1wbGF0ZS5vdXRlckhUTUwgPSBzZWxmLmxpc3RUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoIXNlbGYuZGVzdHJveWVkKSBzZWxmLmhvb2subGlzdFtjb25maWcubWV0aG9kXS5jYWxsKHNlbGYuaG9vay5saXN0LCBkYXRhKTtcbiAgfSxcbiAgaW5pdDogZnVuY3Rpb24gaW5pdChob29rKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgc2VsZi5jYWNoZSA9IHNlbGYuY2FjaGUgfHwge307XG4gICAgdmFyIGNvbmZpZyA9IGhvb2suY29uZmlnLmRyb3BsYWJBamF4O1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5lbmRwb2ludCB8fCAhY29uZmlnLm1ldGhvZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLm1ldGhvZCAhPT0gJ3NldERhdGEnICYmIGNvbmZpZy5tZXRob2QgIT09ICdhZGREYXRhJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmxvYWRpbmdUZW1wbGF0ZSkge1xuICAgICAgdmFyIGR5bmFtaWNMaXN0ID0gaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICAgIHZhciBsb2FkaW5nVGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGxvYWRpbmdUZW1wbGF0ZS5pbm5lckhUTUwgPSBjb25maWcubG9hZGluZ1RlbXBsYXRlO1xuICAgICAgbG9hZGluZ1RlbXBsYXRlLnNldEF0dHJpYnV0ZSgnZGF0YS1sb2FkaW5nLXRlbXBsYXRlJywgJycpO1xuICAgICAgdGhpcy5saXN0VGVtcGxhdGUgPSBkeW5hbWljTGlzdC5vdXRlckhUTUw7XG4gICAgICBkeW5hbWljTGlzdC5vdXRlckhUTUwgPSBsb2FkaW5nVGVtcGxhdGUub3V0ZXJIVE1MO1xuICAgIH1cbiAgICBpZiAoc2VsZi5jYWNoZVtjb25maWcuZW5kcG9pbnRdKSB7XG4gICAgICBzZWxmLl9sb2FkRGF0YShzZWxmLmNhY2hlW2NvbmZpZy5lbmRwb2ludF0sIGNvbmZpZywgc2VsZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvYWRVcmxEYXRhKGNvbmZpZy5lbmRwb2ludClcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHNlbGYuX2xvYWREYXRhKGQsIGNvbmZpZywgc2VsZik7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgZHJvcGxhYkFqYXhFeGNlcHRpb24oZS5tZXNzYWdlIHx8IGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcblxuICAgIHZhciBkeW5hbWljTGlzdCA9IHRoaXMuaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICBpZiAodGhpcy5saXN0VGVtcGxhdGUgJiYgZHluYW1pY0xpc3QpIHtcbiAgICAgIGR5bmFtaWNMaXN0Lm91dGVySFRNTCA9IHRoaXMubGlzdFRlbXBsYXRlO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZHJvcGxhYkFqYXg7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcGx1Z2lucy9hamF4L2FqYXguanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app/assets/javascripts/droplab/plugins/ajax_filter.js b/app/assets/javascripts/droplab/plugins/ajax_filter.js index b5892694e60..3e6532c7709 100644 --- a/app/assets/javascripts/droplab/plugins/ajax_filter.js +++ b/app/assets/javascripts/droplab/plugins/ajax_filter.js @@ -63,12 +63,12 @@ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 11); +/******/ return __webpack_require__(__webpack_require__.s = 6); /******/ }) /************************************************************************/ /******/ ({ -/***/ 11: +/***/ 6: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -206,11 +206,9 @@ var droplabAjaxFilter = { } }; -window.droplabAjaxFilter = droplabAjaxFilter; - exports.default = droplabAjaxFilter; /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGM/ZWM1ZioqIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2FqYXhfZmlsdGVyLmpzIl0sIm5hbWVzIjpbImRyb3BsYWJBamF4RmlsdGVyIiwiaW5pdCIsImhvb2siLCJkZXN0cm95ZWQiLCJub3RMb2FkaW5nIiwiZXZlbnRXcmFwcGVyIiwiZGVib3VuY2VUcmlnZ2VyIiwiYmluZCIsInRyaWdnZXIiLCJhZGRFdmVudExpc3RlbmVyIiwibG9hZGluZyIsImUiLCJOT05fQ0hBUkFDVEVSX0tFWVMiLCJpbnZhbGlkS2V5UHJlc3NlZCIsImluZGV4T2YiLCJkZXRhaWwiLCJ3aGljaCIsImtleUNvZGUiLCJmb2N1c0V2ZW50IiwidHlwZSIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiZ2V0RW50aXJlTGlzdCIsImNvbmZpZyIsInNlYXJjaFZhbHVlIiwidmFsdWUiLCJlbmRwb2ludCIsInNlYXJjaEtleSIsInNlYXJjaFZhbHVlRnVuY3Rpb24iLCJsb2FkaW5nVGVtcGxhdGUiLCJsaXN0IiwiZGF0YSIsInVuZGVmaW5lZCIsImxlbmd0aCIsImR5bmFtaWNMaXN0IiwicXVlcnlTZWxlY3RvciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInNldEF0dHJpYnV0ZSIsImxpc3RUZW1wbGF0ZSIsIm91dGVySFRNTCIsInNob3ciLCJwYXJhbXMiLCJzZWxmIiwiY2FjaGUiLCJ1cmwiLCJidWlsZFBhcmFtcyIsInVybENhY2hlZERhdGEiLCJfbG9hZERhdGEiLCJfbG9hZFVybERhdGEiLCJ0aGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInN0YXR1cyIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsInNlbmQiLCJkYXRhTG9hZGluZ1RlbXBsYXRlIiwiaG9va0xpc3RDaGlsZHJlbiIsImNoaWxkcmVuIiwib25seUR5bmFtaWNMaXN0IiwiaGFzQXR0cmlidXRlIiwiaGlkZSIsInNldERhdGEiLCJjYWxsIiwiY3VycmVudEluZGV4IiwicGFyYW1zQXJyYXkiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwicGFyYW0iLCJqb2luIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ3aW5kb3ciXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQ2hFQSxJQUFNQSxvQkFBb0I7QUFDeEJDLFFBQU0sY0FBU0MsSUFBVCxFQUFlO0FBQ25CLFNBQUtDLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxTQUFLRCxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLRSxVQUFMOztBQUVBLFNBQUtDLFlBQUwsR0FBb0IsRUFBcEI7QUFDQSxTQUFLQSxZQUFMLENBQWtCQyxlQUFsQixHQUFvQyxLQUFLQSxlQUFMLENBQXFCQyxJQUFyQixDQUEwQixJQUExQixDQUFwQztBQUNBLFNBQUtMLElBQUwsQ0FBVU0sT0FBVixDQUFrQkMsZ0JBQWxCLENBQW1DLFlBQW5DLEVBQWlELEtBQUtKLFlBQUwsQ0FBa0JDLGVBQW5FO0FB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QU9BLFFBQVEsR0FBUixJQUFlcEMsT0FBT29DLEtBQVAsS0FBaUIsRUFBaEMsQ0FBUDtBQUNELEtBRmlCLENBQWxCO0FBR0EsV0FBTyxNQUFNSixZQUFZSyxJQUFaLENBQWlCLEdBQWpCLENBQWI7QUFDRCxHQXZIdUI7O0FBeUh4QkMsV0FBUyxTQUFTQSxPQUFULEdBQW1CO0FBQzFCLFFBQUksS0FBSzlELE9BQVQsRUFBa0I7QUFDaEJDLG1CQUFhLEtBQUtELE9BQWxCO0FBQ0Q7O0FBRUQsU0FBS2pCLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxTQUFLRCxJQUFMLENBQVVNLE9BQVYsQ0FBa0IyRSxtQkFBbEIsQ0FBc0MsWUFBdEMsRUFBb0QsS0FBSzlFLFlBQUwsQ0FBa0JDLGVBQXRFO0FBQ0EsU0FBS0osSUFBTCxDQUFVTSxPQUFWLENBQWtCMkUsbUJBQWxCLENBQXNDLE9BQXRDLEVBQStDLEtBQUs5RSxZQUFMLENBQWtCQyxlQUFqRTtBQUNEO0FBakl1QixDQUExQjs7QUFvSUE4RSxPQUFPcEYsaUJBQVAsR0FBMkJBLGlCQUEzQjs7a0JBRWVBLGlCIiwiZmlsZSI6Ii4vZGlzdC9wbHVnaW5zL2FqYXhfZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTEpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGYzNzY3MmI3ZjUyOGI0NzJhNDRjIiwiY29uc3QgZHJvcGxhYkFqYXhGaWx0ZXIgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uKGhvb2spIHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgdGhpcy5ub3RMb2FkaW5nKCk7XG5cbiAgICB0aGlzLmV2ZW50V3JhcHBlciA9IHt9O1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlVHJpZ2dlciA9IHRoaXMuZGVib3VuY2VUcmlnZ2VyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ob29rLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bi5kbCcsIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlVHJpZ2dlcik7XG4gICAgdGhpcy5ob29rLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZVRyaWdnZXIpO1xuXG4gICAgdGhpcy50cmlnZ2VyKHRydWUpO1xuICB9LFxuXG4gIG5vdExvYWRpbmc6IGZ1bmN0aW9uIG5vdExvYWRpbmcoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH0sXG5cbiAgZGVib3VuY2VUcmlnZ2VyOiBmdW5jdGlvbiBkZWJvdW5jZVRyaWdnZXIoZSkge1xuICAgIHZhciBOT05fQ0hBUkFDVEVSX0tFWVMgPSBbMTYsIDE3LCAxOCwgMjAsIDM3LCAzOCwgMzksIDQwLCA5MSwgOTNdO1xuICAgIHZhciBpbnZhbGlkS2V5UHJlc3NlZCA9IE5PTl9DSEFSQUNURVJfS0VZUy5pbmRleE9mKGUuZGV0YWlsLndoaWNoIHx8IGUuZGV0YWlsLmtleUNvZGUpID4gLTE7XG4gICAgdmFyIGZvY3VzRXZlbnQgPSBlLnR5cGUgPT09ICdmb2N1cyc7XG4gICAgaWYgKGludmFsaWRLZXlQcmVzc2VkIHx8IHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLnRyaWdnZXIuYmluZCh0aGlzLCBmb2N1c0V2ZW50KSwgMjAwKTtcbiAgfSxcblxuICB0cmlnZ2VyOiBmdW5jdGlvbiB0cmlnZ2VyKGdldEVudGlyZUxpc3QpIHtcbiAgICB2YXIgY29uZmlnID0gdGhpcy5ob29rLmNvbmZpZy5kcm9wbGFiQWpheEZpbHRlcjtcbiAgICB2YXIgc2VhcmNoVmFsdWUgPSB0aGlzLnRyaWdnZXIudmFsdWU7XG4gICAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5lbmRwb2ludCB8fCAhY29uZmlnLnNlYXJjaEtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlYXJjaFZhbHVlRnVuY3Rpb24pIHtcbiAgICAgIHNlYXJjaFZhbHVlID0gY29uZmlnLnNlYXJjaFZhbHVlRnVuY3Rpb24oKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5sb2FkaW5nVGVtcGxhdGUgJiYgdGhpcy5ob29rLmxpc3QuZGF0YSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmhvb2subGlzdC5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdmFyIGR5bmFtaWNMaXN0ID0gdGhpcy5ob29rLmxpc3QubGlzdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1keW5hbWljXScpO1xuICAgICAgdmFyIGxvYWRpbmdUZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgbG9hZGluZ1RlbXBsYXRlLmlubmVySFRNTCA9IGNvbmZpZy5sb2FkaW5nVGVtcGxhdGU7XG4gICAgICBsb2FkaW5nVGVtcGxhdGUuc2V0QXR0cmlidXRlKCdkYXRhLWxvYWRpbmctdGVtcGxhdGUnLCB0cnVlKTtcbiAgICAgIHRoaXMubGlzdFRlbXBsYXRlID0gZHluYW1pY0xpc3Qub3V0ZXJIVE1MO1xuICAgICAgZHluYW1pY0xpc3Qub3V0ZXJIVE1MID0gbG9hZGluZ1RlbXBsYXRlLm91dGVySFRNTDtcbiAgICB9XG4gICAgaWYgKGdldEVudGlyZUxpc3QpIHtcbiAgICAgIHNlYXJjaFZhbHVlID0gJyc7XG4gICAgfVxuICAgIGlmIChjb25maWcuc2VhcmNoS2V5ID09PSBzZWFyY2hWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubGlzdC5zaG93KCk7XG4gICAgfVxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdmFyIHBhcmFtcyA9IGNvbmZpZy5wYXJhbXMgfHwge307XG4gICAgcGFyYW1zW2NvbmZpZy5zZWFyY2hLZXldID0gc2VhcmNoVmFsdWU7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuY2FjaGUgPSBzZWxmLmNhY2hlIHx8IHt9O1xuICAgIHZhciB1cmwgPSBjb25maWcuZW5kcG9pbnQgKyB0aGlzLmJ1aWxkUGFyYW1zKHBhcmFtcyk7XG4gICAgdmFyIHVybENhY2hlZERhdGEgPSBzZWxmLmNhY2hlW3VybF07XG4gICAgaWYgKHVybENhY2hlZERhdGEpIHtcbiAgICAgIHNlbGYuX2xvYWREYXRhKHVybENhY2hlZERhdGEsIGNvbmZpZywgc2VsZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvYWRVcmxEYXRhKHVybClcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIHNlbGYuX2xvYWREYXRhKGRhdGEsIGNvbmZpZywgc2VsZik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBfbG9hZFVybERhdGE6IGZ1bmN0aW9uIF9sb2FkVXJsRGF0YSh1cmwpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdDtcbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICBzZWxmLmNhY2hlW3VybF0gPSBkYXRhO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoW3hoci5yZXNwb25zZVRleHQsIHhoci5zdGF0dXNdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xuICB9LFxuXG4gIF9sb2FkRGF0YTogZnVuY3Rpb24gX2xvYWREYXRhKGRhdGEsIGNvbmZpZywgc2VsZikge1xuICAgIGNvbnN0IGxpc3QgPSBzZWxmLmhvb2subGlzdDtcbiAgICBpZiAoY29uZmlnLmxvYWRpbmdUZW1wbGF0ZSAmJiBsaXN0LmRhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgbGlzdC5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgZGF0YUxvYWRpbmdUZW1wbGF0ZSA9IGxpc3QubGlzdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1sb2FkaW5nLXRlbXBsYXRlXScpO1xuICAgICAgaWYgKGRhdGFMb2FkaW5nVGVtcGxhdGUpIHtcbiAgICAgICAgZGF0YUxvYWRpbmdUZW1wbGF0ZS5vdXRlckhUTUwgPSBzZWxmLmxpc3RUZW1wbGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFzZWxmLmRlc3Ryb3llZCkge1xuICAgICAgdmFyIGhvb2tMaXN0Q2hpbGRyZW4gPSBsaXN0Lmxpc3QuY2hpbGRyZW47XG4gICAgICB2YXIgb25seUR5bmFtaWNMaXN0ID0gaG9va0xpc3RDaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgaG9va0xpc3RDaGlsZHJlblswXS5oYXNBdHRyaWJ1dGUoJ2RhdGEtZHluYW1pYycpO1xuICAgICAgaWYgKG9ubHlEeW5hbWljTGlzdCAmJiBkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBsaXN0LmhpZGUoKTtcbiAgICAgIH1cbiAgICAgIGxpc3Quc2V0RGF0YS5jYWxsKGxpc3QsIGRhdGEpO1xuICAgIH1cbiAgICBzZWxmLm5vdExvYWRpbmcoKTtcbiAgICBsaXN0LmN1cnJlbnRJbmRleCA9IDA7XG4gIH0sXG5cbiAgYnVpbGRQYXJhbXM6IGZ1bmN0aW9uKHBhcmFtcykge1xuICAgIGlmICghcGFyYW1zKSByZXR1cm4gJyc7XG4gICAgdmFyIHBhcmFtc0FycmF5ID0gT2JqZWN0LmtleXMocGFyYW1zKS5tYXAoZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbSArICc9JyArIChwYXJhbXNbcGFyYW1dIHx8ICcnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gJz8nICsgcGFyYW1zQXJyYXkuam9pbignJicpO1xuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMuaG9vay50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24uZGwnLCB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZVRyaWdnZXIpO1xuICAgIHRoaXMuaG9vay50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VUcmlnZ2VyKTtcbiAgfVxufTtcblxud2luZG93LmRyb3BsYWJBamF4RmlsdGVyID0gZHJvcGxhYkFqYXhGaWx0ZXI7XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3BsYWJBamF4RmlsdGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BsdWdpbnMvYWpheF9maWx0ZXIuanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2E/MGFiZioqKioqKioiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvYWpheF9maWx0ZXIvYWpheF9maWx0ZXIuanM/YzNlNSJdLCJuYW1lcyI6WyJkcm9wbGFiQWpheEZpbHRlciIsImluaXQiLCJob29rIiwiZGVzdHJveWVkIiwibm90TG9hZGluZyIsImV2ZW50V3JhcHBlciIsImRlYm91bmNlVHJpZ2dlciIsImJpbmQiLCJ0cmlnZ2VyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImxvYWRpbmciLCJlIiwiTk9OX0NIQVJBQ1RFUl9LRVlTIiwiaW52YWxpZEtleVByZXNzZWQiLCJpbmRleE9mIiwiZGV0YWlsIiwid2hpY2giLCJrZXlDb2RlIiwiZm9jdXNFdmVudCIsInR5cGUiLCJ0aW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImdldEVudGlyZUxpc3QiLCJjb25maWciLCJzZWFyY2hWYWx1ZSIsInZhbHVlIiwiZW5kcG9pbnQiLCJzZWFyY2hLZXkiLCJzZWFyY2hWYWx1ZUZ1bmN0aW9uIiwibG9hZGluZ1RlbXBsYXRlIiwibGlzdCIsImRhdGEiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJkeW5hbWljTGlzdCIsInF1ZXJ5U2VsZWN0b3IiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJzZXRBdHRyaWJ1dGUiLCJsaXN0VGVtcGxhdGUiLCJvdXRlckhUTUwiLCJzaG93IiwicGFyYW1zIiwic2VsZiIsImNhY2hlIiwidXJsIiwiYnVpbGRQYXJhbXMiLCJ1cmxDYWNoZWREYXRhIiwiX2xvYWREYXRhIiwiX2xvYWRVcmxEYXRhIiwidGhlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJzdGF0dXMiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJzZW5kIiwiZGF0YUxvYWRpbmdUZW1wbGF0ZSIsImhvb2tMaXN0Q2hpbGRyZW4iLCJjaGlsZHJlbiIsIm9ubHlEeW5hbWljTGlzdCIsImhhc0F0dHJpYnV0ZSIsImhpZGUiLCJzZXREYXRhIiwiY2FsbCIsImN1cnJlbnRJbmRleCIsInBhcmFtc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsInBhcmFtIiwiam9pbiIsImRlc3Ryb3kiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQTJDLGNBQWM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUNoRUEsSUFBTUEsb0JBQW9CO0FBQ3hCQyxRQUFNLGNBQVNDLElBQVQsRUFBZTtBQUNuQixTQUFLQyxTQUFMLEdBQWlCLEtBQWpCO0FBQ0EsU0FBS0QsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0UsVUFBTDs7QUFFQSxTQUFLQyxZQUFMLEdBQW9CLEVBQXBCO0FBQ0EsU0FBS0EsWUFBTCxDQUFrQkMsZUFBbEIsR0FBb0MsS0FBS0EsZUFBTCxDQUFxQkMsSUFBckIsQ0FBMEIsSUFBMUIsQ0FBcEM7QUFDQSxTQUFLTCxJQUFMLENBQVVNLE9BQVYsQ0FBa0JDLGdCQUFsQixDQUFtQyxZQUFuQyxFQUFpRCxLQUFLSixZQUFMLENB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QUFnQjtBQUN4RCxhQUFPQSxRQUFRLEdBQVIsSUFBZXBDLE9BQU9vQyxLQUFQLEtBQWlCLEVBQWhDLENBQVA7QUFDRCxLQUZpQixDQUFsQjtBQUdBLFdBQU8sTUFBTUosWUFBWUssSUFBWixDQUFpQixHQUFqQixDQUFiO0FBQ0QsR0F2SHVCOztBQXlIeEJDLFdBQVMsU0FBU0EsT0FBVCxHQUFtQjtBQUMxQixRQUFJLEtBQUs5RCxPQUFULEVBQWtCO0FBQ2hCQyxtQkFBYSxLQUFLRCxPQUFsQjtBQUNEOztBQUVELFNBQUtqQixTQUFMLEdBQWlCLElBQWpCO0FBQ0EsU0FBS0QsSUFBTCxDQUFVTSxPQUFWLENBQWtCMkUsbUJBQWxCLENBQXNDLFlBQXRDLEVBQW9ELEtBQUs5RSxZQUFMLENBQWtCQyxlQUF0RTtBQUNBLFNBQUtKLElBQUwsQ0FBVU0sT0FBVixDQUFrQjJFLG1CQUFsQixDQUFzQyxPQUF0QyxFQUErQyxLQUFLOUUsWUFBTCxDQUFrQkMsZUFBakU7QUFDRDtBQWpJdUIsQ0FBMUI7O2tCQW9JZU4saUIiLCJmaWxlIjoiLi9kaXN0L3BsdWdpbnMvYWpheF9maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA2KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA5MzNmZjdkNWVkMzkzZGM2M2JjYSIsImNvbnN0IGRyb3BsYWJBamF4RmlsdGVyID0ge1xuICBpbml0OiBmdW5jdGlvbihob29rKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhvb2sgPSBob29rO1xuICAgIHRoaXMubm90TG9hZGluZygpO1xuXG4gICAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcbiAgICB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZVRyaWdnZXIgPSB0aGlzLmRlYm91bmNlVHJpZ2dlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaG9vay50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24uZGwnLCB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZVRyaWdnZXIpO1xuICAgIHRoaXMuaG9vay50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VUcmlnZ2VyKTtcblxuICAgIHRoaXMudHJpZ2dlcih0cnVlKTtcbiAgfSxcblxuICBub3RMb2FkaW5nOiBmdW5jdGlvbiBub3RMb2FkaW5nKCkge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9LFxuXG4gIGRlYm91bmNlVHJpZ2dlcjogZnVuY3Rpb24gZGVib3VuY2VUcmlnZ2VyKGUpIHtcbiAgICB2YXIgTk9OX0NIQVJBQ1RFUl9LRVlTID0gWzE2LCAxNywgMTgsIDIwLCAzNywgMzgsIDM5LCA0MCwgOTEsIDkzXTtcbiAgICB2YXIgaW52YWxpZEtleVByZXNzZWQgPSBOT05fQ0hBUkFDVEVSX0tFWVMuaW5kZXhPZihlLmRldGFpbC53aGljaCB8fCBlLmRldGFpbC5rZXlDb2RlKSA+IC0xO1xuICAgIHZhciBmb2N1c0V2ZW50ID0gZS50eXBlID09PSAnZm9jdXMnO1xuICAgIGlmIChpbnZhbGlkS2V5UHJlc3NlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQodGhpcy50cmlnZ2VyLmJpbmQodGhpcywgZm9jdXNFdmVudCksIDIwMCk7XG4gIH0sXG5cbiAgdHJpZ2dlcjogZnVuY3Rpb24gdHJpZ2dlcihnZXRFbnRpcmVMaXN0KSB7XG4gICAgdmFyIGNvbmZpZyA9IHRoaXMuaG9vay5jb25maWcuZHJvcGxhYkFqYXhGaWx0ZXI7XG4gICAgdmFyIHNlYXJjaFZhbHVlID0gdGhpcy50cmlnZ2VyLnZhbHVlO1xuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcuZW5kcG9pbnQgfHwgIWNvbmZpZy5zZWFyY2hLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5zZWFyY2hWYWx1ZUZ1bmN0aW9uKSB7XG4gICAgICBzZWFyY2hWYWx1ZSA9IGNvbmZpZy5zZWFyY2hWYWx1ZUZ1bmN0aW9uKCk7XG4gICAgfVxuICAgIGlmIChjb25maWcubG9hZGluZ1RlbXBsYXRlICYmIHRoaXMuaG9vay5saXN0LmRhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5ob29rLmxpc3QuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhciBkeW5hbWljTGlzdCA9IHRoaXMuaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICAgIHZhciBsb2FkaW5nVGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGxvYWRpbmdUZW1wbGF0ZS5pbm5lckhUTUwgPSBjb25maWcubG9hZGluZ1RlbXBsYXRlO1xuICAgICAgbG9hZGluZ1RlbXBsYXRlLnNldEF0dHJpYnV0ZSgnZGF0YS1sb2FkaW5nLXRlbXBsYXRlJywgdHJ1ZSk7XG4gICAgICB0aGlzLmxpc3RUZW1wbGF0ZSA9IGR5bmFtaWNMaXN0Lm91dGVySFRNTDtcbiAgICAgIGR5bmFtaWNMaXN0Lm91dGVySFRNTCA9IGxvYWRpbmdUZW1wbGF0ZS5vdXRlckhUTUw7XG4gICAgfVxuICAgIGlmIChnZXRFbnRpcmVMaXN0KSB7XG4gICAgICBzZWFyY2hWYWx1ZSA9ICcnO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlYXJjaEtleSA9PT0gc2VhcmNoVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpc3Quc2hvdygpO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHZhciBwYXJhbXMgPSBjb25maWcucGFyYW1zIHx8IHt9O1xuICAgIHBhcmFtc1tjb25maWcuc2VhcmNoS2V5XSA9IHNlYXJjaFZhbHVlO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBzZWxmLmNhY2hlID0gc2VsZi5jYWNoZSB8fCB7fTtcbiAgICB2YXIgdXJsID0gY29uZmlnLmVuZHBvaW50ICsgdGhpcy5idWlsZFBhcmFtcyhwYXJhbXMpO1xuICAgIHZhciB1cmxDYWNoZWREYXRhID0gc2VsZi5jYWNoZVt1cmxdO1xuICAgIGlmICh1cmxDYWNoZWREYXRhKSB7XG4gICAgICBzZWxmLl9sb2FkRGF0YSh1cmxDYWNoZWREYXRhLCBjb25maWcsIHNlbGYpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2FkVXJsRGF0YSh1cmwpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICBzZWxmLl9sb2FkRGF0YShkYXRhLCBjb25maWcsIHNlbGYpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgX2xvYWRVcmxEYXRhOiBmdW5jdGlvbiBfbG9hZFVybERhdGEodXJsKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7XG4gICAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTtcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmKHhoci5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5ET05FKSB7XG4gICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgc2VsZi5jYWNoZVt1cmxdID0gZGF0YTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KFt4aHIucmVzcG9uc2VUZXh0LCB4aHIuc3RhdHVzXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbiAgfSxcblxuICBfbG9hZERhdGE6IGZ1bmN0aW9uIF9sb2FkRGF0YShkYXRhLCBjb25maWcsIHNlbGYpIHtcbiAgICBjb25zdCBsaXN0ID0gc2VsZi5ob29rLmxpc3Q7XG4gICAgaWYgKGNvbmZpZy5sb2FkaW5nVGVtcGxhdGUgJiYgbGlzdC5kYXRhID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGxpc3QuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGRhdGFMb2FkaW5nVGVtcGxhdGUgPSBsaXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtbG9hZGluZy10ZW1wbGF0ZV0nKTtcbiAgICAgIGlmIChkYXRhTG9hZGluZ1RlbXBsYXRlKSB7XG4gICAgICAgIGRhdGFMb2FkaW5nVGVtcGxhdGUub3V0ZXJIVE1MID0gc2VsZi5saXN0VGVtcGxhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghc2VsZi5kZXN0cm95ZWQpIHtcbiAgICAgIHZhciBob29rTGlzdENoaWxkcmVuID0gbGlzdC5saXN0LmNoaWxkcmVuO1xuICAgICAgdmFyIG9ubHlEeW5hbWljTGlzdCA9IGhvb2tMaXN0Q2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIGhvb2tMaXN0Q2hpbGRyZW5bMF0uaGFzQXR0cmlidXRlKCdkYXRhLWR5bmFtaWMnKTtcbiAgICAgIGlmIChvbmx5RHluYW1pY0xpc3QgJiYgZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbGlzdC5oaWRlKCk7XG4gICAgICB9XG4gICAgICBsaXN0LnNldERhdGEuY2FsbChsaXN0LCBkYXRhKTtcbiAgICB9XG4gICAgc2VsZi5ub3RMb2FkaW5nKCk7XG4gICAgbGlzdC5jdXJyZW50SW5kZXggPSAwO1xuICB9LFxuXG4gIGJ1aWxkUGFyYW1zOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICBpZiAoIXBhcmFtcykgcmV0dXJuICcnO1xuICAgIHZhciBwYXJhbXNBcnJheSA9IE9iamVjdC5rZXlzKHBhcmFtcykubWFwKGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0gKyAnPScgKyAocGFyYW1zW3BhcmFtXSB8fCAnJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuICc/JyArIHBhcmFtc0FycmF5LmpvaW4oJyYnKTtcbiAgfSxcblxuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cblxuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLmhvb2sudHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duLmRsJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VUcmlnZ2VyKTtcbiAgICB0aGlzLmhvb2sudHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlVHJpZ2dlcik7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3BsYWJBamF4RmlsdGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BsdWdpbnMvYWpheF9maWx0ZXIvYWpheF9maWx0ZXIuanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app/assets/javascripts/droplab/plugins/filter.js b/app/assets/javascripts/droplab/plugins/filter.js index 183d137b3a3..3d81fbd7d2f 100644 --- a/app/assets/javascripts/droplab/plugins/filter.js +++ b/app/assets/javascripts/droplab/plugins/filter.js @@ -63,12 +63,12 @@ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 12); +/******/ return __webpack_require__(__webpack_require__.s = 7); /******/ }) /************************************************************************/ /******/ ({ -/***/ 12: +/***/ 7: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -150,10 +150,12 @@ var droplabFilter = { this.eventWrapper.debounceKeydown = this.debounceKeydown.bind(this); this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceKeydown); + this.hook.trigger.addEventListener('mousedown.dl', this.eventWrapper.debounceKeydown); }, destroy: function destroy() { this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceKeydown); + this.hook.trigger.removeEventListener('mousedown.dl', this.eventWrapper.debounceKeydown); var dynamicList = this.hook.list.list.querySelector('[data-dynamic]'); if (this.listTemplate && dynamicList) { @@ -162,11 +164,9 @@ var droplabFilter = { } }; -window.droplabFilter = droplabFilter; - exports.default = droplabFilter; /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGM/ZWM1ZioiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvZmlsdGVyLmpzIl0sIm5hbWVzIjpbImRyb3BsYWJGaWx0ZXIiLCJrZXlkb3duIiwiZSIsImhpZGRlbkNvdW50IiwiZGF0YUhpZGRlbkNvdW50IiwibGlzdCIsImRldGFpbCIsImhvb2siLCJkYXRhIiwidmFsdWUiLCJ0cmlnZ2VyIiwidG9Mb3dlckNhc2UiLCJjb25maWciLCJtYXRjaGVzIiwiZmlsdGVyRnVuY3Rpb24iLCJvIiwiZHJvcGxhYl9oaWRkZW4iLCJ0ZW1wbGF0ZSIsImluZGV4T2YiLCJmaWx0ZXIiLCJsZW5ndGgiLCJtYXAiLCJyZW5kZXIiLCJjdXJyZW50SW5kZXgiLCJkZWJvdW5jZUtleWRvd24iLCJ3aGljaCIsImtleUNvZGUiLCJ0aW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImJpbmQiLCJpbml0IiwiZXZlbnRXcmFwcGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRlc3Ryb3kiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZHluYW1pY0xpc3QiLCJxdWVyeVNlbGVjdG9yIiwibGlzdFRlbXBsYXRlIiwib3V0ZXJIVE1MIiwid2luZG93Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQTJDLGNBQWM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFF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QixZQUFMLEdBQW9CLEVBQXBCO0FBQ0EsU0FBS0EsWUFBTCxDQUFrQlIsZUFBbEIsR0FBb0MsS0FBS0EsZUFBTCxDQUFxQk0sSUFBckIsQ0FBMEIsSUFBMUIsQ0FBcEM7O0FBRUEsU0FBS3ZCLElBQUwsQ0FBVUcsT0FBVixDQUFrQnVCLGdCQUFsQixDQUFtQyxZQUFuQyxFQUFpRCxLQUFLRCxZQUFMLENBQWtCUixlQUFuRTtBQUNELEdBM0VtQjs7QUE2RXBCVSxXQUFTLFNBQVNBLE9BQVQsR0FBbUI7QUFDMUIsU0FBSzNCLElBQUwsQ0FBVUcsT0FBVixDQUFrQnlCLG1CQUFsQixDQUFzQyxZQUF0QyxFQUFvRCxLQUFLSCxZQUFMLENBQWtCUixlQUF0RTs7QUFFQSxRQUFJWSxjQUFjLEtBQUs3QixJQUFMLENBQVVGLElBQVYsQ0FBZUEsSUFBZixDQUFvQmdDLGFBQXBCLENBQWtDLGdCQUFsQyxDQUFsQjtBQUNBLFFBQUksS0FBS0MsWUFBTCxJQUFxQkYsV0FBekIsRUFBc0M7QUFDcENBLGtCQUFZRyxTQUFaLEdBQXdCLEtBQUtELFlBQTdCO0FBQ0Q7QUFDRjtBQXBGbUIsQ0FBdEI7O0FBdUZBRSxPQUFPeEMsYUFBUCxHQUF1QkEsYUFBdkI7O2tCQUVlQSxhIiwiZmlsZSI6Ii4vZGlzdC9wbHVnaW5zL2ZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEyKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBmMzc2NzJiN2Y1MjhiNDcyYTQ0YyIsImNvbnN0IGRyb3BsYWJGaWx0ZXIgPSB7XG4gIGtleWRvd246IGZ1bmN0aW9uKGUpe1xuICAgIHZhciBoaWRkZW5Db3VudCA9IDA7XG4gICAgdmFyIGRhdGFIaWRkZW5Db3VudCA9IDA7XG5cbiAgICB2YXIgbGlzdCA9IGUuZGV0YWlsLmhvb2subGlzdDtcbiAgICB2YXIgZGF0YSA9IGxpc3QuZGF0YTtcbiAgICB2YXIgdmFsdWUgPSBlLmRldGFpbC5ob29rLnRyaWdnZXIudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgY29uZmlnID0gZS5kZXRhaWwuaG9vay5jb25maWcuZHJvcGxhYkZpbHRlcjtcbiAgICB2YXIgbWF0Y2hlcyA9IFtdO1xuICAgIHZhciBmaWx0ZXJGdW5jdGlvbjtcbiAgICAvLyB3aWxsIG9ubHkgd29yayBvbiBkeW5hbWljYWxseSBzZXQgZGF0YVxuICAgIGlmKCFkYXRhKXtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5maWx0ZXJGdW5jdGlvbiAmJiB0eXBlb2YgY29uZmlnLmZpbHRlckZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmaWx0ZXJGdW5jdGlvbiA9IGNvbmZpZy5maWx0ZXJGdW5jdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsdGVyRnVuY3Rpb24gPSBmdW5jdGlvbihvKXtcbiAgICAgICAgLy8gY2hlYXAgc3RyaW5nIHNlYXJjaFxuICAgICAgICBvLmRyb3BsYWJfaGlkZGVuID0gb1tjb25maWcudGVtcGxhdGVdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih2YWx1ZSkgPT09IC0xO1xuICAgICAgICByZXR1cm4gbztcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZGF0YUhpZGRlbkNvdW50ID0gZGF0YS5maWx0ZXIoZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuICFvLmRyb3BsYWJfaGlkZGVuO1xuICAgIH0pLmxlbmd0aDtcblxuICAgIG1hdGNoZXMgPSBkYXRhLm1hcChmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gZmlsdGVyRnVuY3Rpb24obywgdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaGlkZGVuQ291bnQgPSBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gIW8uZHJvcGxhYl9oaWRkZW47XG4gICAgfSkubGVuZ3RoO1xuXG4gICAgaWYgKGRhdGFIaWRkZW5Db3VudCAhPT0gaGlkZGVuQ291bnQpIHtcbiAgICAgIGxpc3QucmVuZGVyKG1hdGNoZXMpO1xuICAgICAgbGlzdC5jdXJyZW50SW5kZXggPSAwO1xuICAgIH1cbiAgfSxcblxuICBkZWJvdW5jZUtleWRvd246IGZ1bmN0aW9uIGRlYm91bmNlS2V5ZG93bihlKSB7XG4gICAgaWYgKFtcbiAgICAgIDEzLCAvLyBlbnRlclxuICAgICAgMTYsIC8vIHNoaWZ0XG4gICAgICAxNywgLy8gY3RybFxuICAgICAgMTgsIC8vIGFsdFxuICAgICAgMjAsIC8vIGNhcHMgbG9ja1xuICAgICAgMzcsIC8vIGxlZnQgYXJyb3dcbiAgICAgIDM4LCAvLyB1cCBhcnJvd1xuICAgICAgMzksIC8vIHJpZ2h0IGFycm93XG4gICAgICA0MCwgLy8gZG93biBhcnJvd1xuICAgICAgOTEsIC8vIGxlZnQgd2luZG93XG4gICAgICA5MiwgLy8gcmlnaHQgd2luZG93XG4gICAgICA5MywgLy8gc2VsZWN0XG4gICAgXS5pbmRleE9mKGUuZGV0YWlsLndoaWNoIHx8IGUuZGV0YWlsLmtleUNvZGUpID4gLTEpIHJldHVybjtcblxuICAgIGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5rZXlkb3duLmJpbmQodGhpcywgZSksIDIwMCk7XG4gIH0sXG5cbiAgaW5pdDogZnVuY3Rpb24gaW5pdChob29rKSB7XG4gICAgdmFyIGNvbmZpZyA9IGhvb2suY29uZmlnLmRyb3BsYWJGaWx0ZXI7XG5cbiAgICBpZiAoIWNvbmZpZyB8fCAhY29uZmlnLnRlbXBsYXRlKSByZXR1cm47XG5cbiAgICB0aGlzLmhvb2sgPSBob29rO1xuXG4gICAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcbiAgICB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZUtleWRvd24gPSB0aGlzLmRlYm91bmNlS2V5ZG93bi5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5ob29rLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bi5kbCcsIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlS2V5ZG93bik7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmhvb2sudHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duLmRsJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VLZXlkb3duKTtcblxuICAgIHZhciBkeW5hbWljTGlzdCA9IHRoaXMuaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICBpZiAodGhpcy5saXN0VGVtcGxhdGUgJiYgZHluYW1pY0xpc3QpIHtcbiAgICAgIGR5bmFtaWNMaXN0Lm91dGVySFRNTCA9IHRoaXMubGlzdFRlbXBsYXRlO1xuICAgIH1cbiAgfVxufTtcblxud2luZG93LmRyb3BsYWJGaWx0ZXIgPSBkcm9wbGFiRmlsdGVyO1xuXG5leHBvcnQgZGVmYXVsdCBkcm9wbGFiRmlsdGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BsdWdpbnMvZmlsdGVyLmpzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2E/MGFiZioqKioqKiIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9maWx0ZXIvZmlsdGVyLmpzP2Y0MWEiXSwibmFtZXMiOlsiZHJvcGxhYkZpbHRlciIsImtleWRvd24iLCJlIiwiaGlkZGVuQ291bnQiLCJkYXRhSGlkZGVuQ291bnQiLCJsaXN0IiwiZGV0YWlsIiwiaG9vayIsImRhdGEiLCJ2YWx1ZSIsInRyaWdnZXIiLCJ0b0xvd2VyQ2FzZSIsImNvbmZpZyIsIm1hdGNoZXMiLCJmaWx0ZXJGdW5jdGlvbiIsIm8iLCJkcm9wbGFiX2hpZGRlbiIsInRlbXBsYXRlIiwiaW5kZXhPZiIsImZpbHRlciIsImxlbmd0aCIsIm1hcCIsInJlbmRlciIsImN1cnJlbnRJbmRleCIsImRlYm91bmNlS2V5ZG93biIsIndoaWNoIiwia2V5Q29kZSIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiYmluZCIsImluaXQiLCJldmVudFdyYXBwZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkeW5hbWljTGlzdCIsInF1ZXJ5U2VsZWN0b3IiLCJsaXN0VGVtcGxhdGUiLCJvdXRlckhUTUwiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtB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RUEsU0FBS3lCLFlBQUwsR0FBb0IsRUFBcEI7QUFDQSxTQUFLQSxZQUFMLENBQWtCUixlQUFsQixHQUFvQyxLQUFLQSxlQUFMLENBQXFCTSxJQUFyQixDQUEwQixJQUExQixDQUFwQzs7QUFFQSxTQUFLdkIsSUFBTCxDQUFVRyxPQUFWLENBQWtCdUIsZ0JBQWxCLENBQW1DLFlBQW5DLEVBQWlELEtBQUtELFlBQUwsQ0FBa0JSLGVBQW5FO0FBQ0EsU0FBS2pCLElBQUwsQ0FBVUcsT0FBVixDQUFrQnVCLGdCQUFsQixDQUFtQyxjQUFuQyxFQUFtRCxLQUFLRCxZQUFMLENBQWtCUixlQUFyRTtBQUNELEdBNUVtQjs7QUE4RXBCVSxXQUFTLFNBQVNBLE9BQVQsR0FBbUI7QUFDMUIsU0FBSzNCLElBQUwsQ0FBVUcsT0FBVixDQUFrQnlCLG1CQUFsQixDQUFzQyxZQUF0QyxFQUFvRCxLQUFLSCxZQUFMLENBQWtCUixlQUF0RTtBQUNBLFNBQUtqQixJQUFMLENBQVVHLE9BQVYsQ0FBa0J5QixtQkFBbEIsQ0FBc0MsY0FBdEMsRUFBc0QsS0FBS0gsWUFBTCxDQUFrQlIsZUFBeEU7O0FBRUEsUUFBSVksY0FBYyxLQUFLN0IsSUFBTCxDQUFVRixJQUFWLENBQWVBLElBQWYsQ0FBb0JnQyxhQUFwQixDQUFrQyxnQkFBbEMsQ0FBbEI7QUFDQSxRQUFJLEtBQUtDLFlBQUwsSUFBcUJGLFdBQXpCLEVBQXNDO0FBQ3BDQSxrQkFBWUcsU0FBWixHQUF3QixLQUFLRCxZQUE3QjtBQUNEO0FBQ0Y7QUF0Rm1CLENBQXRCOztrQkF5RmV0QyxhIiwiZmlsZSI6Ii4vZGlzdC9wbHVnaW5zL2ZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDkzM2ZmN2Q1ZWQzOTNkYzYzYmNhIiwiY29uc3QgZHJvcGxhYkZpbHRlciA9IHtcbiAga2V5ZG93bjogZnVuY3Rpb24oZSl7XG4gICAgdmFyIGhpZGRlbkNvdW50ID0gMDtcbiAgICB2YXIgZGF0YUhpZGRlbkNvdW50ID0gMDtcblxuICAgIHZhciBsaXN0ID0gZS5kZXRhaWwuaG9vay5saXN0O1xuICAgIHZhciBkYXRhID0gbGlzdC5kYXRhO1xuICAgIHZhciB2YWx1ZSA9IGUuZGV0YWlsLmhvb2sudHJpZ2dlci52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBjb25maWcgPSBlLmRldGFpbC5ob29rLmNvbmZpZy5kcm9wbGFiRmlsdGVyO1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgdmFyIGZpbHRlckZ1bmN0aW9uO1xuICAgIC8vIHdpbGwgb25seSB3b3JrIG9uIGR5bmFtaWNhbGx5IHNldCBkYXRhXG4gICAgaWYoIWRhdGEpe1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb25maWcgJiYgY29uZmlnLmZpbHRlckZ1bmN0aW9uICYmIHR5cGVvZiBjb25maWcuZmlsdGVyRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZpbHRlckZ1bmN0aW9uID0gY29uZmlnLmZpbHRlckZ1bmN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWx0ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uKG8pe1xuICAgICAgICAvLyBjaGVhcCBzdHJpbmcgc2VhcmNoXG4gICAgICAgIG8uZHJvcGxhYl9oaWRkZW4gPSBvW2NvbmZpZy50ZW1wbGF0ZV0udG9Mb3dlckNhc2UoKS5pbmRleE9mKHZhbHVlKSA9PT0gLTE7XG4gICAgICAgIHJldHVybiBvO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBkYXRhSGlkZGVuQ291bnQgPSBkYXRhLmZpbHRlcihmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gIW8uZHJvcGxhYl9oaWRkZW47XG4gICAgfSkubGVuZ3RoO1xuXG4gICAgbWF0Y2hlcyA9IGRhdGEubWFwKGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJldHVybiBmaWx0ZXJGdW5jdGlvbihvLCB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBoaWRkZW5Db3VudCA9IG1hdGNoZXMuZmlsdGVyKGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJldHVybiAhby5kcm9wbGFiX2hpZGRlbjtcbiAgICB9KS5sZW5ndGg7XG5cbiAgICBpZiAoZGF0YUhpZGRlbkNvdW50ICE9PSBoaWRkZW5Db3VudCkge1xuICAgICAgbGlzdC5yZW5kZXIobWF0Y2hlcyk7XG4gICAgICBsaXN0LmN1cnJlbnRJbmRleCA9IDA7XG4gICAgfVxuICB9LFxuXG4gIGRlYm91bmNlS2V5ZG93bjogZnVuY3Rpb24gZGVib3VuY2VLZXlkb3duKGUpIHtcbiAgICBpZiAoW1xuICAgICAgMTMsIC8vIGVudGVyXG4gICAgICAxNiwgLy8gc2hpZnRcbiAgICAgIDE3LCAvLyBjdHJsXG4gICAgICAxOCwgLy8gYWx0XG4gICAgICAyMCwgLy8gY2FwcyBsb2NrXG4gICAgICAzNywgLy8gbGVmdCBhcnJvd1xuICAgICAgMzgsIC8vIHVwIGFycm93XG4gICAgICAzOSwgLy8gcmlnaHQgYXJyb3dcbiAgICAgIDQwLCAvLyBkb3duIGFycm93XG4gICAgICA5MSwgLy8gbGVmdCB3aW5kb3dcbiAgICAgIDkyLCAvLyByaWdodCB3aW5kb3dcbiAgICAgIDkzLCAvLyBzZWxlY3RcbiAgICBdLmluZGV4T2YoZS5kZXRhaWwud2hpY2ggfHwgZS5kZXRhaWwua2V5Q29kZSkgPiAtMSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMudGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLmtleWRvd24uYmluZCh0aGlzLCBlKSwgMjAwKTtcbiAgfSxcblxuICBpbml0OiBmdW5jdGlvbiBpbml0KGhvb2spIHtcbiAgICB2YXIgY29uZmlnID0gaG9vay5jb25maWcuZHJvcGxhYkZpbHRlcjtcblxuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcudGVtcGxhdGUpIHJldHVybjtcblxuICAgIHRoaXMuaG9vayA9IGhvb2s7XG5cbiAgICB0aGlzLmV2ZW50V3JhcHBlciA9IHt9O1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlS2V5ZG93biA9IHRoaXMuZGVib3VuY2VLZXlkb3duLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmhvb2sudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duLmRsJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VLZXlkb3duKTtcbiAgICB0aGlzLmhvb2sudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24uZGwnLCB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZUtleWRvd24pO1xuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ob29rLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bi5kbCcsIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlS2V5ZG93bik7XG4gICAgdGhpcy5ob29rLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duLmRsJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VLZXlkb3duKTtcblxuICAgIHZhciBkeW5hbWljTGlzdCA9IHRoaXMuaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICBpZiAodGhpcy5saXN0VGVtcGxhdGUgJiYgZHluYW1pY0xpc3QpIHtcbiAgICAgIGR5bmFtaWNMaXN0Lm91dGVySFRNTCA9IHRoaXMubGlzdFRlbXBsYXRlO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZHJvcGxhYkZpbHRlcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wbHVnaW5zL2ZpbHRlci9maWx0ZXIuanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app/assets/javascripts/droplab/plugins/input_setter.js b/app/assets/javascripts/droplab/plugins/input_setter.js index ffc9af0476d..2ee9a796634 100644 --- a/app/assets/javascripts/droplab/plugins/input_setter.js +++ b/app/assets/javascripts/droplab/plugins/input_setter.js @@ -63,12 +63,12 @@ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 13); +/******/ return __webpack_require__(__webpack_require__.s = 8); /******/ }) /************************************************************************/ /******/ ({ -/***/ 13: +/***/ 8: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -119,11 +119,9 @@ var droplabInputSetter = { } }; -window.droplabInputSetter = droplabInputSetter; - exports.default = droplabInputSetter; /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZjM3NjcyYjdmNTI4YjQ3MmE0NGM/ZWM1ZiIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9pbnB1dF9zZXR0ZXIuanMiXSwibmFtZXMiOlsiZHJvcGxhYklucHV0U2V0dGVyIiwiaW5pdCIsImhvb2siLCJjb25maWciLCJldmVudFdyYXBwZXIiLCJhZGRFdmVudHMiLCJzZXRJbnB1dHMiLCJiaW5kIiwibGlzdCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudHMiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZSIsInNlbGVjdGVkSXRlbSIsImRldGFpbCIsInNlbGVjdGVkIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9yRWFjaCIsInNldElucHV0IiwiaW5wdXQiLCJ0cmlnZ2VyIiwibmV3VmFsdWUiLCJnZXRBdHRyaWJ1dGUiLCJ2YWx1ZUF0dHJpYnV0ZSIsInRhZ05hbWUiLCJ2YWx1ZSIsInRleHRDb250ZW50IiwiZGVzdHJveSIsIndpbmRvdyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FDaEVBLElBQU1BLHFCQUFxQjtBQUN6QkMsTUFEeUIsZ0JBQ3BCQyxJQURvQixFQUNkO0FBQ1QsU0FBS0EsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsTUFBTCxHQUFjRCxLQUFLQyxNQUFMLENBQVlILGtCQUFaLEtBQW1DLEtBQUtFLElBQUwsQ0FBVUMsTUFBVixDQUFpQkgsa0JBQWpCLEdBQXNDLEVBQXpFLENBQWQ7O0FBRUEsU0FBS0ksWUFBTCxHQUFvQixFQUFwQjs7QUFFQSxTQUFLQyxTQUFMO0FBQ0QsR0FSd0I7QUFVekJBLFdBVnlCLHVCQVViO0FBQ1YsU0FBS0QsWUFBTCxDQUFrQkUsU0FBbEIsR0FBOEIsS0FBS0EsU0FBTCxDQUFlQyxJQUFmLENBQW9CLElBQXBCLENBQTlCO0FBQ0EsU0FBS0wsSUFBTCxDQUFVTSxJQUFWLENBQWVBLElBQWYsQ0FBb0JDLGdCQUFwQixDQUFxQyxVQUFyQyxFQUFpRCxLQUFLTCxZQUFMLENBQWtCRSxTQUFuRTtBQUNELEdBYndCO0FBZXpCSSxjQWZ5QiwwQkFlVjtBQUNiLFNBQUtSLElBQUwsQ0FBVU0sSUFBVixDQUFlQSxJQUFmLENBQW9CRyxtQkFBcEIsQ0FBd0MsVUFBeEMsRUFBb0QsS0FBS1AsWUFBTCxDQUFrQkUsU0FBdEU7QUFDRCxHQWpCd0I7QUFtQnpCQSxXQW5CeUIscUJBbUJmTSxDQW5CZSxFQW1CWjtBQUFBOztBQUNYLFFBQU1DLGVBQWVELEVBQUVFLE1BQUYsQ0FBU0MsUUFBOUI7O0FBRUEsUUFBSSxDQUFDQyxNQUFNQyxPQUFOLENBQWMsS0FBS2QsTUFBbkIsQ0FBTCxFQUFpQyxLQUFLQSxNQUFMLEdBQWMsQ0FBQyxLQUFLQSxNQUFOLENBQWQ7O0FBRWpDLFNBQUtBLE1BQUwsQ0FBWWUsT0FBWixDQUFvQjtBQUFBLGFBQVUsTUFBS0MsUUFBTCxDQUFjaEIsTUFBZCxFQUFzQlUsWUFBdEIsQ0FBVjtBQUFBLEtBQXBCO0FBQ0QsR0F6QndCO0FBMkJ6Qk0sVUEzQnlCLG9CQTJCaEJoQixNQTNCZ0IsRUEyQlJVLFlBM0JRLEVBMkJNO0FBQzdCLFFBQU1PLFFBQVFqQixPQUFPaUIsS0FBUCxJQUFnQixLQUFLbEIsSUFBTCxDQUFVbUIsT0FBeEM7QUFDQSxRQUFNQyxXQUFXVCxhQUFhVSxZQUFiLENBQTBCcEIsT0FBT3FCLGNBQWpDLENBQWpCOztBQUVBLFFBQUlKLE1BQU1LLE9BQU4sS0FBa0IsT0FBdEIsRUFBK0I7QUFDN0JMLFlBQU1NLEtBQU4sR0FBY0osUUFBZDtBQUNELEtBRkQsTUFFTztBQUNMRixZQUFNTyxXQUFOLEdBQW9CTCxRQUFwQjtBQUNEO0FBQ0YsR0FwQ3dCO0FBc0N6Qk0sU0F0Q3lCLHFCQXNDZjtBQUNSLFNBQUtsQixZQUFMO0FBQ0Q7QUF4Q3dCLENBQTNCOztBQTJDQW1CLE9BQU83QixrQkFBUCxHQUE0QkEsa0JBQTVCOztrQkFFZUEsa0IiLCJmaWxlIjoiLi9kaXN0L3BsdWdpbnMvaW5wdXRfc2V0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTMpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGYzNzY3MmI3ZjUyOGI0NzJhNDRjIiwiY29uc3QgZHJvcGxhYklucHV0U2V0dGVyID0ge1xuICBpbml0KGhvb2spIHtcbiAgICB0aGlzLmhvb2sgPSBob29rO1xuICAgIHRoaXMuY29uZmlnID0gaG9vay5jb25maWcuZHJvcGxhYklucHV0U2V0dGVyIHx8ICh0aGlzLmhvb2suY29uZmlnLmRyb3BsYWJJbnB1dFNldHRlciA9IHt9KTtcblxuICAgIHRoaXMuZXZlbnRXcmFwcGVyID0ge307XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xuICB9LFxuXG4gIGFkZEV2ZW50cygpIHtcbiAgICB0aGlzLmV2ZW50V3JhcHBlci5zZXRJbnB1dHMgPSB0aGlzLnNldElucHV0cy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaG9vay5saXN0Lmxpc3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2suZGwnLCB0aGlzLmV2ZW50V3JhcHBlci5zZXRJbnB1dHMpO1xuICB9LFxuXG4gIHJlbW92ZUV2ZW50cygpIHtcbiAgICB0aGlzLmhvb2subGlzdC5saXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrLmRsJywgdGhpcy5ldmVudFdyYXBwZXIuc2V0SW5wdXRzKTtcbiAgfSxcblxuICBzZXRJbnB1dHMoZSkge1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IGUuZGV0YWlsLnNlbGVjdGVkO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuY29uZmlnKSkgdGhpcy5jb25maWcgPSBbdGhpcy5jb25maWddO1xuXG4gICAgdGhpcy5jb25maWcuZm9yRWFjaChjb25maWcgPT4gdGhpcy5zZXRJbnB1dChjb25maWcsIHNlbGVjdGVkSXRlbSkpO1xuICB9LFxuXG4gIHNldElucHV0KGNvbmZpZywgc2VsZWN0ZWRJdGVtKSB7XG4gICAgY29uc3QgaW5wdXQgPSBjb25maWcuaW5wdXQgfHwgdGhpcy5ob29rLnRyaWdnZXI7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBzZWxlY3RlZEl0ZW0uZ2V0QXR0cmlidXRlKGNvbmZpZy52YWx1ZUF0dHJpYnV0ZSk7XG5cbiAgICBpZiAoaW5wdXQudGFnTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgICAgaW5wdXQudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQudGV4dENvbnRlbnQgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICB9LFxufTtcblxud2luZG93LmRyb3BsYWJJbnB1dFNldHRlciA9IGRyb3BsYWJJbnB1dFNldHRlcjtcblxuZXhwb3J0IGRlZmF1bHQgZHJvcGxhYklucHV0U2V0dGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BsdWdpbnMvaW5wdXRfc2V0dGVyLmpzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2E/MGFiZioqKioqIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2lucHV0X3NldHRlci9pbnB1dF9zZXR0ZXIuanM/NTY5NyJdLCJuYW1lcyI6WyJkcm9wbGFiSW5wdXRTZXR0ZXIiLCJpbml0IiwiaG9vayIsImNvbmZpZyIsImV2ZW50V3JhcHBlciIsImFkZEV2ZW50cyIsInNldElucHV0cyIsImJpbmQiLCJsaXN0IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50cyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJlIiwic2VsZWN0ZWRJdGVtIiwiZGV0YWlsIiwic2VsZWN0ZWQiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic2V0SW5wdXQiLCJpbnB1dCIsInRyaWdnZXIiLCJuZXdWYWx1ZSIsImdldEF0dHJpYnV0ZSIsInZhbHVlQXR0cmlidXRlIiwidGFnTmFtZSIsInZhbHVlIiwidGV4dENvbnRlbnQiLCJkZXN0cm95Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQTJDLGNBQWM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUNoRUEsSUFBTUEscUJBQXFCO0FBQ3pCQyxNQUR5QixnQkFDcEJDLElBRG9CLEVBQ2Q7QUFDVCxTQUFLQSxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLQyxNQUFMLEdBQWNELEtBQUtDLE1BQUwsQ0FBWUgsa0JBQVosS0FBbUMsS0FBS0UsSUFBTCxDQUFVQyxNQUFWLENBQWlCSCxrQkFBakIsR0FBc0MsRUFBekUsQ0FBZDs7QUFFQSxTQUFLSSxZQUFMLEdBQW9CLEVBQXBCOztBQUVBLFNBQUtDLFNBQUw7QUFDRCxHQVJ3QjtBQVV6QkEsV0FWeUIsdUJBVWI7QUFDVixTQUFLRCxZQUFMLENBQWtCRSxTQUFsQixHQUE4QixLQUFLQSxTQUFMLENBQWVDLElBQWYsQ0FBb0IsSUFBcEIsQ0FBOUI7QUFDQSxTQUFLTCxJQUFMLENBQVVNLElBQVYsQ0FBZUEsSUFBZixDQUFvQkMsZ0JBQXBCLENBQXFDLFVBQXJDLEVBQWlELEtBQUtMLFlBQUwsQ0FBa0JFLFNBQW5FO0FBQ0QsR0Fid0I7QUFlekJJLGNBZnlCLDBCQWVWO0FBQ2IsU0FBS1IsSUFBTCxDQUFVTSxJQUFWLENBQWVBLElBQWYsQ0FBb0JHLG1CQUFwQixDQUF3QyxVQUF4QyxFQUFvRCxLQUFLUCxZQUFMLENBQWtCRSxTQUF0RTtBQUNELEdBakJ3QjtBQW1CekJBLFdBbkJ5QixxQkFtQmZNLENBbkJlLEVBbUJaO0FBQUE7O0FBQ1gsUUFBTUMsZUFBZUQsRUFBRUUsTUFBRixDQUFTQyxRQUE5Qjs7QUFFQSxRQUFJLENBQUNDLE1BQU1DLE9BQU4sQ0FBYyxLQUFLZCxNQUFuQixDQUFMLEVBQWlDLEtBQUtBLE1BQUwsR0FBYyxDQUFDLEtBQUtBLE1BQU4sQ0FBZDs7QUFFakMsU0FBS0EsTUFBTCxDQUFZZSxPQUFaLENBQW9CO0FBQUEsYUFBVSxNQUFLQyxRQUFMLENBQWNoQixNQUFkLEVBQXNCVSxZQUF0QixDQUFWO0FBQUEsS0FBcEI7QUFDRCxHQXpCd0I7QUEyQnpCTSxVQTNCeUIsb0JBMkJoQmhCLE1BM0JnQixFQTJCUlUsWUEzQlEsRUEyQk07QUFDN0IsUUFBTU8sUUFBUWpCLE9BQU9pQixLQUFQLElBQWdCLEtBQUtsQixJQUFMLENBQVVtQixPQUF4QztBQUNBLFFBQU1DLFdBQVdULGFBQWFVLFlBQWIsQ0FBMEJwQixPQUFPcUIsY0FBakMsQ0FBakI7O0FBRUEsUUFBSUosTUFBTUssT0FBTixLQUFrQixPQUF0QixFQUErQjtBQUM3QkwsWUFBTU0sS0FBTixHQUFjSixRQUFkO0FBQ0QsS0FGRCxNQUVPO0FBQ0xGLFlBQU1PLFdBQU4sR0FBb0JMLFFBQXBCO0FBQ0Q7QUFDRixHQXBDd0I7QUFzQ3pCTSxTQXRDeUIscUJBc0NmO0FBQ1IsU0FBS2xCLFlBQUw7QUFDRDtBQXhDd0IsQ0FBM0I7O2tCQTJDZVYsa0IiLCJmaWxlIjoiLi9kaXN0L3BsdWdpbnMvaW5wdXRfc2V0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gOCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2EiLCJjb25zdCBkcm9wbGFiSW5wdXRTZXR0ZXIgPSB7XG4gIGluaXQoaG9vaykge1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgdGhpcy5jb25maWcgPSBob29rLmNvbmZpZy5kcm9wbGFiSW5wdXRTZXR0ZXIgfHwgKHRoaXMuaG9vay5jb25maWcuZHJvcGxhYklucHV0U2V0dGVyID0ge30pO1xuXG4gICAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG4gIH0sXG5cbiAgYWRkRXZlbnRzKCkge1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLnNldElucHV0cyA9IHRoaXMuc2V0SW5wdXRzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ob29rLmxpc3QubGlzdC5hZGRFdmVudExpc3RlbmVyKCdjbGljay5kbCcsIHRoaXMuZXZlbnRXcmFwcGVyLnNldElucHV0cyk7XG4gIH0sXG5cbiAgcmVtb3ZlRXZlbnRzKCkge1xuICAgIHRoaXMuaG9vay5saXN0Lmxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2suZGwnLCB0aGlzLmV2ZW50V3JhcHBlci5zZXRJbnB1dHMpO1xuICB9LFxuXG4gIHNldElucHV0cyhlKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gZS5kZXRhaWwuc2VsZWN0ZWQ7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5jb25maWcpKSB0aGlzLmNvbmZpZyA9IFt0aGlzLmNvbmZpZ107XG5cbiAgICB0aGlzLmNvbmZpZy5mb3JFYWNoKGNvbmZpZyA9PiB0aGlzLnNldElucHV0KGNvbmZpZywgc2VsZWN0ZWRJdGVtKSk7XG4gIH0sXG5cbiAgc2V0SW5wdXQoY29uZmlnLCBzZWxlY3RlZEl0ZW0pIHtcbiAgICBjb25zdCBpbnB1dCA9IGNvbmZpZy5pbnB1dCB8fCB0aGlzLmhvb2sudHJpZ2dlcjtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHNlbGVjdGVkSXRlbS5nZXRBdHRyaWJ1dGUoY29uZmlnLnZhbHVlQXR0cmlidXRlKTtcblxuICAgIGlmIChpbnB1dC50YWdOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC50ZXh0Q29udGVudCA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfSxcblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBkcm9wbGFiSW5wdXRTZXR0ZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcGx1Z2lucy9pbnB1dF9zZXR0ZXIvaW5wdXRfc2V0dGVyLmpzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/app/assets/javascripts/filtered_search/dropdown_hint.js b/app/assets/javascripts/filtered_search/dropdown_hint.js index 475aef219da..d3401dd0838 100644 --- a/app/assets/javascripts/filtered_search/dropdown_hint.js +++ b/app/assets/javascripts/filtered_search/dropdown_hint.js @@ -1,6 +1,6 @@ -require('./filtered_search_dropdown'); +import droplabFilter from '../droplab/plugins/filter'; -/* global droplabFilter */ +require('./filtered_search_dropdown'); (() => { class DropdownHint extends gl.FilteredSearchDropdown { diff --git a/app/assets/javascripts/filtered_search/dropdown_non_user.js b/app/assets/javascripts/filtered_search/dropdown_non_user.js index 9ee805a08cb..c30e673f8ba 100644 --- a/app/assets/javascripts/filtered_search/dropdown_non_user.js +++ b/app/assets/javascripts/filtered_search/dropdown_non_user.js @@ -1,7 +1,7 @@ -require('./filtered_search_dropdown'); +import droplabAjax from '../droplab/plugins/ajax'; +import droplabFilter from '../droplab/plugins/filter'; -/* global droplabAjax */ -/* global droplabFilter */ +require('./filtered_search_dropdown'); (() => { class DropdownNonUser extends gl.FilteredSearchDropdown { diff --git a/app/assets/javascripts/filtered_search/dropdown_user.js b/app/assets/javascripts/filtered_search/dropdown_user.js index 04e2afad02f..fe95ccb41f8 100644 --- a/app/assets/javascripts/filtered_search/dropdown_user.js +++ b/app/assets/javascripts/filtered_search/dropdown_user.js @@ -1,6 +1,6 @@ -require('./filtered_search_dropdown'); +import droplabAjaxFilter from '../droplab/plugins/ajax_filter'; -/* global droplabAjaxFilter */ +require('./filtered_search_dropdown'); (() => { class DropdownUser extends gl.FilteredSearchDropdown { diff --git a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js index 5fbe0450bb8..29aa4c1bb44 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js +++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js @@ -1,4 +1,4 @@ -/* global DropLab */ +import DropLab from '../droplab/droplab'; import FilteredSearchContainer from './container'; (() => { diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js index bdc5d913e86..e2f015c8e82 100644 --- a/app/assets/javascripts/main.js +++ b/app/assets/javascripts/main.js @@ -75,12 +75,6 @@ import './u2f/error'; import './u2f/register'; import './u2f/util'; -// droplab -import './droplab/droplab'; -import './droplab/plugins/ajax'; -import './droplab/plugins/ajax_filter'; -import './droplab/plugins/filter'; - // everything else import './abuse_reports'; import './activities'; -- cgit v1.2.1 From 8db88bdf202e2aee354bb257e6def40335c1273a Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Sat, 25 Mar 2017 15:44:25 +0000 Subject: Prep for moving droplab to npm --- .babelrc | 1 - .eslintignore | 1 - app/assets/javascripts/droplab/droplab.js | 953 --------------------- app/assets/javascripts/droplab/plugins/ajax.js | 157 ---- .../javascripts/droplab/plugins/ajax_filter.js | 214 ----- app/assets/javascripts/droplab/plugins/filter.js | 172 ---- .../javascripts/droplab/plugins/input_setter.js | 127 --- .../javascripts/filtered_search/dropdown_hint.js | 8 +- .../filtered_search/dropdown_non_user.js | 12 +- .../javascripts/filtered_search/dropdown_user.js | 8 +- .../filtered_search_dropdown_manager.js | 2 +- yarn.lock | 936 +++++++++++--------- 12 files changed, 539 insertions(+), 2052 deletions(-) delete mode 100644 app/assets/javascripts/droplab/droplab.js delete mode 100644 app/assets/javascripts/droplab/plugins/ajax.js delete mode 100644 app/assets/javascripts/droplab/plugins/ajax_filter.js delete mode 100644 app/assets/javascripts/droplab/plugins/filter.js delete mode 100644 app/assets/javascripts/droplab/plugins/input_setter.js diff --git a/.babelrc b/.babelrc index ee4c391da30..2bae7ca9fbf 100644 --- a/.babelrc +++ b/.babelrc @@ -8,7 +8,6 @@ "plugins": [ ["istanbul", { "exclude": [ - "app/assets/javascripts/droplab/**/*", "spec/javascripts/**/*" ] }], diff --git a/.eslintignore b/.eslintignore index fe0766d8a44..c742b08c005 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,6 +5,5 @@ /public/ /tmp/ /vendor/ -/app/assets/javascripts/droplab karma.config.js webpack.config.js diff --git a/app/assets/javascripts/droplab/droplab.js b/app/assets/javascripts/droplab/droplab.js deleted file mode 100644 index d1d8447d165..00000000000 --- a/app/assets/javascripts/droplab/droplab.js +++ /dev/null @@ -1,953 +0,0 @@ -/******/ (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; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // 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 = 14); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var DATA_TRIGGER = 'data-dropdown-trigger'; -var DATA_DROPDOWN = 'data-dropdown'; -var SELECTED_CLASS = 'droplab-item-selected'; -var ACTIVE_CLASS = 'droplab-item-active'; - -exports.DATA_TRIGGER = DATA_TRIGGER; -exports.DATA_DROPDOWN = DATA_DROPDOWN; -exports.SELECTED_CLASS = SELECTED_CLASS; -exports.ACTIVE_CLASS = ACTIVE_CLASS; - -/***/ }), -/* 1 */ -/***/ (function(module, exports) { - -// Polyfill for creating CustomEvents on IE9/10/11 - -// code pulled from: -// https://github.com/d4tocchini/customevent-polyfill -// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill - -try { - var ce = new window.CustomEvent('test'); - ce.preventDefault(); - if (ce.defaultPrevented !== true) { - // IE has problems with .preventDefault() on custom events - // http://stackoverflow.com/questions/23349191 - throw new Error('Could not prevent default'); - } -} catch(e) { - var CustomEvent = function(event, params) { - var evt, origPrevent; - params = params || { - bubbles: false, - cancelable: false, - detail: undefined - }; - - evt = document.createEvent("CustomEvent"); - evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); - origPrevent = evt.preventDefault; - evt.preventDefault = function () { - origPrevent.call(this); - try { - Object.defineProperty(this, 'defaultPrevented', { - get: function () { - return true; - } - }); - } catch(e) { - this.defaultPrevented = true; - } - }; - return evt; - }; - - CustomEvent.prototype = window.Event.prototype; - window.CustomEvent = CustomEvent; // expose definition to window -} - - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _dropdown = __webpack_require__(9); - -var _dropdown2 = _interopRequireDefault(_dropdown); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Hook = function Hook(trigger, list, plugins, config) { - this.trigger = trigger; - this.list = new _dropdown2.default(list); - this.type = 'Hook'; - this.event = 'click'; - this.plugins = plugins || []; - this.config = config || {}; - this.id = trigger.id; -}; - -Object.assign(Hook.prototype, { - - addEvents: function addEvents() {}, - - constructor: Hook -}); - -exports.default = Hook; - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _constants = __webpack_require__(0); - -var utils = { - toCamelCase: function toCamelCase(attr) { - return this.camelize(attr.split('-').slice(1).join(' ')); - }, - t: function t(s, d) { - for (var p in d) { - if (Object.prototype.hasOwnProperty.call(d, p)) { - s = s.replace(new RegExp('{{' + p + '}}', 'g'), d[p]); - } - } - return s; - }, - camelize: function camelize(str) { - return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function (letter, index) { - return index === 0 ? letter.toLowerCase() : letter.toUpperCase(); - }).replace(/\s+/g, ''); - }, - closest: function closest(thisTag, stopTag) { - while (thisTag && thisTag.tagName !== stopTag && thisTag.tagName !== 'HTML') { - thisTag = thisTag.parentNode; - } - return thisTag; - }, - isDropDownParts: function isDropDownParts(target) { - if (!target || target.tagName === 'HTML') return false; - return target.hasAttribute(_constants.DATA_TRIGGER) || target.hasAttribute(_constants.DATA_DROPDOWN); - } -}; - -exports.default = utils; - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -__webpack_require__(1); - -var _hook_button = __webpack_require__(10); - -var _hook_button2 = _interopRequireDefault(_hook_button); - -var _hook_input = __webpack_require__(11); - -var _hook_input2 = _interopRequireDefault(_hook_input); - -var _utils = __webpack_require__(3); - -var _utils2 = _interopRequireDefault(_utils); - -var _keyboard = __webpack_require__(12); - -var _keyboard2 = _interopRequireDefault(_keyboard); - -var _constants = __webpack_require__(0); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var DropLab = function DropLab() { - this.ready = false; - this.hooks = []; - this.queuedData = []; - this.config = {}; - - this.eventWrapper = {}; -}; - -Object.assign(DropLab.prototype, { - loadStatic: function loadStatic() { - var dropdownTriggers = [].slice.apply(document.querySelectorAll('[' + _constants.DATA_TRIGGER + ']')); - this.addHooks(dropdownTriggers); - }, - - addData: function addData() { - var args = [].slice.apply(arguments); - this.applyArgs(args, '_addData'); - }, - - setData: function setData() { - var args = [].slice.apply(arguments); - this.applyArgs(args, '_setData'); - }, - - destroy: function destroy() { - this.hooks.forEach(function (hook) { - return hook.destroy(); - }); - this.hooks = []; - this.removeEvents(); - }, - - applyArgs: function applyArgs(args, methodName) { - if (this.ready) return this[methodName].apply(this, args); - - this.queuedData = this.queuedData || []; - this.queuedData.push(args); - }, - - _addData: function _addData(trigger, data) { - this._processData(trigger, data, 'addData'); - }, - - _setData: function _setData(trigger, data) { - this._processData(trigger, data, 'setData'); - }, - - _processData: function _processData(trigger, data, methodName) { - this.hooks.forEach(function (hook) { - if (Array.isArray(trigger)) hook.list[methodName](trigger); - - if (hook.trigger.id === trigger) hook.list[methodName](data); - }); - }, - - addEvents: function addEvents() { - this.eventWrapper.documentClicked = this.documentClicked.bind(this); - document.addEventListener('click', this.eventWrapper.documentClicked); - }, - - documentClicked: function documentClicked(e) { - var thisTag = e.target; - - if (thisTag.tagName !== 'UL') thisTag = _utils2.default.closest(thisTag, 'UL'); - if (_utils2.default.isDropDownParts(thisTag, this.hooks) || _utils2.default.isDropDownParts(e.target, this.hooks)) return; - - this.hooks.forEach(function (hook) { - return hook.list.hide(); - }); - }, - - removeEvents: function removeEvents() { - document.removeEventListener('click', this.eventWrapper.documentClicked); - }, - - changeHookList: function changeHookList(trigger, list, plugins, config) { - var _this = this; - - var availableTrigger = typeof trigger === 'string' ? document.getElementById(trigger) : trigger; - - this.hooks.forEach(function (hook, i) { - hook.list.list.dataset.dropdownActive = false; - - if (hook.trigger !== availableTrigger) return; - - hook.destroy(); - _this.hooks.splice(i, 1); - _this.addHook(availableTrigger, list, plugins, config); - }); - }, - - addHook: function addHook(hook, list, plugins, config) { - var availableHook = typeof hook === 'string' ? document.querySelector(hook) : hook; - var availableList = void 0; - - if (typeof list === 'string') { - availableList = document.querySelector(list); - } else if (list instanceof Element) { - availableList = list; - } else { - availableList = document.querySelector(hook.dataset[_utils2.default.toCamelCase(_constants.DATA_TRIGGER)]); - } - - availableList.dataset.dropdownActive = true; - - var HookObject = availableHook.tagName === 'INPUT' ? _hook_input2.default : _hook_button2.default; - this.hooks.push(new HookObject(availableHook, availableList, plugins, config)); - - return this; - }, - - addHooks: function addHooks(hooks, plugins, config) { - var _this2 = this; - - hooks.forEach(function (hook) { - return _this2.addHook(hook, null, plugins, config); - }); - return this; - }, - - setConfig: function setConfig(obj) { - this.config = obj; - }, - - fireReady: function fireReady() { - var readyEvent = new CustomEvent('ready.dl', { - detail: { - dropdown: this - } - }); - document.dispatchEvent(readyEvent); - - this.ready = true; - }, - - init: function init(hook, list, plugins, config) { - var _this3 = this; - - hook ? this.addHook(hook, list, plugins, config) : this.loadStatic(); - - this.addEvents(); - - (0, _keyboard2.default)(); - - this.fireReady(); - - this.queuedData.forEach(function (data) { - return _this3.addData(data); - }); - this.queuedData = []; - - return this; - } -}); - -exports.default = DropLab; - -/***/ }), -/* 5 */, -/* 6 */, -/* 7 */, -/* 8 */, -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _Object$assign; - -__webpack_require__(1); - -var _utils = __webpack_require__(3); - -var _utils2 = _interopRequireDefault(_utils); - -var _constants = __webpack_require__(0); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var DropDown = function DropDown(list) { - this.currentIndex = 0; - this.hidden = true; - this.list = typeof list === 'string' ? document.querySelector(list) : list; - this.items = []; - - this.eventWrapper = {}; - - this.getItems(); - this.initTemplateString(); - this.addEvents(); - - this.initialState = list.innerHTML; -}; - -Object.assign(DropDown.prototype, (_Object$assign = { - getItems: function getItems() { - this.items = [].slice.call(this.list.querySelectorAll('li')); - return this.items; - }, - - initTemplateString: function initTemplateString() { - var items = this.items || this.getItems(); - - var templateString = ''; - if (items.length > 0) templateString = items[items.length - 1].outerHTML; - this.templateString = templateString; - - return this.templateString; - }, - - clickEvent: function clickEvent(e) { - var selected = _utils2.default.closest(e.target, 'LI'); - if (!selected) return; - - this.addSelectedClass(selected); - - e.preventDefault(); - this.hide(); - - var listEvent = new CustomEvent('click.dl', { - detail: { - list: this, - selected: selected, - data: e.target.dataset - } - }); - this.list.dispatchEvent(listEvent); - }, - - addSelectedClass: function addSelectedClass(selected) { - this.removeSelectedClasses(); - selected.classList.add(_constants.SELECTED_CLASS); - }, - - removeSelectedClasses: function removeSelectedClasses() { - var items = this.items || this.getItems(); - - items.forEach(function (item) { - return item.classList.remove(_constants.SELECTED_CLASS); - }); - }, - - addEvents: function addEvents() { - this.eventWrapper.clickEvent = this.clickEvent.bind(this); - this.list.addEventListener('click', this.eventWrapper.clickEvent); - }, - - toggle: function toggle() { - this.hidden ? this.show() : this.hide(); - }, - - setData: function setData(data) { - this.data = data; - this.render(data); - }, - - addData: function addData(data) { - this.data = (this.data || []).concat(data); - this.render(this.data); - }, - - render: function render(data) { - var children = data ? data.map(this.renderChildren.bind(this)) : []; - var renderableList = this.list.querySelector('ul[data-dynamic]') || this.list; - - renderableList.innerHTML = children.join(''); - }, - - renderChildren: function renderChildren(data) { - var html = _utils2.default.t(this.templateString, data); - var template = document.createElement('div'); - - template.innerHTML = html; - this.setImagesSrc(template); - template.firstChild.style.display = data.droplab_hidden ? 'none' : 'block'; - - return template.firstChild.outerHTML; - }, - - setImagesSrc: function setImagesSrc(template) { - var images = [].slice.call(template.querySelectorAll('img[data-src]')); - - images.forEach(function (image) { - image.src = image.getAttribute('data-src'); - image.removeAttribute('data-src'); - }); - }, - - show: function show() { - if (!this.hidden) return; - this.list.style.display = 'block'; - this.currentIndex = 0; - this.hidden = false; - }, - - hide: function hide() { - if (this.hidden) return; - this.list.style.display = 'none'; - this.currentIndex = 0; - this.hidden = true; - } - -}, _defineProperty(_Object$assign, 'toggle', function toggle() { - this.hidden ? this.show() : this.hide(); -}), _defineProperty(_Object$assign, 'destroy', function destroy() { - this.hide(); - this.list.removeEventListener('click', this.eventWrapper.clickEvent); -}), _Object$assign)); - -exports.default = DropDown; - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -__webpack_require__(1); - -var _hook = __webpack_require__(2); - -var _hook2 = _interopRequireDefault(_hook); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var HookButton = function HookButton(trigger, list, plugins, config) { - _hook2.default.call(this, trigger, list, plugins, config); - - this.type = 'button'; - this.event = 'click'; - - this.eventWrapper = {}; - - this.addEvents(); - this.addPlugins(); -}; - -HookButton.prototype = Object.create(_hook2.default.prototype); - -Object.assign(HookButton.prototype, { - addPlugins: function addPlugins() { - var _this = this; - - this.plugins.forEach(function (plugin) { - return plugin.init(_this); - }); - }, - - clicked: function clicked(e) { - var buttonEvent = new CustomEvent('click.dl', { - detail: { - hook: this - }, - bubbles: true, - cancelable: true - }); - e.target.dispatchEvent(buttonEvent); - - this.list.toggle(); - }, - - addEvents: function addEvents() { - this.eventWrapper.clicked = this.clicked.bind(this); - this.trigger.addEventListener('click', this.eventWrapper.clicked); - }, - - removeEvents: function removeEvents() { - this.trigger.removeEventListener('click', this.eventWrapper.clicked); - }, - - restoreInitialState: function restoreInitialState() { - this.list.list.innerHTML = this.list.initialState; - }, - - removePlugins: function removePlugins() { - this.plugins.forEach(function (plugin) { - return plugin.destroy(); - }); - }, - - destroy: function destroy() { - this.restoreInitialState(); - - this.removeEvents(); - this.removePlugins(); - }, - - constructor: HookButton -}); - -exports.default = HookButton; - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -__webpack_require__(1); - -var _hook = __webpack_require__(2); - -var _hook2 = _interopRequireDefault(_hook); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var HookInput = function HookInput(trigger, list, plugins, config) { - _hook2.default.call(this, trigger, list, plugins, config); - - this.type = 'input'; - this.event = 'input'; - - this.eventWrapper = {}; - - this.addEvents(); - this.addPlugins(); -}; - -Object.assign(HookInput.prototype, { - addPlugins: function addPlugins() { - var _this = this; - - this.plugins.forEach(function (plugin) { - return plugin.init(_this); - }); - }, - - addEvents: function addEvents() { - this.eventWrapper.mousedown = this.mousedown.bind(this); - this.eventWrapper.input = this.input.bind(this); - this.eventWrapper.keyup = this.keyup.bind(this); - this.eventWrapper.keydown = this.keydown.bind(this); - - this.trigger.addEventListener('mousedown', this.eventWrapper.mousedown); - this.trigger.addEventListener('input', this.eventWrapper.input); - this.trigger.addEventListener('keyup', this.eventWrapper.keyup); - this.trigger.addEventListener('keydown', this.eventWrapper.keydown); - }, - - removeEvents: function removeEvents() { - this.hasRemovedEvents = true; - - this.trigger.removeEventListener('mousedown', this.eventWrapper.mousedown); - this.trigger.removeEventListener('input', this.eventWrapper.input); - this.trigger.removeEventListener('keyup', this.eventWrapper.keyup); - this.trigger.removeEventListener('keydown', this.eventWrapper.keydown); - }, - - input: function input(e) { - if (this.hasRemovedEvents) return; - - this.list.show(); - - var inputEvent = new CustomEvent('input.dl', { - detail: { - hook: this, - text: e.target.value - }, - bubbles: true, - cancelable: true - }); - e.target.dispatchEvent(inputEvent); - }, - - mousedown: function mousedown(e) { - if (this.hasRemovedEvents) return; - - var mouseEvent = new CustomEvent('mousedown.dl', { - detail: { - hook: this, - text: e.target.value - }, - bubbles: true, - cancelable: true - }); - e.target.dispatchEvent(mouseEvent); - }, - - keyup: function keyup(e) { - if (this.hasRemovedEvents) return; - - this.keyEvent(e, 'keyup.dl'); - }, - - keydown: function keydown(e) { - if (this.hasRemovedEvents) return; - - this.keyEvent(e, 'keydown.dl'); - }, - - keyEvent: function keyEvent(e, eventName) { - this.list.show(); - - var keyEvent = new CustomEvent(eventName, { - detail: { - hook: this, - text: e.target.value, - which: e.which, - key: e.key - }, - bubbles: true, - cancelable: true - }); - e.target.dispatchEvent(keyEvent); - }, - - restoreInitialState: function restoreInitialState() { - this.list.list.innerHTML = this.list.initialState; - }, - - removePlugins: function removePlugins() { - this.plugins.forEach(function (plugin) { - return plugin.destroy(); - }); - }, - - destroy: function destroy() { - this.restoreInitialState(); - - this.removeEvents(); - this.removePlugins(); - - this.list.destroy(); - } -}); - -exports.default = HookInput; - -/***/ }), -/* 12 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _constants = __webpack_require__(0); - -var Keyboard = function Keyboard() { - var currentKey; - var currentFocus; - var isUpArrow = false; - var isDownArrow = false; - var removeHighlight = function removeHighlight(list) { - var itemElements = Array.prototype.slice.call(list.list.querySelectorAll('li:not(.divider)'), 0); - var listItems = []; - for (var i = 0; i < itemElements.length; i++) { - var listItem = itemElements[i]; - listItem.classList.remove(_constants.ACTIVE_CLASS); - - if (listItem.style.display !== 'none') { - listItems.push(listItem); - } - } - return listItems; - }; - - var setMenuForArrows = function setMenuForArrows(list) { - var listItems = removeHighlight(list); - if (list.currentIndex > 0) { - if (!listItems[list.currentIndex - 1]) { - list.currentIndex = list.currentIndex - 1; - } - - if (listItems[list.currentIndex - 1]) { - var el = listItems[list.currentIndex - 1]; - var filterDropdownEl = el.closest('.filter-dropdown'); - el.classList.add(_constants.ACTIVE_CLASS); - - if (filterDropdownEl) { - var filterDropdownBottom = filterDropdownEl.offsetHeight; - var elOffsetTop = el.offsetTop - 30; - - if (elOffsetTop > filterDropdownBottom) { - filterDropdownEl.scrollTop = elOffsetTop - filterDropdownBottom; - } - } - } - } - }; - - var mousedown = function mousedown(e) { - var list = e.detail.hook.list; - removeHighlight(list); - list.show(); - list.currentIndex = 0; - isUpArrow = false; - isDownArrow = false; - }; - var selectItem = function selectItem(list) { - var listItems = removeHighlight(list); - var currentItem = listItems[list.currentIndex - 1]; - var listEvent = new CustomEvent('click.dl', { - detail: { - list: list, - selected: currentItem, - data: currentItem.dataset - } - }); - list.list.dispatchEvent(listEvent); - list.hide(); - }; - - var keydown = function keydown(e) { - var typedOn = e.target; - var list = e.detail.hook.list; - var currentIndex = list.currentIndex; - isUpArrow = false; - isDownArrow = false; - - if (e.detail.which) { - currentKey = e.detail.which; - if (currentKey === 13) { - selectItem(e.detail.hook.list); - return; - } - if (currentKey === 38) { - isUpArrow = true; - } - if (currentKey === 40) { - isDownArrow = true; - } - } else if (e.detail.key) { - currentKey = e.detail.key; - if (currentKey === 'Enter') { - selectItem(e.detail.hook.list); - return; - } - if (currentKey === 'ArrowUp') { - isUpArrow = true; - } - if (currentKey === 'ArrowDown') { - isDownArrow = true; - } - } - if (isUpArrow) { - currentIndex--; - } - if (isDownArrow) { - currentIndex++; - } - if (currentIndex < 0) { - currentIndex = 0; - } - list.currentIndex = currentIndex; - setMenuForArrows(e.detail.hook.list); - }; - - document.addEventListener('mousedown.dl', mousedown); - document.addEventListener('keydown.dl', keydown); -}; - -exports.default = Keyboard; - -/***/ }), -/* 13 */, -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _droplab = __webpack_require__(4); - -Object.keys(_droplab).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function get() { - return _droplab[key]; - } - }); -}); - -/***/ }) -/******/ ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2EiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2N1c3RvbS1ldmVudC1wb2x5ZmlsbC9jdXN0b20tZXZlbnQtcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2suanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzLmpzIiwid2VicGFjazovLy8uL3NyYy9kcm9wbGFiLmpzIiwid2VicGFjazovLy8uL3NyYy9kcm9wZG93bi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9va19idXR0b24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2tfaW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2tleWJvYXJkLmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJEQVRBX1RSSUdHRVIiLCJEQVRBX0RST1BET1dOIiwiU0VMRUNURURfQ0xBU1MiLCJBQ1RJVkVfQ0xBU1MiLCJIb29rIiwidHJpZ2dlciIsImxpc3QiLCJwbHVnaW5zIiwiY29uZmlnIiwidHlwZSIsImV2ZW50IiwiaWQiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJhZGRFdmVudHMiLCJjb25zdHJ1Y3RvciIsInV0aWxzIiwidG9DYW1lbENhc2UiLCJhdHRyIiwiY2FtZWxpemUiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsInQiLCJzIiwiZCIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBsYWNlIiwiUmVnRXhwIiwic3RyIiwibGV0dGVyIiwiaW5kZXgiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwiY2xvc2VzdCIsInRoaXNUYWciLCJzdG9wVGFnIiwidGFnTmFtZSIsInBhcmVudE5vZGUiLCJpc0Ryb3BEb3duUGFydHMiLCJ0YXJnZXQiLCJoYXNBdHRyaWJ1dGUiLCJEcm9wTGFiIiwicmVhZHkiLCJob29rcyIsInF1ZXVlZERhdGEiLCJldmVudFdyYXBwZXIiLCJsb2FkU3RhdGljIiwiZHJvcGRvd25UcmlnZ2VycyIsImFwcGx5IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiYWRkSG9va3MiLCJhZGREYXRhIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5QXJncyIsInNldERhdGEiLCJkZXN0cm95IiwiZm9yRWFjaCIsImhvb2siLCJyZW1vdmVFdmVudHMiLCJtZXRob2ROYW1lIiwicHVzaCIsIl9hZGREYXRhIiwiZGF0YSIsIl9wcm9jZXNzRGF0YSIsIl9zZXREYXRhIiwiQXJyYXkiLCJpc0FycmF5IiwiZG9jdW1lbnRDbGlja2VkIiwiYmluZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwiaGlkZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjaGFuZ2VIb29rTGlzdCIsImF2YWlsYWJsZVRyaWdnZXIiLCJnZXRFbGVtZW50QnlJZCIsImkiLCJkYXRhc2V0IiwiZHJvcGRvd25BY3RpdmUiLCJzcGxpY2UiLCJhZGRIb29rIiwiYXZhaWxhYmxlSG9vayIsInF1ZXJ5U2VsZWN0b3IiLCJhdmFpbGFibGVMaXN0IiwiRWxlbWVudCIsIkhvb2tPYmplY3QiLCJzZXRDb25maWciLCJvYmoiLCJmaXJlUmVhZHkiLCJyZWFkeUV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJkcm9wZG93biIsImRpc3BhdGNoRXZlbnQiLCJpbml0IiwiRHJvcERvd24iLCJjdXJyZW50SW5kZXgiLCJoaWRkZW4iLCJpdGVtcyIsImdldEl0ZW1zIiwiaW5pdFRlbXBsYXRlU3RyaW5nIiwiaW5pdGlhbFN0YXRlIiwiaW5uZXJIVE1MIiwidGVtcGxhdGVTdHJpbmciLCJsZW5ndGgiLCJvdXRlckhUTUwiLCJjbGlja0V2ZW50Iiwic2VsZWN0ZWQiLCJhZGRTZWxlY3RlZENsYXNzIiwicHJldmVudERlZmF1bHQiLCJsaXN0RXZlbnQiLCJyZW1vdmVTZWxlY3RlZENsYXNzZXMiLCJjbGFzc0xpc3QiLCJhZGQiLCJpdGVtIiwicmVtb3ZlIiwidG9nZ2xlIiwic2hvdyIsInJlbmRlciIsImNvbmNhdCIsImNoaWxkcmVuIiwibWFwIiwicmVuZGVyQ2hpbGRyZW4iLCJyZW5kZXJhYmxlTGlzdCIsImh0bWwiLCJ0ZW1wbGF0ZSIsImNyZWF0ZUVsZW1lbnQiLCJzZXRJbWFnZXNTcmMiLCJmaXJzdENoaWxkIiwic3R5bGUiLCJkaXNwbGF5IiwiZHJvcGxhYl9oaWRkZW4iLCJpbWFnZXMiLCJpbWFnZSIsInNyYyIsImdldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsIkhvb2tCdXR0b24iLCJhZGRQbHVnaW5zIiwiY3JlYXRlIiwicGx1Z2luIiwiY2xpY2tlZCIsImJ1dHRvbkV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJyZXN0b3JlSW5pdGlhbFN0YXRlIiwicmVtb3ZlUGx1Z2lucyIsIkhvb2tJbnB1dCIsIm1vdXNlZG93biIsImlucHV0Iiwia2V5dXAiLCJrZXlkb3duIiwiaGFzUmVtb3ZlZEV2ZW50cyIsImlucHV0RXZlbnQiLCJ0ZXh0IiwidmFsdWUiLCJtb3VzZUV2ZW50Iiwia2V5RXZlbnQiLCJldmVudE5hbWUiLCJ3aGljaCIsImtleSIsIktleWJvYXJkIiwiY3VycmVudEtleSIsImN1cnJlbnRGb2N1cyIsImlzVXBBcnJvdyIsImlzRG93bkFycm93IiwicmVtb3ZlSGlnaGxpZ2h0IiwiaXRlbUVsZW1lbnRzIiwibGlzdEl0ZW1zIiwibGlzdEl0ZW0iLCJzZXRNZW51Rm9yQXJyb3dzIiwiZWwiLCJmaWx0ZXJEcm9wZG93bkVsIiwiZmlsdGVyRHJvcGRvd25Cb3R0b20iLCJvZmZzZXRIZWlnaHQiLCJlbE9mZnNldFRvcCIsIm9mZnNldFRvcCIsInNjcm9sbFRvcCIsInNlbGVjdEl0ZW0iLCJjdXJyZW50SXRlbSIsInR5cGVkT24iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7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RXFCLE1BQUYsQ0FBU2xDLElBQVQsQ0FBY3pELElBQS9CO0FBQ0QsR0FyQ0Q7O0FBdUNBK0MsV0FBU3NCLGdCQUFULENBQTBCLGNBQTFCLEVBQTBDK0UsU0FBMUM7QUFDQXJHLFdBQVNzQixnQkFBVCxDQUEwQixZQUExQixFQUF3Q2tGLE9BQXhDO0FBQ0QsQ0ExR0Q7O2tCQTRHZVUsUTs7Ozs7Ozs7Ozs7Ozs7OztBQzlHZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRyIsImZpbGUiOiIuL2Rpc3QvZHJvcGxhYi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE0KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA5MzNmZjdkNWVkMzkzZGM2M2JjYSIsImNvbnN0IERBVEFfVFJJR0dFUiA9ICdkYXRhLWRyb3Bkb3duLXRyaWdnZXInO1xuY29uc3QgREFUQV9EUk9QRE9XTiA9ICdkYXRhLWRyb3Bkb3duJztcbmNvbnN0IFNFTEVDVEVEX0NMQVNTID0gJ2Ryb3BsYWItaXRlbS1zZWxlY3RlZCc7XG5jb25zdCBBQ1RJVkVfQ0xBU1MgPSAnZHJvcGxhYi1pdGVtLWFjdGl2ZSc7XG5cbmV4cG9ydCB7XG4gIERBVEFfVFJJR0dFUixcbiAgREFUQV9EUk9QRE9XTixcbiAgU0VMRUNURURfQ0xBU1MsXG4gIEFDVElWRV9DTEFTUyxcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29uc3RhbnRzLmpzIiwiLy8gUG9seWZpbGwgZm9yIGNyZWF0aW5nIEN1c3RvbUV2ZW50cyBvbiBJRTkvMTAvMTFcblxuLy8gY29kZSBwdWxsZWQgZnJvbTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kNHRvY2NoaW5pL2N1c3RvbWV2ZW50LXBvbHlmaWxsXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRXZlbnQjUG9seWZpbGxcblxudHJ5IHtcbiAgICB2YXIgY2UgPSBuZXcgd2luZG93LkN1c3RvbUV2ZW50KCd0ZXN0Jyk7XG4gICAgY2UucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoY2UuZGVmYXVsdFByZXZlbnRlZCAhPT0gdHJ1ZSkge1xuICAgICAgICAvLyBJRSBoYXMgcHJvYmxlbXMgd2l0aCAucHJldmVudERlZmF1bHQoKSBvbiBjdXN0b20gZXZlbnRzXG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjMzNDkxOTFcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcHJldmVudCBkZWZhdWx0Jyk7XG4gICAgfVxufSBjYXRjaChlKSB7XG4gIHZhciBDdXN0b21FdmVudCA9IGZ1bmN0aW9uKGV2ZW50LCBwYXJhbXMpIHtcbiAgICB2YXIgZXZ0LCBvcmlnUHJldmVudDtcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwge1xuICAgICAgYnViYmxlczogZmFsc2UsXG4gICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgIGRldGFpbDogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiQ3VzdG9tRXZlbnRcIik7XG4gICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudCwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlLCBwYXJhbXMuZGV0YWlsKTtcbiAgICBvcmlnUHJldmVudCA9IGV2dC5wcmV2ZW50RGVmYXVsdDtcbiAgICBldnQucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBvcmlnUHJldmVudC5jYWxsKHRoaXMpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdkZWZhdWx0UHJldmVudGVkJywge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGV2dDtcbiAgfTtcblxuICBDdXN0b21FdmVudC5wcm90b3R5cGUgPSB3aW5kb3cuRXZlbnQucHJvdG90eXBlO1xuICB3aW5kb3cuQ3VzdG9tRXZlbnQgPSBDdXN0b21FdmVudDsgLy8gZXhwb3NlIGRlZmluaXRpb24gdG8gd2luZG93XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY3VzdG9tLWV2ZW50LXBvbHlmaWxsL2N1c3RvbS1ldmVudC1wb2x5ZmlsbC5qc1xuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBEcm9wRG93biBmcm9tICcuL2Ryb3Bkb3duJztcblxudmFyIEhvb2sgPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpe1xuICB0aGlzLnRyaWdnZXIgPSB0cmlnZ2VyO1xuICB0aGlzLmxpc3QgPSBuZXcgRHJvcERvd24obGlzdCk7XG4gIHRoaXMudHlwZSA9ICdIb29rJztcbiAgdGhpcy5ldmVudCA9ICdjbGljayc7XG4gIHRoaXMucGx1Z2lucyA9IHBsdWdpbnMgfHwgW107XG4gIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB0aGlzLmlkID0gdHJpZ2dlci5pZDtcbn07XG5cbk9iamVjdC5hc3NpZ24oSG9vay5wcm90b3R5cGUsIHtcblxuICBhZGRFdmVudHM6IGZ1bmN0aW9uKCl7fSxcblxuICBjb25zdHJ1Y3RvcjogSG9vayxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIb29rO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2hvb2suanMiLCJpbXBvcnQgeyBEQVRBX1RSSUdHRVIsIERBVEFfRFJPUERPV04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IHV0aWxzID0ge1xuICB0b0NhbWVsQ2FzZShhdHRyKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FtZWxpemUoYXR0ci5zcGxpdCgnLScpLnNsaWNlKDEpLmpvaW4oJyAnKSk7XG4gIH0sXG5cbiAgdChzLCBkKSB7XG4gICAgZm9yIChjb25zdCBwIGluIGQpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCwgcCkpIHtcbiAgICAgICAgcyA9IHMucmVwbGFjZShuZXcgUmVnRXhwKGB7eyR7cH19fWAsICdnJyksIGRbcF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfSxcblxuICBjYW1lbGl6ZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAobGV0dGVyLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIGluZGV4ID09PSAwID8gbGV0dGVyLnRvTG93ZXJDYXNlKCkgOiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbiAgICB9KS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgfSxcblxuICBjbG9zZXN0KHRoaXNUYWcsIHN0b3BUYWcpIHtcbiAgICB3aGlsZSAodGhpc1RhZyAmJiB0aGlzVGFnLnRhZ05hbWUgIT09IHN0b3BUYWcgJiYgdGhpc1RhZy50YWdOYW1lICE9PSAnSFRNTCcpIHtcbiAgICAgIHRoaXNUYWcgPSB0aGlzVGFnLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzVGFnO1xuICB9LFxuXG4gIGlzRHJvcERvd25QYXJ0cyh0YXJnZXQpIHtcbiAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ0hUTUwnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRhcmdldC5oYXNBdHRyaWJ1dGUoREFUQV9UUklHR0VSKSB8fCB0YXJnZXQuaGFzQXR0cmlidXRlKERBVEFfRFJPUERPV04pO1xuICB9LFxufTtcblxuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy5qcyIsImltcG9ydCAnY3VzdG9tLWV2ZW50LXBvbHlmaWxsJztcbmltcG9ydCBIb29rQnV0dG9uIGZyb20gJy4vaG9va19idXR0b24nO1xuaW1wb3J0IEhvb2tJbnB1dCBmcm9tICcuL2hvb2tfaW5wdXQnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEtleWJvYXJkIGZyb20gJy4va2V5Ym9hcmQnO1xuaW1wb3J0IHsgREFUQV9UUklHR0VSIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG52YXIgRHJvcExhYiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gIHRoaXMuaG9va3MgPSBbXTtcbiAgdGhpcy5xdWV1ZWREYXRhID0gW107XG4gIHRoaXMuY29uZmlnID0ge307XG5cbiAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcbn07XG5cbk9iamVjdC5hc3NpZ24oRHJvcExhYi5wcm90b3R5cGUsIHtcbiAgbG9hZFN0YXRpYzogZnVuY3Rpb24oKXtcbiAgICB2YXIgZHJvcGRvd25UcmlnZ2VycyA9IFtdLnNsaWNlLmFwcGx5KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0RBVEFfVFJJR0dFUn1dYCkpO1xuICAgIHRoaXMuYWRkSG9va3MoZHJvcGRvd25UcmlnZ2Vycyk7XG4gIH0sXG5cbiAgYWRkRGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10uc2xpY2UuYXBwbHkoYXJndW1lbnRzKTtcbiAgICB0aGlzLmFwcGx5QXJncyhhcmdzLCAnX2FkZERhdGEnKTtcbiAgfSxcblxuICBzZXREYXRhOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyk7XG4gICAgdGhpcy5hcHBseUFyZ3MoYXJncywgJ19zZXREYXRhJyk7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5ob29rcy5mb3JFYWNoKGhvb2sgPT4gaG9vay5kZXN0cm95KCkpO1xuICAgIHRoaXMuaG9va3MgPSBbXTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICB9LFxuXG4gIGFwcGx5QXJnczogZnVuY3Rpb24oYXJncywgbWV0aG9kTmFtZSkge1xuICAgIGlmICh0aGlzLnJlYWR5KSByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgIHRoaXMucXVldWVkRGF0YSA9IHRoaXMucXVldWVkRGF0YSB8fCBbXTtcbiAgICB0aGlzLnF1ZXVlZERhdGEucHVzaChhcmdzKTtcbiAgfSxcblxuICBfYWRkRGF0YTogZnVuY3Rpb24odHJpZ2dlciwgZGF0YSkge1xuICAgIHRoaXMuX3Byb2Nlc3NEYXRhKHRyaWdnZXIsIGRhdGEsICdhZGREYXRhJyk7XG4gIH0sXG5cbiAgX3NldERhdGE6IGZ1bmN0aW9uKHRyaWdnZXIsIGRhdGEpIHtcbiAgICB0aGlzLl9wcm9jZXNzRGF0YSh0cmlnZ2VyLCBkYXRhLCAnc2V0RGF0YScpO1xuICB9LFxuXG4gIF9wcm9jZXNzRGF0YTogZnVuY3Rpb24odHJpZ2dlciwgZGF0YSwgbWV0aG9kTmFtZSkge1xuICAgIHRoaXMuaG9va3MuZm9yRWFjaCgoaG9vaykgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHJpZ2dlcikpIGhvb2subGlzdFttZXRob2ROYW1lXSh0cmlnZ2VyKTtcblxuICAgICAgaWYgKGhvb2sudHJpZ2dlci5pZCA9PT0gdHJpZ2dlcikgaG9vay5saXN0W21ldGhvZE5hbWVdKGRhdGEpO1xuICAgIH0pO1xuICB9LFxuXG4gIGFkZEV2ZW50czogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5ldmVudFdyYXBwZXIuZG9jdW1lbnRDbGlja2VkID0gdGhpcy5kb2N1bWVudENsaWNrZWQuYmluZCh0aGlzKVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuZG9jdW1lbnRDbGlja2VkKTtcbiAgfSxcblxuICBkb2N1bWVudENsaWNrZWQ6IGZ1bmN0aW9uKGUpIHtcbiAgICBsZXQgdGhpc1RhZyA9IGUudGFyZ2V0O1xuXG4gICAgaWYgKHRoaXNUYWcudGFnTmFtZSAhPT0gJ1VMJykgdGhpc1RhZyA9IHV0aWxzLmNsb3Nlc3QodGhpc1RhZywgJ1VMJyk7XG4gICAgaWYgKHV0aWxzLmlzRHJvcERvd25QYXJ0cyh0aGlzVGFnLCB0aGlzLmhvb2tzKSB8fCB1dGlscy5pc0Ryb3BEb3duUGFydHMoZS50YXJnZXQsIHRoaXMuaG9va3MpKSByZXR1cm47XG5cbiAgICB0aGlzLmhvb2tzLmZvckVhY2goaG9vayA9PiBob29rLmxpc3QuaGlkZSgpKTtcbiAgfSxcblxuICByZW1vdmVFdmVudHM6IGZ1bmN0aW9uKCl7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmV2ZW50V3JhcHBlci5kb2N1bWVudENsaWNrZWQpO1xuICB9LFxuXG4gIGNoYW5nZUhvb2tMaXN0OiBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgICBjb25zdCBhdmFpbGFibGVUcmlnZ2VyID0gIHR5cGVvZiB0cmlnZ2VyID09PSAnc3RyaW5nJyA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRyaWdnZXIpIDogdHJpZ2dlcjtcblxuXG4gICAgdGhpcy5ob29rcy5mb3JFYWNoKChob29rLCBpKSA9PiB7XG4gICAgICBob29rLmxpc3QubGlzdC5kYXRhc2V0LmRyb3Bkb3duQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgIGlmIChob29rLnRyaWdnZXIgIT09IGF2YWlsYWJsZVRyaWdnZXIpIHJldHVybjtcblxuICAgICAgaG9vay5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhvb2tzLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuYWRkSG9vayhhdmFpbGFibGVUcmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpO1xuICAgIH0pO1xuICB9LFxuXG4gIGFkZEhvb2s6IGZ1bmN0aW9uKGhvb2ssIGxpc3QsIHBsdWdpbnMsIGNvbmZpZykge1xuICAgIGNvbnN0IGF2YWlsYWJsZUhvb2sgPSB0eXBlb2YgaG9vayA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGhvb2spIDogaG9vaztcbiAgICBsZXQgYXZhaWxhYmxlTGlzdDtcblxuICAgIGlmICh0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGF2YWlsYWJsZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxpc3QpO1xuICAgIH0gZWxzZSBpZiAobGlzdCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgIGF2YWlsYWJsZUxpc3QgPSBsaXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBhdmFpbGFibGVMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihob29rLmRhdGFzZXRbdXRpbHMudG9DYW1lbENhc2UoREFUQV9UUklHR0VSKV0pO1xuICAgIH1cblxuICAgIGF2YWlsYWJsZUxpc3QuZGF0YXNldC5kcm9wZG93bkFjdGl2ZSA9IHRydWU7XG5cbiAgICBjb25zdCBIb29rT2JqZWN0ID0gYXZhaWxhYmxlSG9vay50YWdOYW1lID09PSAnSU5QVVQnID8gSG9va0lucHV0IDogSG9va0J1dHRvbjtcbiAgICB0aGlzLmhvb2tzLnB1c2gobmV3IEhvb2tPYmplY3QoYXZhaWxhYmxlSG9vaywgYXZhaWxhYmxlTGlzdCwgcGx1Z2lucywgY29uZmlnKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBhZGRIb29rczogZnVuY3Rpb24oaG9va3MsIHBsdWdpbnMsIGNvbmZpZykge1xuICAgIGhvb2tzLmZvckVhY2goaG9vayA9PiB0aGlzLmFkZEhvb2soaG9vaywgbnVsbCwgcGx1Z2lucywgY29uZmlnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgc2V0Q29uZmlnOiBmdW5jdGlvbihvYmope1xuICAgIHRoaXMuY29uZmlnID0gb2JqO1xuICB9LFxuXG4gIGZpcmVSZWFkeTogZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcmVhZHlFdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVhZHkuZGwnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgZHJvcGRvd246IHRoaXMsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQocmVhZHlFdmVudCk7XG5cbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgfSxcblxuICBpbml0OiBmdW5jdGlvbiAoaG9vaywgbGlzdCwgcGx1Z2lucywgY29uZmlnKSB7XG4gICAgaG9vayA/IHRoaXMuYWRkSG9vayhob29rLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIDogdGhpcy5sb2FkU3RhdGljKCk7XG5cbiAgICB0aGlzLmFkZEV2ZW50cygpO1xuXG4gICAgS2V5Ym9hcmQoKTtcblxuICAgIHRoaXMuZmlyZVJlYWR5KCk7XG5cbiAgICB0aGlzLnF1ZXVlZERhdGEuZm9yRWFjaChkYXRhID0+IHRoaXMuYWRkRGF0YShkYXRhKSk7XG4gICAgdGhpcy5xdWV1ZWREYXRhID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBEcm9wTGFiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Ryb3BsYWIuanMiLCJpbXBvcnQgJ2N1c3RvbS1ldmVudC1wb2x5ZmlsbCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBTRUxFQ1RFRF9DTEFTUyB9IGZyb20gJy4uL3NyYy9jb25zdGFudHMnO1xuXG52YXIgRHJvcERvd24gPSBmdW5jdGlvbihsaXN0KSB7XG4gIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICB0aGlzLmxpc3QgPSB0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxpc3QpIDogbGlzdDtcbiAgdGhpcy5pdGVtcyA9IFtdO1xuXG4gIHRoaXMuZXZlbnRXcmFwcGVyID0ge307XG5cbiAgdGhpcy5nZXRJdGVtcygpO1xuICB0aGlzLmluaXRUZW1wbGF0ZVN0cmluZygpO1xuICB0aGlzLmFkZEV2ZW50cygpO1xuXG4gIHRoaXMuaW5pdGlhbFN0YXRlID0gbGlzdC5pbm5lckhUTUw7XG59O1xuXG5PYmplY3QuYXNzaWduKERyb3BEb3duLnByb3RvdHlwZSwge1xuICBnZXRJdGVtczogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pdGVtcyA9IFtdLnNsaWNlLmNhbGwodGhpcy5saXN0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJykpO1xuICAgIHJldHVybiB0aGlzLml0ZW1zO1xuICB9LFxuXG4gIGluaXRUZW1wbGF0ZVN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcyB8fCB0aGlzLmdldEl0ZW1zKCk7XG5cbiAgICB2YXIgdGVtcGxhdGVTdHJpbmcgPSAnJztcbiAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkgdGVtcGxhdGVTdHJpbmcgPSBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS5vdXRlckhUTUw7XG4gICAgdGhpcy50ZW1wbGF0ZVN0cmluZyA9IHRlbXBsYXRlU3RyaW5nO1xuXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVTdHJpbmc7XG4gIH0sXG5cbiAgY2xpY2tFdmVudDogZnVuY3Rpb24oZSkge1xuICAgIHZhciBzZWxlY3RlZCA9IHV0aWxzLmNsb3Nlc3QoZS50YXJnZXQsICdMSScpO1xuICAgIGlmICghc2VsZWN0ZWQpIHJldHVybjtcblxuICAgIHRoaXMuYWRkU2VsZWN0ZWRDbGFzcyhzZWxlY3RlZCk7XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5oaWRlKCk7XG5cbiAgICB2YXIgbGlzdEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjbGljay5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBsaXN0OiB0aGlzLFxuICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgICAgIGRhdGE6IGUudGFyZ2V0LmRhdGFzZXQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMubGlzdC5kaXNwYXRjaEV2ZW50KGxpc3RFdmVudCk7XG4gIH0sXG5cbiAgYWRkU2VsZWN0ZWRDbGFzczogZnVuY3Rpb24gKHNlbGVjdGVkKSB7XG4gICAgdGhpcy5yZW1vdmVTZWxlY3RlZENsYXNzZXMoKTtcbiAgICBzZWxlY3RlZC5jbGFzc0xpc3QuYWRkKFNFTEVDVEVEX0NMQVNTKTtcbiAgfSxcblxuICByZW1vdmVTZWxlY3RlZENsYXNzZXM6IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMgfHwgdGhpcy5nZXRJdGVtcygpO1xuXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uY2xhc3NMaXN0LnJlbW92ZShTRUxFQ1RFRF9DTEFTUykpO1xuICB9LFxuXG4gIGFkZEV2ZW50czogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tFdmVudCA9IHRoaXMuY2xpY2tFdmVudC5iaW5kKHRoaXMpXG4gICAgdGhpcy5saXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tFdmVudCk7XG4gIH0sXG5cbiAgdG9nZ2xlOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmhpZGRlbiA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG4gIH0sXG5cbiAgc2V0RGF0YTogZnVuY3Rpb24oZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5yZW5kZXIoZGF0YSk7XG4gIH0sXG5cbiAgYWRkRGF0YTogZnVuY3Rpb24oZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9ICh0aGlzLmRhdGEgfHwgW10pLmNvbmNhdChkYXRhKTtcbiAgICB0aGlzLnJlbmRlcih0aGlzLmRhdGEpO1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oZGF0YSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YSA/IGRhdGEubWFwKHRoaXMucmVuZGVyQ2hpbGRyZW4uYmluZCh0aGlzKSkgOiBbXTtcbiAgICBjb25zdCByZW5kZXJhYmxlTGlzdCA9IHRoaXMubGlzdC5xdWVyeVNlbGVjdG9yKCd1bFtkYXRhLWR5bmFtaWNdJykgfHwgdGhpcy5saXN0O1xuXG4gICAgcmVuZGVyYWJsZUxpc3QuaW5uZXJIVE1MID0gY2hpbGRyZW4uam9pbignJyk7XG4gIH0sXG5cbiAgcmVuZGVyQ2hpbGRyZW46IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICB2YXIgaHRtbCA9IHV0aWxzLnQodGhpcy50ZW1wbGF0ZVN0cmluZywgZGF0YSk7XG4gICAgdmFyIHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xuICAgIHRoaXMuc2V0SW1hZ2VzU3JjKHRlbXBsYXRlKTtcbiAgICB0ZW1wbGF0ZS5maXJzdENoaWxkLnN0eWxlLmRpc3BsYXkgPSBkYXRhLmRyb3BsYWJfaGlkZGVuID8gJ25vbmUnIDogJ2Jsb2NrJztcblxuICAgIHJldHVybiB0ZW1wbGF0ZS5maXJzdENoaWxkLm91dGVySFRNTDtcbiAgfSxcblxuICBzZXRJbWFnZXNTcmM6IGZ1bmN0aW9uKHRlbXBsYXRlKSB7XG4gICAgY29uc3QgaW1hZ2VzID0gW10uc2xpY2UuY2FsbCh0ZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKCdpbWdbZGF0YS1zcmNdJykpO1xuXG4gICAgaW1hZ2VzLmZvckVhY2goKGltYWdlKSA9PiB7XG4gICAgICBpbWFnZS5zcmMgPSBpbWFnZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG4gICAgICBpbWFnZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG4gICAgfSk7XG4gIH0sXG5cbiAgc2hvdzogZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmhpZGRlbikgcmV0dXJuO1xuICAgIHRoaXMubGlzdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcbiAgfSxcblxuICBoaWRlOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oaWRkZW4pIHJldHVybjtcbiAgICB0aGlzLmxpc3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICB9LFxuXG4gIHRvZ2dsZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuaGlkZGVuID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcbiAgfSxcblxuICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmhpZGUoKTtcbiAgICB0aGlzLmxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmV2ZW50V3JhcHBlci5jbGlja0V2ZW50KTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IERyb3BEb3duO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Ryb3Bkb3duLmpzIiwiaW1wb3J0ICdjdXN0b20tZXZlbnQtcG9seWZpbGwnO1xuaW1wb3J0IEhvb2sgZnJvbSAnLi9ob29rJztcblxudmFyIEhvb2tCdXR0b24gPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgSG9vay5jYWxsKHRoaXMsIHRyaWdnZXIsIGxpc3QsIHBsdWdpbnMsIGNvbmZpZyk7XG5cbiAgdGhpcy50eXBlID0gJ2J1dHRvbic7XG4gIHRoaXMuZXZlbnQgPSAnY2xpY2snO1xuXG4gIHRoaXMuZXZlbnRXcmFwcGVyID0ge307XG5cbiAgdGhpcy5hZGRFdmVudHMoKTtcbiAgdGhpcy5hZGRQbHVnaW5zKCk7XG59O1xuXG5Ib29rQnV0dG9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSG9vay5wcm90b3R5cGUpO1xuXG5PYmplY3QuYXNzaWduKEhvb2tCdXR0b24ucHJvdG90eXBlLCB7XG4gIGFkZFBsdWdpbnM6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiBwbHVnaW4uaW5pdCh0aGlzKSk7XG4gIH0sXG5cbiAgY2xpY2tlZDogZnVuY3Rpb24oZSl7XG4gICAgdmFyIGJ1dHRvbkV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjbGljay5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgfSxcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZS50YXJnZXQuZGlzcGF0Y2hFdmVudChidXR0b25FdmVudCk7XG5cbiAgICB0aGlzLmxpc3QudG9nZ2xlKCk7XG4gIH0sXG5cbiAgYWRkRXZlbnRzOiBmdW5jdGlvbigpe1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmNsaWNrZWQgPSB0aGlzLmNsaWNrZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmV2ZW50V3JhcHBlci5jbGlja2VkKTtcbiAgfSxcblxuICByZW1vdmVFdmVudHM6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ldmVudFdyYXBwZXIuY2xpY2tlZCk7XG4gIH0sXG5cbiAgcmVzdG9yZUluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0Lmxpc3QuaW5uZXJIVE1MID0gdGhpcy5saXN0LmluaXRpYWxTdGF0ZTtcbiAgfSxcblxuICByZW1vdmVQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmRlc3Ryb3koKSk7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXN0b3JlSW5pdGlhbFN0YXRlKCk7XG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICAgIHRoaXMucmVtb3ZlUGx1Z2lucygpO1xuICB9LFxuXG4gIGNvbnN0cnVjdG9yOiBIb29rQnV0dG9uLFxufSk7XG5cblxuZXhwb3J0IGRlZmF1bHQgSG9va0J1dHRvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9ob29rX2J1dHRvbi5qcyIsImltcG9ydCAnY3VzdG9tLWV2ZW50LXBvbHlmaWxsJztcbmltcG9ydCBIb29rIGZyb20gJy4vaG9vayc7XG5cbnZhciBIb29rSW5wdXQgPSBmdW5jdGlvbih0cmlnZ2VyLCBsaXN0LCBwbHVnaW5zLCBjb25maWcpIHtcbiAgSG9vay5jYWxsKHRoaXMsIHRyaWdnZXIsIGxpc3QsIHBsdWdpbnMsIGNvbmZpZyk7XG5cbiAgdGhpcy50eXBlID0gJ2lucHV0JztcbiAgdGhpcy5ldmVudCA9ICdpbnB1dCc7XG5cbiAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcblxuICB0aGlzLmFkZEV2ZW50cygpO1xuICB0aGlzLmFkZFBsdWdpbnMoKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oSG9va0lucHV0LnByb3RvdHlwZSwge1xuICBhZGRQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmluaXQodGhpcykpO1xuICB9LFxuXG4gIGFkZEV2ZW50czogZnVuY3Rpb24oKXtcbiAgICB0aGlzLmV2ZW50V3JhcHBlci5tb3VzZWRvd24gPSB0aGlzLm1vdXNlZG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmlucHV0ID0gdGhpcy5pbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmtleXVwID0gdGhpcy5rZXl1cC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmtleWRvd24gPSB0aGlzLmtleWRvd24uYmluZCh0aGlzKTtcblxuICAgIHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmV2ZW50V3JhcHBlci5tb3VzZWRvd24pO1xuICAgIHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuZXZlbnRXcmFwcGVyLmlucHV0KTtcbiAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmV2ZW50V3JhcHBlci5rZXl1cCk7XG4gICAgdGhpcy50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmV2ZW50V3JhcHBlci5rZXlkb3duKTtcbiAgfSxcblxuICByZW1vdmVFdmVudHM6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaGFzUmVtb3ZlZEV2ZW50cyA9IHRydWU7XG5cbiAgICB0aGlzLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5ldmVudFdyYXBwZXIubW91c2Vkb3duKTtcbiAgICB0aGlzLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLmV2ZW50V3JhcHBlci5pbnB1dCk7XG4gICAgdGhpcy50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5ldmVudFdyYXBwZXIua2V5dXApO1xuICAgIHRoaXMudHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5ldmVudFdyYXBwZXIua2V5ZG93bik7XG4gIH0sXG5cbiAgaW5wdXQ6IGZ1bmN0aW9uKGUpIHtcbiAgICBpZih0aGlzLmhhc1JlbW92ZWRFdmVudHMpIHJldHVybjtcblxuICAgIHRoaXMubGlzdC5zaG93KCk7XG5cbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdpbnB1dC5kbCcsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgICB0ZXh0OiBlLnRhcmdldC52YWx1ZSxcbiAgICAgIH0sXG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQoaW5wdXRFdmVudCk7XG4gIH0sXG5cbiAgbW91c2Vkb3duOiBmdW5jdGlvbihlKSB7XG4gICAgaWYgKHRoaXMuaGFzUmVtb3ZlZEV2ZW50cykgcmV0dXJuO1xuXG4gICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbW91c2Vkb3duLmRsJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIGhvb2s6IHRoaXMsXG4gICAgICAgIHRleHQ6IGUudGFyZ2V0LnZhbHVlLFxuICAgICAgfSxcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQobW91c2VFdmVudCk7XG4gIH0sXG5cbiAga2V5dXA6IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAodGhpcy5oYXNSZW1vdmVkRXZlbnRzKSByZXR1cm47XG5cbiAgICB0aGlzLmtleUV2ZW50KGUsICdrZXl1cC5kbCcpO1xuICB9LFxuXG4gIGtleWRvd246IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAodGhpcy5oYXNSZW1vdmVkRXZlbnRzKSByZXR1cm47XG5cbiAgICB0aGlzLmtleUV2ZW50KGUsICdrZXlkb3duLmRsJyk7XG4gIH0sXG5cbiAga2V5RXZlbnQ6IGZ1bmN0aW9uKGUsIGV2ZW50TmFtZSkge1xuICAgIHRoaXMubGlzdC5zaG93KCk7XG5cbiAgICBjb25zdCBrZXlFdmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBob29rOiB0aGlzLFxuICAgICAgICB0ZXh0OiBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgd2hpY2g6IGUud2hpY2gsXG4gICAgICAgIGtleTogZS5rZXksXG4gICAgICB9LFxuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgZS50YXJnZXQuZGlzcGF0Y2hFdmVudChrZXlFdmVudCk7XG4gIH0sXG5cbiAgcmVzdG9yZUluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0Lmxpc3QuaW5uZXJIVE1MID0gdGhpcy5saXN0LmluaXRpYWxTdGF0ZTtcbiAgfSxcblxuICByZW1vdmVQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmRlc3Ryb3koKSk7XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXN0b3JlSW5pdGlhbFN0YXRlKCk7XG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuICAgIHRoaXMucmVtb3ZlUGx1Z2lucygpO1xuXG4gICAgdGhpcy5saXN0LmRlc3Ryb3koKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEhvb2tJbnB1dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9ob29rX2lucHV0LmpzIiwiaW1wb3J0IHsgQUNUSVZFX0NMQVNTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBLZXlib2FyZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGN1cnJlbnRLZXk7XG4gIHZhciBjdXJyZW50Rm9jdXM7XG4gIHZhciBpc1VwQXJyb3cgPSBmYWxzZTtcbiAgdmFyIGlzRG93bkFycm93ID0gZmFsc2U7XG4gIHZhciByZW1vdmVIaWdobGlnaHQgPSBmdW5jdGlvbiByZW1vdmVIaWdobGlnaHQobGlzdCkge1xuICAgIHZhciBpdGVtRWxlbWVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChsaXN0Lmxpc3QucXVlcnlTZWxlY3RvckFsbCgnbGk6bm90KC5kaXZpZGVyKScpLCAwKTtcbiAgICB2YXIgbGlzdEl0ZW1zID0gW107XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGl0ZW1FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpc3RJdGVtID0gaXRlbUVsZW1lbnRzW2ldO1xuICAgICAgbGlzdEl0ZW0uY2xhc3NMaXN0LnJlbW92ZShBQ1RJVkVfQ0xBU1MpO1xuXG4gICAgICBpZiAobGlzdEl0ZW0uc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGxpc3RJdGVtcy5wdXNoKGxpc3RJdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpc3RJdGVtcztcbiAgfTtcblxuICB2YXIgc2V0TWVudUZvckFycm93cyA9IGZ1bmN0aW9uIHNldE1lbnVGb3JBcnJvd3MobGlzdCkge1xuICAgIHZhciBsaXN0SXRlbXMgPSByZW1vdmVIaWdobGlnaHQobGlzdCk7XG4gICAgaWYobGlzdC5jdXJyZW50SW5kZXg+MCl7XG4gICAgICBpZighbGlzdEl0ZW1zW2xpc3QuY3VycmVudEluZGV4LTFdKXtcbiAgICAgICAgbGlzdC5jdXJyZW50SW5kZXggPSBsaXN0LmN1cnJlbnRJbmRleC0xO1xuICAgICAgfVxuXG4gICAgICBpZiAobGlzdEl0ZW1zW2xpc3QuY3VycmVudEluZGV4LTFdKSB7XG4gICAgICAgIHZhciBlbCA9IGxpc3RJdGVtc1tsaXN0LmN1cnJlbnRJbmRleC0xXTtcbiAgICAgICAgdmFyIGZpbHRlckRyb3Bkb3duRWwgPSBlbC5jbG9zZXN0KCcuZmlsdGVyLWRyb3Bkb3duJyk7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoQUNUSVZFX0NMQVNTKTtcblxuICAgICAgICBpZiAoZmlsdGVyRHJvcGRvd25FbCkge1xuICAgICAgICAgIHZhciBmaWx0ZXJEcm9wZG93bkJvdHRvbSA9IGZpbHRlckRyb3Bkb3duRWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgIHZhciBlbE9mZnNldFRvcCA9IGVsLm9mZnNldFRvcCAtIDMwO1xuXG4gICAgICAgICAgaWYgKGVsT2Zmc2V0VG9wID4gZmlsdGVyRHJvcGRvd25Cb3R0b20pIHtcbiAgICAgICAgICAgIGZpbHRlckRyb3Bkb3duRWwuc2Nyb2xsVG9wID0gZWxPZmZzZXRUb3AgLSBmaWx0ZXJEcm9wZG93bkJvdHRvbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIG1vdXNlZG93biA9IGZ1bmN0aW9uIG1vdXNlZG93bihlKSB7XG4gICAgdmFyIGxpc3QgPSBlLmRldGFpbC5ob29rLmxpc3Q7XG4gICAgcmVtb3ZlSGlnaGxpZ2h0KGxpc3QpO1xuICAgIGxpc3Quc2hvdygpO1xuICAgIGxpc3QuY3VycmVudEluZGV4ID0gMDtcbiAgICBpc1VwQXJyb3cgPSBmYWxzZTtcbiAgICBpc0Rvd25BcnJvdyA9IGZhbHNlO1xuICB9O1xuICB2YXIgc2VsZWN0SXRlbSA9IGZ1bmN0aW9uIHNlbGVjdEl0ZW0obGlzdCkge1xuICAgIHZhciBsaXN0SXRlbXMgPSByZW1vdmVIaWdobGlnaHQobGlzdCk7XG4gICAgdmFyIGN1cnJlbnRJdGVtID0gbGlzdEl0ZW1zW2xpc3QuY3VycmVudEluZGV4LTFdO1xuICAgIHZhciBsaXN0RXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NsaWNrLmRsJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIGxpc3Q6IGxpc3QsXG4gICAgICAgIHNlbGVjdGVkOiBjdXJyZW50SXRlbSxcbiAgICAgICAgZGF0YTogY3VycmVudEl0ZW0uZGF0YXNldCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgbGlzdC5saXN0LmRpc3BhdGNoRXZlbnQobGlzdEV2ZW50KTtcbiAgICBsaXN0LmhpZGUoKTtcbiAgfVxuXG4gIHZhciBrZXlkb3duID0gZnVuY3Rpb24ga2V5ZG93bihlKXtcbiAgICB2YXIgdHlwZWRPbiA9IGUudGFyZ2V0O1xuICAgIHZhciBsaXN0ID0gZS5kZXRhaWwuaG9vay5saXN0O1xuICAgIHZhciBjdXJyZW50SW5kZXggPSBsaXN0LmN1cnJlbnRJbmRleDtcbiAgICBpc1VwQXJyb3cgPSBmYWxzZTtcbiAgICBpc0Rvd25BcnJvdyA9IGZhbHNlO1xuXG4gICAgaWYoZS5kZXRhaWwud2hpY2gpe1xuICAgICAgY3VycmVudEtleSA9IGUuZGV0YWlsLndoaWNoO1xuICAgICAgaWYoY3VycmVudEtleSA9PT0gMTMpe1xuICAgICAgICBzZWxlY3RJdGVtKGUuZGV0YWlsLmhvb2subGlzdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmKGN1cnJlbnRLZXkgPT09IDM4KSB7XG4gICAgICAgIGlzVXBBcnJvdyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZihjdXJyZW50S2V5ID09PSA0MCkge1xuICAgICAgICBpc0Rvd25BcnJvdyA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGUuZGV0YWlsLmtleSkge1xuICAgICAgY3VycmVudEtleSA9IGUuZGV0YWlsLmtleTtcbiAgICAgIGlmKGN1cnJlbnRLZXkgPT09ICdFbnRlcicpe1xuICAgICAgICBzZWxlY3RJdGVtKGUuZGV0YWlsLmhvb2subGlzdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmKGN1cnJlbnRLZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICBpc1VwQXJyb3cgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYoY3VycmVudEtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgaXNEb3duQXJyb3cgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZihpc1VwQXJyb3cpeyBjdXJyZW50SW5kZXgtLTsgfVxuICAgIGlmKGlzRG93bkFycm93KXsgY3VycmVudEluZGV4Kys7IH1cbiAgICBpZihjdXJyZW50SW5kZXggPCAwKXsgY3VycmVudEluZGV4ID0gMDsgfVxuICAgIGxpc3QuY3VycmVudEluZGV4ID0gY3VycmVudEluZGV4O1xuICAgIHNldE1lbnVGb3JBcnJvd3MoZS5kZXRhaWwuaG9vay5saXN0KTtcbiAgfTtcblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24uZGwnLCBtb3VzZWRvd24pO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duLmRsJywga2V5ZG93bik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBLZXlib2FyZDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9rZXlib2FyZC5qcyIsImV4cG9ydCAqIGZyb20gJy4vZHJvcGxhYic7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvaW5kZXguanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app/assets/javascripts/droplab/plugins/ajax.js b/app/assets/javascripts/droplab/plugins/ajax.js deleted file mode 100644 index afc423b7f0e..00000000000 --- a/app/assets/javascripts/droplab/plugins/ajax.js +++ /dev/null @@ -1,157 +0,0 @@ -/******/ (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; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // 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 = 5); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ 5: -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -function droplabAjaxException(message) { - this.message = message; -} - -var droplabAjax = { - _loadUrlData: function _loadUrlData(url) { - var self = this; - return new Promise(function (resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.onreadystatechange = function () { - if (xhr.readyState === XMLHttpRequest.DONE) { - if (xhr.status === 200) { - var data = JSON.parse(xhr.responseText); - self.cache[url] = data; - return resolve(data); - } else { - return reject([xhr.responseText, xhr.status]); - } - } - }; - xhr.send(); - }); - }, - _loadData: function _loadData(data, config, self) { - if (config.loadingTemplate) { - var dataLoadingTemplate = self.hook.list.list.querySelector('[data-loading-template]'); - if (dataLoadingTemplate) dataLoadingTemplate.outerHTML = self.listTemplate; - } - - if (!self.destroyed) self.hook.list[config.method].call(self.hook.list, data); - }, - init: function init(hook) { - var self = this; - self.destroyed = false; - self.cache = self.cache || {}; - var config = hook.config.droplabAjax; - this.hook = hook; - if (!config || !config.endpoint || !config.method) { - return; - } - if (config.method !== 'setData' && config.method !== 'addData') { - return; - } - if (config.loadingTemplate) { - var dynamicList = hook.list.list.querySelector('[data-dynamic]'); - var loadingTemplate = document.createElement('div'); - loadingTemplate.innerHTML = config.loadingTemplate; - loadingTemplate.setAttribute('data-loading-template', ''); - this.listTemplate = dynamicList.outerHTML; - dynamicList.outerHTML = loadingTemplate.outerHTML; - } - if (self.cache[config.endpoint]) { - self._loadData(self.cache[config.endpoint], config, self); - } else { - this._loadUrlData(config.endpoint).then(function (d) { - self._loadData(d, config, self); - }).catch(function (e) { - throw new droplabAjaxException(e.message || e); - }); - } - }, - destroy: function destroy() { - this.destroyed = true; - - var dynamicList = this.hook.list.list.querySelector('[data-dynamic]'); - if (this.listTemplate && dynamicList) { - dynamicList.outerHTML = this.listTemplate; - } - } -}; - -exports.default = droplabAjax; - -/***/ }) - -/******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2E/MGFiZioqKioqKioqIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2FqYXgvYWpheC5qcz8yMTc4Il0sIm5hbWVzIjpbImRyb3BsYWJBamF4RXhjZXB0aW9uIiwibWVzc2FnZSIsImRyb3BsYWJBamF4IiwiX2xvYWRVcmxEYXRhIiwidXJsIiwic2VsZiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJzdGF0dXMiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwiY2FjaGUiLCJzZW5kIiwiX2xvYWREYXRhIiwiY29uZmlnIiwibG9hZGluZ1RlbXBsYXRlIiwiZGF0YUxvYWRpbmdUZW1wbGF0ZSIsImhvb2siLCJsaXN0IiwicXVlcnlTZWxlY3RvciIsIm91dGVySFRNTCIsImxpc3RUZW1wbGF0ZSIsImRlc3Ryb3llZCIsIm1ldGhvZCIsImNhbGwiLCJpbml0IiwiZW5kcG9pbnQiLCJkeW5hbWljTGlzdCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInNldEF0dHJpYnV0ZSIsInRoZW4iLCJkIiwiY2F0Y2giLCJlIiwiZGVzdHJveSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFB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WUFBTCxHQUFvQk0sWUFBWVAsU0FBaEM7QUFDQU8sa0JBQVlQLFNBQVosR0FBd0JMLGdCQUFnQkssU0FBeEM7QUFDRDtBQUNELFFBQUl4QixLQUFLZSxLQUFMLENBQVdHLE9BQU9ZLFFBQWxCLENBQUosRUFBaUM7QUFDL0I5QixXQUFLaUIsU0FBTCxDQUFlakIsS0FBS2UsS0FBTCxDQUFXRyxPQUFPWSxRQUFsQixDQUFmLEVBQTRDWixNQUE1QyxFQUFvRGxCLElBQXBEO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsV0FBS0YsWUFBTCxDQUFrQm9CLE9BQU9ZLFFBQXpCLEVBQ0dNLElBREgsQ0FDUSxVQUFTQyxDQUFULEVBQVk7QUFDaEJyQyxhQUFLaUIsU0FBTCxDQUFlb0IsQ0FBZixFQUFrQm5CLE1BQWxCLEVBQTBCbEIsSUFBMUI7QUFDRCxPQUhILEVBR0tzQyxLQUhMLENBR1csVUFBU0MsQ0FBVCxFQUFZO0FBQ25CLGNBQU0sSUFBSTVDLG9CQUFKLENBQXlCNEMsRUFBRTNDLE9BQUYsSUFBYTJDLENBQXRDLENBQU47QUFDRCxPQUxIO0FBTUQ7QUFDRixHQTFEaUI7QUEyRGxCQyxXQUFTLG1CQUFXO0FBQ2xCLFNBQUtkLFNBQUwsR0FBaUIsSUFBakI7O0FBRUEsUUFBSUssY0FBYyxLQUFLVixJQUFMLENBQVVDLElBQVYsQ0FBZUEsSUFBZixDQUFvQkMsYUFBcEIsQ0FBa0MsZ0JBQWxDLENBQWxCO0FBQ0EsUUFBSSxLQUFLRSxZQUFMLElBQXFCTSxXQUF6QixFQUFzQztBQUNwQ0Esa0JBQVlQLFNBQVosR0FBd0IsS0FBS0MsWUFBN0I7QUFDRDtBQUNGO0FBbEVpQixDQUFwQjs7a0JBcUVlNUIsVyIsImZpbGUiOiIuL2Rpc3QvcGx1Z2lucy9hamF4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2EiLCJmdW5jdGlvbiBkcm9wbGFiQWpheEV4Y2VwdGlvbihtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbmNvbnN0IGRyb3BsYWJBamF4ID0ge1xuICBfbG9hZFVybERhdGE6IGZ1bmN0aW9uIF9sb2FkVXJsRGF0YSh1cmwpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdDtcbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICBzZWxmLmNhY2hlW3VybF0gPSBkYXRhO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoW3hoci5yZXNwb25zZVRleHQsIHhoci5zdGF0dXNdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xuICB9LFxuICBfbG9hZERhdGE6IGZ1bmN0aW9uIF9sb2FkRGF0YShkYXRhLCBjb25maWcsIHNlbGYpIHtcbiAgICBpZiAoY29uZmlnLmxvYWRpbmdUZW1wbGF0ZSkge1xuICAgICAgdmFyIGRhdGFMb2FkaW5nVGVtcGxhdGUgPSBzZWxmLmhvb2subGlzdC5saXN0LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWxvYWRpbmctdGVtcGxhdGVdJyk7XG4gICAgICBpZiAoZGF0YUxvYWRpbmdUZW1wbGF0ZSkgZGF0YUxvYWRpbmdUZW1wbGF0ZS5vdXRlckhUTUwgPSBzZWxmLmxpc3RUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoIXNlbGYuZGVzdHJveWVkKSBzZWxmLmhvb2subGlzdFtjb25maWcubWV0aG9kXS5jYWxsKHNlbGYuaG9vay5saXN0LCBkYXRhKTtcbiAgfSxcbiAgaW5pdDogZnVuY3Rpb24gaW5pdChob29rKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgc2VsZi5jYWNoZSA9IHNlbGYuY2FjaGUgfHwge307XG4gICAgdmFyIGNvbmZpZyA9IGhvb2suY29uZmlnLmRyb3BsYWJBamF4O1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5lbmRwb2ludCB8fCAhY29uZmlnLm1ldGhvZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLm1ldGhvZCAhPT0gJ3NldERhdGEnICYmIGNvbmZpZy5tZXRob2QgIT09ICdhZGREYXRhJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmxvYWRpbmdUZW1wbGF0ZSkge1xuICAgICAgdmFyIGR5bmFtaWNMaXN0ID0gaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICAgIHZhciBsb2FkaW5nVGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGxvYWRpbmdUZW1wbGF0ZS5pbm5lckhUTUwgPSBjb25maWcubG9hZGluZ1RlbXBsYXRlO1xuICAgICAgbG9hZGluZ1RlbXBsYXRlLnNldEF0dHJpYnV0ZSgnZGF0YS1sb2FkaW5nLXRlbXBsYXRlJywgJycpO1xuICAgICAgdGhpcy5saXN0VGVtcGxhdGUgPSBkeW5hbWljTGlzdC5vdXRlckhUTUw7XG4gICAgICBkeW5hbWljTGlzdC5vdXRlckhUTUwgPSBsb2FkaW5nVGVtcGxhdGUub3V0ZXJIVE1MO1xuICAgIH1cbiAgICBpZiAoc2VsZi5jYWNoZVtjb25maWcuZW5kcG9pbnRdKSB7XG4gICAgICBzZWxmLl9sb2FkRGF0YShzZWxmLmNhY2hlW2NvbmZpZy5lbmRwb2ludF0sIGNvbmZpZywgc2VsZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvYWRVcmxEYXRhKGNvbmZpZy5lbmRwb2ludClcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHNlbGYuX2xvYWREYXRhKGQsIGNvbmZpZywgc2VsZik7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgZHJvcGxhYkFqYXhFeGNlcHRpb24oZS5tZXNzYWdlIHx8IGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcblxuICAgIHZhciBkeW5hbWljTGlzdCA9IHRoaXMuaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICBpZiAodGhpcy5saXN0VGVtcGxhdGUgJiYgZHluYW1pY0xpc3QpIHtcbiAgICAgIGR5bmFtaWNMaXN0Lm91dGVySFRNTCA9IHRoaXMubGlzdFRlbXBsYXRlO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZHJvcGxhYkFqYXg7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcGx1Z2lucy9hamF4L2FqYXguanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app/assets/javascripts/droplab/plugins/ajax_filter.js b/app/assets/javascripts/droplab/plugins/ajax_filter.js deleted file mode 100644 index 3e6532c7709..00000000000 --- a/app/assets/javascripts/droplab/plugins/ajax_filter.js +++ /dev/null @@ -1,214 +0,0 @@ -/******/ (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; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // 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 = 6); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ 6: -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var droplabAjaxFilter = { - init: function init(hook) { - this.destroyed = false; - this.hook = hook; - this.notLoading(); - - this.eventWrapper = {}; - this.eventWrapper.debounceTrigger = this.debounceTrigger.bind(this); - this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceTrigger); - this.hook.trigger.addEventListener('focus', this.eventWrapper.debounceTrigger); - - this.trigger(true); - }, - - notLoading: function notLoading() { - this.loading = false; - }, - - debounceTrigger: function debounceTrigger(e) { - var NON_CHARACTER_KEYS = [16, 17, 18, 20, 37, 38, 39, 40, 91, 93]; - var invalidKeyPressed = NON_CHARACTER_KEYS.indexOf(e.detail.which || e.detail.keyCode) > -1; - var focusEvent = e.type === 'focus'; - if (invalidKeyPressed || this.loading) { - return; - } - if (this.timeout) { - clearTimeout(this.timeout); - } - this.timeout = setTimeout(this.trigger.bind(this, focusEvent), 200); - }, - - trigger: function trigger(getEntireList) { - var config = this.hook.config.droplabAjaxFilter; - var searchValue = this.trigger.value; - if (!config || !config.endpoint || !config.searchKey) { - return; - } - if (config.searchValueFunction) { - searchValue = config.searchValueFunction(); - } - if (config.loadingTemplate && this.hook.list.data === undefined || this.hook.list.data.length === 0) { - var dynamicList = this.hook.list.list.querySelector('[data-dynamic]'); - var loadingTemplate = document.createElement('div'); - loadingTemplate.innerHTML = config.loadingTemplate; - loadingTemplate.setAttribute('data-loading-template', true); - this.listTemplate = dynamicList.outerHTML; - dynamicList.outerHTML = loadingTemplate.outerHTML; - } - if (getEntireList) { - searchValue = ''; - } - if (config.searchKey === searchValue) { - return this.list.show(); - } - this.loading = true; - var params = config.params || {}; - params[config.searchKey] = searchValue; - var self = this; - self.cache = self.cache || {}; - var url = config.endpoint + this.buildParams(params); - var urlCachedData = self.cache[url]; - if (urlCachedData) { - self._loadData(urlCachedData, config, self); - } else { - this._loadUrlData(url).then(function (data) { - self._loadData(data, config, self); - }); - } - }, - - _loadUrlData: function _loadUrlData(url) { - var self = this; - return new Promise(function (resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.onreadystatechange = function () { - if (xhr.readyState === XMLHttpRequest.DONE) { - if (xhr.status === 200) { - var data = JSON.parse(xhr.responseText); - self.cache[url] = data; - return resolve(data); - } else { - return reject([xhr.responseText, xhr.status]); - } - } - }; - xhr.send(); - }); - }, - - _loadData: function _loadData(data, config, self) { - var list = self.hook.list; - if (config.loadingTemplate && list.data === undefined || list.data.length === 0) { - var dataLoadingTemplate = list.list.querySelector('[data-loading-template]'); - if (dataLoadingTemplate) { - dataLoadingTemplate.outerHTML = self.listTemplate; - } - } - if (!self.destroyed) { - var hookListChildren = list.list.children; - var onlyDynamicList = hookListChildren.length === 1 && hookListChildren[0].hasAttribute('data-dynamic'); - if (onlyDynamicList && data.length === 0) { - list.hide(); - } - list.setData.call(list, data); - } - self.notLoading(); - list.currentIndex = 0; - }, - - buildParams: function buildParams(params) { - if (!params) return ''; - var paramsArray = Object.keys(params).map(function (param) { - return param + '=' + (params[param] || ''); - }); - return '?' + paramsArray.join('&'); - }, - - destroy: function destroy() { - if (this.timeout) { - clearTimeout(this.timeout); - } - - this.destroyed = true; - this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceTrigger); - this.hook.trigger.removeEventListener('focus', this.eventWrapper.debounceTrigger); - } -}; - -exports.default = droplabAjaxFilter; - -/***/ }) - -/******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2E/MGFiZioqKioqKioiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvYWpheF9maWx0ZXIvYWpheF9maWx0ZXIuanM/YzNlNSJdLCJuYW1lcyI6WyJkcm9wbGFiQWpheEZpbHRlciIsImluaXQiLCJob29rIiwiZGVzdHJveWVkIiwibm90TG9hZGluZyIsImV2ZW50V3JhcHBlciIsImRlYm91bmNlVHJpZ2dlciIsImJpbmQiLCJ0cmlnZ2VyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImxvYWRpbmciLCJlIiwiTk9OX0NIQVJBQ1RFUl9LRVlTIiwiaW52YWxpZEtleVByZXNzZWQiLCJpbmRleE9mIiwiZGV0YWlsIiwid2hpY2giLCJrZXlDb2RlIiwiZm9jdXNFdmVudCIsInR5cGUiLCJ0aW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImdldEVudGlyZUxpc3QiLCJjb25maWciLCJzZWFyY2hWYWx1ZSIsInZhbHVlIiwiZW5kcG9pbnQiLCJzZWFyY2hLZXkiLCJzZWFyY2hWYWx1ZUZ1bmN0aW9uIiwibG9hZGluZ1RlbXBsYXRlIiwibGlzdCIsImRhdGEiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJkeW5hbWljTGlzdCIsInF1ZXJ5U2VsZWN0b3IiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJzZXRBdHRyaWJ1dGUiLCJsaXN0VGVtcGxhdGUiLCJvdXRlckhUTUwiLCJzaG93IiwicGFyYW1zIiwic2VsZiIsImNhY2hlIiwidXJsIiwiYnVpbGRQYXJhbXMiLCJ1cmxDYWNoZWREYXRhIiwiX2xvYWREYXRhIiwiX2xvYWRVcmxEYXRhIiwidGhlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJzdGF0dXMiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJzZW5kIiwiZGF0YUxvYWRpbmdUZW1wbGF0ZSIsImhvb2tMaXN0Q2hpbGRyZW4iLCJjaGlsZHJlbiIsIm9ubHlEeW5hbWljTGlzdCIsImhhc0F0dHJpYnV0ZSIsImhpZGUiLCJzZXREYXRhIiwiY2FsbCIsImN1cnJlbnRJbmRleCIsInBhcmFtc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsInBhcmFtIiwiam9pbiIsImRlc3Ryb3kiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQTJDLGNBQWM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUNoRUEsSUFBTUEsb0JBQW9CO0FBQ3hCQyxRQUFNLGNBQVNDLElBQVQsRUFBZTtBQUNuQixTQUFLQyxTQUFMLEdBQWlCLEtBQWpCO0FBQ0EsU0FBS0QsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0UsVUFBTDs7QUFFQSxTQUFLQyxZQUFMLEdBQW9CLEVBQXBCO0FBQ0EsU0FBS0EsWUFBTCxDQUFrQkMsZUFBbEIsR0FBb0MsS0FBS0EsZUFBTCxDQUFxQkMsSUFBckIsQ0FBMEIsSUFBMUIsQ0FBcEM7QUFDQSxTQUFLTCxJQUFMLENBQVVNLE9BQVYsQ0FBa0JDLGdCQUFsQixDQUFtQyxZQUFuQyxFQUFpRCxLQUFLSixZQUFMLENB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QUFnQjtBQUN4RCxhQUFPQSxRQUFRLEdBQVIsSUFBZXBDLE9BQU9vQyxLQUFQLEtBQWlCLEVBQWhDLENBQVA7QUFDRCxLQUZpQixDQUFsQjtBQUdBLFdBQU8sTUFBTUosWUFBWUssSUFBWixDQUFpQixHQUFqQixDQUFiO0FBQ0QsR0F2SHVCOztBQXlIeEJDLFdBQVMsU0FBU0EsT0FBVCxHQUFtQjtBQUMxQixRQUFJLEtBQUs5RCxPQUFULEVBQWtCO0FBQ2hCQyxtQkFBYSxLQUFLRCxPQUFsQjtBQUNEOztBQUVELFNBQUtqQixTQUFMLEdBQWlCLElBQWpCO0FBQ0EsU0FBS0QsSUFBTCxDQUFVTSxPQUFWLENBQWtCMkUsbUJBQWxCLENBQXNDLFlBQXRDLEVBQW9ELEtBQUs5RSxZQUFMLENBQWtCQyxlQUF0RTtBQUNBLFNBQUtKLElBQUwsQ0FBVU0sT0FBVixDQUFrQjJFLG1CQUFsQixDQUFzQyxPQUF0QyxFQUErQyxLQUFLOUUsWUFBTCxDQUFrQkMsZUFBakU7QUFDRDtBQWpJdUIsQ0FBMUI7O2tCQW9JZU4saUIiLCJmaWxlIjoiLi9kaXN0L3BsdWdpbnMvYWpheF9maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA2KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA5MzNmZjdkNWVkMzkzZGM2M2JjYSIsImNvbnN0IGRyb3BsYWJBamF4RmlsdGVyID0ge1xuICBpbml0OiBmdW5jdGlvbihob29rKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhvb2sgPSBob29rO1xuICAgIHRoaXMubm90TG9hZGluZygpO1xuXG4gICAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcbiAgICB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZVRyaWdnZXIgPSB0aGlzLmRlYm91bmNlVHJpZ2dlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaG9vay50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24uZGwnLCB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZVRyaWdnZXIpO1xuICAgIHRoaXMuaG9vay50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VUcmlnZ2VyKTtcblxuICAgIHRoaXMudHJpZ2dlcih0cnVlKTtcbiAgfSxcblxuICBub3RMb2FkaW5nOiBmdW5jdGlvbiBub3RMb2FkaW5nKCkge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9LFxuXG4gIGRlYm91bmNlVHJpZ2dlcjogZnVuY3Rpb24gZGVib3VuY2VUcmlnZ2VyKGUpIHtcbiAgICB2YXIgTk9OX0NIQVJBQ1RFUl9LRVlTID0gWzE2LCAxNywgMTgsIDIwLCAzNywgMzgsIDM5LCA0MCwgOTEsIDkzXTtcbiAgICB2YXIgaW52YWxpZEtleVByZXNzZWQgPSBOT05fQ0hBUkFDVEVSX0tFWVMuaW5kZXhPZihlLmRldGFpbC53aGljaCB8fCBlLmRldGFpbC5rZXlDb2RlKSA+IC0xO1xuICAgIHZhciBmb2N1c0V2ZW50ID0gZS50eXBlID09PSAnZm9jdXMnO1xuICAgIGlmIChpbnZhbGlkS2V5UHJlc3NlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQodGhpcy50cmlnZ2VyLmJpbmQodGhpcywgZm9jdXNFdmVudCksIDIwMCk7XG4gIH0sXG5cbiAgdHJpZ2dlcjogZnVuY3Rpb24gdHJpZ2dlcihnZXRFbnRpcmVMaXN0KSB7XG4gICAgdmFyIGNvbmZpZyA9IHRoaXMuaG9vay5jb25maWcuZHJvcGxhYkFqYXhGaWx0ZXI7XG4gICAgdmFyIHNlYXJjaFZhbHVlID0gdGhpcy50cmlnZ2VyLnZhbHVlO1xuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcuZW5kcG9pbnQgfHwgIWNvbmZpZy5zZWFyY2hLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5zZWFyY2hWYWx1ZUZ1bmN0aW9uKSB7XG4gICAgICBzZWFyY2hWYWx1ZSA9IGNvbmZpZy5zZWFyY2hWYWx1ZUZ1bmN0aW9uKCk7XG4gICAgfVxuICAgIGlmIChjb25maWcubG9hZGluZ1RlbXBsYXRlICYmIHRoaXMuaG9vay5saXN0LmRhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5ob29rLmxpc3QuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhciBkeW5hbWljTGlzdCA9IHRoaXMuaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICAgIHZhciBsb2FkaW5nVGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGxvYWRpbmdUZW1wbGF0ZS5pbm5lckhUTUwgPSBjb25maWcubG9hZGluZ1RlbXBsYXRlO1xuICAgICAgbG9hZGluZ1RlbXBsYXRlLnNldEF0dHJpYnV0ZSgnZGF0YS1sb2FkaW5nLXRlbXBsYXRlJywgdHJ1ZSk7XG4gICAgICB0aGlzLmxpc3RUZW1wbGF0ZSA9IGR5bmFtaWNMaXN0Lm91dGVySFRNTDtcbiAgICAgIGR5bmFtaWNMaXN0Lm91dGVySFRNTCA9IGxvYWRpbmdUZW1wbGF0ZS5vdXRlckhUTUw7XG4gICAgfVxuICAgIGlmIChnZXRFbnRpcmVMaXN0KSB7XG4gICAgICBzZWFyY2hWYWx1ZSA9ICcnO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlYXJjaEtleSA9PT0gc2VhcmNoVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpc3Quc2hvdygpO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHZhciBwYXJhbXMgPSBjb25maWcucGFyYW1zIHx8IHt9O1xuICAgIHBhcmFtc1tjb25maWcuc2VhcmNoS2V5XSA9IHNlYXJjaFZhbHVlO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBzZWxmLmNhY2hlID0gc2VsZi5jYWNoZSB8fCB7fTtcbiAgICB2YXIgdXJsID0gY29uZmlnLmVuZHBvaW50ICsgdGhpcy5idWlsZFBhcmFtcyhwYXJhbXMpO1xuICAgIHZhciB1cmxDYWNoZWREYXRhID0gc2VsZi5jYWNoZVt1cmxdO1xuICAgIGlmICh1cmxDYWNoZWREYXRhKSB7XG4gICAgICBzZWxmLl9sb2FkRGF0YSh1cmxDYWNoZWREYXRhLCBjb25maWcsIHNlbGYpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2FkVXJsRGF0YSh1cmwpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICBzZWxmLl9sb2FkRGF0YShkYXRhLCBjb25maWcsIHNlbGYpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgX2xvYWRVcmxEYXRhOiBmdW5jdGlvbiBfbG9hZFVybERhdGEodXJsKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7XG4gICAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTtcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmKHhoci5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5ET05FKSB7XG4gICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgc2VsZi5jYWNoZVt1cmxdID0gZGF0YTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KFt4aHIucmVzcG9uc2VUZXh0LCB4aHIuc3RhdHVzXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbiAgfSxcblxuICBfbG9hZERhdGE6IGZ1bmN0aW9uIF9sb2FkRGF0YShkYXRhLCBjb25maWcsIHNlbGYpIHtcbiAgICBjb25zdCBsaXN0ID0gc2VsZi5ob29rLmxpc3Q7XG4gICAgaWYgKGNvbmZpZy5sb2FkaW5nVGVtcGxhdGUgJiYgbGlzdC5kYXRhID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGxpc3QuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGRhdGFMb2FkaW5nVGVtcGxhdGUgPSBsaXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtbG9hZGluZy10ZW1wbGF0ZV0nKTtcbiAgICAgIGlmIChkYXRhTG9hZGluZ1RlbXBsYXRlKSB7XG4gICAgICAgIGRhdGFMb2FkaW5nVGVtcGxhdGUub3V0ZXJIVE1MID0gc2VsZi5saXN0VGVtcGxhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghc2VsZi5kZXN0cm95ZWQpIHtcbiAgICAgIHZhciBob29rTGlzdENoaWxkcmVuID0gbGlzdC5saXN0LmNoaWxkcmVuO1xuICAgICAgdmFyIG9ubHlEeW5hbWljTGlzdCA9IGhvb2tMaXN0Q2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIGhvb2tMaXN0Q2hpbGRyZW5bMF0uaGFzQXR0cmlidXRlKCdkYXRhLWR5bmFtaWMnKTtcbiAgICAgIGlmIChvbmx5RHluYW1pY0xpc3QgJiYgZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbGlzdC5oaWRlKCk7XG4gICAgICB9XG4gICAgICBsaXN0LnNldERhdGEuY2FsbChsaXN0LCBkYXRhKTtcbiAgICB9XG4gICAgc2VsZi5ub3RMb2FkaW5nKCk7XG4gICAgbGlzdC5jdXJyZW50SW5kZXggPSAwO1xuICB9LFxuXG4gIGJ1aWxkUGFyYW1zOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICBpZiAoIXBhcmFtcykgcmV0dXJuICcnO1xuICAgIHZhciBwYXJhbXNBcnJheSA9IE9iamVjdC5rZXlzKHBhcmFtcykubWFwKGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0gKyAnPScgKyAocGFyYW1zW3BhcmFtXSB8fCAnJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuICc/JyArIHBhcmFtc0FycmF5LmpvaW4oJyYnKTtcbiAgfSxcblxuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cblxuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLmhvb2sudHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duLmRsJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VUcmlnZ2VyKTtcbiAgICB0aGlzLmhvb2sudHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlVHJpZ2dlcik7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3BsYWJBamF4RmlsdGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BsdWdpbnMvYWpheF9maWx0ZXIvYWpheF9maWx0ZXIuanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app/assets/javascripts/droplab/plugins/filter.js b/app/assets/javascripts/droplab/plugins/filter.js deleted file mode 100644 index 3d81fbd7d2f..00000000000 --- a/app/assets/javascripts/droplab/plugins/filter.js +++ /dev/null @@ -1,172 +0,0 @@ -/******/ (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; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // 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 = 7); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ 7: -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var droplabFilter = { - keydown: function keydown(e) { - var hiddenCount = 0; - var dataHiddenCount = 0; - - var list = e.detail.hook.list; - var data = list.data; - var value = e.detail.hook.trigger.value.toLowerCase(); - var config = e.detail.hook.config.droplabFilter; - var matches = []; - var filterFunction; - // will only work on dynamically set data - if (!data) { - return; - } - - if (config && config.filterFunction && typeof config.filterFunction === 'function') { - filterFunction = config.filterFunction; - } else { - filterFunction = function filterFunction(o) { - // cheap string search - o.droplab_hidden = o[config.template].toLowerCase().indexOf(value) === -1; - return o; - }; - } - - dataHiddenCount = data.filter(function (o) { - return !o.droplab_hidden; - }).length; - - matches = data.map(function (o) { - return filterFunction(o, value); - }); - - hiddenCount = matches.filter(function (o) { - return !o.droplab_hidden; - }).length; - - if (dataHiddenCount !== hiddenCount) { - list.render(matches); - list.currentIndex = 0; - } - }, - - debounceKeydown: function debounceKeydown(e) { - if ([13, // enter - 16, // shift - 17, // ctrl - 18, // alt - 20, // caps lock - 37, // left arrow - 38, // up arrow - 39, // right arrow - 40, // down arrow - 91, // left window - 92, // right window - 93].indexOf(e.detail.which || e.detail.keyCode) > -1) return; - - if (this.timeout) clearTimeout(this.timeout); - this.timeout = setTimeout(this.keydown.bind(this, e), 200); - }, - - init: function init(hook) { - var config = hook.config.droplabFilter; - - if (!config || !config.template) return; - - this.hook = hook; - - this.eventWrapper = {}; - this.eventWrapper.debounceKeydown = this.debounceKeydown.bind(this); - - this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceKeydown); - this.hook.trigger.addEventListener('mousedown.dl', this.eventWrapper.debounceKeydown); - }, - - destroy: function destroy() { - this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceKeydown); - this.hook.trigger.removeEventListener('mousedown.dl', this.eventWrapper.debounceKeydown); - - var dynamicList = this.hook.list.list.querySelector('[data-dynamic]'); - if (this.listTemplate && dynamicList) { - dynamicList.outerHTML = this.listTemplate; - } - } -}; - -exports.default = droplabFilter; - -/***/ }) - -/******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2E/MGFiZioqKioqKiIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9maWx0ZXIvZmlsdGVyLmpzP2Y0MWEiXSwibmFtZXMiOlsiZHJvcGxhYkZpbHRlciIsImtleWRvd24iLCJlIiwiaGlkZGVuQ291bnQiLCJkYXRhSGlkZGVuQ291bnQiLCJsaXN0IiwiZGV0YWlsIiwiaG9vayIsImRhdGEiLCJ2YWx1ZSIsInRyaWdnZXIiLCJ0b0xvd2VyQ2FzZSIsImNvbmZpZyIsIm1hdGNoZXMiLCJmaWx0ZXJGdW5jdGlvbiIsIm8iLCJkcm9wbGFiX2hpZGRlbiIsInRlbXBsYXRlIiwiaW5kZXhPZiIsImZpbHRlciIsImxlbmd0aCIsIm1hcCIsInJlbmRlciIsImN1cnJlbnRJbmRleCIsImRlYm91bmNlS2V5ZG93biIsIndoaWNoIiwia2V5Q29kZSIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiYmluZCIsImluaXQiLCJldmVudFdyYXBwZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkeW5hbWljTGlzdCIsInF1ZXJ5U2VsZWN0b3IiLCJsaXN0VGVtcGxhdGUiLCJvdXRlckhUTUwiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtB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RUEsU0FBS3lCLFlBQUwsR0FBb0IsRUFBcEI7QUFDQSxTQUFLQSxZQUFMLENBQWtCUixlQUFsQixHQUFvQyxLQUFLQSxlQUFMLENBQXFCTSxJQUFyQixDQUEwQixJQUExQixDQUFwQzs7QUFFQSxTQUFLdkIsSUFBTCxDQUFVRyxPQUFWLENBQWtCdUIsZ0JBQWxCLENBQW1DLFlBQW5DLEVBQWlELEtBQUtELFlBQUwsQ0FBa0JSLGVBQW5FO0FBQ0EsU0FBS2pCLElBQUwsQ0FBVUcsT0FBVixDQUFrQnVCLGdCQUFsQixDQUFtQyxjQUFuQyxFQUFtRCxLQUFLRCxZQUFMLENBQWtCUixlQUFyRTtBQUNELEdBNUVtQjs7QUE4RXBCVSxXQUFTLFNBQVNBLE9BQVQsR0FBbUI7QUFDMUIsU0FBSzNCLElBQUwsQ0FBVUcsT0FBVixDQUFrQnlCLG1CQUFsQixDQUFzQyxZQUF0QyxFQUFvRCxLQUFLSCxZQUFMLENBQWtCUixlQUF0RTtBQUNBLFNBQUtqQixJQUFMLENBQVVHLE9BQVYsQ0FBa0J5QixtQkFBbEIsQ0FBc0MsY0FBdEMsRUFBc0QsS0FBS0gsWUFBTCxDQUFrQlIsZUFBeEU7O0FBRUEsUUFBSVksY0FBYyxLQUFLN0IsSUFBTCxDQUFVRixJQUFWLENBQWVBLElBQWYsQ0FBb0JnQyxhQUFwQixDQUFrQyxnQkFBbEMsQ0FBbEI7QUFDQSxRQUFJLEtBQUtDLFlBQUwsSUFBcUJGLFdBQXpCLEVBQXNDO0FBQ3BDQSxrQkFBWUcsU0FBWixHQUF3QixLQUFLRCxZQUE3QjtBQUNEO0FBQ0Y7QUF0Rm1CLENBQXRCOztrQkF5RmV0QyxhIiwiZmlsZSI6Ii4vZGlzdC9wbHVnaW5zL2ZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDkzM2ZmN2Q1ZWQzOTNkYzYzYmNhIiwiY29uc3QgZHJvcGxhYkZpbHRlciA9IHtcbiAga2V5ZG93bjogZnVuY3Rpb24oZSl7XG4gICAgdmFyIGhpZGRlbkNvdW50ID0gMDtcbiAgICB2YXIgZGF0YUhpZGRlbkNvdW50ID0gMDtcblxuICAgIHZhciBsaXN0ID0gZS5kZXRhaWwuaG9vay5saXN0O1xuICAgIHZhciBkYXRhID0gbGlzdC5kYXRhO1xuICAgIHZhciB2YWx1ZSA9IGUuZGV0YWlsLmhvb2sudHJpZ2dlci52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBjb25maWcgPSBlLmRldGFpbC5ob29rLmNvbmZpZy5kcm9wbGFiRmlsdGVyO1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgdmFyIGZpbHRlckZ1bmN0aW9uO1xuICAgIC8vIHdpbGwgb25seSB3b3JrIG9uIGR5bmFtaWNhbGx5IHNldCBkYXRhXG4gICAgaWYoIWRhdGEpe1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb25maWcgJiYgY29uZmlnLmZpbHRlckZ1bmN0aW9uICYmIHR5cGVvZiBjb25maWcuZmlsdGVyRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZpbHRlckZ1bmN0aW9uID0gY29uZmlnLmZpbHRlckZ1bmN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWx0ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uKG8pe1xuICAgICAgICAvLyBjaGVhcCBzdHJpbmcgc2VhcmNoXG4gICAgICAgIG8uZHJvcGxhYl9oaWRkZW4gPSBvW2NvbmZpZy50ZW1wbGF0ZV0udG9Mb3dlckNhc2UoKS5pbmRleE9mKHZhbHVlKSA9PT0gLTE7XG4gICAgICAgIHJldHVybiBvO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBkYXRhSGlkZGVuQ291bnQgPSBkYXRhLmZpbHRlcihmdW5jdGlvbihvKSB7XG4gICAgICByZXR1cm4gIW8uZHJvcGxhYl9oaWRkZW47XG4gICAgfSkubGVuZ3RoO1xuXG4gICAgbWF0Y2hlcyA9IGRhdGEubWFwKGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJldHVybiBmaWx0ZXJGdW5jdGlvbihvLCB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBoaWRkZW5Db3VudCA9IG1hdGNoZXMuZmlsdGVyKGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJldHVybiAhby5kcm9wbGFiX2hpZGRlbjtcbiAgICB9KS5sZW5ndGg7XG5cbiAgICBpZiAoZGF0YUhpZGRlbkNvdW50ICE9PSBoaWRkZW5Db3VudCkge1xuICAgICAgbGlzdC5yZW5kZXIobWF0Y2hlcyk7XG4gICAgICBsaXN0LmN1cnJlbnRJbmRleCA9IDA7XG4gICAgfVxuICB9LFxuXG4gIGRlYm91bmNlS2V5ZG93bjogZnVuY3Rpb24gZGVib3VuY2VLZXlkb3duKGUpIHtcbiAgICBpZiAoW1xuICAgICAgMTMsIC8vIGVudGVyXG4gICAgICAxNiwgLy8gc2hpZnRcbiAgICAgIDE3LCAvLyBjdHJsXG4gICAgICAxOCwgLy8gYWx0XG4gICAgICAyMCwgLy8gY2FwcyBsb2NrXG4gICAgICAzNywgLy8gbGVmdCBhcnJvd1xuICAgICAgMzgsIC8vIHVwIGFycm93XG4gICAgICAzOSwgLy8gcmlnaHQgYXJyb3dcbiAgICAgIDQwLCAvLyBkb3duIGFycm93XG4gICAgICA5MSwgLy8gbGVmdCB3aW5kb3dcbiAgICAgIDkyLCAvLyByaWdodCB3aW5kb3dcbiAgICAgIDkzLCAvLyBzZWxlY3RcbiAgICBdLmluZGV4T2YoZS5kZXRhaWwud2hpY2ggfHwgZS5kZXRhaWwua2V5Q29kZSkgPiAtMSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMudGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLmtleWRvd24uYmluZCh0aGlzLCBlKSwgMjAwKTtcbiAgfSxcblxuICBpbml0OiBmdW5jdGlvbiBpbml0KGhvb2spIHtcbiAgICB2YXIgY29uZmlnID0gaG9vay5jb25maWcuZHJvcGxhYkZpbHRlcjtcblxuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcudGVtcGxhdGUpIHJldHVybjtcblxuICAgIHRoaXMuaG9vayA9IGhvb2s7XG5cbiAgICB0aGlzLmV2ZW50V3JhcHBlciA9IHt9O1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlS2V5ZG93biA9IHRoaXMuZGVib3VuY2VLZXlkb3duLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmhvb2sudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duLmRsJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VLZXlkb3duKTtcbiAgICB0aGlzLmhvb2sudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24uZGwnLCB0aGlzLmV2ZW50V3JhcHBlci5kZWJvdW5jZUtleWRvd24pO1xuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ob29rLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bi5kbCcsIHRoaXMuZXZlbnRXcmFwcGVyLmRlYm91bmNlS2V5ZG93bik7XG4gICAgdGhpcy5ob29rLnRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duLmRsJywgdGhpcy5ldmVudFdyYXBwZXIuZGVib3VuY2VLZXlkb3duKTtcblxuICAgIHZhciBkeW5hbWljTGlzdCA9IHRoaXMuaG9vay5saXN0Lmxpc3QucXVlcnlTZWxlY3RvcignW2RhdGEtZHluYW1pY10nKTtcbiAgICBpZiAodGhpcy5saXN0VGVtcGxhdGUgJiYgZHluYW1pY0xpc3QpIHtcbiAgICAgIGR5bmFtaWNMaXN0Lm91dGVySFRNTCA9IHRoaXMubGlzdFRlbXBsYXRlO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZHJvcGxhYkZpbHRlcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wbHVnaW5zL2ZpbHRlci9maWx0ZXIuanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app/assets/javascripts/droplab/plugins/input_setter.js b/app/assets/javascripts/droplab/plugins/input_setter.js deleted file mode 100644 index 2ee9a796634..00000000000 --- a/app/assets/javascripts/droplab/plugins/input_setter.js +++ /dev/null @@ -1,127 +0,0 @@ -/******/ (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; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // 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 = 8); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ 8: -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var droplabInputSetter = { - init: function init(hook) { - this.hook = hook; - this.config = hook.config.droplabInputSetter || (this.hook.config.droplabInputSetter = {}); - - this.eventWrapper = {}; - - this.addEvents(); - }, - addEvents: function addEvents() { - this.eventWrapper.setInputs = this.setInputs.bind(this); - this.hook.list.list.addEventListener('click.dl', this.eventWrapper.setInputs); - }, - removeEvents: function removeEvents() { - this.hook.list.list.removeEventListener('click.dl', this.eventWrapper.setInputs); - }, - setInputs: function setInputs(e) { - var _this = this; - - var selectedItem = e.detail.selected; - - if (!Array.isArray(this.config)) this.config = [this.config]; - - this.config.forEach(function (config) { - return _this.setInput(config, selectedItem); - }); - }, - setInput: function setInput(config, selectedItem) { - var input = config.input || this.hook.trigger; - var newValue = selectedItem.getAttribute(config.valueAttribute); - - if (input.tagName === 'INPUT') { - input.value = newValue; - } else { - input.textContent = newValue; - } - }, - destroy: function destroy() { - this.removeEvents(); - } -}; - -exports.default = droplabInputSetter; - -/***/ }) - -/******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2E/MGFiZioqKioqIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2lucHV0X3NldHRlci9pbnB1dF9zZXR0ZXIuanM/NTY5NyJdLCJuYW1lcyI6WyJkcm9wbGFiSW5wdXRTZXR0ZXIiLCJpbml0IiwiaG9vayIsImNvbmZpZyIsImV2ZW50V3JhcHBlciIsImFkZEV2ZW50cyIsInNldElucHV0cyIsImJpbmQiLCJsaXN0IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50cyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJlIiwic2VsZWN0ZWRJdGVtIiwiZGV0YWlsIiwic2VsZWN0ZWQiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic2V0SW5wdXQiLCJpbnB1dCIsInRyaWdnZXIiLCJuZXdWYWx1ZSIsImdldEF0dHJpYnV0ZSIsInZhbHVlQXR0cmlidXRlIiwidGFnTmFtZSIsInZhbHVlIiwidGV4dENvbnRlbnQiLCJkZXN0cm95Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQTJDLGNBQWM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUNoRUEsSUFBTUEscUJBQXFCO0FBQ3pCQyxNQUR5QixnQkFDcEJDLElBRG9CLEVBQ2Q7QUFDVCxTQUFLQSxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLQyxNQUFMLEdBQWNELEtBQUtDLE1BQUwsQ0FBWUgsa0JBQVosS0FBbUMsS0FBS0UsSUFBTCxDQUFVQyxNQUFWLENBQWlCSCxrQkFBakIsR0FBc0MsRUFBekUsQ0FBZDs7QUFFQSxTQUFLSSxZQUFMLEdBQW9CLEVBQXBCOztBQUVBLFNBQUtDLFNBQUw7QUFDRCxHQVJ3QjtBQVV6QkEsV0FWeUIsdUJBVWI7QUFDVixTQUFLRCxZQUFMLENBQWtCRSxTQUFsQixHQUE4QixLQUFLQSxTQUFMLENBQWVDLElBQWYsQ0FBb0IsSUFBcEIsQ0FBOUI7QUFDQSxTQUFLTCxJQUFMLENBQVVNLElBQVYsQ0FBZUEsSUFBZixDQUFvQkMsZ0JBQXBCLENBQXFDLFVBQXJDLEVBQWlELEtBQUtMLFlBQUwsQ0FBa0JFLFNBQW5FO0FBQ0QsR0Fid0I7QUFlekJJLGNBZnlCLDBCQWVWO0FBQ2IsU0FBS1IsSUFBTCxDQUFVTSxJQUFWLENBQWVBLElBQWYsQ0FBb0JHLG1CQUFwQixDQUF3QyxVQUF4QyxFQUFvRCxLQUFLUCxZQUFMLENBQWtCRSxTQUF0RTtBQUNELEdBakJ3QjtBQW1CekJBLFdBbkJ5QixxQkFtQmZNLENBbkJlLEVBbUJaO0FBQUE7O0FBQ1gsUUFBTUMsZUFBZUQsRUFBRUUsTUFBRixDQUFTQyxRQUE5Qjs7QUFFQSxRQUFJLENBQUNDLE1BQU1DLE9BQU4sQ0FBYyxLQUFLZCxNQUFuQixDQUFMLEVBQWlDLEtBQUtBLE1BQUwsR0FBYyxDQUFDLEtBQUtBLE1BQU4sQ0FBZDs7QUFFakMsU0FBS0EsTUFBTCxDQUFZZSxPQUFaLENBQW9CO0FBQUEsYUFBVSxNQUFLQyxRQUFMLENBQWNoQixNQUFkLEVBQXNCVSxZQUF0QixDQUFWO0FBQUEsS0FBcEI7QUFDRCxHQXpCd0I7QUEyQnpCTSxVQTNCeUIsb0JBMkJoQmhCLE1BM0JnQixFQTJCUlUsWUEzQlEsRUEyQk07QUFDN0IsUUFBTU8sUUFBUWpCLE9BQU9pQixLQUFQLElBQWdCLEtBQUtsQixJQUFMLENBQVVtQixPQUF4QztBQUNBLFFBQU1DLFdBQVdULGFBQWFVLFlBQWIsQ0FBMEJwQixPQUFPcUIsY0FBakMsQ0FBakI7O0FBRUEsUUFBSUosTUFBTUssT0FBTixLQUFrQixPQUF0QixFQUErQjtBQUM3QkwsWUFBTU0sS0FBTixHQUFjSixRQUFkO0FBQ0QsS0FGRCxNQUVPO0FBQ0xGLFlBQU1PLFdBQU4sR0FBb0JMLFFBQXBCO0FBQ0Q7QUFDRixHQXBDd0I7QUFzQ3pCTSxTQXRDeUIscUJBc0NmO0FBQ1IsU0FBS2xCLFlBQUw7QUFDRDtBQXhDd0IsQ0FBM0I7O2tCQTJDZVYsa0IiLCJmaWxlIjoiLi9kaXN0L3BsdWdpbnMvaW5wdXRfc2V0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gOCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgOTMzZmY3ZDVlZDM5M2RjNjNiY2EiLCJjb25zdCBkcm9wbGFiSW5wdXRTZXR0ZXIgPSB7XG4gIGluaXQoaG9vaykge1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgdGhpcy5jb25maWcgPSBob29rLmNvbmZpZy5kcm9wbGFiSW5wdXRTZXR0ZXIgfHwgKHRoaXMuaG9vay5jb25maWcuZHJvcGxhYklucHV0U2V0dGVyID0ge30pO1xuXG4gICAgdGhpcy5ldmVudFdyYXBwZXIgPSB7fTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG4gIH0sXG5cbiAgYWRkRXZlbnRzKCkge1xuICAgIHRoaXMuZXZlbnRXcmFwcGVyLnNldElucHV0cyA9IHRoaXMuc2V0SW5wdXRzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ob29rLmxpc3QubGlzdC5hZGRFdmVudExpc3RlbmVyKCdjbGljay5kbCcsIHRoaXMuZXZlbnRXcmFwcGVyLnNldElucHV0cyk7XG4gIH0sXG5cbiAgcmVtb3ZlRXZlbnRzKCkge1xuICAgIHRoaXMuaG9vay5saXN0Lmxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2suZGwnLCB0aGlzLmV2ZW50V3JhcHBlci5zZXRJbnB1dHMpO1xuICB9LFxuXG4gIHNldElucHV0cyhlKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gZS5kZXRhaWwuc2VsZWN0ZWQ7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5jb25maWcpKSB0aGlzLmNvbmZpZyA9IFt0aGlzLmNvbmZpZ107XG5cbiAgICB0aGlzLmNvbmZpZy5mb3JFYWNoKGNvbmZpZyA9PiB0aGlzLnNldElucHV0KGNvbmZpZywgc2VsZWN0ZWRJdGVtKSk7XG4gIH0sXG5cbiAgc2V0SW5wdXQoY29uZmlnLCBzZWxlY3RlZEl0ZW0pIHtcbiAgICBjb25zdCBpbnB1dCA9IGNvbmZpZy5pbnB1dCB8fCB0aGlzLmhvb2sudHJpZ2dlcjtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHNlbGVjdGVkSXRlbS5nZXRBdHRyaWJ1dGUoY29uZmlnLnZhbHVlQXR0cmlidXRlKTtcblxuICAgIGlmIChpbnB1dC50YWdOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC50ZXh0Q29udGVudCA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfSxcblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBkcm9wbGFiSW5wdXRTZXR0ZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcGx1Z2lucy9pbnB1dF9zZXR0ZXIvaW5wdXRfc2V0dGVyLmpzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/app/assets/javascripts/filtered_search/dropdown_hint.js b/app/assets/javascripts/filtered_search/dropdown_hint.js index d3401dd0838..527037c08eb 100644 --- a/app/assets/javascripts/filtered_search/dropdown_hint.js +++ b/app/assets/javascripts/filtered_search/dropdown_hint.js @@ -1,4 +1,4 @@ -import droplabFilter from '../droplab/plugins/filter'; +import Filter from '@gitlab-org/droplab/dist/plugins/Filter'; require('./filtered_search_dropdown'); @@ -7,7 +7,7 @@ require('./filtered_search_dropdown'); constructor(droplab, dropdown, input, filter) { super(droplab, dropdown, input, filter); this.config = { - droplabFilter: { + Filter: { template: 'hint', filterFunction: gl.DropdownUtils.filterHint.bind(null, input), }, @@ -68,12 +68,12 @@ require('./filtered_search_dropdown'); } }); - this.droplab.changeHookList(this.hookId, this.dropdown, [droplabFilter], this.config); + this.droplab.changeHookList(this.hookId, this.dropdown, [Filter], this.config); this.droplab.setData(this.hookId, dropdownData); } init() { - this.droplab.addHook(this.input, this.dropdown, [droplabFilter], this.config).init(); + this.droplab.addHook(this.input, this.dropdown, [Filter], this.config).init(); } } diff --git a/app/assets/javascripts/filtered_search/dropdown_non_user.js b/app/assets/javascripts/filtered_search/dropdown_non_user.js index c30e673f8ba..48c2135aca3 100644 --- a/app/assets/javascripts/filtered_search/dropdown_non_user.js +++ b/app/assets/javascripts/filtered_search/dropdown_non_user.js @@ -1,5 +1,5 @@ -import droplabAjax from '../droplab/plugins/ajax'; -import droplabFilter from '../droplab/plugins/filter'; +import Ajax from '@gitlab-org/droplab/dist/plugins/Ajax'; +import Filter from '@gitlab-org/droplab/dist/plugins/Filter'; require('./filtered_search_dropdown'); @@ -9,12 +9,12 @@ require('./filtered_search_dropdown'); super(droplab, dropdown, input, filter); this.symbol = symbol; this.config = { - droplabAjax: { + Ajax: { endpoint, method: 'setData', loadingTemplate: this.loadingTemplate, }, - droplabFilter: { + Filter: { filterFunction: gl.DropdownUtils.filterWithSymbol.bind(null, this.symbol, input), template: 'title', }, @@ -30,13 +30,13 @@ require('./filtered_search_dropdown'); renderContent(forceShowList = false) { this.droplab - .changeHookList(this.hookId, this.dropdown, [droplabAjax, droplabFilter], this.config); + .changeHookList(this.hookId, this.dropdown, [Ajax, Filter], this.config); super.renderContent(forceShowList); } init() { this.droplab - .addHook(this.input, this.dropdown, [droplabAjax, droplabFilter], this.config).init(); + .addHook(this.input, this.dropdown, [Ajax, Filter], this.config).init(); } } diff --git a/app/assets/javascripts/filtered_search/dropdown_user.js b/app/assets/javascripts/filtered_search/dropdown_user.js index fe95ccb41f8..1661a4c5da2 100644 --- a/app/assets/javascripts/filtered_search/dropdown_user.js +++ b/app/assets/javascripts/filtered_search/dropdown_user.js @@ -1,4 +1,4 @@ -import droplabAjaxFilter from '../droplab/plugins/ajax_filter'; +import AjaxFilter from '@gitlab-org/droplab/dist/plugins/AjaxFilter'; require('./filtered_search_dropdown'); @@ -7,7 +7,7 @@ require('./filtered_search_dropdown'); constructor(droplab, dropdown, input, filter) { super(droplab, dropdown, input, filter); this.config = { - droplabAjaxFilter: { + AjaxFilter: { endpoint: `${gon.relative_url_root || ''}/autocomplete/users.json`, searchKey: 'search', params: { @@ -28,7 +28,7 @@ require('./filtered_search_dropdown'); } renderContent(forceShowList = false) { - this.droplab.changeHookList(this.hookId, this.dropdown, [droplabAjaxFilter], this.config); + this.droplab.changeHookList(this.hookId, this.dropdown, [AjaxFilter], this.config); super.renderContent(forceShowList); } @@ -56,7 +56,7 @@ require('./filtered_search_dropdown'); } init() { - this.droplab.addHook(this.input, this.dropdown, [droplabAjaxFilter], this.config).init(); + this.droplab.addHook(this.input, this.dropdown, [AjaxFilter], this.config).init(); } } diff --git a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js index 29aa4c1bb44..f5d6a85a4da 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js +++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js @@ -1,4 +1,4 @@ -import DropLab from '../droplab/droplab'; +import DropLab from '@gitlab-org/droplab'; import FilteredSearchContainer from './container'; (() => { diff --git a/yarn.lock b/yarn.lock index f254668646c..b6f818dabca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,8 +14,8 @@ accepts@1.3.3, accepts@~1.3.3: negotiator "0.6.1" acorn-dynamic-import@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.1.tgz#23f671eb6e650dab277fef477c321b1178a8cca2" + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" dependencies: acorn "^4.0.3" @@ -25,7 +25,7 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn@4.0.4, acorn@^4.0.4: +acorn@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" @@ -33,7 +33,7 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.11, acorn@^4.0.3: +acorn@^4.0.11, acorn@^4.0.3, acorn@^4.0.4: version "4.0.11" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" @@ -45,9 +45,9 @@ ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" -ajv@^4.7.0: - version "4.11.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.2.tgz#f166c3c11cbc6cb9dcc102a5bcfe5b72c95287e6" +ajv@^4.7.0, ajv@^4.9.1: + version "4.11.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -94,8 +94,8 @@ append-transform@^0.4.0: default-require-extensions "^1.0.0" aproba@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.0.tgz#4d8f047a318604e18e3c06a0e52230d3d19f147b" + version "1.1.1" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" are-we-there-yet@~1.1.2: version "1.1.2" @@ -166,14 +166,14 @@ asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" -assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - assert@^1.1.1: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" @@ -184,7 +184,7 @@ async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async@0.2.x, async@~0.2.6: +async@0.2.x: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" @@ -193,8 +193,8 @@ async@1.x, async@^1.4.0, async@^1.4.2, async@^1.5.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@^2.1.2, async@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" + version "2.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.2.0.tgz#c324eba010a237e4fbd55a12dee86367d5c0ef32" dependencies: lodash "^4.14.0" @@ -222,15 +222,15 @@ babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.22.1, babel-core@^6.23.0: - version "6.23.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.23.1.tgz#c143cb621bb2f621710c220c5d579d15b8a442df" +babel-core@^6.22.1, babel-core@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.0.tgz#8f36a0a77f5c155aed6f920b844d23ba56742a02" dependencies: babel-code-frame "^6.22.0" - babel-generator "^6.23.0" + babel-generator "^6.24.0" babel-helpers "^6.23.0" babel-messages "^6.23.0" - babel-register "^6.23.0" + babel-register "^6.24.0" babel-runtime "^6.22.0" babel-template "^6.23.0" babel-traverse "^6.23.1" @@ -246,9 +246,9 @@ babel-core@^6.22.1, babel-core@^6.23.0: slash "^1.0.0" source-map "^0.5.0" -babel-generator@^6.18.0, babel-generator@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.23.0.tgz#6b8edab956ef3116f79d8c84c5a3c05f32a74bc5" +babel-generator@^6.18.0, babel-generator@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.0.tgz#eba270a8cc4ce6e09a61be43465d7c62c1f87c56" dependencies: babel-messages "^6.23.0" babel-runtime "^6.22.0" @@ -378,11 +378,11 @@ babel-helpers@^6.23.0: babel-template "^6.23.0" babel-loader@^6.2.10: - version "6.2.10" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.10.tgz#adefc2b242320cd5d15e65b31cea0e8b1b02d4b0" + version "6.4.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" dependencies: find-cache-dir "^0.1.1" - loader-utils "^0.2.11" + loader-utils "^0.2.16" mkdirp "^0.5.1" object-assign "^4.0.1" @@ -399,12 +399,12 @@ babel-plugin-check-es2015-constants@^6.22.0: babel-runtime "^6.22.0" babel-plugin-istanbul@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.0.0.tgz#36bde8fbef4837e5ff0366531a2beabd7b1ffa10" + version "4.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.1.tgz#c12de0fc6fe42adfb16be56f1ad11e4a9782eca9" dependencies: find-up "^2.1.0" - istanbul-lib-instrument "^1.4.2" - test-exclude "^4.0.0" + istanbul-lib-instrument "^1.6.2" + test-exclude "^4.0.3" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" @@ -745,11 +745,11 @@ babel-preset-stage-3@^6.22.0: babel-plugin-transform-exponentiation-operator "^6.22.0" babel-plugin-transform-object-rest-spread "^6.22.0" -babel-register@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.23.0.tgz#c9aa3d4cca94b51da34826c4a0f9e08145d74ff3" +babel-register@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.0.tgz#5e89f8463ba9970356d02eb07dabe3308b080cfd" dependencies: - babel-core "^6.23.0" + babel-core "^6.24.0" babel-runtime "^6.22.0" core-js "^2.4.0" home-or-tmp "^2.0.0" @@ -758,8 +758,8 @@ babel-register@^6.23.0: source-map-support "^0.4.2" babel-runtime@^6.18.0, babel-runtime@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" dependencies: core-js "^2.4.0" regenerator-runtime "^0.10.0" @@ -798,8 +798,8 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23 to-fast-properties "^1.0.1" babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" + version "6.16.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" backo2@1.0.2: version "1.0.2" @@ -856,25 +856,25 @@ block-stream@*: inherits "~2.0.0" bluebird@^3.3.0: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" -body-parser@^1.12.4: - version "1.16.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.16.0.tgz#924a5e472c6229fb9d69b85a20d5f2532dec788b" +body-parser@^1.16.1: + version "1.17.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.1.tgz#75b3bc98ddd6e7e0d8ffe750dfaca5c66993fa47" dependencies: bytes "2.4.0" content-type "~1.0.2" - debug "2.6.0" + debug "2.6.1" depd "~1.1.0" - http-errors "~1.5.1" + http-errors "~1.6.1" iconv-lite "0.4.15" on-finished "~2.3.0" - qs "6.2.1" + qs "6.4.0" raw-body "~2.2.0" type-is "~1.6.14" @@ -885,8 +885,8 @@ boom@2.x.x: hoek "2.x.x" bootstrap-sass@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.3.6.tgz#363b0d300e868d3e70134c1a742bb17288444fd1" + version "3.3.7" + resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.3.7.tgz#6596c7ab40f6637393323ab0bc80d064fc630498" brace-expansion@^1.0.0: version "1.1.6" @@ -910,8 +910,8 @@ braces@^1.8.2: repeat-element "^1.1.2" brorand@^1.0.1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.0.7.tgz#6677fa5e4901bdbf9c9ec2a748e28dca407a9bfc" + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.0.6" @@ -1022,6 +1022,10 @@ caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" @@ -1145,10 +1149,10 @@ component-inherit@0.0.3: resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" compressible@~2.0.8: - version "2.0.9" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.9.tgz#6daab4e2b599c2770dd9e21e7a891b1c5a755425" + version "2.0.10" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd" dependencies: - mime-db ">= 1.24.0 < 2" + mime-db ">= 1.27.0 < 2" compression-webpack-plugin@^0.3.2: version "0.3.2" @@ -1182,7 +1186,7 @@ concat-stream@1.5.0: readable-stream "~2.0.0" typedarray "~0.0.5" -concat-stream@^1.4.6: +concat-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -1194,12 +1198,12 @@ connect-history-api-fallback@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" -connect@^3.3.5: - version "3.5.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.5.0.tgz#b357525a0b4c1f50599cd983e1d9efeea9677198" +connect@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.0.tgz#f09a4f7dcd17324b663b725c815bdb1c4158a46e" dependencies: - debug "~2.2.0" - finalhandler "0.5.0" + debug "2.6.1" + finalhandler "1.0.0" parseurl "~1.3.1" utils-merge "1.0.0" @@ -1230,8 +1234,8 @@ content-type@~1.0.2: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" convert-source-map@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" + version "1.4.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3" cookie-signature@1.0.6: version "1.0.6" @@ -1293,19 +1297,23 @@ crypto-browserify@^3.11.0: public-encrypt "^4.0.0" randombytes "^2.0.0" +custom-event-polyfill@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/custom-event-polyfill/-/custom-event-polyfill-0.3.0.tgz#99807839be62edb446b645832e0d80ead6fa1888" + custom-event@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" d3@^3.5.11: - version "3.5.11" - resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.11.tgz#d130750eed0554db70e8432102f920a12407b69c" + version "3.5.17" + resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" -d@^0.1.1, d@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" dependencies: - es5-ext "~0.10.2" + es5-ext "^0.10.9" dashdash@^1.12.0: version "1.14.1" @@ -1333,9 +1341,15 @@ debug@2.3.3: dependencies: ms "0.7.2" -debug@2.6.0, debug@^2.1.1, debug@^2.2.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" +debug@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" + dependencies: + ms "0.7.2" + +debug@2.6.3, debug@^2.1.1, debug@^2.2.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" dependencies: ms "0.7.2" @@ -1383,7 +1397,7 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@~1.1.0: +depd@1.1.0, depd@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -1416,16 +1430,23 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -doctrine@1.5.0, doctrine@^1.2.2: +doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: esutils "^2.0.2" isarray "^1.0.0" +doctrine@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + document-register-element@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/document-register-element/-/document-register-element-1.3.0.tgz#fb3babb523c74662be47be19c6bc33e71990d940" + version "1.4.1" + resolved "https://registry.yarnpkg.com/document-register-element/-/document-register-element-1.4.1.tgz#22b41e96fb86cccab2fa30f7d2a8d62ac7be8c57" dom-serialize@^2.2.0: version "2.2.1" @@ -1440,9 +1461,14 @@ domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" +"droplab@file:../../../DropLab": + version "0.1.1" + dependencies: + custom-event-polyfill "^0.3.0" + dropzone@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dropzone/-/dropzone-4.2.0.tgz#fbe7acbb9918e0706489072ef663effeef8a79f3" + version "4.3.0" + resolved "https://registry.yarnpkg.com/dropzone/-/dropzone-4.3.0.tgz#48b0b8f2ad092872e4b535b672a7c3f1a1d67c91" duplexer@^0.1.1: version "0.1.1" @@ -1463,13 +1489,16 @@ ejs@^2.5.5: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" elliptic@^6.0.0: - version "6.3.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f" + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" dependencies: bn.js "^4.4.0" brorand "^1.0.1" hash.js "^1.0.0" + hmac-drbg "^1.0.0" inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" emoji-unicode-version@^0.2.1: version "0.2.1" @@ -1483,9 +1512,9 @@ encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" -engine.io-client@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.2.tgz#c38767547f2a7d184f5752f6f0ad501006703766" +engine.io-client@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.3.tgz#1798ed93451246453d4c6f635d7a201fe940d5ab" dependencies: component-emitter "1.2.1" component-inherit "0.0.3" @@ -1496,7 +1525,7 @@ engine.io-client@1.8.2: parsejson "0.0.3" parseqs "0.0.5" parseuri "0.0.5" - ws "1.1.1" + ws "1.1.2" xmlhttprequest-ssl "1.5.3" yeast "0.1.2" @@ -1511,16 +1540,16 @@ engine.io-parser@1.3.2: has-binary "0.1.7" wtf-8 "1.0.0" -engine.io@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.2.tgz#6b59be730b348c0125b0a4589de1c355abcf7a7e" +engine.io@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.3.tgz#8de7f97895d20d39b85f88eeee777b2bd42b13d4" dependencies: accepts "1.3.3" base64id "1.0.0" cookie "0.3.1" debug "2.3.3" engine.io-parser "1.3.2" - ws "1.1.1" + ws "1.1.2" enhanced-resolve@^3.0.0: version "3.1.0" @@ -1550,66 +1579,66 @@ errno@^0.1.3: prr "~0.0.0" error-ex@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" -es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: - version "0.10.12" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" +es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.15" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" dependencies: es6-iterator "2" es6-symbol "~3.1" -es6-iterator@2: - version "2.0.0" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" +es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" dependencies: - d "^0.1.1" - es5-ext "^0.10.7" - es6-symbol "3" + d "1" + es5-ext "^0.10.14" + es6-symbol "^3.1" es6-map@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897" + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" dependencies: - d "~0.1.1" - es5-ext "~0.10.11" - es6-iterator "2" - es6-set "~0.1.3" - es6-symbol "~3.1.0" - event-emitter "~0.3.4" + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" es6-promise@~4.0.3: version "4.0.5" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42" -es6-set@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8" +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" dependencies: - d "~0.1.1" - es5-ext "~0.10.11" - es6-iterator "2" - es6-symbol "3" - event-emitter "~0.3.4" + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" -es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" +es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" dependencies: - d "~0.1.1" - es5-ext "~0.10.11" + d "1" + es5-ext "~0.10.14" es6-weak-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81" + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" dependencies: - d "^0.1.1" - es5-ext "^0.10.8" - es6-iterator "2" - es6-symbol "3" + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" escape-html@~1.0.3: version "1.0.3" @@ -1702,16 +1731,17 @@ eslint-plugin-jasmine@^2.1.0: resolved "https://registry.yarnpkg.com/eslint-plugin-jasmine/-/eslint-plugin-jasmine-2.2.0.tgz#7135879383c39a667c721d302b9f20f0389543de" eslint@^3.10.1: - version "3.15.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.15.0.tgz#bdcc6a6c5ffe08160e7b93c066695362a91e30f2" + version "3.18.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.18.0.tgz#647e985c4ae71502d20ac62c109f66d5104c8a4b" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" - concat-stream "^1.4.6" + concat-stream "^1.5.2" debug "^2.1.1" - doctrine "^1.2.2" + doctrine "^2.0.0" escope "^3.6.0" espree "^3.4.0" + esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" @@ -1755,6 +1785,12 @@ esprima@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + esrecurse@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" @@ -1766,7 +1802,7 @@ estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -1778,20 +1814,20 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -etag@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" eve-raphael@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/eve-raphael/-/eve-raphael-0.5.0.tgz#17c754b792beef3fa6684d79cf5a47c63c4cda30" -event-emitter@~0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" dependencies: - d "~0.1.1" - es5-ext "~0.10.7" + d "1" + es5-ext "~0.10.14" eventemitter3@1.x.x: version "1.2.0" @@ -1801,7 +1837,7 @@ events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" -eventsource@~0.1.6: +eventsource@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" dependencies: @@ -1845,8 +1881,8 @@ expand-range@^1.8.1: fill-range "^2.1.0" express@^4.13.3, express@^4.14.1: - version "4.14.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.14.1.tgz#646c237f766f148c2120aff073817b9e4d7e0d33" + version "4.15.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" dependencies: accepts "~1.3.3" array-flatten "1.1.1" @@ -1854,23 +1890,25 @@ express@^4.13.3, express@^4.14.1: content-type "~1.0.2" cookie "0.3.1" cookie-signature "1.0.6" - debug "~2.2.0" + debug "2.6.1" depd "~1.1.0" encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.7.0" - finalhandler "0.5.1" - fresh "0.3.0" + etag "~1.8.0" + finalhandler "~1.0.0" + fresh "0.5.0" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" parseurl "~1.3.1" path-to-regexp "0.1.7" proxy-addr "~1.1.3" - qs "6.2.0" + qs "6.4.0" range-parser "~1.2.0" - send "0.14.2" - serve-static "~1.11.2" + send "0.15.1" + serve-static "1.12.1" + setprototypeof "1.0.3" + statuses "~1.3.1" type-is "~1.6.14" utils-merge "1.0.0" vary "~1.1.0" @@ -1946,8 +1984,8 @@ fileset@^2.0.2: minimatch "^3.0.3" filesize@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.4.tgz#742fc7fb6aef4ee3878682600c22f840731e1fda" + version "3.5.6" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.6.tgz#5fd98f3eac94ec9516ef8ed5782fad84a01a0a1a" fill-range@^2.1.0: version "2.2.3" @@ -1959,23 +1997,27 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -finalhandler@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" +finalhandler@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.0.tgz#b5691c2c0912092f18ac23e9416bde5cd7dc6755" dependencies: - debug "~2.2.0" + debug "2.6.1" + encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" - statuses "~1.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" unpipe "~1.0.0" -finalhandler@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.1.tgz#2c400d8d4530935bc232549c5fa385ec07de6fcd" +finalhandler@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" dependencies: - debug "~2.2.0" + debug "2.6.3" + encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" + parseurl "~1.3.1" statuses "~1.3.1" unpipe "~1.0.0" @@ -2013,15 +2055,15 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" -for-in@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" for-own@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: - for-in "^0.1.5" + for-in "^1.0.1" forever-agent@~0.6.1: version "0.6.1" @@ -2039,9 +2081,9 @@ forwarded@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" -fresh@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" fs-extra@~1.0.0: version "1.0.0" @@ -2056,13 +2098,13 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.0.17" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558" + version "1.1.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" dependencies: nan "^2.3.0" node-pre-gyp "^0.6.29" -fstream-ignore@~1.0.5: +fstream-ignore@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" dependencies: @@ -2070,9 +2112,9 @@ fstream-ignore@~1.0.5: inherits "2" minimatch "^3.0.0" -fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" @@ -2084,8 +2126,8 @@ function-bind@^1.0.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" gauge@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" + version "2.7.3" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -2094,7 +2136,6 @@ gauge@~2.7.1: signal-exit "^3.0.0" string-width "^1.0.1" strip-ansi "^3.0.1" - supports-color "^0.2.0" wide-align "^1.1.0" generate-function@^2.0.0: @@ -2152,8 +2193,8 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: path-is-absolute "^1.0.0" globals@^9.0.0, globals@^9.14.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" + version "9.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" globby@^5.0.0: version "5.0.0" @@ -2194,6 +2235,10 @@ handlebars@^4.0.1, handlebars@^4.0.3: optionalDependencies: uglify-js "^2.6" +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + har-validator@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" @@ -2203,6 +2248,13 @@ har-validator@~2.0.6: is-my-json-valid "^2.12.4" pinkie-promise "^2.0.0" +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -2233,7 +2285,7 @@ has@^1.0.1: dependencies: function-bind "^1.0.2" -hash.js@^1.0.0: +hash.js@^1.0.0, hash.js@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" dependencies: @@ -2255,6 +2307,14 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +hmac-drbg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.0.tgz#3db471f45aae4a994a0688322171f51b8b91bee5" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" @@ -2267,8 +2327,8 @@ home-or-tmp@^2.0.0: os-tmpdir "^1.0.1" hosted-git-info@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.2.0.tgz#7a0d097863d886c0fabbdcd37bf1758d8becf8a5" + version "2.4.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.1.tgz#4b0445e41c004a8bd1337773a4ff790ca40318c8" hpack.js@^2.1.6: version "2.1.6" @@ -2287,7 +2347,7 @@ http-deceiver@^1.2.4: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" -http-errors@~1.5.0, http-errors@~1.5.1: +http-errors@~1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" dependencies: @@ -2295,9 +2355,18 @@ http-errors@~1.5.0, http-errors@~1.5.1: setprototypeof "1.0.2" statuses ">= 1.3.1 < 2" -http-proxy-middleware@~0.17.1: - version "0.17.3" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.3.tgz#940382147149b856084f5534752d5b5a8168cd1d" +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-proxy-middleware@~0.17.4: + version "0.17.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" dependencies: http-proxy "^1.16.2" is-glob "^3.1.0" @@ -2332,8 +2401,8 @@ ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" ignore@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.2.tgz#1c51e1ef53bab6ddc15db4d9ac4ec139eceb3410" + version "3.2.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.6.tgz#26e8da0644be0bb4cb39516f6c79f0e0f4ffe48c" imurmurhash@^0.1.4: version "0.1.4" @@ -2394,9 +2463,9 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ipaddr.js@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4" +ipaddr.js@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" is-absolute@^0.2.3: version "0.2.6" @@ -2416,8 +2485,8 @@ is-binary-path@^1.0.0: binary-extensions "^1.0.0" is-buffer@^1.0.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" is-builtin-module@^1.0.0: version "1.0.0" @@ -2476,8 +2545,8 @@ is-glob@^3.1.0: is-extglob "^2.1.0" is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" + version "2.16.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" @@ -2568,9 +2637,9 @@ isbinaryfile@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" -isexe@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" isobject@^2.0.0: version "2.1.0" @@ -2583,14 +2652,14 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.1.tgz#d36e2f1560d1a43ce304c4ff7338182de61c8f73" + version "1.1.6" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.6.tgz#23aa5b5b9b1b3bdbb786f039160e91acbe495433" dependencies: async "^2.1.4" fileset "^2.0.2" istanbul-lib-coverage "^1.0.0" - istanbul-lib-hook "^1.0.0" - istanbul-lib-instrument "^1.3.0" + istanbul-lib-hook "^1.0.4" + istanbul-lib-instrument "^1.6.2" istanbul-lib-report "^1.0.0-alpha.3" istanbul-lib-source-maps "^1.1.0" istanbul-reports "^1.0.0" @@ -2602,15 +2671,15 @@ istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-c version "1.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.1.tgz#f263efb519c051c5f1f3343034fc40e7b43ff212" -istanbul-lib-hook@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0.tgz#fc5367ee27f59268e8f060b0c7aaf051d9c425c5" +istanbul-lib-hook@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.4.tgz#1919debbc195807880041971caf9c7e2be2144d6" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.3.0, istanbul-lib-instrument@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.4.2.tgz#0e2fdfac93c1dabf2e31578637dc78a19089f43e" +istanbul-lib-instrument@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.6.2.tgz#dac644f358f51efd6113536d7070959a0111f73b" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" @@ -2680,14 +2749,14 @@ jodid25519@^1.0.0: jsbn "~0.1.0" jquery-ujs@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/jquery-ujs/-/jquery-ujs-1.2.1.tgz#6ee75b1ef4e9ac95e7124f8d71f7d351f5548e92" + version "1.2.2" + resolved "https://registry.yarnpkg.com/jquery-ujs/-/jquery-ujs-1.2.2.tgz#6a8ef1020e6b6dda385b90a4bddc128c21c56397" dependencies: jquery ">=1.8.0" jquery@>=1.8.0, jquery@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.1.tgz#3c3e16854ad3d2ac44ac65021b17426d22ad803f" + version "2.2.4" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02" js-cookie@^2.1.3: version "2.1.3" @@ -2698,15 +2767,15 @@ js-tokens@^3.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" js-yaml@3.x, js-yaml@^3.5.1, js-yaml@^3.7.0: - version "3.8.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.1.tgz#782ba50200be7b9e5a8537001b7804db3ad02628" + version "3.8.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.2.tgz#02d3e2c0f6beab20248d412c352203827d786721" dependencies: argparse "^1.0.7" esprima "^3.1.1" jsbn@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jsesc@^1.3.0: version "1.3.0" @@ -2757,16 +2826,17 @@ jsonpointer@^4.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" jsprim@^1.2.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" dependencies: + assert-plus "1.0.0" extsprintf "1.0.2" json-schema "0.2.3" verror "1.3.6" karma-coverage-istanbul-reporter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-0.2.0.tgz#5766263338adeb0026f7e4ac7a89a5f056c5642c" + version "0.2.3" + resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-0.2.3.tgz#11f1be9cfa93755a77bac39ab16e315a7100b5c5" dependencies: istanbul-api "^1.1.1" @@ -2775,14 +2845,14 @@ karma-jasmine@^1.1.0: resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.0.tgz#22e4c06bf9a182e5294d1f705e3733811b810acf" karma-mocha-reporter@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.2.tgz#876de9a287244e54a608591732a98e66611f6abe" + version "2.2.3" + resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.3.tgz#04fdda45a1d9697a73871c7472223c581701ab20" dependencies: chalk "1.1.3" karma-phantomjs-launcher@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.2.tgz#19e1041498fd75563ed86730a22c1fe579fa8fb1" + version "1.0.4" + resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz#d23ca34801bda9863ad318e3bb4bd4062b13acd2" dependencies: lodash "^4.0.1" phantomjs-prebuilt "^2.1.7" @@ -2794,8 +2864,8 @@ karma-sourcemap-loader@^0.3.7: graceful-fs "^4.1.2" karma-webpack@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.2.tgz#bd38350af5645c9644090770939ebe7ce726f864" + version "2.0.3" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.3.tgz#39cebf5ca2580139b27f9ae69b78816b9c82fae6" dependencies: async "~0.9.0" loader-utils "^0.2.5" @@ -2804,15 +2874,15 @@ karma-webpack@^2.0.2: webpack-dev-middleware "^1.0.11" karma@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/karma/-/karma-1.4.1.tgz#41981a71d54237606b0a3ea8c58c90773f41650e" + version "1.5.0" + resolved "https://registry.yarnpkg.com/karma/-/karma-1.5.0.tgz#9c4c14f0400bef2c04c8e8e6bff59371025cc009" dependencies: bluebird "^3.3.0" - body-parser "^1.12.4" + body-parser "^1.16.1" chokidar "^1.4.1" colors "^1.1.0" combine-lists "^1.0.0" - connect "^3.3.5" + connect "^3.6.0" core-js "^2.2.0" di "^0.0.1" dom-serialize "^2.2.0" @@ -2828,12 +2898,12 @@ karma@^1.4.1: optimist "^0.6.1" qjobs "^1.1.4" range-parser "^1.2.0" - rimraf "^2.3.3" + rimraf "^2.6.0" safe-buffer "^5.0.1" - socket.io "1.7.2" + socket.io "1.7.3" source-map "^0.5.3" - tmp "0.0.28" - useragent "^2.1.10" + tmp "0.0.31" + useragent "^2.1.12" kew@~0.7.0: version "0.7.0" @@ -2882,9 +2952,9 @@ loader-runner@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" -loader-utils@^0.2.11, loader-utils@^0.2.16, loader-utils@^0.2.5: - version "0.2.16" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d" +loader-utils@^0.2.16, loader-utils@^0.2.5: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" dependencies: big.js "^3.1.3" emojis-list "^2.0.0" @@ -3038,15 +3108,15 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.24.0 < 2", mime-db@~1.26.0: - version "1.26.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" +"mime-db@>= 1.27.0 < 2", mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: - version "2.1.14" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" dependencies: - mime-db "~1.26.0" + mime-db "~1.27.0" mime@1.3.4, mime@^1.3.4: version "1.3.4" @@ -3056,6 +3126,10 @@ minimalistic-assert@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" @@ -3076,19 +3150,19 @@ mkdirp@0.5.0: dependencies: minimist "0.0.8" -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" moment@2.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82" + version "2.18.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" mousetrap@^1.4.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.4.6.tgz#eaca72e22e56d5b769b7555873b688c3332e390a" + version "1.6.0" + resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.0.tgz#0168fcabb11d07669e87490324c981208121ac4d" ms@0.7.1: version "0.7.1" @@ -3171,18 +3245,18 @@ node-libs-browser@^2.0.0: vm-browserify "0.0.4" node-pre-gyp@^0.6.29, node-pre-gyp@^0.6.4: - version "0.6.33" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz#640ac55198f6a925972e0c16c4ac26a034d5ecc9" - dependencies: - mkdirp "~0.5.1" - nopt "~3.0.6" - npmlog "^4.0.1" - rc "~1.1.6" - request "^2.79.0" - rimraf "~2.5.4" - semver "~5.3.0" - tar "~2.2.1" - tar-pack "~3.3.0" + version "0.6.34" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" + dependencies: + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "^2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" node-zopfli@^2.0.0: version "2.0.2" @@ -3193,15 +3267,22 @@ node-zopfli@^2.0.0: nan "^2.0.0" node-pre-gyp "^0.6.4" -nopt@3.x, nopt@~3.0.6: +nopt@3.x: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" dependencies: abbrev "1" +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + normalize-package-data@^2.3.2: - version "2.3.5" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" + version "2.3.6" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -3212,7 +3293,7 @@ normalize-path@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" -npmlog@^4.0.1: +npmlog@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" dependencies: @@ -3262,18 +3343,12 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@1.x, once@^1.3.0, once@^1.4.0: +once@1.x, once@^1.3.0, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" -once@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" @@ -3331,10 +3406,17 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" +osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + p-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" @@ -3350,8 +3432,8 @@ pako@~0.2.0: resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" parse-asn1@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23" + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -3444,6 +3526,10 @@ pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + phantomjs-prebuilt@^2.1.7: version "2.1.14" resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz#d53d311fcfb7d1d08ddb24014558f1188c516da0" @@ -3527,11 +3613,11 @@ progress@^1.1.8, progress@~1.1.8: resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" proxy-addr@~1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074" + version "1.1.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" dependencies: forwarded "~0.1.0" - ipaddr.js "1.2.0" + ipaddr.js "1.3.0" prr@~0.0.0: version "0.0.0" @@ -3559,17 +3645,13 @@ qjobs@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" -qs@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" - -qs@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" +qs@6.4.0, qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" qs@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" + version "6.3.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" querystring-es3@^0.2.0: version "0.2.1" @@ -3616,14 +3698,14 @@ raw-loader@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" -rc@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" +rc@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" dependencies: deep-extend "~0.4.0" ini "~1.3.0" minimist "^1.2.0" - strip-json-comments "~1.0.4" + strip-json-comments "~2.0.1" read-pkg-up@^1.0.1: version "1.0.1" @@ -3640,9 +3722,9 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.4, readable-stream@^2.2.2: + version "2.2.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" dependencies: buffer-shims "^1.0.0" core-util-is "~1.0.0" @@ -3672,18 +3754,6 @@ readable-stream@~2.0.0: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readable-stream@~2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -3712,8 +3782,8 @@ regenerate@^1.2.1: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" regenerator-runtime@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" + version "0.10.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" regenerator-transform@0.9.8: version "0.9.8" @@ -3772,7 +3842,34 @@ request-progress@~2.0.1: dependencies: throttleit "^1.0.0" -request@^2.79.0, request@~2.79.0: +request@^2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +request@~2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -3825,8 +3922,10 @@ resolve@1.1.x: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolve@^1.1.6, resolve@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" + version "1.3.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" + dependencies: + path-parse "^1.0.5" restore-cursor@^1.0.1: version "1.0.1" @@ -3841,9 +3940,9 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" +rimraf@2, rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.6.0, rimraf@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: glob "^7.0.5" @@ -3873,7 +3972,7 @@ select2@3.5.2-browserify: version "3.5.2-browserify" resolved "https://registry.yarnpkg.com/select2/-/select2-3.5.2-browserify.tgz#dc4dafda38d67a734e8a97a46f0d3529ae05391d" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -3881,18 +3980,18 @@ semver@~4.3.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" -send@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.14.2.tgz#39b0438b3f510be5dc6f667a11f71689368cdeef" +send@0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" dependencies: - debug "~2.2.0" + debug "2.6.1" depd "~1.1.0" destroy "~1.0.4" encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.7.0" - fresh "0.3.0" - http-errors "~1.5.1" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" mime "1.3.4" ms "0.7.2" on-finished "~2.3.0" @@ -3911,14 +4010,14 @@ serve-index@^1.7.2: mime-types "~2.1.11" parseurl "~1.3.1" -serve-static@~1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.2.tgz#2cf9889bd4435a320cc36895c9aa57bd662e6ac7" +serve-static@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" parseurl "~1.3.1" - send "0.14.2" + send "0.15.1" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -3936,6 +4035,10 @@ setprototypeof@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + sha.js@^2.3.6: version "2.4.8" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" @@ -3943,8 +4046,8 @@ sha.js@^2.3.6: inherits "^2.0.1" shelljs@^0.7.5: - version "0.7.6" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" + version "0.7.7" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -3975,15 +4078,15 @@ socket.io-adapter@0.5.0: debug "2.3.3" socket.io-parser "2.3.1" -socket.io-client@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.2.tgz#39fdb0c3dd450e321b7e40cfd83612ec533dd644" +socket.io-client@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.3.tgz#b30e86aa10d5ef3546601c09cde4765e381da377" dependencies: backo2 "1.0.2" component-bind "1.0.0" component-emitter "1.2.1" debug "2.3.3" - engine.io-client "1.8.2" + engine.io-client "1.8.3" has-binary "0.1.7" indexof "0.0.1" object-component "0.0.3" @@ -4000,24 +4103,24 @@ socket.io-parser@2.3.1: isarray "0.0.1" json3 "3.3.2" -socket.io@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.2.tgz#83bbbdf2e79263b378900da403e7843e05dc3b71" +socket.io@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.3.tgz#b8af9caba00949e568e369f1327ea9be9ea2461b" dependencies: debug "2.3.3" - engine.io "1.8.2" + engine.io "1.8.3" has-binary "0.1.7" object-assign "4.1.0" socket.io-adapter "0.5.0" - socket.io-client "1.7.2" + socket.io-client "1.7.3" socket.io-parser "2.3.1" -sockjs-client@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.1.tgz#284843e9a9784d7c474b1571b3240fca9dda4bb0" +sockjs-client@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.2.tgz#f0212a8550e4c9468c8cceaeefd2e3493c033ad5" dependencies: debug "^2.2.0" - eventsource "~0.1.6" + eventsource "0.1.6" faye-websocket "~0.11.0" inherits "^2.0.1" json3 "^3.3.2" @@ -4030,15 +4133,19 @@ sockjs@0.3.18: faye-websocket "^0.10.0" uuid "^2.0.2" +source-list-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.1.tgz#1a33ac210ca144d1e561f906ebccab5669ff4cb4" + source-list-map@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" source-map-support@^0.4.2: - version "0.4.11" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322" + version "0.4.14" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" dependencies: - source-map "^0.5.3" + source-map "^0.5.6" source-map@^0.1.41: version "0.1.43" @@ -4052,7 +4159,7 @@ source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1, source-map@~0.5.3: +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" @@ -4101,8 +4208,8 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa" + version "1.11.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -4119,7 +4226,7 @@ stats-webpack-plugin@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/stats-webpack-plugin/-/stats-webpack-plugin-0.4.3.tgz#b2f618202f28dd04ab47d7ecf54ab846137b7aea" -"statuses@>= 1.3.1 < 2", statuses@~1.3.0, statuses@~1.3.1: +"statuses@>= 1.3.1 < 2", statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" @@ -4179,18 +4286,10 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" -strip-json-comments@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -supports-color@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -4220,20 +4319,20 @@ tapable@^0.2.5, tapable@~0.2.5: version "0.2.6" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" -tar-pack@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" dependencies: - debug "~2.2.0" - fstream "~1.0.10" - fstream-ignore "~1.0.5" - once "~1.3.3" - readable-stream "~2.1.4" - rimraf "~2.5.1" - tar "~2.2.1" - uid-number "~0.0.6" - -tar@~2.2.1: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: @@ -4241,9 +4340,9 @@ tar@~2.2.1: fstream "^1.0.2" inherits "2" -test-exclude@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.0.0.tgz#0ddc0100b8ae7e88b34eb4fd98a907e961991900" +test-exclude@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.0.3.tgz#86a13ce3effcc60e6c90403cf31a27a60ac6c4e7" dependencies: arrify "^1.0.1" micromatch "^2.3.11" @@ -4279,9 +4378,9 @@ timers-browserify@^2.0.2: dependencies: setimmediate "^1.0.4" -tmp@0.0.28, tmp@0.0.x: - version "0.0.28" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" +tmp@0.0.31, tmp@0.0.x: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" dependencies: os-tmpdir "~1.0.1" @@ -4319,6 +4418,12 @@ tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" @@ -4344,20 +4449,20 @@ typedarray@^0.0.6, typedarray@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -uglify-js@^2.6, uglify-js@^2.7.5: - version "2.7.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" +uglify-js@^2.6, uglify-js@^2.8.5: + version "2.8.16" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.16.tgz#d286190b6eefc6fd65eb0ecac6551e0b0e8839a4" dependencies: - async "~0.2.6" source-map "~0.5.1" - uglify-to-browserify "~1.0.0" yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" -uid-number@~0.0.6: +uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -4385,8 +4490,8 @@ url-parse@1.0.x: requires-port "1.0.x" url-parse@^1.1.1: - version "1.1.7" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.7.tgz#025cff999653a459ab34232147d89514cc87d74a" + version "1.1.8" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.8.tgz#7a65b3a8d57a1e86af6b4e2276e34774167c0156" dependencies: querystringify "0.0.x" requires-port "1.0.x" @@ -4404,7 +4509,7 @@ user-home@^2.0.0: dependencies: os-homedir "^1.0.0" -useragent@^2.1.10: +useragent@^2.1.12: version "2.1.12" resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.12.tgz#aa7da6cdc48bdc37ba86790871a7321d64edbaa2" dependencies: @@ -4441,8 +4546,8 @@ validate-npm-package-license@^3.0.1: spdx-expression-parse "~1.0.0" vary@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" verror@1.3.6: version "1.3.6" @@ -4469,12 +4574,12 @@ vue-resource@^0.9.3: resolved "https://registry.yarnpkg.com/vue-resource/-/vue-resource-0.9.3.tgz#ab46e1c44ea219142dcc28ae4043b3b04c80959d" vue@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.2.4.tgz#d0a3a050a80a12356d7950ae5a7b3131048209cc" + version "2.2.5" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.2.5.tgz#528eba68447d7eff99f86767b31176aa656c6963" -watchpack@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.2.1.tgz#01efa80c5c29e5c56ba55d6f5470a35b6402f0b2" +watchpack@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" dependencies: async "^2.1.2" chokidar "^1.4.3" @@ -4487,8 +4592,8 @@ wbuf@^1.1.0, wbuf@^1.4.0: minimalistic-assert "^1.0.0" webpack-bundle-analyzer@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.3.0.tgz#0d05e96a43033f7cc57f6855b725782ba61e93a4" + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.3.1.tgz#d97f8aadbcce68fc865c5787741d8549359a25cd" dependencies: acorn "^4.0.11" chalk "^1.1.3" @@ -4502,8 +4607,8 @@ webpack-bundle-analyzer@^2.3.0: opener "^1.4.2" webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.0.tgz#7d5be2651e692fddfafd8aaed177c16ff51f0eb8" + version "1.10.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.1.tgz#c6b4cf428139cf1aefbe06a0c00fdb4f8da2f893" dependencies: memory-fs "~0.4.1" mime "^1.3.4" @@ -4511,8 +4616,8 @@ webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.9.0: range-parser "^1.0.3" webpack-dev-server@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.3.0.tgz#0437704bbd4d941a6e4c061eb3cc232ed7d06101" + version "2.4.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.4.2.tgz#cf595d6b40878452b6d2ad7229056b686f8a16be" dependencies: ansi-html "0.0.7" chokidar "^1.6.0" @@ -4520,28 +4625,35 @@ webpack-dev-server@^2.3.0: connect-history-api-fallback "^1.3.0" express "^4.13.3" html-entities "^1.2.0" - http-proxy-middleware "~0.17.1" + http-proxy-middleware "~0.17.4" opn "4.0.2" portfinder "^1.0.9" serve-index "^1.7.2" sockjs "0.3.18" - sockjs-client "1.1.1" + sockjs-client "1.1.2" spdy "^3.4.1" strip-ansi "^3.0.0" supports-color "^3.1.1" webpack-dev-middleware "^1.9.0" yargs "^6.0.0" -webpack-sources@^0.1.0, webpack-sources@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.4.tgz#ccc2c817e08e5fa393239412690bb481821393cd" +webpack-sources@^0.1.0: + version "0.1.5" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.5.tgz#aa1f3abf0f0d74db7111c40e500b84f966640750" dependencies: source-list-map "~0.1.7" source-map "~0.5.3" +webpack-sources@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" + dependencies: + source-list-map "^1.1.1" + source-map "~0.5.3" + webpack@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.1.tgz#7bb1d72ae2087dd1a4af526afec15eed17dda475" + version "2.3.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.2.tgz#7d521e6f0777a3a58985c69425263fdfe977b458" dependencies: acorn "^4.0.4" acorn-dynamic-import "^2.0.0" @@ -4559,9 +4671,9 @@ webpack@^2.2.1: source-map "^0.5.3" supports-color "^3.1.0" tapable "~0.2.5" - uglify-js "^2.7.5" - watchpack "^1.2.0" - webpack-sources "^0.1.4" + uglify-js "^2.8.5" + watchpack "^1.3.1" + webpack-sources "^0.2.3" yargs "^6.0.0" websocket-driver@>=0.5.1: @@ -4579,10 +4691,10 @@ which-module@^1.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" which@^1.1.1, which@~1.2.10: - version "1.2.12" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: - isexe "^1.1.1" + isexe "^2.0.0" wide-align@^1.1.0: version "1.1.0" @@ -4623,9 +4735,9 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" +ws@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" dependencies: options ">=0.0.5" ultron "1.0.x" -- cgit v1.2.1 From d197347d95ba69960978ea7103f2307ade64c05e Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Wed, 5 Apr 2017 14:17:12 +0100 Subject: Added droplab to yarn.lock and package.json --- package.json | 1 + yarn.lock | 167 ++++++++++++++++++++++++++++++----------------------------- 2 files changed, 87 insertions(+), 81 deletions(-) diff --git a/package.json b/package.json index 7b6c4556e2c..6bc533eaf1a 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "webpack-prod": "NODE_ENV=production webpack --config config/webpack.config.js" }, "dependencies": { + "@gitlab-org/droplab": "^0.1.0", "babel-core": "^6.22.1", "babel-loader": "^6.2.10", "babel-plugin-transform-define": "^1.2.0", diff --git a/yarn.lock b/yarn.lock index b6f818dabca..ac51434dbb6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,12 @@ # yarn lockfile v1 +"@gitlab-org/droplab@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@gitlab-org/droplab/-/droplab-0.1.0.tgz#934889d0f19417198e277415fdd336616b2e2c87" + dependencies: + custom-event-polyfill "^0.3.0" + abbrev@1, abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" @@ -25,10 +31,6 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" - acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" @@ -37,6 +39,10 @@ acorn@^4.0.11, acorn@^4.0.3, acorn@^4.0.4: version "4.0.11" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" +acorn@^5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" + after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" @@ -188,13 +194,13 @@ async@0.2.x: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" -async@1.x, async@^1.4.0, async@^1.4.2, async@^1.5.2: +async@1.x, async@^1.4.0, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@^2.1.2, async@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.2.0.tgz#c324eba010a237e4fbd55a12dee86367d5c0ef32" + version "2.3.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9" dependencies: lodash "^4.14.0" @@ -947,8 +953,8 @@ browserify-rsa@^4.0.0: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f" + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" dependencies: bn.js "^4.1.1" browserify-rsa "^4.0.0" @@ -1234,8 +1240,8 @@ content-type@~1.0.2: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" convert-source-map@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3" + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" cookie-signature@1.0.6: version "1.0.6" @@ -1461,11 +1467,6 @@ domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -"droplab@file:../../../DropLab": - version "0.1.1" - dependencies: - custom-event-polyfill "^0.3.0" - dropzone@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/dropzone/-/dropzone-4.3.0.tgz#48b0b8f2ad092872e4b535b672a7c3f1a1d67c91" @@ -1731,8 +1732,8 @@ eslint-plugin-jasmine@^2.1.0: resolved "https://registry.yarnpkg.com/eslint-plugin-jasmine/-/eslint-plugin-jasmine-2.2.0.tgz#7135879383c39a667c721d302b9f20f0389543de" eslint@^3.10.1: - version "3.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.18.0.tgz#647e985c4ae71502d20ac62c109f66d5104c8a4b" + version "3.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" @@ -1771,10 +1772,10 @@ eslint@^3.10.1: user-home "^2.0.0" espree@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.0.tgz#41656fa5628e042878025ef467e78f125cb86e1d" + version "3.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.1.tgz#28a83ab4aaed71ed8fe0f5efe61b76a05c13c4d2" dependencies: - acorn "4.0.4" + acorn "^5.0.1" acorn-jsx "^3.0.0" esprima@2.7.x, esprima@^2.7.1: @@ -2450,8 +2451,8 @@ inquirer@^0.12.0: through "^2.3.6" interpret@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" + version "1.0.2" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.2.tgz#f4f623f0bb7122f15f5717c8e254b8161b5c5b2d" invariant@^2.2.0: version "2.2.2" @@ -2652,66 +2653,64 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.6.tgz#23aa5b5b9b1b3bdbb786f039160e91acbe495433" + version "1.1.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.7.tgz#f6f37f09f8002b130f891c646b70ee4a8e7345ae" dependencies: async "^2.1.4" fileset "^2.0.2" - istanbul-lib-coverage "^1.0.0" - istanbul-lib-hook "^1.0.4" - istanbul-lib-instrument "^1.6.2" - istanbul-lib-report "^1.0.0-alpha.3" - istanbul-lib-source-maps "^1.1.0" - istanbul-reports "^1.0.0" + istanbul-lib-coverage "^1.0.2" + istanbul-lib-hook "^1.0.5" + istanbul-lib-instrument "^1.7.0" + istanbul-lib-report "^1.0.0" + istanbul-lib-source-maps "^1.1.1" + istanbul-reports "^1.0.2" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.1.tgz#f263efb519c051c5f1f3343034fc40e7b43ff212" +istanbul-lib-coverage@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.2.tgz#87a0c015b6910651cb3b184814dfb339337e25e1" -istanbul-lib-hook@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.4.tgz#1919debbc195807880041971caf9c7e2be2144d6" +istanbul-lib-hook@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.5.tgz#6ca3d16d60c5f4082da39f7c5cd38ea8a772b88e" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.6.2.tgz#dac644f358f51efd6113536d7070959a0111f73b" +istanbul-lib-instrument@^1.6.2, istanbul-lib-instrument@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.0.tgz#b8e0dc25709bb44e17336ab47b7bb5c97c23f659" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.13.0" - istanbul-lib-coverage "^1.0.0" + istanbul-lib-coverage "^1.0.2" semver "^5.3.0" -istanbul-lib-report@^1.0.0-alpha.3: - version "1.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz#32d5f6ec7f33ca3a602209e278b2e6ff143498af" +istanbul-lib-report@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0.tgz#d83dac7f26566b521585569367fe84ccfc7aaecb" dependencies: - async "^1.4.2" - istanbul-lib-coverage "^1.0.0-alpha" + istanbul-lib-coverage "^1.0.2" mkdirp "^0.5.1" path-parse "^1.0.5" - rimraf "^2.4.3" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.0.tgz#9d429218f35b823560ea300a96ff0c3bbdab785f" +istanbul-lib-source-maps@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.1.tgz#f8c8c2e8f2160d1d91526d97e5bd63b2079af71c" dependencies: - istanbul-lib-coverage "^1.0.0-alpha.0" + istanbul-lib-coverage "^1.0.2" mkdirp "^0.5.1" rimraf "^2.4.4" source-map "^0.5.3" -istanbul-reports@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.1.tgz#9a17176bc4a6cbebdae52b2f15961d52fa623fbc" +istanbul-reports@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.2.tgz#4e8366abe6fa746cc1cd6633f108de12cc6ac6fa" dependencies: handlebars "^4.0.3" @@ -2759,16 +2758,16 @@ jquery@>=1.8.0, jquery@^2.2.1: resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02" js-cookie@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.1.3.tgz#48071625217ac9ecfab8c343a13d42ec09ff0526" + version "2.1.4" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.1.4.tgz#da4ec503866f149d164cf25f579ef31015025d8d" js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" js-yaml@3.x, js-yaml@^3.5.1, js-yaml@^3.7.0: - version "3.8.2" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.2.tgz#02d3e2c0f6beab20248d412c352203827d786721" + version "3.8.3" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" dependencies: argparse "^1.0.7" esprima "^3.1.1" @@ -3112,7 +3111,7 @@ miller-rabin@^4.0.0: version "1.27.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: version "2.1.15" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" dependencies: @@ -3161,8 +3160,8 @@ moment@2.x: resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" mousetrap@^1.4.6: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.0.tgz#0168fcabb11d07669e87490324c981208121ac4d" + version "1.6.1" + resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.1.tgz#2a085f5c751294c75e7e81f6ec2545b29cbf42d9" ms@0.7.1: version "0.7.1" @@ -3290,8 +3289,10 @@ normalize-package-data@^2.3.2: validate-npm-package-license "^3.0.1" normalize-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" npmlog@^4.0.2: version "4.0.2" @@ -3699,8 +3700,8 @@ raw-loader@^0.5.1: resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" rc@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" + version "1.2.1" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" dependencies: deep-extend "~0.4.0" ini "~1.3.0" @@ -3722,7 +3723,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.4, readable-stream@^2.2.2: +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" dependencies: @@ -3818,6 +3819,10 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +remove-trailing-separator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" @@ -3940,7 +3945,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.6.0, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.6.0, rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: @@ -4238,12 +4243,12 @@ stream-browserify@^2.0.1: readable-stream "^2.0.2" stream-http@^2.3.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.3.tgz#4c3ddbf9635968ea2cfd4e48d43de5def2625ac3" + version "2.7.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" - readable-stream "^2.1.0" + readable-stream "^2.2.6" to-arraybuffer "^1.0.0" xtend "^4.0.0" @@ -4439,19 +4444,19 @@ type-check@~0.3.2: prelude-ls "~1.1.2" type-is@~1.6.14: - version "1.6.14" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" dependencies: media-typer "0.3.0" - mime-types "~2.1.13" + mime-types "~2.1.15" typedarray@^0.0.6, typedarray@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" uglify-js@^2.6, uglify-js@^2.8.5: - version "2.8.16" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.16.tgz#d286190b6eefc6fd65eb0ecac6551e0b0e8839a4" + version "2.8.21" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.21.tgz#1733f669ae6f82fc90c7b25ec0f5c783ee375314" dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -4510,8 +4515,8 @@ user-home@^2.0.0: os-homedir "^1.0.0" useragent@^2.1.12: - version "2.1.12" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.12.tgz#aa7da6cdc48bdc37ba86790871a7321d64edbaa2" + version "2.1.13" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.13.tgz#bba43e8aa24d5ceb83c2937473e102e21df74c10" dependencies: lru-cache "2.2.x" tmp "0.0.x" @@ -4574,8 +4579,8 @@ vue-resource@^0.9.3: resolved "https://registry.yarnpkg.com/vue-resource/-/vue-resource-0.9.3.tgz#ab46e1c44ea219142dcc28ae4043b3b04c80959d" vue@^2.2.4: - version "2.2.5" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.2.5.tgz#528eba68447d7eff99f86767b31176aa656c6963" + version "2.2.6" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.2.6.tgz#451714b394dd6d4eae7b773c40c2034a59621aed" watchpack@^1.3.1: version "1.3.1" @@ -4652,8 +4657,8 @@ webpack-sources@^0.2.3: source-map "~0.5.3" webpack@^2.2.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.2.tgz#7d521e6f0777a3a58985c69425263fdfe977b458" + version "2.3.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.3.tgz#eecc083c18fb7bf958ea4f40b57a6640c5a0cc78" dependencies: acorn "^4.0.4" acorn-dynamic-import "^2.0.0" -- cgit v1.2.1 From 7db45ca3b8390377096dd246c27de3063b70393d Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Thu, 6 Apr 2017 11:36:26 +0100 Subject: Added droplab back to static assets --- app/assets/javascripts/droplab/constants.js | 11 + app/assets/javascripts/droplab/drop_down.js | 137 +++++ app/assets/javascripts/droplab/drop_lab.js | 152 ++++++ app/assets/javascripts/droplab/hook.js | 22 + app/assets/javascripts/droplab/hook_button.js | 65 +++ app/assets/javascripts/droplab/hook_input.js | 119 +++++ app/assets/javascripts/droplab/keyboard.js | 113 ++++ app/assets/javascripts/droplab/plugins/ajax.js | 71 +++ .../javascripts/droplab/plugins/ajax_filter.js | 133 +++++ app/assets/javascripts/droplab/plugins/filter.js | 95 ++++ .../javascripts/droplab/plugins/input_setter.js | 51 ++ app/assets/javascripts/droplab/utils.js | 38 ++ .../javascripts/filtered_search/dropdown_hint.js | 2 +- .../filtered_search/dropdown_non_user.js | 4 +- .../javascripts/filtered_search/dropdown_user.js | 2 +- .../filtered_search_dropdown_manager.js | 2 +- package.json | 1 - spec/javascripts/droplab/constants.js | 29 ++ spec/javascripts/droplab/drop_down.js | 578 +++++++++++++++++++++ spec/javascripts/droplab/hook.js | 82 +++ spec/javascripts/droplab/plugins/input_setter.js | 177 +++++++ .../filtered_search/dropdown_user_spec.js | 8 +- yarn.lock | 32 +- 23 files changed, 1893 insertions(+), 31 deletions(-) create mode 100644 app/assets/javascripts/droplab/constants.js create mode 100644 app/assets/javascripts/droplab/drop_down.js create mode 100644 app/assets/javascripts/droplab/drop_lab.js create mode 100644 app/assets/javascripts/droplab/hook.js create mode 100644 app/assets/javascripts/droplab/hook_button.js create mode 100644 app/assets/javascripts/droplab/hook_input.js create mode 100644 app/assets/javascripts/droplab/keyboard.js create mode 100644 app/assets/javascripts/droplab/plugins/ajax.js create mode 100644 app/assets/javascripts/droplab/plugins/ajax_filter.js create mode 100644 app/assets/javascripts/droplab/plugins/filter.js create mode 100644 app/assets/javascripts/droplab/plugins/input_setter.js create mode 100644 app/assets/javascripts/droplab/utils.js create mode 100644 spec/javascripts/droplab/constants.js create mode 100644 spec/javascripts/droplab/drop_down.js create mode 100644 spec/javascripts/droplab/hook.js create mode 100644 spec/javascripts/droplab/plugins/input_setter.js diff --git a/app/assets/javascripts/droplab/constants.js b/app/assets/javascripts/droplab/constants.js new file mode 100644 index 00000000000..a23d914772a --- /dev/null +++ b/app/assets/javascripts/droplab/constants.js @@ -0,0 +1,11 @@ +const DATA_TRIGGER = 'data-dropdown-trigger'; +const DATA_DROPDOWN = 'data-dropdown'; +const SELECTED_CLASS = 'droplab-item-selected'; +const ACTIVE_CLASS = 'droplab-item-active'; + +export { + DATA_TRIGGER, + DATA_DROPDOWN, + SELECTED_CLASS, + ACTIVE_CLASS, +}; diff --git a/app/assets/javascripts/droplab/drop_down.js b/app/assets/javascripts/droplab/drop_down.js new file mode 100644 index 00000000000..f686ad33f6f --- /dev/null +++ b/app/assets/javascripts/droplab/drop_down.js @@ -0,0 +1,137 @@ +/* eslint-disable */ + +import utils from './utils'; +import { SELECTED_CLASS } from './constants'; + +var DropDown = function(list) { + this.currentIndex = 0; + this.hidden = true; + this.list = typeof list === 'string' ? document.querySelector(list) : list; + this.items = []; + + this.eventWrapper = {}; + + this.getItems(); + this.initTemplateString(); + this.addEvents(); + + this.initialState = list.innerHTML; +}; + +Object.assign(DropDown.prototype, { + getItems: function() { + this.items = [].slice.call(this.list.querySelectorAll('li')); + return this.items; + }, + + initTemplateString: function() { + var items = this.items || this.getItems(); + + var templateString = ''; + if (items.length > 0) templateString = items[items.length - 1].outerHTML; + this.templateString = templateString; + + return this.templateString; + }, + + clickEvent: function(e) { + var selected = utils.closest(e.target, 'LI'); + if (!selected) return; + + this.addSelectedClass(selected); + + e.preventDefault(); + this.hide(); + + var listEvent = new CustomEvent('click.dl', { + detail: { + list: this, + selected: selected, + data: e.target.dataset, + }, + }); + this.list.dispatchEvent(listEvent); + }, + + addSelectedClass: function (selected) { + this.removeSelectedClasses(); + selected.classList.add(SELECTED_CLASS); + }, + + removeSelectedClasses: function () { + const items = this.items || this.getItems(); + + items.forEach(item => item.classList.remove(SELECTED_CLASS)); + }, + + addEvents: function() { + this.eventWrapper.clickEvent = this.clickEvent.bind(this) + this.list.addEventListener('click', this.eventWrapper.clickEvent); + }, + + toggle: function() { + this.hidden ? this.show() : this.hide(); + }, + + setData: function(data) { + this.data = data; + this.render(data); + }, + + addData: function(data) { + this.data = (this.data || []).concat(data); + this.render(this.data); + }, + + render: function(data) { + const children = data ? data.map(this.renderChildren.bind(this)) : []; + const renderableList = this.list.querySelector('ul[data-dynamic]') || this.list; + + renderableList.innerHTML = children.join(''); + }, + + renderChildren: function(data) { + var html = utils.t(this.templateString, data); + var template = document.createElement('div'); + + template.innerHTML = html; + this.setImagesSrc(template); + template.firstChild.style.display = data.droplab_hidden ? 'none' : 'block'; + + return template.firstChild.outerHTML; + }, + + setImagesSrc: function(template) { + const images = [].slice.call(template.querySelectorAll('img[data-src]')); + + images.forEach((image) => { + image.src = image.getAttribute('data-src'); + image.removeAttribute('data-src'); + }); + }, + + show: function() { + if (!this.hidden) return; + this.list.style.display = 'block'; + this.currentIndex = 0; + this.hidden = false; + }, + + hide: function() { + if (this.hidden) return; + this.list.style.display = 'none'; + this.currentIndex = 0; + this.hidden = true; + }, + + toggle: function () { + this.hidden ? this.show() : this.hide(); + }, + + destroy: function() { + this.hide(); + this.list.removeEventListener('click', this.eventWrapper.clickEvent); + } +}); + +export default DropDown; diff --git a/app/assets/javascripts/droplab/drop_lab.js b/app/assets/javascripts/droplab/drop_lab.js new file mode 100644 index 00000000000..6eb9f314af7 --- /dev/null +++ b/app/assets/javascripts/droplab/drop_lab.js @@ -0,0 +1,152 @@ +/* eslint-disable */ + +import HookButton from './hook_button'; +import HookInput from './hook_input'; +import utils from './utils'; +import Keyboard from './keyboard'; +import { DATA_TRIGGER } from './constants'; + +var DropLab = function() { + this.ready = false; + this.hooks = []; + this.queuedData = []; + this.config = {}; + + this.eventWrapper = {}; +}; + +Object.assign(DropLab.prototype, { + loadStatic: function(){ + var dropdownTriggers = [].slice.apply(document.querySelectorAll(`[${DATA_TRIGGER}]`)); + this.addHooks(dropdownTriggers); + }, + + addData: function () { + var args = [].slice.apply(arguments); + this.applyArgs(args, '_addData'); + }, + + setData: function() { + var args = [].slice.apply(arguments); + this.applyArgs(args, '_setData'); + }, + + destroy: function() { + this.hooks.forEach(hook => hook.destroy()); + this.hooks = []; + this.removeEvents(); + }, + + applyArgs: function(args, methodName) { + if (this.ready) return this[methodName].apply(this, args); + + this.queuedData = this.queuedData || []; + this.queuedData.push(args); + }, + + _addData: function(trigger, data) { + this._processData(trigger, data, 'addData'); + }, + + _setData: function(trigger, data) { + this._processData(trigger, data, 'setData'); + }, + + _processData: function(trigger, data, methodName) { + this.hooks.forEach((hook) => { + if (Array.isArray(trigger)) hook.list[methodName](trigger); + + if (hook.trigger.id === trigger) hook.list[methodName](data); + }); + }, + + addEvents: function() { + this.eventWrapper.documentClicked = this.documentClicked.bind(this) + document.addEventListener('click', this.eventWrapper.documentClicked); + }, + + documentClicked: function(e) { + let thisTag = e.target; + + if (thisTag.tagName !== 'UL') thisTag = utils.closest(thisTag, 'UL'); + if (utils.isDropDownParts(thisTag, this.hooks) || utils.isDropDownParts(e.target, this.hooks)) return; + + this.hooks.forEach(hook => hook.list.hide()); + }, + + removeEvents: function(){ + document.removeEventListener('click', this.eventWrapper.documentClicked); + }, + + changeHookList: function(trigger, list, plugins, config) { + const availableTrigger = typeof trigger === 'string' ? document.getElementById(trigger) : trigger; + + + this.hooks.forEach((hook, i) => { + hook.list.list.dataset.dropdownActive = false; + + if (hook.trigger !== availableTrigger) return; + + hook.destroy(); + this.hooks.splice(i, 1); + this.addHook(availableTrigger, list, plugins, config); + }); + }, + + addHook: function(hook, list, plugins, config) { + const availableHook = typeof hook === 'string' ? document.querySelector(hook) : hook; + let availableList; + + if (typeof list === 'string') { + availableList = document.querySelector(list); + } else if (list instanceof Element) { + availableList = list; + } else { + availableList = document.querySelector(hook.dataset[utils.toCamelCase(DATA_TRIGGER)]); + } + + availableList.dataset.dropdownActive = true; + + const HookObject = availableHook.tagName === 'INPUT' ? HookInput : HookButton; + this.hooks.push(new HookObject(availableHook, availableList, plugins, config)); + + return this; + }, + + addHooks: function(hooks, plugins, config) { + hooks.forEach(hook => this.addHook(hook, null, plugins, config)); + return this; + }, + + setConfig: function(obj){ + this.config = obj; + }, + + fireReady: function() { + const readyEvent = new CustomEvent('ready.dl', { + detail: { + dropdown: this, + }, + }); + document.dispatchEvent(readyEvent); + + this.ready = true; + }, + + init: function (hook, list, plugins, config) { + hook ? this.addHook(hook, list, plugins, config) : this.loadStatic(); + + this.addEvents(); + + Keyboard(); + + this.fireReady(); + + this.queuedData.forEach(data => this.addData(data)); + this.queuedData = []; + + return this; + }, +}); + +export default DropLab; diff --git a/app/assets/javascripts/droplab/hook.js b/app/assets/javascripts/droplab/hook.js new file mode 100644 index 00000000000..2f840083571 --- /dev/null +++ b/app/assets/javascripts/droplab/hook.js @@ -0,0 +1,22 @@ +/* eslint-disable */ + +import DropDown from './drop_down'; + +var Hook = function(trigger, list, plugins, config){ + this.trigger = trigger; + this.list = new DropDown(list); + this.type = 'Hook'; + this.event = 'click'; + this.plugins = plugins || []; + this.config = config || {}; + this.id = trigger.id; +}; + +Object.assign(Hook.prototype, { + + addEvents: function(){}, + + constructor: Hook, +}); + +export default Hook; diff --git a/app/assets/javascripts/droplab/hook_button.js b/app/assets/javascripts/droplab/hook_button.js new file mode 100644 index 00000000000..be8aead1303 --- /dev/null +++ b/app/assets/javascripts/droplab/hook_button.js @@ -0,0 +1,65 @@ +/* eslint-disable */ + +import Hook from './hook'; + +var HookButton = function(trigger, list, plugins, config) { + Hook.call(this, trigger, list, plugins, config); + + this.type = 'button'; + this.event = 'click'; + + this.eventWrapper = {}; + + this.addEvents(); + this.addPlugins(); +}; + +HookButton.prototype = Object.create(Hook.prototype); + +Object.assign(HookButton.prototype, { + addPlugins: function() { + this.plugins.forEach(plugin => plugin.init(this)); + }, + + clicked: function(e){ + var buttonEvent = new CustomEvent('click.dl', { + detail: { + hook: this, + }, + bubbles: true, + cancelable: true + }); + e.target.dispatchEvent(buttonEvent); + + this.list.toggle(); + }, + + addEvents: function(){ + this.eventWrapper.clicked = this.clicked.bind(this); + this.trigger.addEventListener('click', this.eventWrapper.clicked); + }, + + removeEvents: function(){ + this.trigger.removeEventListener('click', this.eventWrapper.clicked); + }, + + restoreInitialState: function() { + this.list.list.innerHTML = this.list.initialState; + }, + + removePlugins: function() { + this.plugins.forEach(plugin => plugin.destroy()); + }, + + destroy: function() { + this.restoreInitialState(); + + this.removeEvents(); + this.removePlugins(); + }, + + constructor: HookButton, +}); + + +export default HookButton; diff --git a/app/assets/javascripts/droplab/hook_input.js b/app/assets/javascripts/droplab/hook_input.js new file mode 100644 index 00000000000..05082334045 --- /dev/null +++ b/app/assets/javascripts/droplab/hook_input.js @@ -0,0 +1,119 @@ +/* eslint-disable */ + +import Hook from './hook'; + +var HookInput = function(trigger, list, plugins, config) { + Hook.call(this, trigger, list, plugins, config); + + this.type = 'input'; + this.event = 'input'; + + this.eventWrapper = {}; + + this.addEvents(); + this.addPlugins(); +}; + +Object.assign(HookInput.prototype, { + addPlugins: function() { + this.plugins.forEach(plugin => plugin.init(this)); + }, + + addEvents: function(){ + this.eventWrapper.mousedown = this.mousedown.bind(this); + this.eventWrapper.input = this.input.bind(this); + this.eventWrapper.keyup = this.keyup.bind(this); + this.eventWrapper.keydown = this.keydown.bind(this); + + this.trigger.addEventListener('mousedown', this.eventWrapper.mousedown); + this.trigger.addEventListener('input', this.eventWrapper.input); + this.trigger.addEventListener('keyup', this.eventWrapper.keyup); + this.trigger.addEventListener('keydown', this.eventWrapper.keydown); + }, + + removeEvents: function() { + this.hasRemovedEvents = true; + + this.trigger.removeEventListener('mousedown', this.eventWrapper.mousedown); + this.trigger.removeEventListener('input', this.eventWrapper.input); + this.trigger.removeEventListener('keyup', this.eventWrapper.keyup); + this.trigger.removeEventListener('keydown', this.eventWrapper.keydown); + }, + + input: function(e) { + if(this.hasRemovedEvents) return; + + this.list.show(); + + const inputEvent = new CustomEvent('input.dl', { + detail: { + hook: this, + text: e.target.value, + }, + bubbles: true, + cancelable: true + }); + e.target.dispatchEvent(inputEvent); + }, + + mousedown: function(e) { + if (this.hasRemovedEvents) return; + + const mouseEvent = new CustomEvent('mousedown.dl', { + detail: { + hook: this, + text: e.target.value, + }, + bubbles: true, + cancelable: true, + }); + e.target.dispatchEvent(mouseEvent); + }, + + keyup: function(e) { + if (this.hasRemovedEvents) return; + + this.keyEvent(e, 'keyup.dl'); + }, + + keydown: function(e) { + if (this.hasRemovedEvents) return; + + this.keyEvent(e, 'keydown.dl'); + }, + + keyEvent: function(e, eventName) { + this.list.show(); + + const keyEvent = new CustomEvent(eventName, { + detail: { + hook: this, + text: e.target.value, + which: e.which, + key: e.key, + }, + bubbles: true, + cancelable: true, + }); + e.target.dispatchEvent(keyEvent); + }, + + restoreInitialState: function() { + this.list.list.innerHTML = this.list.initialState; + }, + + removePlugins: function() { + this.plugins.forEach(plugin => plugin.destroy()); + }, + + destroy: function() { + this.restoreInitialState(); + + this.removeEvents(); + this.removePlugins(); + + this.list.destroy(); + } +}); + +export default HookInput; diff --git a/app/assets/javascripts/droplab/keyboard.js b/app/assets/javascripts/droplab/keyboard.js new file mode 100644 index 00000000000..36740a430e1 --- /dev/null +++ b/app/assets/javascripts/droplab/keyboard.js @@ -0,0 +1,113 @@ +/* eslint-disable */ + +import { ACTIVE_CLASS } from './constants'; + +const Keyboard = function () { + var currentKey; + var currentFocus; + var isUpArrow = false; + var isDownArrow = false; + var removeHighlight = function removeHighlight(list) { + var itemElements = Array.prototype.slice.call(list.list.querySelectorAll('li:not(.divider)'), 0); + var listItems = []; + for(var i = 0; i < itemElements.length; i++) { + var listItem = itemElements[i]; + listItem.classList.remove(ACTIVE_CLASS); + + if (listItem.style.display !== 'none') { + listItems.push(listItem); + } + } + return listItems; + }; + + var setMenuForArrows = function setMenuForArrows(list) { + var listItems = removeHighlight(list); + if(list.currentIndex>0){ + if(!listItems[list.currentIndex-1]){ + list.currentIndex = list.currentIndex-1; + } + + if (listItems[list.currentIndex-1]) { + var el = listItems[list.currentIndex-1]; + var filterDropdownEl = el.closest('.filter-dropdown'); + el.classList.add(ACTIVE_CLASS); + + if (filterDropdownEl) { + var filterDropdownBottom = filterDropdownEl.offsetHeight; + var elOffsetTop = el.offsetTop - 30; + + if (elOffsetTop > filterDropdownBottom) { + filterDropdownEl.scrollTop = elOffsetTop - filterDropdownBottom; + } + } + } + } + }; + + var mousedown = function mousedown(e) { + var list = e.detail.hook.list; + removeHighlight(list); + list.show(); + list.currentIndex = 0; + isUpArrow = false; + isDownArrow = false; + }; + var selectItem = function selectItem(list) { + var listItems = removeHighlight(list); + var currentItem = listItems[list.currentIndex-1]; + var listEvent = new CustomEvent('click.dl', { + detail: { + list: list, + selected: currentItem, + data: currentItem.dataset, + }, + }); + list.list.dispatchEvent(listEvent); + list.hide(); + } + + var keydown = function keydown(e){ + var typedOn = e.target; + var list = e.detail.hook.list; + var currentIndex = list.currentIndex; + isUpArrow = false; + isDownArrow = false; + + if(e.detail.which){ + currentKey = e.detail.which; + if(currentKey === 13){ + selectItem(e.detail.hook.list); + return; + } + if(currentKey === 38) { + isUpArrow = true; + } + if(currentKey === 40) { + isDownArrow = true; + } + } else if(e.detail.key) { + currentKey = e.detail.key; + if(currentKey === 'Enter'){ + selectItem(e.detail.hook.list); + return; + } + if(currentKey === 'ArrowUp') { + isUpArrow = true; + } + if(currentKey === 'ArrowDown') { + isDownArrow = true; + } + } + if(isUpArrow){ currentIndex--; } + if(isDownArrow){ currentIndex++; } + if(currentIndex < 0){ currentIndex = 0; } + list.currentIndex = currentIndex; + setMenuForArrows(e.detail.hook.list); + }; + + document.addEventListener('mousedown.dl', mousedown); + document.addEventListener('keydown.dl', keydown); +}; + +export default Keyboard; diff --git a/app/assets/javascripts/droplab/plugins/ajax.js b/app/assets/javascripts/droplab/plugins/ajax.js new file mode 100644 index 00000000000..f08b638fc62 --- /dev/null +++ b/app/assets/javascripts/droplab/plugins/ajax.js @@ -0,0 +1,71 @@ +/* eslint-disable */ + +function droplabAjaxException(message) { + this.message = message; +} + +const Ajax = { + _loadUrlData: function _loadUrlData(url) { + var self = this; + return new Promise(function(resolve, reject) { + var xhr = new XMLHttpRequest; + xhr.open('GET', url, true); + xhr.onreadystatechange = function () { + if(xhr.readyState === XMLHttpRequest.DONE) { + if (xhr.status === 200) { + var data = JSON.parse(xhr.responseText); + self.cache[url] = data; + return resolve(data); + } else { + return reject([xhr.responseText, xhr.status]); + } + } + }; + xhr.send(); + }); + }, + _loadData: function _loadData(data, config, self) { + if (config.loadingTemplate) { + var dataLoadingTemplate = self.hook.list.list.querySelector('[data-loading-template]'); + if (dataLoadingTemplate) dataLoadingTemplate.outerHTML = self.listTemplate; + } + + if (!self.destroyed) self.hook.list[config.method].call(self.hook.list, data); + }, + init: function init(hook) { + var self = this; + self.destroyed = false; + self.cache = self.cache || {}; + var config = hook.config.Ajax; + this.hook = hook; + if (!config || !config.endpoint || !config.method) { + return; + } + if (config.method !== 'setData' && config.method !== 'addData') { + return; + } + if (config.loadingTemplate) { + var dynamicList = hook.list.list.querySelector('[data-dynamic]'); + var loadingTemplate = document.createElement('div'); + loadingTemplate.innerHTML = config.loadingTemplate; + loadingTemplate.setAttribute('data-loading-template', ''); + this.listTemplate = dynamicList.outerHTML; + dynamicList.outerHTML = loadingTemplate.outerHTML; + } + if (self.cache[config.endpoint]) { + self._loadData(self.cache[config.endpoint], config, self); + } else { + this._loadUrlData(config.endpoint) + .then(function(d) { + self._loadData(d, config, self); + }, config.onError).catch(function(e) { + throw new droplabAjaxException(e.message || e); + }); + } + }, + destroy: function() { + this.destroyed = true; + } +}; + +export default Ajax; diff --git a/app/assets/javascripts/droplab/plugins/ajax_filter.js b/app/assets/javascripts/droplab/plugins/ajax_filter.js new file mode 100644 index 00000000000..7fe221e101f --- /dev/null +++ b/app/assets/javascripts/droplab/plugins/ajax_filter.js @@ -0,0 +1,133 @@ +/* eslint-disable */ + +const AjaxFilter = { + init: function(hook) { + this.destroyed = false; + this.hook = hook; + this.notLoading(); + + this.eventWrapper = {}; + this.eventWrapper.debounceTrigger = this.debounceTrigger.bind(this); + this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceTrigger); + this.hook.trigger.addEventListener('focus', this.eventWrapper.debounceTrigger); + + this.trigger(true); + }, + + notLoading: function notLoading() { + this.loading = false; + }, + + debounceTrigger: function debounceTrigger(e) { + var NON_CHARACTER_KEYS = [16, 17, 18, 20, 37, 38, 39, 40, 91, 93]; + var invalidKeyPressed = NON_CHARACTER_KEYS.indexOf(e.detail.which || e.detail.keyCode) > -1; + var focusEvent = e.type === 'focus'; + if (invalidKeyPressed || this.loading) { + return; + } + if (this.timeout) { + clearTimeout(this.timeout); + } + this.timeout = setTimeout(this.trigger.bind(this, focusEvent), 200); + }, + + trigger: function trigger(getEntireList) { + var config = this.hook.config.AjaxFilter; + var searchValue = this.trigger.value; + if (!config || !config.endpoint || !config.searchKey) { + return; + } + if (config.searchValueFunction) { + searchValue = config.searchValueFunction(); + } + if (config.loadingTemplate && this.hook.list.data === undefined || + this.hook.list.data.length === 0) { + var dynamicList = this.hook.list.list.querySelector('[data-dynamic]'); + var loadingTemplate = document.createElement('div'); + loadingTemplate.innerHTML = config.loadingTemplate; + loadingTemplate.setAttribute('data-loading-template', true); + this.listTemplate = dynamicList.outerHTML; + dynamicList.outerHTML = loadingTemplate.outerHTML; + } + if (getEntireList) { + searchValue = ''; + } + if (config.searchKey === searchValue) { + return this.list.show(); + } + this.loading = true; + var params = config.params || {}; + params[config.searchKey] = searchValue; + var self = this; + self.cache = self.cache || {}; + var url = config.endpoint + this.buildParams(params); + var urlCachedData = self.cache[url]; + if (urlCachedData) { + self._loadData(urlCachedData, config, self); + } else { + this._loadUrlData(url) + .then(function(data) { + self._loadData(data, config, self); + }, config.onError); + } + }, + + _loadUrlData: function _loadUrlData(url) { + var self = this; + return new Promise(function(resolve, reject) { + var xhr = new XMLHttpRequest; + xhr.open('GET', url, true); + xhr.onreadystatechange = function () { + if(xhr.readyState === XMLHttpRequest.DONE) { + if (xhr.status === 200) { + var data = JSON.parse(xhr.responseText); + self.cache[url] = data; + return resolve(data); + } else { + return reject([xhr.responseText, xhr.status]); + } + } + }; + xhr.send(); + }); + }, + + _loadData: function _loadData(data, config, self) { + const list = self.hook.list; + if (config.loadingTemplate && list.data === undefined || + list.data.length === 0) { + const dataLoadingTemplate = list.list.querySelector('[data-loading-template]'); + if (dataLoadingTemplate) { + dataLoadingTemplate.outerHTML = self.listTemplate; + } + } + if (!self.destroyed) { + var hookListChildren = list.list.children; + var onlyDynamicList = hookListChildren.length === 1 && hookListChildren[0].hasAttribute('data-dynamic'); + if (onlyDynamicList && data.length === 0) { + list.hide(); + } + list.setData.call(list, data); + } + self.notLoading(); + list.currentIndex = 0; + }, + + buildParams: function(params) { + if (!params) return ''; + var paramsArray = Object.keys(params).map(function(param) { + return param + '=' + (params[param] || ''); + }); + return '?' + paramsArray.join('&'); + }, + + destroy: function destroy() { + if (this.timeout)clearTimeout(this.timeout); + this.destroyed = true; + + this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceTrigger); + this.hook.trigger.removeEventListener('focus', this.eventWrapper.debounceTrigger); + } +}; + +export default AjaxFilter; diff --git a/app/assets/javascripts/droplab/plugins/filter.js b/app/assets/javascripts/droplab/plugins/filter.js new file mode 100644 index 00000000000..d6a1aadd49c --- /dev/null +++ b/app/assets/javascripts/droplab/plugins/filter.js @@ -0,0 +1,95 @@ +/* eslint-disable */ + +const Filter = { + keydown: function(e){ + if (this.destroyed) return; + + var hiddenCount = 0; + var dataHiddenCount = 0; + + var list = e.detail.hook.list; + var data = list.data; + var value = e.detail.hook.trigger.value.toLowerCase(); + var config = e.detail.hook.config.Filter; + var matches = []; + var filterFunction; + // will only work on dynamically set data + if(!data){ + return; + } + + if (config && config.filterFunction && typeof config.filterFunction === 'function') { + filterFunction = config.filterFunction; + } else { + filterFunction = function(o){ + // cheap string search + o.droplab_hidden = o[config.template].toLowerCase().indexOf(value) === -1; + return o; + }; + } + + dataHiddenCount = data.filter(function(o) { + return !o.droplab_hidden; + }).length; + + matches = data.map(function(o) { + return filterFunction(o, value); + }); + + hiddenCount = matches.filter(function(o) { + return !o.droplab_hidden; + }).length; + + if (dataHiddenCount !== hiddenCount) { + list.setData(matches); + list.currentIndex = 0; + } + }, + + debounceKeydown: function debounceKeydown(e) { + if ([ + 13, // enter + 16, // shift + 17, // ctrl + 18, // alt + 20, // caps lock + 37, // left arrow + 38, // up arrow + 39, // right arrow + 40, // down arrow + 91, // left window + 92, // right window + 93, // select + ].indexOf(e.detail.which || e.detail.keyCode) > -1) return; + + if (this.timeout) clearTimeout(this.timeout); + this.timeout = setTimeout(this.keydown.bind(this, e), 200); + }, + + init: function init(hook) { + var config = hook.config.Filter; + + if (!config || !config.template) return; + + this.hook = hook; + this.destroyed = false; + + this.eventWrapper = {}; + this.eventWrapper.debounceKeydown = this.debounceKeydown.bind(this); + + this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceKeydown); + this.hook.trigger.addEventListener('mousedown.dl', this.eventWrapper.debounceKeydown); + + this.debounceKeydown({ detail: { hook: this.hook } }); + }, + + destroy: function destroy() { + if (this.timeout) clearTimeout(this.timeout); + this.destroyed = true; + + this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceKeydown); + this.hook.trigger.removeEventListener('mousedown.dl', this.eventWrapper.debounceKeydown); + } +}; + +export default Filter; diff --git a/app/assets/javascripts/droplab/plugins/input_setter.js b/app/assets/javascripts/droplab/plugins/input_setter.js new file mode 100644 index 00000000000..b1716c72810 --- /dev/null +++ b/app/assets/javascripts/droplab/plugins/input_setter.js @@ -0,0 +1,51 @@ +/* eslint-disable */ + +const InputSetter = { + init(hook) { + this.hook = hook; + this.destroyed = false; + this.config = hook.config.InputSetter || (this.hook.config.InputSetter = {}); + + this.eventWrapper = {}; + + this.addEvents(); + }, + + addEvents() { + this.eventWrapper.setInputs = this.setInputs.bind(this); + this.hook.list.list.addEventListener('click.dl', this.eventWrapper.setInputs); + }, + + removeEvents() { + this.hook.list.list.removeEventListener('click.dl', this.eventWrapper.setInputs); + }, + + setInputs(e) { + if (this.destroyed) return; + + const selectedItem = e.detail.selected; + + if (!Array.isArray(this.config)) this.config = [this.config]; + + this.config.forEach(config => this.setInput(config, selectedItem)); + }, + + setInput(config, selectedItem) { + const input = config.input || this.hook.trigger; + const newValue = selectedItem.getAttribute(config.valueAttribute); + + if (input.tagName === 'INPUT') { + input.value = newValue; + } else { + input.textContent = newValue; + } + }, + + destroy() { + this.destroyed = true; + + this.removeEvents(); + }, +}; + +export default InputSetter; diff --git a/app/assets/javascripts/droplab/utils.js b/app/assets/javascripts/droplab/utils.js new file mode 100644 index 00000000000..c149a33a1e9 --- /dev/null +++ b/app/assets/javascripts/droplab/utils.js @@ -0,0 +1,38 @@ +/* eslint-disable */ + +import { DATA_TRIGGER, DATA_DROPDOWN } from './constants'; + +const utils = { + toCamelCase(attr) { + return this.camelize(attr.split('-').slice(1).join(' ')); + }, + + t(s, d) { + for (const p in d) { + if (Object.prototype.hasOwnProperty.call(d, p)) { + s = s.replace(new RegExp(`{{${p}}}`, 'g'), d[p]); + } + } + return s; + }, + + camelize(str) { + return str.replace(/(?:^\w|[A-Z]|\b\w)/g, (letter, index) => { + return index === 0 ? letter.toLowerCase() : letter.toUpperCase(); + }).replace(/\s+/g, ''); + }, + + closest(thisTag, stopTag) { + while (thisTag && thisTag.tagName !== stopTag && thisTag.tagName !== 'HTML') { + thisTag = thisTag.parentNode; + } + return thisTag; + }, + + isDropDownParts(target) { + if (!target || target.tagName === 'HTML') return false; + return target.hasAttribute(DATA_TRIGGER) || target.hasAttribute(DATA_DROPDOWN); + }, +}; + +export default utils; diff --git a/app/assets/javascripts/filtered_search/dropdown_hint.js b/app/assets/javascripts/filtered_search/dropdown_hint.js index 527037c08eb..ede5d65ce12 100644 --- a/app/assets/javascripts/filtered_search/dropdown_hint.js +++ b/app/assets/javascripts/filtered_search/dropdown_hint.js @@ -1,4 +1,4 @@ -import Filter from '@gitlab-org/droplab/dist/plugins/Filter'; +import Filter from '~/droplab/plugins/filter'; require('./filtered_search_dropdown'); diff --git a/app/assets/javascripts/filtered_search/dropdown_non_user.js b/app/assets/javascripts/filtered_search/dropdown_non_user.js index 48c2135aca3..35c76dff79a 100644 --- a/app/assets/javascripts/filtered_search/dropdown_non_user.js +++ b/app/assets/javascripts/filtered_search/dropdown_non_user.js @@ -1,5 +1,5 @@ -import Ajax from '@gitlab-org/droplab/dist/plugins/Ajax'; -import Filter from '@gitlab-org/droplab/dist/plugins/Filter'; +import Ajax from '~/droplab/plugins/ajax'; +import Filter from '~/droplab/plugins/filter'; require('./filtered_search_dropdown'); diff --git a/app/assets/javascripts/filtered_search/dropdown_user.js b/app/assets/javascripts/filtered_search/dropdown_user.js index 1661a4c5da2..4f9f25c1f1b 100644 --- a/app/assets/javascripts/filtered_search/dropdown_user.js +++ b/app/assets/javascripts/filtered_search/dropdown_user.js @@ -1,4 +1,4 @@ -import AjaxFilter from '@gitlab-org/droplab/dist/plugins/AjaxFilter'; +import AjaxFilter from '~/droplab/plugins/ajax_filter'; require('./filtered_search_dropdown'); diff --git a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js index f5d6a85a4da..ec481b9ef97 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js +++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js @@ -1,4 +1,4 @@ -import DropLab from '@gitlab-org/droplab'; +import DropLab from '~/droplab/drop_lab'; import FilteredSearchContainer from './container'; (() => { diff --git a/package.json b/package.json index c623ca627b5..3f64d65d57a 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "webpack-prod": "NODE_ENV=production webpack --config config/webpack.config.js" }, "dependencies": { - "@gitlab-org/droplab": "^0.1.0", "babel-core": "^6.22.1", "babel-loader": "^6.2.10", "babel-plugin-transform-define": "^1.2.0", diff --git a/spec/javascripts/droplab/constants.js b/spec/javascripts/droplab/constants.js new file mode 100644 index 00000000000..35239e4fb8e --- /dev/null +++ b/spec/javascripts/droplab/constants.js @@ -0,0 +1,29 @@ +/* eslint-disable */ + +import * as constants from '~/droplab/constants'; + +describe('constants', function () { + describe('DATA_TRIGGER', function () { + it('should be `data-dropdown-trigger`', function() { + expect(constants.DATA_TRIGGER).toBe('data-dropdown-trigger'); + }); + }); + + describe('DATA_DROPDOWN', function () { + it('should be `data-dropdown`', function() { + expect(constants.DATA_DROPDOWN).toBe('data-dropdown'); + }); + }); + + describe('SELECTED_CLASS', function () { + it('should be `droplab-item-selected`', function() { + expect(constants.SELECTED_CLASS).toBe('droplab-item-selected'); + }); + }); + + describe('ACTIVE_CLASS', function () { + it('should be `droplab-item-active`', function() { + expect(constants.ACTIVE_CLASS).toBe('droplab-item-active'); + }); + }); +}); diff --git a/spec/javascripts/droplab/drop_down.js b/spec/javascripts/droplab/drop_down.js new file mode 100644 index 00000000000..bbf953658c8 --- /dev/null +++ b/spec/javascripts/droplab/drop_down.js @@ -0,0 +1,578 @@ +/* eslint-disable */ + +import DropDown from '~/droplab/drop_down'; +import utils from '~/droplab/utils'; +import { SELECTED_CLASS } from '~/droplab/constants'; + +describe('DropDown', function () { + describe('class constructor', function () { + beforeEach(function () { + spyOn(DropDown.prototype, 'getItems'); + spyOn(DropDown.prototype, 'initTemplateString'); + spyOn(DropDown.prototype, 'addEvents'); + + this.list = { innerHTML: 'innerHTML' }; + this.dropdown = new DropDown(this.list); + }); + + it('sets the .hidden property to true', function () { + expect(this.dropdown.hidden).toBe(true); + }) + + it('sets the .list property', function () { + expect(this.dropdown.list).toBe(this.list); + }); + + it('calls .getItems', function () { + expect(DropDown.prototype.getItems).toHaveBeenCalled(); + }); + + it('calls .initTemplateString', function () { + expect(DropDown.prototype.initTemplateString).toHaveBeenCalled(); + }); + + it('calls .addEvents', function () { + expect(DropDown.prototype.addEvents).toHaveBeenCalled(); + }); + + it('sets the .initialState property to the .list.innerHTML', function () { + expect(this.dropdown.initialState).toBe(this.list.innerHTML); + }); + + describe('if the list argument is a string', function () { + beforeEach(function () { + this.element = {}; + this.selector = '.selector'; + + spyOn(Document.prototype, 'querySelector').and.returnValue(this.element); + + this.dropdown = new DropDown(this.selector); + }); + + it('calls .querySelector with the selector string', function () { + expect(Document.prototype.querySelector).toHaveBeenCalledWith(this.selector); + }); + + it('sets the .list property element', function () { + expect(this.dropdown.list).toBe(this.element); + }); + }); + }); + + describe('getItems', function () { + beforeEach(function () { + this.list = { querySelectorAll: () => {} }; + this.dropdown = { list: this.list }; + this.nodeList = []; + + spyOn(this.list, 'querySelectorAll').and.returnValue(this.nodeList); + + this.getItems = DropDown.prototype.getItems.call(this.dropdown); + }); + + it('calls .querySelectorAll with a list item query', function () { + expect(this.list.querySelectorAll).toHaveBeenCalledWith('li'); + }); + + it('sets the .items property to the returned list items', function () { + expect(this.dropdown.items).toEqual(jasmine.any(Array)); + }); + + it('returns the .items', function () { + expect(this.getItems).toEqual(jasmine.any(Array)); + }); + }); + + describe('initTemplateString', function () { + beforeEach(function () { + this.items = [{ outerHTML: '' }, { outerHTML: '' }]; + this.dropdown = { items: this.items }; + + DropDown.prototype.initTemplateString.call(this.dropdown); + }); + + it('should set .templateString to the last items .outerHTML', function () { + expect(this.dropdown.templateString).toBe(this.items[1].outerHTML); + }); + + it('should not set .templateString to a non-last items .outerHTML', function () { + expect(this.dropdown.templateString).not.toBe(this.items[0].outerHTML); + }); + + describe('if .items is not set', function () { + beforeEach(function () { + this.dropdown = { getItems: () => {} }; + + spyOn(this.dropdown, 'getItems').and.returnValue([]); + + DropDown.prototype.initTemplateString.call(this.dropdown); + }); + + it('should call .getItems', function () { + expect(this.dropdown.getItems).toHaveBeenCalled(); + }); + }); + + describe('if items array is empty', function () { + beforeEach(function () { + this.dropdown = { items: [] }; + + DropDown.prototype.initTemplateString.call(this.dropdown); + }); + + it('should set .templateString to an empty string', function () { + expect(this.dropdown.templateString).toBe(''); + }); + }); + }); + + describe('clickEvent', function () { + beforeEach(function () { + this.list = { dispatchEvent: () => {} }; + this.dropdown = { hide: () => {}, list: this.list, addSelectedClass: () => {} }; + this.event = { preventDefault: () => {}, target: 'target' }; + this.customEvent = {}; + this.closestElement = {}; + + spyOn(this.dropdown, 'hide'); + spyOn(this.dropdown, 'addSelectedClass'); + spyOn(this.list, 'dispatchEvent'); + spyOn(this.event, 'preventDefault'); + spyOn(window, 'CustomEvent').and.returnValue(this.customEvent); + spyOn(utils, 'closest').and.returnValues(this.closestElement, undefined); + + DropDown.prototype.clickEvent.call(this.dropdown, this.event); + }); + + it('should call utils.closest', function () { + expect(utils.closest).toHaveBeenCalledWith(this.event.target, 'LI'); + }); + + it('should call addSelectedClass', function () { + expect(this.dropdown.addSelectedClass).toHaveBeenCalledWith(this.closestElement); + }) + + it('should call .preventDefault', function () { + expect(this.event.preventDefault).toHaveBeenCalled(); + }); + + it('should call .hide', function () { + expect(this.dropdown.hide).toHaveBeenCalled(); + }); + + it('should construct CustomEvent', function () { + expect(window.CustomEvent).toHaveBeenCalledWith('click.dl', jasmine.any(Object)); + }); + + it('should call .dispatchEvent with the customEvent', function () { + expect(this.list.dispatchEvent).toHaveBeenCalledWith(this.customEvent); + }); + + describe('if no selected element exists', function () { + beforeEach(function () { + this.event.preventDefault.calls.reset(); + this.clickEvent = DropDown.prototype.clickEvent.call(this.dropdown, this.event); + }); + + it('should return undefined', function () { + expect(this.clickEvent).toBe(undefined); + }); + + it('should return before .preventDefault is called', function () { + expect(this.event.preventDefault).not.toHaveBeenCalled(); + }); + }); + }); + + describe('addSelectedClass', function () { + beforeEach(function () { + this.items = Array(4).forEach((item, i) => { + this.items[i] = { classList: { add: () => {} } }; + spyOn(this.items[i].classList, 'add'); + }); + this.selected = { classList: { add: () => {} } }; + this.dropdown = { removeSelectedClasses: () => {} }; + + spyOn(this.dropdown, 'removeSelectedClasses'); + spyOn(this.selected.classList, 'add'); + + DropDown.prototype.addSelectedClass.call(this.dropdown, this.selected); + }); + + it('should call .removeSelectedClasses', function () { + expect(this.dropdown.removeSelectedClasses).toHaveBeenCalled(); + }); + + it('should call .classList.add', function () { + expect(this.selected.classList.add).toHaveBeenCalledWith(SELECTED_CLASS); + }); + }); + + describe('removeSelectedClasses', function () { + beforeEach(function () { + this.items = Array(4); + this.items.forEach((item, i) => { + this.items[i] = { classList: { add: () => {} } }; + spyOn(this.items[i].classList, 'add'); + }); + this.dropdown = { items: this.items }; + + DropDown.prototype.removeSelectedClasses.call(this.dropdown); + }); + + it('should call .classList.remove for all items', function () { + this.items.forEach((item, i) => { + expect(this.items[i].classList.add).toHaveBeenCalledWith(SELECTED_CLASS); + }); + }); + + describe('if .items is not set', function () { + beforeEach(function () { + this.dropdown = { getItems: () => {} }; + + spyOn(this.dropdown, 'getItems').and.returnValue([]); + + DropDown.prototype.removeSelectedClasses.call(this.dropdown); + }); + + it('should call .getItems', function () { + expect(this.dropdown.getItems).toHaveBeenCalled(); + }); + }); + }); + + describe('addEvents', function () { + beforeEach(function () { + this.list = { addEventListener: () => {} }; + this.dropdown = { list: this.list, clickEvent: () => {}, eventWrapper: {} }; + + spyOn(this.list, 'addEventListener'); + + DropDown.prototype.addEvents.call(this.dropdown); + }); + + it('should call .addEventListener', function () { + expect(this.list.addEventListener).toHaveBeenCalledWith('click', jasmine.any(Function)); + }); + }); + + describe('toggle', function () { + beforeEach(function () { + this.dropdown = { hidden: true, show: () => {}, hide: () => {} }; + + spyOn(this.dropdown, 'show'); + spyOn(this.dropdown, 'hide'); + + DropDown.prototype.toggle.call(this.dropdown); + }); + + it('should call .show if hidden is true', function () { + expect(this.dropdown.show).toHaveBeenCalled(); + }); + + describe('if hidden is false', function () { + beforeEach(function () { + this.dropdown = { hidden: false, show: () => {}, hide: () => {} }; + + spyOn(this.dropdown, 'show'); + spyOn(this.dropdown, 'hide'); + + DropDown.prototype.toggle.call(this.dropdown); + }); + + it('should call .show if hidden is true', function () { + expect(this.dropdown.hide).toHaveBeenCalled(); + }); + }); + }); + + describe('setData', function () { + beforeEach(function () { + this.dropdown = { render: () => {} }; + this.data = ['data']; + + spyOn(this.dropdown, 'render'); + + DropDown.prototype.setData.call(this.dropdown, this.data); + }); + + it('should set .data', function () { + expect(this.dropdown.data).toBe(this.data); + }); + + it('should call .render with the .data', function () { + expect(this.dropdown.render).toHaveBeenCalledWith(this.data); + }); + }); + + describe('addData', function () { + beforeEach(function () { + this.dropdown = { render: () => {}, data: ['data1'] }; + this.data = ['data2']; + + spyOn(this.dropdown, 'render'); + spyOn(Array.prototype, 'concat').and.callThrough(); + + DropDown.prototype.addData.call(this.dropdown, this.data); + }); + + it('should call .concat with data', function () { + expect(Array.prototype.concat).toHaveBeenCalledWith(this.data); + }); + + it('should set .data with concatination', function () { + expect(this.dropdown.data).toEqual(['data1', 'data2']); + }); + + it('should call .render with the .data', function () { + expect(this.dropdown.render).toHaveBeenCalledWith(['data1', 'data2']); + }); + + describe('if .data is undefined', function () { + beforeEach(function () { + this.dropdown = { render: () => {}, data: undefined }; + this.data = ['data2']; + + spyOn(this.dropdown, 'render'); + + DropDown.prototype.addData.call(this.dropdown, this.data); + }); + + it('should set .data with concatination', function () { + expect(this.dropdown.data).toEqual(['data2']); + }); + }); + }); + + describe('render', function () { + beforeEach(function () { + this.list = { querySelector: () => {} }; + this.dropdown = { renderChildren: () => {}, list: this.list }; + this.renderableList = {}; + this.data = [0, 1]; + + spyOn(this.dropdown, 'renderChildren').and.callFake(data => data); + spyOn(this.list, 'querySelector').and.returnValue(this.renderableList); + spyOn(this.data, 'map').and.callThrough(); + + DropDown.prototype.render.call(this.dropdown, this.data); + }); + + it('should call .map', function () { + expect(this.data.map).toHaveBeenCalledWith(jasmine.any(Function)); + }); + + it('should call .renderChildren for each data item', function() { + expect(this.dropdown.renderChildren.calls.count()).toBe(this.data.length); + }); + + it('sets the renderableList .innerHTML', function () { + expect(this.renderableList.innerHTML).toBe('01'); + }); + + describe('if no data argument is passed' , function () { + beforeEach(function () { + this.data.map.calls.reset(); + this.dropdown.renderChildren.calls.reset(); + + DropDown.prototype.render.call(this.dropdown, undefined); + }); + + it('should not call .map', function () { + expect(this.data.map).not.toHaveBeenCalled(); + }); + + it('should not call .renderChildren', function () { + expect(this.dropdown.renderChildren).not.toHaveBeenCalled(); + }); + }); + + describe('if no dynamic list is present', function () { + beforeEach(function () { + this.list = { querySelector: () => {} }; + this.dropdown = { renderChildren: () => {}, list: this.list }; + this.data = [0, 1]; + + spyOn(this.dropdown, 'renderChildren').and.callFake(data => data); + spyOn(this.list, 'querySelector'); + spyOn(this.data, 'map').and.callThrough(); + + DropDown.prototype.render.call(this.dropdown, this.data); + }); + + it('sets the .list .innerHTML', function () { + expect(this.list.innerHTML).toBe('01'); + }); + }); + }); + + describe('renderChildren', function () { + beforeEach(function () { + this.templateString = 'templateString'; + this.dropdown = { setImagesSrc: () => {}, templateString: this.templateString }; + this.data = { droplab_hidden: true }; + this.html = 'html'; + this.template = { firstChild: { outerHTML: 'outerHTML', style: {} } }; + + spyOn(utils, 't').and.returnValue(this.html); + spyOn(document, 'createElement').and.returnValue(this.template); + spyOn(this.dropdown, 'setImagesSrc'); + + this.renderChildren = DropDown.prototype.renderChildren.call(this.dropdown, this.data); + }); + + it('should call utils.t with .templateString and data', function () { + expect(utils.t).toHaveBeenCalledWith(this.templateString, this.data); + }); + + it('should call document.createElement', function () { + expect(document.createElement).toHaveBeenCalledWith('div'); + }); + + it('should set the templates .innerHTML to the HTML', function () { + expect(this.template.innerHTML).toBe(this.html); + }); + + it('should call .setImagesSrc with the template', function () { + expect(this.dropdown.setImagesSrc).toHaveBeenCalledWith(this.template); + }); + + it('should set the template display to none', function () { + expect(this.template.firstChild.style.display).toBe('none'); + }); + + it('should return the templates .firstChild.outerHTML', function () { + expect(this.renderChildren).toBe(this.template.firstChild.outerHTML); + }); + + describe('if droplab_hidden is false', function () { + beforeEach(function () { + this.data = { droplab_hidden: false }; + this.renderChildren = DropDown.prototype.renderChildren.call(this.dropdown, this.data); + }); + + it('should set the template display to block', function () { + expect(this.template.firstChild.style.display).toBe('block'); + }); + }); + }); + + describe('setImagesSrc', function () { + beforeEach(function () { + this.dropdown = {}; + this.template = { querySelectorAll: () => {} }; + + spyOn(this.template, 'querySelectorAll').and.returnValue([]); + + DropDown.prototype.setImagesSrc.call(this.dropdown, this.template); + }); + + it('should call .querySelectorAll', function () { + expect(this.template.querySelectorAll).toHaveBeenCalledWith('img[data-src]'); + }); + }); + + describe('show', function () { + beforeEach(function () { + this.list = { style: {} }; + this.dropdown = { list: this.list, hidden: true }; + + DropDown.prototype.show.call(this.dropdown); + }); + + it('it should set .list display to block', function () { + expect(this.list.style.display).toBe('block'); + }); + + it('it should set .hidden to false', function () { + expect(this.dropdown.hidden).toBe(false); + }); + + describe('if .hidden is false', function () { + beforeEach(function () { + this.list = { style: {} }; + this.dropdown = { list: this.list, hidden: false }; + + this.show = DropDown.prototype.show.call(this.dropdown); + }); + + it('should return undefined', function () { + expect(this.show).toEqual(undefined); + }); + + it('should not set .list display to block', function () { + expect(this.list.style.display).not.toEqual('block'); + }); + }); + }); + + describe('hide', function () { + beforeEach(function () { + this.list = { style: {} }; + this.dropdown = { list: this.list }; + + DropDown.prototype.hide.call(this.dropdown); + }); + + it('it should set .list display to none', function () { + expect(this.list.style.display).toBe('none'); + }); + + it('it should set .hidden to true', function () { + expect(this.dropdown.hidden).toBe(true); + }); + }); + + describe('toggle', function () { + beforeEach(function () { + this.hidden = true + this.dropdown = { hidden: this.hidden, show: () => {}, hide: () => {} }; + + spyOn(this.dropdown, 'show'); + spyOn(this.dropdown, 'hide'); + + DropDown.prototype.toggle.call(this.dropdown); + }); + + it('should call .show', function () { + expect(this.dropdown.show).toHaveBeenCalled(); + }); + + describe('if .hidden is false', function () { + beforeEach(function () { + this.hidden = false + this.dropdown = { hidden: this.hidden, show: () => {}, hide: () => {} }; + + spyOn(this.dropdown, 'show'); + spyOn(this.dropdown, 'hide'); + + DropDown.prototype.toggle.call(this.dropdown); + }); + + it('should call .hide', function () { + expect(this.dropdown.hide).toHaveBeenCalled(); + }); + }); + }); + + describe('destroy', function () { + beforeEach(function () { + this.list = { removeEventListener: () => {} }; + this.eventWrapper = { clickEvent: 'clickEvent' }; + this.dropdown = { list: this.list, hide: () => {}, eventWrapper: this.eventWrapper }; + + spyOn(this.list, 'removeEventListener'); + spyOn(this.dropdown, 'hide'); + + DropDown.prototype.destroy.call(this.dropdown); + }); + + it('it should call .hide', function () { + expect(this.dropdown.hide).toHaveBeenCalled(); + }); + + it('it should call .removeEventListener', function () { + expect(this.list.removeEventListener).toHaveBeenCalledWith('click', this.eventWrapper.clickEvent); + }); + }); +}); diff --git a/spec/javascripts/droplab/hook.js b/spec/javascripts/droplab/hook.js new file mode 100644 index 00000000000..8ebdcdd1404 --- /dev/null +++ b/spec/javascripts/droplab/hook.js @@ -0,0 +1,82 @@ +/* eslint-disable */ + +import Hook from '~/droplab/hook'; +import * as dropdownSrc from '~/droplab/drop_down'; + +describe('Hook', function () { + describe('class constructor', function () { + beforeEach(function () { + this.trigger = { id: 'id' }; + this.list = {}; + this.plugins = {}; + this.config = {}; + this.dropdown = {}; + + spyOn(dropdownSrc, 'default').and.returnValue(this.dropdown); + + this.hook = new Hook(this.trigger, this.list, this.plugins, this.config); + }); + + it('should set .trigger', function () { + expect(this.hook.trigger).toBe(this.trigger); + }); + + it('should set .list', function () { + expect(this.hook.list).toBe(this.dropdown); + }); + + it('should call DropDown constructor', function () { + expect(dropdownSrc.default).toHaveBeenCalledWith(this.list); + }); + + it('should set .type', function () { + expect(this.hook.type).toBe('Hook'); + }); + + it('should set .event', function () { + expect(this.hook.event).toBe('click'); + }); + + it('should set .plugins', function () { + expect(this.hook.plugins).toBe(this.plugins); + }); + + it('should set .config', function () { + expect(this.hook.config).toBe(this.config); + }); + + it('should set .id', function () { + expect(this.hook.id).toBe(this.trigger.id); + }); + + describe('if config argument is undefined', function () { + beforeEach(function () { + this.config = undefined; + + this.hook = new Hook(this.trigger, this.list, this.plugins, this.config); + }); + + it('should set .config to an empty object', function () { + expect(this.hook.config).toEqual({}); + }); + }); + + describe('if plugins argument is undefined', function () { + beforeEach(function () { + this.plugins = undefined; + + this.hook = new Hook(this.trigger, this.list, this.plugins, this.config); + }); + + it('should set .plugins to an empty array', function () { + expect(this.hook.plugins).toEqual([]); + }); + }); + }); + + describe('addEvents', function () { + it('should exist', function () { + expect(Hook.prototype.hasOwnProperty('addEvents')).toBe(true); + }); + }); +}); diff --git a/spec/javascripts/droplab/plugins/input_setter.js b/spec/javascripts/droplab/plugins/input_setter.js new file mode 100644 index 00000000000..81bb70fa6e5 --- /dev/null +++ b/spec/javascripts/droplab/plugins/input_setter.js @@ -0,0 +1,177 @@ +/* eslint-disable */ + +import InputSetter from '~/droplab/plugins/input_setter'; + +describe('InputSetter', function () { + describe('init', function () { + beforeEach(function () { + this.config = { InputSetter: {} }; + this.hook = { config: this.config }; + this.inputSetter = jasmine.createSpyObj('inputSetter', ['addEvents']); + + InputSetter.init.call(this.inputSetter, this.hook); + }); + + it('should set .hook', function () { + expect(this.inputSetter.hook).toBe(this.hook); + }); + + it('should set .config', function () { + expect(this.inputSetter.config).toBe(this.config.InputSetter); + }); + + it('should set .eventWrapper', function () { + expect(this.inputSetter.eventWrapper).toEqual({}); + }); + + it('should call .addEvents', function () { + expect(this.inputSetter.addEvents).toHaveBeenCalled(); + }); + + describe('if config.InputSetter is not set', function () { + beforeEach(function () { + this.config = { InputSetter: undefined }; + this.hook = { config: this.config }; + + InputSetter.init.call(this.inputSetter, this.hook); + }); + + it('should set .config to an empty object', function () { + expect(this.inputSetter.config).toEqual({}); + }); + + it('should set hook.config to an empty object', function () { + expect(this.hook.config.InputSetter).toEqual({}); + }); + }) + }); + + describe('addEvents', function () { + beforeEach(function () { + this.hook = { list: { list: jasmine.createSpyObj('list', ['addEventListener']) } }; + this.inputSetter = { eventWrapper: {}, hook: this.hook, setInputs: () => {} }; + + InputSetter.addEvents.call(this.inputSetter); + }); + + it('should set .eventWrapper.setInputs', function () { + expect(this.inputSetter.eventWrapper.setInputs).toEqual(jasmine.any(Function)); + }); + + it('should call .addEventListener', function () { + expect(this.hook.list.list.addEventListener) + .toHaveBeenCalledWith('click.dl', this.inputSetter.eventWrapper.setInputs); + }); + }); + + describe('removeEvents', function () { + beforeEach(function () { + this.hook = { list: { list: jasmine.createSpyObj('list', ['removeEventListener']) } }; + this.eventWrapper = jasmine.createSpyObj('eventWrapper', ['setInputs']); + this.inputSetter = { eventWrapper: this.eventWrapper, hook: this.hook }; + + InputSetter.removeEvents.call(this.inputSetter); + }); + + it('should call .removeEventListener', function () { + expect(this.hook.list.list.removeEventListener) + .toHaveBeenCalledWith('click.dl', this.eventWrapper.setInputs); + }); + }); + + describe('setInputs', function () { + beforeEach(function () { + this.event = { detail: { selected: {} } }; + this.config = [0, 1]; + this.inputSetter = { config: this.config, setInput: () => {} }; + + spyOn(this.inputSetter, 'setInput'); + + InputSetter.setInputs.call(this.inputSetter, this.event); + }); + + it('should call .setInput for each config element', function () { + const allArgs = this.inputSetter.setInput.calls.allArgs(); + + expect(allArgs.length).toEqual(2); + + allArgs.forEach((args, i) => { + expect(args[0]).toBe(this.config[i]); + expect(args[1]).toBe(this.event.detail.selected); + }); + }); + + describe('if config isnt an array', function () { + beforeEach(function () { + this.inputSetter = { config: {}, setInput: () => {} }; + + InputSetter.setInputs.call(this.inputSetter, this.event); + }); + + it('should set .config to an array with .config as the first element', function () { + expect(this.inputSetter.config).toEqual([{}]); + }); + }); + }); + + describe('setInput', function () { + beforeEach(function () { + this.selectedItem = { getAttribute: () => {} }; + this.input = { value: 'oldValue', tagName: 'INPUT' }; + this.config = { valueAttribute: {}, input: this.input }; + this.inputSetter = { hook: { trigger: {} } }; + this.newValue = 'newValue'; + + spyOn(this.selectedItem, 'getAttribute').and.returnValue(this.newValue); + + InputSetter.setInput.call(this.inputSetter, this.config, this.selectedItem); + }); + + it('should call .getAttribute', function () { + expect(this.selectedItem.getAttribute).toHaveBeenCalledWith(this.config.valueAttribute); + }); + + it('should set the value of the input', function () { + expect(this.input.value).toBe(this.newValue); + }) + + describe('if no config.input is provided', function () { + beforeEach(function () { + this.config = { valueAttribute: {} }; + this.trigger = { value: 'oldValue', tagName: 'INPUT' }; + this.inputSetter = { hook: { trigger: this.trigger } }; + + InputSetter.setInput.call(this.inputSetter, this.config, this.selectedItem); + }); + + it('should set the value of the hook.trigger', function () { + expect(this.trigger.value).toBe(this.newValue); + }); + }); + + describe('if the input tag is not INPUT', function () { + beforeEach(function () { + this.input = { textContent: 'oldValue', tagName: 'SPAN' }; + this.config = { valueAttribute: {}, input: this.input }; + + InputSetter.setInput.call(this.inputSetter, this.config, this.selectedItem); + }); + + it('should set the textContent of the input', function () { + expect(this.config.input.textContent).toBe(this.newValue); + }); + }); + }); + + describe('destroy', function () { + beforeEach(function () { + this.inputSetter = jasmine.createSpyObj('inputSetter', ['removeEvents']); + + InputSetter.destroy.call(this.inputSetter); + }); + + it('should call .removeEvents', function () { + expect(this.inputSetter.removeEvents).toHaveBeenCalled(); + }); + }); +}); diff --git a/spec/javascripts/filtered_search/dropdown_user_spec.js b/spec/javascripts/filtered_search/dropdown_user_spec.js index c16f77c53a2..2b1fe5e3eef 100644 --- a/spec/javascripts/filtered_search/dropdown_user_spec.js +++ b/spec/javascripts/filtered_search/dropdown_user_spec.js @@ -33,7 +33,7 @@ require('~/filtered_search/dropdown_user'); }); }); - describe('config droplabAjaxFilter\'s endpoint', () => { + describe('config AjaxFilter\'s endpoint', () => { beforeEach(() => { spyOn(gl.DropdownUser.prototype, 'bindEvents').and.callFake(() => {}); spyOn(gl.DropdownUser.prototype, 'getProjectId').and.callFake(() => {}); @@ -45,13 +45,13 @@ require('~/filtered_search/dropdown_user'); }; const dropdown = new gl.DropdownUser(); - expect(dropdown.config.droplabAjaxFilter.endpoint).toBe('/autocomplete/users.json'); + expect(dropdown.config.AjaxFilter.endpoint).toBe('/autocomplete/users.json'); }); it('should return endpoint when relative_url_root is undefined', () => { const dropdown = new gl.DropdownUser(); - expect(dropdown.config.droplabAjaxFilter.endpoint).toBe('/autocomplete/users.json'); + expect(dropdown.config.AjaxFilter.endpoint).toBe('/autocomplete/users.json'); }); it('should return endpoint with relative url when available', () => { @@ -60,7 +60,7 @@ require('~/filtered_search/dropdown_user'); }; const dropdown = new gl.DropdownUser(); - expect(dropdown.config.droplabAjaxFilter.endpoint).toBe('/gitlab_directory/autocomplete/users.json'); + expect(dropdown.config.AjaxFilter.endpoint).toBe('/gitlab_directory/autocomplete/users.json'); }); afterEach(() => { diff --git a/yarn.lock b/yarn.lock index 96584a6d111..ea639fa0523 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,12 +2,6 @@ # yarn lockfile v1 -"@gitlab-org/droplab@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@gitlab-org/droplab/-/droplab-0.1.0.tgz#934889d0f19417198e277415fdd336616b2e2c87" - dependencies: - custom-event-polyfill "^0.3.0" - abbrev@1, abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" @@ -1307,10 +1301,6 @@ crypto-browserify@^3.11.0: public-encrypt "^4.0.0" randombytes "^2.0.0" -custom-event-polyfill@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/custom-event-polyfill/-/custom-event-polyfill-0.3.0.tgz#99807839be62edb446b645832e0d80ead6fa1888" - custom-event@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" @@ -3773,7 +3763,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" dependencies: @@ -3785,16 +3775,7 @@ read-pkg@^1.0.0: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readable-stream@~1.0.2: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~2.0.0, readable-stream@~2.0.6: +readable-stream@^2.0.1, readable-stream@^2.0.5, readable-stream@~2.0.0, readable-stream@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" dependencies: @@ -3805,6 +3786,15 @@ readable-stream@~2.0.0, readable-stream@~2.0.6: string_decoder "~0.10.x" util-deprecate "~1.0.1" +readable-stream@~1.0.2: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" -- cgit v1.2.1