You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
21 KiB
198 lines
21 KiB
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
import { Directive, Input, Optional, ElementRef, } from '@angular/core';
|
|
import { MatDialog } from './dialog';
|
|
import { _closeDialogVia, MatDialogRef } from './dialog-ref';
|
|
/** Counter used to generate unique IDs for dialog elements. */
|
|
import * as ɵngcc0 from '@angular/core';
|
|
import * as ɵngcc1 from './dialog-ref';
|
|
import * as ɵngcc2 from './dialog';
|
|
let dialogElementUid = 0;
|
|
/**
|
|
* Button that will close the current dialog.
|
|
*/
|
|
export class MatDialogClose {
|
|
constructor(
|
|
/**
|
|
* Reference to the containing dialog.
|
|
* @deprecated `dialogRef` property to become private.
|
|
* @breaking-change 13.0.0
|
|
*/
|
|
// The dialog title directive is always used in combination with a `MatDialogRef`.
|
|
// tslint:disable-next-line: lightweight-tokens
|
|
dialogRef, _elementRef, _dialog) {
|
|
this.dialogRef = dialogRef;
|
|
this._elementRef = _elementRef;
|
|
this._dialog = _dialog;
|
|
/** Default to "button" to prevents accidental form submits. */
|
|
this.type = 'button';
|
|
}
|
|
ngOnInit() {
|
|
if (!this.dialogRef) {
|
|
// When this directive is included in a dialog via TemplateRef (rather than being
|
|
// in a Component), the DialogRef isn't available via injection because embedded
|
|
// views cannot be given a custom injector. Instead, we look up the DialogRef by
|
|
// ID. This must occur in `onInit`, as the ID binding for the dialog container won't
|
|
// be resolved at constructor time.
|
|
this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);
|
|
}
|
|
}
|
|
ngOnChanges(changes) {
|
|
const proxiedChange = changes['_matDialogClose'] || changes['_matDialogCloseResult'];
|
|
if (proxiedChange) {
|
|
this.dialogResult = proxiedChange.currentValue;
|
|
}
|
|
}
|
|
_onButtonClick(event) {
|
|
// Determinate the focus origin using the click event, because using the FocusMonitor will
|
|
// result in incorrect origins. Most of the time, close buttons will be auto focused in the
|
|
// dialog, and therefore clicking the button won't result in a focus change. This means that
|
|
// the FocusMonitor won't detect any origin change, and will always output `program`.
|
|
_closeDialogVia(this.dialogRef, event.screenX === 0 && event.screenY === 0 ? 'keyboard' : 'mouse', this.dialogResult);
|
|
}
|
|
}
|
|
MatDialogClose.ɵfac = function MatDialogClose_Factory(t) { return new (t || MatDialogClose)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MatDialogRef, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.MatDialog)); };
|
|
MatDialogClose.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatDialogClose, selectors: [["", "mat-dialog-close", ""], ["", "matDialogClose", ""]], hostVars: 2, hostBindings: function MatDialogClose_HostBindings(rf, ctx) { if (rf & 1) {
|
|
ɵngcc0.ɵɵlistener("click", function MatDialogClose_click_HostBindingHandler($event) { return ctx._onButtonClick($event); });
|
|
} if (rf & 2) {
|
|
ɵngcc0.ɵɵattribute("aria-label", ctx.ariaLabel || null)("type", ctx.type);
|
|
} }, inputs: { type: "type", dialogResult: ["mat-dialog-close", "dialogResult"], ariaLabel: ["aria-label", "ariaLabel"], _matDialogClose: ["matDialogClose", "_matDialogClose"] }, exportAs: ["matDialogClose"], features: [ɵngcc0.ɵɵNgOnChangesFeature] });
|
|
MatDialogClose.ctorParameters = () => [
|
|
{ type: MatDialogRef, decorators: [{ type: Optional }] },
|
|
{ type: ElementRef },
|
|
{ type: MatDialog }
|
|
];
|
|
MatDialogClose.propDecorators = {
|
|
ariaLabel: [{ type: Input, args: ['aria-label',] }],
|
|
type: [{ type: Input }],
|
|
dialogResult: [{ type: Input, args: ['mat-dialog-close',] }],
|
|
_matDialogClose: [{ type: Input, args: ['matDialogClose',] }]
|
|
};
|
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatDialogClose, [{
|
|
type: Directive,
|
|
args: [{
|
|
selector: '[mat-dialog-close], [matDialogClose]',
|
|
exportAs: 'matDialogClose',
|
|
host: {
|
|
'(click)': '_onButtonClick($event)',
|
|
'[attr.aria-label]': 'ariaLabel || null',
|
|
'[attr.type]': 'type'
|
|
}
|
|
}]
|
|
}], function () { return [{ type: ɵngcc1.MatDialogRef, decorators: [{
|
|
type: Optional
|
|
}] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc2.MatDialog }]; }, { type: [{
|
|
type: Input
|
|
}], dialogResult: [{
|
|
type: Input,
|
|
args: ['mat-dialog-close']
|
|
}], ariaLabel: [{
|
|
type: Input,
|
|
args: ['aria-label']
|
|
}], _matDialogClose: [{
|
|
type: Input,
|
|
args: ['matDialogClose']
|
|
}] }); })();
|
|
/**
|
|
* Title of a dialog element. Stays fixed to the top of the dialog when scrolling.
|
|
*/
|
|
export class MatDialogTitle {
|
|
constructor(
|
|
// The dialog title directive is always used in combination with a `MatDialogRef`.
|
|
// tslint:disable-next-line: lightweight-tokens
|
|
_dialogRef, _elementRef, _dialog) {
|
|
this._dialogRef = _dialogRef;
|
|
this._elementRef = _elementRef;
|
|
this._dialog = _dialog;
|
|
/** Unique id for the dialog title. If none is supplied, it will be auto-generated. */
|
|
this.id = `mat-dialog-title-${dialogElementUid++}`;
|
|
}
|
|
ngOnInit() {
|
|
if (!this._dialogRef) {
|
|
this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);
|
|
}
|
|
if (this._dialogRef) {
|
|
Promise.resolve().then(() => {
|
|
const container = this._dialogRef._containerInstance;
|
|
if (container && !container._ariaLabelledBy) {
|
|
container._ariaLabelledBy = this.id;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
MatDialogTitle.ɵfac = function MatDialogTitle_Factory(t) { return new (t || MatDialogTitle)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MatDialogRef, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.MatDialog)); };
|
|
MatDialogTitle.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatDialogTitle, selectors: [["", "mat-dialog-title", ""], ["", "matDialogTitle", ""]], hostAttrs: [1, "mat-dialog-title"], hostVars: 1, hostBindings: function MatDialogTitle_HostBindings(rf, ctx) { if (rf & 2) {
|
|
ɵngcc0.ɵɵhostProperty("id", ctx.id);
|
|
} }, inputs: { id: "id" }, exportAs: ["matDialogTitle"] });
|
|
MatDialogTitle.ctorParameters = () => [
|
|
{ type: MatDialogRef, decorators: [{ type: Optional }] },
|
|
{ type: ElementRef },
|
|
{ type: MatDialog }
|
|
];
|
|
MatDialogTitle.propDecorators = {
|
|
id: [{ type: Input }]
|
|
};
|
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatDialogTitle, [{
|
|
type: Directive,
|
|
args: [{
|
|
selector: '[mat-dialog-title], [matDialogTitle]',
|
|
exportAs: 'matDialogTitle',
|
|
host: {
|
|
'class': 'mat-dialog-title',
|
|
'[id]': 'id'
|
|
}
|
|
}]
|
|
}], function () { return [{ type: ɵngcc1.MatDialogRef, decorators: [{
|
|
type: Optional
|
|
}] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc2.MatDialog }]; }, { id: [{
|
|
type: Input
|
|
}] }); })();
|
|
/**
|
|
* Scrollable content container of a dialog.
|
|
*/
|
|
export class MatDialogContent {
|
|
}
|
|
MatDialogContent.ɵfac = function MatDialogContent_Factory(t) { return new (t || MatDialogContent)(); };
|
|
MatDialogContent.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatDialogContent, selectors: [["", "mat-dialog-content", ""], ["mat-dialog-content"], ["", "matDialogContent", ""]], hostAttrs: [1, "mat-dialog-content"] });
|
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatDialogContent, [{
|
|
type: Directive,
|
|
args: [{
|
|
selector: `[mat-dialog-content], mat-dialog-content, [matDialogContent]`,
|
|
host: { 'class': 'mat-dialog-content' }
|
|
}]
|
|
}], null, null); })();
|
|
/**
|
|
* Container for the bottom action buttons in a dialog.
|
|
* Stays fixed to the bottom when scrolling.
|
|
*/
|
|
export class MatDialogActions {
|
|
}
|
|
MatDialogActions.ɵfac = function MatDialogActions_Factory(t) { return new (t || MatDialogActions)(); };
|
|
MatDialogActions.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatDialogActions, selectors: [["", "mat-dialog-actions", ""], ["mat-dialog-actions"], ["", "matDialogActions", ""]], hostAttrs: [1, "mat-dialog-actions"] });
|
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatDialogActions, [{
|
|
type: Directive,
|
|
args: [{
|
|
selector: `[mat-dialog-actions], mat-dialog-actions, [matDialogActions]`,
|
|
host: { 'class': 'mat-dialog-actions' }
|
|
}]
|
|
}], null, null); })();
|
|
/**
|
|
* Finds the closest MatDialogRef to an element by looking at the DOM.
|
|
* @param element Element relative to which to look for a dialog.
|
|
* @param openDialogs References to the currently-open dialogs.
|
|
*/
|
|
function getClosestDialog(element, openDialogs) {
|
|
let parent = element.nativeElement.parentElement;
|
|
while (parent && !parent.classList.contains('mat-dialog-container')) {
|
|
parent = parent.parentElement;
|
|
}
|
|
return parent ? openDialogs.find(dialog => dialog.id === parent.id) : null;
|
|
}
|
|
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWNvbnRlbnQtZGlyZWN0aXZlcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL2RpYWxvZy9kaWFsb2ctY29udGVudC1kaXJlY3RpdmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFFSCxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxRQUFRLEVBRVIsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFM0QsK0RBQStEOzs7O0FBQy9ELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBRXpCO0FBQ0E7QUFDQSxHQUFHO0FBVUgsTUFBTSxPQUFPLGNBQWM7QUFBRyxJQVk1QjtBQUNGLElBQ0k7QUFDSjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsSUFBSSxrRkFBa0Y7QUFDdEYsSUFBSSwrQ0FBK0M7QUFDbkQsSUFBdUIsU0FBNEIsRUFDdkMsV0FBb0MsRUFDcEMsT0FBa0I7QUFBSSxRQUZYLGNBQVMsR0FBVCxTQUFTLENBQW1CO0FBQUMsUUFDeEMsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO0FBQUMsUUFDckMsWUFBTyxHQUFQLE9BQU8sQ0FBVztBQUFDLFFBbkI3QiwrREFBK0Q7QUFDakUsUUFBVyxTQUFJLEdBQWtDLFFBQVEsQ0FBQztBQUMxRCxJQWlCaUMsQ0FBQztBQUNsQyxJQUNFLFFBQVE7QUFDVixRQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ3pCLFlBQU0saUZBQWlGO0FBQ3ZGLFlBQU0sZ0ZBQWdGO0FBQ3RGLFlBQU0sZ0ZBQWdGO0FBQ3RGLFlBQU0sb0ZBQW9GO0FBQzFGLFlBQU0sbUNBQW1DO0FBQ3pDLFlBQU0sSUFBSSxDQUFD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SyxNQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM5RSxDQUFDO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBFbGVtZW50UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICcuL2RpYWxvZyc7XG5pbXBvcnQge19jbG9zZURpYWxvZ1ZpYSwgTWF0RGlhbG9nUmVmfSBmcm9tICcuL2RpYWxvZy1yZWYnO1xuXG4vKiogQ291bnRlciB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMgZm9yIGRpYWxvZyBlbGVtZW50cy4gKi9cbmxldCBkaWFsb2dFbGVtZW50VWlkID0gMDtcblxuLyoqXG4gKiBCdXR0b24gdGhhdCB3aWxsIGNsb3NlIHRoZSBjdXJyZW50IGRpYWxvZy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW21hdC1kaWFsb2ctY2xvc2VdLCBbbWF0RGlhbG9nQ2xvc2VdJyxcbiAgZXhwb3J0QXM6ICdtYXREaWFsb2dDbG9zZScsXG4gIGhvc3Q6IHtcbiAgICAnKGNsaWNrKSc6ICdfb25CdXR0b25DbGljaygkZXZlbnQpJyxcbiAgICAnW2F0dHIuYXJpYS1sYWJlbF0nOiAnYXJpYUxhYmVsIHx8IG51bGwnLFxuICAgICdbYXR0ci50eXBlXSc6ICd0eXBlJyxcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBNYXREaWFsb2dDbG9zZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIFNjcmVlbnJlYWRlciBsYWJlbCBmb3IgdGhlIGJ1dHRvbi4gKi9cbiAgQElucHV0KCdhcmlhLWxhYmVsJykgYXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqIERlZmF1bHQgdG8gXCJidXR0b25cIiB0byBwcmV2ZW50cyBhY2NpZGVudGFsIGZvcm0gc3VibWl0cy4gKi9cbiAgQElucHV0KCkgdHlwZTogJ3N1Ym1pdCcgfCAnYnV0dG9uJyB8ICdyZXNldCcgPSAnYnV0dG9uJztcblxuICAvKiogRGlhbG9nIGNsb3NlIGlucHV0LiAqL1xuICBASW5wdXQoJ21hdC1kaWFsb2ctY2xvc2UnKSBkaWFsb2dSZXN1bHQ6IGFueTtcblxuICBASW5wdXQoJ21hdERpYWxvZ0Nsb3NlJykgX21hdERpYWxvZ0Nsb3NlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG5cbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGNvbnRhaW5pbmcgZGlhbG9nLlxuICAgICAqIEBkZXByZWNhdGVkIGBkaWFsb2dSZWZgIHByb3BlcnR5IHRvIGJlY29tZSBwcml2YXRlLlxuICAgICAqIEBicmVha2luZy1jaGFuZ2UgMTMuMC4wXG4gICAgICovXG4gICAgLy8gVGhlIGRpYWxvZyB0aXRsZSBkaXJlY3RpdmUgaXMgYWx3YXlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIGBNYXREaWFsb2dSZWZgLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbGlnaHR3ZWlnaHQtdG9rZW5zXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPGFueT4sXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2cpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmRpYWxvZ1JlZikge1xuICAgICAgLy8gV2hlbiB0aGlzIGRpcmVjdGl2ZSBpcyBpbmNsdWRlZCBpbiBhIGRpYWxvZyB2aWEgVGVtcGxhdGVSZWYgKHJhdGhlciB0aGFuIGJlaW5nXG4gICAgICAvLyBpbiBhIENvbXBvbmVudCksIHRoZSBEaWFsb2dSZWYgaXNuJ3QgYXZhaWxhYmxlIHZpYSBpbmplY3Rpb24gYmVjYXVzZSBlbWJlZGRlZFxuICAgICAgLy8gdmlld3MgY2Fubm90IGJlIGdpdmVuIGEgY3VzdG9tIGluamVjdG9yLiBJbnN0ZWFkLCB3ZSBsb29rIHVwIHRoZSBEaWFsb2dSZWYgYnlcbiAgICAgIC8vIElELiBUaGlzIG11c3Qgb2NjdXIgaW4gYG9uSW5pdGAsIGFzIHRoZSBJRCBiaW5kaW5nIGZvciB0aGUgZGlhbG9nIGNvbnRhaW5lciB3b24ndFxuICAgICAgLy8gYmUgcmVzb2x2ZWQgYXQgY29uc3RydWN0b3IgdGltZS5cbiAgICAgIHRoaXMuZGlhbG9nUmVmID0gZ2V0Q2xvc2VzdERpYWxvZyh0aGlzLl9lbGVtZW50UmVmLCB0aGlzLl9kaWFsb2cub3BlbkRpYWxvZ3MpITtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgcHJveGllZENoYW5nZSA9IGNoYW5nZXNbJ19tYXREaWFsb2dDbG9zZSddIHx8IGNoYW5nZXNbJ19tYXREaWFsb2dDbG9zZVJlc3VsdCddO1xuXG4gICAgaWYgKHByb3hpZWRDaGFuZ2UpIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVzdWx0ID0gcHJveGllZENoYW5nZS5jdXJyZW50VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgX29uQnV0dG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAvLyBEZXRlcm1pbmF0ZSB0aGUgZm9jdXMgb3JpZ2luIHVzaW5nIHRoZSBjbGljayBldmVudCwgYmVjYXVzZSB1c2luZyB0aGUgRm9jdXNNb25pdG9yIHdpbGxcbiAgICAvLyByZXN1bHQgaW4gaW5jb3JyZWN0IG9yaWdpbnMuIE1vc3Qgb2YgdGhlIHRpbWUsIGNsb3NlIGJ1dHRvbnMgd2lsbCBiZSBhdXRvIGZvY3VzZWQgaW4gdGhlXG4gICAgLy8gZGlhbG9nLCBhbmQgdGhlcmVmb3JlIGNsaWNraW5nIHRoZSBidXR0b24gd29uJ3QgcmVzdWx0IGluIGEgZm9jdXMgY2hhbmdlLiBUaGlzIG1lYW5zIHRoYXRcbiAgICAvLyB0aGUgRm9jdXNNb25pdG9yIHdvbid0IGRldGVjdCBhbnkgb3JpZ2luIGNoYW5nZSwgYW5kIHdpbGwgYWx3YXlzIG91dHB1dCBgcHJvZ3JhbWAuXG4gICAgX2Nsb3NlRGlhbG9nVmlhKHRoaXMuZGlhbG9nUmVmLFxuICAgICAgICBldmVudC5zY3JlZW5YID09PSAwICYmIGV2ZW50LnNjcmVlblkgPT09IDAgPyAna2V5Ym9hcmQnIDogJ21vdXNlJywgdGhpcy5kaWFsb2dSZXN1bHQpO1xuICB9XG59XG5cbi8qKlxuICogVGl0bGUgb2YgYSBkaWFsb2cgZWxlbWVudC4gU3RheXMgZml4ZWQgdG8gdGhlIHRvcCBvZiB0aGUgZGlhbG9nIHdoZW4gc2Nyb2xsaW5nLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbWF0LWRpYWxvZy10aXRsZV0sIFttYXREaWFsb2dUaXRsZV0nLFxuICBleHBvcnRBczogJ21hdERpYWxvZ1RpdGxlJyxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdtYXQtZGlhbG9nLXRpdGxlJyxcbiAgICAnW2lkXSc6ICdpZCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIE1hdERpYWxvZ1RpdGxlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqIFVuaXF1ZSBpZCBmb3IgdGhlIGRpYWxvZyB0aXRsZS4gSWYgbm9uZSBpcyBzdXBwbGllZCwgaXQgd2lsbCBiZSBhdXRvLWdlbmVyYXRlZC4gKi9cbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9IGBtYXQtZGlhbG9nLXRpdGxlLSR7ZGlhbG9nRWxlbWVudFVpZCsrfWA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICAvLyBUaGUgZGlhbG9nIHRpdGxlIGRpcmVjdGl2ZSBpcyBhbHdheXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgYE1hdERpYWxvZ1JlZmAuXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGxpZ2h0d2VpZ2h0LXRva2Vuc1xuICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8YW55PixcbiAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2cpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLl9kaWFsb2dSZWYpIHtcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IGdldENsb3Nlc3REaWFsb2codGhpcy5fZWxlbWVudFJlZiwgdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2dzKSE7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZikge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7XG5cbiAgICAgICAgaWYgKGNvbnRhaW5lciAmJiAhY29udGFpbmVyLl9hcmlhTGFiZWxsZWRCeSkge1xuICAgICAgICAgIGNvbnRhaW5lci5fYXJpYUxhYmVsbGVkQnkgPSB0aGlzLmlkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuXG4vKipcbiAqIFNjcm9sbGFibGUgY29udGVudCBjb250YWluZXIgb2YgYSBkaWFsb2cuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogYFttYXQtZGlhbG9nLWNvbnRlbnRdLCBtYXQtZGlhbG9nLWNvbnRlbnQsIFttYXREaWFsb2dDb250ZW50XWAsXG4gIGhvc3Q6IHsnY2xhc3MnOiAnbWF0LWRpYWxvZy1jb250ZW50J31cbn0pXG5leHBvcnQgY2xhc3MgTWF0RGlhbG9nQ29udGVudCB7fVxuXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgYm90dG9tIGFjdGlvbiBidXR0b25zIGluIGEgZGlhbG9nLlxuICogU3RheXMgZml4ZWQgdG8gdGhlIGJvdHRvbSB3aGVuIHNjcm9sbGluZy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBgW21hdC1kaWFsb2ctYWN0aW9uc10sIG1hdC1kaWFsb2ctYWN0aW9ucywgW21hdERpYWxvZ0FjdGlvbnNdYCxcbiAgaG9zdDogeydjbGFzcyc6ICdtYXQtZGlhbG9nLWFjdGlvbnMnfVxufSlcbmV4cG9ydCBjbGFzcyBNYXREaWFsb2dBY3Rpb25zIHt9XG5cblxuLyoqXG4gKiBGaW5kcyB0aGUgY2xvc2VzdCBNYXREaWFsb2dSZWYgdG8gYW4gZWxlbWVudCBieSBsb29raW5nIGF0IHRoZSBET00uXG4gKiBAcGFyYW0gZWxlbWVudCBFbGVtZW50IHJlbGF0aXZlIHRvIHdoaWNoIHRvIGxvb2sgZm9yIGEgZGlhbG9nLlxuICogQHBhcmFtIG9wZW5EaWFsb2dzIFJlZmVyZW5jZXMgdG8gdGhlIGN1cnJlbnRseS1vcGVuIGRpYWxvZ3MuXG4gKi9cbmZ1bmN0aW9uIGdldENsb3Nlc3REaWFsb2coZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sIG9wZW5EaWFsb2dzOiBNYXREaWFsb2dSZWY8YW55PltdKSB7XG4gIGxldCBwYXJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXG4gIHdoaWxlIChwYXJlbnQgJiYgIXBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdC1kaWFsb2ctY29udGFpbmVyJykpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBwYXJlbnQgPyBvcGVuRGlhbG9ncy5maW5kKGRpYWxvZyA9PiBkaWFsb2cuaWQgPT09IHBhcmVudCEuaWQpIDogbnVsbDtcbn1cbiJdfQ==
|