@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
108 lines • 17.8 kB
JavaScript
import { toggleMark } from "prosemirror-commands";
export const deepEqual = (obj1, obj2) => {
for (const key in obj1) {
if (obj1[key] !== obj2[key]) {
return false;
}
}
return true;
};
export const hasCode = (state, pos) => {
const { code } = state.schema.marks;
const node = pos >= 0 && state.doc.nodeAt(pos);
if (node) {
return !!node.marks.filter(mark => mark.type === code).length;
}
return false;
};
export const isMarkTypeActive = (state, markType) => {
const { $from, from, to, empty } = state.selection;
if (empty) {
return !!markType.isInSet(state.storedMarks || $from.marks());
}
return state.doc.rangeHasMark(from, to, markType);
};
/**
* Determine if a mark (with specific attribute values) exists anywhere in the selection.
*/
export const isMarkActive = (state, mark) => {
const { from, to, empty } = state.selection;
// When the selection is empty, only the active marks apply.
if (empty) {
return !!mark.isInSet(state.tr.storedMarks || state.selection.$from.marks());
}
// For a non-collapsed selection, the marks on the nodes matter.
let found = false;
state.doc.nodesBetween(from, to, node => {
found = found || mark.isInSet(node.marks);
});
return found;
};
export const getTextFormattingState = (editorState) => {
const { em, code, strike, strong, subsup, underline } = editorState.schema.marks;
const state = {};
if (code) {
state.codeActive = isMarkActive(editorState, code.create());
state.codeDisabled = !toggleMark(code)(editorState);
}
if (em) {
state.emActive = isMarkTypeActive(editorState, em);
state.emDisabled = state.codeActive ? true : !toggleMark(em)(editorState);
}
if (strike) {
state.strikeActive = isMarkTypeActive(editorState, strike);
state.strikeDisabled = state.codeActive ? true : !toggleMark(strike)(editorState);
}
if (strong) {
state.strongActive = isMarkTypeActive(editorState, strong);
state.strongDisabled = state.codeActive ? true : !toggleMark(strong)(editorState);
}
if (subsup) {
const subMark = subsup.create({ type: "sub" });
const supMark = subsup.create({ type: "sup" });
state.subscriptActive = isMarkActive(editorState, subMark);
state.subscriptDisabled = state.codeActive
? true
: !toggleMark(subsup, { type: "sub" })(editorState);
state.superscriptActive = isMarkActive(editorState, supMark);
state.superscriptDisabled = state.codeActive
? true
: !toggleMark(subsup, { type: "sup" })(editorState);
}
if (underline) {
state.underlineActive = isMarkTypeActive(editorState, underline);
state.underlineDisabled = state.codeActive ? true : !toggleMark(underline)(editorState);
}
return state;
};
const applyCodeBlock = (from, to, tr) => {
const { schema } = tr.doc.type;
if (schema.marks.code) {
const codeMark = schema.marks.code.create();
tr.addMark(tr.mapping.map(from), tr.mapping.map(to), codeMark).setStoredMarks([codeMark]);
}
};
const ɵ0 = applyCodeBlock;
export function transformToCodeAction(from, to, tr) {
// transformSmartCharsMentionsAndEmojis(from, to, tr);
applyCodeBlock(from, to, tr);
return tr;
}
export const createInlineCodeFromTextInput = (from, to, text) => {
return (state, dispatch) => {
if (state.selection.empty) {
const { nodeBefore: before } = state.doc.resolve(from);
const { nodeAfter: after } = state.doc.resolve(to);
const hasTickBefore = before && before.text && before.text.endsWith("`");
const hasTickAfter = after && after.text && after.text.startsWith("`");
const tr = state.tr.replaceRangeWith(from - 1, to + 1, state.schema.text(text));
if (dispatch) {
dispatch(transformToCodeAction(tr.mapping.map(from - 1), tr.mapping.map(to + 1), tr));
}
return true;
}
return false;
};
};
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aem9kaWFjLXVpL2VkaXRvci8iLCJzb3VyY2VzIjpbInBsdWdpbnMvdGV4dC1mb3JtYXR0aW5nL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUdqRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDcEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDcEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0tBQ0o7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEdBQVcsRUFBVyxFQUFFO0lBQ2hFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNwQyxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLElBQUksSUFBSSxFQUFFO1FBQ04sT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztLQUNqRTtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUdGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBa0IsRUFBRSxRQUFrQixFQUFXLEVBQUU7SUFDaEYsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxF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Q0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDeEUsTUFBTSxZQUFZLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDdEUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUUvRSxJQUFJLFFBQVEsRUFBRTtnQkFDVixRQUFRLENBQ0oscUJBQXFCLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDOUUsQ0FBQTthQUNKO1lBQ0QsT0FBTyxJQUFJLENBQUE7U0FDZDtRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2hCLENBQUMsQ0FBQTtBQUNMLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBEZXRlcm1pbmUgaWYgYSBtYXJrIG9mIGEgc3BlY2lmaWMgdHlwZSBleGlzdHMgYW55d2hlcmUgaW4gdGhlIHNlbGVjdGlvbi5cclxuICovXHJcbmltcG9ydCB7IE1hcmssIE1hcmtUeXBlIH0gZnJvbSBcInByb3NlbWlycm9yLW1vZGVsXCJcclxuaW1wb3J0IHsgRWRpdG9yU3RhdGUsIFRyYW5zYWN0aW9uIH0gZnJvbSBcInByb3NlbWlycm9yLXN0YXRlXCJcclxuaW1wb3J0IHsgVGV4dEZvcm1hdHRpbmdTdGF0ZSB9IGZyb20gXCIuL2ludGVyZmFjZXNcIlxyXG5pbXBvcnQgeyB0b2dnbGVNYXJrIH0gZnJvbSBcInByb3NlbWlycm9yLWNvbW1hbmRzXCJcclxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuLi8uLi9saWIvaW50ZXJmYWNlcy9jb21tYW5kXCJcclxuXHJcbmV4cG9ydCBjb25zdCBkZWVwRXF1YWwgPSAob2JqMSwgb2JqMikgPT4ge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqMSkge1xyXG4gICAgICAgIGlmIChvYmoxW2tleV0gIT09IG9iajJba2V5XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaGFzQ29kZSA9IChzdGF0ZTogRWRpdG9yU3RhdGUsIHBvczogbnVtYmVyKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCB7IGNvZGUgfSA9IHN0YXRlLnNjaGVtYS5tYXJrcztcclxuICAgIGNvbnN0IG5vZGUgPSBwb3MgPj0gMCAmJiBzdGF0ZS5kb2Mubm9kZUF0KHBvcyk7XHJcbiAgICBpZiAobm9kZSkge1xyXG4gICAgICAgIHJldHVybiAhIW5vZGUubWFya3MuZmlsdGVyKG1hcmsgPT4gbWFyay50eXBlID09PSBjb2RlKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBpc01hcmtUeXBlQWN0aXZlID0gKHN0YXRlOiBFZGl0b3JTdGF0ZSwgbWFya1R5cGU6IE1hcmtUeXBlKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCB7ICRmcm9tLCBmcm9tLCB0bywgZW1wdHkgfSA9IHN0YXRlLnNlbGVjdGlvblxyXG4gICAgaWYgKGVtcHR5KSB7XHJcbiAgICAgICAgcmV0dXJuICEhbWFya1R5cGUuaXNJblNldChzdGF0ZS5zdG9yZWRNYXJrcyB8fCAkZnJvbS5tYXJrcygpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0YXRlLmRvYy5yYW5nZUhhc01hcmsoZnJvbSwgdG8sIG1hcmtUeXBlKVxyXG59XHJcblxyXG4vKipcclxuICogRGV0ZXJtaW5lIGlmIGEgbWFyayAod2l0aCBzcGVjaWZpYyBhdHRyaWJ1dGUgdmFsdWVzKSBleGlzdHMgYW55d2hlcmUgaW4gdGhlIHNlbGVjdGlvbi5cclxuICovXHJcbmV4cG9ydCBjb25zdCBpc01hcmtBY3RpdmUgPSAoc3RhdGU6IEVkaXRvclN0YXRlLCBtYXJrOiBNYXJrKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCB7IGZyb20sIHRvLCBlbXB0eSB9ID0gc3RhdGUuc2VsZWN0aW9uXHJcbiAgICAvLyBXaGVuIHRoZSBzZWxlY3Rpb24gaXMgZW1wdHksIG9ubHkgdGhlIGFjdGl2ZSBtYXJrcyBhcHBseS5cclxuICAgIGlmIChlbXB0eSkge1xyXG4gICAgICAgIHJldHVybiAhIW1hcmsuaXNJblNldChzdGF0ZS50ci5zdG9yZWRNYXJrcyB8fCBzdGF0ZS5zZWxlY3Rpb24uJGZyb20ubWFya3MoKSlcclxuICAgIH1cclxuICAgIC8vIEZvciBhIG5vbi1jb2xsYXBzZWQgc2VsZWN0aW9uLCB0aGUgbWFya3Mgb24gdGhlIG5vZGVzIG1hdHRlci5cclxuICAgIGxldCBmb3VuZCA9IGZhbHNlXHJcbiAgICBzdGF0ZS5kb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCBub2RlID0+IHtcclxuICAgICAgICBmb3VuZCA9IGZvdW5kIHx8IG1hcmsuaXNJblNldChub2RlLm1hcmtzKVxyXG4gICAgfSlcclxuICAgIHJldHVybiBmb3VuZFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0VGV4dEZvcm1hdHRpbmdTdGF0ZSA9IChlZGl0b3JTdGF0ZTogRWRpdG9yU3RhdGUpOiBUZXh0Rm9ybWF0dGluZ1N0YXRlID0+IHtcclxuICAgIGNvbnN0IHsgZW0sIGNvZGUsIHN0cmlrZSwgc3Ryb25nLCBzdWJzdXAsIHVuZGVybGluZSB9ID0gZWRpdG9yU3RhdGUuc2NoZW1hLm1hcmtzXHJcbiAgICBjb25zdCBzdGF0ZTogVGV4dEZvcm1hdHRpbmdTdGF0ZSA9IHt9XHJcblxyXG4gICAgaWYgKGNvZGUpIHtcclxuICAgICAgICBzdGF0ZS5jb2RlQWN0aXZlID0gaXNNYXJrQWN0aXZlKGVkaXRvclN0YXRlLCBjb2RlLmNyZWF0ZSgpKVxyXG4gICAgICAgIHN0YXRlLmNvZGVEaXNhYmxlZCA9ICF0b2dnbGVNYXJrKGNvZGUpKGVkaXRvclN0YXRlKVxyXG4gICAgfVxyXG4gICAgaWYgKGVtKSB7XHJcbiAgICAgICAgc3RhdGUuZW1BY3RpdmUgPSBpc01hcmtUeXBlQWN0aXZlKGVkaXRvclN0YXRlLCBlbSlcclxuICAgICAgICBzdGF0ZS5lbURpc2FibGVkID0gc3RhdGUuY29kZUFjdGl2ZSA/IHRydWUgOiAhdG9nZ2xlTWFyayhlbSkoZWRpdG9yU3RhdGUpXHJcbiAgICB9XHJcbiAgICBpZiAoc3RyaWtlKSB7XHJcbiAgICAgICAgc3RhdGUuc3RyaWtlQWN0aXZlID0gaXNNYXJrVHlwZUFjdGl2ZShlZGl0b3JTdGF0ZSwgc3RyaWtlKVxyXG4gICAgICAgIHN0YXRlLnN0cmlrZURpc2FibGVkID0gc3RhdGUuY29kZUFjdGl2ZSA/IHRydWUgOiAhdG9nZ2xlTWFyayhzdHJpa2UpKGVkaXRvclN0YXRlKVxyXG4gICAgfVxyXG4gICAgaWYgKHN0cm9uZykge1xyXG4gICAgICAgIHN0YXRlLnN0cm9uZ0FjdGl2ZSA9IGlzTWFya1R5cGVBY3RpdmUoZWRpdG9yU3RhdGUsIHN0cm9uZylcclxuICAgICAgICBzdGF0ZS5zdHJvbmdEaXNhYmxlZCA9IHN0YXRlLmNvZGVBY3RpdmUgPyB0cnVlIDogIXRvZ2dsZU1hcmsoc3Ryb25nKShlZGl0b3JTdGF0ZSlcclxuICAgIH1cclxuICAgIGlmIChzdWJzdXApIHtcclxuICAgICAgICBjb25zdCBzdWJNYXJrID0gc3Vic3VwLmNyZWF0ZSh7IHR5cGU6IFwic3ViXCIgfSlcclxuICAgICAgICBjb25zdCBzdXBNYXJrID0gc3Vic3VwLmNyZWF0ZSh7IHR5cGU6IFwic3VwXCIgfSlcclxuICAgICAgICBzdGF0ZS5zdWJzY3JpcHRBY3RpdmUgPSBpc01hcmtBY3RpdmUoZWRpdG9yU3RhdGUsIHN1Yk1hcmspXHJcbiAgICAgICAgc3RhdGUuc3Vic2NyaXB0RGlzYWJsZWQgPSBzdGF0ZS5jb2RlQWN0aXZlXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6ICF0b2dnbGVNYXJrKHN1YnN1cCwgeyB0eXBlOiBcInN1YlwiIH0pKGVkaXRvclN0YXRlKVxyXG4gICAgICAgIHN0YXRlLnN1cGVyc2NyaXB0QWN0aXZlID0gaXNNYXJrQWN0aXZlKGVkaXRvclN0YXRlLCBzdXBNYXJrKVxyXG4gICAgICAgIHN0YXRlLnN1cGVyc2NyaXB0RGlzYWJsZWQgPSBzdGF0ZS5jb2RlQWN0aXZlXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6ICF0b2dnbGVNYXJrKHN1YnN1cCwgeyB0eXBlOiBcInN1cFwiIH0pKGVkaXRvclN0YXRlKVxyXG4gICAgfVxyXG4gICAgaWYgKHVuZGVybGluZSkge1xyXG4gICAgICAgIHN0YXRlLnVuZGVybGluZUFjdGl2ZSA9IGlzTWFya1R5cGVBY3RpdmUoZWRpdG9yU3RhdGUsIHVuZGVybGluZSlcclxuICAgICAgICBzdGF0ZS51bmRlcmxpbmVEaXNhYmxlZCA9IHN0YXRlLmNvZGVBY3RpdmUgPyB0cnVlIDogIXRvZ2dsZU1hcmsodW5kZXJsaW5lKShlZGl0b3JTdGF0ZSlcclxuICAgIH1cclxuICAgIHJldHVybiBzdGF0ZVxyXG59XHJcblxyXG5jb25zdCBhcHBseUNvZGVCbG9jayA9IChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIHRyOiBUcmFuc2FjdGlvbik6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgeyBzY2hlbWEgfSA9IHRyLmRvYy50eXBlXHJcblxyXG4gICAgaWYgKHNjaGVtYS5tYXJrcy5jb2RlKSB7XHJcbiAgICAgICAgY29uc3QgY29kZU1hcmsgPSBzY2hlbWEubWFya3MuY29kZS5jcmVhdGUoKVxyXG4gICAgICAgIHRyLmFkZE1hcmsodHIubWFwcGluZy5tYXAoZnJvbSksIHRyLm1hcHBpbmcubWFwKHRvKSwgY29kZU1hcmspLnNldFN0b3JlZE1hcmtzKFtjb2RlTWFya10pXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1Ub0NvZGVBY3Rpb24oZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCB0cjogVHJhbnNhY3Rpb24pOiBUcmFuc2FjdGlvbiB7XHJcbiAgICAvLyB0cmFuc2Zvcm1TbWFydENoYXJzTWVudGlvbnNBbmRFbW9qaXMoZnJvbSwgdG8sIHRyKTtcclxuXHJcbiAgICBhcHBseUNvZGVCbG9jayhmcm9tLCB0bywgdHIpXHJcblxyXG4gICAgcmV0dXJuIHRyXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVJbmxpbmVDb2RlRnJvbVRleHRJbnB1dCA9IChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIHRleHQ6IHN0cmluZyk6IENvbW1hbmQgPT4ge1xyXG4gICAgcmV0dXJuIChzdGF0ZSwgZGlzcGF0Y2gpID0+IHtcclxuICAgICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uLmVtcHR5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgbm9kZUJlZm9yZTogYmVmb3JlIH0gPSBzdGF0ZS5kb2MucmVzb2x2ZShmcm9tKVxyXG4gICAgICAgICAgICBjb25zdCB7IG5vZGVBZnRlcjogYWZ0ZXIgfSA9IHN0YXRlLmRvYy5yZXNvbHZlKHRvKVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaGFzVGlja0JlZm9yZSA9IGJlZm9yZSAmJiBiZWZvcmUudGV4dCAmJiBiZWZvcmUudGV4dC5lbmRzV2l0aChcImBcIilcclxuICAgICAgICAgICAgY29uc3QgaGFzVGlja0FmdGVyID0gYWZ0ZXIgJiYgYWZ0ZXIudGV4dCAmJiBhZnRlci50ZXh0LnN0YXJ0c1dpdGgoXCJgXCIpXHJcbiAgICAgICAgICAgIGNvbnN0IHRyID0gc3RhdGUudHIucmVwbGFjZVJhbmdlV2l0aChmcm9tIC0gMSwgdG8gKyAxLCBzdGF0ZS5zY2hlbWEudGV4dCh0ZXh0KSlcclxuXHJcbiAgICAgICAgICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9Db2RlQWN0aW9uKHRyLm1hcHBpbmcubWFwKGZyb20gLSAxKSwgdHIubWFwcGluZy5tYXAodG8gKyAxKSwgdHIpLFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG59XHJcbiJdfQ==