/**
 * This class is based on the code in the following projects:
 *
 * - https://github.com/zenorocha/select
 * - https://github.com/zenorocha/clipboard.js/
 *
 * Both released under MIT license - © Zeno Rocha
 */ import { Injectable } from '@angular/core' ; @ Injectable ( ) export class CopierService { private textarea ? : HTMLTextAreaElement ; /** Copy the text value to the clipboard. */ copyText ( text ) { this . createTextareaAndSelect ( text ) ; const copySuccessful = document . execCommand ( 'copy' ) ; this . removeFake ( ) ; return copySuccessful ; } /**
     * Creates a hidden textarea element, sets its value from `text` property,
     * and makes a selection on it.
     */ private createTextareaAndSelect ( text ) { this . textarea = document . createElement ( 'textarea' ) ; this . textarea . style . fontSize = '12pt' ; this . textarea . classList . add ( 'cdk-visually-hidden' ) ; const yPosition = window . pageYOffset || document . documentElement . scrollTop ; this . textarea . style . top = `${ yPosition }px` ; this . textarea . setAttribute ( 'readonly' , '' ) ; this . textarea . value = text ; document . body . appendChild ( this . textarea ) ; this . textarea . select ( ) ; this . textarea . setSelectionRange ( 0 , this . textarea . value . length ) ; } /** Remove the text area from the DOM. */ private removeFake ( ) { if ( this . textarea ) { document . body . removeChild ( this . textarea ) ; this . textarea = undefined ; } } }