@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
148 lines • 19.7 kB
JavaScript
import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
import { CoreBaseComponent } from '../common/base.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
function EditableLayoutItemComponent_p_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "p", 4);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", ctx_r0.displayName, " ");
} }
const _c0 = function (a0) { return { "sme-cursor-pointer": a0 }; };
const _c1 = function (a0) { return { "sme-corner-resizer-disabled": a0 }; };
const _c2 = ["*"];
/**
* Individual Layout Items that can be added on demand with as -
* Height
* Width
* X-Coordinate
* Y-Coordinate
*/
export class EditableLayoutItemComponent extends CoreBaseComponent {
constructor() {
super(...arguments);
this.draggingWindow = false;
this.dragEnd = new EventEmitter();
}
/**
* The source name to use for logging
*/
get logSourceName() {
return 'EditableLayoutItemComponent';
}
get area() {
return this.widthInGrid * this.heightInGrid;
}
ngOnInit() {
this.px = 0;
this.py = 0;
this.draggingWindow = false;
// area of 3 cubes in grid
this.minArea = 72 * 72 * 3;
}
onDrag(event) {
if (!this.draggingWindow || !this.isLayoutItemDraggable) {
return;
}
const hostRect = this.hostElement.nativeElement.getBoundingClientRect();
const newX = event.clientX - hostRect.left;
const newY = event.clientY - hostRect.top;
this.xCoordInGrid = newX > 0 ? newX : this.xCoordInGrid;
this.yCoordInGrid = newY > 0 ? newY : this.yCoordInGrid;
}
onDragStart(event) {
this.draggingWindow = true;
}
onDragEnd(event) {
this.draggingWindow = false;
this.dragEnd.emit(this);
}
onDrop(event) {
this.draggingWindow = false;
this.isLayoutItemResizable = false;
this.dragEnd.emit(this);
}
onCornerClick(event) {
this.draggingWindow = false;
this.isLayoutItemResizable = true;
this.px = event.clientX;
this.py = event.clientY;
event.preventDefault();
event.stopPropagation();
}
onCornerMove(event) {
if (this.draggingWindow || !this.isLayoutItemResizable || !this.isLayoutItemDraggable) {
return;
}
const offsetX = event.clientX - this.px;
const offsetY = event.clientY - this.py;
const lastX = this.xCoordInGrid;
const lastY = this.yCoordInGrid;
const pWidth = this.widthInGrid;
const pHeight = this.heightInGrid;
this.widthInGrid += offsetX;
this.heightInGrid += offsetY;
if (this.area < this.minArea) {
this.xCoordInGrid = lastX;
this.yCoordInGrid = lastY;
this.widthInGrid = pWidth;
this.heightInGrid = pHeight;
}
this.px = event.clientX;
this.py = event.clientY;
}
}
/** @nocollapse */ EditableLayoutItemComponent.ɵfac = /** @pureOrBreakMyCode */ function () { let ɵEditableLayoutItemComponent_BaseFactory; return function EditableLayoutItemComponent_Factory(t) { return (ɵEditableLayoutItemComponent_BaseFactory || (ɵEditableLayoutItemComponent_BaseFactory = i0.ɵɵgetInheritedFactory(EditableLayoutItemComponent)))(t || EditableLayoutItemComponent); }; }();
/** @nocollapse */ EditableLayoutItemComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: EditableLayoutItemComponent, selectors: [["sme-editable-layout-item"]], hostBindings: function EditableLayoutItemComponent_HostBindings(rf, ctx) { if (rf & 1) {
i0.ɵɵlistener("mouseup", function EditableLayoutItemComponent_mouseup_HostBindingHandler($event) { return ctx.onDrop($event); })("mousemove", function EditableLayoutItemComponent_mousemove_HostBindingHandler($event) { return ctx.onCornerMove($event); }, false, i0.ɵɵresolveDocument);
} }, inputs: { displayName: "displayName", heightInGrid: "heightInGrid", widthInGrid: "widthInGrid", xCoordInGrid: "xCoordInGrid", yCoordInGrid: "yCoordInGrid", id: "id", isLayoutItemResizable: "isLayoutItemResizable", isLayoutItemDraggable: "isLayoutItemDraggable" }, outputs: { dragEnd: "dragEnd" }, features: [i0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c2, decls: 5, vars: 16, consts: [[1, "sme-layout-absolute", 3, "id"], ["draggable", "true", 1, "sme-border-inset-sm", "sme-border-color-base-90", "sme-background-color-white", "sme-cursor-pointer", "sme-layout-absolute", "sme-position-inset-none", "sme-margin-top-xs", "sme-margin-left-xs", 3, "ngClass", "dragstart", "drag", "dragend"], ["class", "sme-font-h3 sme-color-black sme-position-center sme-layout-absolute", 4, "ngIf"], [1, "sme-corner-resizer-cursor", 3, "ngClass", "mousedown"], [1, "sme-font-h3", "sme-color-black", "sme-position-center", "sme-layout-absolute"]], template: function EditableLayoutItemComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵprojectionDef();
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
i0.ɵɵlistener("dragstart", function EditableLayoutItemComponent_Template_div_dragstart_1_listener($event) { return ctx.onDragStart($event); })("drag", function EditableLayoutItemComponent_Template_div_drag_1_listener($event) { return ctx.onDrag($event); })("dragend", function EditableLayoutItemComponent_Template_div_dragend_1_listener($event) { return ctx.onDragEnd($event); });
i0.ɵɵtemplate(2, EditableLayoutItemComponent_p_2_Template, 2, 1, "p", 2);
i0.ɵɵprojection(3);
i0.ɵɵelementStart(4, "div", 3);
i0.ɵɵlistener("mousedown", function EditableLayoutItemComponent_Template_div_mousedown_4_listener($event) { return ctx.onCornerClick($event); });
i0.ɵɵelementEnd()()();
} if (rf & 2) {
i0.ɵɵstyleProp("top", ctx.yCoordInGrid, "px")("left", ctx.xCoordInGrid, "px")("width", ctx.widthInGrid, "px")("height", ctx.heightInGrid, "px");
i0.ɵɵproperty("id", ctx.id);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(12, _c0, ctx.isLayoutItemDraggable));
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.isLayoutItemDraggable);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(14, _c1, !ctx.isLayoutItemDraggable));
} }, dependencies: [i1.NgClass, i1.NgIf], encapsulation: 2 });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EditableLayoutItemComponent, [{
type: Component,
args: [{ selector: 'sme-editable-layout-item', template: "<div [id]=\"id\" class=\"sme-layout-absolute\" [style.top.px]='yCoordInGrid' [style.left.px]='xCoordInGrid' [style.width.px]='widthInGrid' [style.height.px]='heightInGrid'>\r\n <div class=\"sme-border-inset-sm sme-border-color-base-90 sme-background-color-white sme-cursor-pointer sme-layout-absolute sme-position-inset-none sme-margin-top-xs sme-margin-left-xs\"\r\n draggable=\"true\" (dragstart)=\"onDragStart($event)\" (drag)=\"onDrag($event)\" (dragend)=\"onDragEnd($event)\" [ngClass]=\"{'sme-cursor-pointer': isLayoutItemDraggable}\">\r\n <p *ngIf=\"isLayoutItemDraggable\" class=\"sme-font-h3 sme-color-black sme-position-center sme-layout-absolute\"> {{ displayName }} </p>\r\n <ng-content></ng-content>\r\n <div (mousedown)='onCornerClick($event)' class=\"sme-corner-resizer-cursor\" [ngClass]=\"{'sme-corner-resizer-disabled': !isLayoutItemDraggable}\"></div>\r\n </div>\r\n</div>\r\n" }]
}], null, { displayName: [{
type: Input
}], heightInGrid: [{
type: Input
}], widthInGrid: [{
type: Input
}], xCoordInGrid: [{
type: Input
}], yCoordInGrid: [{
type: Input
}], id: [{
type: Input
}], isLayoutItemResizable: [{
type: Input
}], isLayoutItemDraggable: [{
type: Input
}], dragEnd: [{
type: Output
}], onDrop: [{
type: HostListener,
args: ['mouseup', ['$event']]
}], onCornerMove: [{
type: HostListener,
args: ['document:mousemove', ['$event']]
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGFibGUtbGF5b3V0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvbGF5b3V0L2VkaXRhYmxlLWxheW91dC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2xheW91dC9lZGl0YWJsZS1sYXlvdXQtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7OztJQ0V6RCw0QkFBNkc7SUFBQyxZQUFrQjtJQUFBLGlCQUFJOzs7SUFBdEIsZUFBa0I7SUFBbEIsbURBQWtCOzs7OztBREFwSTs7Ozs7O0dBTUc7QUFNSCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsaUJBQWlCO0lBTGxFOztRQWNXLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBOEJiLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBK0IsQ0FBQztLQXNFOUU7SUE1R0c7O09BRUc7SUFDSCxJQUFjLGFBQWE7UUFDdkIsT0FBTyw2QkFBNkIsQ0FBQztJQUN6QyxDQUFDO0lBS0QsSUFBVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDaEQsQ0FBQztJQTRCTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEVB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QUFPLENBQUM7U0FDL0I7UUFDRCxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQzVCLENBQUM7OzhUQTVHUSwyQkFBMkIsU0FBM0IsMkJBQTJCOzZHQUEzQiwyQkFBMkI7a0hBQTNCLGtCQUFjLHFHQUFkLHdCQUFvQjs7O1FDZmpDLDhCQUF3SyxhQUFBO1FBRW5KLG1IQUFhLHVCQUFtQixJQUFDLDRGQUFTLGtCQUFjLElBQXZCLGtHQUFvQyxxQkFBaUIsSUFBckQ7UUFDbEQsd0VBQW9JO1FBQ3BJLGtCQUF5QjtRQUN6Qiw4QkFBK0k7UUFBMUksbUhBQWEseUJBQXFCLElBQUM7UUFBdUcsaUJBQU0sRUFBQSxFQUFBOztRQUw5Ryw2Q0FBNkIsZ0NBQUEsZ0NBQUEsa0NBQUE7UUFBbkUsMkJBQVM7UUFFK0YsZUFBeUQ7UUFBekQsZ0ZBQXlEO1FBQzlKLGVBQTJCO1FBQTNCLGdEQUEyQjtRQUU0QyxlQUFtRTtRQUFuRSxpRkFBbUU7O3VGRFVySSwyQkFBMkI7Y0FMdkMsU0FBUzsyQkFDSSwwQkFBMEI7Z0JBb0I3QixXQUFXO2tCQURqQixLQUFLO1lBSUMsWUFBWTtrQkFEbEIsS0FBSztZQUlDLFdBQVc7a0JBRGpCLEtBQUs7WUFJQyxZQUFZO2tCQURsQixLQUFLO1lBSUMsWUFBWTtrQkFEbEIsS0FBSztZQUlDLEVBQUU7a0JBRFIsS0FBSztZQUlDLHFCQUFxQjtrQkFEM0IsS0FBSztZQUlDLHFCQUFxQjtrQkFEM0IsS0FBSztZQUdXLE9BQU87a0JBQXZCLE1BQU07WUFpQ0EsTUFBTTtrQkFEWixZQUFZO21CQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztZQWlCNUIsWUFBWTtrQkFEbEIsWUFBWTttQkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9iYXNlLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogSW5kaXZpZHVhbCBMYXlvdXQgSXRlbXMgdGhhdCBjYW4gYmUgYWRkZWQgb24gZGVtYW5kIHdpdGggYXMgLVxyXG4gKiBIZWlnaHRcclxuICogV2lkdGhcclxuICogWC1Db29yZGluYXRlXHJcbiAqIFktQ29vcmRpbmF0ZVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1lZGl0YWJsZS1sYXlvdXQtaXRlbScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdGFibGUtbGF5b3V0LWl0ZW0uY29tcG9uZW50Lmh0bWwnXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgRWRpdGFibGVMYXlvdXRJdGVtQ29tcG9uZW50IGV4dGVuZHMgQ29yZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0VkaXRhYmxlTGF5b3V0SXRlbUNvbXBvbmVudCc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcHg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBweTogbnVtYmVyO1xyXG4gICAgcHVibGljIGRyYWdnaW5nV2luZG93ID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbWluQXJlYTogbnVtYmVyO1xyXG4gICAgcHVibGljIGdldCBhcmVhKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2lkdGhJbkdyaWQgKiB0aGlzLmhlaWdodEluR3JpZDtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoZWlnaHRJbkdyaWQ6IG51bWJlcjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHdpZHRoSW5HcmlkOiBudW1iZXI7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB4Q29vcmRJbkdyaWQ6IG51bWJlcjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHlDb29yZEluR3JpZDogbnVtYmVyO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaWQ6IG51bWJlcjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlzTGF5b3V0SXRlbVJlc2l6YWJsZTogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlzTGF5b3V0SXRlbURyYWdnYWJsZTogYm9vbGVhbjtcclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIGRyYWdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRhYmxlTGF5b3V0SXRlbUNvbXBvbmVudD4oKTtcclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5weCA9IDA7XHJcbiAgICAgICAgdGhpcy5weSA9IDA7XHJcbiAgICAgICAgdGhpcy5kcmFnZ2luZ1dpbmRvdyA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGFyZWEgb2YgMyBjdWJlcyBpbiBncmlkXHJcbiAgICAgICAgdGhpcy5taW5BcmVhID0gNzIgKiA3MiAqIDM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRHJhZyhldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRyYWdnaW5nV2luZG93IHx8ICF0aGlzLmlzTGF5b3V0SXRlbURyYWdnYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBob3N0UmVjdCA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCBuZXdYID0gZXZlbnQuY2xpZW50WCAtIGhvc3RSZWN0LmxlZnQ7XHJcbiAgICAgICAgY29uc3QgbmV3WSA9IGV2ZW50LmNsaWVudFkgLSBob3N0UmVjdC50b3A7XHJcblxyXG4gICAgICAgIHRoaXMueENvb3JkSW5HcmlkID0gbmV3WCA+IDAgPyBuZXdYIDogdGhpcy54Q29vcmRJbkdyaWQ7XHJcbiAgICAgICAgdGhpcy55Q29vcmRJbkdyaWQgPSBuZXdZID4gMCA/IG5ld1kgOiB0aGlzLnlDb29yZEluR3JpZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25EcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmdXaW5kb3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkRyYWdFbmQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmdXaW5kb3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRyYWdFbmQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbkRyb3AoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgICAgICB0aGlzLmRyYWdnaW5nV2luZG93ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0xheW91dEl0ZW1SZXNpemFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRyYWdFbmQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Db3JuZXJDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmdXaW5kb3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTGF5b3V0SXRlbVJlc2l6YWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5weCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgdGhpcy5weSA9IGV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZW1vdmUnLCBbJyRldmVudCddKVxyXG4gICAgcHVibGljIG9uQ29ybmVyTW92ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRyYWdnaW5nV2luZG93IHx8ICF0aGlzLmlzTGF5b3V0SXRlbVJlc2l6YWJsZSB8fCAhdGhpcy5pc0xheW91dEl0ZW1EcmFnZ2FibGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvZmZzZXRYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMucHg7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLnB5O1xyXG4gICAgICAgIGNvbnN0IGxhc3RYID0gdGhpcy54Q29vcmRJbkdyaWQ7XHJcbiAgICAgICAgY29uc3QgbGFzdFkgPSB0aGlzLnlDb29yZEluR3JpZDtcclxuICAgICAgICBjb25zdCBwV2lkdGggPSB0aGlzLndpZHRoSW5HcmlkO1xyXG4gICAgICAgIGNvbnN0IHBIZWlnaHQgPSB0aGlzLmhlaWdodEluR3JpZDtcclxuICAgICAgICB0aGlzLndpZHRoSW5HcmlkICs9IG9mZnNldFg7XHJcbiAgICAgICAgdGhpcy5oZWlnaHRJbkdyaWQgKz0gb2Zmc2V0WTtcclxuICAgICAgICBpZiAodGhpcy5hcmVhIDwgdGhpcy5taW5BcmVhKSB7XHJcbiAgICAgICAgICAgIHRoaXMueENvb3JkSW5HcmlkID0gbGFzdFg7XHJcbiAgICAgICAgICAgIHRoaXMueUNvb3JkSW5HcmlkID0gbGFzdFk7XHJcbiAgICAgICAgICAgIHRoaXMud2lkdGhJbkdyaWQgPSBwV2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0SW5HcmlkID0gcEhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5weCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgdGhpcy5weSA9IGV2ZW50LmNsaWVudFk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBbaWRdPVwiaWRcIiBjbGFzcz1cInNtZS1sYXlvdXQtYWJzb2x1dGVcIiBbc3R5bGUudG9wLnB4XT0neUNvb3JkSW5HcmlkJyBbc3R5bGUubGVmdC5weF09J3hDb29yZEluR3JpZCcgW3N0eWxlLndpZHRoLnB4XT0nd2lkdGhJbkdyaWQnIFtzdHlsZS5oZWlnaHQucHhdPSdoZWlnaHRJbkdyaWQnPlxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtYm9yZGVyLWluc2V0LXNtIHNtZS1ib3JkZXItY29sb3ItYmFzZS05MCBzbWUtYmFja2dyb3VuZC1jb2xvci13aGl0ZSBzbWUtY3Vyc29yLXBvaW50ZXIgc21lLWxheW91dC1hYnNvbHV0ZSBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtbWFyZ2luLXRvcC14cyBzbWUtbWFyZ2luLWxlZnQteHNcIlxyXG4gICAgZHJhZ2dhYmxlPVwidHJ1ZVwiIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50KVwiIChkcmFnKT1cIm9uRHJhZygkZXZlbnQpXCIgKGRyYWdlbmQpPVwib25EcmFnRW5kKCRldmVudClcIiBbbmdDbGFzc109XCJ7J3NtZS1jdXJzb3ItcG9pbnRlcic6IGlzTGF5b3V0SXRlbURyYWdnYWJsZX1cIj5cclxuICAgIDxwICpuZ0lmPVwiaXNMYXlvdXRJdGVtRHJhZ2dhYmxlXCIgY2xhc3M9XCJzbWUtZm9udC1oMyBzbWUtY29sb3ItYmxhY2sgc21lLXBvc2l0aW9uLWNlbnRlciBzbWUtbGF5b3V0LWFic29sdXRlXCI+IHt7IGRpc3BsYXlOYW1lIH19IDwvcD5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDxkaXYgKG1vdXNlZG93bik9J29uQ29ybmVyQ2xpY2soJGV2ZW50KScgY2xhc3M9XCJzbWUtY29ybmVyLXJlc2l6ZXItY3Vyc29yXCIgW25nQ2xhc3NdPVwieydzbWUtY29ybmVyLXJlc2l6ZXItZGlzYWJsZWQnOiAhaXNMYXlvdXRJdGVtRHJhZ2dhYmxlfVwiPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19