UNPKG

ngx-editor

Version:

Rich Text Editor for angular using ProseMirror

40 lines 5.16 kB
import { getSelectionNodes } from 'ngx-editor/helpers'; class TextAlign { constructor(align) { this.align = align; } toggle() { return (state, dispatch) => { const { doc, selection, tr, schema } = state; const { from, to } = selection; let applicable = false; doc.nodesBetween(from, to, (node, pos) => { const nodeType = node.type; if ([schema.nodes.paragraph, schema.nodes.heading].includes(nodeType)) { applicable = true; tr.setNodeMarkup(pos, nodeType, { ...node.attrs, align: this.align }); } return true; }); if (!applicable) { return false; } if (tr.docChanged) { dispatch?.(tr); } return true; }; } isActive(state) { const nodes = getSelectionNodes(state); const active = nodes.find((node) => { return node.attrs['align'] === this.align; }); return Boolean(active); } canExecute(state) { return this.toggle()(state); } } export default TextAlign; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEFsaWduLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWVkaXRvci9zcmMvbGliL2NvbW1hbmRzL1RleHRBbGlnbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUl2RCxNQUFNLFNBQVM7SUFHYixZQUFZLEtBQVk7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLENBQUMsS0FBa0IsRUFBRSxRQUFvQyxFQUFXLEVBQUU7WUFFM0UsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztZQUM3QyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUUvQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFFdkIsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3JFLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ2xCLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQ3ZFO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNmLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2hCO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWtCO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsZUFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFZGl0b3JTdGF0ZSwgVHJhbnNhY3Rpb24gfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ3Byb3NlbWlycm9yLWNvbW1hbmRzJztcblxuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uTm9kZXMgfSBmcm9tICduZ3gtZWRpdG9yL2hlbHBlcnMnO1xuXG5leHBvcnQgdHlwZSBBbGlnbiA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyB8ICdqdXN0aWZ5JztcblxuY2xhc3MgVGV4dEFsaWduIHtcbiAgYWxpZ246IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihhbGlnbjogQWxpZ24pIHtcbiAgICB0aGlzLmFsaWduID0gYWxpZ247XG4gIH1cblxuICB0b2dnbGUoKTogQ29tbWFuZCB7XG4gICAgcmV0dXJuIChzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogKHRyOiBUcmFuc2FjdGlvbikgPT4gdm9pZCk6IGJvb2xlYW4gPT4ge1xuXG4gICAgICBjb25zdCB7IGRvYywgc2VsZWN0aW9uLCB0ciwgc2NoZW1hIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHNlbGVjdGlvbjtcblxuICAgICAgbGV0IGFwcGxpY2FibGUgPSBmYWxzZTtcblxuICAgICAgZG9jLm5vZGVzQmV0d2Vlbihmcm9tLCB0bywgKG5vZGUsIHBvcykgPT4ge1xuICAgICAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUudHlwZTtcbiAgICAgICAgaWYgKFtzY2hlbWEubm9kZXMucGFyYWdyYXBoLCBzY2hlbWEubm9kZXMuaGVhZGluZ10uaW5jbHVkZXMobm9kZVR5cGUpKSB7XG4gICAgICAgICAgYXBwbGljYWJsZSA9IHRydWU7XG4gICAgICAgICAgdHIuc2V0Tm9kZU1hcmt1cChwb3MsIG5vZGVUeXBlLCB7IC4uLm5vZGUuYXR0cnMsIGFsaWduOiB0aGlzLmFsaWduIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghYXBwbGljYWJsZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ci5kb2NDaGFuZ2VkKSB7XG4gICAgICAgIGRpc3BhdGNoPy4odHIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgaXNBY3RpdmUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9kZXMgPSBnZXRTZWxlY3Rpb25Ob2RlcyhzdGF0ZSk7XG5cbiAgICBjb25zdCBhY3RpdmUgPSBub2Rlcy5maW5kKChub2RlOiBOb2RlKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZS5hdHRyc1snYWxpZ24nXSA9PT0gdGhpcy5hbGlnbjtcbiAgICB9KTtcblxuICAgIHJldHVybiBCb29sZWFuKGFjdGl2ZSk7XG4gIH1cblxuICBjYW5FeGVjdXRlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvZ2dsZSgpKHN0YXRlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0QWxpZ247XG4iXX0=