mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-12 17:04:57 +00:00
* Angular 9 compatibility: add explicit types to prevent automatic deep imports If you do not provide an explicit return type to a function then TypeScript will try to guess it and create a dynamic import type for the `.d.ts` files. Often the imports incorrectly point to a path deep within a package, rather than accessing the type via the correct public facing import. From Angular v9, using ivy, such deep imports cause compilation errors and will prevent this library from being used for ivy enabled applications. This commit fixes this problem for a component and a service that the adf-core library exports. * Angular 9 compatibility: import DOCUMENT from `@angular/common` In Angular 7 importing `DOCUMENT` from `platform-browser` was deprecated, and it was removed completely in Angular 8. * fix type afterlast alpha * fix type after last alpha * fix types demo shell
87 lines
2.9 KiB
TypeScript
87 lines
2.9 KiB
TypeScript
/*!
|
|
* @license
|
|
* Copyright 2019 Alfresco Software, Ltd.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import { Injectable, Inject } from '@angular/core';
|
|
import { DOCUMENT } from '@angular/common';
|
|
import { LogService } from '../services/log.service';
|
|
import { NotificationService } from '../notifications/services/notification.service';
|
|
|
|
@Injectable()
|
|
export class ClipboardService {
|
|
|
|
constructor(
|
|
@Inject(DOCUMENT) private document: any,
|
|
private logService: LogService,
|
|
private notificationService: NotificationService) {}
|
|
|
|
/**
|
|
* Checks if the target element can have its text copied.
|
|
* @param target Target HTML element
|
|
* @returns True if the text can be copied, false otherwise
|
|
*/
|
|
isTargetValid(target: HTMLInputElement | HTMLTextAreaElement) {
|
|
if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) {
|
|
return !target.hasAttribute('disabled');
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Copies text from an HTML element to the clipboard.
|
|
* @param target HTML element to be copied
|
|
* @param message Snackbar message to alert when copying happens
|
|
*/
|
|
copyToClipboard(target: HTMLInputElement | HTMLTextAreaElement, message?: string) {
|
|
if (this.isTargetValid(target)) {
|
|
try {
|
|
target.select();
|
|
target.setSelectionRange(0, target.value.length);
|
|
this.document.execCommand('copy');
|
|
this.notify(message);
|
|
} catch (error) {
|
|
this.logService.error(error);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Copies a text string to the clipboard.
|
|
* @param content Text to copy
|
|
* @param message Snackbar message to alert when copying happens
|
|
*/
|
|
copyContentToClipboard(content: string, message: string) {
|
|
try {
|
|
document.addEventListener('copy', (e: ClipboardEvent) => {
|
|
e.clipboardData.setData('text/plain', (content));
|
|
e.preventDefault();
|
|
document.removeEventListener('copy', null);
|
|
});
|
|
document.execCommand('copy');
|
|
this.notify(message);
|
|
} catch (error) {
|
|
this.logService.error(error);
|
|
}
|
|
}
|
|
|
|
private notify(message) {
|
|
if (message) {
|
|
this.notificationService.openSnackMessage(message);
|
|
}
|
|
}
|
|
|
|
}
|