ngx-editor
Version:
Rich Text Editor for angular using ProseMirror
39 lines • 5.07 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRpdG9yL3NyYy9saWIvY29tbWFuZHMvSW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVdwRSxNQUFNLEtBQUs7SUFDVCxNQUFNLENBQUMsR0FBVyxFQUFFLEtBQWlCO1FBQ25DLE9BQU8sQ0FBQyxLQUFrQixFQUFFLFFBQW1CLEVBQVcsRUFBRTtZQUMxRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFFeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLEtBQUssRUFBRSxJQUFJO2dCQUNYLEdBQUc7Z0JBQ0gsR0FBRyxLQUFLO2FBQ1QsQ0FBQztZQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLFNBQVMsWUFBWSxhQUFhLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUMzRixVQUFVLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2xEO1lBRUQsRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUV4RCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FDaEMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FDL0QsQ0FBQztZQUVGLEVBQUU7aUJBQ0MsWUFBWSxDQUFDLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUM1QyxjQUFjLEVBQUUsQ0FBQztZQUVwQixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBa0I7UUFDekIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLFNBQVMsWUFBWSxhQUFhLEVBQUU7WUFDdEMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFFRCxlQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRWRpdG9yU3RhdGUsIE5vZGVTZWxlY3Rpb24gfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XG5cbmltcG9ydCB7IERpc3BhdGNoIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VBdHRycyB7XG4gIGFsdD86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHdpZHRoPzogc3RyaW5nO1xufVxuXG5jbGFzcyBJbWFnZSB7XG4gIGluc2VydChzcmM6IHN0cmluZywgYXR0cnM6IEltYWdlQXR0cnMpOiBDb21tYW5kIHtcbiAgICByZXR1cm4gKHN0YXRlOiBFZGl0b3JTdGF0ZSwgZGlzcGF0Y2g/OiBEaXNwYXRjaCk6IGJvb2xlYW4gPT4ge1xuICAgICAgY29uc3QgeyBzY2hlbWEsIHRyLCBzZWxlY3Rpb24gfSA9IHN0YXRlO1xuXG4gICAgICBjb25zdCB0eXBlID0gc2NoZW1hLm5vZGVzLmltYWdlO1xuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW1hZ2VBdHRycyA9IHtcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIHNyYyxcbiAgICAgICAgLi4uYXR0cnMsXG4gICAgICB9O1xuXG4gICAgICBpZiAoIWltYWdlQXR0cnMud2lkdGggJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ubm9kZS50eXBlID09PSB0eXBlKSB7XG4gICAgICAgIGltYWdlQXR0cnMud2lkdGggPSBzZWxlY3Rpb24ubm9kZS5hdHRyc1snd2lkdGgnXTtcbiAgICAgIH1cblxuICAgICAgdHIucmVwbGFjZVNlbGVjdGlvbldpdGgodHlwZS5jcmVhdGVBbmRGaWxsKGltYWdlQXR0cnMpKTtcblxuICAgICAgY29uc3QgcmVzb2x2ZWRQb3MgPSB0ci5kb2MucmVzb2x2ZShcbiAgICAgICAgdHIuc2VsZWN0aW9uLmFuY2hvciAtIHRyLnNlbGVjdGlvbi4kYW5jaG9yLm5vZGVCZWZvcmUubm9kZVNpemUsXG4gICAgICApO1xuXG4gICAgICB0clxuICAgICAgICAuc2V0U2VsZWN0aW9uKG5ldyBOb2RlU2VsZWN0aW9uKHJlc29sdmVkUG9zKSlcbiAgICAgICAgLnNjcm9sbEludG9WaWV3KCk7XG5cbiAgICAgIGlmICh0ci5kb2NDaGFuZ2VkKSB7XG4gICAgICAgIGRpc3BhdGNoPy4odHIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH1cblxuICBpc0FjdGl2ZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gc3RhdGU7XG4gICAgaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIE5vZGVTZWxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBzZWxlY3Rpb24ubm9kZS50eXBlLm5hbWUgPT09ICdpbWFnZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlO1xuIl19