@davvidess/angular-split
Version:
Angular UI library to split views and allow dragging to resize areas using CSS flexbox layout.
297 lines • 19.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, Input, ElementRef, Renderer2, NgZone } from '@angular/core';
import { SplitComponent } from '../component/split.component';
import { getInputPositiveNumber, getInputBoolean } from '../utils';
export class SplitAreaDirective {
/**
* @param {?} ngZone
* @param {?} elRef
* @param {?} renderer
* @param {?} split
*/
constructor(ngZone, elRef, renderer, split) {
this.ngZone = ngZone;
this.elRef = elRef;
this.renderer = renderer;
this.split = split;
this._order = null;
////
this._size = null;
////
this._minSize = null;
////
this._maxSize = null;
////
this._lockSize = false;
////
this._visible = true;
this.lockListeners = [];
this.renderer.addClass(this.elRef.nativeElement, 'as-split-area');
}
/**
* @param {?} v
* @return {?}
*/
set order(v) {
this._order = getInputPositiveNumber(v, null);
this.split.updateArea(this, true, false);
}
/**
* @return {?}
*/
get order() {
return this._order;
}
/**
* @param {?} v
* @return {?}
*/
set size(v) {
this._size = getInputPositiveNumber(v, null);
this.split.updateArea(this, false, true);
}
/**
* @return {?}
*/
get size() {
return this._size;
}
/**
* @param {?} v
* @return {?}
*/
set minSize(v) {
this._minSize = getInputPositiveNumber(v, null);
this.split.updateArea(this, false, true);
}
/**
* @return {?}
*/
get minSize() {
return this._minSize;
}
/**
* @param {?} v
* @return {?}
*/
set maxSize(v) {
this._maxSize = getInputPositiveNumber(v, null);
this.split.updateArea(this, false, true);
}
/**
* @return {?}
*/
get maxSize() {
return this._maxSize;
}
/**
* @param {?} v
* @return {?}
*/
set lockSize(v) {
this._lockSize = getInputBoolean(v);
this.split.updateArea(this, false, true);
}
/**
* @return {?}
*/
get lockSize() {
return this._lockSize;
}
/**
* @param {?} v
* @return {?}
*/
set visible(v) {
this._visible = getInputBoolean(v);
if (this._visible) {
this.split.showArea(this);
this.renderer.removeClass(this.elRef.nativeElement, 'as-hidden');
}
else {
this.split.hideArea(this);
this.renderer.addClass(this.elRef.nativeElement, 'as-hidden');
}
}
/**
* @return {?}
*/
get visible() {
return this._visible;
}
/**
* @return {?}
*/
ngOnInit() {
this.split.addArea(this);
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
() => {
this.transitionListener = this.renderer.listen(this.elRef.nativeElement, 'transitionend', (/**
* @param {?} event
* @return {?}
*/
(event) => {
// Limit only flex-basis transition to trigger the event
if (event.propertyName === 'flex-basis') {
this.split.notify('transitionEnd', -1);
}
}));
}));
}
/**
* @param {?} value
* @return {?}
*/
setStyleOrder(value) {
this.renderer.setStyle(this.elRef.nativeElement, 'order', value);
}
/**
* @param {?} grow
* @param {?} shrink
* @param {?} basis
* @param {?} isMin
* @param {?} isMax
* @return {?}
*/
setStyleFlex(grow, shrink, basis, isMin, isMax) {
// Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)
this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);
this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);
this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);
if (isMin === true)
this.renderer.addClass(this.elRef.nativeElement, 'as-min');
else
this.renderer.removeClass(this.elRef.nativeElement, 'as-min');
if (isMax === true)
this.renderer.addClass(this.elRef.nativeElement, 'as-max');
else
this.renderer.removeClass(this.elRef.nativeElement, 'as-max');
}
/**
* @return {?}
*/
lockEvents() {
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
() => {
this.lockListeners.push(this.renderer.listen(this.elRef.nativeElement, 'selectstart', (/**
* @param {?} e
* @return {?}
*/
(e) => false)));
this.lockListeners.push(this.renderer.listen(this.elRef.nativeElement, 'dragstart', (/**
* @param {?} e
* @return {?}
*/
(e) => false)));
}));
}
/**
* @return {?}
*/
unlockEvents() {
while (this.lockListeners.length > 0) {
/** @type {?} */
const fct = this.lockListeners.pop();
if (fct)
fct();
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this.unlockEvents();
if (this.transitionListener) {
this.transitionListener();
}
this.split.removeArea(this);
}
}
SplitAreaDirective.decorators = [
{ type: Directive, args: [{
selector: 'as-split-area, [as-split-area]',
exportAs: 'asSplitArea',
},] }
];
/** @nocollapse */
SplitAreaDirective.ctorParameters = () => [
{ type: NgZone },
{ type: ElementRef },
{ type: Renderer2 },
{ type: SplitComponent }
];
SplitAreaDirective.propDecorators = {
order: [{ type: Input }],
size: [{ type: Input }],
minSize: [{ type: Input }],
maxSize: [{ type: Input }],
lockSize: [{ type: Input }],
visible: [{ type: Input }]
};
if (false) {
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._order;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._size;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._minSize;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._maxSize;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._lockSize;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._visible;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype.transitionListener;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype.lockListeners;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype.ngZone;
/** @type {?} */
SplitAreaDirective.prototype.elRef;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype.renderer;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype.split;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXRBcmVhLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXZ2aWRlc3MvYW5ndWxhci1zcGxpdC8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmUvc3BsaXRBcmVhLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRWxHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBTWxFLE1BQU0sT0FBTyxrQkFBa0I7Ozs7Ozs7SUE4RjdCLFlBQ1UsTUFBYyxFQUNmLEtBQWlCLEVBQ2hCLFFBQW1CLEVBQ25CLEtBQXFCO1FBSHJCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFqR3ZCLFdBQU0sR0FBa0IsSUFBSSxDQUFBOztRQWM1QixVQUFLLEdBQWtCLElBQUksQ0FBQTs7UUFjM0IsYUFBUSxHQUFrQixJQUFJLENBQUE7O1FBYzlCLGFBQVEsR0FBa0IsSUFBSSxDQUFBOztRQWM5QixjQUFTLEdBQVksS0FBSyxDQUFBOztRQWMxQixhQUFRLEdBQVksSUFBSSxDQUFBO1FBcUJmLGtCQUFhLEdBQW9CLEVBQUUsQ0FBQTtRQVFsRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQTtJQUNuRSxDQUFDOzs7OztJQWxHRCxJQUFhLEtBQUssQ0FBQyxDQUFnQjtRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUU3QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzFDLENBQUM7Ozs7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDcEIsQ0FBQzs7Ozs7SUFNRCxJQUFhLElBQUksQ0FBQyxDQUFnQjtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLHNCQUFzQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUU1QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzFDLENBQUM7Ozs7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUE7SUFDbkIsQ0FBQzs7Ozs7SUFNRCxJQUFhLE9BQU8sQ0FBQyxDQUFnQjtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLHNCQUFzQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUUvQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzFDLENBQUM7Ozs7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDdEIsQ0FBQzs7Ozs7SUFNRCxJQUFhLE9BQU8sQ0FBQyxDQUFnQjtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLHNCQUFzQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUUvQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzFDLENBQUM7Ozs7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDdEIsQ0FBQzs7Ozs7SUFNRCxJQUFhLFFBQVEsQ0FBQyxDQUFVO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRW5DLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDMUMsQ0FBQzs7OztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUN2QixDQUFDOzs7OztJQU1ELElBQWEsT0FBTyxDQUFDLENBQVU7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1NBQ2pFO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQTtTQUM5RDtJQUNILENBQUM7Ozs7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDdEIsQ0FBQzs7OztJQWdCTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUI7OztRQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUN4QixlQUFlOzs7O1lBQ2YsQ0FBQyxLQUFzQixFQUFFLEVBQUU7Z0JBQ3pCLHdEQUF3RDtnQkFDeEQsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLFlBQVksRUFBRTtvQkFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7aUJBQ3ZDO1lBQ0gsQ0FBQyxFQUNGLENBQUE7UUFDSCxDQUFDLEVBQUMsQ0FBQTtJQUNKLENBQUM7Ozs7O0lBRU0sYUFBYSxDQUFDLEtBQWE7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ2xFLENBQUM7Ozs7Ozs7OztJQUVNLFlBQVksQ0FBQyxJQUFZLEVBQUUsTUFBYyxFQUFFLEtBQWEsRUFBRSxLQUFjLEVBQUUsS0FBYztRQUM3RixrR0FBa0c7UUFDbEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN2RSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFFckUsSUFBSSxLQUFLLEtBQUssSUFBSTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFBOztZQUN6RSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUVsRSxJQUFJLEtBQUssS0FBSyxJQUFJO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUE7O1lBQ3pFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3BFLENBQUM7Ozs7SUFFTSxVQUFVO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUI7OztRQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhOzs7O1lBQUUsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUE7WUFDM0csSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsV0FBVzs7OztZQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBQzNHLENBQUMsRUFBQyxDQUFBO0lBQ0osQ0FBQzs7OztJQUVNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7O2tCQUM5QixHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsSUFBSSxHQUFHO2dCQUFFLEdBQUcsRUFBRSxDQUFBO1NBQ2Y7SUFDSCxDQUFDOzs7O0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFbkIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUE7U0FDMUI7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM3QixDQUFDOzs7WUFuS0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQ0FBZ0M7Z0JBQzFDLFFBQVEsRUFBRSxhQUFhO2FBQ3hCOzs7O1lBUm9FLE1BQU07WUFBaEQsVUFBVTtZQUFFLFNBQVM7WUFFdkMsY0FBYzs7O29CQVVwQixLQUFLO21CQWNMLEtBQUs7c0JBY0wsS0FBSztzQkFjTCxLQUFLO3VCQWNMLEtBQUs7c0JBY0wsS0FBSzs7Ozs7OztJQXhFTixvQ0FBb0M7Ozs7O0lBY3BDLG1DQUFtQzs7Ozs7SUFjbkMsc0NBQXNDOzs7OztJQWN0QyxzQ0FBc0M7Ozs7O0lBY3RDLHVDQUFrQzs7Ozs7SUFjbEMsc0NBQWdDOzs7OztJQW9CaEMsZ0RBQW9DOzs7OztJQUNwQywyQ0FBb0Q7Ozs7O0lBR2xELG9DQUFzQjs7SUFDdEIsbUNBQXdCOzs7OztJQUN4QixzQ0FBMkI7Ozs7O0lBQzNCLG1DQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMiwgT25Jbml0LCBPbkRlc3Ryb3ksIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbmltcG9ydCB7IFNwbGl0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50L3NwbGl0LmNvbXBvbmVudCdcbmltcG9ydCB7IGdldElucHV0UG9zaXRpdmVOdW1iZXIsIGdldElucHV0Qm9vbGVhbiB9IGZyb20gJy4uL3V0aWxzJ1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdhcy1zcGxpdC1hcmVhLCBbYXMtc3BsaXQtYXJlYV0nLFxuICBleHBvcnRBczogJ2FzU3BsaXRBcmVhJyxcbn0pXG5leHBvcnQgY2xhc3MgU3BsaXRBcmVhRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9vcmRlcjogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICBASW5wdXQoKSBzZXQgb3JkZXIodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX29yZGVyID0gZ2V0SW5wdXRQb3NpdGl2ZU51bWJlcih2LCBudWxsKVxuXG4gICAgdGhpcy5zcGxpdC51cGRhdGVBcmVhKHRoaXMsIHRydWUsIGZhbHNlKVxuICB9XG5cbiAgZ2V0IG9yZGVyKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9vcmRlclxuICB9XG5cbiAgLy8vL1xuXG4gIHByaXZhdGUgX3NpemU6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgQElucHV0KCkgc2V0IHNpemUodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX3NpemUgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIG51bGwpXG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgZmFsc2UsIHRydWUpXG4gIH1cblxuICBnZXQgc2l6ZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2l6ZVxuICB9XG5cbiAgLy8vL1xuXG4gIHByaXZhdGUgX21pblNpemU6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgQElucHV0KCkgc2V0IG1pblNpemUodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX21pblNpemUgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIG51bGwpXG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgZmFsc2UsIHRydWUpXG4gIH1cblxuICBnZXQgbWluU2l6ZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWluU2l6ZVxuICB9XG5cbiAgLy8vL1xuXG4gIHByaXZhdGUgX21heFNpemU6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgQElucHV0KCkgc2V0IG1heFNpemUodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX21heFNpemUgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIG51bGwpXG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgZmFsc2UsIHRydWUpXG4gIH1cblxuICBnZXQgbWF4U2l6ZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4U2l6ZVxuICB9XG5cbiAgLy8vL1xuXG4gIHByaXZhdGUgX2xvY2tTaXplOiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKSBzZXQgbG9ja1NpemUodjogYm9vbGVhbikge1xuICAgIHRoaXMuX2xvY2tTaXplID0gZ2V0SW5wdXRCb29sZWFuKHYpXG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgZmFsc2UsIHRydWUpXG4gIH1cblxuICBnZXQgbG9ja1NpemUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2tTaXplXG4gIH1cblxuICAvLy8vXG5cbiAgcHJpdmF0ZSBfdmlzaWJsZTogYm9vbGVhbiA9IHRydWVcblxuICBASW5wdXQoKSBzZXQgdmlzaWJsZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fdmlzaWJsZSA9IGdldElucHV0Qm9vbGVhbih2KVxuXG4gICAgaWYgKHRoaXMuX3Zpc2libGUpIHtcbiAgICAgIHRoaXMuc3BsaXQuc2hvd0FyZWEodGhpcylcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnYXMtaGlkZGVuJylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zcGxpdC5oaWRlQXJlYSh0aGlzKVxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdhcy1oaWRkZW4nKVxuICAgIH1cbiAgfVxuXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlXG4gIH1cblxuICAvLy8vXG5cbiAgcHJpdmF0ZSB0cmFuc2l0aW9uTGlzdGVuZXI6IEZ1bmN0aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9ja0xpc3RlbmVyczogQXJyYXk8RnVuY3Rpb24+ID0gW11cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHB1YmxpYyBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBzcGxpdDogU3BsaXRDb21wb25lbnQsXG4gICkge1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnYXMtc3BsaXQtYXJlYScpXG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zcGxpdC5hZGRBcmVhKHRoaXMpXG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zaXRpb25MaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICd0cmFuc2l0aW9uZW5kJyxcbiAgICAgICAgKGV2ZW50OiBUcmFuc2l0aW9uRXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBMaW1pdCBvbmx5IGZsZXgtYmFzaXMgdHJhbnNpdGlvbiB0byB0cmlnZ2VyIHRoZSBldmVudFxuICAgICAgICAgIGlmIChldmVudC5wcm9wZXJ0eU5hbWUgPT09ICdmbGV4LWJhc2lzJykge1xuICAgICAgICAgICAgdGhpcy5zcGxpdC5ub3RpZnkoJ3RyYW5zaXRpb25FbmQnLCAtMSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHlsZU9yZGVyKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ29yZGVyJywgdmFsdWUpXG4gIH1cblxuICBwdWJsaWMgc2V0U3R5bGVGbGV4KGdyb3c6IG51bWJlciwgc2hyaW5rOiBudW1iZXIsIGJhc2lzOiBzdHJpbmcsIGlzTWluOiBib29sZWFuLCBpc01heDogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIE5lZWQgMyBzZXBhcmF0ZWQgcHJvcGVydGllcyB0byB3b3JrIG9uIElFMTEgKGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2ZsZXgtbGF5b3V0L2lzc3Vlcy8zMjMpXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdmbGV4LWdyb3cnLCBncm93KVxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnZmxleC1zaHJpbmsnLCBzaHJpbmspXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdmbGV4LWJhc2lzJywgYmFzaXMpXG5cbiAgICBpZiAoaXNNaW4gPT09IHRydWUpIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnYXMtbWluJylcbiAgICBlbHNlIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnYXMtbWluJylcblxuICAgIGlmIChpc01heCA9PT0gdHJ1ZSkgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdhcy1tYXgnKVxuICAgIGVsc2UgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdhcy1tYXgnKVxuICB9XG5cbiAgcHVibGljIGxvY2tFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5sb2NrTGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnc2VsZWN0c3RhcnQnLCAoZTogRXZlbnQpID0+IGZhbHNlKSlcbiAgICAgIHRoaXMubG9ja0xpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ2RyYWdzdGFydCcsIChlOiBFdmVudCkgPT4gZmFsc2UpKVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgdW5sb2NrRXZlbnRzKCk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLmxvY2tMaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmN0ID0gdGhpcy5sb2NrTGlzdGVuZXJzLnBvcCgpXG4gICAgICBpZiAoZmN0KSBmY3QoKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVubG9ja0V2ZW50cygpXG5cbiAgICBpZiAodGhpcy50cmFuc2l0aW9uTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMudHJhbnNpdGlvbkxpc3RlbmVyKClcbiAgICB9XG5cbiAgICB0aGlzLnNwbGl0LnJlbW92ZUFyZWEodGhpcylcbiAgfVxufVxuIl19