54 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {Component, Input} from '@angular/core';
 | |
| 
 | |
| @Component({
 | |
|   selector: 'app-copy',
 | |
|   imports: [],
 | |
|   templateUrl: './copy.html',
 | |
|   styleUrl: './copy.scss'
 | |
| })
 | |
| export class Copy {
 | |
| 
 | |
|   @Input() textToCopy = "";
 | |
| 
 | |
|   copy() {
 | |
|     this.copyTextToClipboard(this.textToCopy)
 | |
|   }
 | |
| 
 | |
|   fallbackCopyTextToClipboard(text: any) {
 | |
|     var textArea = document.createElement("textarea");
 | |
|     textArea.value = text;
 | |
| 
 | |
|     // Avoid scrolling to bottom
 | |
|     textArea.style.top = "0";
 | |
|     textArea.style.left = "0";
 | |
|     textArea.style.position = "fixed";
 | |
| 
 | |
|     document.body.appendChild(textArea);
 | |
|     textArea.focus();
 | |
|     textArea.select();
 | |
| 
 | |
|     try {
 | |
|       var successful = document.execCommand('copy');
 | |
|       var msg = successful ? 'successful' : 'unsuccessful';
 | |
|       console.log('Fallback: Copying text command was ' + msg);
 | |
|     } catch (err) {
 | |
|       console.error('Fallback: Oops, unable to copy', err);
 | |
|     }
 | |
| 
 | |
|     document.body.removeChild(textArea);
 | |
|   }
 | |
| 
 | |
|   copyTextToClipboard(text: string) {
 | |
|     console.log("copier", text)
 | |
|     if (!navigator.clipboard) {
 | |
|       this.fallbackCopyTextToClipboard(text);
 | |
|       return;
 | |
|     }
 | |
|     navigator.clipboard.writeText(text).then(function () {
 | |
|       console.log('Async: Copying to clipboard was successful!');
 | |
|     }, function (err) {
 | |
|       console.error('Async: Could not copy text: ', err);
 | |
|     });
 | |
|   }
 | |
| 
 | |
| }
 | 
