UNPKG

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