UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

192 lines (190 loc) 26.6 kB
/* MIT License Copyright (c) 2019 Temainfo Sistemas 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 { Injectable } from '@angular/core'; import { TlSimpleSubMenu } from '../parts/simple/simple-sub-menu'; import { TlAdvancedSubMenu } from '../parts/advanced/parts/advanced-sub-menu'; import { TlAdvancedRootMenu } from '../parts/advanced/advanced-root-menu'; import * as i0 from "@angular/core"; export class SubMenuService { constructor(compiler) { this.compiler = compiler; this.listComponents = []; } setRenderer(render) { this.renderer = render; } setRootMenu(menu) { this.rootMenu = menu.element; } setViewSubMenu(view) { this.viewSubMenu = view; } setViewRootMenu(view) { this.viewRootMenu = view; } setRootHeightChange(height) { if (this.menu) { this.menu.instance.maxHeight = height; } } setSubMenuData(data, properties) { this.subMenuData = data; this.properties = properties; } setAnchorRootElement(anchorRoot) { this.anchorRootElement = anchorRoot; } setAnchorElement(anchor) { this.anchorElement = anchor; } createAdvancedMenu() { if (!this.menu) { this.subMenuDataSource = this.subMenuData; this.factoryMenu = this.compiler.resolveComponentFactory(TlAdvancedRootMenu); this.menu = this.viewRootMenu.createComponent(this.factoryMenu); this.menu.instance.setProperties(this.properties); this.menu.instance.setDataSubMenu(this.subMenuData ? this.subMenuData : this.subMenuDataSource); this.menu.instance.setMenuServiceInstance(this); this.listComponents.push(this.menu); } this.menu.instance.onRootMenuLoad.subscribe(() => { this.renderer.appendChild(this.anchorRootElement, this.menu.location.nativeElement); this.handleSubItemsAdvancedMenu(); return; }); this.handleLoadRootChangeItems(); } handleLoadRootChangeItems() { this.subscription = this.menu.instance.onChangeItems.subscribe(() => { this.renderer.appendChild(this.anchorRootElement, this.menu.location.nativeElement); this.handleSubItemsAdvancedMenu(); }); } createSimpleSubMenu() { const componentFactory = this.compiler.resolveComponentFactory(TlSimpleSubMenu); const subMenu = this.viewRootMenu.createComponent(componentFactory); subMenu.instance.setProperties(this.properties); subMenu.instance.setDataSubMenu(this.subMenuData); this.subMenuItem = subMenu; this.appendSubMenuAnchor(subMenu); this.handleSubItemsSimpleSubMenu(subMenu); } createAdvancedSubMenu(nestedMenu) { const componentFactory = this.compiler.resolveComponentFactory(TlAdvancedSubMenu); const subMenu = this.viewSubMenu.createComponent(componentFactory); this.handlePreviousSubMenu(subMenu, nestedMenu); subMenu.instance.setProperties(this.properties); subMenu.instance.setDataSubMenu(this.subMenuData); subMenu.instance.setMenuService(this); this.subMenuItem = subMenu; this.listComponents.push(subMenu); this.appendSubMenuAnchor(subMenu); this.handleLoadSubMenu(subMenu); } handleLoadSubMenu(subMenu) { subMenu.instance.onSubMenuLoad.subscribe(() => { this.handleSubItemsAdvancedSubMenu(subMenu); }); } handlePreviousSubMenu(subMenu, nestedMenu) { if (!nestedMenu) { return subMenu.instance.previousMenu = this.menu.instance; } } handleDockedMenu() { setTimeout(() => { if (this.properties.docked) { this.renderer.setStyle(this.viewRootMenu.get(0)['rootNodes'][0].firstElementChild, 'left', (parseInt(this.properties.dockWidth, 10) + 1) + 'px'); } }, 1); } handleSubItemsAdvancedSubMenu(subMenu) { if (subMenu.instance.anchorElements.length > 0) { this.createNewSubItems(subMenu, 'advanced', true); } } handleSubItemsAdvancedMenu() { if (this.menu.instance.anchorElements.length > 0) { this.createNewSubItems(this.menu, 'advanced'); this.subscription.unsubscribe(); } } handleSubItemsSimpleSubMenu(subMenu) { setTimeout(() => { if (subMenu.instance.anchorElements.length > 0) { this.createNewSubItems(subMenu, 'simple'); } }, 1); } createNewSubItems(menu, type, nestedMenu) { menu.instance.anchorElements.forEach((item, index) => { this.setAnchorElement(item.rootElement); this.subMenuData = item.subItems; type === 'simple' ? this.createSimpleSubMenu() : this.createAdvancedSubMenu(nestedMenu); this.setParentNodeSubMenu(item); this.handleSubMenuAnchor(menu, index); }); } setParentNodeSubMenu(item) { if (this.subMenuItem) { this.subMenuItem.instance.parentNode = item.rootElement; } } handleSubMenuAnchor(subMenu, index) { subMenu.instance.anchorElements[index]['subMenu'] = this.subMenuItem.instance; this.subMenuItem.instance.previousMenu = subMenu.instance; } appendSubMenuAnchor(subMenu) { if (!this.anchorElement) { this.anchorElement = this.anchorRootElement; } this.renderer.appendChild(this.anchorElement, subMenu.location.nativeElement); } getListComponents() { return this.listComponents; } getSubMenus() { return this.listComponents.filter((value) => { return value.instance instanceof TlAdvancedSubMenu; }); } resetAdvancedMenu() { this.anchorElement = null; this.subMenuData = null; this.viewSubMenu.clear(); } closeMenu() { if (this.menu) { this.menu.instance.close(); } } clearView() { this.viewRootMenu.clear(); this.viewSubMenu.clear(); this.listComponents = []; this.menu = null; } } /** @nocollapse */ SubMenuService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SubMenuService, deps: [{ token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable }); /** @nocollapse */ SubMenuService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SubMenuService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SubMenuService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvbWVudS9zZXJ2aWNlcy9zdWJtZW51LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsT0FBTyxFQUEwQyxVQUFVLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFHMUUsTUFBTSxPQUFPLGNBQWM7SUE4QnpCLFlBQXFCLFFBQWtDO1FBQWxDLGFBQVEsR0FBUixRQUFRLENBQTBCO1FBaEIvQyxtQkFBYyxHQUFHLEVBQUUsQ0FBQztJQWlCNUIsQ0FBQztJQUVELFdBQVcsQ0FBRSxNQUFpQjtRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRUQsV0FBVyxDQUFFLElBQUk7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUVELGNBQWMsQ0FBRSxJQUFzQjtRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQsZUFBZSxDQUFFLElBQXNCO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFNO1FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBRUQsY0FB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QUFXLENBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBRSxDQUFDO0lBQ2xGLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFFLENBQUUsS0FBSyxFQUFHLEVBQUU7WUFDN0MsT0FBTyxLQUFLLENBQUMsUUFBUSxZQUFZLGlCQUFpQixDQUFDO1FBQ3JELENBQUMsQ0FBRSxDQUFDO0lBQ04sQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7OytIQXJOVSxjQUFjO21JQUFkLGNBQWM7NEZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gTUlUIExpY2Vuc2VcblxuIENvcHlyaWdodCAoYykgMjAxOSBUZW1haW5mbyBTaXN0ZW1hc1xuXG4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIEluamVjdGFibGUsIFJlbmRlcmVyMiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGxTaW1wbGVTdWJNZW51IH0gZnJvbSAnLi4vcGFydHMvc2ltcGxlL3NpbXBsZS1zdWItbWVudSc7XG5pbXBvcnQgeyBUbEFkdmFuY2VkU3ViTWVudSB9IGZyb20gJy4uL3BhcnRzL2FkdmFuY2VkL3BhcnRzL2FkdmFuY2VkLXN1Yi1tZW51JztcbmltcG9ydCB7IFRsQWR2YW5jZWRSb290TWVudSB9IGZyb20gJy4uL3BhcnRzL2FkdmFuY2VkL2FkdmFuY2VkLXJvb3QtbWVudSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdWJNZW51U2VydmljZSB7XG5cbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gIHByaXZhdGUgcm9vdE1lbnU7XG5cbiAgcHJpdmF0ZSB2aWV3U3ViTWVudTogVmlld0NvbnRhaW5lclJlZjtcblxuICBwcml2YXRlIHZpZXdSb290TWVudTogVmlld0NvbnRhaW5lclJlZjtcblxuICBwcml2YXRlIG1lbnU6IENvbXBvbmVudFJlZjxhbnk+O1xuXG4gIHByaXZhdGUgc3ViTWVudUl0ZW06IENvbXBvbmVudFJlZjxhbnk+O1xuXG4gIHByaXZhdGUgbGlzdENvbXBvbmVudHMgPSBbXTtcblxuICBwcml2YXRlIHN1Yk1lbnVEYXRhOiBhbnk7XG5cbiAgcHJpdmF0ZSBwcm9wZXJ0aWVzO1xuXG4gIHByaXZhdGUgZmFjdG9yeU1lbnU7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBhbmNob3JFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICBwcml2YXRlIGFuY2hvclJvb3RFbGVtZW50O1xuXG4gIHByaXZhdGUgc3ViTWVudURhdGFTb3VyY2U7XG5cbiAgY29uc3RydWN0b3IoIHByaXZhdGUgY29tcGlsZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciApIHtcbiAgfVxuXG4gIHNldFJlbmRlcmVyKCByZW5kZXI6IFJlbmRlcmVyMiApIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyO1xuICB9XG5cbiAgc2V0Um9vdE1lbnUoIG1lbnUgKSB7XG4gICAgdGhpcy5yb290TWVudSA9IG1lbnUuZWxlbWVudDtcbiAgfVxuXG4gIHNldFZpZXdTdWJNZW51KCB2aWV3OiBWaWV3Q29udGFpbmVyUmVmICkge1xuICAgIHRoaXMudmlld1N1Yk1lbnUgPSB2aWV3O1xuICB9XG5cbiAgc2V0Vmlld1Jvb3RNZW51KCB2aWV3OiBWaWV3Q29udGFpbmVyUmVmICkge1xuICAgIHRoaXMudmlld1Jvb3RNZW51ID0gdmlldztcbiAgfVxuXG4gIHNldFJvb3RIZWlnaHRDaGFuZ2UoaGVpZ2h0KSB7XG4gICAgaWYgKHRoaXMubWVudSkge1xuICAgICAgKDxUbEFkdmFuY2VkUm9vdE1lbnU+dGhpcy5tZW51Lmluc3RhbmNlKS5tYXhIZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgc2V0U3ViTWVudURhdGEoIGRhdGEsIHByb3BlcnRpZXMgKSB7XG4gICAgdGhpcy5zdWJNZW51RGF0YSA9IGRhdGE7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIHNldEFuY2hvclJvb3RFbGVtZW50KCBhbmNob3JSb290OiBIVE1MRWxlbWVudCApIHtcbiAgICB0aGlzLmFuY2hvclJvb3RFbGVtZW50ID0gYW5jaG9yUm9vdDtcbiAgfVxuXG4gIHNldEFuY2hvckVsZW1lbnQoIGFuY2hvcjogSFRNTEVsZW1lbnQgKSB7XG4gICAgdGhpcy5hbmNob3JFbGVtZW50ID0gYW5jaG9yO1xuICB9XG5cbiAgY3JlYXRlQWR2YW5jZWRNZW51KCkge1xuICAgIGlmICggIXRoaXMubWVudSApIHtcbiAgICAgIHRoaXMuc3ViTWVudURhdGFTb3VyY2UgPSB0aGlzLnN1Yk1lbnVEYXRhO1xuICAgICAgdGhpcy5mYWN0b3J5TWVudSA9IHRoaXMuY29tcGlsZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoIFRsQWR2YW5jZWRSb290TWVudSApO1xuICAgICAgdGhpcy5tZW51ID0gdGhpcy52aWV3Um9vdE1lbnUuY3JlYXRlQ29tcG9uZW50KCB0aGlzLmZhY3RvcnlNZW51ICk7XG4gICAgICAoPFRsQWR2YW5jZWRSb290TWVudT50aGlzLm1lbnUuaW5zdGFuY2UpLnNldFByb3BlcnRpZXMoIHRoaXMucHJvcGVydGllcyApO1xuICAgICAgKDxUbEFkdmFuY2VkUm9vdE1lbnU+dGhpcy5tZW51Lmluc3RhbmNlKS5zZXREYXRhU3ViTWVudSggdGhpcy5zdWJNZW51RGF0YSA/IHRoaXMuc3ViTWVudURhdGEgOiB0aGlzLnN1Yk1lbnVEYXRhU291cmNlICk7XG4gICAgICAoPFRsQWR2YW5jZWRSb290TWVudT50aGlzLm1lbnUuaW5zdGFuY2UpLnNldE1lbnVTZXJ2aWNlSW5zdGFuY2UoIHRoaXMgKTtcbiAgICAgIHRoaXMubGlzdENvbXBvbmVudHMucHVzaCggdGhpcy5tZW51ICk7XG4gICAgfVxuICAgIHRoaXMubWVudS5pbnN0YW5jZS5vblJvb3RNZW51TG9hZC5zdWJzY3JpYmUoICgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoIHRoaXMuYW5jaG9yUm9vdEVsZW1lbnQsIHRoaXMubWVudS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50ICk7XG4gICAgICB0aGlzLmhhbmRsZVN1Ykl0ZW1zQWR2YW5jZWRNZW51KCk7XG4gICAgICByZXR1cm47XG4gICAgfSApO1xuICAgIHRoaXMuaGFuZGxlTG9hZFJvb3RDaGFuZ2VJdGVtcygpO1xuICB9XG5cbiAgaGFuZGxlTG9hZFJvb3RDaGFuZ2VJdGVtcygpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMubWVudS5pbnN0YW5jZS5vbkNoYW5nZUl0ZW1zLnN1YnNjcmliZSggKCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCggdGhpcy5hbmNob3JSb290RWxlbWVudCwgdGhpcy5tZW51LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgKTtcbiAgICAgIHRoaXMuaGFuZGxlU3ViSXRlbXNBZHZhbmNlZE1lbnUoKTtcbiAgICB9ICk7XG4gIH1cblxuICBjcmVhdGVTaW1wbGVTdWJNZW51KCkge1xuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBpbGVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KCBUbFNpbXBsZVN1Yk1lbnUgKTtcbiAgICBjb25zdCBzdWJNZW51ID0gdGhpcy52aWV3Um9vdE1lbnUuY3JlYXRlQ29tcG9uZW50KCBjb21wb25lbnRGYWN0b3J5ICk7XG4gICAgKDxUbFNpbXBsZVN1Yk1lbnU+c3ViTWVudS5pbnN0YW5jZSkuc2V0UHJvcGVydGllcyggdGhpcy5wcm9wZXJ0aWVzICk7XG4gICAgKDxUbFNpbXBsZVN1Yk1lbnU+c3ViTWVudS5pbnN0YW5jZSkuc2V0RGF0YVN1Yk1lbnUoIHRoaXMuc3ViTWVudURhdGEgKTtcbiAgICB0aGlzLnN1Yk1lbnVJdGVtID0gc3ViTWVudTtcbiAgICB0aGlzLmFwcGVuZFN1Yk1lbnVBbmNob3IoIHN1Yk1lbnUgKTtcbiAgICB0aGlzLmhhbmRsZVN1Ykl0ZW1zU2ltcGxlU3ViTWVudSggc3ViTWVudSApO1xuICB9XG5cbiAgY3JlYXRlQWR2YW5jZWRTdWJNZW51KCBuZXN0ZWRNZW51PyApIHtcbiAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21waWxlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSggVGxBZHZhbmNlZFN1Yk1lbnUgKTtcbiAgICBjb25zdCBzdWJNZW51ID0gdGhpcy52aWV3U3ViTWVudS5jcmVhdGVDb21wb25lbnQoIGNvbXBvbmVudEZhY3RvcnkgKTtcbiAgICB0aGlzLmhhbmRsZVByZXZpb3VzU3ViTWVudSggc3ViTWVudSwgbmVzdGVkTWVudSApO1xuICAgICg8VGxBZHZhbmNlZFN1Yk1lbnU+c3ViTWVudS5pbnN0YW5jZSkuc2V0UHJvcGVydGllcyggdGhpcy5wcm9wZXJ0aWVzICk7XG4gICAgKDxUbEFkdmFuY2VkU3ViTWVudT5zdWJNZW51Lmluc3RhbmNlKS5zZXREYXRhU3ViTWVudSggdGhpcy5zdWJNZW51RGF0YSApO1xuICAgICg8VGxBZHZhbmNlZFN1Yk1lbnU+c3ViTWVudS5pbnN0YW5jZSkuc2V0TWVudVNlcnZpY2UoIHRoaXMgKTtcbiAgICB0aGlzLnN1Yk1lbnVJdGVtID0gc3ViTWVudTtcbiAgICB0aGlzLmxpc3RDb21wb25lbnRzLnB1c2goIHN1Yk1lbnUgKTtcbiAgICB0aGlzLmFwcGVuZFN1Yk1lbnVBbmNob3IoIHN1Yk1lbnUgKTtcbiAgICB0aGlzLmhhbmRsZUxvYWRTdWJNZW51KCBzdWJNZW51ICk7XG4gIH1cblxuICBoYW5kbGVMb2FkU3ViTWVudSggc3ViTWVudSApIHtcbiAgICBzdWJNZW51Lmluc3RhbmNlLm9uU3ViTWVudUxvYWQuc3Vic2NyaWJlKCAoKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVN1Ykl0ZW1zQWR2YW5jZWRTdWJNZW51KCBzdWJNZW51ICk7XG4gICAgfSApO1xuICB9XG5cbiAgaGFuZGxlUHJldmlvdXNTdWJNZW51KCBzdWJNZW51LCBuZXN0ZWRNZW51ICkge1xuICAgIGlmICggIW5lc3RlZE1lbnUgKSB7XG4gICAgICByZXR1cm4gc3ViTWVudS5pbnN0YW5jZS5wcmV2aW91c01lbnUgPSB0aGlzLm1lbnUuaW5zdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRG9ja2VkTWVudSgpIHtcbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICBpZiAoIHRoaXMucHJvcGVydGllcy5kb2NrZWQgKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoIHRoaXMudmlld1Jvb3RNZW51LmdldCggMCApWyAncm9vdE5vZGVzJyBdWyAwIF0uZmlyc3RFbGVtZW50Q2hpbGQsXG4gICAgICAgICAgJ2xlZnQnLCAocGFyc2VJbnQoIHRoaXMucHJvcGVydGllcy5kb2NrV2lkdGgsIDEwICkgKyAxKSArICdweCcgKTtcbiAgICAgIH1cbiAgICB9LCAxICk7XG4gIH1cblxuICBoYW5kbGVTdWJJdGVtc0FkdmFuY2VkU3ViTWVudSggc3ViTWVudSApIHtcbiAgICBpZiAoIHN1Yk1lbnUuaW5zdGFuY2UuYW5jaG9yRWxlbWVudHMubGVuZ3RoID4gMCApIHtcbiAgICAgIHRoaXMuY3JlYXRlTmV3U3ViSXRlbXMoIHN1Yk1lbnUsICdhZHZhbmNlZCcsIHRydWUgKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTdWJJdGVtc0FkdmFuY2VkTWVudSgpIHtcbiAgICBpZiAoIHRoaXMubWVudS5pbnN0YW5jZS5hbmNob3JFbGVtZW50cy5sZW5ndGggPiAwICkge1xuICAgICAgdGhpcy5jcmVhdGVOZXdTdWJJdGVtcyggdGhpcy5tZW51LCAnYWR2YW5jZWQnICk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVN1Ykl0ZW1zU2ltcGxlU3ViTWVudSggc3ViTWVudSApIHtcbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICBpZiAoIHN1Yk1lbnUuaW5zdGFuY2UuYW5jaG9yRWxlbWVudHMubGVuZ3RoID4gMCApIHtcbiAgICAgICAgdGhpcy5jcmVhdGVOZXdTdWJJdGVtcyggc3ViTWVudSwgJ3NpbXBsZScgKTtcbiAgICAgIH1cbiAgICB9LCAxICk7XG4gIH1cblxuICBjcmVhdGVOZXdTdWJJdGVtcyggbWVudSwgdHlwZSwgbmVzdGVkTWVudT8gKSB7XG4gICAgbWVudS5pbnN0YW5jZS5hbmNob3JFbGVtZW50cy5mb3JFYWNoKCAoIGl0ZW0sIGluZGV4ICkgPT4ge1xuICAgICAgdGhpcy5zZXRBbmNob3JFbGVtZW50KCBpdGVtLnJvb3RFbGVtZW50ICk7XG4gICAgICB0aGlzLnN1Yk1lbnVEYXRhID0gaXRlbS5zdWJJdGVtcztcbiAgICAgIHR5cGUgPT09ICdzaW1wbGUnID8gdGhpcy5jcmVhdGVTaW1wbGVTdWJNZW51KCkgOiB0aGlzLmNyZWF0ZUFkdmFuY2VkU3ViTWVudSggbmVzdGVkTWVudSApO1xuICAgICAgdGhpcy5zZXRQYXJlbnROb2RlU3ViTWVudSggaXRlbSApO1xuICAgICAgdGhpcy5oYW5kbGVTdWJNZW51QW5jaG9yKCBtZW51LCBpbmRleCApO1xuICAgIH0gKTtcbiAgfVxuXG4gIHNldFBhcmVudE5vZGVTdWJNZW51KCBpdGVtICkge1xuICAgIGlmICggdGhpcy5zdWJNZW51SXRlbSApIHtcbiAgICAgIHRoaXMuc3ViTWVudUl0ZW0uaW5zdGFuY2UucGFyZW50Tm9kZSA9IGl0ZW0ucm9vdEVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU3ViTWVudUFuY2hvciggc3ViTWVudSwgaW5kZXggKSB7XG4gICAgc3ViTWVudS5pbnN0YW5jZS5hbmNob3JFbGVtZW50c1sgaW5kZXggXVsgJ3N1Yk1lbnUnIF0gPSB0aGlzLnN1Yk1lbnVJdGVtLmluc3RhbmNlO1xuICAgIHRoaXMuc3ViTWVudUl0ZW0uaW5zdGFuY2UucHJldmlvdXNNZW51ID0gc3ViTWVudS5pbnN0YW5jZTtcbiAgfVxuXG4gIGFwcGVuZFN1Yk1lbnVBbmNob3IoIHN1Yk1lbnUgKSB7XG4gICAgaWYgKCAhdGhpcy5hbmNob3JFbGVtZW50ICkge1xuICAgICAgdGhpcy5hbmNob3JFbGVtZW50ID0gdGhpcy5hbmNob3JSb290RWxlbWVudDtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCggdGhpcy5hbmNob3JFbGVtZW50LCBzdWJNZW51LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgKTtcbiAgfVxuXG4gIGdldExpc3RDb21wb25lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RDb21wb25lbnRzO1xuICB9XG5cbiAgZ2V0U3ViTWVudXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdENvbXBvbmVudHMuZmlsdGVyKCAoIHZhbHVlICkgPT4ge1xuICAgICAgcmV0dXJuIHZhbHVlLmluc3RhbmNlIGluc3RhbmNlb2YgVGxBZHZhbmNlZFN1Yk1lbnU7XG4gICAgfSApO1xuICB9XG5cbiAgcmVzZXRBZHZhbmNlZE1lbnUoKSB7XG4gICAgdGhpcy5hbmNob3JFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLnN1Yk1lbnVEYXRhID0gbnVsbDtcbiAgICB0aGlzLnZpZXdTdWJNZW51LmNsZWFyKCk7XG4gIH1cblxuICBjbG9zZU1lbnUoKSB7XG4gICAgaWYgKHRoaXMubWVudSkge1xuICAgICAgKDxUbEFkdmFuY2VkUm9vdE1lbnU+dGhpcy5tZW51Lmluc3RhbmNlKS5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyVmlldygpIHtcbiAgICB0aGlzLnZpZXdSb290TWVudS5jbGVhcigpO1xuICAgIHRoaXMudmlld1N1Yk1lbnUuY2xlYXIoKTtcbiAgICB0aGlzLmxpc3RDb21wb25lbnRzID0gW107XG4gICAgdGhpcy5tZW51ID0gbnVsbDtcbiAgfVxuXG59XG4iXX0=