ngx-editor
Version:
Rich Text Editor for angular using ProseMirror
34 lines • 4.58 kB
JavaScript
import { TextSelection } from 'prosemirror-state';
import { markApplies } from 'ngx-editor/helpers';
export const removeMark = (type) => {
return (state, dispatch) => {
const { tr, selection, storedMarks, doc } = state;
const { empty, ranges } = selection;
if (empty && selection instanceof TextSelection) {
const { $cursor } = selection;
if (!$cursor || !markApplies(state.doc, ranges, type)) {
return false;
}
if (type.isInSet(storedMarks || $cursor.marks())) {
tr.removeStoredMark(type);
dispatch?.(tr);
return true;
}
}
else {
for (const range of ranges) {
const { $from, $to } = range;
const hasMark = doc.rangeHasMark($from.pos, $to.pos, type);
if (hasMark) {
tr.removeMark($from.pos, $to.pos, type);
}
}
if (!tr.docChanged) {
return false;
}
dispatch?.(tr.scrollIntoView());
}
return false;
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlTWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3IvY29tbWFuZHMvcmVtb3ZlTWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWUsYUFBYSxFQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFFNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2pELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQWMsRUFBVyxFQUFFO0lBQ3BELE9BQU8sQ0FBQyxLQUFrQixFQUFFLFFBQW9DLEVBQVcsRUFBRTtRQUMzRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2xELE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBRXBDLElBQUksS0FBSyxJQUFJLFNBQVMsWUFBWSxhQUFhLEVBQUU7WUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUU5QixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNyRCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDaEQsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQixRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDZixPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7YUFBTTtZQUNMLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO2dCQUMxQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztnQkFDN0IsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBRTNELElBQUksT0FBTyxFQUFFO29CQUNYLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUN6QzthQUNGO1lBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUNqQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWFya1R5cGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQgeyBFZGl0b3JTdGF0ZSwgVGV4dFNlbGVjdGlvbiwgVHJhbnNhY3Rpb24gfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5cbmltcG9ydCB7IG1hcmtBcHBsaWVzIH0gZnJvbSAnbmd4LWVkaXRvci9oZWxwZXJzJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XG5cbmV4cG9ydCBjb25zdCByZW1vdmVNYXJrID0gKHR5cGU6IE1hcmtUeXBlKTogQ29tbWFuZCA9PiB7XG4gIHJldHVybiAoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaD86ICh0cjogVHJhbnNhY3Rpb24pID0+IHZvaWQpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCB7IHRyLCBzZWxlY3Rpb24sIHN0b3JlZE1hcmtzLCBkb2MgfSA9IHN0YXRlO1xuICAgIGNvbnN0IHsgZW1wdHksIHJhbmdlcyB9ID0gc2VsZWN0aW9uO1xuXG4gICAgaWYgKGVtcHR5ICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIFRleHRTZWxlY3Rpb24pIHtcbiAgICAgIGNvbnN0IHsgJGN1cnNvciB9ID0gc2VsZWN0aW9uO1xuXG4gICAgICBpZiAoISRjdXJzb3IgfHwgIW1hcmtBcHBsaWVzKHN0YXRlLmRvYywgcmFuZ2VzLCB0eXBlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlLmlzSW5TZXQoc3RvcmVkTWFya3MgfHwgJGN1cnNvci5tYXJrcygpKSkge1xuICAgICAgICB0ci5yZW1vdmVTdG9yZWRNYXJrKHR5cGUpO1xuICAgICAgICBkaXNwYXRjaD8uKHRyKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgcmFuZ2Ugb2YgcmFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IHsgJGZyb20sICR0byB9ID0gcmFuZ2U7XG4gICAgICAgIGNvbnN0IGhhc01hcmsgPSBkb2MucmFuZ2VIYXNNYXJrKCRmcm9tLnBvcywgJHRvLnBvcywgdHlwZSk7XG5cbiAgICAgICAgaWYgKGhhc01hcmspIHtcbiAgICAgICAgICB0ci5yZW1vdmVNYXJrKCRmcm9tLnBvcywgJHRvLnBvcywgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0ci5kb2NDaGFuZ2VkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2g/Lih0ci5zY3JvbGxJbnRvVmlldygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59O1xuIl19