@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
206 lines • 26.9 kB
JavaScript
import { Component, EventEmitter, Inject, Injector, Input, Output } from '@angular/core';
import { CoreBaseComponent } from '../common/base.component';
import { SME_LAYOUT_PROVIDER } from '../common/layout';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
function LoadingWheelComponent_h3_10_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "h3", 6);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(ctx_r0.message);
} }
function LoadingWheelComponent_a_11_Template(rf, ctx) { if (rf & 1) {
const _r3 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "a", 7);
i0.ɵɵlistener("click", function LoadingWheelComponent_a_11_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.buttonClick.next()); });
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(ctx_r1.buttonLabel);
} }
const _c0 = function (a0, a1, a2) { return { "sme-scheme-loading-wheel": a0, "sme-layout-absolute": a1, "sme-position-inset-none": a2 }; };
const _c1 = function (a0, a1) { return { "sme-layout-absolute": a0, "sme-position-center": a1 }; };
const _c2 = function (a0, a1) { return { "sme-progress-center": a0, "sme-progress-center-h": a1 }; };
export var LoadingWheelSize;
(function (LoadingWheelSize) {
LoadingWheelSize["ExtraSmall"] = "extra-small";
LoadingWheelSize["Small"] = "small";
LoadingWheelSize["Medium"] = "medium";
LoadingWheelSize["Large"] = "large";
LoadingWheelSize["Default"] = "large";
})(LoadingWheelSize || (LoadingWheelSize = {}));
(function (LoadingWheelSize) {
const loadingWheelSizes = [
LoadingWheelSize.ExtraSmall,
LoadingWheelSize.Small,
LoadingWheelSize.Medium,
LoadingWheelSize.Large
];
function fromString(value) {
const defaultLoadingWheelSize = LoadingWheelSize.Default;
if (MsftSme.isNullOrWhiteSpace(value)) {
return defaultLoadingWheelSize;
}
value = value.toLowerCase();
return loadingWheelSizes.find(size => size.toLowerCase() === value) || defaultLoadingWheelSize;
}
function fromBindableType(value) {
if (typeof (value) === 'string') {
return fromString(value);
}
return value;
}
LoadingWheelSize.fromBindableType = fromBindableType;
function toProgressClass(size) {
switch (size) {
case LoadingWheelSize.ExtraSmall:
return 'sme-progress-extra-small';
case LoadingWheelSize.Small:
return 'sme-progress-small';
case LoadingWheelSize.Medium:
return 'sme-progress-medium';
case LoadingWheelSize.Large:
default:
return 'sme-progress-large';
}
}
LoadingWheelSize.toProgressClass = toProgressClass;
})(LoadingWheelSize || (LoadingWheelSize = {}));
/**
* @smeDoc {@label Loading Wheel @id sme-loading-wheel}
*
* @overview
* @file {@filepath ./examples/loading-wheel-overview.md}
*
* @example {@label Small loading wheel example @id small-loading-wheel}
* @file {@filename small-loading-wheel-example.html @filepath ./examples/small-loading-wheel-example.html }
* @file {@filename small-loading-wheel-example.ts @filepath ./examples/small-loading-wheel-example.ts }
* @file {@filename loading-wheel-example.module.ts @filepath ./examples/loading-wheel-example.module.ts }
*
* @example {@label Large loading wheel example @id large-loading-wheel}
* @file {@filename large-loading-wheel-example.html @filepath ./examples/large-loading-wheel-example.html }
* @file {@filename large-loading-wheel-example.ts @filepath ./examples/large-loading-wheel-example.ts }
* @file {@filename loading-wheel-example.module.ts @filepath ./examples/loading-wheel-example.module.ts }
*/
export class LoadingWheelComponent extends CoreBaseComponent {
constructor(layout, injector) {
super(injector);
this.layout = layout;
this.size = LoadingWheelSize.Default;
this.message = '';
this.inline = false;
this.buttonLabel = null;
this.isBackgroundTransparent = false;
this.buttonClick = new EventEmitter();
}
/**
* The source name to use for logging
*/
get logSourceName() {
return 'LoadingWheelComponent';
}
get sizeClass() {
return LoadingWheelSize.toProgressClass(LoadingWheelSize.fromBindableType(this.size));
}
/**
* The method run when the component is initialized
*/
ngOnInit() {
super.ngOnInit();
this.initialSize = LoadingWheelSize.fromBindableType(this.size);
this.onLayoutChanged();
}
/**
* Destroy resources.
*/
ngOnDestroy() {
super.ngOnDestroy();
this.buttonClick.complete();
}
/**
* Adjust loading wheel size if its container is smaller than the inputted size
*/
onLayoutChanged() {
setTimeout(() => {
const firstChild = this.hostElement.nativeElement.firstChild;
const layoutHeight = firstChild.clientHeight || Number.MAX_VALUE;
const layoutWidth = firstChild.clientWidth || Number.MAX_VALUE;
// ranges come from sme-progress- classes, each size is a square with margin-top: 12px
// extra-small = 16px, small = 20px, medium = 40px, large = 60px
if (layoutHeight < 32 || layoutWidth < 20 || this.initialSize === LoadingWheelSize.ExtraSmall) {
this.size = LoadingWheelSize.ExtraSmall;
}
else if (layoutHeight < 52 || layoutWidth < 40 || this.initialSize === LoadingWheelSize.Small) {
this.size = LoadingWheelSize.Small;
}
else if (layoutHeight < 72 || layoutWidth < 60 || this.initialSize === LoadingWheelSize.Medium) {
this.size = this.initialSize === LoadingWheelSize.Medium ? LoadingWheelSize.Medium : this.initialSize;
}
else {
this.size = this.initialSize;
}
});
}
/**
* Creates the idBag used by this component to store unique element ids.
* id values will be assigned be the @see BaseComponent super class.
*/
createIdBag() {
return {
loadingAriaLabel: ''
};
}
}
/** @nocollapse */ LoadingWheelComponent.ɵfac = function LoadingWheelComponent_Factory(t) { return new (t || LoadingWheelComponent)(i0.ɵɵdirectiveInject(SME_LAYOUT_PROVIDER), i0.ɵɵdirectiveInject(i0.Injector)); };
/** @nocollapse */ LoadingWheelComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: LoadingWheelComponent, selectors: [["sme-loading-wheel"]], inputs: { message: "message", inline: "inline", buttonLabel: "buttonLabel", isBackgroundTransparent: "isBackgroundTransparent", size: "size" }, outputs: { buttonClick: "buttonClick" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 12, vars: 21, consts: [["aria-live", "assertive", 1, "sme-layer-over", 3, "ngClass"], [1, "sme-position-center-h-inline", 3, "ngClass"], ["role", "status", "tabindex", "0", 3, "ngClass"], [1, "sme-screen-reader", 3, "id"], ["class", "sme-color-accent", "aria-hidden", "true", 4, "ngIf"], ["tabindex", "0", "role", "link", "class", "sme-layout-block sme-link sme-focus-zone", 3, "click", 4, "ngIf"], ["aria-hidden", "true", 1, "sme-color-accent"], ["tabindex", "0", "role", "link", 1, "sme-layout-block", "sme-link", "sme-focus-zone", 3, "click"]], template: function LoadingWheelComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
i0.ɵɵelement(3, "span")(4, "span")(5, "span")(6, "span")(7, "span");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(8, "div", 3);
i0.ɵɵtext(9);
i0.ɵɵelementEnd();
i0.ɵɵtemplate(10, LoadingWheelComponent_h3_10_Template, 2, 1, "h3", 4);
i0.ɵɵtemplate(11, LoadingWheelComponent_a_11_Template, 2, 1, "a", 5);
i0.ɵɵelementEnd()();
} if (rf & 2) {
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(11, _c0, !ctx.isBackgroundTransparent, !ctx.inline, !ctx.inline));
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(15, _c1, !ctx.inline, !ctx.inline));
i0.ɵɵadvance(1);
i0.ɵɵclassMapInterpolate1("sme-progress sme-progress-indeterminate-local ", ctx.sizeClass, " sme-focus-zone");
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(18, _c2, ctx.inline, !ctx.inline));
i0.ɵɵattribute("aria-describedby", ctx.idBag.loadingAriaLabel);
i0.ɵɵadvance(6);
i0.ɵɵproperty("id", ctx.idBag.loadingAriaLabel);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(ctx.message || ctx.strings.MsftSmeShell.Angular.LoadingWheel.ARIA.loading);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.message);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.buttonLabel);
} }, dependencies: [i1.NgClass, i1.NgIf], encapsulation: 2 });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LoadingWheelComponent, [{
type: Component,
args: [{ selector: 'sme-loading-wheel', template: "<div class=\"sme-layer-over\" aria-live=\"assertive\"\r\n [ngClass]=\"{'sme-scheme-loading-wheel': !isBackgroundTransparent, 'sme-layout-absolute':!inline, 'sme-position-inset-none':!inline}\">\r\n <div class=\"sme-position-center-h-inline\" [ngClass]=\"{'sme-layout-absolute':!inline, 'sme-position-center':!inline}\">\r\n <div class=\"sme-progress sme-progress-indeterminate-local {{sizeClass}} sme-focus-zone\" role=\"status\" tabindex=\"0\"\r\n [ngClass]=\"{'sme-progress-center':inline, 'sme-progress-center-h':!inline}\" [attr.aria-describedby]=\"idBag.loadingAriaLabel\">\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n </div>\r\n <div class=\"sme-screen-reader\" [id]=\"idBag.loadingAriaLabel\">{{message || strings.MsftSmeShell.Angular.LoadingWheel.ARIA.loading}}</div>\r\n <h3 *ngIf=\"message\" class=\"sme-color-accent\" aria-hidden=\"true\">{{message}}</h3>\r\n <a tabindex=\"0\" role=\"link\" *ngIf=\"buttonLabel\" class=\"sme-layout-block sme-link sme-focus-zone\"\r\n (click)=\"buttonClick.next()\">{{buttonLabel}}</a>\r\n </div>\r\n</div>\r\n" }]
}], function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [SME_LAYOUT_PROVIDER]
}] }, { type: i0.Injector }]; }, { buttonClick: [{
type: Output
}], message: [{
type: Input
}], inline: [{
type: Input
}], buttonLabel: [{
type: Input
}], isBackgroundTransparent: [{
type: Input
}], size: [{
type: Input
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy13aGVlbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9sb2FkaW5nLXdoZWVsL2xvYWRpbmctd2hlZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvbG9hZGluZy13aGVlbC9sb2FkaW5nLXdoZWVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFVLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7SUNVM0QsNkJBQWdFO0lBQUEsWUFBVztJQUFBLGlCQUFLOzs7SUFBaEIsZUFBVztJQUFYLG9DQUFXOzs7O0lBQzNFLDRCQUNnQztJQUE3Qiw0SkFBUyxlQUFBLHlCQUFrQixDQUFBLElBQUM7SUFBQyxZQUFlO0lBQUEsaUJBQUk7OztJQUFuQixlQUFlO0lBQWYsd0NBQWU7Ozs7O0FEVm5ELE1BQU0sQ0FBTixJQUFZLGdCQU1YO0FBTkQsV0FBWSxnQkFBZ0I7SUFDeEIsOENBQTBCLENBQUE7SUFDMUIsbUNBQWUsQ0FBQTtJQUNmLHFDQUFpQixDQUFBO0lBQ2pCLG1DQUFlLENBQUE7SUFDZixxQ0FBZSxDQUFBO0FBQ25CLENBQUMsRUFOVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTTNCO0FBRUQsV0FBYyxnQkFBZ0I7SUFHMUIsTUFBTSxpQkFBaUIsR0FBRztRQUN0QixnQkFBZ0IsQ0FBQyxVQUFVO1FBQzNCLGdCQUFnQixDQUFDLEtBQUs7UUFDdEIsZ0JBQWdCLENBQUMsTUFBTTtR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QUEsYUFBQTtRQUlwSSx1QkFBYSxXQUFBLFdBQUEsV0FBQSxXQUFBO1FBS2YsaUJBQU07UUFDTiw4QkFBNkQ7UUFBQSxZQUFxRTtRQUFBLGlCQUFNO1FBQ3hJLHNFQUFnRjtRQUNoRixvRUFDbUQ7UUFDckQsaUJBQU0sRUFBQTs7UUFkSCw2R0FBb0k7UUFDN0YsZUFBMEU7UUFBMUUsK0VBQTBFO1FBQzdHLGVBQWtGO1FBQWxGLDZHQUFrRjtRQUNsRiw4RUFBMkU7UUFBQyw4REFBZ0Q7UUFPbEcsZUFBNkI7UUFBN0IsK0NBQTZCO1FBQUMsZUFBcUU7UUFBckUsK0ZBQXFFO1FBQzdILGVBQWE7UUFBYixrQ0FBYTtRQUNXLGVBQWlCO1FBQWpCLHNDQUFpQjs7dUZENERyQyxxQkFBcUI7Y0FKakMsU0FBUzsyQkFDSSxtQkFBbUI7O3NCQXVDaEIsTUFBTTt1QkFBQyxtQkFBbUI7K0NBdkJoQyxXQUFXO2tCQURqQixNQUFNO1lBSUEsT0FBTztrQkFEYixLQUFLO1lBSUMsTUFBTTtrQkFEWixLQUFLO1lBSUMsV0FBVztrQkFEakIsS0FBSztZQUlDLHVCQUF1QjtrQkFEN0IsS0FBSztZQUlDLElBQUk7a0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dCwgU01FX0xBWU9VVF9QUk9WSURFUiB9IGZyb20gJy4uL2NvbW1vbi9sYXlvdXQnO1xyXG5cclxuZXhwb3J0IGVudW0gTG9hZGluZ1doZWVsU2l6ZSB7XHJcbiAgICBFeHRyYVNtYWxsID0gJ2V4dHJhLXNtYWxsJyxcclxuICAgIFNtYWxsID0gJ3NtYWxsJyxcclxuICAgIE1lZGl1bSA9ICdtZWRpdW0nLFxyXG4gICAgTGFyZ2UgPSAnbGFyZ2UnLFxyXG4gICAgRGVmYXVsdCA9IExhcmdlXHJcbn1cclxuXHJcbmV4cG9ydCBtb2R1bGUgTG9hZGluZ1doZWVsU2l6ZSB7XHJcbiAgICBleHBvcnQgdHlwZSBCaW5kYWJsZSA9IExvYWRpbmdXaGVlbFNpemUgfCAnZXh0cmEtc21hbGwnIHwgJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJztcclxuXHJcbiAgICBjb25zdCBsb2FkaW5nV2hlZWxTaXplcyA9IFtcclxuICAgICAgICBMb2FkaW5nV2hlZWxTaXplLkV4dHJhU21hbGwsXHJcbiAgICAgICAgTG9hZGluZ1doZWVsU2l6ZS5TbWFsbCxcclxuICAgICAgICBMb2FkaW5nV2hlZWxTaXplLk1lZGl1bSxcclxuICAgICAgICBMb2FkaW5nV2hlZWxTaXplLkxhcmdlXHJcbiAgICBdO1xyXG4gICAgZnVuY3Rpb24gZnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogTG9hZGluZ1doZWVsU2l6ZSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExvYWRpbmdXaGVlbFNpemUgPSBMb2FkaW5nV2hlZWxTaXplLkRlZmF1bHQ7XHJcblxyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRMb2FkaW5nV2hlZWxTaXplO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHJldHVybiBsb2FkaW5nV2hlZWxTaXplcy5maW5kKHNpemUgPT4gc2l6ZS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZSkgfHwgZGVmYXVsdExvYWRpbmdXaGVlbFNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZyb21CaW5kYWJsZVR5cGUodmFsdWU6IEJpbmRhYmxlKTogTG9hZGluZ1doZWVsU2l6ZSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgZnVuY3Rpb24gdG9Qcm9ncmVzc0NsYXNzKHNpemU6IExvYWRpbmdXaGVlbFNpemUpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAoc2l6ZSkge1xyXG4gICAgICAgICAgICBjYXNlIExvYWRpbmdXaGVlbFNpemUuRXh0cmFTbWFsbDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnc21lLXByb2dyZXNzLWV4dHJhLXNtYWxsJztcclxuICAgICAgICAgICAgY2FzZSBMb2FkaW5nV2hlZWxTaXplLlNtYWxsOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzbWUtcHJvZ3Jlc3Mtc21hbGwnO1xyXG4gICAgICAgICAgICBjYXNlIExvYWRpbmdXaGVlbFNpemUuTWVkaXVtOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzbWUtcHJvZ3Jlc3MtbWVkaXVtJztcclxuICAgICAgICAgICAgY2FzZSBMb2FkaW5nV2hlZWxTaXplLkxhcmdlOlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzbWUtcHJvZ3Jlc3MtbGFyZ2UnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQHNtZURvYyB7QGxhYmVsIExvYWRpbmcgV2hlZWwgQGlkIHNtZS1sb2FkaW5nLXdoZWVsfVxyXG4gKlxyXG4gKiBAb3ZlcnZpZXdcclxuICogQGZpbGUge0BmaWxlcGF0aCAuL2V4YW1wbGVzL2xvYWRpbmctd2hlZWwtb3ZlcnZpZXcubWR9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgU21hbGwgbG9hZGluZyB3aGVlbCBleGFtcGxlIEBpZCBzbWFsbC1sb2FkaW5nLXdoZWVsfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIHNtYWxsLWxvYWRpbmctd2hlZWwtZXhhbXBsZS5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NtYWxsLWxvYWRpbmctd2hlZWwtZXhhbXBsZS5odG1sIH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBzbWFsbC1sb2FkaW5nLXdoZWVsLWV4YW1wbGUudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc21hbGwtbG9hZGluZy13aGVlbC1leGFtcGxlLnRzIH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBsb2FkaW5nLXdoZWVsLWV4YW1wbGUubW9kdWxlLnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2xvYWRpbmctd2hlZWwtZXhhbXBsZS5tb2R1bGUudHMgfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIExhcmdlIGxvYWRpbmcgd2hlZWwgZXhhbXBsZSBAaWQgbGFyZ2UtbG9hZGluZy13aGVlbH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBsYXJnZS1sb2FkaW5nLXdoZWVsLWV4YW1wbGUuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9sYXJnZS1sb2FkaW5nLXdoZWVsLWV4YW1wbGUuaHRtbCB9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgbGFyZ2UtbG9hZGluZy13aGVlbC1leGFtcGxlLnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2xhcmdlLWxvYWRpbmctd2hlZWwtZXhhbXBsZS50cyB9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgbG9hZGluZy13aGVlbC1leGFtcGxlLm1vZHVsZS50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9sb2FkaW5nLXdoZWVsLWV4YW1wbGUubW9kdWxlLnRzIH1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtbG9hZGluZy13aGVlbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbG9hZGluZy13aGVlbC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIExvYWRpbmdXaGVlbENvbXBvbmVudCBleHRlbmRzIENvcmVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdMb2FkaW5nV2hlZWxDb21wb25lbnQnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGV2ZW50IGZpcmVkIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBidXR0b25DbGljazogRXZlbnRFbWl0dGVyPHZvaWQ+O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbWVzc2FnZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlubGluZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGJ1dHRvbkxhYmVsO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaXNCYWNrZ3JvdW5kVHJhbnNwYXJlbnQ7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaXplOiBMb2FkaW5nV2hlZWxTaXplLkJpbmRhYmxlO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgc2l6ZUNsYXNzKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIExvYWRpbmdXaGVlbFNpemUudG9Qcm9ncmVzc0NsYXNzKExvYWRpbmdXaGVlbFNpemUuZnJvbUJpbmRhYmxlVHlwZSh0aGlzLnNpemUpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxTaXplOiBMb2FkaW5nV2hlZWxTaXplO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUikgcHJpdmF0ZSBsYXlvdXQ6IExheW91dCwgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuc2l6ZSA9IExvYWRpbmdXaGVlbFNpemUuRGVmYXVsdDtcclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICB0aGlzLmlubGluZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTGFiZWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNCYWNrZ3JvdW5kVHJhbnNwYXJlbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBydW4gd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbFNpemUgPSBMb2FkaW5nV2hlZWxTaXplLmZyb21CaW5kYWJsZVR5cGUodGhpcy5zaXplKTtcclxuICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveSByZXNvdXJjZXMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uQ2xpY2suY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkanVzdCBsb2FkaW5nIHdoZWVsIHNpemUgaWYgaXRzIGNvbnRhaW5lciBpcyBzbWFsbGVyIHRoYW4gdGhlIGlucHV0dGVkIHNpemVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvbkxheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgY29uc3QgbGF5b3V0SGVpZ2h0ID0gZmlyc3RDaGlsZC5jbGllbnRIZWlnaHQgfHwgTnVtYmVyLk1BWF9WQUxVRTtcclxuICAgICAgICAgICAgY29uc3QgbGF5b3V0V2lkdGggPSBmaXJzdENoaWxkLmNsaWVudFdpZHRoIHx8IE51bWJlci5NQVhfVkFMVUU7XHJcbiAgICAgICAgICAgIC8vIHJhbmdlcyBjb21lIGZyb20gc21lLXByb2dyZXNzLSBjbGFzc2VzLCBlYWNoIHNpemUgaXMgYSBzcXVhcmUgd2l0aCBtYXJnaW4tdG9wOiAxMnB4XHJcbiAgICAgICAgICAgIC8vIGV4dHJhLXNtYWxsID0gMTZweCwgc21hbGwgPSAyMHB4LCBtZWRpdW0gPSA0MHB4LCBsYXJnZSA9IDYwcHhcclxuICAgICAgICAgICAgaWYgKGxheW91dEhlaWdodCA8IDMyIHx8IGxheW91dFdpZHRoIDwgMjAgfHwgdGhpcy5pbml0aWFsU2l6ZSA9PT0gTG9hZGluZ1doZWVsU2l6ZS5FeHRyYVNtYWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpemUgPSBMb2FkaW5nV2hlZWxTaXplLkV4dHJhU21hbGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0SGVpZ2h0IDwgNTIgfHwgbGF5b3V0V2lkdGggPCA0MCB8fCB0aGlzLmluaXRpYWxTaXplID09PSBMb2FkaW5nV2hlZWxTaXplLlNtYWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpemUgPSBMb2FkaW5nV2hlZWxTaXplLlNtYWxsO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxheW91dEhlaWdodCA8IDcyIHx8IGxheW91dFdpZHRoIDwgNjAgfHwgdGhpcy5pbml0aWFsU2l6ZSA9PT0gTG9hZGluZ1doZWVsU2l6ZS5NZWRpdW0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2l6ZSA9IHRoaXMuaW5pdGlhbFNpemUgPT09IExvYWRpbmdXaGVlbFNpemUuTWVkaXVtID8gTG9hZGluZ1doZWVsU2l6ZS5NZWRpdW0gOiB0aGlzLmluaXRpYWxTaXplO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaXplID0gdGhpcy5pbml0aWFsU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyB0aGUgaWRCYWcgdXNlZCBieSB0aGlzIGNvbXBvbmVudCB0byBzdG9yZSB1bmlxdWUgZWxlbWVudCBpZHMuXHJcbiAgICAgKiBpZCB2YWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCBiZSB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbG9hZGluZ0FyaWFMYWJlbDogJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWUtbGF5ZXItb3ZlclwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiXHJcbiAgICAgW25nQ2xhc3NdPVwieydzbWUtc2NoZW1lLWxvYWRpbmctd2hlZWwnOiAhaXNCYWNrZ3JvdW5kVHJhbnNwYXJlbnQsICdzbWUtbGF5b3V0LWFic29sdXRlJzohaW5saW5lLCAnc21lLXBvc2l0aW9uLWluc2V0LW5vbmUnOiFpbmxpbmV9XCI+XHJcbiAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1jZW50ZXItaC1pbmxpbmVcIiBbbmdDbGFzc109XCJ7J3NtZS1sYXlvdXQtYWJzb2x1dGUnOiFpbmxpbmUsICdzbWUtcG9zaXRpb24tY2VudGVyJzohaW5saW5lfVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1wcm9ncmVzcyBzbWUtcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1sb2NhbCB7e3NpemVDbGFzc319IHNtZS1mb2N1cy16b25lXCIgcm9sZT1cInN0YXR1c1wiIHRhYmluZGV4PVwiMFwiXHJcbiAgICAgICAgIFtuZ0NsYXNzXT1cInsnc21lLXByb2dyZXNzLWNlbnRlcic6aW5saW5lLCAnc21lLXByb2dyZXNzLWNlbnRlci1oJzohaW5saW5lfVwiIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWRCYWcubG9hZGluZ0FyaWFMYWJlbFwiPlxyXG4gICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCIgW2lkXT1cImlkQmFnLmxvYWRpbmdBcmlhTGFiZWxcIj57e21lc3NhZ2UgfHwgc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Mb2FkaW5nV2hlZWwuQVJJQS5sb2FkaW5nfX08L2Rpdj5cclxuICAgIDxoMyAqbmdJZj1cIm1lc3NhZ2VcIiBjbGFzcz1cInNtZS1jb2xvci1hY2NlbnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj57e21lc3NhZ2V9fTwvaDM+XHJcbiAgICA8YSB0YWJpbmRleD1cIjBcIiByb2xlPVwibGlua1wiICpuZ0lmPVwiYnV0dG9uTGFiZWxcIiBjbGFzcz1cInNtZS1sYXlvdXQtYmxvY2sgc21lLWxpbmsgc21lLWZvY3VzLXpvbmVcIlxyXG4gICAgICAgKGNsaWNrKT1cImJ1dHRvbkNsaWNrLm5leHQoKVwiPnt7YnV0dG9uTGFiZWx9fTwvYT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==