UNPKG

ngx-editor

Version:

Rich Text Editor for angular using ProseMirror

60 lines 7.6 kB
import { setBlockType } from 'prosemirror-commands'; import { getSelectionNodes } from 'ngx-editor/helpers'; class Heading { constructor(level) { this.level = level; } apply() { return (state, dispatch) => { const { schema } = state; const type = schema.nodes.heading; if (!type) { return false; } return setBlockType(type)(state, dispatch); }; } toggle() { return (state, dispatch) => { const { schema, selection, doc } = state; const type = schema.nodes.heading; if (!type) { return false; } const nodePos = selection.$from.before(1); const node = doc.nodeAt(nodePos); const attrs = node?.attrs ?? {}; if (this.isActive(state)) { return setBlockType(schema.nodes.paragraph, attrs)(state, dispatch); } return setBlockType(type, { ...attrs, level: this.level })(state, dispatch); }; } isActive(state) { const { schema } = state; const nodesInSelection = getSelectionNodes(state); const type = schema.nodes.heading; if (!type) { return false; } const supportedNodes = [ type, schema.nodes.text, schema.nodes.blockquote ]; // heading is a text node // don't mark as active when it has more nodes const nodes = nodesInSelection.filter(node => { return supportedNodes.includes(node.type); }); const acitveNode = nodes.find((node) => { return node.attrs['level'] === this.level; }); return Boolean(acitveNode); } canExecute(state) { return this.toggle()(state); } } export default Heading; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVhZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3Ivc3JjL2xpYi9jb21tYW5kcy9IZWFkaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBVyxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUl2RCxNQUFNLE9BQU87SUFHWCxZQUFZLEtBQW9CO1FBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxDQUFDLEtBQWtCLEVBQUUsUUFBb0MsRUFBVyxFQUFFO1lBRTNFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFFekIsTUFBTSxJQUFJLEdBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxDQUFDLEtBQWtCLEVBQUUsUUFBb0MsRUFBVyxFQUFFO1lBRTNFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztZQUV6QyxNQUFNLElBQUksR0FBYSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUM1QyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWpDLE1BQU0sS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBRWhDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ3JFO1lBRUQsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWtCO1FBQ3pCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekIsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsRCxNQUFNLElBQUksR0FBYSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sY0FBYyxHQUFHO1lBQ3JCLElBQUk7WUFDSixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVO1NBQ3hCLENBQUM7UUFFRix5QkFBeUI7UUFDekIsOENBQThDO1FBQzlDLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQyxPQUFPLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQXFCLEVBQUUsRUFBRTtZQUN0RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsZUFBZSxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlVHlwZSwgTm9kZSBhcyBQcm9zZU1pcnJvck5vZGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQgeyBFZGl0b3JTdGF0ZSwgVHJhbnNhY3Rpb24gfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQgeyBDb21tYW5kLCBzZXRCbG9ja1R5cGUgfSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XG5cbmltcG9ydCB7IGdldFNlbGVjdGlvbk5vZGVzIH0gZnJvbSAnbmd4LWVkaXRvci9oZWxwZXJzJztcblxuZXhwb3J0IHR5cGUgSGVhZGluZ0xldmVscyA9IDEgfCAyIHwgMyB8IDQgfCA1IHwgNjtcblxuY2xhc3MgSGVhZGluZyB7XG4gIGxldmVsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IobGV2ZWw6IEhlYWRpbmdMZXZlbHMpIHtcbiAgICB0aGlzLmxldmVsID0gbGV2ZWw7XG4gIH1cblxuICBhcHBseSgpOiBDb21tYW5kIHtcbiAgICByZXR1cm4gKHN0YXRlOiBFZGl0b3JTdGF0ZSwgZGlzcGF0Y2g/OiAodHI6IFRyYW5zYWN0aW9uKSA9PiB2b2lkKTogYm9vbGVhbiA9PiB7XG5cbiAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBzdGF0ZTtcblxuICAgICAgY29uc3QgdHlwZTogTm9kZVR5cGUgPSBzY2hlbWEubm9kZXMuaGVhZGluZztcbiAgICAgIGlmICghdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXRCbG9ja1R5cGUodHlwZSkoc3RhdGUsIGRpc3BhdGNoKTtcbiAgICB9O1xuICB9XG5cbiAgdG9nZ2xlKCk6IENvbW1hbmQge1xuICAgIHJldHVybiAoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaD86ICh0cjogVHJhbnNhY3Rpb24pID0+IHZvaWQpOiBib29sZWFuID0+IHtcblxuICAgICAgY29uc3QgeyBzY2hlbWEsIHNlbGVjdGlvbiwgZG9jIH0gPSBzdGF0ZTtcblxuICAgICAgY29uc3QgdHlwZTogTm9kZVR5cGUgPSBzY2hlbWEubm9kZXMuaGVhZGluZztcbiAgICAgIGlmICghdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vZGVQb3MgPSBzZWxlY3Rpb24uJGZyb20uYmVmb3JlKDEpO1xuICAgICAgY29uc3Qgbm9kZSA9IGRvYy5ub2RlQXQobm9kZVBvcyk7XG5cbiAgICAgIGNvbnN0IGF0dHJzID0gbm9kZT8uYXR0cnMgPz8ge307XG5cbiAgICAgIGlmICh0aGlzLmlzQWN0aXZlKHN0YXRlKSkge1xuICAgICAgICByZXR1cm4gc2V0QmxvY2tUeXBlKHNjaGVtYS5ub2Rlcy5wYXJhZ3JhcGgsIGF0dHJzKShzdGF0ZSwgZGlzcGF0Y2gpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2V0QmxvY2tUeXBlKHR5cGUsIHsgLi4uYXR0cnMsIGxldmVsOiB0aGlzLmxldmVsIH0pKHN0YXRlLCBkaXNwYXRjaCk7XG4gICAgfTtcbiAgfVxuXG4gIGlzQWN0aXZlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBzdGF0ZTtcbiAgICBjb25zdCBub2Rlc0luU2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uTm9kZXMoc3RhdGUpO1xuXG4gICAgY29uc3QgdHlwZTogTm9kZVR5cGUgPSBzY2hlbWEubm9kZXMuaGVhZGluZztcbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBzdXBwb3J0ZWROb2RlcyA9IFtcbiAgICAgIHR5cGUsXG4gICAgICBzY2hlbWEubm9kZXMudGV4dCxcbiAgICAgIHNjaGVtYS5ub2Rlcy5ibG9ja3F1b3RlXG4gICAgXTtcblxuICAgIC8vIGhlYWRpbmcgaXMgYSB0ZXh0IG5vZGVcbiAgICAvLyBkb24ndCBtYXJrIGFzIGFjdGl2ZSB3aGVuIGl0IGhhcyBtb3JlIG5vZGVzXG4gICAgY29uc3Qgbm9kZXMgPSBub2Rlc0luU2VsZWN0aW9uLmZpbHRlcihub2RlID0+IHtcbiAgICAgIHJldHVybiBzdXBwb3J0ZWROb2Rlcy5pbmNsdWRlcyhub2RlLnR5cGUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYWNpdHZlTm9kZSA9IG5vZGVzLmZpbmQoKG5vZGU6IFByb3NlTWlycm9yTm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUuYXR0cnNbJ2xldmVsJ10gPT09IHRoaXMubGV2ZWw7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQm9vbGVhbihhY2l0dmVOb2RlKTtcbiAgfVxuXG4gIGNhbkV4ZWN1dGUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlKCkoc3RhdGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRpbmc7XG4iXX0=