@modusoperandi/licit 1.0.3 → 1.0.5

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 (317) hide show
  1. package/BlockquoteInsertNewLineCommand.js +7 -8
  2. package/BlockquoteInsertNewLineCommand.js.flow +77 -77
  3. package/BlockquoteNodeSpec.js +1 -1
  4. package/BlockquoteNodeSpec.js.flow +30 -30
  5. package/BlockquoteToggleCommand.js +8 -9
  6. package/BlockquoteToggleCommand.js.flow +56 -56
  7. package/BookmarkNodeSpec.js +1 -1
  8. package/BookmarkNodeSpec.js.flow +39 -39
  9. package/BulletListNodeSpec.js.flow +61 -61
  10. package/CZIProseMirror.js.flow +90 -90
  11. package/CodeBlockCommand.js +8 -9
  12. package/CodeBlockCommand.js.flow +65 -65
  13. package/CodeBlockNodeSpec.js.flow +24 -24
  14. package/CodeMarkSpec.js.flow +14 -14
  15. package/ContentPlaceholderPlugin.js +3 -4
  16. package/ContentPlaceholderPlugin.js.flow +187 -187
  17. package/CursorPlaceholderPlugin.js +4 -4
  18. package/CursorPlaceholderPlugin.js.flow +115 -115
  19. package/DocLayoutCommand.js +9 -10
  20. package/DocLayoutCommand.js.flow +99 -99
  21. package/DocNodeSpec.js.flow +64 -64
  22. package/EMMarkSpec.js.flow +14 -14
  23. package/EditorCommands.js.flow +126 -126
  24. package/EditorKeyMap.js.flow +187 -187
  25. package/EditorMarks.js +1 -1
  26. package/EditorMarks.js.flow +71 -71
  27. package/EditorNodes.js +1 -1
  28. package/EditorNodes.js.flow +59 -59
  29. package/EditorPageLayoutPlugin.js +2 -2
  30. package/EditorPageLayoutPlugin.js.flow +67 -67
  31. package/EditorPlugins.js.flow +8 -8
  32. package/EditorSchema.js.flow +12 -12
  33. package/EditorState.js.flow +7 -7
  34. package/FontSizeMarkSpec.js.flow +49 -49
  35. package/FontTypeMarkSpec.js.flow +80 -80
  36. package/HTMLMutator.js +2 -3
  37. package/HTMLMutator.js.flow +59 -59
  38. package/HardBreakNodeSpec.js.flow +15 -15
  39. package/HeadingNodeSpec.js +1 -1
  40. package/HeadingNodeSpec.js.flow +52 -52
  41. package/HistoryRedoCommand.js +7 -8
  42. package/HistoryRedoCommand.js.flow +41 -41
  43. package/HistoryUndoCommand.js +7 -8
  44. package/HistoryUndoCommand.js.flow +41 -41
  45. package/HorizontalRuleCommand.js +7 -8
  46. package/HorizontalRuleCommand.js.flow +71 -71
  47. package/HorizontalRuleNodeSpec.js.flow +39 -39
  48. package/ImageUploadPlaceholderPlugin.js +2 -2
  49. package/ImageUploadPlaceholderPlugin.js.flow +192 -192
  50. package/LinkMarkSpec.js.flow +32 -32
  51. package/LinkSetURLCommand.js +8 -9
  52. package/LinkSetURLCommand.js.flow +117 -117
  53. package/LinkTooltipPlugin.js +3 -4
  54. package/LinkTooltipPlugin.js.flow +190 -190
  55. package/ListItemInsertNewLineCommand.js +7 -8
  56. package/ListItemInsertNewLineCommand.js.flow +77 -77
  57. package/ListItemMergeCommand.js +9 -10
  58. package/ListItemMergeCommand.js.flow +199 -199
  59. package/ListItemNodeSpec.js.flow +52 -52
  60. package/ListSplitCommand.js +7 -8
  61. package/ListSplitCommand.js.flow +54 -54
  62. package/ListToggleCommand.js +11 -12
  63. package/ListToggleCommand.js.flow +99 -99
  64. package/MarkNames.js.flow +18 -18
  65. package/MarksClearCommand.js +9 -10
  66. package/MarksClearCommand.js.flow +65 -65
  67. package/MathEditCommand.js +8 -9
  68. package/MathEditCommand.js.flow +120 -120
  69. package/MathNodeSpec.js.flow +46 -46
  70. package/NodeNames.js.flow +23 -23
  71. package/OrderedListNodeSpec.js +1 -1
  72. package/OrderedListNodeSpec.js.flow +132 -132
  73. package/ParagraphNodeSpec.js.flow +156 -156
  74. package/ParagraphSpacingCommand.js +9 -10
  75. package/ParagraphSpacingCommand.js.flow +144 -144
  76. package/PrintCommand.js +9 -10
  77. package/PrintCommand.js.flow +53 -53
  78. package/SelectionPlaceholderPlugin.js +4 -4
  79. package/SelectionPlaceholderPlugin.js.flow +131 -131
  80. package/SpacerMarkSpec.js +1 -1
  81. package/SpacerMarkSpec.js.flow +47 -47
  82. package/StrikeMarkSpec.js.flow +21 -21
  83. package/StrongMarkSpec.js.flow +25 -25
  84. package/StyleView.js +2 -3
  85. package/StyleView.js.flow +19 -19
  86. package/TableBackgroundColorCommand.js +25 -12
  87. package/TableBackgroundColorCommand.js.flow +83 -75
  88. package/TableBorderColorCommand.js +25 -12
  89. package/TableBorderColorCommand.js.flow +86 -75
  90. package/TableCellColorCommand.js +11 -11
  91. package/TableCellColorCommand.js.flow +75 -75
  92. package/TableCellMenuPlugin.js +3 -4
  93. package/TableCellMenuPlugin.js.flow +132 -132
  94. package/TableInsertCommand.js +9 -10
  95. package/TableInsertCommand.js.flow +120 -120
  96. package/TableMergeCellsCommand.js +7 -8
  97. package/TableMergeCellsCommand.js.flow +112 -112
  98. package/TableNodesSpecs.js.flow +78 -78
  99. package/TablePlugins.js.flow +14 -14
  100. package/TableResizePlugin.js +6 -6
  101. package/TableResizePlugin.js.flow +631 -632
  102. package/TextColorMarkSpec.js.flow +35 -35
  103. package/TextHighlightMarkSpec.js.flow +38 -38
  104. package/TextInsertTabSpaceCommand.js +7 -8
  105. package/TextInsertTabSpaceCommand.js.flow +106 -106
  106. package/TextNoWrapMarkSpec.js.flow +14 -14
  107. package/TextNodeSpec.js.flow +7 -7
  108. package/TextSelectionMarkSpec.js.flow +24 -24
  109. package/TextSubMarkSpec.js.flow +20 -20
  110. package/TextSuperMarkSpec.js.flow +20 -20
  111. package/TextUnderlineMarkSpec.js.flow +27 -27
  112. package/Types.js +5 -0
  113. package/Types.js.flow +80 -75
  114. package/WebFontLoader.js +2 -3
  115. package/WebFontLoader.js.flow +22 -22
  116. package/blockQuoteInputRule.js.flow +36 -36
  117. package/bom.xml +8533 -8895
  118. package/browser.js.flow +7 -7
  119. package/buildEditorPlugins.js +2 -3
  120. package/buildEditorPlugins.js.flow +49 -49
  121. package/buildInputRules.js.flow +81 -81
  122. package/client/CollabConnector.js +12 -12
  123. package/client/CollabConnector.js.flow +90 -90
  124. package/client/EditorConnection.js +2 -3
  125. package/client/EditorConnection.js.flow +323 -323
  126. package/client/Licit.js +59 -60
  127. package/client/Licit.js.flow +643 -643
  128. package/client/Licit.test.js +2 -2
  129. package/client/Licit.test.js.flow +98 -98
  130. package/client/Reporter.js +2 -3
  131. package/client/Reporter.js.flow +37 -37
  132. package/client/SimpleConnector.js +1 -1
  133. package/client/SimpleConnector.js.flow +61 -61
  134. package/client/http.js.flow +70 -70
  135. package/client/licit.css +12 -12
  136. package/client/throttle.js.flow +27 -27
  137. package/convertFromDOMElement.js.flow +36 -36
  138. package/convertFromHTML.js.flow +17 -17
  139. package/convertFromJSON.js.flow +56 -56
  140. package/convertToCSSPTValue.js.flow +22 -22
  141. package/convertToJSON.js.flow +7 -7
  142. package/createCommand.js +8 -9
  143. package/createCommand.js.flow +62 -62
  144. package/createEditorKeyMap.js +1 -1
  145. package/createEditorKeyMap.js.flow +94 -94
  146. package/createEmptyEditorState.js.flow +31 -31
  147. package/createTableResizingPlugin.js.flow +86 -86
  148. package/findActionableCell.js.flow +74 -74
  149. package/findActiveMark.js.flow +32 -32
  150. package/hyphenize.js.flow +17 -17
  151. package/index.d.ts +165 -165
  152. package/index.js.flow +10 -10
  153. package/insertTable.js.flow +56 -56
  154. package/isEditorStateEmpty.js.flow +32 -32
  155. package/isTableNode.js.flow +15 -15
  156. package/joinDown.js.flow +27 -27
  157. package/joinListNode.js.flow +55 -55
  158. package/joinUp.js.flow +39 -39
  159. package/keymaps.js.flow +185 -185
  160. package/lookUpElement.js.flow +14 -14
  161. package/nodeAt.js.flow +12 -12
  162. package/normalizeHTML.js.flow +78 -78
  163. package/package.json +156 -155
  164. package/patchAnchorElements.js.flow +38 -38
  165. package/patchBreakElements.js.flow +22 -22
  166. package/patchElementInlineStyles.js.flow +92 -92
  167. package/patchListElements.js.flow +276 -276
  168. package/patchMathElements.js.flow +60 -60
  169. package/patchParagraphElements.js.flow +20 -20
  170. package/patchStyleElements.js.flow +196 -196
  171. package/patchTableElements.js.flow +89 -89
  172. package/rebaseDocWithSteps.js.flow +42 -42
  173. package/sanitizeURL.js.flow +13 -13
  174. package/splitListItem.js +1 -1
  175. package/splitListItem.js.flow +191 -191
  176. package/styles.css +19 -19
  177. package/styles0.css +29 -29
  178. package/toClosestFontPtSize.js.flow +22 -22
  179. package/toSafeHTMLDocument.js.flow +9 -9
  180. package/toggleBlockquote.js.flow +108 -108
  181. package/toggleCodeBlock.js.flow +102 -102
  182. package/ui/AlertInfo.js +7 -8
  183. package/ui/AlertInfo.js.flow +64 -64
  184. package/ui/BookmarkNodeView.js +8 -10
  185. package/ui/BookmarkNodeView.js.flow +66 -66
  186. package/ui/CommandButton.js +7 -8
  187. package/ui/CommandButton.js.flow +68 -68
  188. package/ui/CommandMenu.js +8 -9
  189. package/ui/CommandMenu.js.flow +75 -75
  190. package/ui/CommandMenuButton.js +13 -14
  191. package/ui/CommandMenuButton.js.flow +131 -131
  192. package/ui/CustomEditorView.js +8 -9
  193. package/ui/CustomEditorView.js.flow +28 -28
  194. package/ui/CustomMenu.js +3 -4
  195. package/ui/CustomMenu.js.flow +17 -17
  196. package/ui/CustomMenuItem.js +6 -8
  197. package/ui/CustomMenuItem.js.flow +36 -36
  198. package/ui/CustomNodeView.js +2 -3
  199. package/ui/CustomNodeView.js.flow +200 -200
  200. package/ui/CustomRadioButton.js +6 -7
  201. package/ui/CustomRadioButton.js.flow +65 -65
  202. package/ui/DocLayoutEditor.js +9 -10
  203. package/ui/DocLayoutEditor.js.flow +146 -146
  204. package/ui/Editor.js +15 -16
  205. package/ui/Editor.js.flow +288 -288
  206. package/ui/EditorFrameset.js +5 -6
  207. package/ui/EditorFrameset.js.flow +81 -81
  208. package/ui/EditorToolbar.js +13 -14
  209. package/ui/EditorToolbar.js.flow +218 -218
  210. package/ui/EditorToolbarConfig.js.flow +164 -164
  211. package/ui/FontSizeCommandMenuButton.js +5 -6
  212. package/ui/FontSizeCommandMenuButton.js.flow +66 -66
  213. package/ui/FontTypeCommandMenuButton.js +5 -6
  214. package/ui/FontTypeCommandMenuButton.js.flow +61 -61
  215. package/ui/Frag.js +3 -4
  216. package/ui/Frag.js.flow +13 -13
  217. package/ui/Icon.js +9 -12
  218. package/ui/Icon.js.flow +89 -89
  219. package/ui/ImageInlineEditor.js +6 -7
  220. package/ui/ImageInlineEditor.js.flow +67 -67
  221. package/ui/KeyCodes.js.flow +12 -12
  222. package/ui/LinkTooltip.js +9 -10
  223. package/ui/LinkTooltip.js.flow +85 -85
  224. package/ui/LinkURLEditor.js +9 -10
  225. package/ui/LinkURLEditor.js.flow +117 -117
  226. package/ui/ListItemNodeView.js +2 -3
  227. package/ui/ListItemNodeView.js.flow +98 -98
  228. package/ui/ListTypeButton.js +13 -14
  229. package/ui/ListTypeButton.js.flow +131 -131
  230. package/ui/ListTypeCommandButton.js +5 -6
  231. package/ui/ListTypeCommandButton.js.flow +85 -85
  232. package/ui/ListTypeMenu.js +11 -12
  233. package/ui/ListTypeMenu.js.flow +70 -70
  234. package/ui/LoadingIndicator.js +3 -4
  235. package/ui/LoadingIndicator.js.flow +20 -20
  236. package/ui/MathEditor.js +10 -11
  237. package/ui/MathEditor.js.flow +78 -78
  238. package/ui/MathInlineEditor.js +8 -9
  239. package/ui/MathInlineEditor.js.flow +102 -102
  240. package/ui/MathNodeView.js +14 -16
  241. package/ui/MathNodeView.js.flow +186 -186
  242. package/ui/PasteMenu.js +10 -11
  243. package/ui/PasteMenu.js.flow +57 -57
  244. package/ui/ResizeObserver.js.flow +106 -106
  245. package/ui/RichTextEditor.js +9 -10
  246. package/ui/RichTextEditor.js.flow +133 -133
  247. package/ui/SelectionObserver.js +2 -3
  248. package/ui/SelectionObserver.js.flow +134 -134
  249. package/ui/TableCellMenu.js +6 -7
  250. package/ui/TableCellMenu.js.flow +51 -51
  251. package/ui/TableGridSizeEditor.js +19 -21
  252. package/ui/TableGridSizeEditor.js.flow +184 -184
  253. package/ui/TableNodeView.js +3 -4
  254. package/ui/TableNodeView.js.flow +25 -25
  255. package/ui/bindScrollHandler.js.flow +46 -46
  256. package/ui/canUseCSSFont.js.flow +43 -43
  257. package/ui/czi-body-layout-editor.css +16 -16
  258. package/ui/czi-bookmark-view.css +10 -10
  259. package/ui/czi-cursor-placeholder.css +36 -36
  260. package/ui/czi-custom-menu-button.css +18 -18
  261. package/ui/czi-custom-menu-item.css +30 -30
  262. package/ui/czi-custom-menu.css +8 -8
  263. package/ui/czi-custom-radio-button.css +80 -80
  264. package/ui/czi-custom-scrollbar.css +21 -21
  265. package/ui/czi-editor-frameset.css +81 -81
  266. package/ui/czi-editor-toolbar.css +122 -122
  267. package/ui/czi-editor.css +220 -220
  268. package/ui/czi-form.css +107 -107
  269. package/ui/czi-frag.css +3 -3
  270. package/ui/czi-heading.css +40 -40
  271. package/ui/czi-icon.css +72 -72
  272. package/ui/czi-image-resize-box.css +165 -165
  273. package/ui/czi-image-upload-editor.css +57 -57
  274. package/ui/czi-image-upload-placeholder.css +50 -50
  275. package/ui/czi-image-url-editor.css +38 -38
  276. package/ui/czi-image-view.css +125 -125
  277. package/ui/czi-indent.css +137 -137
  278. package/ui/czi-inline-editor.css +20 -20
  279. package/ui/czi-link-tooltip.css +71 -71
  280. package/ui/czi-list.css +410 -410
  281. package/ui/czi-loading-indicator.css +111 -111
  282. package/ui/czi-math-view.css +62 -62
  283. package/ui/czi-selection-placeholder.css +24 -24
  284. package/ui/czi-table-cell-menu.css +14 -14
  285. package/ui/czi-table-grid-size-editor.css +37 -37
  286. package/ui/czi-table.css +87 -87
  287. package/ui/czi-vars.css +2 -2
  288. package/ui/findActiveFontSize.js.flow +58 -58
  289. package/ui/findActiveFontType.js.flow +38 -38
  290. package/ui/fonts.css +460 -460
  291. package/ui/handleEditorDrop.js.flow +28 -28
  292. package/ui/handleEditorKeyDown.js.flow +39 -39
  293. package/ui/handleEditorPaste.js.flow +33 -33
  294. package/ui/htmlElementToRect.js.flow +18 -18
  295. package/ui/icon-font.css +9 -9
  296. package/ui/injectStyleSheet.js.flow +42 -42
  297. package/ui/isElementFullyVisible.js.flow +26 -26
  298. package/ui/isOffline.js.flow +8 -8
  299. package/ui/isReactClass.js.flow +12 -12
  300. package/ui/listType.css +21 -21
  301. package/ui/mathquill-editor/MathQuillEditor.js +15 -17
  302. package/ui/mathquill-editor/MathQuillEditor.js.flow +159 -159
  303. package/ui/mathquill-editor/MathQuillEditorSymbols.js.flow +483 -483
  304. package/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js +6 -7
  305. package/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js.flow +50 -50
  306. package/ui/mathquill-editor/czi-mathquill-editor-symbols-panel.css +39 -39
  307. package/ui/mathquill-editor/czi-mathquill-editor.css +50 -50
  308. package/ui/mathquill-editor/mathquill-import-kludge.js.flow +24 -24
  309. package/ui/renderLaTeXAsHTML.js +1 -1
  310. package/ui/renderLaTeXAsHTML.js.flow +46 -46
  311. package/ui/resolveImage.js +1 -1
  312. package/ui/resolveImage.js.flow +123 -123
  313. package/ui/toCSSColor.js.flow +51 -51
  314. package/ui/toCSSLineSpacing.js.flow +55 -55
  315. package/ui/toHexColor.js.flow +26 -26
  316. package/ui/uuid.js.flow +9 -9
  317. package/uuid.js.flow +9 -9
@@ -1,156 +1,156 @@
1
- // @flow
2
-
3
- import convertToCSSPTValue from './convertToCSSPTValue.js';
4
- import toCSSLineSpacing from './ui/toCSSLineSpacing.js';
5
- import { Node } from 'prosemirror-model';
6
-
7
- import type { NodeSpec } from './Types.js';
8
-
9
- // This assumes that every 36pt maps to one indent level.
10
- export const INDENT_MARGIN_PT_SIZE = 36;
11
- export const MIN_INDENT_LEVEL = 0;
12
- export const MAX_INDENT_LEVEL = 7;
13
- export const ATTRIBUTE_INDENT = 'data-indent';
14
- export const ATTRIBUTE_STYLE_LEVEL = 'data-style-level';
15
- export const RESERVED_STYLE_NONE = 'None';
16
- export const RESERVED_STYLE_NONE_NUMBERING = RESERVED_STYLE_NONE + '-@#$-';
17
- const cssVal = new Set(['', '0%', '0pt', '0px']);
18
-
19
- export const EMPTY_CSS_VALUE = cssVal;
20
-
21
- const ALIGN_PATTERN = /(left|right|center|justify)/;
22
-
23
- // https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js
24
- // :: NodeSpec A plain paragraph textblock. Represented in the DOM
25
- // as a `<p>` element.
26
- const ParagraphNodeSpec: NodeSpec = {
27
- attrs: {
28
- align: {
29
- default: null,
30
- },
31
- color: {
32
- default: null,
33
- },
34
- id: {
35
- default: null,
36
- },
37
- indent: {
38
- default: null,
39
- },
40
- lineSpacing: {
41
- default: null,
42
- },
43
- // TODO: Add UI to let user edit / clear padding.
44
- paddingBottom: {
45
- default: null,
46
- },
47
- // TODO: Add UI to let user edit / clear padding.
48
- paddingTop: {
49
- default: null,
50
- },
51
- },
52
- content: 'inline*',
53
- group: 'block',
54
- parseDOM: [
55
- {
56
- tag: 'p',
57
- getAttrs,
58
- },
59
- ],
60
- toDOM,
61
- };
62
-
63
- function getAttrs(dom: HTMLElement): Object {
64
- const {
65
- lineHeight,
66
- textAlign,
67
- marginLeft,
68
- paddingTop,
69
- paddingBottom,
70
- } = dom.style;
71
-
72
- let align = dom.getAttribute('align') || textAlign || '';
73
- align = ALIGN_PATTERN.test(align) ? align : null;
74
-
75
- let indent = parseInt(dom.getAttribute(ATTRIBUTE_INDENT), 10);
76
-
77
- if (!indent && marginLeft) {
78
- indent = convertMarginLeftToIndentValue(marginLeft);
79
- }
80
-
81
- indent = indent || MIN_INDENT_LEVEL;
82
-
83
- const lineSpacing = lineHeight ? toCSSLineSpacing(lineHeight) : null;
84
-
85
- const id = dom.getAttribute('id') || '';
86
- return {
87
- align,
88
- indent,
89
- lineSpacing,
90
- paddingTop,
91
- paddingBottom,
92
- id,
93
- };
94
- }
95
-
96
- function getStyle(attrs: Object) {
97
- return getStyleEx(
98
- attrs.align,
99
- attrs.lineSpacing,
100
- attrs.paddingTop,
101
- attrs.paddingBottom,
102
- );
103
- }
104
-
105
- function getStyleEx(align, lineSpacing, paddingTop, paddingBottom) {
106
- let style = '';
107
- if (align && align !== 'left') {
108
- style += `text-align: ${align};`;
109
- }
110
-
111
- if (lineSpacing) {
112
- const cssLineSpacing = toCSSLineSpacing(lineSpacing);
113
- style +=
114
- `line-height: ${cssLineSpacing};` +
115
- // This creates the local css variable `--czi-content-line-height`
116
- // that its children may apply.
117
- `--czi-content-line-height: ${cssLineSpacing};`;
118
- }
119
-
120
- if (paddingTop && !EMPTY_CSS_VALUE.has(paddingTop)) {
121
- style += `padding-top: ${paddingTop};`;
122
- }
123
- if (paddingBottom && !EMPTY_CSS_VALUE.has(paddingBottom)) {
124
- style += `padding-bottom: ${paddingBottom};`;
125
- }
126
- return { style };
127
-
128
- }
129
-
130
- function toDOM(node: Node): Array<any> {
131
- const { indent, id } = node.attrs;
132
- const attrs = {};
133
- const { style } = getStyle(node.attrs);
134
-
135
- style && (attrs.style = style);
136
-
137
- if (indent) {
138
- attrs[ATTRIBUTE_INDENT] = String(indent);
139
- }
140
- if (id) {
141
- attrs.id = id;
142
- }
143
-
144
- return ['p', attrs, 0];
145
- }
146
-
147
- export const toParagraphDOM = toDOM;
148
- export const getParagraphNodeAttrs = getAttrs;
149
- export const getParagraphStyle = getStyle;
150
-
151
- export function convertMarginLeftToIndentValue(marginLeft: string): number {
152
- const ptValue = convertToCSSPTValue(marginLeft);
153
- return Math.min(Math.max(Math.floor(ptValue / INDENT_MARGIN_PT_SIZE), MIN_INDENT_LEVEL), MAX_INDENT_LEVEL);
154
- }
155
-
156
- export default ParagraphNodeSpec;
1
+ // @flow
2
+
3
+ import convertToCSSPTValue from './convertToCSSPTValue.js';
4
+ import toCSSLineSpacing from './ui/toCSSLineSpacing.js';
5
+ import { Node } from 'prosemirror-model';
6
+
7
+ import type { NodeSpec } from './Types.js';
8
+
9
+ // This assumes that every 36pt maps to one indent level.
10
+ export const INDENT_MARGIN_PT_SIZE = 36;
11
+ export const MIN_INDENT_LEVEL = 0;
12
+ export const MAX_INDENT_LEVEL = 7;
13
+ export const ATTRIBUTE_INDENT = 'data-indent';
14
+ export const ATTRIBUTE_STYLE_LEVEL = 'data-style-level';
15
+ export const RESERVED_STYLE_NONE = 'None';
16
+ export const RESERVED_STYLE_NONE_NUMBERING = RESERVED_STYLE_NONE + '-@#$-';
17
+ const cssVal = new Set(['', '0%', '0pt', '0px']);
18
+
19
+ export const EMPTY_CSS_VALUE = cssVal;
20
+
21
+ const ALIGN_PATTERN = /(left|right|center|justify)/;
22
+
23
+ // https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js
24
+ // :: NodeSpec A plain paragraph textblock. Represented in the DOM
25
+ // as a `<p>` element.
26
+ const ParagraphNodeSpec: NodeSpec = {
27
+ attrs: {
28
+ align: {
29
+ default: null,
30
+ },
31
+ color: {
32
+ default: null,
33
+ },
34
+ id: {
35
+ default: null,
36
+ },
37
+ indent: {
38
+ default: null,
39
+ },
40
+ lineSpacing: {
41
+ default: null,
42
+ },
43
+ // TODO: Add UI to let user edit / clear padding.
44
+ paddingBottom: {
45
+ default: null,
46
+ },
47
+ // TODO: Add UI to let user edit / clear padding.
48
+ paddingTop: {
49
+ default: null,
50
+ },
51
+ },
52
+ content: 'inline*',
53
+ group: 'block',
54
+ parseDOM: [
55
+ {
56
+ tag: 'p',
57
+ getAttrs,
58
+ },
59
+ ],
60
+ toDOM,
61
+ };
62
+
63
+ function getAttrs(dom: HTMLElement): Object {
64
+ const {
65
+ lineHeight,
66
+ textAlign,
67
+ marginLeft,
68
+ paddingTop,
69
+ paddingBottom,
70
+ } = dom.style;
71
+
72
+ let align = dom.getAttribute('align') || textAlign || '';
73
+ align = ALIGN_PATTERN.test(align) ? align : null;
74
+
75
+ let indent = parseInt(dom.getAttribute(ATTRIBUTE_INDENT), 10);
76
+
77
+ if (!indent && marginLeft) {
78
+ indent = convertMarginLeftToIndentValue(marginLeft);
79
+ }
80
+
81
+ indent = indent || MIN_INDENT_LEVEL;
82
+
83
+ const lineSpacing = lineHeight ? toCSSLineSpacing(lineHeight) : null;
84
+
85
+ const id = dom.getAttribute('id') || '';
86
+ return {
87
+ align,
88
+ indent,
89
+ lineSpacing,
90
+ paddingTop,
91
+ paddingBottom,
92
+ id,
93
+ };
94
+ }
95
+
96
+ function getStyle(attrs: Object) {
97
+ return getStyleEx(
98
+ attrs.align,
99
+ attrs.lineSpacing,
100
+ attrs.paddingTop,
101
+ attrs.paddingBottom,
102
+ );
103
+ }
104
+
105
+ function getStyleEx(align, lineSpacing, paddingTop, paddingBottom) {
106
+ let style = '';
107
+ if (align && align !== 'left') {
108
+ style += `text-align: ${align};`;
109
+ }
110
+
111
+ if (lineSpacing) {
112
+ const cssLineSpacing = toCSSLineSpacing(lineSpacing);
113
+ style +=
114
+ `line-height: ${cssLineSpacing};` +
115
+ // This creates the local css variable `--czi-content-line-height`
116
+ // that its children may apply.
117
+ `--czi-content-line-height: ${cssLineSpacing};`;
118
+ }
119
+
120
+ if (paddingTop && !EMPTY_CSS_VALUE.has(paddingTop)) {
121
+ style += `padding-top: ${paddingTop};`;
122
+ }
123
+ if (paddingBottom && !EMPTY_CSS_VALUE.has(paddingBottom)) {
124
+ style += `padding-bottom: ${paddingBottom};`;
125
+ }
126
+ return { style };
127
+
128
+ }
129
+
130
+ function toDOM(node: Node): Array<any> {
131
+ const { indent, id } = node.attrs;
132
+ const attrs = {};
133
+ const { style } = getStyle(node.attrs);
134
+
135
+ style && (attrs.style = style);
136
+
137
+ if (indent) {
138
+ attrs[ATTRIBUTE_INDENT] = String(indent);
139
+ }
140
+ if (id) {
141
+ attrs.id = id;
142
+ }
143
+
144
+ return ['p', attrs, 0];
145
+ }
146
+
147
+ export const toParagraphDOM = toDOM;
148
+ export const getParagraphNodeAttrs = getAttrs;
149
+ export const getParagraphStyle = getStyle;
150
+
151
+ export function convertMarginLeftToIndentValue(marginLeft: string): number {
152
+ const ptValue = convertToCSSPTValue(marginLeft);
153
+ return Math.min(Math.max(Math.floor(ptValue / INDENT_MARGIN_PT_SIZE), MIN_INDENT_LEVEL), MAX_INDENT_LEVEL);
154
+ }
155
+
156
+ export default ParagraphNodeSpec;
@@ -4,15 +4,15 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
4
4
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
5
5
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
6
6
  function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
7
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
7
8
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
8
9
  function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
9
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
10
10
  function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
11
11
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
12
12
  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; }
13
13
  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) { _defineProperty(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; }
14
14
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
15
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
15
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
16
16
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
17
17
  import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
18
18
  import { AllSelection, TextSelection } from 'prosemirror-state';
@@ -80,14 +80,13 @@ export function setParagraphSpacing(tr, schema, paragraphSpacing, isAfter) {
80
80
  return tr;
81
81
  }
82
82
  var ParagraphSpacingCommand = /*#__PURE__*/function (_UICommand) {
83
- _inherits(ParagraphSpacingCommand, _UICommand);
84
83
  function ParagraphSpacingCommand(paragraphSpacing, isAfter) {
85
84
  var _this;
86
85
  _classCallCheck(this, ParagraphSpacingCommand);
87
86
  _this = _callSuper(this, ParagraphSpacingCommand);
88
- _defineProperty(_assertThisInitialized(_this), "_paragraphSpacing", void 0);
89
- _defineProperty(_assertThisInitialized(_this), "_isAfter", void 0);
90
- _defineProperty(_assertThisInitialized(_this), "execute", function (state, dispatch, view) {
87
+ _defineProperty(_this, "_paragraphSpacing", void 0);
88
+ _defineProperty(_this, "_isAfter", void 0);
89
+ _defineProperty(_this, "execute", function (state, dispatch, view) {
91
90
  var schema = state.schema,
92
91
  selection = state.selection;
93
92
  var tr = setParagraphSpacing(state.tr.setSelection(selection), schema, _this._paragraphSpacing, _this._isAfter);
@@ -98,22 +97,22 @@ var ParagraphSpacingCommand = /*#__PURE__*/function (_UICommand) {
98
97
  return false;
99
98
  }
100
99
  });
101
- _defineProperty(_assertThisInitialized(_this), "waitForUserInput", function (_state, _dispatch, _view, _event) {
100
+ _defineProperty(_this, "waitForUserInput", function (_state, _dispatch, _view, _event) {
102
101
  return Promise.resolve(undefined);
103
102
  });
104
- _defineProperty(_assertThisInitialized(_this), "executeWithUserInput", function (_state, _dispatch, _view, _inputs) {
103
+ _defineProperty(_this, "executeWithUserInput", function (_state, _dispatch, _view, _inputs) {
105
104
  return false;
106
105
  });
107
106
  _this._paragraphSpacing = paragraphSpacing;
108
107
  _this._isAfter = isAfter;
109
108
  return _this;
110
109
  }
111
- _createClass(ParagraphSpacingCommand, [{
110
+ _inherits(ParagraphSpacingCommand, _UICommand);
111
+ return _createClass(ParagraphSpacingCommand, [{
112
112
  key: "cancel",
113
113
  value: function cancel() {
114
114
  return null;
115
115
  }
116
116
  }]);
117
- return ParagraphSpacingCommand;
118
117
  }(UICommand);
119
118
  export default ParagraphSpacingCommand;
@@ -1,144 +1,144 @@
1
- // @flow
2
-
3
- import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
4
- import { AllSelection, TextSelection } from 'prosemirror-state';
5
- import { BLOCKQUOTE, HEADING, LIST_ITEM, PARAGRAPH } from './NodeNames';
6
- import { EditorState } from 'prosemirror-state';
7
- import { EditorView } from 'prosemirror-view';
8
- import { Schema } from 'prosemirror-model';
9
- import { Transform } from 'prosemirror-transform';
10
- import * as React from 'react';
11
-
12
- export function setParagraphSpacing(
13
- tr: Transform,
14
- schema: Schema,
15
- paragraphSpacing: ?string,
16
- isAfter: ?boolean
17
- ): Transform {
18
- const { selection, doc } = tr;
19
- if (!selection || !doc) {
20
- return tr;
21
- }
22
-
23
- if (
24
- !(selection instanceof TextSelection) &&
25
- !(selection instanceof AllSelection)
26
- ) {
27
- return tr;
28
- }
29
-
30
- const { from, to } = selection;
31
- const paragraph = schema.nodes[PARAGRAPH];
32
- const heading = schema.nodes[HEADING];
33
- const listItem = schema.nodes[LIST_ITEM];
34
- const blockquote = schema.nodes[BLOCKQUOTE];
35
- if (!paragraph && !heading && !listItem && !blockquote) {
36
- return tr;
37
- }
38
-
39
- const tasks = [];
40
- const paragraphSpacingValue = paragraphSpacing || null;
41
-
42
- doc.nodesBetween(from, to, (node, pos, parentNode) => {
43
- const nodeType = node.type;
44
- if (
45
- nodeType === paragraph ||
46
- nodeType === heading ||
47
- nodeType === listItem ||
48
- nodeType === blockquote
49
- ) {
50
- const paragraphSpacing = node.attrs.paragraphSpacing || null;
51
- if (paragraphSpacing !== paragraphSpacingValue) {
52
- tasks.push({
53
- node,
54
- pos,
55
- nodeType,
56
- });
57
- }
58
- return nodeType === listItem ? true : false;
59
- }
60
- return true;
61
- });
62
-
63
- if (!tasks.length) {
64
- return tr;
65
- }
66
-
67
- tasks.forEach((job) => {
68
- const { node, pos, nodeType } = job;
69
- let { attrs } = node;
70
- if (isAfter) {
71
- attrs = {
72
- ...attrs,
73
- paragraphSpacingAfter: paragraphSpacingValue
74
- ? paragraphSpacingValue
75
- : null,
76
- };
77
- } else {
78
- attrs = {
79
- ...attrs,
80
- paragraphSpacingBefore: paragraphSpacingValue
81
- ? paragraphSpacingValue
82
- : null,
83
- };
84
- }
85
- tr = tr.setNodeMarkup(pos, nodeType, attrs, node.marks);
86
- });
87
-
88
- return tr;
89
- }
90
-
91
- class ParagraphSpacingCommand extends UICommand {
92
- _paragraphSpacing: ?string;
93
- _isAfter: ?boolean;
94
-
95
- constructor(paragraphSpacing: ?string, isAfter: ?boolean) {
96
- super();
97
- this._paragraphSpacing = paragraphSpacing;
98
- this._isAfter = isAfter;
99
- }
100
-
101
- execute = (
102
- state: EditorState,
103
- dispatch: ?(tr: Transform) => void,
104
- view: ?EditorView
105
- ): boolean => {
106
- const { schema, selection } = state;
107
- const tr = setParagraphSpacing(
108
- state.tr.setSelection(selection),
109
- schema,
110
- this._paragraphSpacing,
111
- this._isAfter
112
- );
113
- if (tr.docChanged) {
114
- dispatch && dispatch(tr);
115
- return true;
116
- } else {
117
- return false;
118
- }
119
- };
120
-
121
- waitForUserInput = (
122
- _state: EditorState,
123
- _dispatch: ?(tr: Transform) => void,
124
- _view: ?EditorView,
125
- _event: ?React.SyntheticEvent
126
- ): Promise<undefined> => {
127
- return Promise.resolve(undefined);
128
- };
129
-
130
- executeWithUserInput = (
131
- _state: EditorState,
132
- _dispatch: ?(tr: Transform) => void,
133
- _view: ?EditorView,
134
- _inputs: ?string
135
- ): boolean => {
136
- return false;
137
- };
138
-
139
- cancel(): void {
140
- return null;
141
- }
142
- }
143
-
144
- export default ParagraphSpacingCommand;
1
+ // @flow
2
+
3
+ import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
4
+ import { AllSelection, TextSelection } from 'prosemirror-state';
5
+ import { BLOCKQUOTE, HEADING, LIST_ITEM, PARAGRAPH } from './NodeNames';
6
+ import { EditorState } from 'prosemirror-state';
7
+ import { EditorView } from 'prosemirror-view';
8
+ import { Schema } from 'prosemirror-model';
9
+ import { Transform } from 'prosemirror-transform';
10
+ import * as React from 'react';
11
+
12
+ export function setParagraphSpacing(
13
+ tr: Transform,
14
+ schema: Schema,
15
+ paragraphSpacing: ?string,
16
+ isAfter: ?boolean
17
+ ): Transform {
18
+ const { selection, doc } = tr;
19
+ if (!selection || !doc) {
20
+ return tr;
21
+ }
22
+
23
+ if (
24
+ !(selection instanceof TextSelection) &&
25
+ !(selection instanceof AllSelection)
26
+ ) {
27
+ return tr;
28
+ }
29
+
30
+ const { from, to } = selection;
31
+ const paragraph = schema.nodes[PARAGRAPH];
32
+ const heading = schema.nodes[HEADING];
33
+ const listItem = schema.nodes[LIST_ITEM];
34
+ const blockquote = schema.nodes[BLOCKQUOTE];
35
+ if (!paragraph && !heading && !listItem && !blockquote) {
36
+ return tr;
37
+ }
38
+
39
+ const tasks = [];
40
+ const paragraphSpacingValue = paragraphSpacing || null;
41
+
42
+ doc.nodesBetween(from, to, (node, pos, parentNode) => {
43
+ const nodeType = node.type;
44
+ if (
45
+ nodeType === paragraph ||
46
+ nodeType === heading ||
47
+ nodeType === listItem ||
48
+ nodeType === blockquote
49
+ ) {
50
+ const paragraphSpacing = node.attrs.paragraphSpacing || null;
51
+ if (paragraphSpacing !== paragraphSpacingValue) {
52
+ tasks.push({
53
+ node,
54
+ pos,
55
+ nodeType,
56
+ });
57
+ }
58
+ return nodeType === listItem ? true : false;
59
+ }
60
+ return true;
61
+ });
62
+
63
+ if (!tasks.length) {
64
+ return tr;
65
+ }
66
+
67
+ tasks.forEach((job) => {
68
+ const { node, pos, nodeType } = job;
69
+ let { attrs } = node;
70
+ if (isAfter) {
71
+ attrs = {
72
+ ...attrs,
73
+ paragraphSpacingAfter: paragraphSpacingValue
74
+ ? paragraphSpacingValue
75
+ : null,
76
+ };
77
+ } else {
78
+ attrs = {
79
+ ...attrs,
80
+ paragraphSpacingBefore: paragraphSpacingValue
81
+ ? paragraphSpacingValue
82
+ : null,
83
+ };
84
+ }
85
+ tr = tr.setNodeMarkup(pos, nodeType, attrs, node.marks);
86
+ });
87
+
88
+ return tr;
89
+ }
90
+
91
+ class ParagraphSpacingCommand extends UICommand {
92
+ _paragraphSpacing: ?string;
93
+ _isAfter: ?boolean;
94
+
95
+ constructor(paragraphSpacing: ?string, isAfter: ?boolean) {
96
+ super();
97
+ this._paragraphSpacing = paragraphSpacing;
98
+ this._isAfter = isAfter;
99
+ }
100
+
101
+ execute = (
102
+ state: EditorState,
103
+ dispatch: ?(tr: Transform) => void,
104
+ view: ?EditorView
105
+ ): boolean => {
106
+ const { schema, selection } = state;
107
+ const tr = setParagraphSpacing(
108
+ state.tr.setSelection(selection),
109
+ schema,
110
+ this._paragraphSpacing,
111
+ this._isAfter
112
+ );
113
+ if (tr.docChanged) {
114
+ dispatch && dispatch(tr);
115
+ return true;
116
+ } else {
117
+ return false;
118
+ }
119
+ };
120
+
121
+ waitForUserInput = (
122
+ _state: EditorState,
123
+ _dispatch: ?(tr: Transform) => void,
124
+ _view: ?EditorView,
125
+ _event: ?React.SyntheticEvent
126
+ ): Promise<undefined> => {
127
+ return Promise.resolve(undefined);
128
+ };
129
+
130
+ executeWithUserInput = (
131
+ _state: EditorState,
132
+ _dispatch: ?(tr: Transform) => void,
133
+ _view: ?EditorView,
134
+ _inputs: ?string
135
+ ): boolean => {
136
+ return false;
137
+ };
138
+
139
+ cancel(): void {
140
+ return null;
141
+ }
142
+ }
143
+
144
+ export default ParagraphSpacingCommand;