@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
56 lines • 8.47 kB
JavaScript
import { Plugin } from "prosemirror-state";
import { DecorationSet, Decoration } from "prosemirror-view";
import { InsertStatus, pluginKey } from "./hyperlink";
const createTextCursor = (pos) => {
const node = document.createElement("div");
node.className = "ProseMirror-fake-text-cursor";
return Decoration.widget(pos, node);
};
const ɵ0 = createTextCursor;
const createTextSelection = (from, to) => Decoration.inline(from, to, { class: "ProseMirror-fake-text-selection" });
const ɵ1 = createTextSelection;
const getInsertLinkToolbarState = (editorState) => {
const state = pluginKey.getState(editorState);
if (state && state.activeLinkMark) {
if (state.activeLinkMark.type === InsertStatus.INSERT_LINK_TOOLBAR) {
return state.activeLinkMark;
}
}
return undefined;
};
const ɵ2 = getInsertLinkToolbarState;
export const fakeCursorToolbarPlugin = new Plugin({
state: {
init() {
return DecorationSet.empty;
},
apply(tr, pluginState, oldState, newState) {
const oldInsertToolbarState = getInsertLinkToolbarState(oldState);
const insertToolbarState = getInsertLinkToolbarState(newState);
// Map DecorationSet if it still refers to the same position in the document
if (oldInsertToolbarState && insertToolbarState) {
const { from, to } = insertToolbarState;
const oldFrom = tr.mapping.map(oldInsertToolbarState.from);
const oldTo = tr.mapping.map(oldInsertToolbarState.to);
if (oldFrom === from && oldTo === to) {
return pluginState.map(tr.mapping, tr.doc);
}
}
// Update DecorationSet if new insert toolbar, or if we have moved to a different position in the doc
if (insertToolbarState) {
const { from, to } = insertToolbarState;
return DecorationSet.create(tr.doc, [
from === to ? createTextCursor(from) : createTextSelection(from, to),
]);
}
return DecorationSet.empty;
},
},
props: {
decorations(state) {
return fakeCursorToolbarPlugin.getState(state);
},
},
});
export { ɵ0, ɵ1, ɵ2 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZS1jdXJzb3ItZm9yLXRvb2xiYXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aem9kaWFjLXVpL2VkaXRvci8iLCJzb3VyY2VzIjpbInBsdWdpbnMvbGluay9wbS9mYWtlLWN1cnNvci1mb3ItdG9vbGJhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFlLE1BQU0sbUJBQW1CLENBQUE7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM1RCxPQUFPLEVBQWtCLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFckUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQVcsRUFBYyxFQUFFO0lBQ2pELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyw4QkFBOEIsQ0FBQTtJQUMvQyxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQ3ZDLENBQUMsQ0FBQTs7QUFFRCxNQUFNLG1CQUFtQixHQUFHLENBQUMsSUFBWSxFQUFFLEVBQVUsRUFBYyxFQUFFLENBQ2pFLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxpQ0FBaUMsRUFBRSxDQUFDLENBQUE7O0FBRTdFLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxXQUF3QixFQUFFLEVBQUU7SUFDM0QsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQW1CLENBQUE7SUFDL0QsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtRQUMvQixJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxtQkFBbUIsRUFBRTtZQUNoRSxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUE7U0FDOUI7S0FDSjtJQUNELE9BQU8sU0FBUyxDQUFBO0FBQ3BCLENBQUMsQ0FBQTs7QUFFRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBVyxJQUFJLE1BQU0sQ0FBQztJQUN0RCxLQUFLLEVBQUU7UUFDSCxJQUFJO1lBQ0EsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFBO1FBQzlCLENBQUM7UUFDRCxLQUFLLENBQUMsRUFBRSxFQUFFLFdBQTBCLEVBQUUsUUFBUSxFQUFFLFFBQVE7WUFDcEQsTUFBTSxxQkFBcUIsR0FBRyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNqRSxNQUFNLGtCQUFrQixHQUFHLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQzlELDRFQUE0RTtZQUM1RSxJQUFJLHFCQUFxQixJQUFJLGtCQUFrQixFQUFFO2dCQUM3QyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLGtCQUFrQixDQUFBO2dCQUN2QyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUE7Z0JBQ3RELElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO29CQUNsQyxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7aUJBQzdDO2FBQ0o7WUFDRCxxR0FBcUc7WUFDckcsSUFBSSxrQkFBa0IsRUFBRTtnQkFDcEIsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQTtnQkFDdkMsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2hDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO2lCQUN2RSxDQUFDLENBQUE7YUFDTDtZQUNELE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQTtRQUM5QixDQUFDO0tBQ0o7SUFDRCxLQUFLLEVBQUU7UUFDSCxXQUFXLENBQUMsS0FBSztZQUNiLE9BQU8sdUJBQXVCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xELENBQUM7S0FDSjtDQUNKLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsdWdpbiwgRWRpdG9yU3RhdGUgfSBmcm9tIFwicHJvc2VtaXJyb3Itc3RhdGVcIlxyXG5pbXBvcnQgeyBEZWNvcmF0aW9uU2V0LCBEZWNvcmF0aW9uIH0gZnJvbSBcInByb3NlbWlycm9yLXZpZXdcIlxyXG5pbXBvcnQgeyBIeXBlcmxpbmtTdGF0ZSwgSW5zZXJ0U3RhdHVzLCBwbHVnaW5LZXkgfSBmcm9tIFwiLi9oeXBlcmxpbmtcIlxyXG5cclxuY29uc3QgY3JlYXRlVGV4dEN1cnNvciA9IChwb3M6IG51bWJlcik6IERlY29yYXRpb24gPT4ge1xyXG4gICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcclxuICAgIG5vZGUuY2xhc3NOYW1lID0gXCJQcm9zZU1pcnJvci1mYWtlLXRleHQtY3Vyc29yXCJcclxuICAgIHJldHVybiBEZWNvcmF0aW9uLndpZGdldChwb3MsIG5vZGUpXHJcbn1cclxuXHJcbmNvbnN0IGNyZWF0ZVRleHRTZWxlY3Rpb24gPSAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogRGVjb3JhdGlvbiA9PlxyXG4gICAgRGVjb3JhdGlvbi5pbmxpbmUoZnJvbSwgdG8sIHsgY2xhc3M6IFwiUHJvc2VNaXJyb3ItZmFrZS10ZXh0LXNlbGVjdGlvblwiIH0pXHJcblxyXG5jb25zdCBnZXRJbnNlcnRMaW5rVG9vbGJhclN0YXRlID0gKGVkaXRvclN0YXRlOiBFZGl0b3JTdGF0ZSkgPT4ge1xyXG4gICAgY29uc3Qgc3RhdGUgPSBwbHVnaW5LZXkuZ2V0U3RhdGUoZWRpdG9yU3RhdGUpIGFzIEh5cGVybGlua1N0YXRlXHJcbiAgICBpZiAoc3RhdGUgJiYgc3RhdGUuYWN0aXZlTGlua01hcmspIHtcclxuICAgICAgICBpZiAoc3RhdGUuYWN0aXZlTGlua01hcmsudHlwZSA9PT0gSW5zZXJ0U3RhdHVzLklOU0VSVF9MSU5LX1RPT0xCQVIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmFjdGl2ZUxpbmtNYXJrXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZmFrZUN1cnNvclRvb2xiYXJQbHVnaW46IFBsdWdpbiA9IG5ldyBQbHVnaW4oe1xyXG4gICAgc3RhdGU6IHtcclxuICAgICAgICBpbml0KCkge1xyXG4gICAgICAgICAgICByZXR1cm4gRGVjb3JhdGlvblNldC5lbXB0eVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYXBwbHkodHIsIHBsdWdpblN0YXRlOiBEZWNvcmF0aW9uU2V0LCBvbGRTdGF0ZSwgbmV3U3RhdGUpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkSW5zZXJ0VG9vbGJhclN0YXRlID0gZ2V0SW5zZXJ0TGlua1Rvb2xiYXJTdGF0ZShvbGRTdGF0ZSlcclxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0VG9vbGJhclN0YXRlID0gZ2V0SW5zZXJ0TGlua1Rvb2xiYXJTdGF0ZShuZXdTdGF0ZSlcclxuICAgICAgICAgICAgLy8gTWFwIERlY29yYXRpb25TZXQgaWYgaXQgc3RpbGwgcmVmZXJzIHRvIHRoZSBzYW1lIHBvc2l0aW9uIGluIHRoZSBkb2N1bWVudFxyXG4gICAgICAgICAgICBpZiAob2xkSW5zZXJ0VG9vbGJhclN0YXRlICYmIGluc2VydFRvb2xiYXJTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBmcm9tLCB0byB9ID0gaW5zZXJ0VG9vbGJhclN0YXRlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRGcm9tID0gdHIubWFwcGluZy5tYXAob2xkSW5zZXJ0VG9vbGJhclN0YXRlLmZyb20pXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRUbyA9IHRyLm1hcHBpbmcubWFwKG9sZEluc2VydFRvb2xiYXJTdGF0ZS50bylcclxuICAgICAgICAgICAgICAgIGlmIChvbGRGcm9tID09PSBmcm9tICYmIG9sZFRvID09PSB0bykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwbHVnaW5TdGF0ZS5tYXAodHIubWFwcGluZywgdHIuZG9jKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBEZWNvcmF0aW9uU2V0IGlmIG5ldyBpbnNlcnQgdG9vbGJhciwgb3IgaWYgd2UgaGF2ZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBwb3NpdGlvbiBpbiB0aGUgZG9jXHJcbiAgICAgICAgICAgIGlmIChpbnNlcnRUb29sYmFyU3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9IGluc2VydFRvb2xiYXJTdGF0ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIERlY29yYXRpb25TZXQuY3JlYXRlKHRyLmRvYywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gPT09IHRvID8gY3JlYXRlVGV4dEN1cnNvcihmcm9tKSA6IGNyZWF0ZVRleHRTZWxlY3Rpb24oZnJvbSwgdG8pLFxyXG4gICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gRGVjb3JhdGlvblNldC5lbXB0eVxyXG4gICAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBkZWNvcmF0aW9ucyhzdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFrZUN1cnNvclRvb2xiYXJQbHVnaW4uZ2V0U3RhdGUoc3RhdGUpXHJcbiAgICAgICAgfSxcclxuICAgIH0sXHJcbn0pXHJcbiJdfQ==