ngx-editor
Version:
Rich Text Editor for angular using ProseMirror
39 lines • 5.05 kB
JavaScript
import { NodeSelection } from 'prosemirror-state';
class Image {
insert(src, attrs) {
return (state, dispatch) => {
const { schema, tr, selection } = state;
const type = schema.nodes.image;
if (!type) {
return false;
}
const imageAttrs = {
width: null,
src,
...attrs
};
if (!imageAttrs.width && selection instanceof NodeSelection && selection.node.type === type) {
imageAttrs.width = selection.node.attrs['width'];
}
tr.replaceSelectionWith(type.createAndFill(imageAttrs));
const resolvedPos = tr.doc.resolve(tr.selection.anchor - tr.selection.$anchor.nodeBefore.nodeSize);
tr
.setSelection(new NodeSelection(resolvedPos))
.scrollIntoView();
if (tr.docChanged) {
dispatch?.(tr);
return true;
}
return false;
};
}
isActive(state) {
const { selection } = state;
if (selection instanceof NodeSelection) {
return selection.node.type.name === 'image';
}
return false;
}
}
export default Image;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRpdG9yL3NyYy9saWIvY29tbWFuZHMvSW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBVy9ELE1BQU0sS0FBSztJQUNULE1BQU0sQ0FBQyxHQUFXLEVBQUUsS0FBaUI7UUFDbkMsT0FBTyxDQUFDLEtBQWtCLEVBQUUsUUFBbUIsRUFBVyxFQUFFO1lBQzFELE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQztZQUV4QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxNQUFNLFVBQVUsR0FBRztnQkFDakIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsR0FBRztnQkFDSCxHQUFHLEtBQUs7YUFDVCxDQUFDO1lBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksU0FBUyxZQUFZLGFBQWEsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQzNGLFVBQVUsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDbEQ7WUFFRCxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBRXhELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUNoQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUMvRCxDQUFDO1lBRUYsRUFBRTtpQkFDQyxZQUFZLENBQUMsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzVDLGNBQWMsRUFBRSxDQUFDO1lBRXBCLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRTtnQkFDakIsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2YsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFrQjtRQUN6QixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksU0FBUyxZQUFZLGFBQWEsRUFBRTtZQUN0QyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7U0FDN0M7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQUVELGVBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRpdG9yU3RhdGUsIE5vZGVTZWxlY3Rpb24gfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAncHJvc2VtaXJyb3ItY29tbWFuZHMnO1xuXG5pbXBvcnQgeyBEaXNwYXRjaCB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlQXR0cnMge1xuICBhbHQ/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB3aWR0aD86IHN0cmluZztcbn1cblxuY2xhc3MgSW1hZ2Uge1xuICBpbnNlcnQoc3JjOiBzdHJpbmcsIGF0dHJzOiBJbWFnZUF0dHJzKTogQ29tbWFuZCB7XG4gICAgcmV0dXJuIChzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoPzogRGlzcGF0Y2gpOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hLCB0ciwgc2VsZWN0aW9uIH0gPSBzdGF0ZTtcblxuICAgICAgY29uc3QgdHlwZSA9IHNjaGVtYS5ub2Rlcy5pbWFnZTtcbiAgICAgIGlmICghdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGltYWdlQXR0cnMgPSB7XG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBzcmMsXG4gICAgICAgIC4uLmF0dHJzXG4gICAgICB9O1xuXG4gICAgICBpZiAoIWltYWdlQXR0cnMud2lkdGggJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ubm9kZS50eXBlID09PSB0eXBlKSB7XG4gICAgICAgIGltYWdlQXR0cnMud2lkdGggPSBzZWxlY3Rpb24ubm9kZS5hdHRyc1snd2lkdGgnXTtcbiAgICAgIH1cblxuICAgICAgdHIucmVwbGFjZVNlbGVjdGlvbldpdGgodHlwZS5jcmVhdGVBbmRGaWxsKGltYWdlQXR0cnMpKTtcblxuICAgICAgY29uc3QgcmVzb2x2ZWRQb3MgPSB0ci5kb2MucmVzb2x2ZShcbiAgICAgICAgdHIuc2VsZWN0aW9uLmFuY2hvciAtIHRyLnNlbGVjdGlvbi4kYW5jaG9yLm5vZGVCZWZvcmUubm9kZVNpemVcbiAgICAgICk7XG5cbiAgICAgIHRyXG4gICAgICAgIC5zZXRTZWxlY3Rpb24obmV3IE5vZGVTZWxlY3Rpb24ocmVzb2x2ZWRQb3MpKVxuICAgICAgICAuc2Nyb2xsSW50b1ZpZXcoKTtcblxuICAgICAgaWYgKHRyLmRvY0NoYW5nZWQpIHtcbiAgICAgICAgZGlzcGF0Y2g/Lih0cik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIGlzQWN0aXZlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBzdGF0ZTtcbiAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbikge1xuICAgICAgcmV0dXJuIHNlbGVjdGlvbi5ub2RlLnR5cGUubmFtZSA9PT0gJ2ltYWdlJztcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2U7XG4iXX0=