From 85c45cb85b28f12922746c2b8a7095dbe09a7eae Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Sat, 13 Mar 2021 15:11:41 +0200 Subject: [PATCH] caption in progress --- .../src/images/captionPlugin.js | 25 ++++++++++++++----- wax-prosemirror-schema/src/nodes/imageNode.js | 2 +- .../HeadingService/Heading2.js | 7 +++++- .../HeadingService/Heading3.js | 7 +++++- .../HeadingService/Heading4.js | 7 +++++- 5 files changed, 38 insertions(+), 10 deletions(-) diff --git a/wax-prosemirror-plugins/src/images/captionPlugin.js b/wax-prosemirror-plugins/src/images/captionPlugin.js index 8f8a5181b..ea7acd9ff 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 612e2938b..34e825c63 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 f29ab8467..d48724224 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 e2dd3d94e..e79ea62f3 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 3991590cf..31df0dcb9 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; } }); -- GitLab