mirror of
https://github.com/richard-loafle/fuse-angular.git
synced 2025-01-11 04:55:07 +00:00
397c304ab2
+ Changed the Shared Module (WIP)
66 lines
1.7 KiB
TypeScript
66 lines
1.7 KiB
TypeScript
/**
|
|
* 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 FuseCopierService
|
|
{
|
|
|
|
private textarea: HTMLTextAreaElement;
|
|
|
|
/** Copy the text value to the clipboard. */
|
|
copyText(text: string): boolean
|
|
{
|
|
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: string)
|
|
{
|
|
// Create a fake element to hold the contents to copy
|
|
this.textarea = document.createElement('textarea');
|
|
|
|
// Prevent zooming on iOS
|
|
this.textarea.style.fontSize = '12pt';
|
|
|
|
// Hide the element
|
|
this.textarea.classList.add('cdk-visually-hidden');
|
|
|
|
// Move element to the same position vertically
|
|
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 = null;
|
|
}
|
|
}
|
|
}
|