UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

184 lines 25.6 kB
import { __decorate, __metadata, __param } from "tslib"; import { Inject, Optional, SkipSelf } from '@angular/core'; import { SME_LAYOUT_PROVIDER } from '../common/layout'; import { SmeResponsiveWindowBreakpoints, SmeResponsiveWindowManagerComponent } from '../common/sme-responsive-window-manager.component'; let MasterViewResponsiveWindowManager = class MasterViewResponsiveWindowManager extends SmeResponsiveWindowManagerComponent { constructor(layout, dataTableMaxWidth) { super(layout); /** * The name of the control. */ this.name = 'sme-master-view'; /** * The parameter to determine whether to wrap the search box based on window size changes. * On phone down and 400% zoom will wrap. */ this.searchBoxAutoWrapOnWindowSizeChanges = false; /** * The parameter to determine whether to show or hide the scroll bar vertically based on window size. */ this.shouldHideYScroll = false; /** * The parameter to determine whether to set the overflow or not based on window size. */ this.shouldDataTableParentOverflowHide = false; /** * The parameter to determine whether the data table will be wrapped with horizontal padding on window size. */ this.shouldDataTableSlim = false; /** * The parameter to determine whether to render the data table's bottom margin on window size. */ this.shouldDataTableRenderWithBottomMargin = false; /** * The parameter to determine the data table's min width class in string on window size. */ this.dataTableMinWidthClassString = ''; /** * This design purely won't break the original design for the class. * Ideally we should never use the class representation. * The values are coming from the class for sme-layout-minwidth-sm and sme-layout-minwidth-md with old design. * For phone down, always set to sme-layout-minwidth-sm, otherwise respect the dataTablePresetMinWidth */ this.dataTableMinWidthValues = { Reflow: { key: 'xs', value: 100 }, PhoneDown: { key: 'xsm', value: 200 }, PhoneUp: { key: 'md', value: 500 } }; /** * The master view component classes on window size changed object. */ this.smeMasterViewClassList = { phoneUp: ['sme-arrange-stack-v', 'sme-layout-absolute'], phoneDown: ['sme-arrange-stack-v', 'sme-layout-relative'], reflow: ['sme-arrange-stack-v', 'sme-layout-relative'] }; /** * The data table's wrapper's classes on window size changed object. */ this.smeDataTableWrapperDivClassList = { phoneUp: [], phoneDown: ['sme-position-stretch-v'], reflow: [] }; if (dataTableMaxWidth) { const keys = Object.keys(this.dataTableMinWidthValues); for (const key in keys) { if (this.dataTableMinWidthValues[key].key === dataTableMaxWidth) { this.dataTablePresetMinWidth = this.dataTableMinWidthValues[key]; } } } else { this.dataTablePresetMinWidth = this.dataTableMinWidthValues.PhoneUp; } } /** * Checks the actual window size and the preset window size. * The intention is that the preset size cannot go beyond actual window size to prevent additional horizontal scroll bar. * @param size the object settings for specific window size * @returns a string representation for window size string, 'md' or 'sm' */ checkWindowSize(size) { if (this.dataTablePresetMinWidth.value < size.value) { return this.dataTablePresetMinWidth.key; } else { return size.key; } } /** * The implementation for the on window size changed event. * @param masterViewElement the html element for the master view element. * @returns void. */ onWindowSizeChanged(masterViewElement, stretchToAbsolute = true) { if (!this.cssV2) { return; } if (!masterViewElement) { return; } const size = this.prevSize; if (!size) { return; } this.updateParameters(size); const dataTableElement = masterViewElement.querySelector('sme-data-table, sme-tree-table'); let dataTableWrapperDiv; if (dataTableElement) { dataTableWrapperDiv = dataTableElement.parentElement; } if (size.phoneDown) { if (masterViewElement && stretchToAbsolute) { this.updateClassArrayOnWindowSize(this.smeMasterViewClassList, 'phoneDown', masterViewElement); } if (dataTableWrapperDiv) { this.updateClassArrayOnWindowSize(this.smeDataTableWrapperDivClassList, 'phoneDown', dataTableWrapperDiv); } } else if (size.reflowMode) { if (masterViewElement && stretchToAbsolute) { this.updateClassArrayOnWindowSize(this.smeMasterViewClassList, 'reflow', masterViewElement); } if (dataTableWrapperDiv) { this.updateClassArrayOnWindowSize(this.smeDataTableWrapperDivClassList, 'reflow', dataTableWrapperDiv); } } else if (size.phoneUp) { if (masterViewElement && stretchToAbsolute) { this.updateClassArrayOnWindowSize(this.smeMasterViewClassList, 'phoneUp', masterViewElement); } if (dataTableWrapperDiv) { this.updateClassArrayOnWindowSize(this.smeDataTableWrapperDivClassList, 'phoneUp', dataTableWrapperDiv); } } } /** * Updates the parameters used for the data table on window size changes. * @param size the current size object for the window. */ updateParameters(size) { this.searchBoxAutoWrapOnWindowSizeChanges = size && (size.size === SmeResponsiveWindowBreakpoints.Reflow || size.size === SmeResponsiveWindowBreakpoints.PhoneDown); this.shouldHideYScroll = size && size.phoneUp; this.shouldDataTableParentOverflowHide = size && size.phoneUp; this.shouldDataTableSlim = size && (size.phoneDown || size.reflowMode); this.shouldDataTableRenderWithBottomMargin = size && (size.phoneDown || size.reflowMode); this.dataTableMinWidthClassString = this.getDataTableMinWidthClassString(size); } /** * Gets the data table's min-width string. * @param size the current size object for the window. * @returns string representing data-table's min-width */ getDataTableMinWidthClassString(size) { switch (size?.size) { case SmeResponsiveWindowBreakpoints.Reflow: return this.checkWindowSize(this.dataTableMinWidthValues[SmeResponsiveWindowBreakpoints.Reflow]); case SmeResponsiveWindowBreakpoints.PhoneDown: return this.checkWindowSize(this.dataTableMinWidthValues[SmeResponsiveWindowBreakpoints.PhoneDown]); case SmeResponsiveWindowBreakpoints.PhoneUp: return this.checkWindowSize(this.dataTableMinWidthValues[SmeResponsiveWindowBreakpoints.PhoneUp]); default: return this.checkWindowSize(this.dataTableMinWidthValues[SmeResponsiveWindowBreakpoints.PhoneUp]); } } }; MasterViewResponsiveWindowManager = __decorate([ __param(0, SkipSelf()), __param(0, Optional()), __param(0, Inject(SME_LAYOUT_PROVIDER)), __metadata("design:paramtypes", [Object, String]) ], MasterViewResponsiveWindowManager); export { MasterViewResponsiveWindowManager }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzdGVyLXZpZXctcmVzcG9uc2l2ZS13aW5kb3ctbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL21hc3Rlci12aWV3L21hc3Rlci12aWV3LXJlc3BvbnNpdmUtd2luZG93LW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsOEJBQThCLEVBQTJCLG1DQUFtQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFPMUosSUFBTSxpQ0FBaUMsR0FBdkMsTUFBTSxpQ0FBa0MsU0FBUSxtQ0FBbUM7SUFvRnRGLFlBQWlFLE1BQWMsRUFBRSxpQkFBMEI7UUFDdkcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBbkZsQjs7V0FFRztRQUNhLFNBQUksR0FBRyxpQkFBaUIsQ0FBQztRQUV6Qzs7O1dBR0c7UUFDSSx5Q0FBb0MsR0FBRyxLQUFLLENBQUM7UUFFcEQ7O1dBRUc7UUFDSSxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFakM7O1dBRUc7UUFDSSxzQ0FBaUMsR0FBRyxLQUFLLENBQUM7UUFFakQ7O1dBRUc7UUFDSSx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFbkM7O1dBRUc7UUFDSSwwQ0FBcUMsR0FBRyxLQUFLLENBQUM7UUFFckQ7O1dBRUc7UUFDSSxpQ0FBNEIsR0FBRyxFQUFFLENBQUM7UUFTekM7Ozs7O1dBS0c7UUFDSyw0QkFBdUIsR0FBRztZQUM5QixNQUFNLEVBQUU7Z0JBQ0osR0FBRyxFQUFFLElBQUk7Z0JBQ1QsS0FBSyxFQUFFLEdBQUc7YUFDYjtZQUNELFNBQVMsRUFBRTtnQkFDUCxHQUFHLEVBQUUsS0FBSztnQkFDVixL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RDs7OztPQUlHO0lBQ0ssK0JBQStCLENBQUMsSUFBNkI7UUFDakUsUUFBUSxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ2hCLEtBQUssOEJBQThCLENBQUMsTUFBTTtnQkFDdEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3JHLEtBQUssOEJBQThCLENBQUMsU0FBUztnQkFDekMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyw4QkFBOEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3hHLEtBQUssOEJBQThCLENBQUMsT0FBTztnQkFDdkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3RHO2dCQUNJLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUN6RztJQUNMLENBQUM7Q0FDSixDQUFBO0FBN01ZLGlDQUFpQztJQW9GN0IsV0FBQSxRQUFRLEVBQUUsQ0FBQTtJQUFFLFdBQUEsUUFBUSxFQUFFLENBQUE7SUFBRSxXQUFBLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBOztHQXBGdkQsaUNBQWlDLENBNk03QztTQTdNWSxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMYXlvdXQsIFNNRV9MQVlPVVRfUFJPVklERVIgfSBmcm9tICcuLi9jb21tb24vbGF5b3V0JztcclxuaW1wb3J0IHsgU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzLCBTbWVSZXNwb25zaXZlV2luZG93RGF0YSwgU21lUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21tb24vc21lLXJlc3BvbnNpdmUtd2luZG93LW1hbmFnZXIuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVRhYmxlUHJlc2V0TWluV2lkdGgge1xyXG4gICAga2V5OiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWFzdGVyVmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyIGV4dGVuZHMgU21lUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXJDb21wb25lbnQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuYW1lID0gJ3NtZS1tYXN0ZXItdmlldyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcGFyYW1ldGVyIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHdyYXAgdGhlIHNlYXJjaCBib3ggYmFzZWQgb24gd2luZG93IHNpemUgY2hhbmdlcy5cclxuICAgICAqIE9uIHBob25lIGRvd24gYW5kIDQwMCUgem9vbSB3aWxsIHdyYXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZWFyY2hCb3hBdXRvV3JhcE9uV2luZG93U2l6ZUNoYW5nZXMgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2hvdyBvciBoaWRlIHRoZSBzY3JvbGwgYmFyIHZlcnRpY2FsbHkgYmFzZWQgb24gd2luZG93IHNpemUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG91bGRIaWRlWVNjcm9sbCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgd2hldGhlciB0byBzZXQgdGhlIG92ZXJmbG93IG9yIG5vdCBiYXNlZCBvbiB3aW5kb3cgc2l6ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3VsZERhdGFUYWJsZVBhcmVudE92ZXJmbG93SGlkZSA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGF0YSB0YWJsZSB3aWxsIGJlIHdyYXBwZWQgd2l0aCBob3Jpem9udGFsIHBhZGRpbmcgb24gd2luZG93IHNpemUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG91bGREYXRhVGFibGVTbGltID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcGFyYW1ldGVyIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJlbmRlciB0aGUgZGF0YSB0YWJsZSdzIGJvdHRvbSBtYXJnaW4gb24gd2luZG93IHNpemUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG91bGREYXRhVGFibGVSZW5kZXJXaXRoQm90dG9tTWFyZ2luID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcGFyYW1ldGVyIHRvIGRldGVybWluZSB0aGUgZGF0YSB0YWJsZSdzIG1pbiB3aWR0aCBjbGFzcyBpbiBzdHJpbmcgb24gd2luZG93IHNpemUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkYXRhVGFibGVNaW5XaWR0aENsYXNzU3RyaW5nID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWluaW11bSB3aWR0aCB0aGF0IHRoZSBkYXRhIHRhYmxlIGNhbiByZWFjaC5cclxuICAgICAqIFRoaXMgaXMgdGhlIHBhcmFtZXRlciB0aGF0IHBhc3NlZCBpbiBmcm9tIHRoZSBtYXN0ZXIgdmlldyBmb3IgdGhlIGhhcmQgY29uc3RyYWludC5cclxuICAgICAqIFNob3VsZCBvbmx5IGJlIHNldCBhdCBpbml0aWFsaXphdGlvblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRhdGFUYWJsZVByZXNldE1pbldpZHRoOiBEYXRhVGFibGVQcmVzZXRNaW5XaWR0aDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZGVzaWduIHB1cmVseSB3b24ndCBicmVhayB0aGUgb3JpZ2luYWwgZGVzaWduIGZvciB0aGUgY2xhc3MuXHJcbiAgICAgKiBJZGVhbGx5IHdlIHNob3VsZCBuZXZlciB1c2UgdGhlIGNsYXNzIHJlcHJlc2VudGF0aW9uLlxyXG4gICAgICogVGhlIHZhbHVlcyBhcmUgY29taW5nIGZyb20gdGhlIGNsYXNzIGZvciBzbWUtbGF5b3V0LW1pbndpZHRoLXNtIGFuZCBzbWUtbGF5b3V0LW1pbndpZHRoLW1kIHdpdGggb2xkIGRlc2lnbi5cclxuICAgICAqIEZvciBwaG9uZSBkb3duLCBhbHdheXMgc2V0IHRvIHNtZS1sYXlvdXQtbWlud2lkdGgtc20sIG90aGVyd2lzZSByZXNwZWN0IHRoZSBkYXRhVGFibGVQcmVzZXRNaW5XaWR0aFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRhdGFUYWJsZU1pbldpZHRoVmFsdWVzID0ge1xyXG4gICAgICAgIFJlZmxvdzoge1xyXG4gICAgICAgICAgICBrZXk6ICd4cycsXHJcbiAgICAgICAgICAgIHZhbHVlOiAxMDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIFBob25lRG93bjoge1xyXG4gICAgICAgICAgICBrZXk6ICd4c20nLFxyXG4gICAgICAgICAgICB2YWx1ZTogMjAwXHJcbiAgICAgICAgfSxcclxuICAgICAgICBQaG9uZVVwOiB7XHJcbiAgICAgICAgICAgIGtleTogJ21kJyxcclxuICAgICAgICAgICAgdmFsdWU6IDUwMFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWFzdGVyIHZpZXcgY29tcG9uZW50IGNsYXNzZXMgb24gd2luZG93IHNpemUgY2hhbmdlZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc21lTWFzdGVyVmlld0NsYXNzTGlzdCA9IHtcclxuICAgICAgICBwaG9uZVVwOiBbJ3NtZS1hcnJhbmdlLXN0YWNrLXYnLCAnc21lLWxheW91dC1hYnNvbHV0ZSddLFxyXG4gICAgICAgIHBob25lRG93bjogWydzbWUtYXJyYW5nZS1zdGFjay12JywgJ3NtZS1sYXlvdXQtcmVsYXRpdmUnXSxcclxuICAgICAgICByZWZsb3c6IFsnc21lLWFycmFuZ2Utc3RhY2stdicsICdzbWUtbGF5b3V0LXJlbGF0aXZlJ11cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGF0YSB0YWJsZSdzIHdyYXBwZXIncyBjbGFzc2VzIG9uIHdpbmRvdyBzaXplIGNoYW5nZWQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNtZURhdGFUYWJsZVdyYXBwZXJEaXZDbGFzc0xpc3QgPSB7XHJcbiAgICAgICAgcGhvbmVVcDogW10sXHJcbiAgICAgICAgcGhvbmVEb3duOiBbJ3NtZS1wb3NpdGlvbi1zdHJldGNoLXYnXSxcclxuICAgICAgICByZWZsb3c6IFtdXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIEBJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUikgbGF5b3V0OiBMYXlvdXQsIGRhdGFUYWJsZU1heFdpZHRoPzogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobGF5b3V0KTtcclxuICAgICAgICBpZiAoZGF0YVRhYmxlTWF4V2lkdGgpIHtcclxuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVRhYmxlTWluV2lkdGhWYWx1ZXMpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhVGFibGVNaW5XaWR0aFZhbHVlc1trZXldLmtleSA9PT0gZGF0YVRhYmxlTWF4V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFUYWJsZVByZXNldE1pbldpZHRoID0gdGhpcy5kYXRhVGFibGVNaW5XaWR0aFZhbHVlc1trZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhVGFibGVQcmVzZXRNaW5XaWR0aCA9IHRoaXMuZGF0YVRhYmxlTWluV2lkdGhWYWx1ZXMuUGhvbmVVcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdGhlIGFjdHVhbCB3aW5kb3cgc2l6ZSBhbmQgdGhlIHByZXNldCB3aW5kb3cgc2l6ZS5cclxuICAgICAqIFRoZSBpbnRlbnRpb24gaXMgdGhhdCB0aGUgcHJlc2V0IHNpemUgY2Fubm90IGdvIGJleW9uZCBhY3R1YWwgd2luZG93IHNpemUgdG8gcHJldmVudCBhZGRpdGlvbmFsIGhvcml6b250YWwgc2Nyb2xsIGJhci5cclxuICAgICAqIEBwYXJhbSBzaXplIHRoZSBvYmplY3Qgc2V0dGluZ3MgZm9yIHNwZWNpZmljIHdpbmRvdyBzaXplXHJcbiAgICAgKiBAcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3Igd2luZG93IHNpemUgc3RyaW5nLCAnbWQnIG9yICdzbSdcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoZWNrV2luZG93U2l6ZShzaXplOiBEYXRhVGFibGVQcmVzZXRNaW5XaWR0aCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlUHJlc2V0TWluV2lkdGgudmFsdWUgPCBzaXplLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFUYWJsZVByZXNldE1pbldpZHRoLmtleTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gc2l6ZS5rZXk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgb24gd2luZG93IHNpemUgY2hhbmdlZCBldmVudC5cclxuICAgICAqIEBwYXJhbSBtYXN0ZXJWaWV3RWxlbWVudCB0aGUgaHRtbCBlbGVtZW50IGZvciB0aGUgbWFzdGVyIHZpZXcgZWxlbWVudC5cclxuICAgICAqIEByZXR1cm5zIHZvaWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbldpbmRvd1NpemVDaGFuZ2VkKG1hc3RlclZpZXdFbGVtZW50OiBIVE1MRWxlbWVudCwgc3RyZXRjaFRvQWJzb2x1dGUgPSB0cnVlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNzc1YyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbWFzdGVyVmlld0VsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJldlNpemU7XHJcblxyXG4gICAgICAgIGlmICghc2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVBhcmFtZXRlcnMoc2l6ZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGFUYWJsZUVsZW1lbnQgPSBtYXN0ZXJWaWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yKCdzbWUtZGF0YS10YWJsZSwgc21lLXRyZWUtdGFibGUnKTtcclxuICAgICAgICBsZXQgZGF0YVRhYmxlV3JhcHBlckRpdjtcclxuXHJcbiAgICAgICAgaWYgKGRhdGFUYWJsZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZGF0YVRhYmxlV3JhcHBlckRpdiA9IGRhdGFUYWJsZUVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzaXplLnBob25lRG93bikge1xyXG4gICAgICAgICAgICBpZiAobWFzdGVyVmlld0VsZW1lbnQgJiYgc3RyZXRjaFRvQWJzb2x1dGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NBcnJheU9uV2luZG93U2l6ZShcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtZU1hc3RlclZpZXdDbGFzc0xpc3QsICdwaG9uZURvd24nLCBtYXN0ZXJWaWV3RWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhVGFibGVXcmFwcGVyRGl2KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzQXJyYXlPbldpbmRvd1NpemUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWVEYXRhVGFibGVXcmFwcGVyRGl2Q2xhc3NMaXN0LCAncGhvbmVEb3duJywgZGF0YVRhYmxlV3JhcHBlckRpdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHNpemUucmVmbG93TW9kZSkge1xyXG4gICAgICAgICAgICBpZiAobWFzdGVyVmlld0VsZW1lbnQgJiYgc3RyZXRjaFRvQWJzb2x1dGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NBcnJheU9uV2luZG93U2l6ZShcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtZU1hc3RlclZpZXdDbGFzc0xpc3QsICdyZWZsb3cnLCBtYXN0ZXJWaWV3RWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhVGFibGVXcmFwcGVyRGl2KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzQXJyYXlPbldpbmRvd1NpemUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWVEYXRhVGFibGVXcmFwcGVyRGl2Q2xhc3NMaXN0LCAncmVmbG93JywgZGF0YVRhYmxlV3JhcHBlckRpdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHNpemUucGhvbmVVcCkge1xyXG4gICAgICAgICAgICBpZiAobWFzdGVyVmlld0VsZW1lbnQgJiYgc3RyZXRjaFRvQWJzb2x1dGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NBcnJheU9uV2luZG93U2l6ZShcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtZU1hc3RlclZpZXdDbGFzc0xpc3QsICdwaG9uZVVwJywgbWFzdGVyVmlld0VsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0YVRhYmxlV3JhcHBlckRpdikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDbGFzc0FycmF5T25XaW5kb3dTaXplKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21lRGF0YVRhYmxlV3JhcHBlckRpdkNsYXNzTGlzdCwgJ3Bob25lVXAnLCBkYXRhVGFibGVXcmFwcGVyRGl2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIHBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIGRhdGEgdGFibGUgb24gd2luZG93IHNpemUgY2hhbmdlcy5cclxuICAgICAqIEBwYXJhbSBzaXplIHRoZSBjdXJyZW50IHNpemUgb2JqZWN0IGZvciB0aGUgd2luZG93LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHVwZGF0ZVBhcmFtZXRlcnMoc2l6ZTogU21lUmVzcG9uc2l2ZVdpbmRvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaEJveEF1dG9XcmFwT25XaW5kb3dTaXplQ2hhbmdlcyA9IHNpemUgJiZcclxuICAgICAgICAgICAgKHNpemUuc2l6ZSA9PT0gU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzLlJlZmxvdyB8fCBzaXplLnNpemUgPT09IFNtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cy5QaG9uZURvd24pO1xyXG4gICAgICAgIHRoaXMuc2hvdWxkSGlkZVlTY3JvbGwgPSBzaXplICYmIHNpemUucGhvbmVVcDtcclxuICAgICAgICB0aGlzLnNob3VsZERhdGFUYWJsZVBhcmVudE92ZXJmbG93SGlkZSA9IHNpemUgJiYgc2l6ZS5waG9uZVVwO1xyXG4gICAgICAgIHRoaXMuc2hvdWxkRGF0YVRhYmxlU2xpbSA9IHNpemUgJiYgKHNpemUucGhvbmVEb3duIHx8IHNpemUucmVmbG93TW9kZSk7XHJcbiAgICAgICAgdGhpcy5zaG91bGREYXRhVGFibGVSZW5kZXJXaXRoQm90dG9tTWFyZ2luID0gc2l6ZSAmJiAoc2l6ZS5waG9uZURvd24gfHwgc2l6ZS5yZWZsb3dNb2RlKTtcclxuICAgICAgICB0aGlzLmRhdGFUYWJsZU1pbldpZHRoQ2xhc3NTdHJpbmcgPSB0aGlzLmdldERhdGFUYWJsZU1pbldpZHRoQ2xhc3NTdHJpbmcoc2l6ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBkYXRhIHRhYmxlJ3MgbWluLXdpZHRoIHN0cmluZy5cclxuICAgICAqIEBwYXJhbSBzaXplIHRoZSBjdXJyZW50IHNpemUgb2JqZWN0IGZvciB0aGUgd2luZG93LlxyXG4gICAgICogQHJldHVybnMgc3RyaW5nIHJlcHJlc2VudGluZyBkYXRhLXRhYmxlJ3MgbWluLXdpZHRoXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0RGF0YVRhYmxlTWluV2lkdGhDbGFzc1N0cmluZyhzaXplOiBTbWVSZXNwb25zaXZlV2luZG93RGF0YSk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoIChzaXplPy5zaXplKSB7XHJcbiAgICAgICAgICAgIGNhc2UgU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzLlJlZmxvdzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrV2luZG93U2l6ZSh0aGlzLmRhdGFUYWJsZU1pbldpZHRoVmFsdWVzW1NtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cy5SZWZsb3ddKTtcclxuICAgICAgICAgICAgY2FzZSBTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHMuUGhvbmVEb3duOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tXaW5kb3dTaXplKHRoaXMuZGF0YVRhYmxlTWluV2lkdGhWYWx1ZXNbU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzLlBob25lRG93bl0pO1xyXG4gICAgICAgICAgICBjYXNlIFNtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cy5QaG9uZVVwOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tXaW5kb3dTaXplKHRoaXMuZGF0YVRhYmxlTWluV2lkdGhWYWx1ZXNbU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzLlBob25lVXBdKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrV2luZG93U2l6ZSh0aGlzLmRhdGFUYWJsZU1pbldpZHRoVmFsdWVzW1NtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cy5QaG9uZVVwXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==