@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
116 lines • 15.5 kB
JavaScript
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, } from "@angular/core";
import { FloatingToolbar } from "../../link-tool/link-panel/link-panel.component";
import { ConnectionPositionPair } from "@angular/cdk/overlay";
import { EditorToolbar } from "../../../lib/editor-toolbar/interfaces";
import { ComponentPortal } from "@angular/cdk/portal";
import { pluginKey } from "../../../plugins/code/code.plugin";
import { changeLanguage, removeCodeBlock } from "../../../plugins/code/code.command";
import { modeInfo } from "../../../plugins/code/codemirror";
export class CodePanelComponent {
constructor(toolbar, cdr) {
this.options = modeInfo.sort((a, b) => {
if (a.name < b.name) {
return -1;
}
if (a.name > b.name) {
return 1;
}
return 0;
});
this.toolbar = toolbar;
this.deleteCode = {
tooltip: "Remove",
icon: "fa-trash-alt",
run: removeCodeBlock
};
this.sub = this.toolbar.stateChange.subscribe(editor => {
const pluginState = pluginKey.getState(editor.state);
this.mode = pluginState.language;
this.toolbar.overlay.updatePosition();
cdr.markForCheck();
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
handleSelect(mode) {
this.toolbar.runTool({
run: changeLanguage(mode)
});
}
}
CodePanelComponent.decorators = [
{ type: Component, args: [{
selector: "z-code-panel",
template: `
<mat-form-field>
<mat-select [value]="mode" placeholder="Select Language" (selectionChange)="handleSelect($event.value)">
<mat-option>
<span>Plain Text</span>
</mat-option>
<mat-option *ngFor="let option of options" [value]="option.name">
<span [textContent]="option.name"></span>
</mat-option>
</mat-select>
</mat-form-field>
<z-editor-toolbar-button [tool]="deleteCode"></z-editor-toolbar-button>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [":host{padding:.5rem 1em 0;margin:.5rem 0;border-radius:.4rem;background:#fff;box-shadow:0 .5rem 2rem rgba(0,0,0,.2)}mat-form-field{margin:0 .5rem}"]
}] }
];
/** @nocollapse */
CodePanelComponent.ctorParameters = () => [
{ type: FloatingToolbar },
{ type: ChangeDetectorRef }
];
export function attachCodePanel(componentFactoryResolver, overlay, parentInjector) {
const overlayRef = overlay.create();
let previousOrigin;
return (editor) => {
const pluginState = pluginKey.getState(editor.state);
const origin = pluginState.element;
if (!pluginState.toolbarVisible) {
overlayRef.detach();
return;
}
const toolbar = new FloatingToolbar(editor, overlayRef);
const injector = Injector.create({
parent: parentInjector,
providers: [
{
provide: FloatingToolbar,
useValue: toolbar,
},
{
provide: EditorToolbar,
useValue: toolbar,
},
],
});
const linkPanelPortal = new ComponentPortal(CodePanelComponent, null, injector);
const positions = [
new ConnectionPositionPair({ originX: "center", originY: "bottom" }, { overlayX: "center", overlayY: "top" }),
];
if (previousOrigin !== origin) {
overlayRef.detach();
}
if (!overlayRef.hasAttached()) {
overlayRef.attach(linkPanelPortal);
const strategy = overlay
.position()
.flexibleConnectedTo(origin)
.withFlexibleDimensions(false)
.withPush(false)
.withPositions(positions);
const scrollStrategy = overlay.scrollStrategies.reposition();
strategy.attach(overlayRef);
strategy.apply();
scrollStrategy.attach(overlayRef);
scrollStrategy.enable();
overlayRef.updatePositionStrategy(strategy);
previousOrigin = origin;
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aem9kaWFjLXVpL2VkaXRvci8iLCJzb3VyY2VzIjpbInRvb2xzL2NvZGUtdG9vbC9jb2RlLXBhbmVsL2NvZGUtcGFuZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxRQUFRLEdBRVgsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlEQUFpRCxDQUFBO0FBQ2pGLE9BQU8sRUFBRSxzQkFBc0IsRUFBVyxNQUFNLHNCQUFzQixDQUFBO0FBRXRFLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDckQsT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFBO0FBRXBGLE9BQU8sRUFBWSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQW9CckUsTUFBTSxPQUFPLGtCQUFrQjtJQU8zQixZQUFZLE9BQXdCLEVBQUUsR0FBc0I7UUFDeEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUNqQixPQUFPLENBQUMsQ0FBQyxDQUFBO2FBQ1o7WUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDakIsT0FBTyxDQUFDLENBQUE7YUFDWDtZQUNELE9BQU8sQ0FBQyxDQUFBO1FBQ1osQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJ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LENBQUMsTUFBTSxDQUFDO2lCQUMzQixzQkFBc0IsQ0FBQyxLQUFLLENBQUM7aUJBQzdCLFFBQVEsQ0FBQyxLQUFLLENBQUM7aUJBQ2YsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBRTdCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtZQUU1RCxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQzNCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUVoQixjQUFjLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ2pDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtZQUV2QixVQUFVLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUE7WUFFM0MsY0FBYyxHQUFHLE1BQU0sQ0FBQTtTQUMxQjtJQUNMLENBQUMsQ0FBQTtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIEluamVjdG9yLFxyXG4gICAgT25EZXN0cm95LFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcclxuaW1wb3J0IHsgRmxvYXRpbmdUb29sYmFyIH0gZnJvbSBcIi4uLy4uL2xpbmstdG9vbC9saW5rLXBhbmVsL2xpbmstcGFuZWwuY29tcG9uZW50XCJcclxuaW1wb3J0IHsgQ29ubmVjdGlvblBvc2l0aW9uUGFpciwgT3ZlcmxheSB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiXHJcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2VkaXRvci5zZXJ2aWNlXCJcclxuaW1wb3J0IHsgRWRpdG9yVG9vbCwgRWRpdG9yVG9vbGJhciB9IGZyb20gXCIuLi8uLi8uLi9saWIvZWRpdG9yLXRvb2xiYXIvaW50ZXJmYWNlc1wiXHJcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCJcclxuaW1wb3J0IHsgQ29kZUJsb2NrU3RhdGUsIHBsdWdpbktleSB9IGZyb20gXCIuLi8uLi8uLi9wbHVnaW5zL2NvZGUvY29kZS5wbHVnaW5cIlxyXG5pbXBvcnQgeyBjaGFuZ2VMYW5ndWFnZSwgcmVtb3ZlQ29kZUJsb2NrIH0gZnJvbSBcIi4uLy4uLy4uL3BsdWdpbnMvY29kZS9jb2RlLmNvbW1hbmRcIlxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiXHJcbmltcG9ydCB7IE1vZGVJbmZvLCBtb2RlSW5mbyB9IGZyb20gXCIuLi8uLi8uLi9wbHVnaW5zL2NvZGUvY29kZW1pcnJvclwiXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcInotY29kZS1wYW5lbFwiLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCJtb2RlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgTGFuZ3VhZ2VcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImhhbmRsZVNlbGVjdCgkZXZlbnQudmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5QbGFpbiBUZXh0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cIm9wdGlvbi5uYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8ei1lZGl0b3ItdG9vbGJhci1idXR0b24gW3Rvb2xdPVwiZGVsZXRlQ29kZVwiPjwvei1lZGl0b3ItdG9vbGJhci1idXR0b24+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuL2NvZGUtcGFuZWwuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvZGVQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgICBvcHRpb25zOiBNb2RlSW5mb1tdXHJcbiAgICB0b29sYmFyOiBGbG9hdGluZ1Rvb2xiYXJcclxuICAgIG1vZGU6IHN0cmluZ1xyXG4gICAgc3ViOiBTdWJzY3JpcHRpb25cclxuICAgIGRlbGV0ZUNvZGU6IEVkaXRvclRvb2xcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0b29sYmFyOiBGbG9hdGluZ1Rvb2xiYXIsIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBtb2RlSW5mby5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPCBiLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPiBiLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDBcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMudG9vbGJhciA9IHRvb2xiYXJcclxuICAgICAgICB0aGlzLmRlbGV0ZUNvZGUgPSB7XHJcbiAgICAgICAgICAgIHRvb2x0aXA6IFwiUmVtb3ZlXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZmEtdHJhc2gtYWx0XCIsXHJcbiAgICAgICAgICAgIHJ1bjogcmVtb3ZlQ29kZUJsb2NrXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN1YiA9IHRoaXMudG9vbGJhci5zdGF0ZUNoYW5nZS5zdWJzY3JpYmUoZWRpdG9yID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luU3RhdGU6IENvZGVCbG9ja1N0YXRlID0gcGx1Z2luS2V5LmdldFN0YXRlKGVkaXRvci5zdGF0ZSlcclxuXHJcbiAgICAgICAgICAgIHRoaXMubW9kZSA9IHBsdWdpblN0YXRlLmxhbmd1YWdlXHJcblxyXG4gICAgICAgICAgICB0aGlzLnRvb2xiYXIub3ZlcmxheS51cGRhdGVQb3NpdGlvbigpXHJcblxyXG4gICAgICAgICAgICBjZHIubWFya0ZvckNoZWNrKClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVTZWxlY3QobW9kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyLnJ1blRvb2woe1xyXG4gICAgICAgICAgICBydW46IGNoYW5nZUxhbmd1YWdlKG1vZGUpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaENvZGVQYW5lbChcclxuICAgIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgIHBhcmVudEluamVjdG9yOiBJbmplY3RvcixcclxuKSB7XHJcbiAgICBjb25zdCBvdmVybGF5UmVmID0gb3ZlcmxheS5jcmVhdGUoKVxyXG4gICAgbGV0IHByZXZpb3VzT3JpZ2luXHJcblxyXG4gICAgcmV0dXJuIChlZGl0b3I6IEVkaXRvclNlcnZpY2UpID0+IHtcclxuICAgICAgICBjb25zdCBwbHVnaW5TdGF0ZTogQ29kZUJsb2NrU3RhdGUgPSBwbHVnaW5LZXkuZ2V0U3RhdGUoZWRpdG9yLnN0YXRlKVxyXG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IHBsdWdpblN0YXRlLmVsZW1lbnRcclxuXHJcbiAgICAgICAgaWYgKCFwbHVnaW5TdGF0ZS50b29sYmFyVmlzaWJsZSkge1xyXG4gICAgICAgICAgICBvdmVybGF5UmVmLmRldGFjaCgpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdG9vbGJhciA9IG5ldyBGbG9hdGluZ1Rvb2xiYXIoZWRpdG9yLCBvdmVybGF5UmVmKVxyXG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRJbmplY3RvcixcclxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmxvYXRpbmdUb29sYmFyLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiB0b29sYmFyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBFZGl0b3JUb29sYmFyLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiB0b29sYmFyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IGxpbmtQYW5lbFBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoQ29kZVBhbmVsQ29tcG9uZW50LCBudWxsLCBpbmplY3RvcilcclxuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKFxyXG4gICAgICAgICAgICAgICAgeyBvcmlnaW5YOiBcImNlbnRlclwiLCBvcmlnaW5ZOiBcImJvdHRvbVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IG92ZXJsYXlYOiBcImNlbnRlclwiLCBvdmVybGF5WTogXCJ0b3BcIiB9LFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgIF1cclxuXHJcbiAgICAgICAgaWYgKHByZXZpb3VzT3JpZ2luICE9PSBvcmlnaW4pIHtcclxuICAgICAgICAgICAgb3ZlcmxheVJlZi5kZXRhY2goKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFvdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgICAgICAgb3ZlcmxheVJlZi5hdHRhY2gobGlua1BhbmVsUG9ydGFsKVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RyYXRlZ3kgPSBvdmVybGF5XHJcbiAgICAgICAgICAgICAgICAucG9zaXRpb24oKVxyXG4gICAgICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8ob3JpZ2luKVxyXG4gICAgICAgICAgICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAud2l0aFB1c2goZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAud2l0aFBvc2l0aW9ucyhwb3NpdGlvbnMpXHJcblxyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxTdHJhdGVneSA9IG92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKClcclxuXHJcbiAgICAgICAgICAgIHN0cmF0ZWd5LmF0dGFjaChvdmVybGF5UmVmKVxyXG4gICAgICAgICAgICBzdHJhdGVneS5hcHBseSgpXHJcblxyXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneS5hdHRhY2gob3ZlcmxheVJlZilcclxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKClcclxuXHJcbiAgICAgICAgICAgIG92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneShzdHJhdGVneSlcclxuXHJcbiAgICAgICAgICAgIHByZXZpb3VzT3JpZ2luID0gb3JpZ2luXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==