1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
/******/ (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
|