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