truly-ui
Version:
Web Components for Desktop Applications.
242 lines (240 loc) • 30.5 kB
JavaScript
/*
MIT License
Copyright (c) 2019 Temainfo Software
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import { Component, HostBinding, Input, ChangeDetectionStrategy } from '@angular/core';
import * as i0 from "@angular/core";
export class TlSidebarContent {
constructor(element, change) {
this.element = element;
this.change = change;
this.height = '100%';
this.width = '100%';
this.transform = '';
this.innerWidth = '';
this.start = { width: 0, mode: '', docked: false, opened: false, dockWidth: 0, dock: false };
this.end = { width: 0, mode: '', opened: false };
}
ngOnInit() {
this.innerWidth = this.width;
}
setMovement(value) {
this.setOptionsMovement(value);
switch (value.sidebar.position) {
case 'start':
this.moveSidebarStart();
break;
case 'end':
this.moveSidebarEnd();
break;
}
}
setOptionsMovement(value) {
if (value.sidebar.position === 'start') {
this.setStart(value);
}
else {
this.setEnd(value);
}
}
setMovementInitialDock() {
const endWidth = this.end.opened && this.end.mode === 'slide' ? this.end.width : 0;
this.innerWidth = (this.element.nativeElement.offsetWidth - endWidth - this.start.dockWidth + 'px');
this.setTransformDock();
this.change.detectChanges();
}
setTransformDock() {
this.transform = this.start.dockWidth + 'px';
}
moveSidebarStart() {
switch (this.start.mode) {
case 'over':
if (this.start.dock) {
this.setMovementInitialDock();
}
break;
case 'push':
this.handlePushStart();
break;
case 'slide':
this.handleSlideStart();
break;
}
this.change.detectChanges();
}
moveSidebarEnd() {
switch (this.end.mode) {
case 'push':
this.handlePushEnd();
break;
case 'slide':
this.handleSlideEnd();
break;
}
this.change.detectChanges();
}
handleSlideStart() {
if (!this.start.opened && this.start.docked) {
return this.setMovementInitialDock();
}
if (this.start.opened) {
this.setTransformStartWidth();
this.setWidthWrapperStart();
if (this.isNotOverAndOpened()) {
return this.setWidthWrapperStartAndEnd();
}
return;
}
if (this.end.opened && this.end.mode === 'push') {
this.innerWidth = this.width;
this.transform = '-' + this.end.width + 'px';
return;
}
if (this.end.opened) {
this.transform = '0';
this.setWidthWrapperEnd();
return;
}
if ((!this.start.opened) && (this.start.dock)) {
return this.setMovementInitialDock();
}
this.transform = '0';
this.innerWidth = this.width;
}
handlePushStart() {
if (this.start.dock && this.start.docked) {
return this.setMovementInitialDock();
}
if (this.start.opened) {
return this.setTransformStartWidth();
}
if (this.end.opened) {
this.transform = '0';
return this.setWidthWrapperEnd();
}
this.transform = '0';
this.innerWidth = this.width;
}
handleSlideEnd() {
if (this.start.opened && this.start.docked) {
return;
}
if (!this.start.opened && this.start.docked && !this.end.opened) {
return this.setMovementInitialDock();
}
if (this.isNotOverAndOpened()) {
this.setWidthWrapperStartAndEnd();
this.setTransformStartWidth();
return;
}
if (this.start.docked && this.end.opened) {
this.setWidthWrapperDockEnd();
this.setTransformDock();
return;
}
if (this.end.opened) {
this.transform = '0';
this.setWidthWrapperEnd();
return;
}
if (this.start.opened && this.start.mode === 'push') {
this.innerWidth = this.width;
return this.setTransformStartWidth();
}
if (this.start.opened && this.start.mode !== 'over') {
this.setWidthWrapperStart();
this.setTransformStartWidth();
return;
}
this.innerWidth = this.width;
}
setWidthWrapperDockEnd() {
this.innerWidth = (this.element.nativeElement.offsetWidth - this.end.width - this.start.dockWidth) + 'px';
}
isNotOverAndOpened() {
return ((this.start.opened) && (this.start.mode !== 'over')) && ((this.end.opened) && (this.end.mode !== 'over'));
}
setTransformEndWidth() {
this.transform = this.end.width + 'px';
}
setTransformStartWidth() {
this.transform = this.start.width + 'px';
this.change.detectChanges();
}
setWidthWrapperStartAndEnd() {
this.innerWidth = (this.element.nativeElement.offsetWidth - this.start.width - this.end.width) + 'px';
}
setWidthWrapperStart() {
this.innerWidth = (this.element.nativeElement.offsetWidth - this.start.width) + 'px';
}
setWidthWrapperEnd() {
this.innerWidth = (this.element.nativeElement.offsetWidth - this.end.width) + 'px';
}
handlePushEnd() {
if (this.start.dock && !this.end.opened) {
return this.setMovementInitialDock();
}
if (this.end.opened && !this.start.opened) {
this.innerWidth = this.width;
return this.transform = '-' + this.end.width + 'px';
}
if (!this.start.opened && !this.start.dock) {
this.transform = '0';
this.innerWidth = this.width;
return;
}
if (!this.end.opened && this.start.opened) {
this.setTransformStartWidth();
this.setWidthWrapperStart();
return;
}
if (this.start.dock && !this.end.opened) {
return this.setMovementInitialDock();
}
this.transform = '-' + this.end.width + 'px';
this.innerWidth = this.width;
}
setEnd(value) {
this.end.opened = value.sidebar.opened;
this.end.mode = value.sidebar.mode;
this.end.width = value.sidebar.width;
}
setStart(value) {
this.start.opened = value.sidebar.opened;
this.start.dock = value.sidebar.dock;
this.start.mode = value.sidebar.mode;
this.start.dockWidth = value.sidebar.dockWidth;
this.start.docked = value.sidebar.docked;
this.start.width = value.sidebar.width;
}
}
/** @nocollapse */ TlSidebarContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlSidebarContent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ TlSidebarContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlSidebarContent, selector: "tl-sidebar-content", inputs: { height: "height" }, host: { properties: { "style.height": "this.height", "style.width": "this.width" } }, ngImport: i0, template: "<div class=\"ui-sidebar-content-wrapper\" [style.left]=\"transform\" [style.width]=\"innerWidth\">\n <ng-content></ng-content>\n</div>\n", styles: [".ui-sidebar-content-wrapper{overflow:auto;inset:0;height:100%;position:relative}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlSidebarContent, decorators: [{
type: Component,
args: [{ selector: 'tl-sidebar-content', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ui-sidebar-content-wrapper\" [style.left]=\"transform\" [style.width]=\"innerWidth\">\n <ng-content></ng-content>\n</div>\n", styles: [".ui-sidebar-content-wrapper{overflow:auto;inset:0;height:100%;position:relative}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { height: [{
type: Input
}, {
type: HostBinding,
args: ['style.height']
}], width: [{
type: HostBinding,
args: ['style.width']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1jb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvc2lkZWJhci9wYXJ0cy9zaWRlYmFyLWNvbnRlbnQvc2lkZWJhci1jb250ZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvc2lkZWJhci9wYXJ0cy9zaWRlYmFyLWNvbnRlbnQvc2lkZWJhci1jb250ZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsT0FBTyxFQUNMLFNBQVMsRUFBVSxXQUFXLEVBQ25CLEtBQUssRUFBRSx1QkFBdUIsRUFDMUMsTUFBTSxlQUFlLENBQUM7O0FBU3ZCLE1BQU0sT0FBTyxnQkFBZ0I7SUFpQjNCLFlBQXFCLE9BQW1CLEVBQ25CLE1BQXlCO1FBRHpCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFkdkMsV0FBTSxHQUFHLE1BQU0sQ0FBQztRQUdoQixVQUFLLEdBQUcsTUFBTSxDQUFDO1FBRWYsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVmLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsVUFBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUV4RixRQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBSW5ELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMs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LENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN6QyxDQUFDOztpSUE3UFUsZ0JBQWdCO3FIQUFoQixnQkFBZ0IsOEtDakM3Qiw2SUFHQTs0RkQ4QmEsZ0JBQWdCO2tCQVA1QixTQUFTOytCQUNFLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNO2lJQU94QyxNQUFNO3NCQUZaLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUUsY0FBYztnQkFJckIsS0FBSztzQkFEWCxXQUFXO3VCQUFFLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIE1JVCBMaWNlbnNlXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTkgVGVtYWluZm8gU29mdHdhcmVcblxuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7XG4gIENvbXBvbmVudCwgT25Jbml0LCBIb3N0QmluZGluZywgRWxlbWVudFJlZixcbiAgUmVuZGVyZXIyLCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KCB7XG4gIHNlbGVjdG9yOiAndGwtc2lkZWJhci1jb250ZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpZGViYXItY29udGVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICcuL3NpZGViYXItY29udGVudC5zY3NzJyBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSApXG5cbmV4cG9ydCBjbGFzcyBUbFNpZGViYXJDb250ZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoICdzdHlsZS5oZWlnaHQnIClcbiAgcHVibGljIGhlaWdodCA9ICcxMDAlJztcblxuICBASG9zdEJpbmRpbmcoICdzdHlsZS53aWR0aCcgKVxuICBwdWJsaWMgd2lkdGggPSAnMTAwJSc7XG5cbiAgcHVibGljIHRyYW5zZm9ybSA9ICcnO1xuXG4gIHB1YmxpYyBpbm5lcldpZHRoID0gJyc7XG5cbiAgcHVibGljIHN0YXJ0ID0geyB3aWR0aDogMCwgbW9kZTogJycsIGRvY2tlZDogZmFsc2UsIG9wZW5lZDogZmFsc2UsIGRvY2tXaWR0aDogMCwgZG9jazogZmFsc2UgfTtcblxuICBwdWJsaWMgZW5kID0geyB3aWR0aDogMCwgbW9kZTogJycsIG9wZW5lZDogZmFsc2UgfTtcblxuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBjaGFuZ2U6IENoYW5nZURldGVjdG9yUmVmICkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbm5lcldpZHRoID0gdGhpcy53aWR0aDtcbiAgfVxuXG4gIHNldE1vdmVtZW50KCB2YWx1ZSApIHtcbiAgICB0aGlzLnNldE9wdGlvbnNNb3ZlbWVudCggdmFsdWUgKTtcbiAgICBzd2l0Y2ggKCB2YWx1ZS5zaWRlYmFyLnBvc2l0aW9uICkge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICB0aGlzLm1vdmVTaWRlYmFyU3RhcnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICB0aGlzLm1vdmVTaWRlYmFyRW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnNNb3ZlbWVudCggdmFsdWUgKSB7XG4gICAgaWYgKCB2YWx1ZS5zaWRlYmFyLnBvc2l0aW9uID09PSAnc3RhcnQnICkge1xuICAgICAgdGhpcy5zZXRTdGFydCggdmFsdWUgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRFbmQoIHZhbHVlICk7XG4gICAgfVxuICB9XG5cbiAgc2V0TW92ZW1lbnRJbml0aWFsRG9jaygpIHtcbiAgICBjb25zdCBlbmRXaWR0aCA9IHRoaXMuZW5kLm9wZW5lZCAmJiB0aGlzLmVuZC5tb2RlID09PSAnc2xpZGUnID8gdGhpcy5lbmQud2lkdGggOiAwO1xuICAgIHRoaXMuaW5uZXJXaWR0aCA9ICh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIGVuZFdpZHRoICAtIHRoaXMuc3RhcnQuZG9ja1dpZHRoICsgJ3B4Jyk7XG4gICAgdGhpcy5zZXRUcmFuc2Zvcm1Eb2NrKCk7XG4gICAgdGhpcy5jaGFuZ2UuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgc2V0VHJhbnNmb3JtRG9jaygpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHRoaXMuc3RhcnQuZG9ja1dpZHRoICsgJ3B4JztcbiAgfVxuXG4gIG1vdmVTaWRlYmFyU3RhcnQoKSB7XG4gICAgc3dpdGNoICggdGhpcy5zdGFydC5tb2RlICkge1xuICAgICAgY2FzZSAnb3Zlcic6XG4gICAgICAgaWYgKCB0aGlzLnN0YXJ0LmRvY2sgKSB7XG4gICAgICAgICB0aGlzLnNldE1vdmVtZW50SW5pdGlhbERvY2soKTtcbiAgICAgICB9XG4gICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwdXNoJzpcbiAgICAgICAgdGhpcy5oYW5kbGVQdXNoU3RhcnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzbGlkZSc6XG4gICAgICAgIHRoaXMuaGFuZGxlU2xpZGVTdGFydCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2UuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbW92ZVNpZGViYXJFbmQoKSB7XG4gICAgc3dpdGNoICggdGhpcy5lbmQubW9kZSApIHtcbiAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgICB0aGlzLmhhbmRsZVB1c2hFbmQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzbGlkZSc6XG4gICAgICAgIHRoaXMuaGFuZGxlU2xpZGVFbmQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGhhbmRsZVNsaWRlU3RhcnQoKSB7XG4gICAgaWYgKCAhdGhpcy5zdGFydC5vcGVuZWQgJiYgdGhpcy5zdGFydC5kb2NrZWQgKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRNb3ZlbWVudEluaXRpYWxEb2NrKCk7XG4gICAgfVxuXG4gICAgaWYgKCB0aGlzLnN0YXJ0Lm9wZW5lZCApIHtcbiAgICAgIHRoaXMuc2V0VHJhbnNmb3JtU3RhcnRXaWR0aCgpO1xuICAgICAgdGhpcy5zZXRXaWR0aFdyYXBwZXJTdGFydCgpO1xuICAgICAgaWYgKCB0aGlzLmlzTm90T3ZlckFuZE9wZW5lZCgpICkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRXaWR0aFdyYXBwZXJTdGFydEFuZEVuZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICggdGhpcy5lbmQub3BlbmVkICYmIHRoaXMuZW5kLm1vZGUgPT09ICdwdXNoJyApIHtcbiAgICAgIHRoaXMuaW5uZXJXaWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICB0aGlzLnRyYW5zZm9ybSA9ICctJyArIHRoaXMuZW5kLndpZHRoICsgJ3B4JztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIHRoaXMuZW5kLm9wZW5lZCApIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtID0gJzAnO1xuICAgICAgdGhpcy5zZXRXaWR0aFdyYXBwZXJFbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoICghdGhpcy5zdGFydC5vcGVuZWQpICYmICh0aGlzLnN0YXJ0LmRvY2spICkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0TW92ZW1lbnRJbml0aWFsRG9jaygpO1xuICAgIH1cblxuICAgIHRoaXMudHJhbnNmb3JtID0gJzAnO1xuICAgIHRoaXMuaW5uZXJXaWR0aCA9IHRoaXMud2lkdGg7XG4gIH1cblxuICBoYW5kbGVQdXNoU3RhcnQoKSB7XG4gICAgaWYgKCB0aGlzLnN0YXJ0LmRvY2sgJiYgdGhpcy5zdGFydC5kb2NrZWQgKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRNb3ZlbWVudEluaXRpYWxEb2NrKCk7XG4gICAgfVxuXG4gICAgaWYgKCB0aGlzLnN0YXJ0Lm9wZW5lZCApIHtcbiAgICAgIHJldHVybiB0aGlzLnNldFRyYW5zZm9ybVN0YXJ0V2lkdGgoKTtcbiAgICB9XG5cbiAgICBpZiAoIHRoaXMuZW5kLm9wZW5lZCApIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtID0gJzAnO1xuICAgICAgcmV0dXJuIHRoaXMuc2V0V2lkdGhXcmFwcGVyRW5kKCk7XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSAnMCc7XG4gICAgdGhpcy5pbm5lcldpZHRoID0gdGhpcy53aWR0aDtcbiAgfVxuXG4gIGhhbmRsZVNsaWRlRW5kKCkge1xuXG4gICAgaWYgKCB0aGlzLnN0YXJ0Lm9wZW5lZCAmJiB0aGlzLnN0YXJ0LmRvY2tlZCApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoICF0aGlzLnN0YXJ0Lm9wZW5lZCAmJiB0aGlzLnN0YXJ0LmRvY2tlZCAmJiAhdGhpcy5lbmQub3BlbmVkICkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0TW92ZW1lbnRJbml0aWFsRG9jaygpO1xuICAgIH1cblxuICAgIGlmICggdGhpcy5pc05vdE92ZXJBbmRPcGVuZWQoKSApIHtcbiAgICAgIHRoaXMuc2V0V2lkdGhXcmFwcGVyU3RhcnRBbmRFbmQoKTtcbiAgICAgIHRoaXMuc2V0VHJhbnNmb3JtU3RhcnRXaWR0aCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICggdGhpcy5zdGFydC5kb2NrZWQgJiYgdGhpcy5lbmQub3BlbmVkICkge1xuICAgICAgdGhpcy5zZXRXaWR0aFdyYXBwZXJEb2NrRW5kKCk7XG4gICAgICB0aGlzLnNldFRyYW5zZm9ybURvY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIHRoaXMuZW5kLm9wZW5lZCApIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtID0gJzAnO1xuICAgICAgdGhpcy5zZXRXaWR0aFdyYXBwZXJFbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIHRoaXMuc3RhcnQub3BlbmVkICYmIHRoaXMuc3RhcnQubW9kZSA9PT0gJ3B1c2gnICkge1xuICAgICAgdGhpcy5pbm5lcldpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgIHJldHVybiB0aGlzLnNldFRyYW5zZm9ybVN0YXJ0V2lkdGgoKTtcbiAgICB9XG5cbiAgICBpZiAoIHRoaXMuc3RhcnQub3BlbmVkICYmIHRoaXMuc3RhcnQubW9kZSAhPT0gJ292ZXInKSB7XG4gICAgICB0aGlzLnNldFdpZHRoV3JhcHBlclN0YXJ0KCk7XG4gICAgICB0aGlzLnNldFRyYW5zZm9ybVN0YXJ0V2lkdGgoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlubmVyV2lkdGggPSB0aGlzLndpZHRoO1xuXG4gIH1cblxuICBzZXRXaWR0aFdyYXBwZXJEb2NrRW5kKCkge1xuICAgIHRoaXMuaW5uZXJXaWR0aCA9ICh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIHRoaXMuZW5kLndpZHRoIC0gdGhpcy5zdGFydC5kb2NrV2lkdGgpICsgJ3B4JztcbiAgfVxuXG4gIGlzTm90T3ZlckFuZE9wZW5lZCgpIHtcbiAgICByZXR1cm4gKCh0aGlzLnN0YXJ0Lm9wZW5lZCkgJiYgKHRoaXMuc3RhcnQubW9kZSAhPT0gJ292ZXInKSkgJiYgKCh0aGlzLmVuZC5vcGVuZWQpICYmICh0aGlzLmVuZC5tb2RlICE9PSAnb3ZlcicpKTtcbiAgfVxuXG4gIHNldFRyYW5zZm9ybUVuZFdpZHRoKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0gdGhpcy5lbmQud2lkdGggKyAncHgnO1xuICB9XG5cbiAgc2V0VHJhbnNmb3JtU3RhcnRXaWR0aCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHRoaXMuc3RhcnQud2lkdGggKyAncHgnO1xuICAgIHRoaXMuY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNldFdpZHRoV3JhcHBlclN0YXJ0QW5kRW5kKCkge1xuICAgIHRoaXMuaW5uZXJXaWR0aCA9ICh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIHRoaXMuc3RhcnQud2lkdGggLSB0aGlzLmVuZC53aWR0aCkgKyAncHgnO1xuICB9XG5cbiAgc2V0V2lkdGhXcmFwcGVyU3RhcnQoKSB7XG4gICAgdGhpcy5pbm5lcldpZHRoID0gKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gdGhpcy5zdGFydC53aWR0aCkgKyAncHgnO1xuICB9XG5cbiAgc2V0V2lkdGhXcmFwcGVyRW5kKCkge1xuICAgIHRoaXMuaW5uZXJXaWR0aCA9ICh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIHRoaXMuZW5kLndpZHRoKSArICdweCc7XG4gIH1cblxuICBoYW5kbGVQdXNoRW5kKCkge1xuICAgIGlmICggdGhpcy5zdGFydC5kb2NrICYmICF0aGlzLmVuZC5vcGVuZWQgKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRNb3ZlbWVudEluaXRpYWxEb2NrKCk7XG4gICAgfVxuXG4gICAgaWYgKCB0aGlzLmVuZC5vcGVuZWQgJiYgIXRoaXMuc3RhcnQub3BlbmVkICkge1xuICAgICAgdGhpcy5pbm5lcldpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybSA9ICctJyArIHRoaXMuZW5kLndpZHRoICsgJ3B4JztcbiAgICB9XG5cbiAgICBpZiAoICF0aGlzLnN0YXJ0Lm9wZW5lZCAmJiAhdGhpcy5zdGFydC5kb2NrICkge1xuICAgICAgdGhpcy50cmFuc2Zvcm0gPSAnMCc7XG4gICAgICB0aGlzLmlubmVyV2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICggIXRoaXMuZW5kLm9wZW5lZCAmJiB0aGlzLnN0YXJ0Lm9wZW5lZCApIHtcbiAgICAgIHRoaXMuc2V0VHJhbnNmb3JtU3RhcnRXaWR0aCgpO1xuICAgICAgdGhpcy5zZXRXaWR0aFdyYXBwZXJTdGFydCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICggdGhpcy5zdGFydC5kb2NrICYmICF0aGlzLmVuZC5vcGVuZWQgKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRNb3ZlbWVudEluaXRpYWxEb2NrKCk7XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2Zvcm0gPSAnLScgKyB0aGlzLmVuZC53aWR0aCArICdweCc7XG4gICAgdGhpcy5pbm5lcldpZHRoID0gdGhpcy53aWR0aDtcblxuICB9XG5cbiAgc2V0RW5kKCB2YWx1ZSApIHtcbiAgICB0aGlzLmVuZC5vcGVuZWQgPSB2YWx1ZS5zaWRlYmFyLm9wZW5lZDtcbiAgICB0aGlzLmVuZC5tb2RlID0gdmFsdWUuc2lkZWJhci5tb2RlO1xuICAgIHRoaXMuZW5kLndpZHRoID0gdmFsdWUuc2lkZWJhci53aWR0aDtcbiAgfVxuXG4gIHNldFN0YXJ0KCB2YWx1ZSApIHtcbiAgICB0aGlzLnN0YXJ0Lm9wZW5lZCA9IHZhbHVlLnNpZGViYXIub3BlbmVkO1xuICAgIHRoaXMuc3RhcnQuZG9jayA9IHZhbHVlLnNpZGViYXIuZG9jaztcbiAgICB0aGlzLnN0YXJ0Lm1vZGUgPSB2YWx1ZS5zaWRlYmFyLm1vZGU7XG4gICAgdGhpcy5zdGFydC5kb2NrV2lkdGggPSB2YWx1ZS5zaWRlYmFyLmRvY2tXaWR0aDtcbiAgICB0aGlzLnN0YXJ0LmRvY2tlZCA9IHZhbHVlLnNpZGViYXIuZG9ja2VkO1xuICAgIHRoaXMuc3RhcnQud2lkdGggPSB2YWx1ZS5zaWRlYmFyLndpZHRoO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJ1aS1zaWRlYmFyLWNvbnRlbnQtd3JhcHBlclwiIFtzdHlsZS5sZWZ0XT1cInRyYW5zZm9ybVwiIFtzdHlsZS53aWR0aF09XCJpbm5lcldpZHRoXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=