ngx-editor
Version:
Rich Text Editor for angular using ProseMirror
40 lines • 5.16 kB
JavaScript
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=