@pie-lib/editable-html 13.0.8 → 13.1.0-beta.1
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 +0 -28
- package/lib/__tests__/editor-utils.test.js +164 -0
- package/lib/__tests__/editor-utils.test.js.map +1 -0
- package/lib/__tests__/serialization.test.js +241 -0
- package/lib/__tests__/serialization.test.js.map +1 -0
- package/lib/__tests__/utils.js +79 -0
- package/lib/__tests__/utils.js.map +1 -0
- package/lib/plugins/image/__tests__/component.test.js +96 -0
- package/lib/plugins/image/__tests__/component.test.js.map +1 -0
- package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +131 -0
- package/lib/plugins/image/__tests__/image-toolbar-logic.test.js.map +1 -0
- package/lib/plugins/image/__tests__/image-toolbar.test.js +21 -0
- package/lib/plugins/image/__tests__/image-toolbar.test.js.map +1 -0
- package/lib/plugins/image/__tests__/index.test.js +86 -0
- package/lib/plugins/image/__tests__/index.test.js.map +1 -0
- package/lib/plugins/image/__tests__/insert-image-handler.test.js +112 -0
- package/lib/plugins/image/__tests__/insert-image-handler.test.js.map +1 -0
- package/lib/plugins/image/__tests__/mock-change.js +22 -0
- package/lib/plugins/image/__tests__/mock-change.js.map +1 -0
- package/lib/plugins/list/__tests__/index.test.js +63 -0
- package/lib/plugins/list/__tests__/index.test.js.map +1 -0
- package/lib/plugins/math/__tests__/index.test.js +284 -0
- package/lib/plugins/math/__tests__/index.test.js.map +1 -0
- package/lib/plugins/media/__tests__/index.test.js +69 -0
- package/lib/plugins/media/__tests__/index.test.js.map +1 -0
- package/lib/plugins/respArea/drag-in-the-blank/__tests__/choice.test.js +93 -0
- package/lib/plugins/respArea/drag-in-the-blank/__tests__/choice.test.js.map +1 -0
- package/lib/plugins/respArea/math-templated/index.js +2 -2
- package/lib/plugins/respArea/math-templated/index.js.map +1 -1
- package/lib/plugins/table/__tests__/index.test.js +416 -0
- package/lib/plugins/table/__tests__/index.test.js.map +1 -0
- package/lib/plugins/table/__tests__/table-toolbar.test.js +81 -0
- package/lib/plugins/table/__tests__/table-toolbar.test.js.map +1 -0
- package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +153 -0
- package/lib/plugins/toolbar/__tests__/default-toolbar.test.js.map +1 -0
- package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +47 -0
- package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js.map +1 -0
- package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +112 -0
- package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js.map +1 -0
- package/lib/plugins/toolbar/__tests__/toolbar.test.js +118 -0
- package/lib/plugins/toolbar/__tests__/toolbar.test.js.map +1 -0
- package/lib/shared/alert-dialog.js +68 -0
- package/package.json +7 -7
- package/src/__tests__/utils.js +1 -1
- package/src/plugins/respArea/math-templated/index.jsx +1 -1
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
var _react = _interopRequireDefault(require("react"));
|
|
7
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
8
|
+
var _mockChange = _interopRequireDefault(require("../../image/__tests__/mock-change"));
|
|
9
|
+
var _slate = require("slate");
|
|
10
|
+
var _index = _interopRequireWildcard(require("../index"));
|
|
11
|
+
var _react2 = require("@testing-library/react");
|
|
12
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
13
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
14
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
15
|
+
jest.mock('@pie-framework/mathquill', function () {
|
|
16
|
+
return {
|
|
17
|
+
StaticMath: jest.fn(),
|
|
18
|
+
getInterface: jest.fn().mockReturnThis(),
|
|
19
|
+
registerEmbed: jest.fn()
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
var mockMathToolbarOnChange;
|
|
23
|
+
var mockMathToolbarOnDone;
|
|
24
|
+
jest.mock('@pie-lib/math-toolbar', function () {
|
|
25
|
+
return {
|
|
26
|
+
MathPreview: function MathPreview() {
|
|
27
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
28
|
+
"data-testid": "math-preview"
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
MathToolbar: function MathToolbar(props) {
|
|
32
|
+
// Store callbacks for testing
|
|
33
|
+
mockMathToolbarOnChange = props.onChange;
|
|
34
|
+
mockMathToolbarOnDone = props.onDone;
|
|
35
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
36
|
+
"data-testid": "math-toolbar",
|
|
37
|
+
role: "toolbar"
|
|
38
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
39
|
+
"data-testid": "toolbar-change",
|
|
40
|
+
onClick: function onClick() {
|
|
41
|
+
return props.onChange && props.onChange('test-latex');
|
|
42
|
+
}
|
|
43
|
+
}, "Change"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
44
|
+
"data-testid": "toolbar-done",
|
|
45
|
+
onClick: function onClick() {
|
|
46
|
+
return props.onDone && props.onDone('test-latex');
|
|
47
|
+
}
|
|
48
|
+
}, "Done"));
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
jest.mock('@pie-lib/math-rendering', function () {
|
|
53
|
+
return _objectSpread(_objectSpread({}, jest.requireActual('@pie-lib/math-rendering')), {}, {
|
|
54
|
+
mmlToLatex: jest.fn(function () {
|
|
55
|
+
return '/foobar/latex';
|
|
56
|
+
})
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
var log = (0, _debug["default"])('@pie-lib:editable-html:test:math');
|
|
60
|
+
|
|
61
|
+
// I believe @andrei is moving this stuff out.
|
|
62
|
+
describe('MathPlugin', function () {
|
|
63
|
+
describe('toolbar', function () {
|
|
64
|
+
describe('onClick', function () {
|
|
65
|
+
var plugin, mockChange, value, onChange;
|
|
66
|
+
beforeEach(function () {
|
|
67
|
+
plugin = (0, _index["default"])({});
|
|
68
|
+
mockChange = new _mockChange["default"]();
|
|
69
|
+
value = {
|
|
70
|
+
change: jest.fn(function () {
|
|
71
|
+
return mockChange;
|
|
72
|
+
})
|
|
73
|
+
};
|
|
74
|
+
onChange = jest.fn();
|
|
75
|
+
plugin.toolbar.onClick(value, onChange);
|
|
76
|
+
});
|
|
77
|
+
test('calls insertInline', function () {
|
|
78
|
+
expect(mockChange.insertInline).toBeCalledWith(expect.objectContaining({
|
|
79
|
+
data: (0, _index.inlineMath)().data
|
|
80
|
+
}));
|
|
81
|
+
});
|
|
82
|
+
test('it calls onChange', function () {
|
|
83
|
+
expect(onChange).toHaveBeenCalledWith(mockChange);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('renderNode', function () {
|
|
88
|
+
test('the component has props', function () {
|
|
89
|
+
var plugin = (0, _index["default"])({});
|
|
90
|
+
var _plugin$renderNode = plugin.renderNode({
|
|
91
|
+
node: {
|
|
92
|
+
type: 'math'
|
|
93
|
+
}
|
|
94
|
+
}),
|
|
95
|
+
props = _plugin$renderNode.props;
|
|
96
|
+
expect(props.node).toEqual({
|
|
97
|
+
type: 'math'
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe('serialization', function () {
|
|
102
|
+
describe('deserialize', function () {
|
|
103
|
+
var assertDeserialize = function assertDeserialize(html, expected, wrapType) {
|
|
104
|
+
it("innerHTML: ".concat(html, " is deserialized to: ").concat(expected, " with wrapType: ").concat(wrapType), function () {
|
|
105
|
+
var el = {
|
|
106
|
+
tagName: 'span',
|
|
107
|
+
childNodes: [],
|
|
108
|
+
getAttribute: jest.fn(function () {
|
|
109
|
+
return '';
|
|
110
|
+
}),
|
|
111
|
+
hasAttribute: jest.fn(function () {
|
|
112
|
+
return true;
|
|
113
|
+
}),
|
|
114
|
+
innerHTML: html
|
|
115
|
+
};
|
|
116
|
+
var next = jest.fn();
|
|
117
|
+
var out = _index.serialization.deserialize(el, next);
|
|
118
|
+
expect(out).toEqual({
|
|
119
|
+
object: 'inline',
|
|
120
|
+
type: 'math',
|
|
121
|
+
isVoid: true,
|
|
122
|
+
nodes: [],
|
|
123
|
+
data: {
|
|
124
|
+
latex: expected,
|
|
125
|
+
wrapper: wrapType
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
assertDeserialize('$$<$$', '<', _index["default"].DOLLAR);
|
|
131
|
+
assertDeserialize('$<$', '<', _index["default"].DOLLAR);
|
|
132
|
+
assertDeserialize('\\(<\\)', '<', _index["default"].ROUND_BRACKETS);
|
|
133
|
+
assertDeserialize('\\[<\\]', '<', _index["default"].ROUND_BRACKETS);
|
|
134
|
+
assertDeserialize('latex', 'latex', _index["default"].ROUND_BRACKETS);
|
|
135
|
+
assertDeserialize('\\displaystyle foo', 'foo', _index["default"].ROUND_BRACKETS);
|
|
136
|
+
it('should make mathml editable if MathPlugin.mathMlOptions.mmlEditing is true', function () {
|
|
137
|
+
_index["default"].mathMlOptions.mmlEditing = true;
|
|
138
|
+
var el = {
|
|
139
|
+
tagName: 'math',
|
|
140
|
+
outerHTML: '<math xmlns="http://www.w3.org/1998/Math/MathML"> <mn>2</mn> <mi>x</mi> <mtext> </mtext> <mo>≤</mo> <mn>4</mn> <mi>y</mi> <mtext> </mtext> <mo>+</mo> <mtext> </mtext> <mn>8</mn> <msqrt> <mi>h</mi> </msqrt></math>'
|
|
141
|
+
};
|
|
142
|
+
var next = jest.fn();
|
|
143
|
+
var out = _index.serialization.deserialize(el, next);
|
|
144
|
+
expect(out).toEqual({
|
|
145
|
+
object: 'inline',
|
|
146
|
+
type: 'math',
|
|
147
|
+
isVoid: true,
|
|
148
|
+
nodes: [],
|
|
149
|
+
data: {
|
|
150
|
+
latex: '/foobar/latex',
|
|
151
|
+
wrapper: 'round_brackets'
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
it('should make mathml readOnly if MathPlugin.mathMlOptions.mmlEditing is false', function () {
|
|
156
|
+
_index["default"].mathMlOptions.mmlEditing = false;
|
|
157
|
+
var el = {
|
|
158
|
+
tagName: 'math',
|
|
159
|
+
outerHTML: '<math xmlns="http://www.w3.org/1998/Math/MathML"> <mn>2</mn> <mi>x</mi> <mtext> </mtext> <mo>≤</mo> <mn>4</mn> <mi>y</mi> <mtext> </mtext> <mo>+</mo> <mtext> </mtext> <mn>8</mn> <msqrt> <mi>h</mi> </msqrt></math>'
|
|
160
|
+
};
|
|
161
|
+
var next = jest.fn();
|
|
162
|
+
var out = _index.serialization.deserialize(el, next);
|
|
163
|
+
expect(out).toEqual({
|
|
164
|
+
object: 'inline',
|
|
165
|
+
isVoid: true,
|
|
166
|
+
type: 'mathml',
|
|
167
|
+
data: {
|
|
168
|
+
html: el.outerHTML
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
describe('serialize', function () {
|
|
174
|
+
var assertSerialize = function assertSerialize(latex, expectedHtml, wrapper) {
|
|
175
|
+
wrapper = wrapper || _index["default"].ROUND_BRACKETS;
|
|
176
|
+
it("".concat(latex, " is serialized to: ").concat(expectedHtml), function () {
|
|
177
|
+
var object = {
|
|
178
|
+
kind: 'inline',
|
|
179
|
+
type: 'math',
|
|
180
|
+
isVoid: true,
|
|
181
|
+
nodes: [],
|
|
182
|
+
data: _slate.Data.create({
|
|
183
|
+
latex: latex,
|
|
184
|
+
wrapper: wrapper
|
|
185
|
+
})
|
|
186
|
+
};
|
|
187
|
+
var children = [];
|
|
188
|
+
var out = _index.serialization.serialize(object, children);
|
|
189
|
+
log('out: ', out);
|
|
190
|
+
expect(out).toEqual(/*#__PURE__*/_react["default"].createElement("span", {
|
|
191
|
+
"data-latex": "",
|
|
192
|
+
"data-raw": latex
|
|
193
|
+
}, expectedHtml));
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
assertSerialize('latex', '\\(latex\\)', _index["default"].ROUND_BRACKETS);
|
|
197
|
+
assertSerialize('latex', '\\(latex\\)', _index["default"].SQUARE_BRACKETS);
|
|
198
|
+
assertSerialize('latex', '$latex$', _index["default"].DOLLAR);
|
|
199
|
+
assertSerialize('latex', '$latex$', _index["default"].DOUBLE_DOLLAR);
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Note that when this is converted to html it get's escaped - but that's an issue with the slate html-serializer.
|
|
203
|
+
*/
|
|
204
|
+
assertSerialize('<', '\\(<\\)');
|
|
205
|
+
assertSerialize('x<y', '\\(x<y\\)');
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe('CustomToolbarComp', function () {
|
|
210
|
+
var onDataChange;
|
|
211
|
+
var onToolbarDone;
|
|
212
|
+
var renderComponent = function renderComponent() {
|
|
213
|
+
var extras = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
214
|
+
var mockChange = new _mockChange["default"]();
|
|
215
|
+
var defaults = {
|
|
216
|
+
node: {
|
|
217
|
+
key: '1',
|
|
218
|
+
data: _slate.Data.create({
|
|
219
|
+
latex: 'foo'
|
|
220
|
+
}),
|
|
221
|
+
equals: function equals() {
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
value: {
|
|
226
|
+
document: {
|
|
227
|
+
getNextText: jest.fn().mockReturnValue({
|
|
228
|
+
key: 'nt'
|
|
229
|
+
})
|
|
230
|
+
},
|
|
231
|
+
change: jest.fn().mockReturnValue(mockChange)
|
|
232
|
+
},
|
|
233
|
+
onDataChange: onDataChange,
|
|
234
|
+
onToolbarDone: onToolbarDone
|
|
235
|
+
};
|
|
236
|
+
var props = _objectSpread(_objectSpread({}, defaults), extras);
|
|
237
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.CustomToolbarComp, props));
|
|
238
|
+
};
|
|
239
|
+
describe('render', function () {
|
|
240
|
+
it('renders toolbar without default keypadMode', function () {
|
|
241
|
+
renderComponent();
|
|
242
|
+
|
|
243
|
+
// Verify the toolbar is rendered
|
|
244
|
+
expect(_react2.screen.getByTestId('math-toolbar')).toBeInTheDocument();
|
|
245
|
+
expect(_react2.screen.getByRole('toolbar')).toBeInTheDocument();
|
|
246
|
+
});
|
|
247
|
+
it('renders toolbar with default keypadMode', function () {
|
|
248
|
+
renderComponent({
|
|
249
|
+
pluginProps: {
|
|
250
|
+
math: {
|
|
251
|
+
keypadMode: 'geometry'
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// Verify the toolbar is rendered with keypadMode prop
|
|
257
|
+
expect(_react2.screen.getByTestId('math-toolbar')).toBeInTheDocument();
|
|
258
|
+
expect(_react2.screen.getByRole('toolbar')).toBeInTheDocument();
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
describe('onDone', function () {
|
|
262
|
+
it('calls onToolbarDone when done callback is triggered', function () {
|
|
263
|
+
onToolbarDone = jest.fn();
|
|
264
|
+
renderComponent();
|
|
265
|
+
|
|
266
|
+
// Trigger the onDone callback that was passed to MathToolbar
|
|
267
|
+
mockMathToolbarOnDone('oo');
|
|
268
|
+
expect(onToolbarDone).toHaveBeenCalledWith(expect.anything(), false);
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
describe('onChange', function () {
|
|
272
|
+
it('calls onDataChange when change callback is triggered', function () {
|
|
273
|
+
onDataChange = jest.fn();
|
|
274
|
+
renderComponent();
|
|
275
|
+
|
|
276
|
+
// Trigger the onChange callback that was passed to MathToolbar
|
|
277
|
+
mockMathToolbarOnChange('oo');
|
|
278
|
+
expect(onDataChange).toHaveBeenCalledWith('1', {
|
|
279
|
+
latex: 'oo'
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","names":["_react","_interopRequireDefault","require","_debug","_mockChange","_slate","_index","_interopRequireWildcard","_react2","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","jest","mock","StaticMath","fn","getInterface","mockReturnThis","registerEmbed","mockMathToolbarOnChange","mockMathToolbarOnDone","MathPreview","createElement","MathToolbar","props","onChange","onDone","role","onClick","requireActual","mmlToLatex","log","debug","describe","plugin","mockChange","value","beforeEach","MathPlugin","MockChange","change","toolbar","test","expect","insertInline","toBeCalledWith","objectContaining","data","inlineMath","toHaveBeenCalledWith","_plugin$renderNode","renderNode","node","type","toEqual","assertDeserialize","html","expected","wrapType","it","concat","el","tagName","childNodes","getAttribute","hasAttribute","innerHTML","next","out","serialization","deserialize","object","isVoid","nodes","latex","wrapper","DOLLAR","ROUND_BRACKETS","mathMlOptions","mmlEditing","outerHTML","assertSerialize","expectedHtml","kind","Data","create","children","serialize","SQUARE_BRACKETS","DOUBLE_DOLLAR","onDataChange","onToolbarDone","renderComponent","extras","undefined","defaults","key","equals","document","getNextText","mockReturnValue","render","CustomToolbarComp","screen","getByTestId","toBeInTheDocument","getByRole","pluginProps","math","keypadMode","anything"],"sources":["../../../../src/plugins/math/__tests__/index.test.jsx"],"sourcesContent":["import React from 'react';\nimport debug from 'debug';\nimport MockChange from '../../image/__tests__/mock-change';\nimport { Data } from 'slate';\nimport MathPlugin, { CustomToolbarComp, inlineMath, serialization } from '../index';\nimport { render, screen } from '@testing-library/react';\n\njest.mock('@pie-framework/mathquill', () => ({\n StaticMath: jest.fn(),\n getInterface: jest.fn().mockReturnThis(),\n registerEmbed: jest.fn(),\n}));\n\nlet mockMathToolbarOnChange;\nlet mockMathToolbarOnDone;\n\njest.mock('@pie-lib/math-toolbar', () => ({\n MathPreview: () => <div data-testid=\"math-preview\" />,\n MathToolbar: (props) => {\n // Store callbacks for testing\n mockMathToolbarOnChange = props.onChange;\n mockMathToolbarOnDone = props.onDone;\n return (\n <div data-testid=\"math-toolbar\" role=\"toolbar\">\n <button data-testid=\"toolbar-change\" onClick={() => props.onChange && props.onChange('test-latex')}>\n Change\n </button>\n <button data-testid=\"toolbar-done\" onClick={() => props.onDone && props.onDone('test-latex')}>\n Done\n </button>\n </div>\n );\n },\n}));\n\njest.mock('@pie-lib/math-rendering', () => ({\n ...jest.requireActual('@pie-lib/math-rendering'),\n mmlToLatex: jest.fn(() => {\n return '/foobar/latex';\n }),\n}));\nconst log = debug('@pie-lib:editable-html:test:math');\n\n// I believe @andrei is moving this stuff out.\ndescribe('MathPlugin', () => {\n describe('toolbar', () => {\n describe('onClick', () => {\n let plugin, mockChange, value, onChange;\n beforeEach(() => {\n plugin = MathPlugin({});\n mockChange = new MockChange();\n value = {\n change: jest.fn(() => mockChange),\n };\n onChange = jest.fn();\n plugin.toolbar.onClick(value, onChange);\n });\n\n test('calls insertInline', () => {\n expect(mockChange.insertInline).toBeCalledWith(expect.objectContaining({ data: inlineMath().data }));\n });\n\n test('it calls onChange', () => {\n expect(onChange).toHaveBeenCalledWith(mockChange);\n });\n });\n });\n\n describe('renderNode', () => {\n test('the component has props', () => {\n const plugin = MathPlugin({});\n const { props } = plugin.renderNode({ node: { type: 'math' } });\n expect(props.node).toEqual({ type: 'math' });\n });\n });\n\n describe('serialization', () => {\n describe('deserialize', () => {\n const assertDeserialize = (html, expected, wrapType) => {\n it(`innerHTML: ${html} is deserialized to: ${expected} with wrapType: ${wrapType}`, () => {\n const el = {\n tagName: 'span',\n childNodes: [],\n getAttribute: jest.fn(() => ''),\n hasAttribute: jest.fn(() => true),\n innerHTML: html,\n };\n const next = jest.fn();\n\n const out = serialization.deserialize(el, next);\n expect(out).toEqual({\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: expected,\n wrapper: wrapType,\n },\n });\n });\n };\n\n assertDeserialize('$$<$$', '<', MathPlugin.DOLLAR);\n assertDeserialize('$<$', '<', MathPlugin.DOLLAR);\n assertDeserialize('\\\\(<\\\\)', '<', MathPlugin.ROUND_BRACKETS);\n assertDeserialize('\\\\[<\\\\]', '<', MathPlugin.ROUND_BRACKETS);\n assertDeserialize('latex', 'latex', MathPlugin.ROUND_BRACKETS);\n assertDeserialize('\\\\displaystyle foo', 'foo', MathPlugin.ROUND_BRACKETS);\n\n it('should make mathml editable if MathPlugin.mathMlOptions.mmlEditing is true', () => {\n MathPlugin.mathMlOptions.mmlEditing = true;\n const el = {\n tagName: 'math',\n outerHTML:\n '<math xmlns=\"http://www.w3.org/1998/Math/MathML\"> <mn>2</mn> <mi>x</mi> <mtext> </mtext> <mo>≤</mo> <mn>4</mn> <mi>y</mi> <mtext> </mtext> <mo>+</mo> <mtext> </mtext> <mn>8</mn> <msqrt> <mi>h</mi> </msqrt></math>',\n };\n const next = jest.fn();\n\n const out = serialization.deserialize(el, next);\n\n expect(out).toEqual({\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: '/foobar/latex',\n wrapper: 'round_brackets',\n },\n });\n });\n\n it('should make mathml readOnly if MathPlugin.mathMlOptions.mmlEditing is false', () => {\n MathPlugin.mathMlOptions.mmlEditing = false;\n const el = {\n tagName: 'math',\n outerHTML:\n '<math xmlns=\"http://www.w3.org/1998/Math/MathML\"> <mn>2</mn> <mi>x</mi> <mtext> </mtext> <mo>≤</mo> <mn>4</mn> <mi>y</mi> <mtext> </mtext> <mo>+</mo> <mtext> </mtext> <mn>8</mn> <msqrt> <mi>h</mi> </msqrt></math>',\n };\n const next = jest.fn();\n\n const out = serialization.deserialize(el, next);\n\n expect(out).toEqual({\n object: 'inline',\n isVoid: true,\n type: 'mathml',\n data: {\n html: el.outerHTML,\n },\n });\n });\n });\n\n describe('serialize', () => {\n const assertSerialize = (latex, expectedHtml, wrapper) => {\n wrapper = wrapper || MathPlugin.ROUND_BRACKETS;\n it(`${latex} is serialized to: ${expectedHtml}`, () => {\n const object = {\n kind: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: Data.create({ latex, wrapper }),\n };\n const children = [];\n\n const out = serialization.serialize(object, children);\n log('out: ', out);\n expect(out).toEqual(\n <span data-latex=\"\" data-raw={latex}>\n {expectedHtml}\n </span>,\n );\n });\n };\n\n assertSerialize('latex', '\\\\(latex\\\\)', MathPlugin.ROUND_BRACKETS);\n assertSerialize('latex', '\\\\(latex\\\\)', MathPlugin.SQUARE_BRACKETS);\n assertSerialize('latex', '$latex$', MathPlugin.DOLLAR);\n assertSerialize('latex', '$latex$', MathPlugin.DOUBLE_DOLLAR);\n\n /**\n * Note that when this is converted to html it get's escaped - but that's an issue with the slate html-serializer.\n */\n assertSerialize('<', '\\\\(<\\\\)');\n assertSerialize('x<y', '\\\\(x<y\\\\)');\n });\n });\n});\n\ndescribe('CustomToolbarComp', () => {\n let onDataChange;\n let onToolbarDone;\n\n const renderComponent = (extras = {}) => {\n let mockChange = new MockChange();\n const defaults = {\n node: {\n key: '1',\n data: Data.create({ latex: 'foo' }),\n equals: () => true,\n },\n value: {\n document: {\n getNextText: jest.fn().mockReturnValue({ key: 'nt' }),\n },\n change: jest.fn().mockReturnValue(mockChange),\n },\n onDataChange,\n onToolbarDone,\n };\n\n const props = {\n ...defaults,\n ...extras,\n };\n\n return render(<CustomToolbarComp {...props} />);\n };\n\n describe('render', () => {\n it('renders toolbar without default keypadMode', () => {\n renderComponent();\n\n // Verify the toolbar is rendered\n expect(screen.getByTestId('math-toolbar')).toBeInTheDocument();\n expect(screen.getByRole('toolbar')).toBeInTheDocument();\n });\n\n it('renders toolbar with default keypadMode', () => {\n renderComponent({ pluginProps: { math: { keypadMode: 'geometry' } } });\n\n // Verify the toolbar is rendered with keypadMode prop\n expect(screen.getByTestId('math-toolbar')).toBeInTheDocument();\n expect(screen.getByRole('toolbar')).toBeInTheDocument();\n });\n });\n\n describe('onDone', () => {\n it('calls onToolbarDone when done callback is triggered', () => {\n onToolbarDone = jest.fn();\n renderComponent();\n\n // Trigger the onDone callback that was passed to MathToolbar\n mockMathToolbarOnDone('oo');\n\n expect(onToolbarDone).toHaveBeenCalledWith(expect.anything(), false);\n });\n });\n\n describe('onChange', () => {\n it('calls onDataChange when change callback is triggered', () => {\n onDataChange = jest.fn();\n renderComponent();\n\n // Trigger the onChange callback that was passed to MathToolbar\n mockMathToolbarOnChange('oo');\n\n expect(onDataChange).toHaveBeenCalledWith('1', { latex: 'oo' });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _ = _interopRequireDefault(require("../"));
|
|
5
|
+
describe('media plugin', function () {
|
|
6
|
+
var imagePlugin = (0, _["default"])('video');
|
|
7
|
+
describe('normalizeNode', function () {
|
|
8
|
+
it('should exit the function if the node is not of type document', function () {
|
|
9
|
+
var returnValue = imagePlugin.normalizeNode({
|
|
10
|
+
object: 'image'
|
|
11
|
+
});
|
|
12
|
+
expect(returnValue).toEqual(undefined);
|
|
13
|
+
});
|
|
14
|
+
it('should exit there are no changes needed', function () {
|
|
15
|
+
var nodes = [{
|
|
16
|
+
object: 'text',
|
|
17
|
+
text: 'Before Media'
|
|
18
|
+
}, {
|
|
19
|
+
type: 'video'
|
|
20
|
+
}, {
|
|
21
|
+
object: 'text',
|
|
22
|
+
text: 'After Media'
|
|
23
|
+
}];
|
|
24
|
+
var returnValue = imagePlugin.normalizeNode({
|
|
25
|
+
object: 'document',
|
|
26
|
+
findDescendant: jest.fn(function (callback) {
|
|
27
|
+
nodes.forEach(function (n) {
|
|
28
|
+
return callback(n);
|
|
29
|
+
});
|
|
30
|
+
})
|
|
31
|
+
});
|
|
32
|
+
expect(returnValue).toEqual(undefined);
|
|
33
|
+
});
|
|
34
|
+
it('should return a function if there is a node with an empty text before a media element', function () {
|
|
35
|
+
var nodes = [{
|
|
36
|
+
object: 'text',
|
|
37
|
+
text: '',
|
|
38
|
+
key: '1'
|
|
39
|
+
}, {
|
|
40
|
+
type: 'video',
|
|
41
|
+
key: '2'
|
|
42
|
+
}, {
|
|
43
|
+
object: 'text',
|
|
44
|
+
text: 'After Media',
|
|
45
|
+
key: '3'
|
|
46
|
+
}];
|
|
47
|
+
var findDescendant = jest.fn(function (callback) {
|
|
48
|
+
nodes.forEach(function (n) {
|
|
49
|
+
return callback(n);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
var change = {
|
|
53
|
+
withoutNormalization: jest.fn(function (callback) {
|
|
54
|
+
callback();
|
|
55
|
+
}),
|
|
56
|
+
insertTextByKey: jest.fn()
|
|
57
|
+
};
|
|
58
|
+
var returnValue = imagePlugin.normalizeNode({
|
|
59
|
+
object: 'document',
|
|
60
|
+
findDescendant: findDescendant
|
|
61
|
+
});
|
|
62
|
+
expect(returnValue).toEqual(expect.any(Function));
|
|
63
|
+
returnValue(change);
|
|
64
|
+
expect(change.withoutNormalization).toHaveBeenCalledWith(expect.any(Function));
|
|
65
|
+
expect(change.insertTextByKey).toHaveBeenCalledWith('1', 0, ' ');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","names":["_","_interopRequireDefault","require","describe","imagePlugin","MediaPlugin","it","returnValue","normalizeNode","object","expect","toEqual","undefined","nodes","text","type","findDescendant","jest","fn","callback","forEach","n","key","change","withoutNormalization","insertTextByKey","any","Function","toHaveBeenCalledWith"],"sources":["../../../../src/plugins/media/__tests__/index.test.js"],"sourcesContent":["import MediaPlugin from '../';\n\ndescribe('media plugin', () => {\n const imagePlugin = MediaPlugin('video');\n\n describe('normalizeNode', () => {\n it('should exit the function if the node is not of type document', () => {\n const returnValue = imagePlugin.normalizeNode({ object: 'image' });\n\n expect(returnValue).toEqual(undefined);\n });\n\n it('should exit there are no changes needed', () => {\n const nodes = [\n {\n object: 'text',\n text: 'Before Media',\n },\n {\n type: 'video',\n },\n {\n object: 'text',\n text: 'After Media',\n },\n ];\n const returnValue = imagePlugin.normalizeNode({\n object: 'document',\n findDescendant: jest.fn((callback) => {\n nodes.forEach((n) => callback(n));\n }),\n });\n expect(returnValue).toEqual(undefined);\n });\n\n it('should return a function if there is a node with an empty text before a media element', () => {\n const nodes = [\n {\n object: 'text',\n text: '',\n key: '1',\n },\n {\n type: 'video',\n key: '2',\n },\n {\n object: 'text',\n text: 'After Media',\n key: '3',\n },\n ];\n const findDescendant = jest.fn((callback) => {\n nodes.forEach((n) => callback(n));\n });\n const change = {\n withoutNormalization: jest.fn((callback) => {\n callback();\n }),\n insertTextByKey: jest.fn(),\n };\n const returnValue = imagePlugin.normalizeNode({\n object: 'document',\n findDescendant,\n });\n\n expect(returnValue).toEqual(expect.any(Function));\n\n returnValue(change);\n\n expect(change.withoutNormalization).toHaveBeenCalledWith(expect.any(Function));\n expect(change.insertTextByKey).toHaveBeenCalledWith('1', 0, ' ');\n });\n });\n});\n"],"mappings":";;;AAAA,IAAAA,CAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEAC,QAAQ,CAAC,cAAc,EAAE,YAAM;EAC7B,IAAMC,WAAW,GAAG,IAAAC,YAAW,EAAC,OAAO,CAAC;EAExCF,QAAQ,CAAC,eAAe,EAAE,YAAM;IAC9BG,EAAE,CAAC,8DAA8D,EAAE,YAAM;MACvE,IAAMC,WAAW,GAAGH,WAAW,CAACI,aAAa,CAAC;QAAEC,MAAM,EAAE;MAAQ,CAAC,CAAC;MAElEC,MAAM,CAACH,WAAW,CAAC,CAACI,OAAO,CAACC,SAAS,CAAC;IACxC,CAAC,CAAC;IAEFN,EAAE,CAAC,yCAAyC,EAAE,YAAM;MAClD,IAAMO,KAAK,GAAG,CACZ;QACEJ,MAAM,EAAE,MAAM;QACdK,IAAI,EAAE;MACR,CAAC,EACD;QACEC,IAAI,EAAE;MACR,CAAC,EACD;QACEN,MAAM,EAAE,MAAM;QACdK,IAAI,EAAE;MACR,CAAC,CACF;MACD,IAAMP,WAAW,GAAGH,WAAW,CAACI,aAAa,CAAC;QAC5CC,MAAM,EAAE,UAAU;QAClBO,cAAc,EAAEC,IAAI,CAACC,EAAE,CAAC,UAACC,QAAQ,EAAK;UACpCN,KAAK,CAACO,OAAO,CAAC,UAACC,CAAC;YAAA,OAAKF,QAAQ,CAACE,CAAC,CAAC;UAAA,EAAC;QACnC,CAAC;MACH,CAAC,CAAC;MACFX,MAAM,CAACH,WAAW,CAAC,CAACI,OAAO,CAACC,SAAS,CAAC;IACxC,CAAC,CAAC;IAEFN,EAAE,CAAC,uFAAuF,EAAE,YAAM;MAChG,IAAMO,KAAK,GAAG,CACZ;QACEJ,MAAM,EAAE,MAAM;QACdK,IAAI,EAAE,EAAE;QACRQ,GAAG,EAAE;MACP,CAAC,EACD;QACEP,IAAI,EAAE,OAAO;QACbO,GAAG,EAAE;MACP,CAAC,EACD;QACEb,MAAM,EAAE,MAAM;QACdK,IAAI,EAAE,aAAa;QACnBQ,GAAG,EAAE;MACP,CAAC,CACF;MACD,IAAMN,cAAc,GAAGC,IAAI,CAACC,EAAE,CAAC,UAACC,QAAQ,EAAK;QAC3CN,KAAK,CAACO,OAAO,CAAC,UAACC,CAAC;UAAA,OAAKF,QAAQ,CAACE,CAAC,CAAC;QAAA,EAAC;MACnC,CAAC,CAAC;MACF,IAAME,MAAM,GAAG;QACbC,oBAAoB,EAAEP,IAAI,CAACC,EAAE,CAAC,UAACC,QAAQ,EAAK;UAC1CA,QAAQ,CAAC,CAAC;QACZ,CAAC,CAAC;QACFM,eAAe,EAAER,IAAI,CAACC,EAAE,CAAC;MAC3B,CAAC;MACD,IAAMX,WAAW,GAAGH,WAAW,CAACI,aAAa,CAAC;QAC5CC,MAAM,EAAE,UAAU;QAClBO,cAAc,EAAdA;MACF,CAAC,CAAC;MAEFN,MAAM,CAACH,WAAW,CAAC,CAACI,OAAO,CAACD,MAAM,CAACgB,GAAG,CAACC,QAAQ,CAAC,CAAC;MAEjDpB,WAAW,CAACgB,MAAM,CAAC;MAEnBb,MAAM,CAACa,MAAM,CAACC,oBAAoB,CAAC,CAACI,oBAAoB,CAAClB,MAAM,CAACgB,GAAG,CAACC,QAAQ,CAAC,CAAC;MAC9EjB,MAAM,CAACa,MAAM,CAACE,eAAe,CAAC,CAACG,oBAAoB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClE,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _choice = _interopRequireDefault(require("../choice"));
|
|
7
|
+
// Mock @dnd-kit hooks to avoid DndContext requirement
|
|
8
|
+
jest.mock('@dnd-kit/core', function () {
|
|
9
|
+
return {
|
|
10
|
+
useDraggable: jest.fn(function () {
|
|
11
|
+
return {
|
|
12
|
+
attributes: {},
|
|
13
|
+
listeners: {},
|
|
14
|
+
setNodeRef: jest.fn(),
|
|
15
|
+
isDragging: false
|
|
16
|
+
};
|
|
17
|
+
}),
|
|
18
|
+
useDroppable: jest.fn(function () {
|
|
19
|
+
return {
|
|
20
|
+
setNodeRef: jest.fn(),
|
|
21
|
+
isOver: false,
|
|
22
|
+
active: null
|
|
23
|
+
};
|
|
24
|
+
})
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
jest.mock('@pie-lib/math-rendering', function () {
|
|
28
|
+
return {
|
|
29
|
+
renderMath: jest.fn()
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Collect the CSS rules emotion/MUI injected into the document (jsdom uses insertRule).
|
|
34
|
+
var collectEmotionRules = function collectEmotionRules() {
|
|
35
|
+
var rules = [];
|
|
36
|
+
for (var _i = 0, _Array$from = Array.from(document.styleSheets); _i < _Array$from.length; _i++) {
|
|
37
|
+
var sheet = _Array$from[_i];
|
|
38
|
+
try {
|
|
39
|
+
for (var _i2 = 0, _Array$from2 = Array.from(sheet.cssRules); _i2 < _Array$from2.length; _i2++) {
|
|
40
|
+
var rule = _Array$from2[_i2];
|
|
41
|
+
rules.push(rule.cssText);
|
|
42
|
+
}
|
|
43
|
+
} catch (e) {
|
|
44
|
+
/* inaccessible stylesheet */
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return rules;
|
|
48
|
+
};
|
|
49
|
+
describe('drag-in-the-blank choice', function () {
|
|
50
|
+
var defaultProps = {
|
|
51
|
+
value: {
|
|
52
|
+
id: '1',
|
|
53
|
+
value: '<math>1/2</math>'
|
|
54
|
+
},
|
|
55
|
+
disabled: false,
|
|
56
|
+
instanceId: 'test-instance',
|
|
57
|
+
n: {
|
|
58
|
+
key: 'key-0'
|
|
59
|
+
},
|
|
60
|
+
nodeProps: {},
|
|
61
|
+
opts: {
|
|
62
|
+
options: {
|
|
63
|
+
duplicates: false
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
it('renders without crashing', function () {
|
|
68
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_choice["default"], defaultProps)),
|
|
69
|
+
container = _render.container;
|
|
70
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
71
|
+
});
|
|
72
|
+
describe('fraction math styling', function () {
|
|
73
|
+
it('enlarges numerator/denominator digits adjacent to a fraction to 120%', function () {
|
|
74
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_choice["default"], defaultProps));
|
|
75
|
+
var rule = collectEmotionRules().find(function (r) {
|
|
76
|
+
return r.includes('mjx-mn') && r.includes('mjx-mfrac');
|
|
77
|
+
});
|
|
78
|
+
expect(rule).toBeDefined();
|
|
79
|
+
expect(rule).toMatch(/mjx-mn:has\(~\s*mjx-mfrac\)/);
|
|
80
|
+
expect(rule).toMatch(/mjx-mfrac\s*~\s*mjx-mn/);
|
|
81
|
+
expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
|
|
82
|
+
});
|
|
83
|
+
it('keeps the existing mjx-frac 120% rule', function () {
|
|
84
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_choice["default"], defaultProps));
|
|
85
|
+
var rule = collectEmotionRules().find(function (r) {
|
|
86
|
+
return /(^|[^-])mjx-frac/.test(r) && !r.includes('mjx-mfrac');
|
|
87
|
+
});
|
|
88
|
+
expect(rule).toBeDefined();
|
|
89
|
+
expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=choice.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choice.test.js","names":["_react","_interopRequireDefault","require","_react2","_choice","jest","mock","useDraggable","fn","attributes","listeners","setNodeRef","isDragging","useDroppable","isOver","active","renderMath","collectEmotionRules","rules","_i","_Array$from","Array","from","document","styleSheets","length","sheet","_i2","_Array$from2","cssRules","rule","push","cssText","e","describe","defaultProps","value","id","disabled","instanceId","n","key","nodeProps","opts","options","duplicates","it","_render","render","createElement","container","expect","firstChild","toBeInTheDocument","find","r","includes","toBeDefined","toMatch","test"],"sources":["../../../../../src/plugins/respArea/drag-in-the-blank/__tests__/choice.test.js"],"sourcesContent":["import React from 'react';\nimport { render } from '@testing-library/react';\nimport DragDropChoice from '../choice';\n\n// Mock @dnd-kit hooks to avoid DndContext requirement\njest.mock('@dnd-kit/core', () => ({\n useDraggable: jest.fn(() => ({\n attributes: {},\n listeners: {},\n setNodeRef: jest.fn(),\n isDragging: false,\n })),\n useDroppable: jest.fn(() => ({\n setNodeRef: jest.fn(),\n isOver: false,\n active: null,\n })),\n}));\n\njest.mock('@pie-lib/math-rendering', () => ({\n renderMath: jest.fn(),\n}));\n\n// Collect the CSS rules emotion/MUI injected into the document (jsdom uses insertRule).\nconst collectEmotionRules = () => {\n const rules = [];\n for (const sheet of Array.from(document.styleSheets)) {\n try {\n for (const rule of Array.from(sheet.cssRules)) {\n rules.push(rule.cssText);\n }\n } catch (e) {\n /* inaccessible stylesheet */\n }\n }\n return rules;\n};\n\ndescribe('drag-in-the-blank choice', () => {\n const defaultProps = {\n value: { id: '1', value: '<math>1/2</math>' },\n disabled: false,\n instanceId: 'test-instance',\n n: { key: 'key-0' },\n nodeProps: {},\n opts: { options: { duplicates: false } },\n };\n\n it('renders without crashing', () => {\n const { container } = render(<DragDropChoice {...defaultProps} />);\n expect(container.firstChild).toBeInTheDocument();\n });\n\n describe('fraction math styling', () => {\n it('enlarges numerator/denominator digits adjacent to a fraction to 120%', () => {\n render(<DragDropChoice {...defaultProps} />);\n const rule = collectEmotionRules().find((r) => r.includes('mjx-mn') && r.includes('mjx-mfrac'));\n expect(rule).toBeDefined();\n expect(rule).toMatch(/mjx-mn:has\\(~\\s*mjx-mfrac\\)/);\n expect(rule).toMatch(/mjx-mfrac\\s*~\\s*mjx-mn/);\n expect(rule).toMatch(/font-size:\\s*120%\\s*!important/i);\n });\n\n it('keeps the existing mjx-frac 120% rule', () => {\n render(<DragDropChoice {...defaultProps} />);\n const rule = collectEmotionRules().find((r) => /(^|[^-])mjx-frac/.test(r) && !r.includes('mjx-mfrac'));\n expect(rule).toBeDefined();\n expect(rule).toMatch(/font-size:\\s*120%\\s*!important/i);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,7 +8,7 @@ exports["default"] = void 0;
|
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
9
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
10
|
var _styles = require("@mui/material/styles");
|
|
11
|
-
var
|
|
11
|
+
var _mathInputMathlive = require("@pie-lib/math-input-mathlive");
|
|
12
12
|
var StyledSpanContainer = (0, _styles.styled)('span')(function () {
|
|
13
13
|
return {
|
|
14
14
|
display: 'inline-flex',
|
|
@@ -99,7 +99,7 @@ var MathTemplated = function MathTemplated(_ref2) {
|
|
|
99
99
|
var attributes = _ref2.attributes,
|
|
100
100
|
value = _ref2.value,
|
|
101
101
|
keyToDisplay = _ref2.keyToDisplay;
|
|
102
|
-
return /*#__PURE__*/_react["default"].createElement(StyledSpanContainer, attributes, /*#__PURE__*/_react["default"].createElement(StyledResponseBox, null, keyToDisplay), /*#__PURE__*/_react["default"].createElement(StyledMathBlock, null, /*#__PURE__*/_react["default"].createElement(
|
|
102
|
+
return /*#__PURE__*/_react["default"].createElement(StyledSpanContainer, attributes, /*#__PURE__*/_react["default"].createElement(StyledResponseBox, null, keyToDisplay), /*#__PURE__*/_react["default"].createElement(StyledMathBlock, null, /*#__PURE__*/_react["default"].createElement(_mathInputMathlive.mq.Static, {
|
|
103
103
|
latex: value
|
|
104
104
|
})));
|
|
105
105
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_mathInputMathlive","StyledSpanContainer","styled","display","border","margin","cursor","alignItems","justifyContent","minWidth","minHeight","height","StyledResponseBox","_ref","theme","background","palette","grey","color","borderRight","boxSizing","overflow","fontSize","fontFamily","padding","StyledMathBlock","flex","backgroundColor","verticalAlign","borderTop","marginLeft","marginTop","paddingTop","lineHeight","top","left","position","right","MathTemplated","_ref2","attributes","value","keyToDisplay","createElement","mq","Static","latex","propTypes","PropTypes","object","string","_default","exports"],"sources":["../../../../src/plugins/respArea/math-templated/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport { mq } from '@pie-lib/math-input-mathlive';\n\nconst StyledSpanContainer = styled('span')(() => ({\n display: 'inline-flex',\n border: '1px solid #C0C3CF',\n margin: '1px 5px',\n cursor: 'pointer',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '50px',\n minHeight: '36px',\n height: 'fit-content',\n}));\n\nconst StyledResponseBox = styled('div')(({ theme }) => ({\n background: theme.palette.grey['A100'],\n color: theme.palette.grey['A700'],\n display: 'inline-flex',\n borderRight: '2px solid #C0C3CF',\n boxSizing: 'border-box',\n overflow: 'hidden',\n fontSize: '12px',\n minHeight: '36px',\n height: '100%',\n alignItems: 'center',\n fontFamily: 'Symbola, Times New Roman, serif',\n padding: '0 2px',\n}));\n\nconst StyledMathBlock = styled('div')(() => ({\n flex: 8,\n color: 'var(--pie-text, black)',\n padding: '4px !important',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'var(--pie-background, rgba(255, 255, 255, 0))',\n '& > .mq-math-mode sup.mq-nthroot': {\n fontSize: '70% !important',\n verticalAlign: '1em !important',\n },\n '& > .mq-math-mode .mq-sqrt-stem': {\n borderTop: '0.07em solid',\n marginLeft: '-1.5px',\n marginTop: '-2px !important',\n paddingTop: '5px !important',\n },\n '& .mq-overarrow-inner': {\n paddingTop: '0 !important',\n border: 'none !important',\n },\n '& .mq-overarrow.mq-arrow-both': {\n marginTop: '0px',\n minWidth: '1.23em',\n '& *': {\n lineHeight: '1 !important',\n },\n '&:before': {\n top: '-0.4em',\n left: '-1px',\n },\n '&:after': {\n top: '0px !important',\n position: 'absolute !important',\n right: '-2px',\n },\n '&.mq-empty:after': {\n top: '-0.45em',\n },\n },\n '& .mq-overarrow.mq-arrow-right': {\n '&:before': {\n top: '-0.4em',\n right: '-1px',\n },\n },\n '& .mq-overarrow-inner-right': {\n display: 'none !important',\n },\n '& .mq-overarrow-inner-left': {\n display: 'none !important',\n },\n}));\n\nconst MathTemplated = ({ attributes, value, keyToDisplay }) => (\n <StyledSpanContainer {...attributes}>\n <StyledResponseBox>{keyToDisplay}</StyledResponseBox>\n <StyledMathBlock>\n <mq.Static latex={value} />\n </StyledMathBlock>\n </StyledSpanContainer>\n);\n\nMathTemplated.propTypes = {\n attributes: PropTypes.object,\n value: PropTypes.string,\n keyToDisplay: PropTypes.string,\n};\n\nexport default MathTemplated;\n"],"mappings":"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","ignoreList":[]}
|