ngx-editor
Version:
Rich Text Editor for angular using ProseMirror
65 lines • 7.55 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3Ivc3JjL2xpYi9jb21tYW5kcy9MaW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBVyxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pELE1BQU0sY0FBYyxHQUFHO0lBQ3JCLE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FBQztBQVFGLE1BQU0sSUFBSTtJQUNSLE1BQU0sQ0FBQyxLQUFnQjtRQUNyQixPQUFPLENBQUMsS0FBa0IsRUFBRSxRQUFtQixFQUFXLEVBQUU7WUFDMUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFFcEMsTUFBTSxJQUFJLEdBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO2dCQUNuQixPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVksRUFBRSxLQUFnQjtRQUNuQyxPQUFPLENBQUMsS0FBa0IsRUFBRSxRQUFtQixFQUFXLEVBQUU7WUFDMUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFFN0IsTUFBTSxJQUFJLEdBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsTUFBTSxTQUFTLEdBQWM7Z0JBQzNCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSTtnQkFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksUUFBUTthQUNqQyxDQUFDO1lBRUYsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2lCQUNqQyxjQUFjLEVBQUUsQ0FBQztZQUVwQixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBa0IsRUFBRSxPQUFPLEdBQUcsY0FBYztRQUNuRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFFL0IsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFrQixFQUFFLFFBQW1CO1FBQzVDLE9BQU8sVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBa0I7UUFDM0IsTUFBTSxTQUFTLEdBQWM7WUFDM0IsSUFBSSxFQUFFLEVBQUU7U0FDVCxDQUFBO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hGLENBQUM7Q0FDRjtBQUVELGVBQWUsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWFya1R5cGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQgeyBFZGl0b3JTdGF0ZSB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7IENvbW1hbmQsIHRvZ2dsZU1hcmsgfSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XG5cbmltcG9ydCB7IGlzTWFya0FjdGl2ZSB9IGZyb20gJ25neC1lZGl0b3IvaGVscGVycyc7XG5pbXBvcnQgeyByZW1vdmVMaW5rIH0gZnJvbSAnbmd4LWVkaXRvci9jb21tYW5kcyc7XG5pbXBvcnQgeyBEaXNwYXRjaCB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgc3RyaWN0OiB0cnVlXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtBdHRycyB7XG4gIGhyZWY6IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHRhcmdldD86IHN0cmluZztcbn1cblxuY2xhc3MgTGluayB7XG4gIHVwZGF0ZShhdHRyczogTGlua0F0dHJzKTogQ29tbWFuZCB7XG4gICAgcmV0dXJuIChzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogRGlzcGF0Y2gpOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hLCBzZWxlY3Rpb24gfSA9IHN0YXRlO1xuXG4gICAgICBjb25zdCB0eXBlOiBNYXJrVHlwZSA9IHNjaGVtYS5tYXJrcy5saW5rO1xuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdGlvbi5lbXB0eSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b2dnbGVNYXJrKHR5cGUsIGF0dHJzKShzdGF0ZSwgZGlzcGF0Y2gpO1xuICAgIH07XG4gIH1cblxuICBpbnNlcnQodGV4dDogc3RyaW5nLCBhdHRyczogTGlua0F0dHJzKTogQ29tbWFuZCB7XG4gICAgcmV0dXJuIChzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogRGlzcGF0Y2gpOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hLCB0ciB9ID0gc3RhdGU7XG5cbiAgICAgIGNvbnN0IHR5cGU6IE1hcmtUeXBlID0gc2NoZW1hLm1hcmtzLmxpbms7XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW5rQXR0cnM6IExpbmtBdHRycyA9IHtcbiAgICAgICAgaHJlZjogYXR0cnMuaHJlZixcbiAgICAgICAgdGl0bGU6IGF0dHJzLnRpdGxlID8/IHRleHQsXG4gICAgICAgIHRhcmdldDogYXR0cnMudGFyZ2V0ID8/ICdfYmxhbmsnXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBub2RlID0gc2NoZW1hLnRleHQodGV4dCwgW3NjaGVtYS5tYXJrcy5saW5rLmNyZWF0ZShsaW5rQXR0cnMpXSk7XG5cbiAgICAgIHRyLnJlcGxhY2VTZWxlY3Rpb25XaXRoKG5vZGUsIGZhbHNlKVxuICAgICAgICAuc2Nyb2xsSW50b1ZpZXcoKTtcblxuICAgICAgaWYgKHRyLmRvY0NoYW5nZWQpIHtcbiAgICAgICAgZGlzcGF0Y2g/Lih0cik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIGlzQWN0aXZlKHN0YXRlOiBFZGl0b3JTdGF0ZSwgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgaWYgKG9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHNjaGVtYSB9ID0gc3RhdGU7XG4gICAgY29uc3QgdHlwZSA9IHNjaGVtYS5tYXJrcy5saW5rO1xuXG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzTWFya0FjdGl2ZShzdGF0ZSwgdHlwZSk7XG4gIH1cblxuICByZW1vdmUoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaD86IERpc3BhdGNoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlbW92ZUxpbmsoKShzdGF0ZSwgZGlzcGF0Y2gpO1xuICB9XG5cbiAgY2FuRXhlY3V0ZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ZXN0QXR0cnM6IExpbmtBdHRycyA9IHtcbiAgICAgIGhyZWY6ICcnXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0KCdFeGVjJywgdGVzdEF0dHJzKShzdGF0ZSkgfHwgdGhpcy51cGRhdGUodGVzdEF0dHJzKShzdGF0ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluaztcbiJdfQ==