@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
184 lines • 25.6 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
*/
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==