@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
293 lines • 27.9 kB
JavaScript
import { __decorate, __extends, __metadata, __param, __values } from "tslib";
import { Input, HostBinding, ElementRef, QueryList, Output, EventEmitter, ChangeDetectorRef, Optional, Inject, Directive } from '@angular/core';
import { Navigate } from './drop-down.common';
import { DropDownActionKey } from './drop-down.common';
import { DisplayDensityBase, DisplayDensityToken } from '../core/density';
var NEXT_ID = 0;
/**
* An abstract class, defining a drop-down component, with:
* Properties for display styles and classes
* A collection items of type `IgxDropDownItemBaseDirective`
* Properties and methods for navigating (highlighting/focusing) items from the collection
* Properties and methods for selecting items from the collection
*/
var IgxDropDownBaseDirective = /** @class */ (function (_super) {
__extends(IgxDropDownBaseDirective, _super);
function IgxDropDownBaseDirective(elementRef, cdr, _displayDensityOptions) {
var _this = _super.call(this, _displayDensityOptions) || this;
_this.elementRef = elementRef;
_this.cdr = cdr;
_this._displayDensityOptions = _displayDensityOptions;
_this._focusedItem = null;
_this._id = "igx-drop-down-" + NEXT_ID++;
/**
* Emitted when item selection is changing, before the selection completes
*
* ```html
* <igx-drop-down (onSelection)='handleSelection()'></igx-drop-down>
* ```
*/
_this.onSelection = new EventEmitter();
/**
* Gets/Sets the drop down's container max height.
*
* ```typescript
* // get
* let maxHeight = this.dropdown.maxHeight;
* ```
* ```html
* <!--set-->
* <igx-drop-down [maxHeight]='200px'></igx-drop-down>
* ```
*/
_this.maxHeight = null;
/**
* @hidden @internal
*/
_this.cssClass = true;
return _this;
}
Object.defineProperty(IgxDropDownBaseDirective.prototype, "scrollContainer", {
/**
* @hidden @internal
* Get dropdown's html element of its scroll container
*/
get: function () {
return this.element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxDropDownBaseDirective.prototype, "items", {
/**
* Get all non-header items
*
* ```typescript
* let myDropDownItems = this.dropdown.items;
* ```
*/
get: function () {
var e_1, _a;
var items = [];
if (this.children !== undefined) {
try {
for (var _b = __values(this.children.toArray()), _c = _b.next(); !_c.done; _c = _b.next()) {
var child = _c.value;
if (!child.isHeader) {
items.push(child);
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
}
return items;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxDropDownBaseDirective.prototype, "headers", {
/**
* Get all header items
*
* ```typescript
* let myDropDownHeaderItems = this.dropdown.headers;
* ```
*/
get: function () {
var e_2, _a;
var headers = [];
if (this.children !== undefined) {
try {
for (var _b = __values(this.children.toArray()), _c = _b.next(); !_c.done; _c = _b.next()) {
var child = _c.value;
if (child.isHeader) {
headers.push(child);
}
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_2) throw e_2.error; }
}
}
return headers;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxDropDownBaseDirective.prototype, "element", {
/**
* Get dropdown html element
*
* ```typescript
* let myDropDownElement = this.dropdown.element;
* ```
*/
get: function () {
return this.elementRef.nativeElement;
},
enumerable: true,
configurable: true
});
/** Keydown Handler */
IgxDropDownBaseDirective.prototype.onItemActionKey = function (key, event) {
switch (key) {
case DropDownActionKey.ENTER:
case DropDownActionKey.SPACE:
this.selectItem(this.focusedItem, event);
break;
case DropDownActionKey.ESCAPE:
}
};
/**
* Emits onSelection with the target item & event
* @hidden @internal
* @param newSelection the item selected
* @param event the event that triggered the call
*/
IgxDropDownBaseDirective.prototype.selectItem = function (newSelection, event) {
this.onSelection.emit({
newSelection: newSelection,
oldSelection: null,
cancel: false
});
};
Object.defineProperty(IgxDropDownBaseDirective.prototype, "focusedItem", {
/**
* @hidden @internal
*/
get: function () {
return this._focusedItem;
},
/**
* @hidden @internal
*/
set: function (item) {
this._focusedItem = item;
},
enumerable: true,
configurable: true
});
IgxDropDownBaseDirective.prototype.navigate = function (direction, currentIndex) {
var index = -1;
if (this._focusedItem) {
index = currentIndex ? currentIndex : this.focusedItem.itemIndex;
}
var newIndex = this.getNearestSiblingFocusableItemIndex(index, direction);
this.navigateItem(newIndex);
};
IgxDropDownBaseDirective.prototype.getNearestSiblingFocusableItemIndex = function (startIndex, direction) {
var index = startIndex;
var items = this.items;
while (items[index + direction] && items[index + direction].disabled) {
index += direction;
}
index += direction;
if (index >= 0 && index < items.length) {
return index;
}
else {
return -1;
}
};
/**
* Navigates to the item on the specified index
* @param newIndex number - the index of the item in the `items` collection
*/
IgxDropDownBaseDirective.prototype.navigateItem = function (newIndex) {
if (newIndex !== -1) {
var oldItem = this._focusedItem;
var newItem = this.items[newIndex];
if (oldItem) {
oldItem.focused = false;
}
this.focusedItem = newItem;
this.scrollToHiddenItem(newItem);
this.focusedItem.focused = true;
}
};
/**
* @hidden @internal
*/
IgxDropDownBaseDirective.prototype.navigateFirst = function () {
this.navigate(Navigate.Down, -1);
};
/**
* @hidden @internal
*/
IgxDropDownBaseDirective.prototype.navigateLast = function () {
this.navigate(Navigate.Up, this.items.length);
};
/**
* @hidden @internal
*/
IgxDropDownBaseDirective.prototype.navigateNext = function () {
this.navigate(Navigate.Down);
};
/**
* @hidden @internal
*/
IgxDropDownBaseDirective.prototype.navigatePrev = function () {
this.navigate(Navigate.Up);
};
IgxDropDownBaseDirective.prototype.scrollToHiddenItem = function (newItem) {
var elementRect = newItem.element.nativeElement.getBoundingClientRect();
var parentRect = this.scrollContainer.getBoundingClientRect();
if (parentRect.top > elementRect.top) {
this.scrollContainer.scrollTop -= (parentRect.top - elementRect.top);
}
if (parentRect.bottom < elementRect.bottom) {
this.scrollContainer.scrollTop += (elementRect.bottom - parentRect.bottom);
}
};
IgxDropDownBaseDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: ChangeDetectorRef },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DisplayDensityToken,] }] }
]; };
__decorate([
Output(),
__metadata("design:type", Object)
], IgxDropDownBaseDirective.prototype, "onSelection", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], IgxDropDownBaseDirective.prototype, "width", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], IgxDropDownBaseDirective.prototype, "height", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], IgxDropDownBaseDirective.prototype, "id", void 0);
__decorate([
Input(),
HostBinding('style.maxHeight'),
__metadata("design:type", Object)
], IgxDropDownBaseDirective.prototype, "maxHeight", void 0);
__decorate([
HostBinding('class.igx-drop-down'),
__metadata("design:type", Object)
], IgxDropDownBaseDirective.prototype, "cssClass", void 0);
IgxDropDownBaseDirective = __decorate([
Directive({
selector: '[igxDropDownBase]'
}),
__param(2, Optional()), __param(2, Inject(DisplayDensityToken)),
__metadata("design:paramtypes", [ElementRef,
ChangeDetectorRef, Object])
], IgxDropDownBaseDirective);
return IgxDropDownBaseDirective;
}(DisplayDensityBase));
export { IgxDropDownBaseDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1kb3duLmJhc2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2Ryb3AtZG93bi9kcm9wLWRvd24uYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUNsSCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLG9CQUFvQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFFaEI7Ozs7OztHQU1HO0FBSUg7SUFBOEMsNENBQWtCO0lBeUo1RCxrQ0FDYyxVQUFzQixFQUN0QixHQUFzQixFQUNtQixzQkFBOEM7UUFIckcsWUFJUSxrQkFBTSxzQkFBc0IsQ0FBQyxTQUNoQztRQUpTLGdCQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFNBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ21CLDRCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUF6SjNGLGtCQUFZLEdBQVEsSUFBSSxDQUFDO1FBQ3pCLFNBQUcsR0FBRyxtQkFBaUIsT0FBTyxFQUFJLENBQUM7UUFnQjdDOzs7Ozs7V0FNRztRQUVJLGlCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUErQzdEOzs7Ozs7Ozs7OztXQVdHO1FBR0ksZUFBUyxHQUFHLElBQUksQ0FBQztRQUV4Qjs7V0FFRztRQUVJLGNBQVEsR0FBRyxJQUFJLENBQUM7O0lBK0RuQixDQUFDO0lBcEpMLHNCQUFXLHFEQUFlO1FBSjFCOzs7V0FHRzthQUNIO1lBQ0ksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7OztPQUFBO0lBNEZELHNCQUFXLDJDQUFLO1FBUGhCOzs7Ozs7V0FNRzthQUNIOztZQUNJLElBQU0sS0FBSyxHQUFtQyxFQUFFLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTs7b0JBQzdCLEtBQW9CLElBQUEsS0FBQSxTQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUEsZ0JBQUEsNEJBQUU7d0JBQXhDLElBQU0sS0FBSyxXQUFBO3dCQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFOzRCQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUNyQjtxQkFDSjs7Ozs7Ozs7O2FBQ0o7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDOzs7T0FBQTtJQVNELHNCQUFXLDZDQUFPO1FBUGxCOzs7Ozs7V0FNRzthQUNIOztZQUNJLElBQU0sT0FBTyxHQUFtQyxFQUFFLENBQUM7WUFDbkQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTs7b0JBQzdCLEtBQW9CLElBQUEsS0FBQSxTQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUEsZ0JBQUEsNEJBQUU7d0JBQXhDLElBQU0sS0FBSyxXQUFBO3dCQUNaLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTs0QkFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDdkI7cUJBQ0o7Ozs7Ozs7OzthQUNKO1lBRUQsT0FBTyxPQUFPLENBQUM7UUFDbkIsQ0FBQzs7O09BQUE7SUFTRCxzQkFBVyw2Q0FBTztRQVBsQjs7Ozs7O1dBTUc7YUFDSDtZQUNJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDekMsQ0FBQzs7O09BQUE7SUFjRCxzQkFBc0I7SUFDZixrREFBZSxHQUF0QixVQUF1QixHQUFzQixFQUFFLEtBQWE7UUFDeEQsUUFBUSxHQUFHLEVBQUU7WUFDVCxLQUFLLGlCQUFpQixDQUFDLEtBQUssQ0FBQztZQUM3QixLQUFLLGlCQUFpQixDQUFDLEtBQUs7Z0JBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekMsTUFBTTtZQUNWLEtBQUssaUJBQWlCLENBQUMsTUFBTSxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksNkNBQVUsR0FBakIsVUFBa0IsWUFBMkMsRUFBRSxLQUFhO1FBQ3hFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2xCLFlBQVksY0FBQTtZQUNaLFlBQVksRUFBRSxJQUFJO1lBQ2xCLE1BQU0sRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFLRCxzQkFBVyxpREFBVztRQUh0Qjs7V0FFRzthQUNIO1lBQ0ksT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzdCLENBQUM7UUFFRDs7V0FFRzthQUNILFVBQXVCLElBQWtDO1lBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7OztPQVBBO0lBU1MsMkNBQVEsR0FBbEIsVUFBbUIsU0FBbUIsRUFBRSxZQUFxQjtRQUN6RCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNmLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1NBQ3BFO1FBQ0QsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFUyxzRUFBbUMsR0FBN0MsVUFBOEMsVUFBa0IsRUFBRSxTQUFtQjtRQUNqRixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDdkIsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDbEUsS0FBSyxJQUFJLFNBQVMsQ0FBQztTQUN0QjtRQUVELEtBQUssSUFBSSxTQUFTLENBQUM7UUFDbkIsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO2FBQU07WUFDSCxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ2I7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksK0NBQVksR0FBbkIsVUFBb0IsUUFBZ0I7UUFDaEMsSUFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDakIsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNsQyxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLElBQUksT0FBTyxFQUFFO2dCQUNULE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2FBQzNCO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLGdEQUFhLEdBQXBCO1FBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksK0NBQVksR0FBbkI7UUFDSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSwrQ0FBWSxHQUFuQjtRQUNJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLCtDQUFZLEdBQW5CO1FBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVTLHFEQUFrQixHQUE1QixVQUE2QixPQUFxQztRQUM5RCxJQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzFFLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNoRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5RTtJQUNMLENBQUM7O2dCQTVIeUIsVUFBVTtnQkFDakIsaUJBQWlCO2dEQUMvQixRQUFRLFlBQUksTUFBTSxTQUFDLG1CQUFtQjs7SUFoSTNDO1FBREMsTUFBTSxFQUFFOztpRUFDb0Q7SUFlN0Q7UUFEQyxLQUFLLEVBQUU7OzJEQUNhO0lBZXJCO1FBREMsS0FBSyxFQUFFOzs0REFDYztJQWV0QjtRQURDLEtBQUssRUFBRTs7d0RBQ1U7SUFnQmxCO1FBRkMsS0FBSyxFQUFFO1FBQ1AsV0FBVyxDQUFDLGlCQUFpQixDQUFDOzsrREFDUDtJQU14QjtRQURDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQzs7OERBQ1o7SUEvRmQsd0JBQXdCO1FBSHBDLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxtQkFBbUI7U0FDaEMsQ0FBQztRQTZKTyxXQUFBLFFBQVEsRUFBRSxDQUFBLEVBQUUsV0FBQSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTt5Q0FGbEIsVUFBVTtZQUNqQixpQkFBaUI7T0EzSjNCLHdCQUF3QixDQXVScEM7SUFBRCwrQkFBQztDQUFBLEFBdlJELENBQThDLGtCQUFrQixHQXVSL0Q7U0F2Ulksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBJbnB1dCwgSG9zdEJpbmRpbmcsIEVsZW1lbnRSZWYsIFF1ZXJ5TGlzdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmLCBPcHRpb25hbCwgSW5qZWN0LCBEaXJlY3RpdmVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5hdmlnYXRlLCBJU2VsZWN0aW9uRXZlbnRBcmdzIH0gZnJvbSAnLi9kcm9wLWRvd24uY29tbW9uJztcbmltcG9ydCB7IElEcm9wRG93bkxpc3QgfSBmcm9tICcuL2Ryb3AtZG93bi5jb21tb24nO1xuaW1wb3J0IHsgRHJvcERvd25BY3Rpb25LZXkgfSBmcm9tICcuL2Ryb3AtZG93bi5jb21tb24nO1xuaW1wb3J0IHsgSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vZHJvcC1kb3duLWl0ZW0uYmFzZSc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eUJhc2UsIERpc3BsYXlEZW5zaXR5VG9rZW4sIElEaXNwbGF5RGVuc2l0eU9wdGlvbnMgfSBmcm9tICcuLi9jb3JlL2RlbnNpdHknO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogQW4gYWJzdHJhY3QgY2xhc3MsIGRlZmluaW5nIGEgZHJvcC1kb3duIGNvbXBvbmVudCwgd2l0aDpcbiAqIFByb3BlcnRpZXMgZm9yIGRpc3BsYXkgc3R5bGVzIGFuZCBjbGFzc2VzXG4gKiBBIGNvbGxlY3Rpb24gaXRlbXMgb2YgdHlwZSBgSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZWBcbiAqIFByb3BlcnRpZXMgYW5kIG1ldGhvZHMgZm9yIG5hdmlnYXRpbmcgKGhpZ2hsaWdodGluZy9mb2N1c2luZykgaXRlbXMgZnJvbSB0aGUgY29sbGVjdGlvblxuICogUHJvcGVydGllcyBhbmQgbWV0aG9kcyBmb3Igc2VsZWN0aW5nIGl0ZW1zIGZyb20gdGhlIGNvbGxlY3Rpb25cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4RHJvcERvd25CYXNlXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RHJvcERvd25CYXNlRGlyZWN0aXZlIGV4dGVuZHMgRGlzcGxheURlbnNpdHlCYXNlIGltcGxlbWVudHMgSURyb3BEb3duTGlzdCB7XG4gICAgcHJvdGVjdGVkIF93aWR0aDtcbiAgICBwcm90ZWN0ZWQgX2hlaWdodDtcbiAgICBwcm90ZWN0ZWQgX2ZvY3VzZWRJdGVtOiBhbnkgPSBudWxsO1xuICAgIHByb3RlY3RlZCBfaWQgPSBgaWd4LWRyb3AtZG93bi0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBHZXQgZHJvcGRvd24ncyBodG1sIGVsZW1lbnQgb2YgaXRzIHNjcm9sbCBjb250YWluZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNjcm9sbENvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGlsZHJlbjogUXVlcnlMaXN0PElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmU+O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGl0ZW0gc2VsZWN0aW9uIGlzIGNoYW5naW5nLCBiZWZvcmUgdGhlIHNlbGVjdGlvbiBjb21wbGV0ZXNcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRyb3AtZG93biAob25TZWxlY3Rpb24pPSdoYW5kbGVTZWxlY3Rpb24oKSc+PC9pZ3gtZHJvcC1kb3duPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvblNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8SVNlbGVjdGlvbkV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqICBHZXRzL1NldHMgdGhlIHdpZHRoIG9mIHRoZSBkcm9wIGRvd25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgbXlEcm9wRG93bkN1cnJlbnRXaWR0aCA9IHRoaXMuZHJvcGRvd24ud2lkdGg7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS1zZXQtLT5cbiAgICAgKiA8aWd4LWRyb3AtZG93biBbd2lkdGhdPScxNjBweCc+PC9pZ3gtZHJvcC1kb3duPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHdpZHRoOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGhlaWdodCBvZiB0aGUgZHJvcCBkb3duXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IG15RHJvcERvd25DdXJyZW50SGVpZ2h0ID0gdGhpcy5kcm9wZG93bi5oZWlnaHQ7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS1zZXQtLT5cbiAgICAgKiA8aWd4LWRyb3AtZG93biBbaGVpZ2h0XT0nNDAwcHgnPjwvaWd4LWRyb3AtZG93bj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZHJvcCBkb3duJ3MgaWRcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgbXlEcm9wRG93bkN1cnJlbnRJZCA9IHRoaXMuZHJvcGRvd24uaWQ7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS1zZXQtLT5cbiAgICAgKiA8aWd4LWRyb3AtZG93biBbaWRdPSduZXdEcm9wRG93bklkJz48L2lneC1kcm9wLWRvd24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZHJvcCBkb3duJ3MgY29udGFpbmVyIG1heCBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IG1heEhlaWdodCA9IHRoaXMuZHJvcGRvd24ubWF4SGVpZ2h0O1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1kcm9wLWRvd24gW21heEhlaWdodF09JzIwMHB4Jz48L2lneC1kcm9wLWRvd24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1heEhlaWdodCcpXG4gICAgcHVibGljIG1heEhlaWdodCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bicpXG4gICAgcHVibGljIGNzc0NsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgbm9uLWhlYWRlciBpdGVtc1xuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBteURyb3BEb3duSXRlbXMgPSB0aGlzLmRyb3Bkb3duLml0ZW1zO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXRlbXMoKTogSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZVtdIHtcbiAgICAgICAgY29uc3QgaXRlbXM6IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmVbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4udG9BcnJheSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5pc0hlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCBoZWFkZXIgaXRlbXNcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbXlEcm9wRG93bkhlYWRlckl0ZW1zID0gdGhpcy5kcm9wZG93bi5oZWFkZXJzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVycygpOiBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlW10ge1xuICAgICAgICBjb25zdCBoZWFkZXJzOiBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5pc0hlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBkcm9wZG93biBodG1sIGVsZW1lbnRcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbXlEcm9wRG93bkVsZW1lbnQgPSB0aGlzLmRyb3Bkb3duLmVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBpZiB0aGUgZHJvcGRvd24gaXMgY29sbGFwc2VkXG4gICAgICovXG4gICAgcHVibGljIGNvbGxhcHNlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgcHJvdGVjdGVkIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMpIHtcbiAgICAgICAgICAgIHN1cGVyKF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAvKiogS2V5ZG93biBIYW5kbGVyICovXG4gICAgcHVibGljIG9uSXRlbUFjdGlvbktleShrZXk6IERyb3BEb3duQWN0aW9uS2V5LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlIERyb3BEb3duQWN0aW9uS2V5LkVOVEVSOlxuICAgICAgICAgICAgY2FzZSBEcm9wRG93bkFjdGlvbktleS5TUEFDRTpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0odGhpcy5mb2N1c2VkSXRlbSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEcm9wRG93bkFjdGlvbktleS5FU0NBUEU6XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBvblNlbGVjdGlvbiB3aXRoIHRoZSB0YXJnZXQgaXRlbSAmIGV2ZW50XG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBAcGFyYW0gbmV3U2VsZWN0aW9uIHRoZSBpdGVtIHNlbGVjdGVkXG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgY2FsbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RJdGVtKG5ld1NlbGVjdGlvbj86IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbi5lbWl0KHtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbixcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZvY3VzZWRJdGVtKCk6IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9jdXNlZEl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGZvY3VzZWRJdGVtKGl0ZW06IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUpIHtcbiAgICAgICAgdGhpcy5fZm9jdXNlZEl0ZW0gPSBpdGVtO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBuYXZpZ2F0ZShkaXJlY3Rpb246IE5hdmlnYXRlLCBjdXJyZW50SW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gLTE7XG4gICAgICAgIGlmICh0aGlzLl9mb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgaW5kZXggPSBjdXJyZW50SW5kZXggPyBjdXJyZW50SW5kZXggOiB0aGlzLmZvY3VzZWRJdGVtLml0ZW1JbmRleDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuZ2V0TmVhcmVzdFNpYmxpbmdGb2N1c2FibGVJdGVtSW5kZXgoaW5kZXgsIGRpcmVjdGlvbik7XG4gICAgICAgIHRoaXMubmF2aWdhdGVJdGVtKG5ld0luZGV4KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0TmVhcmVzdFNpYmxpbmdGb2N1c2FibGVJdGVtSW5kZXgoc3RhcnRJbmRleDogbnVtYmVyLCBkaXJlY3Rpb246IE5hdmlnYXRlKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgICB3aGlsZSAoaXRlbXNbaW5kZXggKyBkaXJlY3Rpb25dICYmIGl0ZW1zW2luZGV4ICsgZGlyZWN0aW9uXS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgaW5kZXggKz0gZGlyZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggKz0gZGlyZWN0aW9uO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIHRoZSBpdGVtIG9uIHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAgICAgKiBAcGFyYW0gbmV3SW5kZXggbnVtYmVyIC0gdGhlIGluZGV4IG9mIHRoZSBpdGVtIGluIHRoZSBgaXRlbXNgIGNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgbmF2aWdhdGVJdGVtKG5ld0luZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKG5ld0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3Qgb2xkSXRlbSA9IHRoaXMuX2ZvY3VzZWRJdGVtO1xuICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHRoaXMuaXRlbXNbbmV3SW5kZXhdO1xuICAgICAgICAgICAgaWYgKG9sZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICBvbGRJdGVtLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSBuZXdJdGVtO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0hpZGRlbkl0ZW0obmV3SXRlbSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmF2aWdhdGVGaXJzdCgpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShOYXZpZ2F0ZS5Eb3duLCAtMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmF2aWdhdGVMYXN0KCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRlKE5hdmlnYXRlLlVwLCB0aGlzLml0ZW1zLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmF2aWdhdGVOZXh0KCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRlKE5hdmlnYXRlLkRvd24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5hdmlnYXRlUHJldigpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShOYXZpZ2F0ZS5VcCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNjcm9sbFRvSGlkZGVuSXRlbShuZXdJdGVtOiBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gbmV3SXRlbS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHBhcmVudFJlY3QgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKHBhcmVudFJlY3QudG9wID4gZWxlbWVudFJlY3QudG9wKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgLT0gKHBhcmVudFJlY3QudG9wIC0gZWxlbWVudFJlY3QudG9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnRSZWN0LmJvdHRvbSA8IGVsZW1lbnRSZWN0LmJvdHRvbSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wICs9IChlbGVtZW50UmVjdC5ib3R0b20gLSBwYXJlbnRSZWN0LmJvdHRvbSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=