UNPKG

ngx-clipboard

Version:
1 lines 21.6 kB
{"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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"}