UNPKG

ngx-editor

Version:

The Rich Text Editor for Angular, Built on ProseMirror

40 lines 5.24 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEFsaWduLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWVkaXRvci9zcmMvbGliL2NvbW1hbmRzL1RleHRBbGlnbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU12RCxNQUFNLFNBQVM7SUFHYixZQUFZLEtBQVk7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLENBQUMsS0FBa0IsRUFBRSxRQUFvQyxFQUFXLEVBQUU7WUFDM0UsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztZQUM3QyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUUvQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFFdkIsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUMzRSxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUNsQixFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2lCQUN2RTtnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDZixPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFO2dCQUNqQixRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNoQjtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFrQjtRQUN6QixNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBVSxFQUFFLEVBQUU7WUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUVELGVBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFZGl0b3JTdGF0ZSwgVHJhbnNhY3Rpb24sIENvbW1hbmQgfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7IE5vZGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5cbmltcG9ydCB7IGdldFNlbGVjdGlvbk5vZGVzIH0gZnJvbSAnbmd4LWVkaXRvci9oZWxwZXJzJztcblxuaW1wb3J0IHsgVG9nZ2xlQ29tbWFuZCB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBBbGlnbiA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyB8ICdqdXN0aWZ5JztcblxuY2xhc3MgVGV4dEFsaWduIGltcGxlbWVudHMgVG9nZ2xlQ29tbWFuZCB7XG4gIGFsaWduOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoYWxpZ246IEFsaWduKSB7XG4gICAgdGhpcy5hbGlnbiA9IGFsaWduO1xuICB9XG5cbiAgdG9nZ2xlKCk6IENvbW1hbmQge1xuICAgIHJldHVybiAoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaD86ICh0cjogVHJhbnNhY3Rpb24pID0+IHZvaWQpOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgZG9jLCBzZWxlY3Rpb24sIHRyLCBzY2hlbWEgfSA9IHN0YXRlO1xuICAgICAgY29uc3QgeyBmcm9tLCB0byB9ID0gc2VsZWN0aW9uO1xuXG4gICAgICBsZXQgYXBwbGljYWJsZSA9IGZhbHNlO1xuXG4gICAgICBkb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCAobm9kZSwgcG9zKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVUeXBlID0gbm9kZS50eXBlO1xuICAgICAgICBpZiAoW3NjaGVtYS5ub2Rlc1sncGFyYWdyYXBoJ10sIHNjaGVtYS5ub2Rlc1snaGVhZGluZyddXS5pbmNsdWRlcyhub2RlVHlwZSkpIHtcbiAgICAgICAgICBhcHBsaWNhYmxlID0gdHJ1ZTtcbiAgICAgICAgICB0ci5zZXROb2RlTWFya3VwKHBvcywgbm9kZVR5cGUsIHsgLi4ubm9kZS5hdHRycywgYWxpZ246IHRoaXMuYWxpZ24gfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFhcHBsaWNhYmxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyLmRvY0NoYW5nZWQpIHtcbiAgICAgICAgZGlzcGF0Y2g/Lih0cik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH1cblxuICBpc0FjdGl2ZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlcyA9IGdldFNlbGVjdGlvbk5vZGVzKHN0YXRlKTtcblxuICAgIGNvbnN0IGFjdGl2ZSA9IG5vZGVzLmZpbmQoKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIHJldHVybiBub2RlLmF0dHJzWydhbGlnbiddID09PSB0aGlzLmFsaWduO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIEJvb2xlYW4oYWN0aXZlKTtcbiAgfVxuXG4gIGNhbkV4ZWN1dGUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlKCkoc3RhdGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRBbGlnbjtcbiJdfQ==