@pentestpad/tiptap-extension-figure 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +20 -5
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.js +20 -5
- package/dist/index.js.map +1 -1
- package/dist/utils/replace-element.util.d.ts +3 -2
- package/package.json +2 -2
- package/src/assets/styles/styles.css +1 -2
- package/src/component/tip-tap-image-resize-with-caption.ts +2 -2
- package/src/utils/replace-element.util.ts +24 -1
package/dist/index.cjs.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var core = require('@tiptap/core');
|
|
6
6
|
var ImageExtension = require('@tiptap/extension-image');
|
|
7
|
+
var state = require('@tiptap/pm/state');
|
|
7
8
|
|
|
8
9
|
const isMobileScreen = () => document.documentElement.clientWidth < 768;
|
|
9
10
|
|
|
@@ -170,10 +171,13 @@ const addCaptionControls = (wrapperElement, styles, onCaptionRemove, onCaptionAd
|
|
|
170
171
|
}
|
|
171
172
|
};
|
|
172
173
|
|
|
173
|
-
const changeFigureToImage = (wrapperElement) => {
|
|
174
|
+
const changeFigureToImage = (editor, wrapperElement) => {
|
|
175
|
+
const { state: state$1, view } = editor;
|
|
176
|
+
const { tr } = state$1;
|
|
174
177
|
const imageWrapperElement = document.createElement("div");
|
|
175
178
|
const oldAttributes = wrapperElement.attributes;
|
|
176
179
|
const newAttributes = imageWrapperElement.attributes;
|
|
180
|
+
const imageWrapperPosition = view.posAtDOM(wrapperElement, 0);
|
|
177
181
|
// Copy attributes
|
|
178
182
|
for (let i = 0, len = oldAttributes.length; i < len; i++) {
|
|
179
183
|
newAttributes.setNamedItem(oldAttributes.item(i).cloneNode());
|
|
@@ -185,11 +189,18 @@ const changeFigureToImage = (wrapperElement) => {
|
|
|
185
189
|
}
|
|
186
190
|
// Replace wrapperElement with imageWrapperElement
|
|
187
191
|
wrapperElement.replaceWith(imageWrapperElement);
|
|
192
|
+
// Focus on the newly replaced wrapper element
|
|
193
|
+
const newSelection = state.TextSelection.create(tr.doc, imageWrapperPosition);
|
|
194
|
+
const transaction = tr.setSelection(newSelection);
|
|
195
|
+
view.dispatch(transaction);
|
|
188
196
|
};
|
|
189
|
-
const changeImageToFigure = (wrapperElement, captionElement) => {
|
|
197
|
+
const changeImageToFigure = (editor, wrapperElement, captionElement) => {
|
|
198
|
+
const { state: state$1, view } = editor;
|
|
199
|
+
const { tr } = state$1;
|
|
190
200
|
const figureWrapperElement = document.createElement("figure");
|
|
191
201
|
const oldAttributes = wrapperElement.attributes;
|
|
192
202
|
const newAttributes = figureWrapperElement.attributes;
|
|
203
|
+
const figureWrapperPosition = view.posAtDOM(wrapperElement, 0);
|
|
193
204
|
// Copy attributes
|
|
194
205
|
for (let i = 0, len = oldAttributes.length; i < len; i++) {
|
|
195
206
|
newAttributes.setNamedItem(oldAttributes.item(i).cloneNode());
|
|
@@ -203,6 +214,10 @@ const changeImageToFigure = (wrapperElement, captionElement) => {
|
|
|
203
214
|
figureWrapperElement.appendChild(captionElement);
|
|
204
215
|
// Replace wrapperElement with figureWrapperElement
|
|
205
216
|
wrapperElement.replaceWith(figureWrapperElement);
|
|
217
|
+
// Focus on the newly replaced wrapper element
|
|
218
|
+
const newSelection = state.TextSelection.create(tr.doc, figureWrapperPosition);
|
|
219
|
+
const transaction = tr.setSelection(newSelection);
|
|
220
|
+
view.dispatch(transaction);
|
|
206
221
|
};
|
|
207
222
|
|
|
208
223
|
function styleInject(css, ref) {
|
|
@@ -232,7 +247,7 @@ function styleInject(css, ref) {
|
|
|
232
247
|
}
|
|
233
248
|
}
|
|
234
249
|
|
|
235
|
-
var css_248z = ".styles_wrapper-element__SoyDK {\n display: flex;\n flex-direction: column;\n position: relative;\n cursor: pointer;\n width: fit-content;\n}\n.styles_wrapper-element__SoyDK.styles_active__kXAaT {\n border: 2px dashed #6c6c6c;\n}\n\n.styles_figure-element__wBqOu {\n}\n\n.styles_caption-element__-9Bt- {\n text-align: center;\n margin-top: 8px;\n min-height: 1em;\n margin: 0.5rem 2rem;\n padding: 0.5rem 0;\n}\n.styles_caption-element__-9Bt-:hover {\n border-radius: 4px;\n border: 2px dashed #6c6c6c;\n}\n\n.styles_caption-controls-element__Pwjxq {\n position: absolute;\n bottom: 7.5%;\n left: 50%;\n width: 40px;\n height: 35px;\n
|
|
250
|
+
var css_248z = ".styles_wrapper-element__SoyDK {\n display: flex;\n flex-direction: column;\n position: relative;\n cursor: pointer;\n width: fit-content;\n margin-inline: 0;\n}\n.styles_wrapper-element__SoyDK.styles_active__kXAaT {\n border: 2px dashed #6c6c6c;\n}\n\n.styles_figure-element__wBqOu {\n}\n\n.styles_caption-element__-9Bt- {\n text-align: center;\n margin-top: 8px;\n min-height: 1em;\n margin: 0.5rem 2rem;\n padding: 0.5rem 0;\n}\n.styles_caption-element__-9Bt-:hover {\n border-radius: 4px;\n border: 2px dashed #6c6c6c;\n}\n\n.styles_caption-controls-element__Pwjxq {\n position: absolute;\n bottom: 7.5%;\n left: 50%;\n width: 40px;\n height: 35px;\n background-color: rgba(255, 255, 255, 0.7);\n border-radius: 4px;\n border: 2px solid #6c6c6c;\n cursor: pointer;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.styles_remove-caption-button__OzMEn,\n.styles_add-caption-button__2rKuu {\n cursor: pointer;\n font-size: 20px;\n}\n\n.styles_remove-caption-button__OzMEn:hover,\n.styles_add-caption-button__2rKuu:hover {\n opacity: 0.5;\n}\n\n.styles_dot-element__TQRBe {\n position: absolute;\n border: 1.5px solid #6c6c6c;\n border-radius: 50%;\n}\n\n.styles_image-alignment-container__5byQ2 {\n position: absolute;\n top: 0%;\n left: 50%;\n width: 100px;\n height: 25px;\n background-color: rgba(255, 255, 255, 0.7);\n border-radius: 4px;\n border: 2px solid #6c6c6c;\n cursor: pointer;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 10px;\n}\n\n.styles_image-alignment-control__r3rTj {\n cursor: pointer;\n font-size: 20px;\n}\n.styles_image-alignment-control__r3rTj:hover {\n opacity: 0.5;\n}\n";
|
|
236
251
|
var styles = {"wrapper-element":"styles_wrapper-element__SoyDK","active":"styles_active__kXAaT","caption-element":"styles_caption-element__-9Bt-","caption-controls-element":"styles_caption-controls-element__Pwjxq","remove-caption-button":"styles_remove-caption-button__OzMEn","add-caption-button":"styles_add-caption-button__2rKuu","dot-element":"styles_dot-element__TQRBe","image-alignment-container":"styles_image-alignment-container__5byQ2","image-alignment-control":"styles_image-alignment-control__r3rTj"};
|
|
237
252
|
styleInject(css_248z);
|
|
238
253
|
|
|
@@ -407,11 +422,11 @@ const TiptapImageFigureExtension = ImageExtension.extend({
|
|
|
407
422
|
});
|
|
408
423
|
addCaptionControls(wrapperElement, styles, () => {
|
|
409
424
|
// On caption remove
|
|
410
|
-
changeFigureToImage(wrapperElement);
|
|
425
|
+
changeFigureToImage(this.editor, wrapperElement);
|
|
411
426
|
this.storage.elementsVisible = false;
|
|
412
427
|
}, () => {
|
|
413
428
|
// On caption add
|
|
414
|
-
changeImageToFigure(wrapperElement, captionElement);
|
|
429
|
+
changeImageToFigure(this.editor, wrapperElement, captionElement);
|
|
415
430
|
this.storage.elementsVisible = false;
|
|
416
431
|
});
|
|
417
432
|
this.storage.elementsVisible = true;
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/assets/icons/format-align-left.svg","../src/assets/icons/format-align-center.svg","../src/assets/icons/format-align-right.svg","../src/assets/icons/closed-caption-add.svg","../src/assets/icons/delete.svg","../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-144v-72h672v72H144Zm0-150v-72h480v72H144Zm0-150v-72h672v72H144Zm0-150v-72h480v72H144Zm0-150v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-144v-72h672v72H144Zm144-150v-72h384v72H288ZM144-444v-72h672v72H144Zm144-150v-72h384v72H288ZM144-744v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-744v-72h672v72H144Zm192%20150v-72h480v72H336ZM144-444v-72h672v72H144Zm192%20150v-72h480v72H336ZM144-144v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M480-480Zm120%20288H216q-29.7%200-50.85-21.16Q144-234.32%20144-264.04v-432.24Q144-726%20165.15-747T216-768h528q29.7%200%2050.85%2021.15Q816-725.7%20816-696v288h-72v-288H216v432h384v72Zm144%2072v-72h-72v-72h72v-72h72v72h72v72h-72v72h-72ZM293.29-368h111.86Q421-368%20432-378.78q11-10.78%2011-26.72V-443h-56.14v19H312v-112h75v19h56v-37.89q0-16.11-10.64-26.61Q421.73-592%20406-592H293.01q-16.01%200-26.51%2010.71-10.5%2010.7-10.5%2026.52v148.95Q256-390%20266.72-379t26.57%2011Zm261.22%200h112.55q15.94%200%2026.44-10.78Q704-389.56%20704-405.5V-443h-56.14v19H573v-112h75v19h56v-37.89q0-16.11-10.72-26.61T666.71-592H554.85Q539-592%20528-581.29q-11%2010.7-11%2026.52v148.95Q517-390%20527.79-379q10.78%2011%2026.72%2011Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M312-144q-29.7%200-50.85-21.15Q240-186.3%20240-216v-480h-48v-72h192v-48h192v48h192v72h-48v479.57Q720-186%20698.85-165T648-144H312Zm336-552H312v480h336v-480ZM384-288h72v-336h-72v336Zm120%200h72v-336h-72v336ZM312-696v480-480Z%22%2F%3E%3C%2Fsvg%3E\"","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/assets/icons/format-align-left.svg","../src/assets/icons/format-align-center.svg","../src/assets/icons/format-align-right.svg","../src/assets/icons/closed-caption-add.svg","../src/assets/icons/delete.svg","../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-144v-72h672v72H144Zm0-150v-72h480v72H144Zm0-150v-72h672v72H144Zm0-150v-72h480v72H144Zm0-150v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-144v-72h672v72H144Zm144-150v-72h384v72H288ZM144-444v-72h672v72H144Zm144-150v-72h384v72H288ZM144-744v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-744v-72h672v72H144Zm192%20150v-72h480v72H336ZM144-444v-72h672v72H144Zm192%20150v-72h480v72H336ZM144-144v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M480-480Zm120%20288H216q-29.7%200-50.85-21.16Q144-234.32%20144-264.04v-432.24Q144-726%20165.15-747T216-768h528q29.7%200%2050.85%2021.15Q816-725.7%20816-696v288h-72v-288H216v432h384v72Zm144%2072v-72h-72v-72h72v-72h72v72h72v72h-72v72h-72ZM293.29-368h111.86Q421-368%20432-378.78q11-10.78%2011-26.72V-443h-56.14v19H312v-112h75v19h56v-37.89q0-16.11-10.64-26.61Q421.73-592%20406-592H293.01q-16.01%200-26.51%2010.71-10.5%2010.7-10.5%2026.52v148.95Q256-390%20266.72-379t26.57%2011Zm261.22%200h112.55q15.94%200%2026.44-10.78Q704-389.56%20704-405.5V-443h-56.14v19H573v-112h75v19h56v-37.89q0-16.11-10.72-26.61T666.71-592H554.85Q539-592%20528-581.29q-11%2010.7-11%2026.52v148.95Q517-390%20527.79-379q10.78%2011%2026.72%2011Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M312-144q-29.7%200-50.85-21.15Q240-186.3%20240-216v-480h-48v-72h192v-48h192v48h192v72h-48v479.57Q720-186%20698.85-165T648-144H312Zm336-552H312v480h336v-480ZM384-288h72v-336h-72v336Zm120%200h72v-336h-72v336ZM312-696v480-480Z%22%2F%3E%3C%2Fsvg%3E\"","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,eAAe;;ACAf,iBAAe;;ACAf,gBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAf,2BAAe;;ACAf,iBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAf,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAY,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO;;AAExD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B;AACA,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B;;AAEA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,GAAG,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[5]}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { nodeInputRule, mergeAttributes } from '@tiptap/core';
|
|
2
2
|
import ImageExtension from '@tiptap/extension-image';
|
|
3
|
+
import { TextSelection } from '@tiptap/pm/state';
|
|
3
4
|
|
|
4
5
|
const isMobileScreen = () => document.documentElement.clientWidth < 768;
|
|
5
6
|
|
|
@@ -166,10 +167,13 @@ const addCaptionControls = (wrapperElement, styles, onCaptionRemove, onCaptionAd
|
|
|
166
167
|
}
|
|
167
168
|
};
|
|
168
169
|
|
|
169
|
-
const changeFigureToImage = (wrapperElement) => {
|
|
170
|
+
const changeFigureToImage = (editor, wrapperElement) => {
|
|
171
|
+
const { state, view } = editor;
|
|
172
|
+
const { tr } = state;
|
|
170
173
|
const imageWrapperElement = document.createElement("div");
|
|
171
174
|
const oldAttributes = wrapperElement.attributes;
|
|
172
175
|
const newAttributes = imageWrapperElement.attributes;
|
|
176
|
+
const imageWrapperPosition = view.posAtDOM(wrapperElement, 0);
|
|
173
177
|
// Copy attributes
|
|
174
178
|
for (let i = 0, len = oldAttributes.length; i < len; i++) {
|
|
175
179
|
newAttributes.setNamedItem(oldAttributes.item(i).cloneNode());
|
|
@@ -181,11 +185,18 @@ const changeFigureToImage = (wrapperElement) => {
|
|
|
181
185
|
}
|
|
182
186
|
// Replace wrapperElement with imageWrapperElement
|
|
183
187
|
wrapperElement.replaceWith(imageWrapperElement);
|
|
188
|
+
// Focus on the newly replaced wrapper element
|
|
189
|
+
const newSelection = TextSelection.create(tr.doc, imageWrapperPosition);
|
|
190
|
+
const transaction = tr.setSelection(newSelection);
|
|
191
|
+
view.dispatch(transaction);
|
|
184
192
|
};
|
|
185
|
-
const changeImageToFigure = (wrapperElement, captionElement) => {
|
|
193
|
+
const changeImageToFigure = (editor, wrapperElement, captionElement) => {
|
|
194
|
+
const { state, view } = editor;
|
|
195
|
+
const { tr } = state;
|
|
186
196
|
const figureWrapperElement = document.createElement("figure");
|
|
187
197
|
const oldAttributes = wrapperElement.attributes;
|
|
188
198
|
const newAttributes = figureWrapperElement.attributes;
|
|
199
|
+
const figureWrapperPosition = view.posAtDOM(wrapperElement, 0);
|
|
189
200
|
// Copy attributes
|
|
190
201
|
for (let i = 0, len = oldAttributes.length; i < len; i++) {
|
|
191
202
|
newAttributes.setNamedItem(oldAttributes.item(i).cloneNode());
|
|
@@ -199,6 +210,10 @@ const changeImageToFigure = (wrapperElement, captionElement) => {
|
|
|
199
210
|
figureWrapperElement.appendChild(captionElement);
|
|
200
211
|
// Replace wrapperElement with figureWrapperElement
|
|
201
212
|
wrapperElement.replaceWith(figureWrapperElement);
|
|
213
|
+
// Focus on the newly replaced wrapper element
|
|
214
|
+
const newSelection = TextSelection.create(tr.doc, figureWrapperPosition);
|
|
215
|
+
const transaction = tr.setSelection(newSelection);
|
|
216
|
+
view.dispatch(transaction);
|
|
202
217
|
};
|
|
203
218
|
|
|
204
219
|
function styleInject(css, ref) {
|
|
@@ -228,7 +243,7 @@ function styleInject(css, ref) {
|
|
|
228
243
|
}
|
|
229
244
|
}
|
|
230
245
|
|
|
231
|
-
var css_248z = ".styles_wrapper-element__SoyDK {\n display: flex;\n flex-direction: column;\n position: relative;\n cursor: pointer;\n width: fit-content;\n}\n.styles_wrapper-element__SoyDK.styles_active__kXAaT {\n border: 2px dashed #6c6c6c;\n}\n\n.styles_figure-element__wBqOu {\n}\n\n.styles_caption-element__-9Bt- {\n text-align: center;\n margin-top: 8px;\n min-height: 1em;\n margin: 0.5rem 2rem;\n padding: 0.5rem 0;\n}\n.styles_caption-element__-9Bt-:hover {\n border-radius: 4px;\n border: 2px dashed #6c6c6c;\n}\n\n.styles_caption-controls-element__Pwjxq {\n position: absolute;\n bottom: 7.5%;\n left: 50%;\n width: 40px;\n height: 35px;\n
|
|
246
|
+
var css_248z = ".styles_wrapper-element__SoyDK {\n display: flex;\n flex-direction: column;\n position: relative;\n cursor: pointer;\n width: fit-content;\n margin-inline: 0;\n}\n.styles_wrapper-element__SoyDK.styles_active__kXAaT {\n border: 2px dashed #6c6c6c;\n}\n\n.styles_figure-element__wBqOu {\n}\n\n.styles_caption-element__-9Bt- {\n text-align: center;\n margin-top: 8px;\n min-height: 1em;\n margin: 0.5rem 2rem;\n padding: 0.5rem 0;\n}\n.styles_caption-element__-9Bt-:hover {\n border-radius: 4px;\n border: 2px dashed #6c6c6c;\n}\n\n.styles_caption-controls-element__Pwjxq {\n position: absolute;\n bottom: 7.5%;\n left: 50%;\n width: 40px;\n height: 35px;\n background-color: rgba(255, 255, 255, 0.7);\n border-radius: 4px;\n border: 2px solid #6c6c6c;\n cursor: pointer;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.styles_remove-caption-button__OzMEn,\n.styles_add-caption-button__2rKuu {\n cursor: pointer;\n font-size: 20px;\n}\n\n.styles_remove-caption-button__OzMEn:hover,\n.styles_add-caption-button__2rKuu:hover {\n opacity: 0.5;\n}\n\n.styles_dot-element__TQRBe {\n position: absolute;\n border: 1.5px solid #6c6c6c;\n border-radius: 50%;\n}\n\n.styles_image-alignment-container__5byQ2 {\n position: absolute;\n top: 0%;\n left: 50%;\n width: 100px;\n height: 25px;\n background-color: rgba(255, 255, 255, 0.7);\n border-radius: 4px;\n border: 2px solid #6c6c6c;\n cursor: pointer;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 10px;\n}\n\n.styles_image-alignment-control__r3rTj {\n cursor: pointer;\n font-size: 20px;\n}\n.styles_image-alignment-control__r3rTj:hover {\n opacity: 0.5;\n}\n";
|
|
232
247
|
var styles = {"wrapper-element":"styles_wrapper-element__SoyDK","active":"styles_active__kXAaT","caption-element":"styles_caption-element__-9Bt-","caption-controls-element":"styles_caption-controls-element__Pwjxq","remove-caption-button":"styles_remove-caption-button__OzMEn","add-caption-button":"styles_add-caption-button__2rKuu","dot-element":"styles_dot-element__TQRBe","image-alignment-container":"styles_image-alignment-container__5byQ2","image-alignment-control":"styles_image-alignment-control__r3rTj"};
|
|
233
248
|
styleInject(css_248z);
|
|
234
249
|
|
|
@@ -403,11 +418,11 @@ const TiptapImageFigureExtension = ImageExtension.extend({
|
|
|
403
418
|
});
|
|
404
419
|
addCaptionControls(wrapperElement, styles, () => {
|
|
405
420
|
// On caption remove
|
|
406
|
-
changeFigureToImage(wrapperElement);
|
|
421
|
+
changeFigureToImage(this.editor, wrapperElement);
|
|
407
422
|
this.storage.elementsVisible = false;
|
|
408
423
|
}, () => {
|
|
409
424
|
// On caption add
|
|
410
|
-
changeImageToFigure(wrapperElement, captionElement);
|
|
425
|
+
changeImageToFigure(this.editor, wrapperElement, captionElement);
|
|
411
426
|
this.storage.elementsVisible = false;
|
|
412
427
|
});
|
|
413
428
|
this.storage.elementsVisible = true;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/assets/icons/format-align-left.svg","../src/assets/icons/format-align-center.svg","../src/assets/icons/format-align-right.svg","../src/assets/icons/closed-caption-add.svg","../src/assets/icons/delete.svg","../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-144v-72h672v72H144Zm0-150v-72h480v72H144Zm0-150v-72h672v72H144Zm0-150v-72h480v72H144Zm0-150v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-144v-72h672v72H144Zm144-150v-72h384v72H288ZM144-444v-72h672v72H144Zm144-150v-72h384v72H288ZM144-744v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-744v-72h672v72H144Zm192%20150v-72h480v72H336ZM144-444v-72h672v72H144Zm192%20150v-72h480v72H336ZM144-144v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M480-480Zm120%20288H216q-29.7%200-50.85-21.16Q144-234.32%20144-264.04v-432.24Q144-726%20165.15-747T216-768h528q29.7%200%2050.85%2021.15Q816-725.7%20816-696v288h-72v-288H216v432h384v72Zm144%2072v-72h-72v-72h72v-72h72v72h72v72h-72v72h-72ZM293.29-368h111.86Q421-368%20432-378.78q11-10.78%2011-26.72V-443h-56.14v19H312v-112h75v19h56v-37.89q0-16.11-10.64-26.61Q421.73-592%20406-592H293.01q-16.01%200-26.51%2010.71-10.5%2010.7-10.5%2026.52v148.95Q256-390%20266.72-379t26.57%2011Zm261.22%200h112.55q15.94%200%2026.44-10.78Q704-389.56%20704-405.5V-443h-56.14v19H573v-112h75v19h56v-37.89q0-16.11-10.72-26.61T666.71-592H554.85Q539-592%20528-581.29q-11%2010.7-11%2026.52v148.95Q517-390%20527.79-379q10.78%2011%2026.72%2011Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M312-144q-29.7%200-50.85-21.15Q240-186.3%20240-216v-480h-48v-72h192v-48h192v48h192v72h-48v479.57Q720-186%20698.85-165T648-144H312Zm336-552H312v480h336v-480ZM384-288h72v-336h-72v336Zm120%200h72v-336h-72v336ZM312-696v480-480Z%22%2F%3E%3C%2Fsvg%3E\"","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/assets/icons/format-align-left.svg","../src/assets/icons/format-align-center.svg","../src/assets/icons/format-align-right.svg","../src/assets/icons/closed-caption-add.svg","../src/assets/icons/delete.svg","../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-144v-72h672v72H144Zm0-150v-72h480v72H144Zm0-150v-72h672v72H144Zm0-150v-72h480v72H144Zm0-150v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-144v-72h672v72H144Zm144-150v-72h384v72H288ZM144-444v-72h672v72H144Zm144-150v-72h384v72H288ZM144-744v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M144-744v-72h672v72H144Zm192%20150v-72h480v72H336ZM144-444v-72h672v72H144Zm192%20150v-72h480v72H336ZM144-144v-72h672v72H144Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M480-480Zm120%20288H216q-29.7%200-50.85-21.16Q144-234.32%20144-264.04v-432.24Q144-726%20165.15-747T216-768h528q29.7%200%2050.85%2021.15Q816-725.7%20816-696v288h-72v-288H216v432h384v72Zm144%2072v-72h-72v-72h72v-72h72v72h72v72h-72v72h-72ZM293.29-368h111.86Q421-368%20432-378.78q11-10.78%2011-26.72V-443h-56.14v19H312v-112h75v19h56v-37.89q0-16.11-10.64-26.61Q421.73-592%20406-592H293.01q-16.01%200-26.51%2010.71-10.5%2010.7-10.5%2026.52v148.95Q256-390%20266.72-379t26.57%2011Zm261.22%200h112.55q15.94%200%2026.44-10.78Q704-389.56%20704-405.5V-443h-56.14v19H573v-112h75v19h56v-37.89q0-16.11-10.72-26.61T666.71-592H554.85Q539-592%20528-581.29q-11%2010.7-11%2026.52v148.95Q517-390%20527.79-379q10.78%2011%2026.72%2011Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2220px%22%20viewBox%3D%220%20-960%20960%20960%22%20width%3D%2220px%22%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M312-144q-29.7%200-50.85-21.15Q240-186.3%20240-216v-480h-48v-72h192v-48h192v48h192v72h-48v479.57Q720-186%20698.85-165T648-144H312Zm336-552H312v480h336v-480ZM384-288h72v-336h-72v336Zm120%200h72v-336h-72v336ZM312-696v480-480Z%22%2F%3E%3C%2Fsvg%3E\"","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,eAAe;;ACAf,iBAAe;;ACAf,gBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAf,2BAAe;;ACAf,iBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAf,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAY,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO;;AAExD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B;AACA,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B;;AAEA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,GAAG,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[5]}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const
|
|
1
|
+
import { Editor } from "@tiptap/core";
|
|
2
|
+
export declare const changeFigureToImage: (editor: Editor, wrapperElement: HTMLElement) => void;
|
|
3
|
+
export declare const changeImageToFigure: (editor: Editor, wrapperElement: HTMLElement, captionElement: HTMLElement) => void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pentestpad/tiptap-extension-figure",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "An extension for Tiptap that allows you to add and edit captions for images as well as align and resize them.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.cjs.js",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"@tiptap/core": "^2.11.5",
|
|
19
19
|
"@tiptap/extension-image": "^2.11.5",
|
|
20
20
|
"@tiptap/pm": "^2.11.5",
|
|
21
|
-
"rollup": "^4.34.
|
|
21
|
+
"rollup": "^4.34.7",
|
|
22
22
|
"rollup-plugin-auto-external": "^2.0.0",
|
|
23
23
|
"rollup-plugin-postcss": "^4.0.2",
|
|
24
24
|
"rollup-plugin-sourcemaps": "^0.6.3",
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
position: relative;
|
|
5
5
|
cursor: pointer;
|
|
6
6
|
width: fit-content;
|
|
7
|
+
margin-inline: 0;
|
|
7
8
|
}
|
|
8
9
|
.wrapper-element.active {
|
|
9
10
|
border: 2px dashed #6c6c6c;
|
|
@@ -30,7 +31,6 @@
|
|
|
30
31
|
left: 50%;
|
|
31
32
|
width: 40px;
|
|
32
33
|
height: 35px;
|
|
33
|
-
z-index: 999;
|
|
34
34
|
background-color: rgba(255, 255, 255, 0.7);
|
|
35
35
|
border-radius: 4px;
|
|
36
36
|
border: 2px solid #6c6c6c;
|
|
@@ -64,7 +64,6 @@
|
|
|
64
64
|
left: 50%;
|
|
65
65
|
width: 100px;
|
|
66
66
|
height: 25px;
|
|
67
|
-
z-index: 999;
|
|
68
67
|
background-color: rgba(255, 255, 255, 0.7);
|
|
69
68
|
border-radius: 4px;
|
|
70
69
|
border: 2px solid #6c6c6c;
|
|
@@ -242,13 +242,13 @@ const TiptapImageFigureExtension = ImageExtension.extend<ImageOptions>({
|
|
|
242
242
|
styles,
|
|
243
243
|
() => {
|
|
244
244
|
// On caption remove
|
|
245
|
-
changeFigureToImage(wrapperElement);
|
|
245
|
+
changeFigureToImage(this.editor, wrapperElement);
|
|
246
246
|
|
|
247
247
|
this.storage.elementsVisible = false;
|
|
248
248
|
},
|
|
249
249
|
() => {
|
|
250
250
|
// On caption add
|
|
251
|
-
changeImageToFigure(wrapperElement, captionElement);
|
|
251
|
+
changeImageToFigure(this.editor, wrapperElement, captionElement);
|
|
252
252
|
|
|
253
253
|
this.storage.elementsVisible = false;
|
|
254
254
|
}
|
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
import { Editor } from "@tiptap/core";
|
|
2
|
+
import { TextSelection } from "@tiptap/pm/state";
|
|
3
|
+
|
|
4
|
+
export const changeFigureToImage = (
|
|
5
|
+
editor: Editor,
|
|
6
|
+
wrapperElement: HTMLElement
|
|
7
|
+
) => {
|
|
8
|
+
const { state, view } = editor;
|
|
9
|
+
const { tr } = state;
|
|
2
10
|
const imageWrapperElement = document.createElement("div");
|
|
3
11
|
const oldAttributes = wrapperElement.attributes;
|
|
4
12
|
const newAttributes = imageWrapperElement.attributes;
|
|
13
|
+
const imageWrapperPosition = view.posAtDOM(wrapperElement, 0);
|
|
5
14
|
|
|
6
15
|
// Copy attributes
|
|
7
16
|
for (let i = 0, len = oldAttributes.length; i < len; i++) {
|
|
@@ -16,15 +25,24 @@ export const changeFigureToImage = (wrapperElement: HTMLElement) => {
|
|
|
16
25
|
|
|
17
26
|
// Replace wrapperElement with imageWrapperElement
|
|
18
27
|
wrapperElement.replaceWith(imageWrapperElement);
|
|
28
|
+
|
|
29
|
+
// Focus on the newly replaced wrapper element
|
|
30
|
+
const newSelection = TextSelection.create(tr.doc, imageWrapperPosition);
|
|
31
|
+
const transaction = tr.setSelection(newSelection);
|
|
32
|
+
view.dispatch(transaction);
|
|
19
33
|
};
|
|
20
34
|
|
|
21
35
|
export const changeImageToFigure = (
|
|
36
|
+
editor: Editor,
|
|
22
37
|
wrapperElement: HTMLElement,
|
|
23
38
|
captionElement: HTMLElement
|
|
24
39
|
) => {
|
|
40
|
+
const { state, view } = editor;
|
|
41
|
+
const { tr } = state;
|
|
25
42
|
const figureWrapperElement = document.createElement("figure");
|
|
26
43
|
const oldAttributes = wrapperElement.attributes;
|
|
27
44
|
const newAttributes = figureWrapperElement.attributes;
|
|
45
|
+
const figureWrapperPosition = view.posAtDOM(wrapperElement, 0);
|
|
28
46
|
|
|
29
47
|
// Copy attributes
|
|
30
48
|
for (let i = 0, len = oldAttributes.length; i < len; i++) {
|
|
@@ -41,4 +59,9 @@ export const changeImageToFigure = (
|
|
|
41
59
|
|
|
42
60
|
// Replace wrapperElement with figureWrapperElement
|
|
43
61
|
wrapperElement.replaceWith(figureWrapperElement);
|
|
62
|
+
|
|
63
|
+
// Focus on the newly replaced wrapper element
|
|
64
|
+
const newSelection = TextSelection.create(tr.doc, figureWrapperPosition);
|
|
65
|
+
const transaction = tr.setSelection(newSelection);
|
|
66
|
+
view.dispatch(transaction);
|
|
44
67
|
};
|