UNPKG

ngx-editor

Version:

Rich Text Editor for angular using ProseMirror

65 lines 7.56 kB
import { toggleMark } from 'prosemirror-commands'; import { isMarkActive } from 'ngx-editor/helpers'; import { removeLink } from 'ngx-editor/commands'; const defaultOptions = { strict: true, }; class Link { update(attrs) { return (state, dispatch) => { const { schema, selection } = state; const type = schema.marks.link; if (!type) { return false; } if (selection.empty) { return false; } return toggleMark(type, attrs)(state, dispatch); }; } insert(text, attrs) { return (state, dispatch) => { const { schema, tr } = state; const type = schema.marks.link; if (!type) { return false; } const linkAttrs = { href: attrs.href, title: attrs.title ?? text, target: attrs.target ?? '_blank', }; const node = schema.text(text, [schema.marks.link.create(linkAttrs)]); tr.replaceSelectionWith(node, false) .scrollIntoView(); if (tr.docChanged) { dispatch?.(tr); return true; } return false; }; } isActive(state, options = defaultOptions) { if (options.strict) { return true; } const { schema } = state; const type = schema.marks.link; if (!type) { return false; } return isMarkActive(state, type); } remove(state, dispatch) { return removeLink()(state, dispatch); } canExecute(state) { const testAttrs = { href: '', }; return this.insert('Exec', testAttrs)(state) || this.update(testAttrs)(state); } } export default Link; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3Ivc3JjL2xpYi9jb21tYW5kcy9MaW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBVyxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pELE1BQU0sY0FBYyxHQUFHO0lBQ3JCLE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FBQztBQVFGLE1BQU0sSUFBSTtJQUNSLE1BQU0sQ0FBQyxLQUFnQjtRQUNyQixPQUFPLENBQUMsS0FBa0IsRUFBRSxRQUFtQixFQUFXLEVBQUU7WUFDMUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFFcEMsTUFBTSxJQUFJLEdBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO2dCQUNuQixPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVksRUFBRSxLQUFnQjtRQUNuQyxPQUFPLENBQUMsS0FBa0IsRUFBRSxRQUFtQixFQUFXLEVBQUU7WUFDMUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFFN0IsTUFBTSxJQUFJLEdBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsTUFBTSxTQUFTLEdBQWM7Z0JBQzNCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSTtnQkFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksUUFBUTthQUNqQyxDQUFDO1lBRUYsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2lCQUNqQyxjQUFjLEVBQUUsQ0FBQztZQUVwQixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBa0IsRUFBRSxPQUFPLEdBQUcsY0FBYztRQUNuRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFFL0IsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFrQixFQUFFLFFBQW1CO1FBQzVDLE9BQU8sVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBa0I7UUFDM0IsTUFBTSxTQUFTLEdBQWM7WUFDM0IsSUFBSSxFQUFFLEVBQUU7U0FDVCxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hGLENBQUM7Q0FDRjtBQUVELGVBQWUsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWFya1R5cGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQgeyBFZGl0b3JTdGF0ZSB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7IENvbW1hbmQsIHRvZ2dsZU1hcmsgfSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XG5cbmltcG9ydCB7IGlzTWFya0FjdGl2ZSB9IGZyb20gJ25neC1lZGl0b3IvaGVscGVycyc7XG5pbXBvcnQgeyByZW1vdmVMaW5rIH0gZnJvbSAnbmd4LWVkaXRvci9jb21tYW5kcyc7XG5pbXBvcnQgeyBEaXNwYXRjaCB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgc3RyaWN0OiB0cnVlLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rQXR0cnMge1xuICBocmVmOiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB0YXJnZXQ/OiBzdHJpbmc7XG59XG5cbmNsYXNzIExpbmsge1xuICB1cGRhdGUoYXR0cnM6IExpbmtBdHRycyk6IENvbW1hbmQge1xuICAgIHJldHVybiAoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaD86IERpc3BhdGNoKTogYm9vbGVhbiA9PiB7XG4gICAgICBjb25zdCB7IHNjaGVtYSwgc2VsZWN0aW9uIH0gPSBzdGF0ZTtcblxuICAgICAgY29uc3QgdHlwZTogTWFya1R5cGUgPSBzY2hlbWEubWFya3MubGluaztcbiAgICAgIGlmICghdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3Rpb24uZW1wdHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9nZ2xlTWFyayh0eXBlLCBhdHRycykoc3RhdGUsIGRpc3BhdGNoKTtcbiAgICB9O1xuICB9XG5cbiAgaW5zZXJ0KHRleHQ6IHN0cmluZywgYXR0cnM6IExpbmtBdHRycyk6IENvbW1hbmQge1xuICAgIHJldHVybiAoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaD86IERpc3BhdGNoKTogYm9vbGVhbiA9PiB7XG4gICAgICBjb25zdCB7IHNjaGVtYSwgdHIgfSA9IHN0YXRlO1xuXG4gICAgICBjb25zdCB0eXBlOiBNYXJrVHlwZSA9IHNjaGVtYS5tYXJrcy5saW5rO1xuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGlua0F0dHJzOiBMaW5rQXR0cnMgPSB7XG4gICAgICAgIGhyZWY6IGF0dHJzLmhyZWYsXG4gICAgICAgIHRpdGxlOiBhdHRycy50aXRsZSA/PyB0ZXh0LFxuICAgICAgICB0YXJnZXQ6IGF0dHJzLnRhcmdldCA/PyAnX2JsYW5rJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG5vZGUgPSBzY2hlbWEudGV4dCh0ZXh0LCBbc2NoZW1hLm1hcmtzLmxpbmsuY3JlYXRlKGxpbmtBdHRycyldKTtcblxuICAgICAgdHIucmVwbGFjZVNlbGVjdGlvbldpdGgobm9kZSwgZmFsc2UpXG4gICAgICAgIC5zY3JvbGxJbnRvVmlldygpO1xuXG4gICAgICBpZiAodHIuZG9jQ2hhbmdlZCkge1xuICAgICAgICBkaXNwYXRjaD8uKHRyKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgaXNBY3RpdmUoc3RhdGU6IEVkaXRvclN0YXRlLCBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBpZiAob3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBzdGF0ZTtcbiAgICBjb25zdCB0eXBlID0gc2NoZW1hLm1hcmtzLmxpbms7XG5cbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNNYXJrQWN0aXZlKHN0YXRlLCB0eXBlKTtcbiAgfVxuXG4gIHJlbW92ZShzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogRGlzcGF0Y2gpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVtb3ZlTGluaygpKHN0YXRlLCBkaXNwYXRjaCk7XG4gIH1cblxuICBjYW5FeGVjdXRlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRlc3RBdHRyczogTGlua0F0dHJzID0ge1xuICAgICAgaHJlZjogJycsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmluc2VydCgnRXhlYycsIHRlc3RBdHRycykoc3RhdGUpIHx8IHRoaXMudXBkYXRlKHRlc3RBdHRycykoc3RhdGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbms7XG4iXX0=