ngx-editor
Version:
The Rich Text Editor for Angular, Built on ProseMirror
34 lines • 4.53 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlTWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3IvY29tbWFuZHMvcmVtb3ZlTWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWUsYUFBYSxFQUE2QixNQUFNLG1CQUFtQixDQUFDO0FBRTFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFjLEVBQVcsRUFBRTtJQUNwRCxPQUFPLENBQUMsS0FBa0IsRUFBRSxRQUFvQyxFQUFXLEVBQUU7UUFDM0UsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNsRCxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUVwQyxJQUFJLEtBQUssSUFBSSxTQUFTLFlBQVksYUFBYSxFQUFFO1lBQy9DLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFFOUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDckQsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ2hELEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2YsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO2FBQU07WUFDTCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtnQkFDMUIsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUUzRCxJQUFJLE9BQU8sRUFBRTtvQkFDWCxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDekM7YUFDRjtZQUVELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFO2dCQUNsQixPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDakM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hcmtUeXBlIH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHsgRWRpdG9yU3RhdGUsIFRleHRTZWxlY3Rpb24sIFRyYW5zYWN0aW9uLCB0eXBlIENvbW1hbmQgfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5cbmltcG9ydCB7IG1hcmtBcHBsaWVzIH0gZnJvbSAnbmd4LWVkaXRvci9oZWxwZXJzJztcblxuZXhwb3J0IGNvbnN0IHJlbW92ZU1hcmsgPSAodHlwZTogTWFya1R5cGUpOiBDb21tYW5kID0+IHtcbiAgcmV0dXJuIChzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogKHRyOiBUcmFuc2FjdGlvbikgPT4gdm9pZCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHsgdHIsIHNlbGVjdGlvbiwgc3RvcmVkTWFya3MsIGRvYyB9ID0gc3RhdGU7XG4gICAgY29uc3QgeyBlbXB0eSwgcmFuZ2VzIH0gPSBzZWxlY3Rpb247XG5cbiAgICBpZiAoZW1wdHkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgVGV4dFNlbGVjdGlvbikge1xuICAgICAgY29uc3QgeyAkY3Vyc29yIH0gPSBzZWxlY3Rpb247XG5cbiAgICAgIGlmICghJGN1cnNvciB8fCAhbWFya0FwcGxpZXMoc3RhdGUuZG9jLCByYW5nZXMsIHR5cGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUuaXNJblNldChzdG9yZWRNYXJrcyB8fCAkY3Vyc29yLm1hcmtzKCkpKSB7XG4gICAgICAgIHRyLnJlbW92ZVN0b3JlZE1hcmsodHlwZSk7XG4gICAgICAgIGRpc3BhdGNoPy4odHIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCByYW5nZSBvZiByYW5nZXMpIHtcbiAgICAgICAgY29uc3QgeyAkZnJvbSwgJHRvIH0gPSByYW5nZTtcbiAgICAgICAgY29uc3QgaGFzTWFyayA9IGRvYy5yYW5nZUhhc01hcmsoJGZyb20ucG9zLCAkdG8ucG9zLCB0eXBlKTtcblxuICAgICAgICBpZiAoaGFzTWFyaykge1xuICAgICAgICAgIHRyLnJlbW92ZU1hcmsoJGZyb20ucG9zLCAkdG8ucG9zLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRyLmRvY0NoYW5nZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaD8uKHRyLnNjcm9sbEludG9WaWV3KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn07XG4iXX0=