UNPKG

@angular/cdk

Version:

Angular Material Component Development Kit

171 lines 12.4 kB
/** * @fileoverview added by tsickle * Generated from: src/cdk/clipboard/copy-to-clipboard.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @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'; /** * Object that can be used to configure the default options for `CdkCopyToClipboard`. * @record */ export function CdkCopyToClipboardConfig() { } if (false) { /** * Default number of attempts to make when copying text to the clipboard. * @type {?|undefined} */ CdkCopyToClipboardConfig.prototype.attempts; } /** * Injection token that can be used to provide the default options to `CdkCopyToClipboard`. * @type {?} */ export const CKD_COPY_TO_CLIPBOARD_CONFIG = new InjectionToken('CKD_COPY_TO_CLIPBOARD_CONFIG'); /** * Provides behavior for a button that when clicked copies content into user's * clipboard. */ export class CdkCopyToClipboard { /** * @param {?} _clipboard * @param {?=} _ngZone * @param {?=} config */ 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(); /** * Emits when some text is copied to the clipboard. The * emitted value indicates whether copying was successful. * @deprecated Use `cdkCopyToClipboardCopied` instead. * \@breaking-change 10.0.0 */ this._deprecatedCopied = this.copied; if (config && config.attempts != null) { this.attempts = config.attempts; } } /** * Copies the current text to the clipboard. * @param {?=} attempts * @return {?} */ copy(attempts = this.attempts) { if (attempts > 1) { /** @type {?} */ let remainingAttempts = attempts; /** @type {?} */ const pending = this._clipboard.beginCopy(this.text); /** @type {?} */ const attempt = (/** * @return {?} */ () => { /** @type {?} */ const successful = pending.copy(); if (!successful && --remainingAttempts) { // @breaking-change 10.0.0 Remove null check for `_ngZone`. if (this._ngZone) { this._ngZone.runOutsideAngular((/** * @return {?} */ () => setTimeout(attempt))); } else { setTimeout(attempt); } } else { pending.destroy(); this.copied.emit(successful); } }); attempt(); } else { this.copied.emit(this._clipboard.copy(this.text)); } } } CdkCopyToClipboard.decorators = [ { type: Directive, args: [{ selector: '[cdkCopyToClipboard]', host: { '(click)': 'copy()', } },] } ]; /** @nocollapse */ 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',] }], _deprecatedCopied: [{ type: Output, args: ['copied',] }] }; if (false) { /** * Content to be copied. * @type {?} */ CdkCopyToClipboard.prototype.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. * @type {?} */ CdkCopyToClipboard.prototype.attempts; /** * Emits when some text is copied to the clipboard. The * emitted value indicates whether copying was successful. * @type {?} */ CdkCopyToClipboard.prototype.copied; /** * Emits when some text is copied to the clipboard. The * emitted value indicates whether copying was successful. * @deprecated Use `cdkCopyToClipboardCopied` instead. * \@breaking-change 10.0.0 * @type {?} */ CdkCopyToClipboard.prototype._deprecatedCopied; /** * @type {?} * @private */ CdkCopyToClipboard.prototype._clipboard; /** * @deprecated _ngZone parameter to become required. * \@breaking-change 10.0.0 * @type {?} * @private */ CdkCopyToClipboard.prototype._ngZone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS10by1jbGlwYm9hcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL2NsaXBib2FyZC9jb3B5LXRvLWNsaXBib2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFRQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixjQUFjLEVBQ2QsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDOzs7OztBQUd0Qyw4Q0FHQzs7Ozs7O0lBREMsNENBQWtCOzs7Ozs7QUFJcEIsTUFBTSxPQUFPLDRCQUE0QixHQUNyQyxJQUFJLGNBQWMsQ0FBMkIsOEJBQThCLENBQUM7Ozs7O0FBWWhGLE1BQU0sT0FBTyxrQkFBa0I7Ozs7OztJQXdCN0IsWUFDVSxVQUFxQixFQUtyQixPQUFnQixFQUMwQixNQUFpQztRQU4zRSxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBS3JCLFlBQU8sR0FBUCxPQUFPLENBQVM7Ozs7UUE1QkcsU0FBSSxHQUFXLEVBQUUsQ0FBQzs7Ozs7UUFNVixhQUFRLEdBQVcsQ0FBQyxDQUFDOzs7OztRQU10QixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQzs7Ozs7OztRQVF2RCxzQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBV2hELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztTQUNqQztJQUNILENBQUM7Ozs7OztJQUdELElBQUksQ0FBQyxXQUFtQixJQUFJLENBQUMsUUFBUTtRQUNuQyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7O2dCQUNaLGlCQUFpQixHQUFHLFFBQVE7O2tCQUMxQixPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs7a0JBQzlDLE9BQU87OztZQUFHLEdBQUcsRUFBRTs7c0JBQ2IsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxpQkFBaUIsRUFBRTtvQkFDdEMsMkRBQTJEO29CQUMzRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCOzs7d0JBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFDLENBQUM7cUJBQzNEO3lCQUFNO3dCQUNMLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDckI7aUJBQ0Y7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDOUI7WUFDSCxDQUFDLENBQUE7WUFDRCxPQUFPLEVBQUUsQ0FBQztTQUNYO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUM7OztZQW5FRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsSUFBSSxFQUFFO29CQUNKLFNBQVMsRUFBRSxRQUFRO2lCQUNwQjthQUNGOzs7O1lBckJPLFNBQVM7WUFMZixNQUFNOzRDQTBESCxRQUFRLFlBQUksTUFBTSxTQUFDLDRCQUE0Qjs7O21CQTdCakQsS0FBSyxTQUFDLG9CQUFvQjt1QkFNMUIsS0FBSyxTQUFDLDRCQUE0QjtxQkFNbEMsTUFBTSxTQUFDLDBCQUEwQjtnQ0FRakMsTUFBTSxTQUFDLFFBQVE7Ozs7Ozs7SUFwQmhCLGtDQUErQzs7Ozs7O0lBTS9DLHNDQUEwRDs7Ozs7O0lBTTFELG9DQUF5RTs7Ozs7Ozs7SUFRekUsK0NBQWtEOzs7OztJQUdoRCx3Q0FBNkI7Ozs7Ozs7SUFLN0IscUNBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBOZ1pvbmUsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3QsXG4gIE9wdGlvbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2xpcGJvYXJkfSBmcm9tICcuL2NsaXBib2FyZCc7XG5cbi8qKiBPYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGRlZmF1bHQgb3B0aW9ucyBmb3IgYENka0NvcHlUb0NsaXBib2FyZGAuICovXG5leHBvcnQgaW50ZXJmYWNlIENka0NvcHlUb0NsaXBib2FyZENvbmZpZyB7XG4gIC8qKiBEZWZhdWx0IG51bWJlciBvZiBhdHRlbXB0cyB0byBtYWtlIHdoZW4gY29weWluZyB0ZXh0IHRvIHRoZSBjbGlwYm9hcmQuICovXG4gIGF0dGVtcHRzPzogbnVtYmVyO1xufVxuXG4vKiogSW5qZWN0aW9uIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSB0aGUgZGVmYXVsdCBvcHRpb25zIHRvIGBDZGtDb3B5VG9DbGlwYm9hcmRgLiAqL1xuZXhwb3J0IGNvbnN0IENLRF9DT1BZX1RPX0NMSVBCT0FSRF9DT05GSUcgPVxuICAgIG5ldyBJbmplY3Rpb25Ub2tlbjxDZGtDb3B5VG9DbGlwYm9hcmRDb25maWc+KCdDS0RfQ09QWV9UT19DTElQQk9BUkRfQ09ORklHJyk7XG5cbi8qKlxuICogUHJvdmlkZXMgYmVoYXZpb3IgZm9yIGEgYnV0dG9uIHRoYXQgd2hlbiBjbGlja2VkIGNvcGllcyBjb250ZW50IGludG8gdXNlcidzXG4gKiBjbGlwYm9hcmQuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjZGtDb3B5VG9DbGlwYm9hcmRdJyxcbiAgaG9zdDoge1xuICAgICcoY2xpY2spJzogJ2NvcHkoKScsXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQ2RrQ29weVRvQ2xpcGJvYXJkIHtcbiAgLyoqIENvbnRlbnQgdG8gYmUgY29waWVkLiAqL1xuICBASW5wdXQoJ2Nka0NvcHlUb0NsaXBib2FyZCcpIHRleHQ6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBIb3cgbWFueSB0aW1lcyB0byBhdHRlbXB0IHRvIGNvcHkgdGhlIHRleHQuIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSBmb3IgbG9uZ2VyIHRleHQsIGJlY2F1c2VcbiAgICogdGhlIGJyb3dzZXIgbmVlZHMgdGltZSB0byBmaWxsIGFuIGludGVybWVkaWF0ZSB0ZXh0YXJlYSBlbGVtZW50IGFuZCBjb3B5IHRoZSBjb250ZW50LlxuICAgKi9cbiAgQElucHV0KCdjZGtDb3B5VG9DbGlwYm9hcmRBdHRlbXB0cycpIGF0dGVtcHRzOiBudW1iZXIgPSAxO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIHNvbWUgdGV4dCBpcyBjb3BpZWQgdG8gdGhlIGNsaXBib2FyZC4gVGhlXG4gICAqIGVtaXR0ZWQgdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgY29weWluZyB3YXMgc3VjY2Vzc2Z1bC5cbiAgICovXG4gIEBPdXRwdXQoJ2Nka0NvcHlUb0NsaXBib2FyZENvcGllZCcpIGNvcGllZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiBzb21lIHRleHQgaXMgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQuIFRoZVxuICAgKiBlbWl0dGVkIHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIGNvcHlpbmcgd2FzIHN1Y2Nlc3NmdWwuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkYCBpbnN0ZWFkLlxuICAgKiBAYnJlYWtpbmctY2hhbmdlIDEwLjAuMFxuICAgKi9cbiAgQE91dHB1dCgnY29waWVkJykgX2RlcHJlY2F0ZWRDb3BpZWQgPSB0aGlzLmNvcGllZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jbGlwYm9hcmQ6IENsaXBib2FyZCxcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBfbmdab25lIHBhcmFtZXRlciB0byBiZWNvbWUgcmVxdWlyZWQuXG4gICAgICogQGJyZWFraW5nLWNoYW5nZSAxMC4wLjBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9uZ1pvbmU/OiBOZ1pvbmUsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChDS0RfQ09QWV9UT19DTElQQk9BUkRfQ09ORklHKSBjb25maWc/OiBDZGtDb3B5VG9DbGlwYm9hcmRDb25maWcpIHtcblxuICAgIGlmIChjb25maWcgJiYgY29uZmlnLmF0dGVtcHRzICE9IG51bGwpIHtcbiAgICAgIHRoaXMuYXR0ZW1wdHMgPSBjb25maWcuYXR0ZW1wdHM7XG4gICAgfVxuICB9XG5cbiAgLyoqIENvcGllcyB0aGUgY3VycmVudCB0ZXh0IHRvIHRoZSBjbGlwYm9hcmQuICovXG4gIGNvcHkoYXR0ZW1wdHM6IG51bWJlciA9IHRoaXMuYXR0ZW1wdHMpOiB2b2lkIHtcbiAgICBpZiAoYXR0ZW1wdHMgPiAxKSB7XG4gICAgICBsZXQgcmVtYWluaW5nQXR0ZW1wdHMgPSBhdHRlbXB0cztcbiAgICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLl9jbGlwYm9hcmQuYmVnaW5Db3B5KHRoaXMudGV4dCk7XG4gICAgICBjb25zdCBhdHRlbXB0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzdWNjZXNzZnVsID0gcGVuZGluZy5jb3B5KCk7XG4gICAgICAgIGlmICghc3VjY2Vzc2Z1bCAmJiAtLXJlbWFpbmluZ0F0dGVtcHRzKSB7XG4gICAgICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSAxMC4wLjAgUmVtb3ZlIG51bGwgY2hlY2sgZm9yIGBfbmdab25lYC5cbiAgICAgICAgICBpZiAodGhpcy5fbmdab25lKSB7XG4gICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gc2V0VGltZW91dChhdHRlbXB0KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXR0ZW1wdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlbmRpbmcuZGVzdHJveSgpO1xuICAgICAgICAgIHRoaXMuY29waWVkLmVtaXQoc3VjY2Vzc2Z1bCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBhdHRlbXB0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29waWVkLmVtaXQodGhpcy5fY2xpcGJvYXJkLmNvcHkodGhpcy50ZXh0KSk7XG4gICAgfVxuICB9XG59XG4iXX0=