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 | 1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
2×
97×
97×
97×
97×
97×
97×
97×
97×
97×
1×
99×
1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
| (function(global){global.wrappers['/Users/lqez/Dev/summernote/src/js/base/module/HintPopover.js']=[function(require,module,exports,__dirname,__filename){ "use strict";
exports.__esModule = true;
var jquery_1 = require("jquery");
var func_1 = require("../core/func");
var lists_1 = require("../core/lists");
var dom_1 = require("../core/dom");
var range_1 = require("../core/range");
var key_1 = require("../core/key");
var POPOVER_DIST = 5;
var HintPopover = /** @class */ (function () {
function HintPopover(context) {
var _this = this;
this.context = context;
this.ui = jquery_1["default"].summernote.ui;
this.$editable = context.layoutInfo.editable;
this.options = context.options;
this.hint = this.options.hint || [];
this.direction = this.options.hintDirection || 'bottom';
this.hints = jquery_1["default"].isArray(this.hint) ? this.hint : [this.hint];
this.events = {
'summernote.keyup': function (we, e) {
if (!e.isDefaultPrevented()) {
_this.handleKeyup(e);
}
},
'summernote.keydown': function (we, e) {
_this.handleKeydown(e);
},
'summernote.disable summernote.dialog.shown': function () {
_this.hide();
}
};
}
HintPopover.prototype.shouldInitialize = function () {
return this.hints.length > 0;
};
HintPopover.prototype.initialize = function () {
var _this = this;
this.lastWordRange = null;
this.$popover = this.ui.popover({
className: 'note-hint-popover',
hideArrow: true,
direction: ''
}).render().appendTo(this.options.container);
this.$popover.hide();
this.$content = this.$popover.find('.popover-content,.note-popover-content');
this.$content.on('click', '.note-hint-item', function (e) {
_this.$content.find('.active').removeClass('active');
jquery_1["default"](e.currentTarget).addClass('active');
_this.replace();
});
};
HintPopover.prototype.destroy = function () {
this.$popover.remove();
};
HintPopover.prototype.selectItem = function ($item) {
this.$content.find('.active').removeClass('active');
$item.addClass('active');
this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2);
};
HintPopover.prototype.moveDown = function () {
var $current = this.$content.find('.note-hint-item.active');
var $next = $current.next();
if ($next.length) {
this.selectItem($next);
}
else {
var $nextGroup = $current.parent().next();
if (!$nextGroup.length) {
$nextGroup = this.$content.find('.note-hint-group').first();
}
this.selectItem($nextGroup.find('.note-hint-item').first());
}
};
HintPopover.prototype.moveUp = function () {
var $current = this.$content.find('.note-hint-item.active');
var $prev = $current.prev();
if ($prev.length) {
this.selectItem($prev);
}
else {
var $prevGroup = $current.parent().prev();
if (!$prevGroup.length) {
$prevGroup = this.$content.find('.note-hint-group').last();
}
this.selectItem($prevGroup.find('.note-hint-item').last());
}
};
HintPopover.prototype.replace = function () {
var $item = this.$content.find('.note-hint-item.active');
if ($item.length) {
var node = this.nodeFromItem($item);
// XXX: consider to move codes to editor for recording redo/undo.
this.lastWordRange.insertNode(node);
range_1["default"].createFromNode(node).collapse().select();
this.lastWordRange = null;
this.hide();
this.context.triggerEvent('change', this.$editable.html(), this.$editable[0]);
this.context.invoke('editor.focus');
}
};
HintPopover.prototype.nodeFromItem = function ($item) {
var hint = this.hints[$item.data('index')];
var item = $item.data('item');
var node = hint.content ? hint.content(item) : item;
if (typeof node === 'string') {
node = dom_1["default"].createText(node);
}
return node;
};
HintPopover.prototype.createItemTemplates = function (hintIdx, items) {
var hint = this.hints[hintIdx];
return items.map(function (item, idx) {
var $item = jquery_1["default"]('<div class="note-hint-item"/>');
$item.append(hint.template ? hint.template(item) : item + '');
$item.data({
'index': hintIdx,
'item': item
});
return $item;
});
};
HintPopover.prototype.handleKeydown = function (e) {
if (!this.$popover.is(':visible')) {
return;
}
if (e.keyCode === key_1["default"].code.ENTER) {
e.preventDefault();
this.replace();
}
else if (e.keyCode === key_1["default"].code.UP) {
e.preventDefault();
this.moveUp();
}
else if (e.keyCode === key_1["default"].code.DOWN) {
e.preventDefault();
this.moveDown();
}
};
HintPopover.prototype.searchKeyword = function (index, keyword, callback) {
var hint = this.hints[index];
if (hint && hint.match.test(keyword) && hint.search) {
var matches = hint.match.exec(keyword);
hint.search(matches[1], callback);
}
else {
callback();
}
};
HintPopover.prototype.createGroup = function (idx, keyword) {
var _this = this;
var $group = jquery_1["default"]('<div class="note-hint-group note-hint-group-' + idx + '"/>');
this.searchKeyword(idx, keyword, function (items) {
items = items || [];
if (items.length) {
$group.html(_this.createItemTemplates(idx, items));
_this.show();
}
});
return $group;
};
HintPopover.prototype.handleKeyup = function (e) {
var _this = this;
if (!lists_1["default"].contains([key_1["default"].code.ENTER, key_1["default"].code.UP, key_1["default"].code.DOWN], e.keyCode)) {
var wordRange = this.context.invoke('editor.getLastRange').getWordRange();
var keyword_1 = wordRange.toString();
if (this.hints.length && keyword_1) {
this.$content.empty();
var bnd = func_1["default"].rect2bnd(lists_1["default"].last(wordRange.getClientRects()));
if (bnd) {
this.$popover.hide();
this.lastWordRange = wordRange;
this.hints.forEach(function (hint, idx) {
if (hint.match.test(keyword_1)) {
_this.createGroup(idx, keyword_1).appendTo(_this.$content);
}
});
// select first .note-hint-item
this.$content.find('.note-hint-item:first').addClass('active');
// set position for popover after group is created
if (this.direction === 'top') {
this.$popover.css({
left: bnd.left,
top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST
});
}
else {
this.$popover.css({
left: bnd.left,
top: bnd.top + bnd.height + POPOVER_DIST
});
}
}
}
else {
this.hide();
}
}
};
HintPopover.prototype.show = function () {
this.$popover.show();
};
HintPopover.prototype.hide = function () {
this.$popover.hide();
};
return HintPopover;
}());
exports["default"] = HintPopover;
},'src/js/base/module/HintPopover.js',{"jquery":"/Users/lqez/Dev/summernote/node_modules/jquery/dist/jquery.js","../core/func":"/Users/lqez/Dev/summernote/src/js/base/core/func.js","../core/lists":"/Users/lqez/Dev/summernote/src/js/base/core/lists.js","../core/dom":"/Users/lqez/Dev/summernote/src/js/base/core/dom.js","../core/range":"/Users/lqez/Dev/summernote/src/js/base/core/range.js","../core/key":"/Users/lqez/Dev/summernote/src/js/base/core/key.js"}];})(this);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGludFBvcG92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJIaW50UG9wb3Zlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUF1QjtBQUN2QixxQ0FBZ0M7QUFDaEMsdUNBQWtDO0FBQ2xDLG1DQUE4QjtBQUM5Qix1Q0FBa0M7QUFDbEMsbUNBQThCO0FBRTlCLElBQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUV2QjtJQUNFLHFCQUFZLE9BQU87UUFBbkIsaUJBdUJDO1FBdEJDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZCLElBQUksQ0FBQyxFQUFFLEdBQUcsbUJBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksUUFBUSxDQUFDO1FBQ3hELElBQUksQ0FBQyxLQUFLLEdBQUcsbUJBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1RCxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osa0JBQWtCLEVBQUUsVUFBQyxFQUFFLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO29CQUMzQixLQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNyQjtZQUNILENBQUM7WUFDRCxvQkFBb0IsRUFB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QUFJLEdBQUo7UUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCwwQkFBSSxHQUFKO1FBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBeE5ELElBd05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBmdW5jIGZyb20gJy4uL2NvcmUvZnVuYyc7XG5pbXBvcnQgbGlzdHMgZnJvbSAnLi4vY29yZS9saXN0cyc7XG5pbXBvcnQgZG9tIGZyb20gJy4uL2NvcmUvZG9tJztcbmltcG9ydCByYW5nZSBmcm9tICcuLi9jb3JlL3JhbmdlJztcbmltcG9ydCBrZXkgZnJvbSAnLi4vY29yZS9rZXknO1xuXG5jb25zdCBQT1BPVkVSX0RJU1QgPSA1O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIaW50UG9wb3ZlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgdGhpcy51aSA9ICQuc3VtbWVybm90ZS51aTtcbiAgICB0aGlzLiRlZGl0YWJsZSA9IGNvbnRleHQubGF5b3V0SW5mby5lZGl0YWJsZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnM7XG4gICAgdGhpcy5oaW50ID0gdGhpcy5vcHRpb25zLmhpbnQgfHwgW107XG4gICAgdGhpcy5kaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuaGludERpcmVjdGlvbiB8fCAnYm90dG9tJztcbiAgICB0aGlzLmhpbnRzID0gJC5pc0FycmF5KHRoaXMuaGludCkgPyB0aGlzLmhpbnQgOiBbdGhpcy5oaW50XTtcblxuICAgIHRoaXMuZXZlbnRzID0ge1xuICAgICAgJ3N1bW1lcm5vdGUua2V5dXAnOiAod2UsIGUpID0+IHtcbiAgICAgICAgaWYgKCFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVLZXl1cChlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICdzdW1tZXJub3RlLmtleWRvd24nOiAod2UsIGUpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVLZXlkb3duKGUpO1xuICAgICAgfSxcbiAgICAgICdzdW1tZXJub3RlLmRpc2FibGUgc3VtbWVybm90ZS5kaWFsb2cuc2hvd24nOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgc2hvdWxkSW5pdGlhbGl6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oaW50cy5sZW5ndGggPiAwO1xuICB9XG5cbiAgaW5pdGlhbGl6ZSgpIHtcbiAgICB0aGlzLmxhc3RXb3JkUmFuZ2UgPSBudWxsO1xuICAgIHRoaXMuJHBvcG92ZXIgPSB0aGlzLnVpLnBvcG92ZXIoe1xuICAgICAgY2xhc3NOYW1lOiAnbm90ZS1oaW50LXBvcG92ZXInLFxuICAgICAgaGlkZUFycm93OiB0cnVlLFxuICAgICAgZGlyZWN0aW9uOiAnJyxcbiAgICB9KS5yZW5kZXIoKS5hcHBlbmRUbyh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTtcblxuICAgIHRoaXMuJHBvcG92ZXIuaGlkZSgpO1xuICAgIHRoaXMuJGNvbnRlbnQgPSB0aGlzLiRwb3BvdmVyLmZpbmQoJy5wb3BvdmVyLWNvbnRlbnQsLm5vdGUtcG9wb3Zlci1jb250ZW50Jyk7XG4gICAgdGhpcy4kY29udGVudC5vbignY2xpY2snLCAnLm5vdGUtaGludC1pdGVtJywgKGUpID0+IHtcbiAgICAgIHRoaXMuJGNvbnRlbnQuZmluZCgnLmFjdGl2ZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICQoZS5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICB0aGlzLnJlcGxhY2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kcG9wb3Zlci5yZW1vdmUoKTtcbiAgfVxuXG4gIHNlbGVjdEl0ZW0oJGl0ZW0pIHtcbiAgICB0aGlzLiRjb250ZW50LmZpbmQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgJGl0ZW0uYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXG4gICAgdGhpcy4kY29udGVudFswXS5zY3JvbGxUb3AgPSAkaXRlbVswXS5vZmZzZXRUb3AgLSAodGhpcy4kY29udGVudC5pbm5lckhlaWdodCgpIC8gMik7XG4gIH1cblxuICBtb3ZlRG93bigpIHtcbiAgICBjb25zdCAkY3VycmVudCA9IHRoaXMuJGNvbnRlbnQuZmluZCgnLm5vdGUtaGludC1pdGVtLmFjdGl2ZScpO1xuICAgIGNvbnN0ICRuZXh0ID0gJGN1cnJlbnQubmV4dCgpO1xuXG4gICAgaWYgKCRuZXh0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RJdGVtKCRuZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0ICRuZXh0R3JvdXAgPSAkY3VycmVudC5wYXJlbnQoKS5uZXh0KCk7XG5cbiAgICAgIGlmICghJG5leHRHcm91cC5sZW5ndGgpIHtcbiAgICAgICAgJG5leHRHcm91cCA9IHRoaXMuJGNvbnRlbnQuZmluZCgnLm5vdGUtaGludC1ncm91cCcpLmZpcnN0KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0SXRlbSgkbmV4dEdyb3VwLmZpbmQoJy5ub3RlLWhpbnQtaXRlbScpLmZpcnN0KCkpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVVcCgpIHtcbiAgICBjb25zdCAkY3VycmVudCA9IHRoaXMuJGNvbnRlbnQuZmluZCgnLm5vdGUtaGludC1pdGVtLmFjdGl2ZScpO1xuICAgIGNvbnN0ICRwcmV2ID0gJGN1cnJlbnQucHJldigpO1xuXG4gICAgaWYgKCRwcmV2Lmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RJdGVtKCRwcmV2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0ICRwcmV2R3JvdXAgPSAkY3VycmVudC5wYXJlbnQoKS5wcmV2KCk7XG5cbiAgICAgIGlmICghJHByZXZHcm91cC5sZW5ndGgpIHtcbiAgICAgICAgJHByZXZHcm91cCA9IHRoaXMuJGNvbnRlbnQuZmluZCgnLm5vdGUtaGludC1ncm91cCcpLmxhc3QoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZWxlY3RJdGVtKCRwcmV2R3JvdXAuZmluZCgnLm5vdGUtaGludC1pdGVtJykubGFzdCgpKTtcbiAgICB9XG4gIH1cblxuICByZXBsYWNlKCkge1xuICAgIGNvbnN0ICRpdGVtID0gdGhpcy4kY29udGVudC5maW5kKCcubm90ZS1oaW50LWl0ZW0uYWN0aXZlJyk7XG5cbiAgICBpZiAoJGl0ZW0ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ub2RlRnJvbUl0ZW0oJGl0ZW0pO1xuICAgICAgLy8gWFhYOiBjb25zaWRlciB0byBtb3ZlIGNvZGVzIHRvIGVkaXRvciBmb3IgcmVjb3JkaW5nIHJlZG8vdW5kby5cbiAgICAgIHRoaXMubGFzdFdvcmRSYW5nZS5pbnNlcnROb2RlKG5vZGUpO1xuICAgICAgcmFuZ2UuY3JlYXRlRnJvbU5vZGUobm9kZSkuY29sbGFwc2UoKS5zZWxlY3QoKTtcblxuICAgICAgdGhpcy5sYXN0V29yZFJhbmdlID0gbnVsbDtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgdGhpcy5jb250ZXh0LnRyaWdnZXJFdmVudCgnY2hhbmdlJywgdGhpcy4kZWRpdGFibGUuaHRtbCgpLCB0aGlzLiRlZGl0YWJsZVswXSk7XG4gICAgICB0aGlzLmNvbnRleHQuaW52b2tlKCdlZGl0b3IuZm9jdXMnKTtcbiAgICB9XG4gIH1cblxuICBub2RlRnJvbUl0ZW0oJGl0ZW0pIHtcbiAgICBjb25zdCBoaW50ID0gdGhpcy5oaW50c1skaXRlbS5kYXRhKCdpbmRleCcpXTtcbiAgICBjb25zdCBpdGVtID0gJGl0ZW0uZGF0YSgnaXRlbScpO1xuICAgIGxldCBub2RlID0gaGludC5jb250ZW50ID8gaGludC5jb250ZW50KGl0ZW0pIDogaXRlbTtcbiAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBub2RlID0gZG9tLmNyZWF0ZVRleHQobm9kZSk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgY3JlYXRlSXRlbVRlbXBsYXRlcyhoaW50SWR4LCBpdGVtcykge1xuICAgIGNvbnN0IGhpbnQgPSB0aGlzLmhpbnRzW2hpbnRJZHhdO1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgY29uc3QgJGl0ZW0gPSAkKCc8ZGl2IGNsYXNzPVwibm90ZS1oaW50LWl0ZW1cIi8+Jyk7XG4gICAgICAkaXRlbS5hcHBlbmQoaGludC50ZW1wbGF0ZSA/IGhpbnQudGVtcGxhdGUoaXRlbSkgOiBpdGVtICsgJycpO1xuICAgICAgJGl0ZW0uZGF0YSh7XG4gICAgICAgICdpbmRleCc6IGhpbnRJZHgsXG4gICAgICAgICdpdGVtJzogaXRlbSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICRpdGVtO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlS2V5ZG93bihlKSB7XG4gICAgaWYgKCF0aGlzLiRwb3BvdmVyLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGUua2V5Q29kZSA9PT0ga2V5LmNvZGUuRU5URVIpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMucmVwbGFjZSgpO1xuICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSBrZXkuY29kZS5VUCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5tb3ZlVXAoKTtcbiAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0ga2V5LmNvZGUuRE9XTikge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5tb3ZlRG93bigpO1xuICAgIH1cbiAgfVxuXG4gIHNlYXJjaEtleXdvcmQoaW5kZXgsIGtleXdvcmQsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgaGludCA9IHRoaXMuaGludHNbaW5kZXhdO1xuICAgIGlmIChoaW50ICYmIGhpbnQubWF0Y2gudGVzdChrZXl3b3JkKSAmJiBoaW50LnNlYXJjaCkge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGhpbnQubWF0Y2guZXhlYyhrZXl3b3JkKTtcbiAgICAgIGhpbnQuc2VhcmNoKG1hdGNoZXNbMV0sIGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVHcm91cChpZHgsIGtleXdvcmQpIHtcbiAgICBjb25zdCAkZ3JvdXAgPSAkKCc8ZGl2IGNsYXNzPVwibm90ZS1oaW50LWdyb3VwIG5vdGUtaGludC1ncm91cC0nICsgaWR4ICsgJ1wiLz4nKTtcbiAgICB0aGlzLnNlYXJjaEtleXdvcmQoaWR4LCBrZXl3b3JkLCAoaXRlbXMpID0+IHtcbiAgICAgIGl0ZW1zID0gaXRlbXMgfHwgW107XG4gICAgICBpZiAoaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICRncm91cC5odG1sKHRoaXMuY3JlYXRlSXRlbVRlbXBsYXRlcyhpZHgsIGl0ZW1zKSk7XG4gICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuICRncm91cDtcbiAgfVxuXG4gIGhhbmRsZUtleXVwKGUpIHtcbiAgICBpZiAoIWxpc3RzLmNvbnRhaW5zKFtrZXkuY29kZS5FTlRFUiwga2V5LmNvZGUuVVAsIGtleS5jb2RlLkRPV05dLCBlLmtleUNvZGUpKSB7XG4gICAgICBjb25zdCB3b3JkUmFuZ2UgPSB0aGlzLmNvbnRleHQuaW52b2tlKCdlZGl0b3IuZ2V0TGFzdFJhbmdlJykuZ2V0V29yZFJhbmdlKCk7XG4gICAgICBjb25zdCBrZXl3b3JkID0gd29yZFJhbmdlLnRvU3RyaW5nKCk7XG4gICAgICBpZiAodGhpcy5oaW50cy5sZW5ndGggJiYga2V5d29yZCkge1xuICAgICAgICB0aGlzLiRjb250ZW50LmVtcHR5KCk7XG5cbiAgICAgICAgY29uc3QgYm5kID0gZnVuYy5yZWN0MmJuZChsaXN0cy5sYXN0KHdvcmRSYW5nZS5nZXRDbGllbnRSZWN0cygpKSk7XG4gICAgICAgIGlmIChibmQpIHtcbiAgICAgICAgICB0aGlzLiRwb3BvdmVyLmhpZGUoKTtcbiAgICAgICAgICB0aGlzLmxhc3RXb3JkUmFuZ2UgPSB3b3JkUmFuZ2U7XG4gICAgICAgICAgdGhpcy5oaW50cy5mb3JFYWNoKChoaW50LCBpZHgpID0+IHtcbiAgICAgICAgICAgIGlmIChoaW50Lm1hdGNoLnRlc3Qoa2V5d29yZCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cChpZHgsIGtleXdvcmQpLmFwcGVuZFRvKHRoaXMuJGNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIHNlbGVjdCBmaXJzdCAubm90ZS1oaW50LWl0ZW1cbiAgICAgICAgICB0aGlzLiRjb250ZW50LmZpbmQoJy5ub3RlLWhpbnQtaXRlbTpmaXJzdCcpLmFkZENsYXNzKCdhY3RpdmUnKTtcblxuICAgICAgICAgIC8vIHNldCBwb3NpdGlvbiBmb3IgcG9wb3ZlciBhZnRlciBncm91cCBpcyBjcmVhdGVkXG4gICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAndG9wJykge1xuICAgICAgICAgICAgdGhpcy4kcG9wb3Zlci5jc3Moe1xuICAgICAgICAgICAgICBsZWZ0OiBibmQubGVmdCxcbiAgICAgICAgICAgICAgdG9wOiBibmQudG9wIC0gdGhpcy4kcG9wb3Zlci5vdXRlckhlaWdodCgpIC0gUE9QT1ZFUl9ESVNULFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJHBvcG92ZXIuY3NzKHtcbiAgICAgICAgICAgICAgbGVmdDogYm5kLmxlZnQsXG4gICAgICAgICAgICAgIHRvcDogYm5kLnRvcCArIGJuZC5oZWlnaHQgKyBQT1BPVkVSX0RJU1QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNob3coKSB7XG4gICAgdGhpcy4kcG9wb3Zlci5zaG93KCk7XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHRoaXMuJHBvcG92ZXIuaGlkZSgpO1xuICB9XG59XG4iXX0=
|