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.
117 lines
13 KiB
117 lines
13 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, EventEmitter, Input, Output, NgZone, InjectionToken, Inject, Optional, } from '@angular/core';
|
|
import { Clipboard } from './clipboard';
|
|
/** Injection token that can be used to provide the default options to `CdkCopyToClipboard`. */
|
|
import * as ɵngcc0 from '@angular/core';
|
|
import * as ɵngcc1 from './clipboard';
|
|
export const CDK_COPY_TO_CLIPBOARD_CONFIG = new InjectionToken('CDK_COPY_TO_CLIPBOARD_CONFIG');
|
|
/**
|
|
* @deprecated Use `CDK_COPY_TO_CLIPBOARD_CONFIG` instead.
|
|
* @breaking-change 13.0.0
|
|
*/
|
|
export const CKD_COPY_TO_CLIPBOARD_CONFIG = CDK_COPY_TO_CLIPBOARD_CONFIG;
|
|
/**
|
|
* Provides behavior for a button that when clicked copies content into user's
|
|
* clipboard.
|
|
*/
|
|
export class CdkCopyToClipboard {
|
|
constructor(_clipboard, _ngZone, config) {
|
|
this._clipboard = _clipboard;
|
|
this._ngZone = _ngZone;
|
|
/** Content to be copied. */
|
|
this.text = '';
|
|
/**
|
|
* How many times to attempt to copy the text. This may be necessary for longer text, because
|
|
* the browser needs time to fill an intermediate textarea element and copy the content.
|
|
*/
|
|
this.attempts = 1;
|
|
/**
|
|
* Emits when some text is copied to the clipboard. The
|
|
* emitted value indicates whether copying was successful.
|
|
*/
|
|
this.copied = new EventEmitter();
|
|
/** Copies that are currently being attempted. */
|
|
this._pending = new Set();
|
|
if (config && config.attempts != null) {
|
|
this.attempts = config.attempts;
|
|
}
|
|
}
|
|
/** Copies the current text to the clipboard. */
|
|
copy(attempts = this.attempts) {
|
|
if (attempts > 1) {
|
|
let remainingAttempts = attempts;
|
|
const pending = this._clipboard.beginCopy(this.text);
|
|
this._pending.add(pending);
|
|
const attempt = () => {
|
|
const successful = pending.copy();
|
|
if (!successful && --remainingAttempts && !this._destroyed) {
|
|
// We use 1 for the timeout since it's more predictable when flushing in unit tests.
|
|
this._currentTimeout = this._ngZone.runOutsideAngular(() => setTimeout(attempt, 1));
|
|
}
|
|
else {
|
|
this._currentTimeout = null;
|
|
this._pending.delete(pending);
|
|
pending.destroy();
|
|
this.copied.emit(successful);
|
|
}
|
|
};
|
|
attempt();
|
|
}
|
|
else {
|
|
this.copied.emit(this._clipboard.copy(this.text));
|
|
}
|
|
}
|
|
ngOnDestroy() {
|
|
if (this._currentTimeout) {
|
|
clearTimeout(this._currentTimeout);
|
|
}
|
|
this._pending.forEach(copy => copy.destroy());
|
|
this._pending.clear();
|
|
this._destroyed = true;
|
|
}
|
|
}
|
|
CdkCopyToClipboard.ɵfac = function CdkCopyToClipboard_Factory(t) { return new (t || CdkCopyToClipboard)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Clipboard), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(CKD_COPY_TO_CLIPBOARD_CONFIG, 8)); };
|
|
CdkCopyToClipboard.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkCopyToClipboard, selectors: [["", "cdkCopyToClipboard", ""]], hostBindings: function CdkCopyToClipboard_HostBindings(rf, ctx) { if (rf & 1) {
|
|
ɵngcc0.ɵɵlistener("click", function CdkCopyToClipboard_click_HostBindingHandler() { return ctx.copy(); });
|
|
} }, inputs: { text: ["cdkCopyToClipboard", "text"], attempts: ["cdkCopyToClipboardAttempts", "attempts"] }, outputs: { copied: "cdkCopyToClipboardCopied" } });
|
|
CdkCopyToClipboard.ctorParameters = () => [
|
|
{ type: Clipboard },
|
|
{ type: NgZone },
|
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CKD_COPY_TO_CLIPBOARD_CONFIG,] }] }
|
|
];
|
|
CdkCopyToClipboard.propDecorators = {
|
|
text: [{ type: Input, args: ['cdkCopyToClipboard',] }],
|
|
attempts: [{ type: Input, args: ['cdkCopyToClipboardAttempts',] }],
|
|
copied: [{ type: Output, args: ['cdkCopyToClipboardCopied',] }]
|
|
};
|
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkCopyToClipboard, [{
|
|
type: Directive,
|
|
args: [{
|
|
selector: '[cdkCopyToClipboard]',
|
|
host: {
|
|
'(click)': 'copy()'
|
|
}
|
|
}]
|
|
}], function () { return [{ type: ɵngcc1.Clipboard }, { type: ɵngcc0.NgZone }, { type: undefined, decorators: [{
|
|
type: Optional
|
|
}, {
|
|
type: Inject,
|
|
args: [CKD_COPY_TO_CLIPBOARD_CONFIG]
|
|
}] }]; }, { text: [{
|
|
type: Input,
|
|
args: ['cdkCopyToClipboard']
|
|
}], attempts: [{
|
|
type: Input,
|
|
args: ['cdkCopyToClipboardAttempts']
|
|
}], copied: [{
|
|
type: Output,
|
|
args: ['cdkCopyToClipboardCopied']
|
|
}] }); })();
|
|
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS10by1jbGlwYm9hcmQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvY2xpcGJvYXJkL2NvcHktdG8tY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFFSCxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixjQUFjLEVBQ2QsTUFBTSxFQUNOLFFBQVEsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBU3RDLCtGQUErRjs7O0FBQy9GLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUNyQyxJQUFJLGNBQWMsQ0FBMkIsOEJBQThCLENBQUMsQ0FBQztBQUVqRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsNEJBQTRCLENBQUM7QUFFekU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQU9ILE1BQU0sT0FBTyxrQkFBa0I7QUFBRyxJQXlCaEMsWUFDVSxVQUFxQixFQUNyQixPQUFlLEVBQzJCLE1BQWlDO0FBQ3ZGLFFBSFksZUFBVSxHQUFWLFVBQVUsQ0FBVztBQUFDLFFBQ3RCLFlBQU8sR0FBUCxPQUFPLENBQVE7QUFBQyxRQTFCMUIsNEJBQTRCO0FBQzlCLFFBQStCLFNBQUksR0FBVyxFQUFFLENBQUM7QUFDakQsUUFDRTtBQUNGO0FBQ007QUFFQSxXQUREO0FBQ0wsUUFBdUMsYUFBUSxHQUFXLENBQUMsQ0FBQztBQUM1RCxRQUNFO0FBQ0Y7QUFDTTtBQUVBLFdBREQ7QUFDTCxRQUErQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztBQUNwRixRQUNFLGlEQUFpRDtBQUNuRCxRQUFVLGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0FBQzVDLFFBWUksSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7QUFDM0MsWUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDdEMsU0FBSztBQUNMLElBQUUsQ0FBQztBQUNILElBQ0UsZ0RBQWdEO0FBQ2xELElBQUUsSUFBSSxDQUFDLFdBQW1CLElBQUksQ0FBQyxRQUFRO0FBQUksUUFDdkMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQU0sSUFBSSxpQkFBaUIsR0FBRyxRQUFRLENBQUM7QUFDdkMsWUFBTSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0QsWUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxZQUNNLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtBQUMzQixnQkFBUSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUMsZ0JBQVEsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLGlCQUFpQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNwRSxvQkFBVSxvRkFBb0Y7QUFDOUYsb0JBQVUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RixpQkFBUztBQUFDLHFCQUFLO0FBQ2Ysb0JBQVUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDdEMsb0JBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDeEMsb0JBQVUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzVCLG9CQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZDLGlCQUFTO0FBQ1QsWUFBTSxDQUFDLENBQUM7QUFDUixZQUFNLE9BQU8sRUFBRSxDQUFDO0FBQ2hCLFNBQUs7QUFBQyxhQUFLO0FBQ1gsWUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4RCxTQUFLO0FBQ0wsSUFBRSxDQUFDO0FBQ0gsSUFDRSxXQUFXO0FBQ2IsUUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7QUFDOUIsWUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3pDLFNBQUs7QUFDTCxRQUNJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDbEQsUUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFCLFFBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBRSxDQUFDO0FBQ0g7OENBM0VDLFNBQVMsU0FBQyxrQkFDVCxRQUFRLEVBQUUsc0JBQXNCLGtCQUNoQyxJQUFJLEVBQUUsc0JBQ0osU0FBUyxFQUFFLFFBQVEsbUJBQ3BCLGNBQ0Y7OztvS0FDSTtBQUFDO0FBQTRDLFlBN0IxQyxTQUFTO0FBQUksWUFObkIsTUFBTTtBQUNOLDRDQThERyxRQUFRLFlBQUksTUFBTSxTQUFDLDRCQUE0QjtBQUFRO0FBQUc7QUFFdEQsbUJBNUJOLEtBQUssU0FBQyxvQkFBb0I7QUFBTyx1QkFNakMsS0FBSyxTQUFDLDRCQUE0QjtBQUFPLHFCQU16QyxNQUFNLFNBQUMsMEJBQTBCO0FBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIE5nWm9uZSxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIEluamVjdCxcbiAgT3B0aW9uYWwsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NsaXBib2FyZH0gZnJvbSAnLi9jbGlwYm9hcmQnO1xuaW1wb3J0IHtQZW5kaW5nQ29weX0gZnJvbSAnLi9wZW5kaW5nLWNvcHknO1xuXG4vKiogT2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIGBDZGtDb3B5VG9DbGlwYm9hcmRgLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtDb3B5VG9DbGlwYm9hcmRDb25maWcge1xuICAvKiogRGVmYXVsdCBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gbWFrZSB3aGVuIGNvcHlpbmcgdGV4dCB0byB0aGUgY2xpcGJvYXJkLiAqL1xuICBhdHRlbXB0cz86IG51bWJlcjtcbn1cblxuLyoqIEluamVjdGlvbiB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgdGhlIGRlZmF1bHQgb3B0aW9ucyB0byBgQ2RrQ29weVRvQ2xpcGJvYXJkYC4gKi9cbmV4cG9ydCBjb25zdCBDREtfQ09QWV9UT19DTElQQk9BUkRfQ09ORklHID1cbiAgICBuZXcgSW5qZWN0aW9uVG9rZW48Q2RrQ29weVRvQ2xpcGJvYXJkQ29uZmlnPignQ0RLX0NPUFlfVE9fQ0xJUEJPQVJEX0NPTkZJRycpO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgQ0RLX0NPUFlfVE9fQ0xJUEJPQVJEX0NPTkZJR2AgaW5zdGVhZC5cbiAqIEBicmVha2luZy1jaGFuZ2UgMTMuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBDS0RfQ09QWV9UT19DTElQQk9BUkRfQ09ORklHID0gQ0RLX0NPUFlfVE9fQ0xJUEJPQVJEX0NPTkZJRztcblxuLyoqXG4gKiBQcm92aWRlcyBiZWhhdmlvciBmb3IgYSBidXR0b24gdGhhdCB3aGVuIGNsaWNrZWQgY29waWVzIGNvbnRlbnQgaW50byB1c2VyJ3NcbiAqIGNsaXBib2FyZC5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Nka0NvcHlUb0NsaXBib2FyZF0nLFxuICBob3N0OiB7XG4gICAgJyhjbGljayknOiAnY29weSgpJyxcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBDZGtDb3B5VG9DbGlwYm9hcmQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvKiogQ29udGVudCB0byBiZSBjb3BpZWQuICovXG4gIEBJbnB1dCgnY2RrQ29weVRvQ2xpcGJvYXJkJykgdGV4dDogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IHRpbWVzIHRvIGF0dGVtcHQgdG8gY29weSB0aGUgdGV4dC4gVGhpcyBtYXkgYmUgbmVjZXNzYXJ5IGZvciBsb25nZXIgdGV4dCwgYmVjYXVzZVxuICAgKiB0aGUgYnJvd3NlciBuZWVkcyB0aW1lIHRvIGZpbGwgYW4gaW50ZXJtZWRpYXRlIHRleHRhcmVhIGVsZW1lbnQgYW5kIGNvcHkgdGhlIGNvbnRlbnQuXG4gICAqL1xuICBASW5wdXQoJ2Nka0NvcHlUb0NsaXBib2FyZEF0dGVtcHRzJykgYXR0ZW1wdHM6IG51bWJlciA9IDE7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gc29tZSB0ZXh0IGlzIGNvcGllZCB0byB0aGUgY2xpcGJvYXJkLiBUaGVcbiAgICogZW1pdHRlZCB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBjb3B5aW5nIHdhcyBzdWNjZXNzZnVsLlxuICAgKi9cbiAgQE91dHB1dCgnY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkJykgcmVhZG9ubHkgY29waWVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKiBDb3BpZXMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIGF0dGVtcHRlZC4gKi9cbiAgcHJpdmF0ZSBfcGVuZGluZyA9IG5ldyBTZXQ8UGVuZGluZ0NvcHk+KCk7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGRpcmVjdGl2ZSBoYXMgYmVlbiBkZXN0cm95ZWQuICovXG4gIHByaXZhdGUgX2Rlc3Ryb3llZDogYm9vbGVhbjtcblxuICAvKiogVGltZW91dCBmb3IgdGhlIGN1cnJlbnQgY29weSBhdHRlbXB0LiAqL1xuICBwcml2YXRlIF9jdXJyZW50VGltZW91dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NsaXBib2FyZDogQ2xpcGJvYXJkLFxuICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQ0tEX0NPUFlfVE9fQ0xJUEJPQVJEX0NPTkZJRykgY29uZmlnPzogQ2RrQ29weVRvQ2xpcGJvYXJkQ29uZmlnKSB7XG5cbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5hdHRlbXB0cyAhPSBudWxsKSB7XG4gICAgICB0aGlzLmF0dGVtcHRzID0gY29uZmlnLmF0dGVtcHRzO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDb3BpZXMgdGhlIGN1cnJlbnQgdGV4dCB0byB0aGUgY2xpcGJvYXJkLiAqL1xuICBjb3B5KGF0dGVtcHRzOiBudW1iZXIgPSB0aGlzLmF0dGVtcHRzKTogdm9pZCB7XG4gICAgaWYgKGF0dGVtcHRzID4gMSkge1xuICAgICAgbGV0IHJlbWFpbmluZ0F0dGVtcHRzID0gYXR0ZW1wdHM7XG4gICAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5fY2xpcGJvYXJkLmJlZ2luQ29weSh0aGlzLnRleHQpO1xuICAgICAgdGhpcy5fcGVuZGluZy5hZGQocGVuZGluZyk7XG5cbiAgICAgIGNvbnN0IGF0dGVtcHQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSBwZW5kaW5nLmNvcHkoKTtcbiAgICAgICAgaWYgKCFzdWNjZXNzZnVsICYmIC0tcmVtYWluaW5nQXR0ZW1wdHMgJiYgIXRoaXMuX2Rlc3Ryb3llZCkge1xuICAgICAgICAgIC8vIFdlIHVzZSAxIGZvciB0aGUgdGltZW91dCBzaW5jZSBpdCdzIG1vcmUgcHJlZGljdGFibGUgd2hlbiBmbHVzaGluZyBpbiB1bml0IHRlc3RzLlxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lb3V0ID0gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHNldFRpbWVvdXQoYXR0ZW1wdCwgMSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9wZW5kaW5nLmRlbGV0ZShwZW5kaW5nKTtcbiAgICAgICAgICBwZW5kaW5nLmRlc3Ryb3koKTtcbiAgICAgICAgICB0aGlzLmNvcGllZC5lbWl0KHN1Y2Nlc3NmdWwpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgYXR0ZW1wdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvcGllZC5lbWl0KHRoaXMuX2NsaXBib2FyZC5jb3B5KHRoaXMudGV4dCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50VGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2N1cnJlbnRUaW1lb3V0KTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZW5kaW5nLmZvckVhY2goY29weSA9PiBjb3B5LmRlc3Ryb3koKSk7XG4gICAgdGhpcy5fcGVuZGluZy5jbGVhcigpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCA9IHRydWU7XG4gIH1cbn1cbiJdfQ==
|