UNPKG

ngx-editor

Version:

Rich Text Editor for angular using ProseMirror

98 lines 14.1 kB
import { Component, HostBinding, HostListener, Input } from '@angular/core'; import { ToggleCommands } from '../MenuCommands'; import * as i0 from "@angular/core"; import * as i1 from "../../../editor.service"; import * as i2 from "../menu.service"; import * as i3 from "@angular/common"; export class DropdownComponent { constructor(ngxeService, menuService, el) { this.ngxeService = ngxeService; this.menuService = menuService; this.el = el; this.isDropdownOpen = false; this.activeItems = []; this.disabledItems = []; this.update = (view) => { const { state } = view; this.activeItems = []; this.disabledItems = []; this.items.forEach((item) => { const command = ToggleCommands[item]; const isActive = command.isActive(state); if (isActive) { this.activeItems.push(item); } if (!command.canExecute(state)) { this.disabledItems.push(item); } }); if (this.activeItems.length === 1) { this.activeItem = this.activeItems[0]; } else { this.activeItem = null; } }; } get isSelected() { return Boolean(this.activeItem || this.isDropdownOpen); } get isDropdownDisabled() { return this.disabledItems.length === this.items.length; } onDocumentClick(target) { if (!this.el.nativeElement.contains(target) && this.isDropdownOpen) { this.isDropdownOpen = false; } } getName(key) { return this.ngxeService.locals.get(key); } toggleDropdown(e) { e.preventDefault(); this.isDropdownOpen = !this.isDropdownOpen; } trackByIndex(index) { return index; } onClick(e, item) { e.preventDefault(); // consider only left click if (e.button !== 0) { return; } const command = ToggleCommands[item]; const { state, dispatch } = this.editorView; command.toggle()(state, dispatch); this.isDropdownOpen = false; } ngOnInit() { this.editorView = this.menuService.editor.view; this.updateSubscription = this.menuService.editor.update.subscribe((view) => { this.update(view); }); } ngOnDestroy() { this.updateSubscription.unsubscribe(); } } DropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DropdownComponent, deps: [{ token: i1.NgxEditorService }, { token: i2.MenuService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0", type: DropdownComponent, selector: "ngx-dropdown", inputs: { group: "group", items: "items" }, host: { listeners: { "document:mousedown": "onDocumentClick($event.target)" }, properties: { "class.NgxEditor__Dropdown--Selected": "this.isSelected", "class.NgxEditor--Disabled": "this.isDropdownDisabled" } }, ngImport: i0, template: "<div class=\"NgxEditor__Dropdown--Text\" (mousedown)=\"toggleDropdown($event)\">\n {{getName(activeItem || group)}}\n</div>\n\n<div class=\"NgxEditor__Dropdown--DropdownMenu\" *ngIf=\"isDropdownOpen\">\n <div class=\"NgxEditor__Dropdown--Item\" *ngFor=\"let item of items; trackBy: trackByIndex\" (mousedown)=\"onClick($event, item)\"\n [ngClass]=\"{'NgxEditor__Dropdown--Active': item === activeItem, 'NgxEditor--Disabled':disabledItems.includes(item)}\">\n {{getName(item)}}\n </div>\n</div>\n", styles: [""], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DropdownComponent, decorators: [{ type: Component, args: [{ selector: 'ngx-dropdown', template: "<div class=\"NgxEditor__Dropdown--Text\" (mousedown)=\"toggleDropdown($event)\">\n {{getName(activeItem || group)}}\n</div>\n\n<div class=\"NgxEditor__Dropdown--DropdownMenu\" *ngIf=\"isDropdownOpen\">\n <div class=\"NgxEditor__Dropdown--Item\" *ngFor=\"let item of items; trackBy: trackByIndex\" (mousedown)=\"onClick($event, item)\"\n [ngClass]=\"{'NgxEditor__Dropdown--Active': item === activeItem, 'NgxEditor--Disabled':disabledItems.includes(item)}\">\n {{getName(item)}}\n </div>\n</div>\n", styles: [""] }] }], ctorParameters: function () { return [{ type: i1.NgxEditorService }, { type: i2.MenuService }, { type: i0.ElementRef }]; }, propDecorators: { group: [{ type: Input }], items: [{ type: Input }], isSelected: [{ type: HostBinding, args: ['class.NgxEditor__Dropdown--Selected'] }], isDropdownDisabled: [{ type: HostBinding, args: ['class.NgxEditor--Disabled'] }], onDocumentClick: [{ type: HostListener, args: ['document:mousedown', ['$event.target']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWVkaXRvci9zcmMvbGliL21vZHVsZXMvbWVudS9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy9tZW51L2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQWMsV0FBVyxFQUNsQyxZQUFZLEVBQUUsS0FBSyxFQUNwQixNQUFNLGVBQWUsQ0FBQztBQU12QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBUWpELE1BQU0sT0FBTyxpQkFBaUI7SUFhNUIsWUFDVSxXQUE2QixFQUM3QixXQUF3QixFQUN4QixFQUFjO1FBRmQsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFUeEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFZixnQkFBVyxHQUFxQixFQUFFLENBQUM7UUFDM0Msa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFrRHJCLFdBQU0sR0FBRyxDQUFDLElBQWdCLEVBQUUsRUFBRTtZQUNwQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBRXhCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBb0IsRUFBRSxFQUFFO2dCQUMxQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sUUFB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QUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBY2tELFVBQVU7c0JBQWpFLFdBQVc7dUJBQUMscUNBQXFDO2dCQUlKLGtCQUFrQjtzQkFBL0QsV0FBVzt1QkFBQywyQkFBMkI7Z0JBSWUsZUFBZTtzQkFBckUsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRWRpdG9yVmlldyB9IGZyb20gJ3Byb3NlbWlycm9yLXZpZXcnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5neEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uL21lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBUb2dnbGVDb21tYW5kcyB9IGZyb20gJy4uL01lbnVDb21tYW5kcyc7XG5pbXBvcnQgeyBUQkhlYWRpbmdJdGVtcyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBlZGl0b3JWaWV3OiBFZGl0b3JWaWV3O1xuICBwcml2YXRlIHVwZGF0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIEBJbnB1dCgpIGdyb3VwOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGl0ZW1zOiBUQkhlYWRpbmdJdGVtc1tdO1xuXG4gIGlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBhY3RpdmVJdGVtczogVEJIZWFkaW5nSXRlbXNbXSA9IFtdO1xuICBkaXNhYmxlZEl0ZW1zOiBzdHJpbmdbXSA9IFtdO1xuICBhY3RpdmVJdGVtOiBzdHJpbmcgfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmd4ZVNlcnZpY2U6IE5neEVkaXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZlxuICApIHsgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuTmd4RWRpdG9yX19Ecm9wZG93bi0tU2VsZWN0ZWQnKSBnZXQgaXNTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmFjdGl2ZUl0ZW0gfHwgdGhpcy5pc0Ryb3Bkb3duT3Blbik7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLk5neEVkaXRvci0tRGlzYWJsZWQnKSBnZXQgaXNEcm9wZG93bkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkSXRlbXMubGVuZ3RoID09PSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50LnRhcmdldCddKSBvbkRvY3VtZW50Q2xpY2sodGFyZ2V0OiBOb2RlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSAmJiB0aGlzLmlzRHJvcGRvd25PcGVuKSB7XG4gICAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0TmFtZShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmd4ZVNlcnZpY2UubG9jYWxzLmdldChrZXkpO1xuICB9XG5cbiAgdG9nZ2xlRHJvcGRvd24oZTogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gIXRoaXMuaXNEcm9wZG93bk9wZW47XG4gIH1cblxuICB0cmFja0J5SW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4XG4gIH1cblxuICBvbkNsaWNrKGU6IE1vdXNlRXZlbnQsIGl0ZW06IFRCSGVhZGluZ0l0ZW1zKTogdm9pZCB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gY29uc2lkZXIgb25seSBsZWZ0IGNsaWNrXG4gICAgaWYgKGUuYnV0dG9uICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFuZCA9IFRvZ2dsZUNvbW1hbmRzW2l0ZW1dO1xuICAgIGNvbnN0IHsgc3RhdGUsIGRpc3BhdGNoIH0gPSB0aGlzLmVkaXRvclZpZXc7XG4gICAgY29tbWFuZC50b2dnbGUoKShzdGF0ZSwgZGlzcGF0Y2gpO1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlID0gKHZpZXc6IEVkaXRvclZpZXcpID0+IHtcbiAgICBjb25zdCB7IHN0YXRlIH0gPSB2aWV3O1xuICAgIHRoaXMuYWN0aXZlSXRlbXMgPSBbXTtcbiAgICB0aGlzLmRpc2FibGVkSXRlbXMgPSBbXTtcblxuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbTogVEJIZWFkaW5nSXRlbXMpID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBUb2dnbGVDb21tYW5kc1tpdGVtXTtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gY29tbWFuZC5pc0FjdGl2ZShzdGF0ZSk7XG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICB0aGlzLmFjdGl2ZUl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghY29tbWFuZC5jYW5FeGVjdXRlKHN0YXRlKSkge1xuICAgICAgICB0aGlzLmRpc2FibGVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmFjdGl2ZUl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5hY3RpdmVJdGVtID0gdGhpcy5hY3RpdmVJdGVtc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVJdGVtID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclZpZXcgPSB0aGlzLm1lbnVTZXJ2aWNlLmVkaXRvci52aWV3O1xuXG4gICAgdGhpcy51cGRhdGVTdWJzY3JpcHRpb24gPSB0aGlzLm1lbnVTZXJ2aWNlLmVkaXRvci51cGRhdGUuc3Vic2NyaWJlKCh2aWV3OiBFZGl0b3JWaWV3KSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZSh2aWV3KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJOZ3hFZGl0b3JfX0Ryb3Bkb3duLS1UZXh0XCIgKG1vdXNlZG93bik9XCJ0b2dnbGVEcm9wZG93bigkZXZlbnQpXCI+XG4gIHt7Z2V0TmFtZShhY3RpdmVJdGVtIHx8IGdyb3VwKX19XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIk5neEVkaXRvcl9fRHJvcGRvd24tLURyb3Bkb3duTWVudVwiICpuZ0lmPVwiaXNEcm9wZG93bk9wZW5cIj5cbiAgPGRpdiBjbGFzcz1cIk5neEVkaXRvcl9fRHJvcGRvd24tLUl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgKG1vdXNlZG93bik9XCJvbkNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgIFtuZ0NsYXNzXT1cInsnTmd4RWRpdG9yX19Ecm9wZG93bi0tQWN0aXZlJzogaXRlbSA9PT0gYWN0aXZlSXRlbSwgJ05neEVkaXRvci0tRGlzYWJsZWQnOmRpc2FibGVkSXRlbXMuaW5jbHVkZXMoaXRlbSl9XCI+XG4gICAge3tnZXROYW1lKGl0ZW0pfX1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==