ng-devui
Version:
DevUI components based on Angular
113 lines • 14.5 kB
JavaScript
import { Clipboard } from '@angular/cdk/clipboard';
import { DOCUMENT } from '@angular/common';
import { ComponentFactoryResolver, Directive, ElementRef, EventEmitter, HostListener, Inject, Input, Output } from '@angular/core';
import { I18nService } from 'ng-devui/i18n';
import { OverlayContainerRef } from 'ng-devui/overlay-container';
import { PopoverComponent } from 'ng-devui/popover';
import * as i0 from "@angular/core";
import * as i1 from "@angular/cdk/clipboard";
import * as i2 from "ng-devui/i18n";
import * as i3 from "ng-devui/overlay-container";
export class ClipboardDirective {
constructor(elm, clipboard, i18n, overlayContainerRef, componentFactoryResolver, doc) {
this.elm = elm;
this.clipboard = clipboard;
this.i18n = i18n;
this.overlayContainerRef = overlayContainerRef;
this.componentFactoryResolver = componentFactoryResolver;
this.doc = doc;
this.position = 'top';
this.sticky = false;
this.copyResultEvent = new EventEmitter();
this.onDocumentClick = (event) => {
event.stopPropagation();
if (!this.elm.nativeElement.contains(event.target)) {
this.destroy();
}
};
this.document = this.doc;
}
ngOnInit() {
this.setI18nText();
}
setI18nText() {
this.i18nCommonText = this.i18n.getI18nText().common;
this.i18nSubscription = this.i18n.langChange().subscribe((data) => {
this.i18nCommonText = data.common;
});
}
onClickEvent() {
let isSucceeded = false;
const isSupported = !!this.document.queryCommandSupported && !!this.document.queryCommandSupported('copy') && !!window;
if (isSupported && this.content) {
isSucceeded = this.clipboard.copy(this.content);
if (isSucceeded) {
this.tipContent = this.tipContent || this.i18nCommonText.copied;
this.createPopover();
}
const result = { isSupported: isSupported, isSucceeded: isSucceeded, content: this.content };
this.copyResultEvent.emit(result);
}
}
createPopover() {
if (this.popoverComponentRef) {
this.popoverComponentRef.destroy();
}
this.popoverComponentRef = this.overlayContainerRef.createComponent(this.componentFactoryResolver.resolveComponentFactory(PopoverComponent));
Object.assign(this.popoverComponentRef.instance, {
content: this.tipContent,
triggerElementRef: this.elm,
position: this.position,
popType: 'default',
popMaxWidth: 200,
appendToBody: true,
zIndex: 1060
});
this.document.addEventListener('click', this.onDocumentClick);
if (!this.sticky) {
setTimeout(() => this.destroy(), 3000);
}
}
destroy() {
if (this.popoverComponentRef) {
this.popoverComponentRef.destroy();
this.popoverComponentRef = null;
}
this.document.removeEventListener('click', this.onDocumentClick);
}
ngOnDestroy() {
if (this.i18nSubscription) {
this.i18nSubscription.unsubscribe();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClipboardDirective, deps: [{ token: i0.ElementRef }, { token: i1.Clipboard }, { token: i2.I18nService }, { token: i3.OverlayContainerRef }, { token: i0.ComponentFactoryResolver }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ClipboardDirective, selector: "[dClipboard]", inputs: { devuiTargetElm: ["dClipboard", "devuiTargetElm"], container: "container", content: "content", position: "position", sticky: "sticky", tipContent: "tipContent" }, outputs: { copyResultEvent: "copyResultEvent" }, host: { listeners: { "click": "onClickEvent()" } }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClipboardDirective, decorators: [{
type: Directive,
args: [{
selector: '[dClipboard]'
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.Clipboard }, { type: i2.I18nService }, { type: i3.OverlayContainerRef }, { type: i0.ComponentFactoryResolver }, { type: undefined, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }], propDecorators: { devuiTargetElm: [{
type: Input,
args: ['dClipboard']
}], container: [{
type: Input
}], content: [{
type: Input
}], position: [{
type: Input
}], sticky: [{
type: Input
}], tipContent: [{
type: Input
}], copyResultEvent: [{
type: Output
}], onClickEvent: [{
type: HostListener,
args: ['click']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL2NvbW1vbi9jbGlwYm9hcmQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNMLHdCQUF3QixFQUV4QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFpQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBT3BELE1BQU0sT0FBTyxrQkFBa0I7SUFhN0IsWUFDVSxHQUFlLEVBQ2YsU0FBb0IsRUFDcEIsSUFBaUIsRUFDakIsbUJBQXdDLEVBQ3hDLHdCQUFrRCxFQUNoQyxHQUFRO1FBTDFCLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2hDLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFmM0IsYUFBUSxHQUFpQixLQUFLLENBQUM7UUFDL0IsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVkLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQXdFcEQsb0JBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzFCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FB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QU87UUFDTCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQVNELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQzsrR0ExRlUsa0JBQWtCLDJLQW1CbkIsUUFBUTttR0FuQlAsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUg5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO2lCQUN6Qjs7MEJBb0JJLE1BQU07MkJBQUMsUUFBUTt5Q0FsQkcsY0FBYztzQkFBbEMsS0FBSzt1QkFBQyxZQUFZO2dCQUNWLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkE0QlAsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEkxOG5JbnRlcmZhY2UsIEkxOG5TZXJ2aWNlIH0gZnJvbSAnbmctZGV2dWkvaTE4bic7XG5pbXBvcnQgeyBPdmVybGF5Q29udGFpbmVyUmVmIH0gZnJvbSAnbmctZGV2dWkvb3ZlcmxheS1jb250YWluZXInO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ25nLWRldnVpL3BvcG92ZXInO1xuaW1wb3J0IHsgUG9zaXRpb25UeXBlIH0gZnJvbSAnbmctZGV2dWkvdG9vbHRpcCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RDbGlwYm9hcmRdJ1xufSlcbmV4cG9ydCBjbGFzcyBDbGlwYm9hcmREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQgLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoJ2RDbGlwYm9hcmQnKSBkZXZ1aVRhcmdldEVsbTogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCB1bmRlZmluZWQgfCAnJztcbiAgQElucHV0KCkgY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgQElucHV0KCkgY29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBwb3NpdGlvbjogUG9zaXRpb25UeXBlID0gJ3RvcCc7XG4gIEBJbnB1dCgpIHN0aWNreSA9IGZhbHNlO1xuICBASW5wdXQoKSB0aXBDb250ZW50OiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IFRlbXBsYXRlUmVmPGFueT47XG4gIEBPdXRwdXQoKSBjb3B5UmVzdWx0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcG9wb3ZlckNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFBvcG92ZXJDb21wb25lbnQ+O1xuICBpMThuQ29tbW9uVGV4dDogSTE4bkludGVyZmFjZVsnY29tbW9uJ107XG4gIGkxOG5TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgZG9jdW1lbnQ6IERvY3VtZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxtOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2xpcGJvYXJkOiBDbGlwYm9hcmQsXG4gICAgcHJpdmF0ZSBpMThuOiBJMThuU2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJsYXlDb250YWluZXJSZWY6IE92ZXJsYXlDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvYzogYW55KSB7XG4gICAgdGhpcy5kb2N1bWVudCA9IHRoaXMuZG9jO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJMThuVGV4dCgpO1xuICB9XG5cbiAgc2V0STE4blRleHQoKSB7XG4gICAgdGhpcy5pMThuQ29tbW9uVGV4dCA9IHRoaXMuaTE4bi5nZXRJMThuVGV4dCgpLmNvbW1vbjtcbiAgICB0aGlzLmkxOG5TdWJzY3JpcHRpb24gPSB0aGlzLmkxOG4ubGFuZ0NoYW5nZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5pMThuQ29tbW9uVGV4dCA9IGRhdGEuY29tbW9uO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBvbkNsaWNrRXZlbnQoKSB7XG4gICAgbGV0IGlzU3VjY2VlZGVkID0gZmFsc2U7XG4gICAgY29uc3QgaXNTdXBwb3J0ZWQgPSAhIXRoaXMuZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkICYmICEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoJ2NvcHknKSAmJiAhIXdpbmRvdztcbiAgICBpZiAoaXNTdXBwb3J0ZWQgJiYgdGhpcy5jb250ZW50KSB7XG4gICAgICBpc1N1Y2NlZWRlZCA9IHRoaXMuY2xpcGJvYXJkLmNvcHkodGhpcy5jb250ZW50KTtcbiAgICAgIGlmIChpc1N1Y2NlZWRlZCkge1xuICAgICAgICB0aGlzLnRpcENvbnRlbnQgPSB0aGlzLnRpcENvbnRlbnQgfHwgdGhpcy5pMThuQ29tbW9uVGV4dC5jb3BpZWQ7XG4gICAgICAgIHRoaXMuY3JlYXRlUG9wb3ZlcigpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0geyBpc1N1cHBvcnRlZDogaXNTdXBwb3J0ZWQsIGlzU3VjY2VlZGVkOiBpc1N1Y2NlZWRlZCwgY29udGVudDogdGhpcy5jb250ZW50IH07XG4gICAgICB0aGlzLmNvcHlSZXN1bHRFdmVudC5lbWl0KHJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlUG9wb3ZlcigpIHtcbiAgICBpZiAodGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYgPSB0aGlzLm92ZXJsYXlDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoUG9wb3ZlckNvbXBvbmVudClcbiAgICApO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLmluc3RhbmNlLCB7XG4gICAgICBjb250ZW50OiB0aGlzLnRpcENvbnRlbnQsXG4gICAgICB0cmlnZ2VyRWxlbWVudFJlZjogdGhpcy5lbG0sXG4gICAgICBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbixcbiAgICAgIHBvcFR5cGU6ICdkZWZhdWx0JyxcbiAgICAgIHBvcE1heFdpZHRoOiAyMDAsXG4gICAgICBhcHBlbmRUb0JvZHk6IHRydWUsXG4gICAgICB6SW5kZXg6IDEwNjBcbiAgICB9KTtcbiAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkRvY3VtZW50Q2xpY2spO1xuICAgIGlmICghdGhpcy5zdGlja3kpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kZXN0cm95KCksIDMwMDApO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZikge1xuICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRG9jdW1lbnRDbGljayk7XG4gIH1cblxuICBvbkRvY3VtZW50Q2xpY2sgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICB9O1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmkxOG5TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuaTE4blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19