@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
185 lines • 25.8 kB
JavaScript
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