UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

185 lines 25.8 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 * To make it work better on dialog. Should not have any effect on data table. */ this.dataTableMinWidthValues = { Reflow: { key: 'xs', value: 100 }, PhoneDown: { key: 'xsm', value: 200 }, PhoneUp: { key: 'md', value: 450 } }; /** * 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzdGVyLXZpZXctcmVzcG9uc2l2ZS13aW5kb3ctbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL21hc3Rlci12aWV3L21hc3Rlci12aWV3LXJlc3BvbnNpdmUtd2luZG93LW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsOEJBQThCLEVBQTJCLG1DQUFtQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFPMUosSUFBTSxpQ0FBaUMsR0FBdkMsTUFBTSxpQ0FBa0MsU0FBUSxtQ0FBbUM7SUFxRnRGLFlBQWlFLE1BQWMsRUFBRSxpQkFBMEI7UUFDdkcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBcEZsQjs7V0FFRztRQUNhLFNBQUksR0FBRyxpQkFBaUIsQ0FBQztRQUV6Qzs7O1dBR0c7UUFDSSx5Q0FBb0MsR0FBRyxLQUFLLENBQUM7UUFFcEQ7O1dBRUc7UUFDSSxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFakM7O1dBRUc7UUFDSSxzQ0FBaUMsR0FBRyxLQUFLLENBQUM7UUFFakQ7O1dBRUc7UUFDSSx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFbkM7O1dBRUc7UUFDSSwwQ0FBcUMsR0FBRyxLQUFLLENBQUM7UUFFckQ7O1dBRUc7UUFDSSxpQ0FBNEIsR0FBRyxFQUFFLENBQUM7UUFTekM7Ozs7OztVQU1FO1FBQ00sNEJBQXVCLEdBQUc7WUFDOUIsTUFBTSxFQUFFO2dCQUNKLEdBQUcsRUFBRSxJQUFJO2dCQUNULEtBQUssRUFBRSxHQUFHO2FBQ2I7WUFDRCxTQUFTLEVBQUU7Z0JBQ1AsR0FBRyxFQUFFLEtBQUs7Z0JBQ1Ys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RUQ7Ozs7T0FJRztJQUNLLCtCQUErQixDQUFDLElBQTZCO1FBQ2pFLFFBQVEsSUFBSSxFQUFFLElBQUksRUFBRTtZQUNoQixLQUFLLDhCQUE4QixDQUFDLE1BQU07Z0JBQ3RDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsOEJBQThCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNyRyxLQUFLLDhCQUE4QixDQUFDLFNBQVM7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsOEJBQThCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN4RyxLQUFLLDhCQUE4QixDQUFDLE9BQU87Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN0RztnQkFDSSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDekc7SUFDTCxDQUFDO0NBQ0osQ0FBQTtBQTlNWSxpQ0FBaUM7SUFxRjdCLFdBQUEsUUFBUSxFQUFFLENBQUE7SUFBRSxXQUFBLFFBQVEsRUFBRSxDQUFBO0lBQUUsV0FBQSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTs7R0FyRnZELGlDQUFpQyxDQThNN0M7U0E5TVksaUNBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBPcHRpb25hbCwgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTGF5b3V0LCBTTUVfTEFZT1VUX1BST1ZJREVSIH0gZnJvbSAnLi4vY29tbW9uL2xheW91dCc7XHJcbmltcG9ydCB7IFNtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cywgU21lUmVzcG9uc2l2ZVdpbmRvd0RhdGEsIFNtZVJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL3NtZS1yZXNwb25zaXZlLXdpbmRvdy1tYW5hZ2VyLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERhdGFUYWJsZVByZXNldE1pbldpZHRoIHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hc3RlclZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlciBleHRlbmRzIFNtZVJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyQ29tcG9uZW50IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBjb250cm9sLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZSA9ICdzbWUtbWFzdGVyLXZpZXcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgd2hldGhlciB0byB3cmFwIHRoZSBzZWFyY2ggYm94IGJhc2VkIG9uIHdpbmRvdyBzaXplIGNoYW5nZXMuXHJcbiAgICAgKiBPbiBwaG9uZSBkb3duIGFuZCA0MDAlIHpvb20gd2lsbCB3cmFwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VhcmNoQm94QXV0b1dyYXBPbldpbmRvd1NpemVDaGFuZ2VzID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcGFyYW1ldGVyIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHNob3cgb3IgaGlkZSB0aGUgc2Nyb2xsIGJhciB2ZXJ0aWNhbGx5IGJhc2VkIG9uIHdpbmRvdyBzaXplLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvdWxkSGlkZVlTY3JvbGwgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2V0IHRoZSBvdmVyZmxvdyBvciBub3QgYmFzZWQgb24gd2luZG93IHNpemUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG91bGREYXRhVGFibGVQYXJlbnRPdmVyZmxvd0hpZGUgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRhdGEgdGFibGUgd2lsbCBiZSB3cmFwcGVkIHdpdGggaG9yaXpvbnRhbCBwYWRkaW5nIG9uIHdpbmRvdyBzaXplLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvdWxkRGF0YVRhYmxlU2xpbSA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgd2hldGhlciB0byByZW5kZXIgdGhlIGRhdGEgdGFibGUncyBib3R0b20gbWFyZ2luIG9uIHdpbmRvdyBzaXplLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvdWxkRGF0YVRhYmxlUmVuZGVyV2l0aEJvdHRvbU1hcmdpbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgdGhlIGRhdGEgdGFibGUncyBtaW4gd2lkdGggY2xhc3MgaW4gc3RyaW5nIG9uIHdpbmRvdyBzaXplLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGF0YVRhYmxlTWluV2lkdGhDbGFzc1N0cmluZyA9ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1pbmltdW0gd2lkdGggdGhhdCB0aGUgZGF0YSB0YWJsZSBjYW4gcmVhY2guXHJcbiAgICAgKiBUaGlzIGlzIHRoZSBwYXJhbWV0ZXIgdGhhdCBwYXNzZWQgaW4gZnJvbSB0aGUgbWFzdGVyIHZpZXcgZm9yIHRoZSBoYXJkIGNvbnN0cmFpbnQuXHJcbiAgICAgKiBTaG91bGQgb25seSBiZSBzZXQgYXQgaW5pdGlhbGl6YXRpb25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkYXRhVGFibGVQcmVzZXRNaW5XaWR0aDogRGF0YVRhYmxlUHJlc2V0TWluV2lkdGg7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGRlc2lnbiBwdXJlbHkgd29uJ3QgYnJlYWsgdGhlIG9yaWdpbmFsIGRlc2lnbiBmb3IgdGhlIGNsYXNzLlxyXG4gICAgICogSWRlYWxseSB3ZSBzaG91bGQgbmV2ZXIgdXNlIHRoZSBjbGFzcyByZXByZXNlbnRhdGlvbi5cclxuICAgICAqIFRoZSB2YWx1ZXMgYXJlIGNvbWluZyBmcm9tIHRoZSBjbGFzcyBmb3Igc21lLWxheW91dC1taW53aWR0aC1zbSBhbmQgc21lLWxheW91dC1taW53aWR0aC1tZCB3aXRoIG9sZCBkZXNpZ24uXHJcbiAgICAgKiBGb3IgcGhvbmUgZG93biwgYWx3YXlzIHNldCB0byBzbWUtbGF5b3V0LW1pbndpZHRoLXNtLCBvdGhlcndpc2UgcmVzcGVjdCB0aGUgZGF0YVRhYmxlUHJlc2V0TWluV2lkdGhcclxuICAgICAqIFRvIG1ha2UgaXQgd29yayBiZXR0ZXIgb24gZGlhbG9nLiBTaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBvbiBkYXRhIHRhYmxlLlxyXG4gICAgKi9cclxuICAgIHByaXZhdGUgZGF0YVRhYmxlTWluV2lkdGhWYWx1ZXMgPSB7XHJcbiAgICAgICAgUmVmbG93OiB7XHJcbiAgICAgICAgICAgIGtleTogJ3hzJyxcclxuICAgICAgICAgICAgdmFsdWU6IDEwMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgUGhvbmVEb3duOiB7XHJcbiAgICAgICAgICAgIGtleTogJ3hzbScsXHJcbiAgICAgICAgICAgIHZhbHVlOiAyMDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIFBob25lVXA6IHtcclxuICAgICAgICAgICAga2V5OiAnbWQnLFxyXG4gICAgICAgICAgICB2YWx1ZTogNDUwXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtYXN0ZXIgdmlldyBjb21wb25lbnQgY2xhc3NlcyBvbiB3aW5kb3cgc2l6ZSBjaGFuZ2VkIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzbWVNYXN0ZXJWaWV3Q2xhc3NMaXN0ID0ge1xyXG4gICAgICAgIHBob25lVXA6IFsnc21lLWFycmFuZ2Utc3RhY2stdicsICdzbWUtbGF5b3V0LWFic29sdXRlJ10sXHJcbiAgICAgICAgcGhvbmVEb3duOiBbJ3NtZS1hcnJhbmdlLXN0YWNrLXYnLCAnc21lLWxheW91dC1yZWxhdGl2ZSddLFxyXG4gICAgICAgIHJlZmxvdzogWydzbWUtYXJyYW5nZS1zdGFjay12JywgJ3NtZS1sYXlvdXQtcmVsYXRpdmUnXVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkYXRhIHRhYmxlJ3Mgd3JhcHBlcidzIGNsYXNzZXMgb24gd2luZG93IHNpemUgY2hhbmdlZCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc21lRGF0YVRhYmxlV3JhcHBlckRpdkNsYXNzTGlzdCA9IHtcclxuICAgICAgICBwaG9uZVVwOiBbXSxcclxuICAgICAgICBwaG9uZURvd246IFsnc21lLXBvc2l0aW9uLXN0cmV0Y2gtdiddLFxyXG4gICAgICAgIHJlZmxvdzogW11cclxuICAgIH07XHJcblxyXG4gICAgY29uc3RydWN0b3IoQFNraXBTZWxmKCkgQE9wdGlvbmFsKCkgQEluamVjdChTTUVfTEFZT1VUX1BST1ZJREVSKSBsYXlvdXQ6IExheW91dCwgZGF0YVRhYmxlTWF4V2lkdGg/OiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihsYXlvdXQpO1xyXG4gICAgICAgIGlmIChkYXRhVGFibGVNYXhXaWR0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5kYXRhVGFibGVNaW5XaWR0aFZhbHVlcyk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGtleXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZU1pbldpZHRoVmFsdWVzW2tleV0ua2V5ID09PSBkYXRhVGFibGVNYXhXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlUHJlc2V0TWluV2lkdGggPSB0aGlzLmRhdGFUYWJsZU1pbldpZHRoVmFsdWVzW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFUYWJsZVByZXNldE1pbldpZHRoID0gdGhpcy5kYXRhVGFibGVNaW5XaWR0aFZhbHVlcy5QaG9uZVVwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0aGUgYWN0dWFsIHdpbmRvdyBzaXplIGFuZCB0aGUgcHJlc2V0IHdpbmRvdyBzaXplLlxyXG4gICAgICogVGhlIGludGVudGlvbiBpcyB0aGF0IHRoZSBwcmVzZXQgc2l6ZSBjYW5ub3QgZ28gYmV5b25kIGFjdHVhbCB3aW5kb3cgc2l6ZSB0byBwcmV2ZW50IGFkZGl0aW9uYWwgaG9yaXpvbnRhbCBzY3JvbGwgYmFyLlxyXG4gICAgICogQHBhcmFtIHNpemUgdGhlIG9iamVjdCBzZXR0aW5ncyBmb3Igc3BlY2lmaWMgd2luZG93IHNpemVcclxuICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB3aW5kb3cgc2l6ZSBzdHJpbmcsICdtZCcgb3IgJ3NtJ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hlY2tXaW5kb3dTaXplKHNpemU6IERhdGFUYWJsZVByZXNldE1pbldpZHRoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGVQcmVzZXRNaW5XaWR0aC52YWx1ZSA8IHNpemUudmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVRhYmxlUHJlc2V0TWluV2lkdGgua2V5O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzaXplLmtleTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBvbiB3aW5kb3cgc2l6ZSBjaGFuZ2VkIGV2ZW50LlxyXG4gICAgICogQHBhcmFtIG1hc3RlclZpZXdFbGVtZW50IHRoZSBodG1sIGVsZW1lbnQgZm9yIHRoZSBtYXN0ZXIgdmlldyBlbGVtZW50LlxyXG4gICAgICogQHJldHVybnMgdm9pZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uV2luZG93U2l6ZUNoYW5nZWQobWFzdGVyVmlld0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBzdHJldGNoVG9BYnNvbHV0ZSA9IHRydWUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3NzVjIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFtYXN0ZXJWaWV3RWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcmV2U2l6ZTtcclxuXHJcbiAgICAgICAgaWYgKCFzaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUGFyYW1ldGVycyhzaXplKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGF0YVRhYmxlRWxlbWVudCA9IG1hc3RlclZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NtZS1kYXRhLXRhYmxlLCBzbWUtdHJlZS10YWJsZScpO1xyXG4gICAgICAgIGxldCBkYXRhVGFibGVXcmFwcGVyRGl2O1xyXG5cclxuICAgICAgICBpZiAoZGF0YVRhYmxlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBkYXRhVGFibGVXcmFwcGVyRGl2ID0gZGF0YVRhYmxlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNpemUucGhvbmVEb3duKSB7XHJcbiAgICAgICAgICAgIGlmIChtYXN0ZXJWaWV3RWxlbWVudCAmJiBzdHJldGNoVG9BYnNvbHV0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDbGFzc0FycmF5T25XaW5kb3dTaXplKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21lTWFzdGVyVmlld0NsYXNzTGlzdCwgJ3Bob25lRG93bicsIG1hc3RlclZpZXdFbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGFUYWJsZVdyYXBwZXJEaXYpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NBcnJheU9uV2luZG93U2l6ZShcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtZURhdGFUYWJsZVdyYXBwZXJEaXZDbGFzc0xpc3QsICdwaG9uZURvd24nLCBkYXRhVGFibGVXcmFwcGVyRGl2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZS5yZWZsb3dNb2RlKSB7XHJcbiAgICAgICAgICAgIGlmIChtYXN0ZXJWaWV3RWxlbWVudCAmJiBzdHJldGNoVG9BYnNvbHV0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDbGFzc0FycmF5T25XaW5kb3dTaXplKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21lTWFzdGVyVmlld0NsYXNzTGlzdCwgJ3JlZmxvdycsIG1hc3RlclZpZXdFbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGFUYWJsZVdyYXBwZXJEaXYpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NBcnJheU9uV2luZG93U2l6ZShcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtZURhdGFUYWJsZVdyYXBwZXJEaXZDbGFzc0xpc3QsICdyZWZsb3cnLCBkYXRhVGFibGVXcmFwcGVyRGl2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZS5waG9uZVVwKSB7XHJcbiAgICAgICAgICAgIGlmIChtYXN0ZXJWaWV3RWxlbWVudCAmJiBzdHJldGNoVG9BYnNvbHV0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDbGFzc0FycmF5T25XaW5kb3dTaXplKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21lTWFzdGVyVmlld0NsYXNzTGlzdCwgJ3Bob25lVXAnLCBtYXN0ZXJWaWV3RWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhVGFibGVXcmFwcGVyRGl2KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzQXJyYXlPbldpbmRvd1NpemUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWVEYXRhVGFibGVXcmFwcGVyRGl2Q2xhc3NMaXN0LCAncGhvbmVVcCcsIGRhdGFUYWJsZVdyYXBwZXJEaXYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgcGFyYW1ldGVycyB1c2VkIGZvciB0aGUgZGF0YSB0YWJsZSBvbiB3aW5kb3cgc2l6ZSBjaGFuZ2VzLlxyXG4gICAgICogQHBhcmFtIHNpemUgdGhlIGN1cnJlbnQgc2l6ZSBvYmplY3QgZm9yIHRoZSB3aW5kb3cuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlUGFyYW1ldGVycyhzaXplOiBTbWVSZXNwb25zaXZlV2luZG93RGF0YSkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoQm94QXV0b1dyYXBPbldpbmRvd1NpemVDaGFuZ2VzID0gc2l6ZSAmJlxyXG4gICAgICAgICAgICAoc2l6ZS5zaXplID09PSBTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHMuUmVmbG93IHx8IHNpemUuc2l6ZSA9PT0gU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzLlBob25lRG93bik7XHJcbiAgICAgICAgdGhpcy5zaG91bGRIaWRlWVNjcm9sbCA9IHNpemUgJiYgc2l6ZS5waG9uZVVwO1xyXG4gICAgICAgIHRoaXMuc2hvdWxkRGF0YVRhYmxlUGFyZW50T3ZlcmZsb3dIaWRlID0gc2l6ZSAmJiBzaXplLnBob25lVXA7XHJcbiAgICAgICAgdGhpcy5zaG91bGREYXRhVGFibGVTbGltID0gc2l6ZSAmJiAoc2l6ZS5waG9uZURvd24gfHwgc2l6ZS5yZWZsb3dNb2RlKTtcclxuICAgICAgICB0aGlzLnNob3VsZERhdGFUYWJsZVJlbmRlcldpdGhCb3R0b21NYXJnaW4gPSBzaXplICYmIChzaXplLnBob25lRG93biB8fCBzaXplLnJlZmxvd01vZGUpO1xyXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlTWluV2lkdGhDbGFzc1N0cmluZyA9IHRoaXMuZ2V0RGF0YVRhYmxlTWluV2lkdGhDbGFzc1N0cmluZyhzaXplKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGRhdGEgdGFibGUncyBtaW4td2lkdGggc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHNpemUgdGhlIGN1cnJlbnQgc2l6ZSBvYmplY3QgZm9yIHRoZSB3aW5kb3cuXHJcbiAgICAgKiBAcmV0dXJucyBzdHJpbmcgcmVwcmVzZW50aW5nIGRhdGEtdGFibGUncyBtaW4td2lkdGhcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXREYXRhVGFibGVNaW5XaWR0aENsYXNzU3RyaW5nKHNpemU6IFNtZVJlc3BvbnNpdmVXaW5kb3dEYXRhKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKHNpemU/LnNpemUpIHtcclxuICAgICAgICAgICAgY2FzZSBTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHMuUmVmbG93OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tXaW5kb3dTaXplKHRoaXMuZGF0YVRhYmxlTWluV2lkdGhWYWx1ZXNbU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzLlJlZmxvd10pO1xyXG4gICAgICAgICAgICBjYXNlIFNtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50cy5QaG9uZURvd246XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja1dpbmRvd1NpemUodGhpcy5kYXRhVGFibGVNaW5XaWR0aFZhbHVlc1tTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHMuUGhvbmVEb3duXSk7XHJcbiAgICAgICAgICAgIGNhc2UgU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzLlBob25lVXA6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja1dpbmRvd1NpemUodGhpcy5kYXRhVGFibGVNaW5XaWR0aFZhbHVlc1tTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHMuUGhvbmVVcF0pO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tXaW5kb3dTaXplKHRoaXMuZGF0YVRhYmxlTWluV2lkdGhWYWx1ZXNbU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzLlBob25lVXBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19