UNPKG

ngx-editor

Version:

Rich Text Editor for angular using ProseMirror

60 lines 7.61 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVhZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3Ivc3JjL2xpYi9jb21tYW5kcy9IZWFkaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBVyxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUl2RCxNQUFNLE9BQU87SUFHWCxZQUFZLEtBQW9CO1FBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxDQUFDLEtBQWtCLEVBQUUsUUFBb0MsRUFBVyxFQUFFO1lBQzNFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFFekIsTUFBTSxJQUFJLEdBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxDQUFDLEtBQWtCLEVBQUUsUUFBb0MsRUFBVyxFQUFFO1lBQzNFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztZQUV6QyxNQUFNLElBQUksR0FBYSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUM1QyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWpDLE1BQU0sS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBRWhDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ3JFO1lBRUQsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWtCO1FBQ3pCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekIsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsRCxNQUFNLElBQUksR0FBYSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sY0FBYyxHQUFHO1lBQ3JCLElBQUk7WUFDSixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVO1NBQ3hCLENBQUM7UUFFRix5QkFBeUI7UUFDekIsOENBQThDO1FBQzlDLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdDLE9BQU8sY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBcUIsRUFBRSxFQUFFO1lBQ3RELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFFRCxlQUFlLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGVUeXBlLCBOb2RlIGFzIFByb3NlTWlycm9yTm9kZSB9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcbmltcG9ydCB7IEVkaXRvclN0YXRlLCBUcmFuc2FjdGlvbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7IENvbW1hbmQsIHNldEJsb2NrVHlwZSB9IGZyb20gJ3Byb3NlbWlycm9yLWNvbW1hbmRzJztcblxuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uTm9kZXMgfSBmcm9tICduZ3gtZWRpdG9yL2hlbHBlcnMnO1xuXG5leHBvcnQgdHlwZSBIZWFkaW5nTGV2ZWxzID0gMSB8IDIgfCAzIHwgNCB8IDUgfCA2O1xuXG5jbGFzcyBIZWFkaW5nIHtcbiAgbGV2ZWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihsZXZlbDogSGVhZGluZ0xldmVscykge1xuICAgIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgfVxuXG4gIGFwcGx5KCk6IENvbW1hbmQge1xuICAgIHJldHVybiAoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaD86ICh0cjogVHJhbnNhY3Rpb24pID0+IHZvaWQpOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBzdGF0ZTtcblxuICAgICAgY29uc3QgdHlwZTogTm9kZVR5cGUgPSBzY2hlbWEubm9kZXMuaGVhZGluZztcbiAgICAgIGlmICghdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXRCbG9ja1R5cGUodHlwZSkoc3RhdGUsIGRpc3BhdGNoKTtcbiAgICB9O1xuICB9XG5cbiAgdG9nZ2xlKCk6IENvbW1hbmQge1xuICAgIHJldHVybiAoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaD86ICh0cjogVHJhbnNhY3Rpb24pID0+IHZvaWQpOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hLCBzZWxlY3Rpb24sIGRvYyB9ID0gc3RhdGU7XG5cbiAgICAgIGNvbnN0IHR5cGU6IE5vZGVUeXBlID0gc2NoZW1hLm5vZGVzLmhlYWRpbmc7XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub2RlUG9zID0gc2VsZWN0aW9uLiRmcm9tLmJlZm9yZSgxKTtcbiAgICAgIGNvbnN0IG5vZGUgPSBkb2Mubm9kZUF0KG5vZGVQb3MpO1xuXG4gICAgICBjb25zdCBhdHRycyA9IG5vZGU/LmF0dHJzID8/IHt9O1xuXG4gICAgICBpZiAodGhpcy5pc0FjdGl2ZShzdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHNldEJsb2NrVHlwZShzY2hlbWEubm9kZXMucGFyYWdyYXBoLCBhdHRycykoc3RhdGUsIGRpc3BhdGNoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNldEJsb2NrVHlwZSh0eXBlLCB7IC4uLmF0dHJzLCBsZXZlbDogdGhpcy5sZXZlbCB9KShzdGF0ZSwgZGlzcGF0Y2gpO1xuICAgIH07XG4gIH1cblxuICBpc0FjdGl2ZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IHNjaGVtYSB9ID0gc3RhdGU7XG4gICAgY29uc3Qgbm9kZXNJblNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbk5vZGVzKHN0YXRlKTtcblxuICAgIGNvbnN0IHR5cGU6IE5vZGVUeXBlID0gc2NoZW1hLm5vZGVzLmhlYWRpbmc7XG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VwcG9ydGVkTm9kZXMgPSBbXG4gICAgICB0eXBlLFxuICAgICAgc2NoZW1hLm5vZGVzLnRleHQsXG4gICAgICBzY2hlbWEubm9kZXMuYmxvY2txdW90ZSxcbiAgICBdO1xuXG4gICAgLy8gaGVhZGluZyBpcyBhIHRleHQgbm9kZVxuICAgIC8vIGRvbid0IG1hcmsgYXMgYWN0aXZlIHdoZW4gaXQgaGFzIG1vcmUgbm9kZXNcbiAgICBjb25zdCBub2RlcyA9IG5vZGVzSW5TZWxlY3Rpb24uZmlsdGVyKChub2RlKSA9PiB7XG4gICAgICByZXR1cm4gc3VwcG9ydGVkTm9kZXMuaW5jbHVkZXMobm9kZS50eXBlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFjaXR2ZU5vZGUgPSBub2Rlcy5maW5kKChub2RlOiBQcm9zZU1pcnJvck5vZGUpID0+IHtcbiAgICAgIHJldHVybiBub2RlLmF0dHJzWydsZXZlbCddID09PSB0aGlzLmxldmVsO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIEJvb2xlYW4oYWNpdHZlTm9kZSk7XG4gIH1cblxuICBjYW5FeGVjdXRlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvZ2dsZSgpKHN0YXRlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZWFkaW5nO1xuIl19