UNPKG

ngx-editor

Version:

Rich Text Editor for angular using ProseMirror

64 lines 8.53 kB
import { getSelectionMarks, isMarkActive } from 'ngx-editor/helpers'; import { applyMark, removeMark } from 'ngx-editor/commands'; class TextColor { constructor(name, attrName = 'color') { this.name = name; this.attrName = attrName; } apply(attrs) { return (state, dispatch) => { const { schema, selection, doc } = state; const type = schema.marks[this.name]; if (!type) { return false; } const { from, to, empty } = selection; if (!empty && (from + 1 === to)) { const node = doc.nodeAt(from); if (node?.isAtom && !node.isText && node.isLeaf) { // An atomic node (e.g. Image) is selected. return false; } } return applyMark(type, attrs)(state, dispatch); }; } isActive(state) { const { schema } = state; const type = schema.marks[this.name]; if (!type) { return false; } return isMarkActive(state, type); } getActiveColors(state) { if (!this.isActive(state)) { return []; } const { schema } = state; const marks = getSelectionMarks(state); const colors = marks .filter((mark) => mark.type === schema.marks[this.name]) .map((mark) => { return mark.attrs[this.attrName]; }) .filter(Boolean); return colors; } remove() { return (state, dispatch) => { const { schema } = state; const type = schema.marks[this.name]; if (!type) { return false; } return removeMark(type)(state, dispatch); }; } canExecute(state) { const attrs = this.name === 'text_color' ? { color: '' } : { backgroundColor: '' }; return this.apply(attrs)(state); } } export default TextColor; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dENvbG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWVkaXRvci9zcmMvbGliL2NvbW1hbmRzL1RleHRDb2xvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWU1RCxNQUFNLFNBQVM7SUFJYixZQUFZLElBQVUsRUFBRSxXQUFxQixPQUFPO1FBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBd0M7UUFDNUMsT0FBTyxDQUFDLEtBQWtCLEVBQUUsUUFBbUIsRUFBVyxFQUFFO1lBQzFELE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztZQUV6QyxNQUFNLElBQUksR0FBYSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFFdEMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQy9CLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLElBQUksSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDL0MsMkNBQTJDO29CQUMzQyxPQUFPLEtBQUssQ0FBQztpQkFDZDthQUNGO1lBRUQsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWtCO1FBQ3pCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFrQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6QixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN6QixNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QyxNQUFNLE1BQU0sR0FBRyxLQUFLO2FBQ2pCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2RCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5CLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxDQUFDLEtBQWtCLEVBQUUsUUFBbUIsRUFBVyxFQUFFO1lBQzFELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFFekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBa0I7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNuRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBRUQsZUFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1hcmtUeXBlIH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHR5cGUgeyBFZGl0b3JTdGF0ZSB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gJ3Byb3NlbWlycm9yLWNvbW1hbmRzJztcblxuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uTWFya3MsIGlzTWFya0FjdGl2ZSB9IGZyb20gJ25neC1lZGl0b3IvaGVscGVycyc7XG5pbXBvcnQgeyBhcHBseU1hcmssIHJlbW92ZU1hcmsgfSBmcm9tICduZ3gtZWRpdG9yL2NvbW1hbmRzJztcblxuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJy4vdHlwZXMnO1xuXG50eXBlIE5hbWUgPSAndGV4dF9jb2xvcicgfCAndGV4dF9iYWNrZ3JvdW5kX2NvbG9yJztcbnR5cGUgQXR0ck5hbWUgPSAnY29sb3InIHwgJ2JhY2tncm91bmRDb2xvcic7XG5cbmludGVyZmFjZSBDb2xvckF0dHJzIHtcbiAgY29sb3I6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEJhY2tncm91bmRDb2xvckF0dHJzIHtcbiAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG59XG5cbmNsYXNzIFRleHRDb2xvciB7XG4gIG5hbWU6IE5hbWU7XG4gIGF0dHJOYW1lOiBBdHRyTmFtZTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBOYW1lLCBhdHRyTmFtZTogQXR0ck5hbWUgPSAnY29sb3InKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmF0dHJOYW1lID0gYXR0ck5hbWU7XG4gIH1cblxuICBhcHBseShhdHRyczogQ29sb3JBdHRycyB8IEJhY2tncm91bmRDb2xvckF0dHJzKTogQ29tbWFuZCB7XG4gICAgcmV0dXJuIChzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogRGlzcGF0Y2gpOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hLCBzZWxlY3Rpb24sIGRvYyB9ID0gc3RhdGU7XG5cbiAgICAgIGNvbnN0IHR5cGU6IE1hcmtUeXBlID0gc2NoZW1hLm1hcmtzW3RoaXMubmFtZV07XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGZyb20sIHRvLCBlbXB0eSB9ID0gc2VsZWN0aW9uO1xuXG4gICAgICBpZiAoIWVtcHR5ICYmIChmcm9tICsgMSA9PT0gdG8pKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2Mubm9kZUF0KGZyb20pO1xuICAgICAgICBpZiAobm9kZT8uaXNBdG9tICYmICFub2RlLmlzVGV4dCAmJiBub2RlLmlzTGVhZikge1xuICAgICAgICAgIC8vIEFuIGF0b21pYyBub2RlIChlLmcuIEltYWdlKSBpcyBzZWxlY3RlZC5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFwcGx5TWFyayh0eXBlLCBhdHRycykoc3RhdGUsIGRpc3BhdGNoKTtcbiAgICB9O1xuICB9XG5cbiAgaXNBY3RpdmUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBzY2hlbWEgfSA9IHN0YXRlO1xuICAgIGNvbnN0IHR5cGU6IE1hcmtUeXBlID0gc2NoZW1hLm1hcmtzW3RoaXMubmFtZV07XG5cbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNNYXJrQWN0aXZlKHN0YXRlLCB0eXBlKTtcbiAgfVxuXG4gIGdldEFjdGl2ZUNvbG9ycyhzdGF0ZTogRWRpdG9yU3RhdGUpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlKHN0YXRlKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBzdGF0ZTtcbiAgICBjb25zdCBtYXJrcyA9IGdldFNlbGVjdGlvbk1hcmtzKHN0YXRlKTtcblxuICAgIGNvbnN0IGNvbG9ycyA9IG1hcmtzXG4gICAgICAuZmlsdGVyKChtYXJrKSA9PiBtYXJrLnR5cGUgPT09IHNjaGVtYS5tYXJrc1t0aGlzLm5hbWVdKVxuICAgICAgLm1hcCgobWFyaykgPT4ge1xuICAgICAgICByZXR1cm4gbWFyay5hdHRyc1t0aGlzLmF0dHJOYW1lXTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgcmV0dXJuIGNvbG9ycztcbiAgfVxuXG4gIHJlbW92ZSgpOiBDb21tYW5kIHtcbiAgICByZXR1cm4gKHN0YXRlOiBFZGl0b3JTdGF0ZSwgZGlzcGF0Y2g/OiBEaXNwYXRjaCk6IGJvb2xlYW4gPT4ge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHN0YXRlO1xuXG4gICAgICBjb25zdCB0eXBlID0gc2NoZW1hLm1hcmtzW3RoaXMubmFtZV07XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVtb3ZlTWFyayh0eXBlKShzdGF0ZSwgZGlzcGF0Y2gpO1xuICAgIH07XG4gIH1cblxuICBjYW5FeGVjdXRlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGF0dHJzID0gdGhpcy5uYW1lID09PSAndGV4dF9jb2xvcicgPyB7IGNvbG9yOiAnJyB9IDogeyBiYWNrZ3JvdW5kQ29sb3I6ICcnIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwbHkoYXR0cnMpKHN0YXRlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0Q29sb3I7XG4iXX0=