ngx-clipboard
Version: 
angular 2 clipboard
1 lines • 21.5 kB
Source Map (JSON)
{"version":3,"file":"ngx-clipboard.mjs","sources":["../../../projects/ngx-clipboard/src/lib/ngx-clipboard.service.ts","../../../projects/ngx-clipboard/src/lib/ngx-clipboard.directive.ts","../../../projects/ngx-clipboard/src/lib/ngx-clipboard-if-supported.directive.ts","../../../projects/ngx-clipboard/src/lib/ngx-clipboard.module.ts","../../../projects/ngx-clipboard/src/public_api.ts","../../../projects/ngx-clipboard/src/ngx-clipboard.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, NgZone, Optional } from '@angular/core';\nimport { WINDOW } from 'ngx-window-token';\nimport { Observable, Subject } from 'rxjs';\n\nimport { ClipboardParams, IClipboardResponse } from './interface';\n\n/**\n * The following code is heavily copied from https://github.com/zenorocha/clipboard.js\n */\n@Injectable({ providedIn: 'root' })\nexport class ClipboardService {\n    private copySubject = new Subject<IClipboardResponse>();\n    public copyResponse$: Observable<IClipboardResponse> = this.copySubject.asObservable();\n    private tempTextArea: HTMLTextAreaElement | undefined;\n    private config: ClipboardParams = {};\n\n    constructor(\n        private ngZone: NgZone,\n        @Inject(DOCUMENT) public document: any,\n        @Optional() @Inject(WINDOW) private window: any\n    ) {}\n\n    public configure(config: ClipboardParams) {\n        this.config = config;\n    }\n\n    public copy(content: string): void {\n        if (!this.isSupported || !content) {\n            return this.pushCopyResponse({ isSuccess: false, content });\n        }\n        const copyResult = this.copyFromContent(content);\n        if (copyResult) {\n            return this.pushCopyResponse({ content, isSuccess: copyResult });\n        }\n        return this.pushCopyResponse({ isSuccess: false, content });\n    }\n\n    public get isSupported(): boolean {\n        return !!this.document.queryCommandSupported && !!this.document.queryCommandSupported('copy') && !!this.window;\n    }\n\n    public isTargetValid(element: HTMLInputElement | HTMLTextAreaElement): boolean {\n        if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {\n            if (element.hasAttribute('disabled')) {\n                throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n            }\n            return true;\n        }\n        throw new Error('Target should be input or textarea');\n    }\n\n    /**\n     * Attempts to copy from an input `targetElm`\n     */\n    public copyFromInputElement(targetElm: HTMLInputElement | HTMLTextAreaElement, isFocus = true): boolean {\n        try {\n            this.selectTarget(targetElm);\n            const re = this.copyText();\n            this.clearSelection(isFocus ? targetElm : undefined, this.window);\n            return re && this.isCopySuccessInIE11();\n        } catch (error) {\n            return false;\n        }\n    }\n\n    /**\n     * This is a hack for IE11 to return `true` even if copy fails.\n     */\n    public isCopySuccessInIE11(): boolean {\n        const clipboardData = this.window['clipboardData'];\n        if (clipboardData && clipboardData.getData) {\n            if (!clipboardData.getData('Text')) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Creates a fake textarea element, sets its value from `text` property,\n     * and makes a selection on it.\n     */\n    public copyFromContent(content: string, container: HTMLElement = this.document.body): boolean {\n        // check if the temp textarea still belongs to the current container.\n        // In case we have multiple places using ngx-clipboard, one is in a modal using container but the other one is not.\n        if (this.tempTextArea && !container.contains(this.tempTextArea)) {\n            this.destroy(this.tempTextArea.parentElement || undefined);\n        }\n\n        if (!this.tempTextArea) {\n            this.tempTextArea = this.createTempTextArea(this.document, this.window);\n            try {\n                container.appendChild(this.tempTextArea);\n            } catch (error) {\n                throw new Error('Container should be a Dom element');\n            }\n        }\n        this.tempTextArea.value = content;\n\n        const toReturn = this.copyFromInputElement(this.tempTextArea, false);\n        if (this.config.cleanUpAfterCopy) {\n            this.destroy(this.tempTextArea.parentElement || undefined);\n        }\n        return toReturn;\n    }\n\n    /**\n     * Remove temporary textarea if any exists.\n     */\n    public destroy(container: HTMLElement = this.document.body): void {\n        if (this.tempTextArea) {\n            container.removeChild(this.tempTextArea);\n            // removeChild doesn't remove the reference from memory\n            this.tempTextArea = undefined;\n        }\n    }\n\n    /**\n     * Select the target html input element.\n     */\n    private selectTarget(inputElement: HTMLInputElement | HTMLTextAreaElement): number | undefined {\n        inputElement.select();\n        inputElement.setSelectionRange(0, inputElement.value.length);\n        return inputElement.value.length;\n    }\n\n    private copyText(): boolean {\n        return this.document.execCommand('copy');\n    }\n\n    /**\n     * Moves focus away from `target` and back to the trigger, removes current selection.\n     */\n    private clearSelection(inputElement: HTMLInputElement | HTMLTextAreaElement | undefined, window: Window): void {\n        inputElement && inputElement.focus();\n        window.getSelection()?.removeAllRanges();\n    }\n\n    /**\n     * Creates a fake textarea for copy command.\n     */\n    private createTempTextArea(doc: Document, window: Window): HTMLTextAreaElement {\n        const isRTL = doc.documentElement.getAttribute('dir') === 'rtl';\n        let ta: HTMLTextAreaElement;\n        ta = doc.createElement('textarea');\n        // Prevent zooming on iOS\n        ta.style.fontSize = '12pt';\n        // Reset box model\n        ta.style.border = '0';\n        ta.style.padding = '0';\n        ta.style.margin = '0';\n        // Move element out of screen horizontally\n        ta.style.position = 'absolute';\n        ta.style[isRTL ? 'right' : 'left'] = '-9999px';\n        // Move element to the same position vertically\n        const yPosition = window.pageYOffset || doc.documentElement.scrollTop;\n        ta.style.top = yPosition + 'px';\n        ta.setAttribute('readonly', '');\n        return ta;\n    }\n\n    /**\n     * Pushes copy operation response to copySubject, to provide global access\n     * to the response.\n     */\n    public pushCopyResponse(response: IClipboardResponse): void {\n        if (this.copySubject.observers.length > 0) {\n            this.ngZone.run(() => {\n                this.copySubject.next(response);\n            });\n        }\n    }\n\n    /**\n     * @deprecated use pushCopyResponse instead.\n     */\n    public pushCopyReponse(response: IClipboardResponse): void {\n        this.pushCopyResponse(response);\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    EventEmitter,\n    Input,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    Output,\n    Renderer2\n} from '@angular/core';\nimport { IClipboardResponse } from './interface';\nimport { ClipboardService } from './ngx-clipboard.service';\n\n@Directive({ selector: '[ngxClipboard]' })\nexport class ClipboardDirective implements OnInit, OnDestroy {\n    // https://github.com/maxisam/ngx-clipboard/issues/239#issuecomment-623330624\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('ngxClipboard')\n    public targetElm: HTMLInputElement | HTMLTextAreaElement | undefined | '';\n    @Input()\n    public container: HTMLElement;\n\n    @Input()\n    public cbContent: string | undefined;\n\n    @Input()\n    public cbSuccessMsg: string;\n\n    @Output()\n    public cbOnSuccess: EventEmitter<IClipboardResponse> = new EventEmitter<IClipboardResponse>();\n\n    @Output()\n    public cbOnError: EventEmitter<any> = new EventEmitter<any>();\n\n    private clickListener: () => void;\n\n    constructor(\n        private ngZone: NgZone,\n        private host: ElementRef<HTMLElement>,\n        private renderer: Renderer2,\n        private clipboardSrv: ClipboardService\n    ) {}\n\n    // eslint-disable-next-line no-empty, @typescript-eslint/no-empty-function\n    public ngOnInit() {\n        this.ngZone.runOutsideAngular(() => {\n            // By default each host listener schedules change detection and also wrapped\n            // into additional function that calls `markForCheck()`. We're listening the `click`\n            // event in the context of the root zone to avoid running unnecessary change detections,\n            // since this directive doesn't do anything template-related (e.g. updates template variables).\n            this.clickListener = this.renderer.listen(this.host.nativeElement, 'click', this.onClick);\n        });\n    }\n\n    public ngOnDestroy() {\n        if (this.clickListener) {\n            this.clickListener();\n        }\n        this.clipboardSrv.destroy(this.container);\n    }\n\n    private onClick = (event: MouseEvent): void => {\n        if (!this.clipboardSrv.isSupported) {\n            this.handleResult(false, undefined, event);\n        } else if (this.targetElm && this.clipboardSrv.isTargetValid(this.targetElm)) {\n            this.handleResult(this.clipboardSrv.copyFromInputElement(this.targetElm), this.targetElm.value, event);\n        } else if (this.cbContent) {\n            this.handleResult(this.clipboardSrv.copyFromContent(this.cbContent, this.container), this.cbContent, event);\n        }\n    };\n\n    /**\n     * Fires an event based on the copy operation result.\n     * @param succeeded\n     */\n    private handleResult(succeeded: boolean, copiedContent: string | undefined, event: MouseEvent): void {\n        let response: IClipboardResponse = {\n            isSuccess: succeeded,\n            content: copiedContent,\n            successMessage: this.cbSuccessMsg,\n            event\n        };\n\n        if (succeeded) {\n            if (this.cbOnSuccess.observed) {\n                this.ngZone.run(() => {\n                    this.cbOnSuccess.emit(response);\n                });\n            }\n        } else {\n            if (this.cbOnError.observed) {\n                this.ngZone.run(() => {\n                    this.cbOnError.emit(response);\n                });\n            }\n        }\n\n        this.clipboardSrv.pushCopyResponse(response);\n    }\n}\n","import { Directive, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\n\nimport { ClipboardService } from './ngx-clipboard.service';\n\n@Directive({\n    selector: '[ngxClipboardIfSupported]'\n})\nexport class ClipboardIfSupportedDirective implements OnInit {\n    constructor(\n        private _clipboardService: ClipboardService,\n        private _viewContainerRef: ViewContainerRef,\n        private _templateRef: TemplateRef<any>\n    ) {}\n\n    ngOnInit() {\n        if (this._clipboardService.isSupported) {\n            this._viewContainerRef.createEmbeddedView(this._templateRef);\n        }\n    }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ClipboardIfSupportedDirective } from './ngx-clipboard-if-supported.directive';\nimport { ClipboardDirective } from './ngx-clipboard.directive';\n\n@NgModule({\n    imports: [CommonModule],\n    declarations: [ClipboardDirective, ClipboardIfSupportedDirective],\n    exports: [ClipboardDirective, ClipboardIfSupportedDirective]\n})\nexport class ClipboardModule {}\n","/*\n * Public API Surface of ngx-clipboard\n */\n\nexport * from './lib/ngx-clipboard.service';\nexport * from './lib/ngx-clipboard.directive';\nexport * from './lib/ngx-clipboard.module';\nexport * from './lib/ngx-clipboard-if-supported.directive';\nexport * from './lib/interface';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ClipboardService"],"mappings":"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"}