@nova-ui/bits
Version:
SolarWinds Nova Framework
122 lines • 14.7 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import { DOCUMENT } from "@angular/common";
import { Directive, EventEmitter, HostListener, Inject, Input, Output, } from "@angular/core";
import isEmpty from "lodash/isEmpty";
import isEqual from "lodash/isEqual";
import isString from "lodash/isString";
import { LoggerService } from "../../../services/log-service";
import * as i0 from "@angular/core";
import * as i1 from "../../../services/log-service";
/**
* <example-url>./../examples/index.html#/common/clipboard</example-url>
*/
/**
* @ignore
* @dynamic
* Directive that provides copy to clipboard functionality.
*/
export class ClipboardDirective {
/**
* Replaces element click behavior with clipboard copy event
*/
onClick(e) {
if (isEqual(this.hasCopySupport, true)) {
e.preventDefault();
return this.copyText();
}
else {
this.clipboardError.emit();
return this.logger.error("document copy operation is not supported");
}
}
constructor(logger, document) {
this.logger = logger;
this.document = document;
/* eslint-enable @angular-eslint/no-input-rename */
/**
* Event that is fired when text was copied to the clipboard successfully
*/
this.clipboardSuccess = new EventEmitter();
/**
* Event that is fired when copy text was failed
*/
this.clipboardError = new EventEmitter();
this.hasCopySupport = false;
this.createNode = (text) => {
const node = this.document.createElement("textarea");
node.style.position = "absolute";
node.style.left = "-10000px";
node.textContent = text;
return node;
};
}
ngOnInit() {
try {
this.hasCopySupport = this.document.queryCommandSupported("copy");
}
catch (ex) {
this.logger.error(ex.message);
}
}
copyText() {
if (isEmpty(this.textToCopy) || !isString(this.textToCopy)) {
return this.logger.warn("notext", "nuiClipboard text is empty or not a string");
}
const node = this.createNode(this.textToCopy);
try {
const selection = this.document.getSelection();
this.document.body.appendChild(node);
node.select();
this.document.execCommand("copy");
selection?.removeAllRanges();
this.clipboardSuccess.emit();
}
catch (ex) {
this.logger.error(ex.message);
this.clipboardError.emit();
}
finally {
this.document.body.removeChild(node);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ClipboardDirective, deps: [{ token: i1.LoggerService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: ClipboardDirective, selector: "[nuiClipboard]", inputs: { textToCopy: ["nuiClipboard", "textToCopy"] }, outputs: { clipboardSuccess: "clipboardSuccess", clipboardError: "clipboardError" }, host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ClipboardDirective, decorators: [{
type: Directive,
args: [{
selector: "[nuiClipboard]",
}]
}], ctorParameters: () => [{ type: i1.LoggerService }, { type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }], propDecorators: { textToCopy: [{
type: Input,
args: ["nuiClipboard"]
}], clipboardSuccess: [{
type: Output
}], clipboardError: [{
type: Output
}], onClick: [{
type: HostListener,
args: ["click", ["$event"]]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21tb24vZGlyZWN0aXZlcy9jbGlwYm9hcmQvY2xpcGJvYXJkLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7QUFFakIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLFFBQVEsTUFBTSxpQkFBaUIsQ0FBQztBQUV2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQUU5RDs7R0FFRztBQUVIOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBbUIzQjs7T0FFRztJQUVJLE9BQU8sQ0FBQyxDQUFRO1FBQ25CLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDcEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFD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b3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSBcImxvZGFzaC9pc0VtcHR5XCI7XG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwibG9kYXNoL2lzRXF1YWxcIjtcbmltcG9ydCBpc1N0cmluZyBmcm9tIFwibG9kYXNoL2lzU3RyaW5nXCI7XG5cbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvbG9nLXNlcnZpY2VcIjtcblxuLyoqXG4gKiA8ZXhhbXBsZS11cmw+Li8uLi9leGFtcGxlcy9pbmRleC5odG1sIy9jb21tb24vY2xpcGJvYXJkPC9leGFtcGxlLXVybD5cbiAqL1xuXG4vKipcbiAqIEBpZ25vcmVcbiAqIEBkeW5hbWljXG4gKiBEaXJlY3RpdmUgdGhhdCBwcm92aWRlcyBjb3B5IHRvIGNsaXBib2FyZCBmdW5jdGlvbmFsaXR5LlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogXCJbbnVpQ2xpcGJvYXJkXVwiLFxufSlcbmV4cG9ydCBjbGFzcyBDbGlwYm9hcmREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWUgKi9cbiAgICAvKipcbiAgICAgKiBUZXh0IHRvIGJlIGNvcGllZCB0byB0aGUgY2xpcGJvYXJkXG4gICAgICovXG4gICAgQElucHV0KFwibnVpQ2xpcGJvYXJkXCIpIHB1YmxpYyB0ZXh0VG9Db3B5OiBzdHJpbmc7XG4gICAgLyogZXNsaW50LWVuYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lICovXG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB0aGF0IGlzIGZpcmVkIHdoZW4gdGV4dCB3YXMgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQgc3VjY2Vzc2Z1bGx5XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBjbGlwYm9hcmRTdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKlxuICAgICAqIEV2ZW50IHRoYXQgaXMgZmlyZWQgd2hlbiBjb3B5IHRleHQgd2FzIGZhaWxlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgY2xpcGJvYXJkRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGhhc0NvcHlTdXBwb3J0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyBlbGVtZW50IGNsaWNrIGJlaGF2aW9yIHdpdGggY2xpcGJvYXJkIGNvcHkgZXZlbnRcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKFwiY2xpY2tcIiwgW1wiJGV2ZW50XCJdKVxuICAgIHB1YmxpYyBvbkNsaWNrKGU6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChpc0VxdWFsKHRoaXMuaGFzQ29weVN1cHBvcnQsIHRydWUpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3B5VGV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbGlwYm9hcmRFcnJvci5lbWl0KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJkb2N1bWVudCBjb3B5IG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5oYXNDb3B5U3VwcG9ydCA9IHRoaXMuZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkKFwiY29weVwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGV4Lm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb3B5VGV4dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy50ZXh0VG9Db3B5KSB8fCAhaXNTdHJpbmcodGhpcy50ZXh0VG9Db3B5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgICAgICAgICAgXCJub3RleHRcIixcbiAgICAgICAgICAgICAgICBcIm51aUNsaXBib2FyZCB0ZXh0IGlzIGVtcHR5IG9yIG5vdCBhIHN0cmluZ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSh0aGlzLnRleHRUb0NvcHkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRvY3VtZW50LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgICAgbm9kZS5zZWxlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xuICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkU3VjY2Vzcy5lbWl0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihleC5tZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkRXJyb3IuZW1pdCgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVOb2RlID0gKHRleHQ6IHN0cmluZyk6IEhUTUxUZXh0QXJlYUVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG5cbiAgICAgICAgbm9kZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gXCItMTAwMDBweFwiO1xuICAgICAgICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcblxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9O1xufVxuIl19