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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEFsaWduLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWVkaXRvci9zcmMvbGliL2NvbW1hbmRzL1RleHRBbGlnbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUl2RCxNQUFNLFNBQVM7SUFHYixZQUFZLEtBQVk7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLENBQUMsS0FBa0IsRUFBRSxRQUFvQyxFQUFXLEVBQUU7WUFDM0UsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztZQUM3QyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUUvQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFFdkIsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3JFLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ2xCLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQ3ZFO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNmLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2hCO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWtCO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsZUFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFZGl0b3JTdGF0ZSwgVHJhbnNhY3Rpb24gfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ3Byb3NlbWlycm9yLWNvbW1hbmRzJztcblxuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uTm9kZXMgfSBmcm9tICduZ3gtZWRpdG9yL2hlbHBlcnMnO1xuXG5leHBvcnQgdHlwZSBBbGlnbiA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyB8ICdqdXN0aWZ5JztcblxuY2xhc3MgVGV4dEFsaWduIHtcbiAgYWxpZ246IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihhbGlnbjogQWxpZ24pIHtcbiAgICB0aGlzLmFsaWduID0gYWxpZ247XG4gIH1cblxuICB0b2dnbGUoKTogQ29tbWFuZCB7XG4gICAgcmV0dXJuIChzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogKHRyOiBUcmFuc2FjdGlvbikgPT4gdm9pZCk6IGJvb2xlYW4gPT4ge1xuICAgICAgY29uc3QgeyBkb2MsIHNlbGVjdGlvbiwgdHIsIHNjaGVtYSB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7IGZyb20sIHRvIH0gPSBzZWxlY3Rpb247XG5cbiAgICAgIGxldCBhcHBsaWNhYmxlID0gZmFsc2U7XG5cbiAgICAgIGRvYy5ub2Rlc0JldHdlZW4oZnJvbSwgdG8sIChub2RlLCBwb3MpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLnR5cGU7XG4gICAgICAgIGlmIChbc2NoZW1hLm5vZGVzLnBhcmFncmFwaCwgc2NoZW1hLm5vZGVzLmhlYWRpbmddLmluY2x1ZGVzKG5vZGVUeXBlKSkge1xuICAgICAgICAgIGFwcGxpY2FibGUgPSB0cnVlO1xuICAgICAgICAgIHRyLnNldE5vZGVNYXJrdXAocG9zLCBub2RlVHlwZSwgeyAuLi5ub2RlLmF0dHJzLCBhbGlnbjogdGhpcy5hbGlnbiB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWFwcGxpY2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHIuZG9jQ2hhbmdlZCkge1xuICAgICAgICBkaXNwYXRjaD8uKHRyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfVxuXG4gIGlzQWN0aXZlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGVzID0gZ2V0U2VsZWN0aW9uTm9kZXMoc3RhdGUpO1xuXG4gICAgY29uc3QgYWN0aXZlID0gbm9kZXMuZmluZCgobm9kZTogTm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUuYXR0cnNbJ2FsaWduJ10gPT09IHRoaXMuYWxpZ247XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQm9vbGVhbihhY3RpdmUpO1xuICB9XG5cbiAgY2FuRXhlY3V0ZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b2dnbGUoKShzdGF0ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dEFsaWduO1xuIl19