ngx-editor
Version:
Rich Text Editor for angular using ProseMirror
29 lines • 4.07 kB
JavaScript
import { TextSelection } from 'prosemirror-state';
import { markApplies } from 'ngx-editor/helpers';
// Ref: https://github.com/ProseMirror/prosemirror-commands/blob/master/src/commands.js
export const applyMark = (type, attrs = {}) => {
return (state, dispatch) => {
const { tr, selection } = state;
const { empty, ranges, $from, $to } = selection;
if (empty && selection instanceof TextSelection) {
const { $cursor } = selection;
if (!$cursor || !markApplies(state.doc, ranges, type)) {
return false;
}
tr.addStoredMark(type.create(attrs));
if (!tr.storedMarksSet) {
return false;
}
dispatch?.(tr);
}
else {
tr.addMark($from.pos, $to.pos, type.create(attrs));
if (!tr.docChanged) {
return false;
}
dispatch?.(tr.scrollIntoView());
}
return true;
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHlNYXJrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWVkaXRvci9jb21tYW5kcy9hcHBseU1hcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFlLGFBQWEsRUFBZSxNQUFNLG1CQUFtQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCx1RkFBdUY7QUFDdkYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBYyxFQUFFLFFBQTZCLEVBQUUsRUFBVyxFQUFFO0lBQ3BGLE9BQU8sQ0FBQyxLQUFrQixFQUFFLFFBQW9DLEVBQVcsRUFBRTtRQUMzRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNoQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBRWhELElBQUksS0FBSyxJQUFJLFNBQVMsWUFBWSxhQUFhLEVBQUU7WUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUU5QixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNyRCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3RCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNoQjthQUFNO1lBQ0wsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRW5ELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFO2dCQUNsQixPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDakM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hcmtUeXBlIH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ3Byb3NlbWlycm9yLWNvbW1hbmRzJztcbmltcG9ydCB7IEVkaXRvclN0YXRlLCBUZXh0U2VsZWN0aW9uLCBUcmFuc2FjdGlvbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcblxuaW1wb3J0IHsgbWFya0FwcGxpZXMgfSBmcm9tICduZ3gtZWRpdG9yL2hlbHBlcnMnO1xuXG4vLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9zZU1pcnJvci9wcm9zZW1pcnJvci1jb21tYW5kcy9ibG9iL21hc3Rlci9zcmMvY29tbWFuZHMuanNcbmV4cG9ydCBjb25zdCBhcHBseU1hcmsgPSAodHlwZTogTWFya1R5cGUsIGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBDb21tYW5kID0+IHtcbiAgcmV0dXJuIChzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogKHRyOiBUcmFuc2FjdGlvbikgPT4gdm9pZCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHsgdHIsIHNlbGVjdGlvbiB9ID0gc3RhdGU7XG4gICAgY29uc3QgeyBlbXB0eSwgcmFuZ2VzLCAkZnJvbSwgJHRvIH0gPSBzZWxlY3Rpb247XG5cbiAgICBpZiAoZW1wdHkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgVGV4dFNlbGVjdGlvbikge1xuICAgICAgY29uc3QgeyAkY3Vyc29yIH0gPSBzZWxlY3Rpb247XG5cbiAgICAgIGlmICghJGN1cnNvciB8fCAhbWFya0FwcGxpZXMoc3RhdGUuZG9jLCByYW5nZXMsIHR5cGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdHIuYWRkU3RvcmVkTWFyayh0eXBlLmNyZWF0ZShhdHRycykpO1xuICAgICAgaWYgKCF0ci5zdG9yZWRNYXJrc1NldCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoPy4odHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ci5hZGRNYXJrKCRmcm9tLnBvcywgJHRvLnBvcywgdHlwZS5jcmVhdGUoYXR0cnMpKTtcblxuICAgICAgaWYgKCF0ci5kb2NDaGFuZ2VkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2g/Lih0ci5zY3JvbGxJbnRvVmlldygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn07XG4iXX0=