ngx-editor
Version:
Rich Text Editor for angular using ProseMirror
65 lines • 7.58 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3Ivc3JjL2xpYi9jb21tYW5kcy9MaW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRCxNQUFNLGNBQWMsR0FBRztJQUNyQixNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUM7QUFRRixNQUFNLElBQUk7SUFDUixNQUFNLENBQUMsS0FBZ0I7UUFDckIsT0FBTyxDQUFDLEtBQWtCLEVBQUUsUUFBbUIsRUFBVyxFQUFFO1lBQzFELE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO1lBRXBDLE1BQU0sSUFBSSxHQUFhLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtnQkFDbkIsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZLEVBQUUsS0FBZ0I7UUFDbkMsT0FBTyxDQUFDLEtBQWtCLEVBQUUsUUFBbUIsRUFBVyxFQUFFO1lBQzFELE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDO1lBRTdCLE1BQU0sSUFBSSxHQUFhLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELE1BQU0sU0FBUyxHQUFjO2dCQUMzQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUk7Z0JBQzFCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLFFBQVE7YUFDakMsQ0FBQztZQUVGLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0RSxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztpQkFDakMsY0FBYyxFQUFFLENBQUM7WUFFcEIsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFO2dCQUNqQixRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDZixPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWtCLEVBQUUsT0FBTyxHQUFHLGNBQWM7UUFDbkQsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBRS9CLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBa0IsRUFBRSxRQUFtQjtRQUM1QyxPQUFPLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWtCO1FBQzNCLE1BQU0sU0FBUyxHQUFjO1lBQzNCLElBQUksRUFBRSxFQUFFO1NBQ1QsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRixDQUFDO0NBQ0Y7QUFFRCxlQUFlLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWFya1R5cGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQgdHlwZSB7IEVkaXRvclN0YXRlIH0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHsgdHlwZSBDb21tYW5kLCB0b2dnbGVNYXJrIH0gZnJvbSAncHJvc2VtaXJyb3ItY29tbWFuZHMnO1xuXG5pbXBvcnQgeyBpc01hcmtBY3RpdmUgfSBmcm9tICduZ3gtZWRpdG9yL2hlbHBlcnMnO1xuaW1wb3J0IHsgcmVtb3ZlTGluayB9IGZyb20gJ25neC1lZGl0b3IvY29tbWFuZHMnO1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgc3RyaWN0OiB0cnVlLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rQXR0cnMge1xuICBocmVmOiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB0YXJnZXQ/OiBzdHJpbmc7XG59XG5cbmNsYXNzIExpbmsge1xuICB1cGRhdGUoYXR0cnM6IExpbmtBdHRycyk6IENvbW1hbmQge1xuICAgIHJldHVybiAoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaD86IERpc3BhdGNoKTogYm9vbGVhbiA9PiB7XG4gICAgICBjb25zdCB7IHNjaGVtYSwgc2VsZWN0aW9uIH0gPSBzdGF0ZTtcblxuICAgICAgY29uc3QgdHlwZTogTWFya1R5cGUgPSBzY2hlbWEubWFya3MubGluaztcbiAgICAgIGlmICghdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3Rpb24uZW1wdHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9nZ2xlTWFyayh0eXBlLCBhdHRycykoc3RhdGUsIGRpc3BhdGNoKTtcbiAgICB9O1xuICB9XG5cbiAgaW5zZXJ0KHRleHQ6IHN0cmluZywgYXR0cnM6IExpbmtBdHRycyk6IENvbW1hbmQge1xuICAgIHJldHVybiAoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaD86IERpc3BhdGNoKTogYm9vbGVhbiA9PiB7XG4gICAgICBjb25zdCB7IHNjaGVtYSwgdHIgfSA9IHN0YXRlO1xuXG4gICAgICBjb25zdCB0eXBlOiBNYXJrVHlwZSA9IHNjaGVtYS5tYXJrcy5saW5rO1xuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGlua0F0dHJzOiBMaW5rQXR0cnMgPSB7XG4gICAgICAgIGhyZWY6IGF0dHJzLmhyZWYsXG4gICAgICAgIHRpdGxlOiBhdHRycy50aXRsZSA/PyB0ZXh0LFxuICAgICAgICB0YXJnZXQ6IGF0dHJzLnRhcmdldCA/PyAnX2JsYW5rJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG5vZGUgPSBzY2hlbWEudGV4dCh0ZXh0LCBbc2NoZW1hLm1hcmtzLmxpbmsuY3JlYXRlKGxpbmtBdHRycyldKTtcblxuICAgICAgdHIucmVwbGFjZVNlbGVjdGlvbldpdGgobm9kZSwgZmFsc2UpXG4gICAgICAgIC5zY3JvbGxJbnRvVmlldygpO1xuXG4gICAgICBpZiAodHIuZG9jQ2hhbmdlZCkge1xuICAgICAgICBkaXNwYXRjaD8uKHRyKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgaXNBY3RpdmUoc3RhdGU6IEVkaXRvclN0YXRlLCBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBpZiAob3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBzdGF0ZTtcbiAgICBjb25zdCB0eXBlID0gc2NoZW1hLm1hcmtzLmxpbms7XG5cbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNNYXJrQWN0aXZlKHN0YXRlLCB0eXBlKTtcbiAgfVxuXG4gIHJlbW92ZShzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogRGlzcGF0Y2gpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVtb3ZlTGluaygpKHN0YXRlLCBkaXNwYXRjaCk7XG4gIH1cblxuICBjYW5FeGVjdXRlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRlc3RBdHRyczogTGlua0F0dHJzID0ge1xuICAgICAgaHJlZjogJycsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmluc2VydCgnRXhlYycsIHRlc3RBdHRycykoc3RhdGUpIHx8IHRoaXMudXBkYXRlKHRlc3RBdHRycykoc3RhdGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbms7XG4iXX0=