UNPKG

ngx-editor

Version:

The Rich Text Editor for Angular, Built on ProseMirror

65 lines 7.63 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3Ivc3JjL2xpYi9jb21tYW5kcy9MaW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pELE1BQU0sY0FBYyxHQUFHO0lBQ3JCLE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FBQztBQVFGLE1BQU0sSUFBSTtJQUNSLE1BQU0sQ0FBQyxLQUFnQjtRQUNyQixPQUFPLENBQUMsS0FBa0IsRUFBRSxRQUFtQixFQUFXLEVBQUU7WUFDMUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFFcEMsTUFBTSxJQUFJLEdBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ25CLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBWSxFQUFFLEtBQWdCO1FBQ25DLE9BQU8sQ0FBQyxLQUFrQixFQUFFLFFBQW1CLEVBQVcsRUFBRTtZQUMxRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQztZQUU3QixNQUFNLElBQUksR0FBYSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELE1BQU0sU0FBUyxHQUFjO2dCQUMzQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUk7Z0JBQzFCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLFFBQVE7YUFDakMsQ0FBQztZQUVGLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2lCQUNqQyxjQUFjLEVBQUUsQ0FBQztZQUVwQixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBa0IsRUFBRSxPQUFPLEdBQUcsY0FBYztRQUNuRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWtCLEVBQUUsUUFBbUI7UUFDNUMsT0FBTyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFrQjtRQUMzQixNQUFNLFNBQVMsR0FBYztZQUMzQixJQUFJLEVBQUUsRUFBRTtTQUNULENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEYsQ0FBQztDQUNGO0FBRUQsZUFBZSxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1hcmtUeXBlIH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHR5cGUgeyBFZGl0b3JTdGF0ZSwgQ29tbWFuZCB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XG5cbmltcG9ydCB7IGlzTWFya0FjdGl2ZSB9IGZyb20gJ25neC1lZGl0b3IvaGVscGVycyc7XG5pbXBvcnQgeyByZW1vdmVMaW5rIH0gZnJvbSAnbmd4LWVkaXRvci9jb21tYW5kcyc7XG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBzdHJpY3Q6IHRydWUsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtBdHRycyB7XG4gIGhyZWY6IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHRhcmdldD86IHN0cmluZztcbn1cblxuY2xhc3MgTGluayB7XG4gIHVwZGF0ZShhdHRyczogTGlua0F0dHJzKTogQ29tbWFuZCB7XG4gICAgcmV0dXJuIChzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogRGlzcGF0Y2gpOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hLCBzZWxlY3Rpb24gfSA9IHN0YXRlO1xuXG4gICAgICBjb25zdCB0eXBlOiBNYXJrVHlwZSA9IHNjaGVtYS5tYXJrc1snbGluayddO1xuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdGlvbi5lbXB0eSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b2dnbGVNYXJrKHR5cGUsIGF0dHJzKShzdGF0ZSwgZGlzcGF0Y2gpO1xuICAgIH07XG4gIH1cblxuICBpbnNlcnQodGV4dDogc3RyaW5nLCBhdHRyczogTGlua0F0dHJzKTogQ29tbWFuZCB7XG4gICAgcmV0dXJuIChzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogRGlzcGF0Y2gpOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hLCB0ciB9ID0gc3RhdGU7XG5cbiAgICAgIGNvbnN0IHR5cGU6IE1hcmtUeXBlID0gc2NoZW1hLm1hcmtzWydsaW5rJ107XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW5rQXR0cnM6IExpbmtBdHRycyA9IHtcbiAgICAgICAgaHJlZjogYXR0cnMuaHJlZixcbiAgICAgICAgdGl0bGU6IGF0dHJzLnRpdGxlID8/IHRleHQsXG4gICAgICAgIHRhcmdldDogYXR0cnMudGFyZ2V0ID8/ICdfYmxhbmsnLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgbm9kZSA9IHNjaGVtYS50ZXh0KHRleHQsIFtzY2hlbWEubWFya3NbJ2xpbmsnXS5jcmVhdGUobGlua0F0dHJzKV0pO1xuXG4gICAgICB0ci5yZXBsYWNlU2VsZWN0aW9uV2l0aChub2RlLCBmYWxzZSlcbiAgICAgICAgLnNjcm9sbEludG9WaWV3KCk7XG5cbiAgICAgIGlmICh0ci5kb2NDaGFuZ2VkKSB7XG4gICAgICAgIGRpc3BhdGNoPy4odHIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH1cblxuICBpc0FjdGl2ZShzdGF0ZTogRWRpdG9yU3RhdGUsIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIGlmIChvcHRpb25zLnN0cmljdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgeyBzY2hlbWEgfSA9IHN0YXRlO1xuICAgIGNvbnN0IHR5cGUgPSBzY2hlbWEubWFya3NbJ2xpbmsnXTtcblxuICAgIGlmICghdHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBpc01hcmtBY3RpdmUoc3RhdGUsIHR5cGUpO1xuICB9XG5cbiAgcmVtb3ZlKHN0YXRlOiBFZGl0b3JTdGF0ZSwgZGlzcGF0Y2g/OiBEaXNwYXRjaCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZW1vdmVMaW5rKCkoc3RhdGUsIGRpc3BhdGNoKTtcbiAgfVxuXG4gIGNhbkV4ZWN1dGUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGVzdEF0dHJzOiBMaW5rQXR0cnMgPSB7XG4gICAgICBocmVmOiAnJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0KCdFeGVjJywgdGVzdEF0dHJzKShzdGF0ZSkgfHwgdGhpcy51cGRhdGUodGVzdEF0dHJzKShzdGF0ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluaztcbiJdfQ==