ngx-editor
Version:
The Rich Text Editor for Angular, Built on ProseMirror
39 lines • 5.03 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRpdG9yL3NyYy9saWIvY29tbWFuZHMvSW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixhQUFhLEVBQWdCLE1BQU0sbUJBQW1CLENBQUM7QUFVbEYsTUFBTSxLQUFLO0lBQ1QsTUFBTSxDQUFDLEdBQVcsRUFBRSxLQUFpQjtRQUNuQyxPQUFPLENBQUMsS0FBa0IsRUFBRSxRQUFtQixFQUFXLEVBQUU7WUFDMUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO1lBRXhDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLEtBQUssRUFBRSxJQUFJO2dCQUNYLEdBQUc7Z0JBQ0gsR0FBRyxLQUFLO2FBQ1QsQ0FBQztZQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLFNBQVMsWUFBWSxhQUFhLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUMzRixVQUFVLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2xEO1lBRUQsRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUV4RCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FDaEMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FDL0QsQ0FBQztZQUVGLEVBQUU7aUJBQ0MsWUFBWSxDQUFDLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUM1QyxjQUFjLEVBQUUsQ0FBQztZQUVwQixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBa0I7UUFDekIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLFNBQVMsWUFBWSxhQUFhLEVBQUU7WUFDdEMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFFRCxlQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRWRpdG9yU3RhdGUsIE5vZGVTZWxlY3Rpb24sIHR5cGUgQ29tbWFuZCB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcblxuaW1wb3J0IHsgRGlzcGF0Y2ggfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZUF0dHJzIHtcbiAgYWx0Pzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgd2lkdGg/OiBzdHJpbmc7XG59XG5cbmNsYXNzIEltYWdlIHtcbiAgaW5zZXJ0KHNyYzogc3RyaW5nLCBhdHRyczogSW1hZ2VBdHRycyk6IENvbW1hbmQge1xuICAgIHJldHVybiAoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaD86IERpc3BhdGNoKTogYm9vbGVhbiA9PiB7XG4gICAgICBjb25zdCB7IHNjaGVtYSwgdHIsIHNlbGVjdGlvbiB9ID0gc3RhdGU7XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBzY2hlbWEubm9kZXNbJ2ltYWdlJ107XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbWFnZUF0dHJzID0ge1xuICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgc3JjLFxuICAgICAgICAuLi5hdHRycyxcbiAgICAgIH07XG5cbiAgICAgIGlmICghaW1hZ2VBdHRycy53aWR0aCAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBOb2RlU2VsZWN0aW9uICYmIHNlbGVjdGlvbi5ub2RlLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgaW1hZ2VBdHRycy53aWR0aCA9IHNlbGVjdGlvbi5ub2RlLmF0dHJzWyd3aWR0aCddO1xuICAgICAgfVxuXG4gICAgICB0ci5yZXBsYWNlU2VsZWN0aW9uV2l0aCh0eXBlLmNyZWF0ZUFuZEZpbGwoaW1hZ2VBdHRycykpO1xuXG4gICAgICBjb25zdCByZXNvbHZlZFBvcyA9IHRyLmRvYy5yZXNvbHZlKFxuICAgICAgICB0ci5zZWxlY3Rpb24uYW5jaG9yIC0gdHIuc2VsZWN0aW9uLiRhbmNob3Iubm9kZUJlZm9yZS5ub2RlU2l6ZSxcbiAgICAgICk7XG5cbiAgICAgIHRyXG4gICAgICAgIC5zZXRTZWxlY3Rpb24obmV3IE5vZGVTZWxlY3Rpb24ocmVzb2x2ZWRQb3MpKVxuICAgICAgICAuc2Nyb2xsSW50b1ZpZXcoKTtcblxuICAgICAgaWYgKHRyLmRvY0NoYW5nZWQpIHtcbiAgICAgICAgZGlzcGF0Y2g/Lih0cik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIGlzQWN0aXZlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBzdGF0ZTtcbiAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbikge1xuICAgICAgcmV0dXJuIHNlbGVjdGlvbi5ub2RlLnR5cGUubmFtZSA9PT0gJ2ltYWdlJztcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2U7XG4iXX0=