diff --git a/wax-prosemirror-plugins/src/images/captionPlugin.js b/wax-prosemirror-plugins/src/images/captionPlugin.js index 8f8a5181bf73bfc0ba87940bcbb114aaa95a5130..ea7acd9fffe6cd7aa57e5a9fa2c53de99fa6ddb0 100644 --- a/wax-prosemirror-plugins/src/images/captionPlugin.js +++ b/wax-prosemirror-plugins/src/images/captionPlugin.js @@ -1,5 +1,5 @@ import { DecorationSet } from 'prosemirror-view'; -import { Plugin, PluginKey } from 'prosemirror-state'; +import { Plugin, PluginKey, NodeSelection } from 'prosemirror-state'; const captionPlugin = key => new Plugin({ @@ -29,23 +29,23 @@ const captionPlugin = key => e.target.nodeName === 'IMG' && e.target.parentNode.lastElementChild.nodeName !== 'FIGCAPTION' ) { + let pos = view.posAtDOM(e.target); const id = {}; const { tr } = view.state; - const pos = view.posAtDOM(e.target); - const pos1 = pos + 1; + pos += 1; // insert figure caption node view.dispatch( tr .replaceWith( - pos1, - pos1, + pos, + pos, view.state.schema.nodes.figcaption.create({ class: 'decoration', dataContent: 'Caption : ', }), ) .setMeta(captionPlugins, { - add: { id, pos: pos + 1 }, + add: { id, pos }, }), ); } else if (e.target.nodeName !== 'FIGCAPTION') { @@ -68,6 +68,19 @@ const captionPlugin = key => } } + if (e.target.nodeName === 'IMG') { + let pos = view.posAtDOM(e.target); + const { $from } = view.state.selection; + const same = $from.sharedDepth(pos); + if (same === 0) return false; + pos = $from.before(same); + view.dispatch( + view.state.tr.setSelection( + NodeSelection.create(view.state.doc, pos), + ), + ); + } + return true; }, keyup(view, e) { diff --git a/wax-prosemirror-schema/src/nodes/imageNode.js b/wax-prosemirror-schema/src/nodes/imageNode.js index 612e2938b67dc34558b62f053e9bf5d7af8b89e9..34e825c63b235142d72dbbc7415174caca9dda80 100644 --- a/wax-prosemirror-schema/src/nodes/imageNode.js +++ b/wax-prosemirror-schema/src/nodes/imageNode.js @@ -8,7 +8,7 @@ const image = { track: { default: [] }, }, group: 'figure', - draggable: true, + draggable: false, parseDOM: [ { tag: 'img[src]', diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js index f29ab84670b3e5413ec6a3ba648ab8da80b76bcb..d48724224265e0f2b58fdc2e6d0f6fb0a326d83f 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js @@ -27,7 +27,12 @@ class Heading2 extends Tools { if (activeViewId !== 'main') return false; const { from, to } = state.selection; state.doc.nodesBetween(from, to, (node, pos) => { - if (node.type.name === 'list_item' || node.type.name === 'image') { + if ( + node.type.name === 'list_item' || + node.type.name === 'image' || + node.type.name === 'figure' || + node.type.name === 'figcaption' + ) { isActive = false; } }); diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js index e2dd3d94ecd790c725fd28c363938c0fe2dcd00a..e79ea62f3f7e83468e372ff42be80904c1250a51 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js @@ -27,7 +27,12 @@ class Heading3 extends Tools { if (activeViewId !== 'main') return false; const { from, to } = state.selection; state.doc.nodesBetween(from, to, (node, pos) => { - if (node.type.name === 'list_item' || node.type.name === 'image') { + if ( + node.type.name === 'list_item' || + node.type.name === 'image' || + node.type.name === 'figure' || + node.type.name === 'figcaption' + ) { isActive = false; } }); diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js index 3991590cf620ef5a844e0d16726dd36262ce5912..31df0dcb9296c62d307cb57542511d0e18de5103 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js @@ -27,7 +27,12 @@ class Heading4 extends Tools { if (activeViewId !== 'main') return false; const { from, to } = state.selection; state.doc.nodesBetween(from, to, (node, pos) => { - if (node.type.name === 'list_item' || node.type.name === 'image') { + if ( + node.type.name === 'list_item' || + node.type.name === 'image' || + node.type.name === 'figure' || + node.type.name === 'figcaption' + ) { isActive = false; } });