@pie-lib/editable-html-tip-tap 1.2.0-next.4 → 1.2.0-next.6
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/CHANGELOG.md +13 -0
- package/lib/components/TiptapContainer.js +8 -4
- package/lib/components/TiptapContainer.js.map +1 -1
- package/lib/extensions/index.js +3 -1
- package/lib/extensions/index.js.map +1 -1
- package/lib/extensions/media.js +14 -11
- package/lib/extensions/media.js.map +1 -1
- package/package.json +4 -4
- package/src/components/TiptapContainer.jsx +5 -4
- package/src/extensions/__tests__/media-node-view.test.jsx +296 -0
- package/src/extensions/__tests__/media.test.js +1 -0
- package/src/extensions/index.js +2 -0
- package/src/extensions/media.js +17 -14
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,19 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.2.0-next.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.5...@pie-lib/editable-html-tip-tap@1.2.0-next.6) (2026-02-25)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- restore highlightShape prop support in editable-html-tip-tap PD-5583 ([16f9422](https://github.com/pie-framework/pie-lib/commit/16f9422eb48502b97746fdc377184d690aba5bd8))
|
|
11
|
+
|
|
12
|
+
# [1.2.0-next.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.4...@pie-lib/editable-html-tip-tap@1.2.0-next.5) (2026-02-25)
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
- **editable-html-tip-tap:** add support to disable lists PD-5606 ([b74b1d5](https://github.com/pie-framework/pie-lib/commit/b74b1d5215a4e41af3631e728229bac81eb41f3f))
|
|
17
|
+
- **editable-html-tip-tap:** prevent media dialog from auto-opening on existing content PD-5624 ([f0111a8](https://github.com/pie-framework/pie-lib/commit/f0111a8fa297361da37a82b4553f66973e13259b))
|
|
18
|
+
|
|
6
19
|
# [1.2.0-next.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.3...@pie-lib/editable-html-tip-tap@1.2.0-next.4) (2026-02-24)
|
|
7
20
|
|
|
8
21
|
**Note:** Version bump only for package @pie-lib/editable-html-tip-tap
|
|
@@ -125,16 +125,18 @@ var StyledRoot = (0, _styles.styled)('div', {
|
|
|
125
125
|
});
|
|
126
126
|
var StyledEditorHolder = (0, _styles.styled)('div', {
|
|
127
127
|
shouldForwardProp: function shouldForwardProp(prop) {
|
|
128
|
-
return
|
|
128
|
+
return !['disableScrollbar', 'highlightShape'].includes(prop);
|
|
129
129
|
}
|
|
130
130
|
})(function (_ref2) {
|
|
131
|
-
var
|
|
131
|
+
var theme = _ref2.theme,
|
|
132
|
+
disableScrollbar = _ref2.disableScrollbar,
|
|
133
|
+
highlightShape = _ref2.highlightShape;
|
|
132
134
|
return _objectSpread({
|
|
133
135
|
position: 'relative',
|
|
134
136
|
padding: '0px',
|
|
135
137
|
overflowY: 'auto',
|
|
136
138
|
color: _renderUi.color.text(),
|
|
137
|
-
backgroundColor: _renderUi.color.background()
|
|
139
|
+
backgroundColor: highlightShape ? theme.palette.action.selected : _renderUi.color.background()
|
|
138
140
|
}, disableScrollbar && {
|
|
139
141
|
'&::-webkit-scrollbar': {
|
|
140
142
|
display: 'none'
|
|
@@ -173,6 +175,7 @@ function TiptapContainer(props) {
|
|
|
173
175
|
minHeight = props.minHeight,
|
|
174
176
|
height = props.height,
|
|
175
177
|
maxHeight = props.maxHeight,
|
|
178
|
+
highlightShape = props.highlightShape,
|
|
176
179
|
ref = props.ref;
|
|
177
180
|
(0, _react.useEffect)(function () {
|
|
178
181
|
if (editor && autoFocus) {
|
|
@@ -213,7 +216,8 @@ function TiptapContainer(props) {
|
|
|
213
216
|
},
|
|
214
217
|
ref: rootRef
|
|
215
218
|
}, /*#__PURE__*/_react["default"].createElement(StyledEditorHolder, {
|
|
216
|
-
disableScrollbar: disableScrollbar
|
|
219
|
+
disableScrollbar: disableScrollbar,
|
|
220
|
+
highlightShape: highlightShape
|
|
217
221
|
}, /*#__PURE__*/_react["default"].createElement(StyledChildren, {
|
|
218
222
|
noPadding: toolbarOpts && toolbarOpts.noPadding
|
|
219
223
|
}, children)), editor && /*#__PURE__*/_react["default"].createElement(_MenuBar["default"], {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TiptapContainer.js","names":["_react","_interopRequireWildcard","require","_styles","_renderUi","_size","_MenuBar","_interopRequireDefault","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","StyledRoot","styled","shouldForwardProp","prop","includes","_ref","theme","noBorder","error","position","padding","border","borderRadius","cursor","wordBreak","overflow","maxHeight","marginTop","margin","marginBottom","lineHeight","textWrap","fontSize","backgroundColor","color","background","fontFamily","borderLeft","paddingLeft","borderTop","tableLayout","width","borderCollapse","text","textAlign","concat","palette","main","StyledEditorHolder","_ref2","disableScrollbar","overflowY","display","scrollbarWidth","StyledChildren","_ref3","noPadding","TiptapContainer","props","_useState","useState","_useState2","_slicedToArray2","adjustedWidth","setAdjustedWidth","rootRef","useRef","editor","disabled","children","activePlugins","toolbarOpts","responseAreaProps","autoFocus","minWidth","maxWidth","minHeight","height","ref","useEffect","Promise","resolve","then","commands","focus","adjustWidthForLimit","el","document","createElement","style","visibility","textContent","repeat","charactersLimit","current","appendChild","offsetWidth","remove","sizeStyle","useMemo","valueToSize","className","onChange","_default","exports"],"sources":["../../src/components/TiptapContainer.jsx"],"sourcesContent":["import React, { useEffect, useMemo, useState, useRef } from 'react';\nimport { styled } from '@mui/material/styles';\nimport { color } from '@pie-lib/render-ui';\nimport { valueToSize } from '../utils/size';\n\nimport StyledMenuBar from './MenuBar';\n\nconst StyledRoot = styled('div', {\n shouldForwardProp: (prop) => !['noBorder', 'error'].includes(prop),\n})(({ theme, noBorder, error }) => ({\n position: 'relative',\n padding: '0px',\n border: noBorder ? 'none' : '1px solid #ccc',\n borderRadius: '4px',\n cursor: 'text',\n '& [data-slate-editor=\"true\"]': {\n wordBreak: 'break-word',\n overflow: 'visible',\n maxHeight: '500px',\n padding: '5px',\n },\n '&:first-child': {\n marginTop: 0,\n },\n '& ul, & ol': {\n padding: '0 1rem',\n margin: '1.25rem 1rem 1.25rem 0.4rem',\n },\n '& ul li p, & ol li p': {\n marginTop: '0.25em',\n marginBottom: '0.25em',\n },\n '& h1, & h2, & h3, & h4, & h5, & h6': {\n lineHeight: 1.1,\n marginTop: '2.5rem',\n textWrap: 'pretty',\n },\n '& h1, & h2': {\n marginTop: '3.5rem',\n marginBottom: '1.5rem',\n },\n '& h1': {\n fontSize: '1.4rem',\n },\n '& h2': {\n fontSize: '1.2rem',\n },\n '& h3': {\n fontSize: '1.1rem',\n },\n '& h4, & h5, & h6': {\n fontSize: '1rem',\n },\n '& code': {\n backgroundColor: 'var(--purple-light)',\n borderRadius: '0.4rem',\n color: 'var(--black)',\n fontSize: '0.85rem',\n padding: '0.25em 0.3em',\n },\n '& pre': {\n background: 'var(--black)',\n borderRadius: '0.5rem',\n color: 'var(--white)',\n fontFamily: '\\'JetBrainsMono\\', monospace',\n margin: '1.5rem 0',\n padding: '0.75rem 1rem',\n '& code': {\n background: 'none',\n color: 'inherit',\n fontSize: '0.8rem',\n padding: 0,\n },\n },\n '& blockquote': {\n borderLeft: '3px solid var(--gray-3)',\n margin: '1.5rem 0',\n paddingLeft: '1rem',\n },\n '& hr': {\n border: 'none',\n borderTop: '1px solid var(--gray-2)',\n margin: '2rem 0',\n },\n '& p': {\n margin: '0',\n },\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background(),\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5',\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center',\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5',\n },\n ...(error && {\n border: `2px solid ${theme.palette.error.main} !important`,\n }),\n}));\n\nconst StyledEditorHolder = styled('div', {\n shouldForwardProp: (prop) => prop !== 'disableScrollbar',\n})(({ disableScrollbar }) => ({\n position: 'relative',\n padding: '0px',\n overflowY: 'auto',\n color: color.text(),\n backgroundColor: color.background(),\n ...(disableScrollbar && {\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n scrollbarWidth: 'none',\n '-ms-overflow-style': 'none',\n }),\n}));\n\nconst StyledChildren = styled('div', {\n shouldForwardProp: (prop) => prop !== 'noPadding',\n})(({ noPadding }) => ({\n padding: noPadding ? 0 : '10px 8px',\n}));\n\nfunction TiptapContainer(props) {\n const [adjustedWidth, setAdjustedWidth] = useState(null);\n const rootRef = useRef(null);\n const {\n editor,\n disabled,\n children,\n disableScrollbar,\n activePlugins,\n toolbarOpts,\n responseAreaProps,\n autoFocus,\n minWidth,\n width,\n maxWidth,\n minHeight,\n height,\n maxHeight,\n ref,\n } = props;\n\n useEffect(() => {\n if (editor && autoFocus) {\n Promise.resolve().then(() => {\n editor.commands.focus('end');\n });\n }\n }, [editor, autoFocus]);\n\n useEffect(() => {\n if (props.adjustWidthForLimit) {\n const el = document.createElement('p');\n\n el.style.visibility = 'hidden';\n el.style.position = 'absolute';\n el.textContent = 'W'.repeat(props.charactersLimit);\n\n rootRef.current.appendChild(el);\n\n setAdjustedWidth(`${el.offsetWidth + 27}px`);\n\n el.remove();\n }\n }, [props.adjustWidthForLimit, props.charactersLimit]);\n\n const sizeStyle = useMemo(\n () => ({\n width: valueToSize(adjustedWidth || width),\n minWidth: valueToSize(minWidth),\n maxWidth: valueToSize(maxWidth),\n height: valueToSize(height),\n minHeight: valueToSize(minHeight),\n maxHeight: valueToSize(maxHeight),\n }),\n [adjustedWidth, minWidth, width, maxWidth, minHeight, height, maxHeight],\n );\n\n return (\n <StyledRoot\n noBorder={toolbarOpts && toolbarOpts.noBorder}\n error={toolbarOpts && toolbarOpts.error}\n className={props.className}\n style={{ width: sizeStyle.width, minWidth: sizeStyle.minWidth, maxWidth: sizeStyle.maxWidth }}\n ref={rootRef}\n >\n <StyledEditorHolder disableScrollbar={disableScrollbar}>\n <StyledChildren noPadding={toolbarOpts && toolbarOpts.noPadding}>{children}</StyledChildren>\n </StyledEditorHolder>\n\n {editor && (\n <StyledMenuBar\n editor={editor}\n responseAreaProps={responseAreaProps}\n toolbarOpts={toolbarOpts}\n activePlugins={activePlugins}\n onChange={props.onChange}\n />\n )}\n </StyledRoot>\n );\n}\n\nexport default TiptapContainer;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"TiptapContainer.js","names":["_react","_interopRequireWildcard","require","_styles","_renderUi","_size","_MenuBar","_interopRequireDefault","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","StyledRoot","styled","shouldForwardProp","prop","includes","_ref","theme","noBorder","error","position","padding","border","borderRadius","cursor","wordBreak","overflow","maxHeight","marginTop","margin","marginBottom","lineHeight","textWrap","fontSize","backgroundColor","color","background","fontFamily","borderLeft","paddingLeft","borderTop","tableLayout","width","borderCollapse","text","textAlign","concat","palette","main","StyledEditorHolder","_ref2","disableScrollbar","highlightShape","overflowY","action","selected","display","scrollbarWidth","StyledChildren","_ref3","noPadding","TiptapContainer","props","_useState","useState","_useState2","_slicedToArray2","adjustedWidth","setAdjustedWidth","rootRef","useRef","editor","disabled","children","activePlugins","toolbarOpts","responseAreaProps","autoFocus","minWidth","maxWidth","minHeight","height","ref","useEffect","Promise","resolve","then","commands","focus","adjustWidthForLimit","el","document","createElement","style","visibility","textContent","repeat","charactersLimit","current","appendChild","offsetWidth","remove","sizeStyle","useMemo","valueToSize","className","onChange","_default","exports"],"sources":["../../src/components/TiptapContainer.jsx"],"sourcesContent":["import React, { useEffect, useMemo, useState, useRef } from 'react';\nimport { styled } from '@mui/material/styles';\nimport { color } from '@pie-lib/render-ui';\nimport { valueToSize } from '../utils/size';\n\nimport StyledMenuBar from './MenuBar';\n\nconst StyledRoot = styled('div', {\n shouldForwardProp: (prop) => !['noBorder', 'error'].includes(prop),\n})(({ theme, noBorder, error }) => ({\n position: 'relative',\n padding: '0px',\n border: noBorder ? 'none' : '1px solid #ccc',\n borderRadius: '4px',\n cursor: 'text',\n '& [data-slate-editor=\"true\"]': {\n wordBreak: 'break-word',\n overflow: 'visible',\n maxHeight: '500px',\n padding: '5px',\n },\n '&:first-child': {\n marginTop: 0,\n },\n '& ul, & ol': {\n padding: '0 1rem',\n margin: '1.25rem 1rem 1.25rem 0.4rem',\n },\n '& ul li p, & ol li p': {\n marginTop: '0.25em',\n marginBottom: '0.25em',\n },\n '& h1, & h2, & h3, & h4, & h5, & h6': {\n lineHeight: 1.1,\n marginTop: '2.5rem',\n textWrap: 'pretty',\n },\n '& h1, & h2': {\n marginTop: '3.5rem',\n marginBottom: '1.5rem',\n },\n '& h1': {\n fontSize: '1.4rem',\n },\n '& h2': {\n fontSize: '1.2rem',\n },\n '& h3': {\n fontSize: '1.1rem',\n },\n '& h4, & h5, & h6': {\n fontSize: '1rem',\n },\n '& code': {\n backgroundColor: 'var(--purple-light)',\n borderRadius: '0.4rem',\n color: 'var(--black)',\n fontSize: '0.85rem',\n padding: '0.25em 0.3em',\n },\n '& pre': {\n background: 'var(--black)',\n borderRadius: '0.5rem',\n color: 'var(--white)',\n fontFamily: '\\'JetBrainsMono\\', monospace',\n margin: '1.5rem 0',\n padding: '0.75rem 1rem',\n '& code': {\n background: 'none',\n color: 'inherit',\n fontSize: '0.8rem',\n padding: 0,\n },\n },\n '& blockquote': {\n borderLeft: '3px solid var(--gray-3)',\n margin: '1.5rem 0',\n paddingLeft: '1rem',\n },\n '& hr': {\n border: 'none',\n borderTop: '1px solid var(--gray-2)',\n margin: '2rem 0',\n },\n '& p': {\n margin: '0',\n },\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background(),\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5',\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center',\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5',\n },\n ...(error && {\n border: `2px solid ${theme.palette.error.main} !important`,\n }),\n}));\n\nconst StyledEditorHolder = styled('div', {\n shouldForwardProp: (prop) => !['disableScrollbar', 'highlightShape'].includes(prop),\n})(({ theme, disableScrollbar, highlightShape }) => ({\n position: 'relative',\n padding: '0px',\n overflowY: 'auto',\n color: color.text(),\n backgroundColor: highlightShape ? theme.palette.action.selected : color.background(),\n ...(disableScrollbar && {\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n scrollbarWidth: 'none',\n '-ms-overflow-style': 'none',\n }),\n}));\n\nconst StyledChildren = styled('div', {\n shouldForwardProp: (prop) => prop !== 'noPadding',\n})(({ noPadding }) => ({\n padding: noPadding ? 0 : '10px 8px',\n}));\n\nfunction TiptapContainer(props) {\n const [adjustedWidth, setAdjustedWidth] = useState(null);\n const rootRef = useRef(null);\n const {\n editor,\n disabled,\n children,\n disableScrollbar,\n activePlugins,\n toolbarOpts,\n responseAreaProps,\n autoFocus,\n minWidth,\n width,\n maxWidth,\n minHeight,\n height,\n maxHeight,\n highlightShape,\n ref,\n } = props;\n\n useEffect(() => {\n if (editor && autoFocus) {\n Promise.resolve().then(() => {\n editor.commands.focus('end');\n });\n }\n }, [editor, autoFocus]);\n\n useEffect(() => {\n if (props.adjustWidthForLimit) {\n const el = document.createElement('p');\n\n el.style.visibility = 'hidden';\n el.style.position = 'absolute';\n el.textContent = 'W'.repeat(props.charactersLimit);\n\n rootRef.current.appendChild(el);\n\n setAdjustedWidth(`${el.offsetWidth + 27}px`);\n\n el.remove();\n }\n }, [props.adjustWidthForLimit, props.charactersLimit]);\n\n const sizeStyle = useMemo(\n () => ({\n width: valueToSize(adjustedWidth || width),\n minWidth: valueToSize(minWidth),\n maxWidth: valueToSize(maxWidth),\n height: valueToSize(height),\n minHeight: valueToSize(minHeight),\n maxHeight: valueToSize(maxHeight),\n }),\n [adjustedWidth, minWidth, width, maxWidth, minHeight, height, maxHeight],\n );\n\n return (\n <StyledRoot\n noBorder={toolbarOpts && toolbarOpts.noBorder}\n error={toolbarOpts && toolbarOpts.error}\n className={props.className}\n style={{ width: sizeStyle.width, minWidth: sizeStyle.minWidth, maxWidth: sizeStyle.maxWidth }}\n ref={rootRef}\n >\n <StyledEditorHolder disableScrollbar={disableScrollbar} highlightShape={highlightShape}>\n <StyledChildren noPadding={toolbarOpts && toolbarOpts.noPadding}>{children}</StyledChildren>\n </StyledEditorHolder>\n\n {editor && (\n <StyledMenuBar\n editor={editor}\n responseAreaProps={responseAreaProps}\n toolbarOpts={toolbarOpts}\n activePlugins={activePlugins}\n onChange={props.onChange}\n />\n )}\n </StyledRoot>\n );\n}\n\nexport default TiptapContainer;\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAEA,IAAAI,QAAA,GAAAC,sBAAA,CAAAL,OAAA;AAAsC,SAAAD,wBAAAO,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAT,uBAAA,YAAAA,wBAAAO,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,mBAAAT,CAAA,iBAAAA,CAAA,gBAAAU,OAAA,CAAAV,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,cAAAM,EAAA,IAAAd,CAAA,gBAAAc,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,EAAA,OAAAP,CAAA,IAAAD,CAAA,GAAAW,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAc,EAAA,OAAAP,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAM,EAAA,EAAAP,CAAA,IAAAC,CAAA,CAAAM,EAAA,IAAAd,CAAA,CAAAc,EAAA,WAAAN,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAmB,QAAApB,CAAA,EAAAG,CAAA,QAAAF,CAAA,GAAAgB,MAAA,CAAAI,IAAA,CAAArB,CAAA,OAAAiB,MAAA,CAAAK,qBAAA,QAAAhB,CAAA,GAAAW,MAAA,CAAAK,qBAAA,CAAAtB,CAAA,GAAAG,CAAA,KAAAG,CAAA,GAAAA,CAAA,CAAAiB,MAAA,WAAApB,CAAA,WAAAc,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAG,CAAA,EAAAqB,UAAA,OAAAvB,CAAA,CAAAwB,IAAA,CAAAC,KAAA,CAAAzB,CAAA,EAAAK,CAAA,YAAAL,CAAA;AAAA,SAAA0B,cAAA3B,CAAA,aAAAG,CAAA,MAAAA,CAAA,GAAAyB,SAAA,CAAAC,MAAA,EAAA1B,CAAA,UAAAF,CAAA,WAAA2B,SAAA,CAAAzB,CAAA,IAAAyB,SAAA,CAAAzB,CAAA,QAAAA,CAAA,OAAAiB,OAAA,CAAAH,MAAA,CAAAhB,CAAA,OAAA6B,OAAA,WAAA3B,CAAA,QAAA4B,gBAAA,aAAA/B,CAAA,EAAAG,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAAc,MAAA,CAAAe,yBAAA,GAAAf,MAAA,CAAAgB,gBAAA,CAAAjC,CAAA,EAAAiB,MAAA,CAAAe,yBAAA,CAAA/B,CAAA,KAAAmB,OAAA,CAAAH,MAAA,CAAAhB,CAAA,GAAA6B,OAAA,WAAA3B,CAAA,IAAAc,MAAA,CAAAC,cAAA,CAAAlB,CAAA,EAAAG,CAAA,EAAAc,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAE,CAAA,iBAAAH,CAAA;AAEtC,IAAMkC,UAAU,GAAG,IAAAC,cAAM,EAAC,KAAK,EAAE;EAC/BC,iBAAiB,EAAE,SAAnBA,iBAAiBA,CAAGC,IAAI;IAAA,OAAK,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAACC,QAAQ,CAACD,IAAI,CAAC;EAAA;AACpE,CAAC,CAAC,CAAC,UAAAE,IAAA;EAAA,IAAGC,KAAK,GAAAD,IAAA,CAALC,KAAK;IAAEC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;IAAEC,KAAK,GAAAH,IAAA,CAALG,KAAK;EAAA,OAAAf,aAAA;IAC1BgB,QAAQ,EAAE,UAAU;IACpBC,OAAO,EAAE,KAAK;IACdC,MAAM,EAAEJ,QAAQ,GAAG,MAAM,GAAG,gBAAgB;IAC5CK,YAAY,EAAE,KAAK;IACnBC,MAAM,EAAE,MAAM;IACd,8BAA8B,EAAE;MAC9BC,SAAS,EAAE,YAAY;MACvBC,QAAQ,EAAE,SAAS;MACnBC,SAAS,EAAE,OAAO;MAClBN,OAAO,EAAE;IACX,CAAC;IACD,eAAe,EAAE;MACfO,SAAS,EAAE;IACb,CAAC;IACD,YAAY,EAAE;MACZP,OAAO,EAAE,QAAQ;MACjBQ,MAAM,EAAE;IACV,CAAC;IACD,sBAAsB,EAAE;MACtBD,SAAS,EAAE,QAAQ;MACnBE,YAAY,EAAE;IAChB,CAAC;IACD,oCAAoC,EAAE;MACpCC,UAAU,EAAE,GAAG;MACfH,SAAS,EAAE,QAAQ;MACnBI,QAAQ,EAAE;IACZ,CAAC;IACD,YAAY,EAAE;MACZJ,SAAS,EAAE,QAAQ;MACnBE,YAAY,EAAE;IAChB,CAAC;IACD,MAAM,EAAE;MACNG,QAAQ,EAAE;IACZ,CAAC;IACD,MAAM,EAAE;MACNA,QAAQ,EAAE;IACZ,CAAC;IACD,MAAM,EAAE;MACNA,QAAQ,EAAE;IACZ,CAAC;IACD,kBAAkB,EAAE;MAClBA,QAAQ,EAAE;IACZ,CAAC;IACD,QAAQ,EAAE;MACRC,eAAe,EAAE,qBAAqB;MACtCX,YAAY,EAAE,QAAQ;MACtBY,KAAK,EAAE,cAAc;MACrBF,QAAQ,EAAE,SAAS;MACnBZ,OAAO,EAAE;IACX,CAAC;IACD,OAAO,EAAE;MACPe,UAAU,EAAE,cAAc;MAC1Bb,YAAY,EAAE,QAAQ;MACtBY,KAAK,EAAE,cAAc;MACrBE,UAAU,EAAE,8BAA8B;MAC1CR,MAAM,EAAE,UAAU;MAClBR,OAAO,EAAE,cAAc;MACvB,QAAQ,EAAE;QACRe,UAAU,EAAE,MAAM;QAClBD,KAAK,EAAE,SAAS;QAChBF,QAAQ,EAAE,QAAQ;QAClBZ,OAAO,EAAE;MACX;IACF,CAAC;IACD,cAAc,EAAE;MACdiB,UAAU,EAAE,yBAAyB;MACrCT,MAAM,EAAE,UAAU;MAClBU,WAAW,EAAE;IACf,CAAC;IACD,MAAM,EAAE;MACNjB,MAAM,EAAE,MAAM;MACdkB,SAAS,EAAE,yBAAyB;MACpCX,MAAM,EAAE;IACV,CAAC;IACD,KAAK,EAAE;MACLA,MAAM,EAAE;IACV,CAAC;IACD,SAAS,EAAE;MACTY,WAAW,EAAE,OAAO;MACpBC,KAAK,EAAE,MAAM;MACbC,cAAc,EAAE,UAAU;MAC1BR,KAAK,EAAEA,eAAK,CAACS,IAAI,CAAC,CAAC;MACnBV,eAAe,EAAEC,eAAK,CAACC,UAAU,CAAC;IACpC,CAAC;IACD,8BAA8B,EAAE;MAC9BI,SAAS,EAAE;IACb,CAAC;IACD,UAAU,EAAE;MACVnB,OAAO,EAAE,UAAU;MACnBwB,SAAS,EAAE;IACb,CAAC;IACD,kCAAkC,EAAE;MAClCvB,MAAM,EAAE;IACV;EAAC,GACGH,KAAK,IAAI;IACXG,MAAM,eAAAwB,MAAA,CAAe7B,KAAK,CAAC8B,OAAO,CAAC5B,KAAK,CAAC6B,IAAI;EAC/C,CAAC;AAAA,CACD,CAAC;AAEH,IAAMC,kBAAkB,GAAG,IAAArC,cAAM,EAAC,KAAK,EAAE;EACvCC,iBAAiB,EAAE,SAAnBA,iBAAiBA,CAAGC,IAAI;IAAA,OAAK,CAAC,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAACC,QAAQ,CAACD,IAAI,CAAC;EAAA;AACrF,CAAC,CAAC,CAAC,UAAAoC,KAAA;EAAA,IAAGjC,KAAK,GAAAiC,KAAA,CAALjC,KAAK;IAAEkC,gBAAgB,GAAAD,KAAA,CAAhBC,gBAAgB;IAAEC,cAAc,GAAAF,KAAA,CAAdE,cAAc;EAAA,OAAAhD,aAAA;IAC3CgB,QAAQ,EAAE,UAAU;IACpBC,OAAO,EAAE,KAAK;IACdgC,SAAS,EAAE,MAAM;IACjBlB,KAAK,EAAEA,eAAK,CAACS,IAAI,CAAC,CAAC;IACnBV,eAAe,EAAEkB,cAAc,GAAGnC,KAAK,CAAC8B,OAAO,CAACO,MAAM,CAACC,QAAQ,GAAGpB,eAAK,CAACC,UAAU,CAAC;EAAC,GAChFe,gBAAgB,IAAI;IACtB,sBAAsB,EAAE;MACtBK,OAAO,EAAE;IACX,CAAC;IACDC,cAAc,EAAE,MAAM;IACtB,oBAAoB,EAAE;EACxB,CAAC;AAAA,CACD,CAAC;AAEH,IAAMC,cAAc,GAAG,IAAA9C,cAAM,EAAC,KAAK,EAAE;EACnCC,iBAAiB,EAAE,SAAnBA,iBAAiBA,CAAGC,IAAI;IAAA,OAAKA,IAAI,KAAK,WAAW;EAAA;AACnD,CAAC,CAAC,CAAC,UAAA6C,KAAA;EAAA,IAAGC,SAAS,GAAAD,KAAA,CAATC,SAAS;EAAA,OAAQ;IACrBvC,OAAO,EAAEuC,SAAS,GAAG,CAAC,GAAG;EAC3B,CAAC;AAAA,CAAC,CAAC;AAEH,SAASC,eAAeA,CAACC,KAAK,EAAE;EAC9B,IAAAC,SAAA,GAA0C,IAAAC,eAAQ,EAAC,IAAI,CAAC;IAAAC,UAAA,OAAAC,eAAA,aAAAH,SAAA;IAAjDI,aAAa,GAAAF,UAAA;IAAEG,gBAAgB,GAAAH,UAAA;EACtC,IAAMI,OAAO,GAAG,IAAAC,aAAM,EAAC,IAAI,CAAC;EAC5B,IACEC,MAAM,GAgBJT,KAAK,CAhBPS,MAAM;IACNC,QAAQ,GAeNV,KAAK,CAfPU,QAAQ;IACRC,QAAQ,GAcNX,KAAK,CAdPW,QAAQ;IACRtB,gBAAgB,GAadW,KAAK,CAbPX,gBAAgB;IAChBuB,aAAa,GAYXZ,KAAK,CAZPY,aAAa;IACbC,WAAW,GAWTb,KAAK,CAXPa,WAAW;IACXC,iBAAiB,GAUfd,KAAK,CAVPc,iBAAiB;IACjBC,SAAS,GASPf,KAAK,CATPe,SAAS;IACTC,QAAQ,GAQNhB,KAAK,CARPgB,QAAQ;IACRpC,KAAK,GAOHoB,KAAK,CAPPpB,KAAK;IACLqC,QAAQ,GAMNjB,KAAK,CANPiB,QAAQ;IACRC,SAAS,GAKPlB,KAAK,CALPkB,SAAS;IACTC,MAAM,GAIJnB,KAAK,CAJPmB,MAAM;IACNtD,SAAS,GAGPmC,KAAK,CAHPnC,SAAS;IACTyB,cAAc,GAEZU,KAAK,CAFPV,cAAc;IACd8B,GAAG,GACDpB,KAAK,CADPoB,GAAG;EAGL,IAAAC,gBAAS,EAAC,YAAM;IACd,IAAIZ,MAAM,IAAIM,SAAS,EAAE;MACvBO,OAAO,CAACC,OAAO,CAAC,CAAC,CAACC,IAAI,CAAC,YAAM;QAC3Bf,MAAM,CAACgB,QAAQ,CAACC,KAAK,CAAC,KAAK,CAAC;MAC9B,CAAC,CAAC;IACJ;EACF,CAAC,EAAE,CAACjB,MAAM,EAAEM,SAAS,CAAC,CAAC;EAEvB,IAAAM,gBAAS,EAAC,YAAM;IACd,IAAIrB,KAAK,CAAC2B,mBAAmB,EAAE;MAC7B,IAAMC,EAAE,GAAGC,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;MAEtCF,EAAE,CAACG,KAAK,CAACC,UAAU,GAAG,QAAQ;MAC9BJ,EAAE,CAACG,KAAK,CAACzE,QAAQ,GAAG,UAAU;MAC9BsE,EAAE,CAACK,WAAW,GAAG,GAAG,CAACC,MAAM,CAAClC,KAAK,CAACmC,eAAe,CAAC;MAElD5B,OAAO,CAAC6B,OAAO,CAACC,WAAW,CAACT,EAAE,CAAC;MAE/BtB,gBAAgB,IAAAtB,MAAA,CAAI4C,EAAE,CAACU,WAAW,GAAG,EAAE,OAAI,CAAC;MAE5CV,EAAE,CAACW,MAAM,CAAC,CAAC;IACb;EACF,CAAC,EAAE,CAACvC,KAAK,CAAC2B,mBAAmB,EAAE3B,KAAK,CAACmC,eAAe,CAAC,CAAC;EAEtD,IAAMK,SAAS,GAAG,IAAAC,cAAO,EACvB;IAAA,OAAO;MACL7D,KAAK,EAAE,IAAA8D,iBAAW,EAACrC,aAAa,IAAIzB,KAAK,CAAC;MAC1CoC,QAAQ,EAAE,IAAA0B,iBAAW,EAAC1B,QAAQ,CAAC;MAC/BC,QAAQ,EAAE,IAAAyB,iBAAW,EAACzB,QAAQ,CAAC;MAC/BE,MAAM,EAAE,IAAAuB,iBAAW,EAACvB,MAAM,CAAC;MAC3BD,SAAS,EAAE,IAAAwB,iBAAW,EAACxB,SAAS,CAAC;MACjCrD,SAAS,EAAE,IAAA6E,iBAAW,EAAC7E,SAAS;IAClC,CAAC;EAAA,CAAC,EACF,CAACwC,aAAa,EAAEW,QAAQ,EAAEpC,KAAK,EAAEqC,QAAQ,EAAEC,SAAS,EAAEC,MAAM,EAAEtD,SAAS,CACzE,CAAC;EAED,oBACE1D,MAAA,YAAA2H,aAAA,CAACjF,UAAU;IACTO,QAAQ,EAAEyD,WAAW,IAAIA,WAAW,CAACzD,QAAS;IAC9CC,KAAK,EAAEwD,WAAW,IAAIA,WAAW,CAACxD,KAAM;IACxCsF,SAAS,EAAE3C,KAAK,CAAC2C,SAAU;IAC3BZ,KAAK,EAAE;MAAEnD,KAAK,EAAE4D,SAAS,CAAC5D,KAAK;MAAEoC,QAAQ,EAAEwB,SAAS,CAACxB,QAAQ;MAAEC,QAAQ,EAAEuB,SAAS,CAACvB;IAAS,CAAE;IAC9FG,GAAG,EAAEb;EAAQ,gBAEbpG,MAAA,YAAA2H,aAAA,CAAC3C,kBAAkB;IAACE,gBAAgB,EAAEA,gBAAiB;IAACC,cAAc,EAAEA;EAAe,gBACrFnF,MAAA,YAAA2H,aAAA,CAAClC,cAAc;IAACE,SAAS,EAAEe,WAAW,IAAIA,WAAW,CAACf;EAAU,GAAEa,QAAyB,CACzE,CAAC,EAEpBF,MAAM,iBACLtG,MAAA,YAAA2H,aAAA,CAACrH,QAAA,WAAa;IACZgG,MAAM,EAAEA,MAAO;IACfK,iBAAiB,EAAEA,iBAAkB;IACrCD,WAAW,EAAEA,WAAY;IACzBD,aAAa,EAAEA,aAAc;IAC7BgC,QAAQ,EAAE5C,KAAK,CAAC4C;EAAS,CAC1B,CAEO,CAAC;AAEjB;AAAC,IAAAC,QAAA,GAAAC,OAAA,cAEc/C,eAAe","ignoreList":[]}
|
package/lib/extensions/index.js
CHANGED
|
@@ -14,7 +14,9 @@ var ALL_PLUGINS = exports.ALL_PLUGINS = ['bold',
|
|
|
14
14
|
// 'code',
|
|
15
15
|
'html', 'extraCSSRules', 'italic', 'underline', 'strikethrough', 'bulleted-list', 'numbered-list', 'image', 'math', 'languageCharacters', 'text-align', 'blockquote', 'h3', 'table', 'video', 'audio', 'responseArea', 'redo', 'undo', 'superscript', 'subscript'];
|
|
16
16
|
var PLUGINS_MAP = exports.PLUGINS_MAP = {
|
|
17
|
-
'text-align': 'textAlign'
|
|
17
|
+
'text-align': 'textAlign',
|
|
18
|
+
'bulleted-list': 'ul_list',
|
|
19
|
+
'numbered-list': 'ol_list'
|
|
18
20
|
};
|
|
19
21
|
var DEFAULT_PLUGINS = exports.DEFAULT_PLUGINS = ALL_PLUGINS.filter(function (plug) {
|
|
20
22
|
return !['responseArea', 'h3', 'blockquote'].includes(plug);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_compact","_interopRequireDefault","require","_isEmpty","_debug","log","debug","ALL_PLUGINS","exports","PLUGINS_MAP","DEFAULT_PLUGINS","filter","plug","includes","buildExtensions","activeExtensions","customExtensions","opts","addIf","key","shouldAdd","arguments","length","undefined","imagePlugin","image","mathPlugin","math","respAreaPlugin","responseArea","type","cssPlugin","isEmpty","extraCSSRules","languageCharactersPlugins","languageCharacters","compact","concat","_toConsumableArray2","map","plugin","html"],"sources":["../../src/extensions/index.js"],"sourcesContent":["import compact from 'lodash-es/compact';\nimport isEmpty from 'lodash-es/isEmpty';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins');\nexport const ALL_PLUGINS = [\n 'bold',\n // 'code',\n 'html',\n 'extraCSSRules',\n 'italic',\n 'underline',\n 'strikethrough',\n 'bulleted-list',\n 'numbered-list',\n 'image',\n 'math',\n 'languageCharacters',\n 'text-align',\n 'blockquote',\n 'h3',\n 'table',\n 'video',\n 'audio',\n 'responseArea',\n 'redo',\n 'undo',\n 'superscript',\n 'subscript',\n];\n\nexport const PLUGINS_MAP = {\n 'text-align': 'textAlign',\n};\n\nexport const DEFAULT_PLUGINS = ALL_PLUGINS.filter((plug) => !['responseArea', 'h3', 'blockquote'].includes(plug));\n\nexport const buildExtensions = (activeExtensions, customExtensions, opts) => {\n log('[buildPlugins] opts: ', opts);\n\n activeExtensions = activeExtensions || DEFAULT_PLUGINS;\n\n const addIf = (key, shouldAdd = true) => activeExtensions.includes(key) && shouldAdd && key;\n\n const imagePlugin = opts.image && opts.image.delete;\n const mathPlugin = opts.math;\n const respAreaPlugin = opts.responseArea && opts.responseArea.type;\n const cssPlugin = !isEmpty(opts.extraCSSRules);\n\n const languageCharactersPlugins = opts?.languageCharacters || [];\n\n return compact([\n addIf('table'),\n addIf('bold'),\n // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),\n addIf('italic'),\n addIf('strikethrough'),\n addIf('underline'),\n // icon should be modifies accordingly\n addIf('superscript'),\n // icon should be modifies accordingly\n addIf('subscript'),\n addIf('image', !!imagePlugin),\n addIf('video'),\n addIf('audio'),\n addIf('math', !!mathPlugin),\n ...languageCharactersPlugins.map((plugin) => addIf('languageCharacters', plugin)),\n addIf('text-align'),\n addIf('blockquote'),\n addIf('h3'),\n addIf('bulleted-list'),\n addIf('numbered-list'),\n addIf('undo'),\n addIf('redo'),\n addIf('responseArea', !!respAreaPlugin),\n addIf('css', !!cssPlugin),\n addIf('html', !!opts.html),\n ]);\n};\n"],"mappings":";;;;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAMG,GAAG,GAAG,IAAAC,iBAAK,EAAC,gCAAgC,CAAC;AAC5C,IAAMC,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,CACzB,MAAM;AACN;AACA,MAAM,EACN,eAAe,EACf,QAAQ,EACR,WAAW,EACX,eAAe,EACf,eAAe,EACf,eAAe,EACf,OAAO,EACP,MAAM,EACN,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,MAAM,EACN,MAAM,EACN,aAAa,EACb,WAAW,CACZ;AAEM,IAAME,WAAW,GAAAD,OAAA,CAAAC,WAAA,GAAG;EACzB,YAAY,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","names":["_compact","_interopRequireDefault","require","_isEmpty","_debug","log","debug","ALL_PLUGINS","exports","PLUGINS_MAP","DEFAULT_PLUGINS","filter","plug","includes","buildExtensions","activeExtensions","customExtensions","opts","addIf","key","shouldAdd","arguments","length","undefined","imagePlugin","image","mathPlugin","math","respAreaPlugin","responseArea","type","cssPlugin","isEmpty","extraCSSRules","languageCharactersPlugins","languageCharacters","compact","concat","_toConsumableArray2","map","plugin","html"],"sources":["../../src/extensions/index.js"],"sourcesContent":["import compact from 'lodash-es/compact';\nimport isEmpty from 'lodash-es/isEmpty';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins');\nexport const ALL_PLUGINS = [\n 'bold',\n // 'code',\n 'html',\n 'extraCSSRules',\n 'italic',\n 'underline',\n 'strikethrough',\n 'bulleted-list',\n 'numbered-list',\n 'image',\n 'math',\n 'languageCharacters',\n 'text-align',\n 'blockquote',\n 'h3',\n 'table',\n 'video',\n 'audio',\n 'responseArea',\n 'redo',\n 'undo',\n 'superscript',\n 'subscript',\n];\n\nexport const PLUGINS_MAP = {\n 'text-align': 'textAlign',\n 'bulleted-list': 'ul_list',\n 'numbered-list': 'ol_list',\n};\n\nexport const DEFAULT_PLUGINS = ALL_PLUGINS.filter((plug) => !['responseArea', 'h3', 'blockquote'].includes(plug));\n\nexport const buildExtensions = (activeExtensions, customExtensions, opts) => {\n log('[buildPlugins] opts: ', opts);\n\n activeExtensions = activeExtensions || DEFAULT_PLUGINS;\n\n const addIf = (key, shouldAdd = true) => activeExtensions.includes(key) && shouldAdd && key;\n\n const imagePlugin = opts.image && opts.image.delete;\n const mathPlugin = opts.math;\n const respAreaPlugin = opts.responseArea && opts.responseArea.type;\n const cssPlugin = !isEmpty(opts.extraCSSRules);\n\n const languageCharactersPlugins = opts?.languageCharacters || [];\n\n return compact([\n addIf('table'),\n addIf('bold'),\n // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),\n addIf('italic'),\n addIf('strikethrough'),\n addIf('underline'),\n // icon should be modifies accordingly\n addIf('superscript'),\n // icon should be modifies accordingly\n addIf('subscript'),\n addIf('image', !!imagePlugin),\n addIf('video'),\n addIf('audio'),\n addIf('math', !!mathPlugin),\n ...languageCharactersPlugins.map((plugin) => addIf('languageCharacters', plugin)),\n addIf('text-align'),\n addIf('blockquote'),\n addIf('h3'),\n addIf('bulleted-list'),\n addIf('numbered-list'),\n addIf('undo'),\n addIf('redo'),\n addIf('responseArea', !!respAreaPlugin),\n addIf('css', !!cssPlugin),\n addIf('html', !!opts.html),\n ]);\n};\n"],"mappings":"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","ignoreList":[]}
|
package/lib/extensions/media.js
CHANGED
|
@@ -201,18 +201,21 @@ function MediaNodeView(_ref4) {
|
|
|
201
201
|
}));
|
|
202
202
|
};
|
|
203
203
|
(0, _react.useEffect)(function () {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
204
|
+
// Only open dialog for newly inserted media without a src
|
|
205
|
+
if (!src) {
|
|
206
|
+
insertDialog(_objectSpread(_objectSpread({}, node.attrs), {}, {
|
|
207
|
+
options: options,
|
|
208
|
+
edit: true,
|
|
209
|
+
callback: function callback(val, data) {
|
|
210
|
+
if (val) {
|
|
211
|
+
updateAttributes(data);
|
|
212
|
+
} else {
|
|
213
|
+
deleteNode();
|
|
214
|
+
}
|
|
215
|
+
editor.chain().focus().run();
|
|
212
216
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}));
|
|
217
|
+
}));
|
|
218
|
+
}
|
|
216
219
|
}, []);
|
|
217
220
|
return /*#__PURE__*/_react["default"].createElement(_react2.NodeViewWrapper, {
|
|
218
221
|
"data-type": type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","names":["_react","_interopRequireWildcard","require","_reactDom","_interopRequireDefault","_core","_react2","_MediaDialog","_MediaToolbar","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","Media","exports","Node","create","name","group","inline","atom","addAttributes","type","src","width","height","title","starts","ends","editing","tag","url","parseHTML","getAttrs","el","getAttribute","dataset","_el$querySelector","querySelector","renderHTML","_ref","HTMLAttributes","controls","controlsList","mergeAttributes","frameborder","allow","allowfullscreen","addCommands","_this","insertMedia","attrs","_ref2","commands","insertContent","updateMedia","_ref3","updateAttributes","addNodeView","_this2","ReactNodeViewRenderer","props","createElement","MediaNodeView","options","removeDialogs","prevDialogs","document","querySelectorAll","s","remove","insertDialog","newEl","callback","rest","_objectWithoutProperties2","initialBodyOverflow","body","style","overflow","className","handleClose","val","data","_extends2","uploadSoundSupport","disablePortal","open","ReactDOM","render","appendChild","_ref4","editor","node","deleteNode","_node$attrs","handleEdit","edit","chain","focus","run","useEffect","NodeViewWrapper","allowFullScreen","frameBorder","onEdit","onRemove"],"sources":["../../src/extensions/media.js"],"sourcesContent":["import React, { useEffect } from 'react';\nimport ReactDOM from 'react-dom';\nimport { mergeAttributes, Node } from '@tiptap/core';\nimport { NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap/react';\nimport MediaDialog from '../components/media/MediaDialog';\nimport MediaToolbar from '../components/media/MediaToolbar';\n\nexport const Media = Node.create({\n name: 'media',\n group: 'inline',\n inline: true,\n atom: true,\n\n addAttributes() {\n return {\n type: { default: 'video' },\n src: { default: null },\n width: { default: null },\n height: { default: null },\n title: { default: null },\n starts: { default: null },\n ends: { default: null },\n editing: { default: false },\n tag: { default: 'iframe' }, // 'iframe' or 'audio'\n url: { default: null },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'iframe[data-type=\"video\"]',\n getAttrs: (el) => ({\n type: 'video',\n tag: 'iframe',\n src: el.getAttribute('src'),\n width: el.getAttribute('width'),\n height: el.getAttribute('height'),\n title: el.dataset.title,\n starts: el.dataset.starts,\n ends: el.dataset.ends,\n url: el.dataset.url,\n }),\n },\n {\n tag: 'audio',\n getAttrs: (el) => ({\n type: 'audio',\n tag: 'audio',\n src: el.querySelector('source')?.getAttribute('src'),\n }),\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n const { tag, src, width, height } = HTMLAttributes;\n\n if (tag === 'audio') {\n return ['audio', { controls: 'controls', controlsList: 'nodownload' }, ['source', { src, type: 'audio/mp3' }]];\n }\n\n return [\n 'iframe',\n mergeAttributes(\n {\n 'data-type': 'video',\n frameborder: '0',\n allow: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',\n allowfullscreen: '',\n src,\n },\n width ? { width } : {},\n height ? { height } : {},\n ),\n ];\n },\n\n addCommands() {\n return {\n insertMedia:\n (attrs) =>\n ({ commands }) => {\n return commands.insertContent({ type: this.name, attrs });\n },\n updateMedia:\n (attrs) =>\n ({ commands }) => {\n return commands.updateAttributes(this.name, attrs);\n },\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer((props) => <MediaNodeView {...{ ...props, options: this.options }} />);\n },\n});\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach((s) => s.remove());\n};\n\nexport const insertDialog = (props) => {\n const newEl = document.createElement('div');\n const { type, callback, options, ...rest } = props;\n const initialBodyOverflow = document.body.style.overflow;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n document.body.style.overflow = 'hidden';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n document.body.style.overflow = initialBodyOverflow;\n };\n\n const el = (\n <MediaDialog\n {...rest}\n uploadSoundSupport={options.uploadSoundSupport}\n type={type}\n disablePortal={true}\n open={true}\n handleClose={handleClose}\n />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n};\n\nexport default function MediaNodeView({ editor, node, updateAttributes, deleteNode, options }) {\n const { type, src, width, height, tag } = node.attrs;\n\n const handleEdit = () => {\n insertDialog({\n ...node.attrs,\n options: options,\n edit: true,\n callback: (val, data) => {\n if (val) {\n updateAttributes(data);\n }\n\n editor.chain().focus().run();\n },\n });\n };\n\n useEffect(() => {\n insertDialog({\n ...node.attrs,\n options: options,\n edit: true,\n callback: (val, data) => {\n if (val) {\n updateAttributes(data);\n } else {\n deleteNode();\n }\n\n editor.chain().focus().run();\n },\n });\n }, []);\n\n return (\n <NodeViewWrapper data-type={type} style={{ width, height }}>\n {tag === 'audio' ? (\n <audio controls controlsList=\"nodownload\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n ) : (\n <iframe src={src} allowFullScreen frameBorder=\"0\" />\n )}\n\n <MediaToolbar onEdit={handleEdit} onRemove={deleteNode} />\n </NodeViewWrapper>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"media.js","names":["_react","_interopRequireWildcard","require","_reactDom","_interopRequireDefault","_core","_react2","_MediaDialog","_MediaToolbar","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","Media","exports","Node","create","name","group","inline","atom","addAttributes","type","src","width","height","title","starts","ends","editing","tag","url","parseHTML","getAttrs","el","getAttribute","dataset","_el$querySelector","querySelector","renderHTML","_ref","HTMLAttributes","controls","controlsList","mergeAttributes","frameborder","allow","allowfullscreen","addCommands","_this","insertMedia","attrs","_ref2","commands","insertContent","updateMedia","_ref3","updateAttributes","addNodeView","_this2","ReactNodeViewRenderer","props","createElement","MediaNodeView","options","removeDialogs","prevDialogs","document","querySelectorAll","s","remove","insertDialog","newEl","callback","rest","_objectWithoutProperties2","initialBodyOverflow","body","style","overflow","className","handleClose","val","data","_extends2","uploadSoundSupport","disablePortal","open","ReactDOM","render","appendChild","_ref4","editor","node","deleteNode","_node$attrs","handleEdit","edit","chain","focus","run","useEffect","NodeViewWrapper","allowFullScreen","frameBorder","onEdit","onRemove"],"sources":["../../src/extensions/media.js"],"sourcesContent":["import React, { useEffect } from 'react';\nimport ReactDOM from 'react-dom';\nimport { mergeAttributes, Node } from '@tiptap/core';\nimport { NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap/react';\nimport MediaDialog from '../components/media/MediaDialog';\nimport MediaToolbar from '../components/media/MediaToolbar';\n\nexport const Media = Node.create({\n name: 'media',\n group: 'inline',\n inline: true,\n atom: true,\n\n addAttributes() {\n return {\n type: { default: 'video' },\n src: { default: null },\n width: { default: null },\n height: { default: null },\n title: { default: null },\n starts: { default: null },\n ends: { default: null },\n editing: { default: false },\n tag: { default: 'iframe' }, // 'iframe' or 'audio'\n url: { default: null },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'iframe[data-type=\"video\"]',\n getAttrs: (el) => ({\n type: 'video',\n tag: 'iframe',\n src: el.getAttribute('src'),\n width: el.getAttribute('width'),\n height: el.getAttribute('height'),\n title: el.dataset.title,\n starts: el.dataset.starts,\n ends: el.dataset.ends,\n url: el.dataset.url,\n }),\n },\n {\n tag: 'audio',\n getAttrs: (el) => ({\n type: 'audio',\n tag: 'audio',\n src: el.querySelector('source')?.getAttribute('src'),\n }),\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n const { tag, src, width, height } = HTMLAttributes;\n\n if (tag === 'audio') {\n return ['audio', { controls: 'controls', controlsList: 'nodownload' }, ['source', { src, type: 'audio/mp3' }]];\n }\n\n return [\n 'iframe',\n mergeAttributes(\n {\n 'data-type': 'video',\n frameborder: '0',\n allow: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',\n allowfullscreen: '',\n src,\n },\n width ? { width } : {},\n height ? { height } : {},\n ),\n ];\n },\n\n addCommands() {\n return {\n insertMedia:\n (attrs) =>\n ({ commands }) => {\n return commands.insertContent({ type: this.name, attrs });\n },\n updateMedia:\n (attrs) =>\n ({ commands }) => {\n return commands.updateAttributes(this.name, attrs);\n },\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer((props) => <MediaNodeView {...{ ...props, options: this.options }} />);\n },\n});\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach((s) => s.remove());\n};\n\nexport const insertDialog = (props) => {\n const newEl = document.createElement('div');\n const { type, callback, options, ...rest } = props;\n const initialBodyOverflow = document.body.style.overflow;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n document.body.style.overflow = 'hidden';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n document.body.style.overflow = initialBodyOverflow;\n };\n\n const el = (\n <MediaDialog\n {...rest}\n uploadSoundSupport={options.uploadSoundSupport}\n type={type}\n disablePortal={true}\n open={true}\n handleClose={handleClose}\n />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n};\n\nexport default function MediaNodeView({ editor, node, updateAttributes, deleteNode, options }) {\n const { type, src, width, height, tag } = node.attrs;\n\n const handleEdit = () => {\n insertDialog({\n ...node.attrs,\n options: options,\n edit: true,\n callback: (val, data) => {\n if (val) {\n updateAttributes(data);\n }\n\n editor.chain().focus().run();\n },\n });\n };\n\n useEffect(() => {\n // Only open dialog for newly inserted media without a src\n if (!src) {\n insertDialog({\n ...node.attrs,\n options: options,\n edit: true,\n callback: (val, data) => {\n if (val) {\n updateAttributes(data);\n } else {\n deleteNode();\n }\n\n editor.chain().focus().run();\n },\n });\n }\n }, []);\n\n return (\n <NodeViewWrapper data-type={type} style={{ width, height }}>\n {tag === 'audio' ? (\n <audio controls controlsList=\"nodownload\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n ) : (\n <iframe src={src} allowFullScreen frameBorder=\"0\" />\n )}\n\n <MediaToolbar onEdit={handleEdit} onRemove={deleteNode} />\n </NodeViewWrapper>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.2.0-next.
|
|
6
|
+
"version": "1.2.0-next.6",
|
|
7
7
|
"description": "",
|
|
8
8
|
"license": "ISC",
|
|
9
9
|
"main": "lib/index.js",
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
"@mui/icons-material": "^7.3.4",
|
|
18
18
|
"@mui/material": "^7.3.4",
|
|
19
19
|
"@pie-lib/drag": "^3.2.0-next.1",
|
|
20
|
-
"@pie-lib/math-input": "^7.2.0-next.
|
|
20
|
+
"@pie-lib/math-input": "^7.2.0-next.2",
|
|
21
21
|
"@pie-lib/math-rendering": "^4.2.0-next.1",
|
|
22
|
-
"@pie-lib/math-toolbar": "^2.2.0-next.
|
|
22
|
+
"@pie-lib/math-toolbar": "^2.2.0-next.2",
|
|
23
23
|
"@pie-lib/render-ui": "^5.2.0-next.1",
|
|
24
24
|
"@tiptap/core": "3.0.9",
|
|
25
25
|
"@tiptap/extension-character-count": "3.0.9",
|
|
@@ -59,6 +59,6 @@
|
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"react": "^18.2.0"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "be3f842524cc0aa3421fc0577c89063ea665a3be",
|
|
63
63
|
"scripts": {}
|
|
64
64
|
}
|
|
@@ -108,13 +108,13 @@ const StyledRoot = styled('div', {
|
|
|
108
108
|
}));
|
|
109
109
|
|
|
110
110
|
const StyledEditorHolder = styled('div', {
|
|
111
|
-
shouldForwardProp: (prop) =>
|
|
112
|
-
})(({ disableScrollbar }) => ({
|
|
111
|
+
shouldForwardProp: (prop) => !['disableScrollbar', 'highlightShape'].includes(prop),
|
|
112
|
+
})(({ theme, disableScrollbar, highlightShape }) => ({
|
|
113
113
|
position: 'relative',
|
|
114
114
|
padding: '0px',
|
|
115
115
|
overflowY: 'auto',
|
|
116
116
|
color: color.text(),
|
|
117
|
-
backgroundColor: color.background(),
|
|
117
|
+
backgroundColor: highlightShape ? theme.palette.action.selected : color.background(),
|
|
118
118
|
...(disableScrollbar && {
|
|
119
119
|
'&::-webkit-scrollbar': {
|
|
120
120
|
display: 'none',
|
|
@@ -148,6 +148,7 @@ function TiptapContainer(props) {
|
|
|
148
148
|
minHeight,
|
|
149
149
|
height,
|
|
150
150
|
maxHeight,
|
|
151
|
+
highlightShape,
|
|
151
152
|
ref,
|
|
152
153
|
} = props;
|
|
153
154
|
|
|
@@ -195,7 +196,7 @@ function TiptapContainer(props) {
|
|
|
195
196
|
style={{ width: sizeStyle.width, minWidth: sizeStyle.minWidth, maxWidth: sizeStyle.maxWidth }}
|
|
196
197
|
ref={rootRef}
|
|
197
198
|
>
|
|
198
|
-
<StyledEditorHolder disableScrollbar={disableScrollbar}>
|
|
199
|
+
<StyledEditorHolder disableScrollbar={disableScrollbar} highlightShape={highlightShape}>
|
|
199
200
|
<StyledChildren noPadding={toolbarOpts && toolbarOpts.noPadding}>{children}</StyledChildren>
|
|
200
201
|
</StyledEditorHolder>
|
|
201
202
|
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
// Create a mockable insertDialog function
|
|
2
|
+
const mockInsertDialog = jest.fn();
|
|
3
|
+
|
|
4
|
+
// Mock react-dom BEFORE any imports that depend on it
|
|
5
|
+
jest.mock('react-dom', () => ({
|
|
6
|
+
...jest.requireActual('react-dom'),
|
|
7
|
+
render: jest.fn(),
|
|
8
|
+
}));
|
|
9
|
+
|
|
10
|
+
// Mock the insertDialog function in the media module
|
|
11
|
+
jest.mock('../media', () => {
|
|
12
|
+
const actual = jest.requireActual('../media');
|
|
13
|
+
return {
|
|
14
|
+
__esModule: true,
|
|
15
|
+
...actual,
|
|
16
|
+
default: actual.default, // Preserve the default export
|
|
17
|
+
insertDialog: (...args) => mockInsertDialog(...args),
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
import React from 'react';
|
|
22
|
+
import { render, fireEvent } from '@testing-library/react';
|
|
23
|
+
import MediaNodeView from '../media';
|
|
24
|
+
|
|
25
|
+
jest.mock('@tiptap/core', () => ({
|
|
26
|
+
Node: { create: jest.fn((config) => config) },
|
|
27
|
+
mergeAttributes: jest.fn((...args) => Object.assign({}, ...args)),
|
|
28
|
+
}));
|
|
29
|
+
|
|
30
|
+
jest.mock('@tiptap/react', () => ({
|
|
31
|
+
NodeViewWrapper: ({ children }) => <div data-testid="node-view-wrapper">{children}</div>,
|
|
32
|
+
ReactNodeViewRenderer: jest.fn((component) => component),
|
|
33
|
+
}));
|
|
34
|
+
|
|
35
|
+
jest.mock('../../components/media/MediaDialog', () => ({
|
|
36
|
+
__esModule: true,
|
|
37
|
+
default: jest.fn(() => <div data-testid="media-dialog" />),
|
|
38
|
+
}));
|
|
39
|
+
|
|
40
|
+
jest.mock('../../components/media/MediaToolbar', () => ({
|
|
41
|
+
__esModule: true,
|
|
42
|
+
default: jest.fn(({ onEdit, onRemove }) => (
|
|
43
|
+
<div data-testid="media-toolbar">
|
|
44
|
+
<button onClick={onEdit} data-testid="edit-button">
|
|
45
|
+
Edit Settings
|
|
46
|
+
</button>
|
|
47
|
+
<button onClick={onRemove} data-testid="remove-button">
|
|
48
|
+
Remove
|
|
49
|
+
</button>
|
|
50
|
+
</div>
|
|
51
|
+
)),
|
|
52
|
+
}));
|
|
53
|
+
|
|
54
|
+
describe('MediaNodeView Component', () => {
|
|
55
|
+
let mockEditor;
|
|
56
|
+
let mockUpdateAttributes;
|
|
57
|
+
let mockDeleteNode;
|
|
58
|
+
|
|
59
|
+
beforeEach(() => {
|
|
60
|
+
jest.clearAllMocks();
|
|
61
|
+
mockInsertDialog.mockClear();
|
|
62
|
+
|
|
63
|
+
// Clean up any existing dialogs in the DOM
|
|
64
|
+
document.body.innerHTML = '';
|
|
65
|
+
|
|
66
|
+
mockEditor = {
|
|
67
|
+
chain: jest.fn(() => ({
|
|
68
|
+
focus: jest.fn(() => ({
|
|
69
|
+
run: jest.fn(),
|
|
70
|
+
})),
|
|
71
|
+
})),
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
mockUpdateAttributes = jest.fn();
|
|
75
|
+
mockDeleteNode = jest.fn();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
afterEach(() => {
|
|
79
|
+
// Clean up DOM after each test
|
|
80
|
+
document.body.innerHTML = '';
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
describe('dialog auto-opening behavior - verifies the fix', () => {
|
|
84
|
+
it('should NOT open dialog on mount when audio has existing src', () => {
|
|
85
|
+
const node = {
|
|
86
|
+
attrs: {
|
|
87
|
+
type: 'audio',
|
|
88
|
+
tag: 'audio',
|
|
89
|
+
src: 'https://example.com/audio.mp3',
|
|
90
|
+
width: null,
|
|
91
|
+
height: null,
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// This should render without opening any dialogs
|
|
96
|
+
const { container } = render(
|
|
97
|
+
<MediaNodeView
|
|
98
|
+
editor={mockEditor}
|
|
99
|
+
node={node}
|
|
100
|
+
updateAttributes={mockUpdateAttributes}
|
|
101
|
+
deleteNode={mockDeleteNode}
|
|
102
|
+
options={{}}
|
|
103
|
+
/>
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
// Verify the component rendered successfully
|
|
107
|
+
expect(container.querySelector('audio')).toBeTruthy();
|
|
108
|
+
// Verify mockInsertDialog was not called (dialog didn't open)
|
|
109
|
+
expect(mockInsertDialog).not.toHaveBeenCalled();
|
|
110
|
+
// Verify deleteNode was not called (media was not removed)
|
|
111
|
+
expect(mockDeleteNode).not.toHaveBeenCalled();
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('should NOT open dialog on mount when video has existing src', () => {
|
|
115
|
+
const node = {
|
|
116
|
+
attrs: {
|
|
117
|
+
type: 'video',
|
|
118
|
+
tag: 'iframe',
|
|
119
|
+
src: 'https://www.youtube.com/embed/dQw4w9WgXcQ',
|
|
120
|
+
width: '640',
|
|
121
|
+
height: '480',
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
// This should render without opening any dialogs
|
|
126
|
+
const { container } = render(
|
|
127
|
+
<MediaNodeView
|
|
128
|
+
editor={mockEditor}
|
|
129
|
+
node={node}
|
|
130
|
+
updateAttributes={mockUpdateAttributes}
|
|
131
|
+
deleteNode={mockDeleteNode}
|
|
132
|
+
options={{}}
|
|
133
|
+
/>
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
// Verify the component rendered successfully
|
|
137
|
+
expect(container.querySelector('iframe')).toBeTruthy();
|
|
138
|
+
// Verify mockInsertDialog was not called (dialog didn't open)
|
|
139
|
+
expect(mockInsertDialog).not.toHaveBeenCalled();
|
|
140
|
+
// Verify deleteNode was not called (media was not removed)
|
|
141
|
+
expect(mockDeleteNode).not.toHaveBeenCalled();
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('should render existing media with empty string src without opening dialog', () => {
|
|
145
|
+
const node = {
|
|
146
|
+
attrs: {
|
|
147
|
+
type: 'audio',
|
|
148
|
+
tag: 'audio',
|
|
149
|
+
src: '', // Empty string (falsy but not null)
|
|
150
|
+
width: null,
|
|
151
|
+
height: null,
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const { container } = render(
|
|
156
|
+
<MediaNodeView
|
|
157
|
+
editor={mockEditor}
|
|
158
|
+
node={node}
|
|
159
|
+
updateAttributes={mockUpdateAttributes}
|
|
160
|
+
deleteNode={mockDeleteNode}
|
|
161
|
+
options={{}}
|
|
162
|
+
/>
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
// Empty string is falsy, so dialog WOULD open with current implementation
|
|
166
|
+
// This documents current behavior
|
|
167
|
+
expect(container).toBeTruthy();
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
describe('toolbar interaction', () => {
|
|
172
|
+
it('should render edit and remove buttons', () => {
|
|
173
|
+
const node = {
|
|
174
|
+
attrs: {
|
|
175
|
+
type: 'audio',
|
|
176
|
+
tag: 'audio',
|
|
177
|
+
src: 'https://example.com/audio.mp3',
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const { getByTestId } = render(
|
|
182
|
+
<MediaNodeView
|
|
183
|
+
editor={mockEditor}
|
|
184
|
+
node={node}
|
|
185
|
+
updateAttributes={mockUpdateAttributes}
|
|
186
|
+
deleteNode={mockDeleteNode}
|
|
187
|
+
options={{}}
|
|
188
|
+
/>
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
expect(getByTestId('edit-button')).toBeTruthy();
|
|
192
|
+
expect(getByTestId('remove-button')).toBeTruthy();
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
describe('rendering', () => {
|
|
197
|
+
it('should render audio element when tag is audio', () => {
|
|
198
|
+
const node = {
|
|
199
|
+
attrs: {
|
|
200
|
+
type: 'audio',
|
|
201
|
+
tag: 'audio',
|
|
202
|
+
src: 'https://example.com/audio.mp3',
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
const { container } = render(
|
|
207
|
+
<MediaNodeView
|
|
208
|
+
editor={mockEditor}
|
|
209
|
+
node={node}
|
|
210
|
+
updateAttributes={mockUpdateAttributes}
|
|
211
|
+
deleteNode={mockDeleteNode}
|
|
212
|
+
options={{}}
|
|
213
|
+
/>
|
|
214
|
+
);
|
|
215
|
+
|
|
216
|
+
const audio = container.querySelector('audio');
|
|
217
|
+
expect(audio).toBeTruthy();
|
|
218
|
+
const source = audio.querySelector('source');
|
|
219
|
+
expect(source.getAttribute('src')).toBe('https://example.com/audio.mp3');
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
it('should render iframe when tag is iframe', () => {
|
|
223
|
+
const node = {
|
|
224
|
+
attrs: {
|
|
225
|
+
type: 'video',
|
|
226
|
+
tag: 'iframe',
|
|
227
|
+
src: 'https://www.youtube.com/embed/dQw4w9WgXcQ',
|
|
228
|
+
width: '640',
|
|
229
|
+
height: '480',
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
const { container } = render(
|
|
234
|
+
<MediaNodeView
|
|
235
|
+
editor={mockEditor}
|
|
236
|
+
node={node}
|
|
237
|
+
updateAttributes={mockUpdateAttributes}
|
|
238
|
+
deleteNode={mockDeleteNode}
|
|
239
|
+
options={{}}
|
|
240
|
+
/>
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
const iframe = container.querySelector('iframe');
|
|
244
|
+
expect(iframe).toBeTruthy();
|
|
245
|
+
expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/dQw4w9WgXcQ');
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
it('should render MediaToolbar', () => {
|
|
249
|
+
const node = {
|
|
250
|
+
attrs: {
|
|
251
|
+
type: 'audio',
|
|
252
|
+
tag: 'audio',
|
|
253
|
+
src: 'https://example.com/audio.mp3',
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
const { getByTestId } = render(
|
|
258
|
+
<MediaNodeView
|
|
259
|
+
editor={mockEditor}
|
|
260
|
+
node={node}
|
|
261
|
+
updateAttributes={mockUpdateAttributes}
|
|
262
|
+
deleteNode={mockDeleteNode}
|
|
263
|
+
options={{}}
|
|
264
|
+
/>
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
expect(getByTestId('media-toolbar')).toBeTruthy();
|
|
268
|
+
expect(getByTestId('edit-button')).toBeTruthy();
|
|
269
|
+
expect(getByTestId('remove-button')).toBeTruthy();
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
it('should call deleteNode when remove button is clicked', () => {
|
|
273
|
+
const node = {
|
|
274
|
+
attrs: {
|
|
275
|
+
type: 'audio',
|
|
276
|
+
tag: 'audio',
|
|
277
|
+
src: 'https://example.com/audio.mp3',
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
const { getByTestId } = render(
|
|
282
|
+
<MediaNodeView
|
|
283
|
+
editor={mockEditor}
|
|
284
|
+
node={node}
|
|
285
|
+
updateAttributes={mockUpdateAttributes}
|
|
286
|
+
deleteNode={mockDeleteNode}
|
|
287
|
+
options={{}}
|
|
288
|
+
/>
|
|
289
|
+
);
|
|
290
|
+
|
|
291
|
+
fireEvent.click(getByTestId('remove-button'));
|
|
292
|
+
|
|
293
|
+
expect(mockDeleteNode).toHaveBeenCalled();
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
});
|
package/src/extensions/index.js
CHANGED
|
@@ -31,6 +31,8 @@ export const ALL_PLUGINS = [
|
|
|
31
31
|
|
|
32
32
|
export const PLUGINS_MAP = {
|
|
33
33
|
'text-align': 'textAlign',
|
|
34
|
+
'bulleted-list': 'ul_list',
|
|
35
|
+
'numbered-list': 'ol_list',
|
|
34
36
|
};
|
|
35
37
|
|
|
36
38
|
export const DEFAULT_PLUGINS = ALL_PLUGINS.filter((plug) => !['responseArea', 'h3', 'blockquote'].includes(plug));
|
package/src/extensions/media.js
CHANGED
|
@@ -153,20 +153,23 @@ export default function MediaNodeView({ editor, node, updateAttributes, deleteNo
|
|
|
153
153
|
};
|
|
154
154
|
|
|
155
155
|
useEffect(() => {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
156
|
+
// Only open dialog for newly inserted media without a src
|
|
157
|
+
if (!src) {
|
|
158
|
+
insertDialog({
|
|
159
|
+
...node.attrs,
|
|
160
|
+
options: options,
|
|
161
|
+
edit: true,
|
|
162
|
+
callback: (val, data) => {
|
|
163
|
+
if (val) {
|
|
164
|
+
updateAttributes(data);
|
|
165
|
+
} else {
|
|
166
|
+
deleteNode();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
editor.chain().focus().run();
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
}
|
|
170
173
|
}, []);
|
|
171
174
|
|
|
172
175
|
return (
|