@pie-lib/editable-html-tip-tap 1.0.0

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.
Files changed (167) hide show
  1. package/CHANGELOG.json +32 -0
  2. package/CHANGELOG.md +2280 -0
  3. package/lib/__tests__/editor.test.js +470 -0
  4. package/lib/__tests__/serialization.test.js +246 -0
  5. package/lib/__tests__/utils.js +106 -0
  6. package/lib/block-tags.js +25 -0
  7. package/lib/constants.js +16 -0
  8. package/lib/editor.js +1356 -0
  9. package/lib/extensions/MediaView.js +112 -0
  10. package/lib/extensions/characters.js +65 -0
  11. package/lib/extensions/component.js +325 -0
  12. package/lib/extensions/css.js +252 -0
  13. package/lib/extensions/custom-toolbar-wrapper.js +124 -0
  14. package/lib/extensions/image.js +106 -0
  15. package/lib/extensions/math.js +330 -0
  16. package/lib/extensions/media.js +276 -0
  17. package/lib/extensions/responseArea.js +278 -0
  18. package/lib/index.js +1213 -0
  19. package/lib/old-index.js +269 -0
  20. package/lib/parse-html.js +16 -0
  21. package/lib/plugins/characters/custom-popper.js +73 -0
  22. package/lib/plugins/characters/index.js +305 -0
  23. package/lib/plugins/characters/utils.js +381 -0
  24. package/lib/plugins/css/icons/index.js +37 -0
  25. package/lib/plugins/css/index.js +390 -0
  26. package/lib/plugins/customPlugin/index.js +114 -0
  27. package/lib/plugins/html/icons/index.js +38 -0
  28. package/lib/plugins/html/index.js +81 -0
  29. package/lib/plugins/image/__tests__/component.test.js +51 -0
  30. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +56 -0
  31. package/lib/plugins/image/__tests__/image-toolbar.test.js +26 -0
  32. package/lib/plugins/image/__tests__/index.test.js +98 -0
  33. package/lib/plugins/image/__tests__/insert-image-handler.test.js +125 -0
  34. package/lib/plugins/image/__tests__/mock-change.js +25 -0
  35. package/lib/plugins/image/alt-dialog.js +129 -0
  36. package/lib/plugins/image/component.js +419 -0
  37. package/lib/plugins/image/image-toolbar.js +177 -0
  38. package/lib/plugins/image/index.js +263 -0
  39. package/lib/plugins/image/insert-image-handler.js +117 -0
  40. package/lib/plugins/index.js +413 -0
  41. package/lib/plugins/list/__tests__/index.test.js +79 -0
  42. package/lib/plugins/list/index.js +334 -0
  43. package/lib/plugins/math/__tests__/index.test.js +300 -0
  44. package/lib/plugins/math/index.js +454 -0
  45. package/lib/plugins/media/__tests__/index.test.js +71 -0
  46. package/lib/plugins/media/index.js +387 -0
  47. package/lib/plugins/media/media-dialog.js +709 -0
  48. package/lib/plugins/media/media-toolbar.js +101 -0
  49. package/lib/plugins/media/media-wrapper.js +93 -0
  50. package/lib/plugins/rendering/index.js +46 -0
  51. package/lib/plugins/respArea/drag-in-the-blank/choice.js +289 -0
  52. package/lib/plugins/respArea/drag-in-the-blank/index.js +94 -0
  53. package/lib/plugins/respArea/explicit-constructed-response/index.js +120 -0
  54. package/lib/plugins/respArea/icons/index.js +95 -0
  55. package/lib/plugins/respArea/index.js +341 -0
  56. package/lib/plugins/respArea/inline-dropdown/index.js +126 -0
  57. package/lib/plugins/respArea/math-templated/index.js +130 -0
  58. package/lib/plugins/respArea/utils.js +125 -0
  59. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  60. package/lib/plugins/table/__tests__/index.test.js +442 -0
  61. package/lib/plugins/table/__tests__/table-toolbar.test.js +54 -0
  62. package/lib/plugins/table/icons/index.js +69 -0
  63. package/lib/plugins/table/index.js +483 -0
  64. package/lib/plugins/table/table-toolbar.js +187 -0
  65. package/lib/plugins/textAlign/icons/index.js +194 -0
  66. package/lib/plugins/textAlign/index.js +34 -0
  67. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +128 -0
  68. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +51 -0
  69. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +54 -0
  70. package/lib/plugins/toolbar/__tests__/toolbar.test.js +120 -0
  71. package/lib/plugins/toolbar/default-toolbar.js +229 -0
  72. package/lib/plugins/toolbar/done-button.js +53 -0
  73. package/lib/plugins/toolbar/editor-and-toolbar.js +286 -0
  74. package/lib/plugins/toolbar/index.js +34 -0
  75. package/lib/plugins/toolbar/toolbar-buttons.js +194 -0
  76. package/lib/plugins/toolbar/toolbar.js +376 -0
  77. package/lib/plugins/utils.js +62 -0
  78. package/lib/serialization.js +677 -0
  79. package/lib/shared/alert-dialog.js +75 -0
  80. package/lib/theme.js +9 -0
  81. package/package.json +69 -0
  82. package/src/__tests__/editor.test.jsx +363 -0
  83. package/src/__tests__/serialization.test.js +291 -0
  84. package/src/__tests__/utils.js +36 -0
  85. package/src/block-tags.js +17 -0
  86. package/src/constants.js +7 -0
  87. package/src/editor.jsx +1197 -0
  88. package/src/extensions/characters.js +46 -0
  89. package/src/extensions/component.jsx +294 -0
  90. package/src/extensions/css.js +217 -0
  91. package/src/extensions/custom-toolbar-wrapper.jsx +100 -0
  92. package/src/extensions/image.js +55 -0
  93. package/src/extensions/math.js +259 -0
  94. package/src/extensions/media.js +182 -0
  95. package/src/extensions/responseArea.js +205 -0
  96. package/src/index.jsx +1462 -0
  97. package/src/old-index.jsx +162 -0
  98. package/src/parse-html.js +8 -0
  99. package/src/plugins/README.md +27 -0
  100. package/src/plugins/characters/custom-popper.js +48 -0
  101. package/src/plugins/characters/index.jsx +284 -0
  102. package/src/plugins/characters/utils.js +447 -0
  103. package/src/plugins/css/icons/index.jsx +17 -0
  104. package/src/plugins/css/index.jsx +340 -0
  105. package/src/plugins/customPlugin/index.jsx +85 -0
  106. package/src/plugins/html/icons/index.jsx +19 -0
  107. package/src/plugins/html/index.jsx +72 -0
  108. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
  109. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
  110. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
  111. package/src/plugins/image/__tests__/component.test.jsx +41 -0
  112. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
  113. package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
  114. package/src/plugins/image/__tests__/index.test.js +95 -0
  115. package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
  116. package/src/plugins/image/__tests__/mock-change.js +15 -0
  117. package/src/plugins/image/alt-dialog.jsx +82 -0
  118. package/src/plugins/image/component.jsx +343 -0
  119. package/src/plugins/image/image-toolbar.jsx +100 -0
  120. package/src/plugins/image/index.jsx +227 -0
  121. package/src/plugins/image/insert-image-handler.js +79 -0
  122. package/src/plugins/index.jsx +377 -0
  123. package/src/plugins/list/__tests__/index.test.js +54 -0
  124. package/src/plugins/list/index.jsx +305 -0
  125. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
  126. package/src/plugins/math/__tests__/index.test.jsx +245 -0
  127. package/src/plugins/math/index.jsx +379 -0
  128. package/src/plugins/media/__tests__/index.test.js +75 -0
  129. package/src/plugins/media/index.jsx +325 -0
  130. package/src/plugins/media/media-dialog.js +624 -0
  131. package/src/plugins/media/media-toolbar.jsx +56 -0
  132. package/src/plugins/media/media-wrapper.jsx +43 -0
  133. package/src/plugins/rendering/index.js +31 -0
  134. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +215 -0
  135. package/src/plugins/respArea/drag-in-the-blank/index.jsx +70 -0
  136. package/src/plugins/respArea/explicit-constructed-response/index.jsx +92 -0
  137. package/src/plugins/respArea/icons/index.jsx +71 -0
  138. package/src/plugins/respArea/index.jsx +299 -0
  139. package/src/plugins/respArea/inline-dropdown/index.jsx +108 -0
  140. package/src/plugins/respArea/math-templated/index.jsx +104 -0
  141. package/src/plugins/respArea/utils.jsx +90 -0
  142. package/src/plugins/table/CustomTablePlugin.js +113 -0
  143. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
  144. package/src/plugins/table/__tests__/index.test.jsx +401 -0
  145. package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
  146. package/src/plugins/table/icons/index.jsx +53 -0
  147. package/src/plugins/table/index.jsx +427 -0
  148. package/src/plugins/table/table-toolbar.jsx +136 -0
  149. package/src/plugins/textAlign/icons/index.jsx +114 -0
  150. package/src/plugins/textAlign/index.jsx +23 -0
  151. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
  152. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
  153. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
  154. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
  155. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
  156. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
  157. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
  158. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
  159. package/src/plugins/toolbar/default-toolbar.jsx +206 -0
  160. package/src/plugins/toolbar/done-button.jsx +38 -0
  161. package/src/plugins/toolbar/editor-and-toolbar.jsx +257 -0
  162. package/src/plugins/toolbar/index.jsx +23 -0
  163. package/src/plugins/toolbar/toolbar-buttons.jsx +138 -0
  164. package/src/plugins/toolbar/toolbar.jsx +338 -0
  165. package/src/plugins/utils.js +31 -0
  166. package/src/serialization.jsx +621 -0
  167. package/src/theme.js +1 -0
@@ -0,0 +1,291 @@
1
+ import { htmlToValue, TEXT_RULE } from '../serialization';
2
+
3
+ jest.mock('../plugins/math', () => ({
4
+ serialization: {
5
+ serialize: jest.fn((o, c) => {
6
+ return undefined;
7
+ }),
8
+ deserialize: jest.fn((el, next) => {
9
+ return undefined;
10
+ }),
11
+ },
12
+ }));
13
+
14
+ describe('TEXT_RULE', () => {
15
+ const mkBr = (previousSibling) => {
16
+ return {
17
+ remove: jest.fn(),
18
+ previousSibling,
19
+ replaceWith: (foo) => {
20
+ previousSibling.textContent = previousSibling.textContent.replace(/(<br>)|(<\/br>)/g, foo);
21
+ },
22
+ normalize: jest.fn().mockReturnThis(),
23
+ tagName: 'br',
24
+ };
25
+ };
26
+
27
+ const mkTextNode = (textContent = '') => ({
28
+ nodeName: '#text',
29
+ textContent,
30
+ normalize: jest.fn().mockReturnThis(),
31
+ });
32
+
33
+ const mkEl = (querySelectorAllResult) => ({
34
+ querySelectorAll: jest.fn().mockReturnValue(querySelectorAllResult),
35
+ normalize: jest.fn().mockReturnThis(),
36
+ });
37
+
38
+ describe('deserialize', () => {
39
+ it('if no previous text node, no error is thrown', () => {
40
+ const br = mkBr();
41
+ const el = mkEl([br]);
42
+ expect(() => TEXT_RULE.deserialize(el)).not.toThrow();
43
+ });
44
+ });
45
+ });
46
+
47
+ describe('htmlToValue', () => {
48
+ it('converts', () => {
49
+ const expected = {
50
+ object: 'value',
51
+ document: {
52
+ object: 'document',
53
+ data: {},
54
+ nodes: [
55
+ {
56
+ object: 'block',
57
+ type: 'div',
58
+ isVoid: false,
59
+ data: {
60
+ attributes: {},
61
+ },
62
+ nodes: [
63
+ {
64
+ object: 'block',
65
+ type: 'paragraph',
66
+ isVoid: false,
67
+ data: {
68
+ attributes: {},
69
+ },
70
+ nodes: [
71
+ {
72
+ object: 'text',
73
+ leaves: [
74
+ {
75
+ object: 'leaf',
76
+ text: 'foo',
77
+ marks: [],
78
+ },
79
+ ],
80
+ },
81
+ {
82
+ object: 'inline',
83
+ type: 'image',
84
+ isVoid: true,
85
+ data: {
86
+ src: 'blah.jpg',
87
+ width: null,
88
+ height: null,
89
+ margin: '',
90
+ justifyContent: '',
91
+ alignment: null,
92
+ alt: null,
93
+ },
94
+ nodes: [
95
+ {
96
+ object: 'text',
97
+ leaves: [
98
+ {
99
+ object: 'leaf',
100
+ text: '',
101
+ marks: [],
102
+ },
103
+ ],
104
+ },
105
+ ],
106
+ },
107
+ {
108
+ object: 'text',
109
+ leaves: [
110
+ {
111
+ object: 'leaf',
112
+ text: 'bar',
113
+ marks: [],
114
+ },
115
+ ],
116
+ },
117
+ ],
118
+ },
119
+ ],
120
+ },
121
+ ],
122
+ },
123
+ };
124
+ const html = `<div><p>foo<img src="blah.jpg"/>bar</p></div>`;
125
+ const v = htmlToValue(html);
126
+
127
+ console.log(JSON.stringify(v.toJSON()));
128
+ expect(v.toJSON()).toEqual(expected);
129
+ });
130
+
131
+ it('does not break', () => {
132
+ /*
133
+ More than 12 iterations of the same kind would previously break the input. Here we have 16 text nodes, and now it works.
134
+ */
135
+ const expected = {
136
+ object: 'value',
137
+ document: {
138
+ object: 'document',
139
+ data: {},
140
+ nodes: [
141
+ {
142
+ object: 'block',
143
+ type: 'div',
144
+ isVoid: false,
145
+ data: { attributes: {} },
146
+ nodes: [
147
+ {
148
+ object: 'text',
149
+ leaves: [
150
+ {
151
+ object: 'leaf',
152
+ text: 'Foo ',
153
+ marks: [],
154
+ },
155
+ {
156
+ object: 'leaf',
157
+ text: 'x',
158
+ marks: [
159
+ {
160
+ object: 'mark',
161
+ type: 'italic',
162
+ data: {},
163
+ },
164
+ ],
165
+ },
166
+ {
167
+ object: 'leaf',
168
+ text: ' bar ',
169
+ marks: [],
170
+ },
171
+ {
172
+ object: 'leaf',
173
+ text: 'x',
174
+ marks: [
175
+ {
176
+ object: 'mark',
177
+ type: 'italic',
178
+ data: {},
179
+ },
180
+ ],
181
+ },
182
+ {
183
+ object: 'leaf',
184
+ text: ' Foo ',
185
+ marks: [],
186
+ },
187
+ {
188
+ object: 'leaf',
189
+ text: 'x',
190
+ marks: [
191
+ {
192
+ object: 'mark',
193
+ type: 'italic',
194
+ data: {},
195
+ },
196
+ ],
197
+ },
198
+ {
199
+ object: 'leaf',
200
+ text: ' bar ',
201
+ marks: [],
202
+ },
203
+ {
204
+ object: 'leaf',
205
+ text: 'x',
206
+ marks: [
207
+ {
208
+ object: 'mark',
209
+ type: 'italic',
210
+ data: {},
211
+ },
212
+ ],
213
+ },
214
+ {
215
+ object: 'leaf',
216
+ text: ' Foo ',
217
+ marks: [],
218
+ },
219
+ {
220
+ object: 'leaf',
221
+ text: 'x',
222
+ marks: [
223
+ {
224
+ object: 'mark',
225
+ type: 'italic',
226
+ data: {},
227
+ },
228
+ ],
229
+ },
230
+ {
231
+ object: 'leaf',
232
+ text: ' bar ',
233
+ marks: [],
234
+ },
235
+ {
236
+ object: 'leaf',
237
+ text: 'x',
238
+ marks: [
239
+ {
240
+ object: 'mark',
241
+ type: 'italic',
242
+ data: {},
243
+ },
244
+ ],
245
+ },
246
+ {
247
+ object: 'leaf',
248
+ text: ' Foo ',
249
+ marks: [],
250
+ },
251
+ {
252
+ object: 'leaf',
253
+ text: 'x',
254
+ marks: [
255
+ {
256
+ object: 'mark',
257
+ type: 'italic',
258
+ data: {},
259
+ },
260
+ ],
261
+ },
262
+ {
263
+ object: 'leaf',
264
+ text: ' bar ',
265
+ marks: [],
266
+ },
267
+ {
268
+ object: 'leaf',
269
+ text: 'x',
270
+ marks: [
271
+ {
272
+ object: 'mark',
273
+ type: 'italic',
274
+ data: {},
275
+ },
276
+ ],
277
+ },
278
+ ],
279
+ },
280
+ ],
281
+ },
282
+ ],
283
+ },
284
+ };
285
+ const html =
286
+ '<div>Foo <em>x</em> bar <em>x</em> Foo <em>x</em> bar <em>x</em> Foo <em>x</em> bar <em>x</em> Foo <em>x</em> bar <em>x</em></div>';
287
+ const v = htmlToValue(html);
288
+
289
+ expect(v.toJSON()).toEqual(expected);
290
+ });
291
+ });
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+
3
+ export function classObject() {
4
+ const out = {};
5
+ for (var a in arguments) {
6
+ const value = arguments[a];
7
+ out[value] = value;
8
+ }
9
+ return out;
10
+ }
11
+
12
+ export function mockComponents() {
13
+ const out = {};
14
+ for (var a in arguments) {
15
+ const value = arguments[a];
16
+ out[value] = class extends React.Component {
17
+ render() {
18
+ return <div data-mock-component="true">{value}</div>;
19
+ }
20
+ };
21
+ }
22
+ return out;
23
+ }
24
+
25
+ export function mockIconButton() {
26
+ jest.mock('@material-ui/core/IconButton', () => {
27
+ return (props) => <div className={props.className} style={props.style} ariaLabel={props['aria-label']} />;
28
+ });
29
+ }
30
+ export function mockMathInput() {
31
+ jest.mock('@pie-lib/math-input', () => ({
32
+ addBrackets: jest.fn((s) => s),
33
+ removeBrackets: jest.fn((s) => s),
34
+ ...mockComponents('Keypad', 'MathQuillInput', 'EditableMathInput', 'HorizontalKeypad'),
35
+ }));
36
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Tags to blocks.
3
+ *
4
+ * @type {Object}
5
+ */
6
+
7
+ export const BLOCK_TAGS = {
8
+ div: 'div',
9
+ // span: 'span',
10
+ p: 'paragraph',
11
+ pre: 'code',
12
+ h1: 'heading-one',
13
+ h2: 'heading-two',
14
+ h4: 'heading-four',
15
+ h5: 'heading-five',
16
+ h6: 'heading-six',
17
+ };
@@ -0,0 +1,7 @@
1
+ export const MAIN_CONTAINER_CLASS = 'main-container';
2
+ export const PIE_TOOLBAR__CLASS = 'pie-toolbar';
3
+
4
+ export default {
5
+ MAIN_CONTAINER_CLASS,
6
+ PIE_TOOLBAR__CLASS,
7
+ };