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.
314 lines
14 KiB
314 lines
14 KiB
(function (global, factory) {
|
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('@angular/core'),exports, require('@angular/common'), require('@angular/core')) :
|
|
typeof define === 'function' && define.amd ? define('@angular/cdk/clipboard', ['@angular/core','exports', '@angular/common', '@angular/core'], factory) :
|
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ng.core,(global.ng = global.ng || {}, global.ng.cdk = global.ng.cdk || {}, global.ng.cdk.clipboard = {}), global.ng.common, global.ng.core));
|
|
}(this, (function (ɵngcc0,exports, i1, i0) { 'use strict';
|
|
|
|
function _interopNamespace(e) {
|
|
if (e && e.__esModule) return e;
|
|
var n = Object.create(null);
|
|
if (e) {
|
|
Object.keys(e).forEach(function (k) {
|
|
if (k !== 'default') {
|
|
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
Object.defineProperty(n, k, d.get ? d : {
|
|
enumerable: true,
|
|
get: function () {
|
|
return e[k];
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
n['default'] = e;
|
|
return Object.freeze(n);
|
|
}
|
|
|
|
var i1__namespace = /*#__PURE__*/_interopNamespace(i1);
|
|
var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
|
|
|
|
/**
|
|
* @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
|
|
*/
|
|
/**
|
|
* A pending copy-to-clipboard operation.
|
|
*
|
|
* The implementation of copying text to the clipboard modifies the DOM and
|
|
* forces a relayout. This relayout can take too long if the string is large,
|
|
* causing the execCommand('copy') to happen too long after the user clicked.
|
|
* This results in the browser refusing to copy. This object lets the
|
|
* relayout happen in a separate tick from copying by providing a copy function
|
|
* that can be called later.
|
|
*
|
|
* Destroy must be called when no longer in use, regardless of whether `copy` is
|
|
* called.
|
|
*/
|
|
var PendingCopy = /** @class */ (function () {
|
|
function PendingCopy(text, _document) {
|
|
this._document = _document;
|
|
var textarea = this._textarea = this._document.createElement('textarea');
|
|
var styles = textarea.style;
|
|
// Hide the element for display and accessibility. Set a fixed position so the page layout
|
|
// isn't affected. We use `fixed` with `top: 0`, because focus is moved into the textarea
|
|
// for a split second and if it's off-screen, some browsers will attempt to scroll it into view.
|
|
styles.position = 'fixed';
|
|
styles.top = styles.opacity = '0';
|
|
styles.left = '-999em';
|
|
textarea.setAttribute('aria-hidden', 'true');
|
|
textarea.value = text;
|
|
this._document.body.appendChild(textarea);
|
|
}
|
|
/** Finishes copying the text. */
|
|
PendingCopy.prototype.copy = function () {
|
|
var textarea = this._textarea;
|
|
var successful = false;
|
|
try { // Older browsers could throw if copy is not supported.
|
|
if (textarea) {
|
|
var currentFocus = this._document.activeElement;
|
|
textarea.select();
|
|
textarea.setSelectionRange(0, textarea.value.length);
|
|
successful = this._document.execCommand('copy');
|
|
if (currentFocus) {
|
|
currentFocus.focus();
|
|
}
|
|
}
|
|
}
|
|
catch (_a) {
|
|
// Discard error.
|
|
// Initial setting of {@code successful} will represent failure here.
|
|
}
|
|
return successful;
|
|
};
|
|
/** Cleans up DOM changes used to perform the copy operation. */
|
|
PendingCopy.prototype.destroy = function () {
|
|
var textarea = this._textarea;
|
|
if (textarea) {
|
|
if (textarea.parentNode) {
|
|
textarea.parentNode.removeChild(textarea);
|
|
}
|
|
this._textarea = undefined;
|
|
}
|
|
};
|
|
return PendingCopy;
|
|
}());
|
|
|
|
/**
|
|
* @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
|
|
*/
|
|
/**
|
|
* A service for copying text to the clipboard.
|
|
*/
|
|
var Clipboard = /** @class */ (function () {
|
|
function Clipboard(document) {
|
|
this._document = document;
|
|
}
|
|
/**
|
|
* Copies the provided text into the user's clipboard.
|
|
*
|
|
* @param text The string to copy.
|
|
* @returns Whether the operation was successful.
|
|
*/
|
|
Clipboard.prototype.copy = function (text) {
|
|
var pendingCopy = this.beginCopy(text);
|
|
var successful = pendingCopy.copy();
|
|
pendingCopy.destroy();
|
|
return successful;
|
|
};
|
|
/**
|
|
* Prepares a string to be copied later. This is useful for large strings
|
|
* which take too long to successfully render and be copied in the same tick.
|
|
*
|
|
* The caller must call `destroy` on the returned `PendingCopy`.
|
|
*
|
|
* @param text The string to copy.
|
|
* @returns the pending copy operation.
|
|
*/
|
|
Clipboard.prototype.beginCopy = function (text) {
|
|
return new PendingCopy(text, this._document);
|
|
};
|
|
Clipboard.ɵfac = function Clipboard_Factory(t) { return new (t || Clipboard)(ɵngcc0.ɵɵinject(i1.DOCUMENT)); };
|
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(Clipboard, [{
|
|
type: i0.Injectable,
|
|
args: [{ providedIn: 'root' }]
|
|
}], function () { return [{ type: undefined, decorators: [{
|
|
type: i0.Inject,
|
|
args: [i1.DOCUMENT]
|
|
}] }]; }, null); })();
|
|
return Clipboard;
|
|
}());
|
|
Clipboard.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function Clipboard_Factory() { return new Clipboard(i0__namespace.ɵɵinject(i1__namespace.DOCUMENT)); }, token: Clipboard, providedIn: "root" });
|
|
Clipboard.ctorParameters = function () { return [
|
|
{ type: undefined, decorators: [{ type: i0.Inject, args: [i1.DOCUMENT,] }] }
|
|
]; };
|
|
|
|
/**
|
|
* @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
|
|
*/
|
|
/** Injection token that can be used to provide the default options to `CdkCopyToClipboard`. */
|
|
var CDK_COPY_TO_CLIPBOARD_CONFIG = new i0.InjectionToken('CDK_COPY_TO_CLIPBOARD_CONFIG');
|
|
/**
|
|
* @deprecated Use `CDK_COPY_TO_CLIPBOARD_CONFIG` instead.
|
|
* @breaking-change 13.0.0
|
|
*/
|
|
var CKD_COPY_TO_CLIPBOARD_CONFIG = CDK_COPY_TO_CLIPBOARD_CONFIG;
|
|
/**
|
|
* Provides behavior for a button that when clicked copies content into user's
|
|
* clipboard.
|
|
*/
|
|
var CdkCopyToClipboard = /** @class */ (function () {
|
|
function CdkCopyToClipboard(_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 i0.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. */
|
|
CdkCopyToClipboard.prototype.copy = function (attempts) {
|
|
var _this = this;
|
|
if (attempts === void 0) { attempts = this.attempts; }
|
|
if (attempts > 1) {
|
|
var remainingAttempts_1 = attempts;
|
|
var pending_1 = this._clipboard.beginCopy(this.text);
|
|
this._pending.add(pending_1);
|
|
var attempt_1 = function () {
|
|
var successful = pending_1.copy();
|
|
if (!successful && --remainingAttempts_1 && !_this._destroyed) {
|
|
// We use 1 for the timeout since it's more predictable when flushing in unit tests.
|
|
_this._currentTimeout = _this._ngZone.runOutsideAngular(function () { return setTimeout(attempt_1, 1); });
|
|
}
|
|
else {
|
|
_this._currentTimeout = null;
|
|
_this._pending.delete(pending_1);
|
|
pending_1.destroy();
|
|
_this.copied.emit(successful);
|
|
}
|
|
};
|
|
attempt_1();
|
|
}
|
|
else {
|
|
this.copied.emit(this._clipboard.copy(this.text));
|
|
}
|
|
};
|
|
CdkCopyToClipboard.prototype.ngOnDestroy = function () {
|
|
if (this._currentTimeout) {
|
|
clearTimeout(this._currentTimeout);
|
|
}
|
|
this._pending.forEach(function (copy) { return copy.destroy(); });
|
|
this._pending.clear();
|
|
this._destroyed = true;
|
|
};
|
|
CdkCopyToClipboard.ɵfac = function CdkCopyToClipboard_Factory(t) { return new (t || CdkCopyToClipboard)(ɵngcc0.ɵɵdirectiveInject(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" } });
|
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkCopyToClipboard, [{
|
|
type: i0.Directive,
|
|
args: [{
|
|
selector: '[cdkCopyToClipboard]',
|
|
host: {
|
|
'(click)': 'copy()'
|
|
}
|
|
}]
|
|
}], function () { return [{ type: Clipboard }, { type: ɵngcc0.NgZone }, { type: undefined, decorators: [{
|
|
type: i0.Optional
|
|
}, {
|
|
type: i0.Inject,
|
|
args: [CKD_COPY_TO_CLIPBOARD_CONFIG]
|
|
}] }]; }, { text: [{
|
|
type: i0.Input,
|
|
args: ['cdkCopyToClipboard']
|
|
}], attempts: [{
|
|
type: i0.Input,
|
|
args: ['cdkCopyToClipboardAttempts']
|
|
}], copied: [{
|
|
type: i0.Output,
|
|
args: ['cdkCopyToClipboardCopied']
|
|
}] }); })();
|
|
return CdkCopyToClipboard;
|
|
}());
|
|
CdkCopyToClipboard.ctorParameters = function () { return [
|
|
{ type: Clipboard },
|
|
{ type: i0.NgZone },
|
|
{ type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [CKD_COPY_TO_CLIPBOARD_CONFIG,] }] }
|
|
]; };
|
|
CdkCopyToClipboard.propDecorators = {
|
|
text: [{ type: i0.Input, args: ['cdkCopyToClipboard',] }],
|
|
attempts: [{ type: i0.Input, args: ['cdkCopyToClipboardAttempts',] }],
|
|
copied: [{ type: i0.Output, args: ['cdkCopyToClipboardCopied',] }]
|
|
};
|
|
|
|
/**
|
|
* @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
|
|
*/
|
|
var ClipboardModule = /** @class */ (function () {
|
|
function ClipboardModule() {
|
|
}
|
|
ClipboardModule.ɵfac = function ClipboardModule_Factory(t) { return new (t || ClipboardModule)(); };
|
|
ClipboardModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ClipboardModule });
|
|
ClipboardModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});
|
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ClipboardModule, [{
|
|
type: i0.NgModule,
|
|
args: [{
|
|
declarations: [CdkCopyToClipboard],
|
|
exports: [CdkCopyToClipboard]
|
|
}]
|
|
}], function () { return []; }, null); })();
|
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ClipboardModule, { declarations: [CdkCopyToClipboard], exports: [CdkCopyToClipboard] }); })();
|
|
return ClipboardModule;
|
|
}());
|
|
|
|
/**
|
|
* @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
|
|
*/
|
|
|
|
/**
|
|
* Generated bundle index. Do not edit.
|
|
*/
|
|
|
|
exports.CDK_COPY_TO_CLIPBOARD_CONFIG = CDK_COPY_TO_CLIPBOARD_CONFIG;
|
|
exports.CKD_COPY_TO_CLIPBOARD_CONFIG = CKD_COPY_TO_CLIPBOARD_CONFIG;
|
|
exports.CdkCopyToClipboard = CdkCopyToClipboard;
|
|
exports.Clipboard = Clipboard;
|
|
exports.ClipboardModule = ClipboardModule;
|
|
exports.PendingCopy = PendingCopy;
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
})));
|
|
|
|
//# sourceMappingURL=cdk-clipboard.umd.js.map
|