@manuscripts/body-editor 3.12.67 → 3.13.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 (289) hide show
  1. package/dist/cjs/components/toolbar/type-selector/styles.js +2 -1
  2. package/dist/cjs/versions.js +1 -1
  3. package/dist/es/components/toolbar/type-selector/styles.js +2 -1
  4. package/dist/es/versions.js +1 -1
  5. package/dist/types/components/toolbar/type-selector/styles.d.ts +2 -2
  6. package/dist/types/lib/footnotes.d.ts +4 -2
  7. package/dist/types/lib/utils.d.ts +5 -4
  8. package/dist/types/versions.d.ts +1 -1
  9. package/package.json +37 -36
  10. package/{dist/es/lib/statistics.js → src/__mocks__/styleMock.ts} +2 -14
  11. package/src/assets.ts +20 -0
  12. package/src/classes/collabProvider.ts +38 -0
  13. package/src/clipboard.ts +54 -0
  14. package/src/commands.ts +2109 -0
  15. package/src/components/ChangeHandlingForm.tsx +54 -0
  16. package/src/components/LanguageDropdown/index.tsx +343 -0
  17. package/src/components/affiliations/AffiliationForm.tsx +238 -0
  18. package/src/components/affiliations/AffiliationItem.tsx +151 -0
  19. package/src/components/affiliations/AffiliationList.tsx +71 -0
  20. package/src/components/affiliations/AffiliationsModal.tsx +676 -0
  21. package/src/components/affiliations/AffiliationsPanel.tsx +76 -0
  22. package/src/components/affiliations/CreateAffiliationModal.tsx +135 -0
  23. package/src/components/authors/AuthorDetailsForm.tsx +438 -0
  24. package/src/components/authors/AuthorList.tsx +81 -0
  25. package/src/components/authors/AuthorsModal.tsx +642 -0
  26. package/src/components/authors/AuthorsPanel.tsx +69 -0
  27. package/src/components/authors/CreateAuthorModal.tsx +172 -0
  28. package/src/components/authors/CreditDrawer.tsx +71 -0
  29. package/src/components/authors/DraggableAuthor.tsx +228 -0
  30. package/src/components/authors/useManageAffiliations.tsx +77 -0
  31. package/src/components/authors/useManageCredit.tsx +63 -0
  32. package/src/components/authors-affiliations/AuthorsAndAffiliationsModals.tsx +170 -0
  33. package/src/components/authors-affiliations/GenericPanel.tsx +164 -0
  34. package/src/components/authors-affiliations/ModalTabs.tsx +100 -0
  35. package/src/components/awards/AwardForm.tsx +338 -0
  36. package/src/components/awards/AwardModal.tsx +120 -0
  37. package/src/components/awards/DeleteAwardDiaolog.tsx +52 -0
  38. package/src/components/dialog/ConfirmationDialog.tsx +131 -0
  39. package/src/components/form/CreateModalStyles.tsx +37 -0
  40. package/src/components/form/FormFooter.tsx +54 -0
  41. package/src/components/form/FormPlaceholder.tsx +71 -0
  42. package/src/components/form/ModalFormActions.tsx +88 -0
  43. package/src/components/form/UnsavedLabel.tsx +49 -0
  44. package/src/components/hooks/use-debounce.ts +56 -0
  45. package/src/components/hooks/useAffiliationShowsErrorIndicator.ts +51 -0
  46. package/src/components/hooks/useAuthorShowsErrorIndicator.ts +73 -0
  47. package/src/components/keyboard-shortcuts-modal/FormattedShortcut.tsx +56 -0
  48. package/src/components/keyboard-shortcuts-modal/KeyboardShortcutsModal.tsx +283 -0
  49. package/src/components/keyboard-shortcuts-modal/keyboard-shortcuts.ts +304 -0
  50. package/src/components/keywords/AddKeywordInline.tsx +284 -0
  51. package/src/components/keywords/DeleteKeywordDialog.tsx +52 -0
  52. package/src/components/modal-drawer/GenericDrawer.tsx +65 -0
  53. package/src/components/modal-drawer/GenericDrawerGroup.tsx +125 -0
  54. package/src/components/outline/DraggableTree.tsx +438 -0
  55. package/src/components/outline/ManuscriptOutline.tsx +127 -0
  56. package/src/components/outline/Outline.tsx +141 -0
  57. package/src/components/references/BibliographyItemSource.ts +80 -0
  58. package/src/components/references/CitationEditor.tsx +301 -0
  59. package/src/components/references/CitationViewer.tsx +62 -0
  60. package/src/components/references/ImportBibliographyForm.tsx +232 -0
  61. package/src/components/references/ImportBibliographyModal.tsx +159 -0
  62. package/src/components/references/ReferenceForm/PersonDropDown.tsx +93 -0
  63. package/src/components/references/ReferenceForm/ReferenceForm.tsx +701 -0
  64. package/src/components/references/ReferenceForm/config.ts +133 -0
  65. package/src/components/references/ReferenceForm/styled-components.ts +156 -0
  66. package/src/components/references/ReferenceLine.tsx +43 -0
  67. package/src/components/references/ReferenceSearch.tsx +163 -0
  68. package/src/components/references/ReferenceSearchResults.tsx +113 -0
  69. package/src/components/references/ReferenceSearchResultsPlaceholder.tsx +71 -0
  70. package/src/components/references/ReferenceSearchSection.tsx +124 -0
  71. package/src/components/references/ReferencesEditor.tsx +61 -0
  72. package/src/components/references/ReferencesModal.tsx +352 -0
  73. package/src/components/references/SearchInput.tsx +98 -0
  74. package/src/components/toolbar/InsertEmbedDialog.tsx +222 -0
  75. package/src/components/toolbar/InsertTableDialog.tsx +208 -0
  76. package/src/components/toolbar/ListMenuItem.tsx +203 -0
  77. package/src/components/toolbar/helpers.ts +547 -0
  78. package/src/components/toolbar/type-selector/OptionComponent.tsx +89 -0
  79. package/src/components/toolbar/type-selector/TypeSelector.tsx +157 -0
  80. package/src/components/toolbar/type-selector/styles.ts +79 -0
  81. package/src/components/views/CrossReferenceItems.tsx +199 -0
  82. package/src/components/views/DeleteEmbedDialog.tsx +83 -0
  83. package/src/components/views/DeleteFootnoteDialog.tsx +54 -0
  84. package/src/components/views/FigureDropdown.tsx +423 -0
  85. package/src/components/views/FootnotesSelector.tsx +255 -0
  86. package/src/components/views/InsertSpecialCharacter.tsx +245 -0
  87. package/src/components/views/LinkForm.tsx +220 -0
  88. package/src/components/views/TableCellContextMenu.tsx +241 -0
  89. package/src/configs/ManuscriptsEditor.ts +140 -0
  90. package/src/configs/editor-plugins.ts +119 -0
  91. package/src/configs/editor-views.ts +139 -0
  92. package/src/icons.ts +62 -0
  93. package/src/index.ts +65 -0
  94. package/src/keys/highlight.ts +65 -0
  95. package/src/keys/index.ts +33 -0
  96. package/src/keys/keyword.ts +69 -0
  97. package/src/keys/list.ts +156 -0
  98. package/src/keys/misc.ts +112 -0
  99. package/src/keys/title.ts +221 -0
  100. package/src/lib/__tests__/__fixtures__/doc.json +388 -0
  101. package/src/lib/__tests__/__snapshots__/paste.test.ts.snap +24 -0
  102. package/src/lib/__tests__/authors.test.ts +202 -0
  103. package/src/lib/__tests__/helpers.test.ts +46 -0
  104. package/src/lib/__tests__/paste.test.ts +57 -0
  105. package/src/lib/__tests__/plugins.test.ts +176 -0
  106. package/src/lib/__tests__/url.test.ts +31 -0
  107. package/src/lib/array-reducer.ts +68 -0
  108. package/src/lib/authors-and-affiliations.ts +81 -0
  109. package/src/lib/authors.ts +67 -0
  110. package/src/lib/capabilities.ts +55 -0
  111. package/src/lib/codemirror.ts +37 -0
  112. package/src/lib/comments.ts +123 -0
  113. package/src/lib/context-menu.ts +745 -0
  114. package/src/lib/copy.ts +30 -0
  115. package/src/lib/crossref.ts +90 -0
  116. package/src/lib/dnd.ts +29 -0
  117. package/src/lib/doc.ts +167 -0
  118. package/src/lib/dompurify.ts +28 -0
  119. package/src/lib/files.ts +180 -0
  120. package/src/lib/footnotes.ts +83 -0
  121. package/src/lib/get-media-type.ts +105 -0
  122. package/src/lib/helpers.ts +199 -0
  123. package/src/lib/hierarchy.ts +117 -0
  124. package/src/lib/languages.ts +37 -0
  125. package/src/lib/lists.ts +56 -0
  126. package/src/lib/math.ts +111 -0
  127. package/src/lib/media.ts +334 -0
  128. package/src/lib/navigation-utils.ts +235 -0
  129. package/src/lib/normalize.ts +70 -0
  130. package/src/lib/paste.ts +304 -0
  131. package/src/lib/placeholder.ts +32 -0
  132. package/src/lib/platform.ts +18 -0
  133. package/src/lib/plugins.ts +22 -0
  134. package/src/lib/popper.ts +180 -0
  135. package/src/lib/position-menu.ts +184 -0
  136. package/src/lib/references.ts +94 -0
  137. package/src/lib/template.ts +29 -0
  138. package/src/lib/track-changes-utils.ts +34 -0
  139. package/{dist/types/lib/statistics.d.ts → src/lib/url.ts} +11 -8
  140. package/src/lib/use-do-with-debounce.ts +39 -0
  141. package/src/lib/utils.ts +323 -0
  142. package/src/lib/view.ts +100 -0
  143. package/src/menus.tsx +684 -0
  144. package/src/node-type-icons.tsx +83 -0
  145. package/src/plugins/__tests__/__fixtures__/deleted-footnote.json +140 -0
  146. package/src/plugins/__tests__/__fixtures__/inserted-footnote.json +153 -0
  147. package/src/plugins/__tests__/footnotes.test.ts +67 -0
  148. package/src/plugins/accessibility_element.ts +219 -0
  149. package/src/plugins/add-subtitle.ts +102 -0
  150. package/src/plugins/affiliations.ts +136 -0
  151. package/src/plugins/alt-titles.ts +219 -0
  152. package/src/plugins/bibliography.ts +235 -0
  153. package/src/plugins/comments.ts +328 -0
  154. package/src/plugins/cross-references.ts +70 -0
  155. package/src/plugins/detect-inconsistency/detect-inconsistency-utils.ts +102 -0
  156. package/src/plugins/detect-inconsistency/index.ts +55 -0
  157. package/src/plugins/detect-inconsistency/validators.ts +283 -0
  158. package/src/plugins/doi.ts +66 -0
  159. package/src/plugins/editor-props.ts +39 -0
  160. package/src/plugins/elements.ts +60 -0
  161. package/src/plugins/footnotes.ts +298 -0
  162. package/src/plugins/link.ts +53 -0
  163. package/src/plugins/lock-body.ts +136 -0
  164. package/src/plugins/move-node.ts +55 -0
  165. package/src/plugins/objects.ts +125 -0
  166. package/src/plugins/paragraphs.ts +90 -0
  167. package/src/plugins/persist.ts +64 -0
  168. package/src/plugins/persistent-cursor.ts +66 -0
  169. package/src/plugins/placeholder.ts +219 -0
  170. package/src/plugins/prevent-empty.ts +50 -0
  171. package/src/plugins/search-replace/index.ts +157 -0
  172. package/src/plugins/search-replace/lib.ts +95 -0
  173. package/src/plugins/section_category.ts +212 -0
  174. package/src/plugins/section_title/autocompletion.ts +87 -0
  175. package/src/plugins/section_title/index.ts +105 -0
  176. package/src/plugins/selected-suggestion.ts +243 -0
  177. package/src/plugins/tables-cursor-fix.ts +143 -0
  178. package/src/plugins/translations.ts +263 -0
  179. package/src/rules.ts +60 -0
  180. package/src/selection.ts +112 -0
  181. package/src/testing/default-capabilities.ts +48 -0
  182. package/src/testing/default-editor-data.ts +73 -0
  183. package/src/testing/empty-editor-doc.json +62 -0
  184. package/src/testing/polyfill-dom.ts +43 -0
  185. package/src/testing/section-categories.json +161 -0
  186. package/src/testing/setup-editor.ts +55 -0
  187. package/src/tests.ts +42 -0
  188. package/src/toolbar.tsx +259 -0
  189. package/src/types/@citation-js/core.d.ts +16 -0
  190. package/src/types/@citation-js/index.d.ts +16 -0
  191. package/src/types/@citation-js/plugin-bibtex.d.ts +16 -0
  192. package/src/types/@citation-js/plugin-csl.d.ts +16 -0
  193. package/src/types/@citation-js/plugin-doi.d.ts +16 -0
  194. package/src/types/@citation-js/plugin-enw.d.ts +16 -0
  195. package/src/types/@citation-js/plugin-pubmed.d.ts +16 -0
  196. package/src/types/@citation-js/plugin-ris.d.ts +16 -0
  197. package/src/types/citeproc.d.ts +124 -0
  198. package/src/types/css.d.ts +16 -0
  199. package/src/types/json.d.ts +17 -0
  200. package/src/types/prosemirror-dev-tools.d.ts +16 -0
  201. package/src/types/prosemirror-dropcursor.d.ts +16 -0
  202. package/src/types/styled-components.d.ts +23 -0
  203. package/src/types.ts +49 -0
  204. package/src/useEditor.ts +244 -0
  205. package/src/versions.ts +3 -0
  206. package/src/views/ReactSubView.tsx +145 -0
  207. package/src/views/abstracts.ts +46 -0
  208. package/src/views/accessibility_element.ts +86 -0
  209. package/src/views/affiliations.ts +254 -0
  210. package/src/views/alt_title.ts +85 -0
  211. package/src/views/alt_titles_section.ts +97 -0
  212. package/src/views/attachment.ts +160 -0
  213. package/src/views/attachments.ts +72 -0
  214. package/src/views/author_notes.ts +96 -0
  215. package/src/views/award.ts +194 -0
  216. package/src/views/awards.ts +59 -0
  217. package/src/views/base_node_view.ts +85 -0
  218. package/src/views/bibliography_element.ts +313 -0
  219. package/src/views/block_view.ts +100 -0
  220. package/src/views/blockquote_element.ts +26 -0
  221. package/src/views/blockquote_element_editable.ts +24 -0
  222. package/src/views/box_element.ts +33 -0
  223. package/src/views/caption.ts +37 -0
  224. package/src/views/caption_title.ts +33 -0
  225. package/src/views/citation.ts +67 -0
  226. package/src/views/citation_editable.ts +312 -0
  227. package/src/views/contributors.ts +341 -0
  228. package/src/views/creators.ts +82 -0
  229. package/src/views/cross_reference.ts +74 -0
  230. package/src/views/cross_reference_editable.ts +113 -0
  231. package/src/views/editable_block.ts +141 -0
  232. package/src/views/embed.ts +345 -0
  233. package/src/views/empty.ts +26 -0
  234. package/src/views/equation.ts +47 -0
  235. package/src/views/equation_editable.ts +84 -0
  236. package/src/views/equation_element.ts +29 -0
  237. package/src/views/equation_element_editable.ts +21 -0
  238. package/src/views/figure.ts +84 -0
  239. package/src/views/figure_editable.ts +361 -0
  240. package/src/views/figure_element.ts +197 -0
  241. package/src/views/figure_element_editable.ts +21 -0
  242. package/src/views/footnote.ts +236 -0
  243. package/src/views/footnotes_element.ts +54 -0
  244. package/src/views/general_table_footnote.ts +140 -0
  245. package/src/views/hero_image.ts +76 -0
  246. package/src/views/hero_image_editable.ts +21 -0
  247. package/src/views/image_element.ts +373 -0
  248. package/src/views/image_element_editable.ts +21 -0
  249. package/src/views/inline_equation.ts +47 -0
  250. package/src/views/inline_equation_editable.ts +70 -0
  251. package/src/views/inline_footnote.ts +264 -0
  252. package/src/views/inline_footnote_editable.ts +20 -0
  253. package/src/views/keyword.ts +127 -0
  254. package/src/views/keyword_group.ts +109 -0
  255. package/src/views/link.ts +27 -0
  256. package/src/views/link_editable.ts +169 -0
  257. package/src/views/list.ts +46 -0
  258. package/src/views/list_item.ts +26 -0
  259. package/src/views/paragraph.ts +26 -0
  260. package/src/views/paragraph_editable.ts +21 -0
  261. package/src/views/placeholder.ts +35 -0
  262. package/src/views/placeholder_element.ts +38 -0
  263. package/src/views/placeholder_element_editable.ts +21 -0
  264. package/src/views/pullquote_element.ts +106 -0
  265. package/src/views/pullquote_element_editable.ts +24 -0
  266. package/src/views/quote_image_editable.ts +84 -0
  267. package/src/views/section.ts +64 -0
  268. package/src/views/section_label.ts +20 -0
  269. package/src/views/section_title.ts +87 -0
  270. package/src/views/section_title_editable.ts +21 -0
  271. package/src/views/subtitle.ts +42 -0
  272. package/src/views/subtitle_editable.ts +20 -0
  273. package/src/views/subtitles.ts +34 -0
  274. package/src/views/subtitles_editable.ts +21 -0
  275. package/src/views/supplement.ts +236 -0
  276. package/src/views/supplement_editable.ts +20 -0
  277. package/src/views/supplements.ts +65 -0
  278. package/src/views/supplements_editable.ts +21 -0
  279. package/src/views/table_cell.ts +150 -0
  280. package/src/views/table_element.ts +33 -0
  281. package/src/views/table_element_editable.ts +21 -0
  282. package/src/views/table_element_footer.ts +41 -0
  283. package/src/views/title.ts +46 -0
  284. package/src/views/title_editable.ts +20 -0
  285. package/src/views/trans_graphical_abstract.ts +55 -0
  286. package/src/views/trans_graphical_abstract_editable.ts +21 -0
  287. package/src/views/translated_abstract.ts +53 -0
  288. package/src/views/translated_abstract_editable.ts +21 -0
  289. package/dist/cjs/lib/statistics.js +0 -38
@@ -0,0 +1,112 @@
1
+ /*!
2
+ * © 2024 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import {
17
+ CHANGE_OPERATION,
18
+ trackChangesPluginKey,
19
+ TrackedChange,
20
+ } from '@manuscripts/track-changes-plugin'
21
+ import { ManuscriptEditorState } from '@manuscripts/transform'
22
+ import { Node, ResolvedPos } from 'prosemirror-model'
23
+ import { NodeSelection, Selection } from 'prosemirror-state'
24
+ import { Mappable } from 'prosemirror-transform'
25
+
26
+ import { isTextSelection } from './commands'
27
+
28
+ interface NodesSelectionJSON {
29
+ type: 'inlineNodes' | 'nodes'
30
+ startNode: ResolvedPos
31
+ endNode: ResolvedPos
32
+ }
33
+
34
+ /**
35
+ * Selecting multiple inline nodes without moving selection cursor
36
+ */
37
+ export class InlineNodesSelection extends Selection {
38
+ public $startNode: ResolvedPos
39
+ public $endNode: ResolvedPos
40
+
41
+ constructor($from: ResolvedPos, $to: ResolvedPos) {
42
+ super($to, $to)
43
+ this.$startNode = $from
44
+ this.$endNode = $to
45
+ }
46
+
47
+ eq(selection: Selection): boolean {
48
+ return (
49
+ selection instanceof NodesSelection &&
50
+ selection.$startNode.pos == this.$startNode.pos &&
51
+ selection.$endNode.pos == this.$endNode.pos
52
+ )
53
+ }
54
+
55
+ map(doc: Node, mapping: Mappable): Selection {
56
+ const $from = doc.resolve(mapping.map(this.$startNode.pos))
57
+ const $to = doc.resolve(mapping.map(this.$endNode.pos))
58
+ return new NodesSelection($from, $to)
59
+ }
60
+
61
+ toJSON(): NodesSelectionJSON {
62
+ return {
63
+ type: 'inlineNodes',
64
+ startNode: this.$startNode,
65
+ endNode: this.$endNode,
66
+ }
67
+ }
68
+ }
69
+
70
+ export class NodesSelection extends NodeSelection {
71
+ public $startNode: ResolvedPos
72
+ public $endNode: ResolvedPos
73
+
74
+ constructor($from: ResolvedPos, $to: ResolvedPos) {
75
+ super($from)
76
+ this.$startNode = $from
77
+ this.$endNode = $to
78
+ }
79
+
80
+ toJSON(): NodesSelectionJSON {
81
+ return {
82
+ type: 'nodes',
83
+ startNode: this.$startNode,
84
+ endNode: this.$endNode,
85
+ }
86
+ }
87
+ }
88
+
89
+ export const getSelectionChangeGroup = (state: ManuscriptEditorState) => {
90
+ const selection = state.selection
91
+ const $pos = isTextSelection(selection)
92
+ ? selection.$cursor
93
+ : (selection instanceof NodesSelection ||
94
+ selection instanceof InlineNodesSelection) &&
95
+ selection.$from
96
+ if ($pos) {
97
+ return (
98
+ trackChangesPluginKey
99
+ .getState(state)
100
+ ?.changeSet.groupChanges.find((c) => isPositionAtRange(c, $pos.pos)) ||
101
+ []
102
+ )
103
+ }
104
+ return []
105
+ }
106
+
107
+ // check if position is at the range of group changes
108
+ const isPositionAtRange = (changes: TrackedChange[], pos: number) =>
109
+ (changes.length > 1 ||
110
+ changes[0].dataTracked.operation === CHANGE_OPERATION.structure) &&
111
+ pos >= changes[0].from &&
112
+ pos <= changes[changes.length - 1].to
@@ -0,0 +1,48 @@
1
+ /*!
2
+ * © 2025 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { Capabilities } from '../lib/capabilities'
18
+
19
+ export const defaultCapabilities: Capabilities = {
20
+ /* track changes */
21
+ handleSuggestion: true,
22
+ editWithoutTracking: true,
23
+ rejectOwnSuggestion: true,
24
+
25
+ /* comments */
26
+ handleOwnComments: true,
27
+ handleOthersComments: true,
28
+ resolveOwnComment: true,
29
+ resolveOthersComment: true,
30
+ createComment: true,
31
+
32
+ /* file handling */
33
+ downloadFiles: true,
34
+ changeDesignation: true,
35
+ moveFile: true,
36
+ replaceFile: true,
37
+ uploadFile: true,
38
+ detachFile: true,
39
+ setMainManuscript: true,
40
+
41
+ /* editor */
42
+ editArticle: true,
43
+ formatArticle: true,
44
+ editMetadata: true,
45
+ editCitationsAndRefs: true,
46
+ seeEditorToolbar: true,
47
+ seeReferencesButtons: true,
48
+ }
@@ -0,0 +1,73 @@
1
+ /*!
2
+ * © 2019 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import {
18
+ ActualManuscriptNode,
19
+ schema,
20
+ SectionCategory,
21
+ } from '@manuscripts/transform'
22
+ import { createBrowserHistory } from 'history'
23
+
24
+ import { EditorProps } from '../configs/ManuscriptsEditor'
25
+ import { PopperManager } from '../lib/popper'
26
+ import { defaultCapabilities } from './default-capabilities'
27
+ import emptyEditorDocJson from './empty-editor-doc.json'
28
+ import sectionCategories from './section-categories.json'
29
+
30
+ export const defaultEditorProps: EditorProps = {
31
+ attributes: {
32
+ class: 'manuscript-editor',
33
+ dir: 'ltr',
34
+ lang: 'en-GB',
35
+ spellcheck: 'true',
36
+ tabindex: '2',
37
+ },
38
+ doc: schema.nodeFromJSON(emptyEditorDocJson) as ActualManuscriptNode,
39
+ locale: 'en-GB',
40
+ popper: new PopperManager(),
41
+ projectID: 'test-project-id',
42
+ getCurrentUser: () => ({
43
+ _id: 'test-user-profile-1-id',
44
+ userID: '',
45
+ }),
46
+ // @ts-ignore
47
+ history: createBrowserHistory(),
48
+ theme: {},
49
+ getFiles: () => [],
50
+ fileManagement: {
51
+ // @ts-ignore
52
+ upload: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function
53
+ download: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function
54
+ },
55
+ getCapabilities: () => ({
56
+ ...defaultCapabilities,
57
+ editWithoutTracking: true,
58
+ }),
59
+ cslProps: {
60
+ style: '',
61
+ locale: '',
62
+ },
63
+ setComment: () => undefined,
64
+ setSelectedComment: () => undefined,
65
+ setEditorSelectedSuggestion: () => undefined,
66
+ sectionCategories: new Map(
67
+ sectionCategories.map((category: SectionCategory) => [
68
+ category.id,
69
+ category,
70
+ ])
71
+ ),
72
+ fetchOEmbedHtml: async () => undefined,
73
+ }
@@ -0,0 +1,62 @@
1
+ {
2
+ "type": "manuscript",
3
+ "attrs": {
4
+ "id": "MPManuscript:D1797375-EF63-49AF-B140-04B2FA6B8365"
5
+ },
6
+ "content": [
7
+ {
8
+ "type": "abstracts",
9
+ "attrs": {
10
+ "id": ""
11
+ },
12
+ "content": []
13
+ },
14
+ {
15
+ "type": "body",
16
+ "attrs": {
17
+ "id": "MPSection:5346C94F-8C83-4585-811E-2209C269ED71"
18
+ },
19
+ "content": [
20
+ {
21
+ "type": "section",
22
+ "attrs": {
23
+ "id": "MPSection:5346C94F-8C83-4585-811E-2209C269ED71",
24
+ "category": "",
25
+ "titleSuppressed": false
26
+ },
27
+ "content": [
28
+ {
29
+ "type": "section_title"
30
+ },
31
+ {
32
+ "type": "paragraph",
33
+ "attrs": {
34
+ "id": "MPParagraphElement:08E4B001-BB01-4666-9E33-9355AEC3CFC3",
35
+ "placeholder": ""
36
+ },
37
+ "content": [
38
+ {
39
+ "type": "text",
40
+ "text": "test"
41
+ }
42
+ ]
43
+ }
44
+ ]
45
+ }
46
+ ]
47
+ },
48
+ {
49
+ "type": "backmatter",
50
+ "attrs": {
51
+ "id": "MPSection:05EA736A-BBE3-4904-B2F5-59E861208BA9"
52
+ }
53
+ },
54
+ {
55
+ "type": "comments",
56
+ "attrs": {
57
+ "id": ""
58
+ },
59
+ "content": []
60
+ }
61
+ ]
62
+ }
@@ -0,0 +1,43 @@
1
+ /*!
2
+ * © 2019 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /**
18
+ * Extra methods to polyfill parts of the DOM not covered by jest-prosemirror and jsdom.
19
+ *
20
+ * jest-prosemirror implements these polyfills by default
21
+ * https://github.com/remirror/remirror/blob/8a6524a8da1a48b85fdde8f1c8b62375fbd5a318/packages/jest-remirror/src/jsdom-polyfills.ts
22
+ */
23
+ import { vi } from 'vitest'
24
+
25
+ export function polyfillDom() {
26
+ window.scrollBy = vi.fn()
27
+
28
+ // This could return a null but ProseMirror expects an object causing an error otherwise.
29
+ // @ts-ignore
30
+ document.getSelection = vi.fn(() => ({
31
+ anchorNode: null,
32
+ anchorOffset: 0,
33
+ baseNode: null,
34
+ baseOffset: 0,
35
+ extentNode: null,
36
+ extentOffset: 0,
37
+ focusNode: null,
38
+ focusOffset: 0,
39
+ isCollapsed: true,
40
+ rangeCount: 0,
41
+ type: 'None',
42
+ }))
43
+ }
@@ -0,0 +1,161 @@
1
+ [
2
+ {
3
+ "id": "abstract",
4
+ "titles": ["Abstract"],
5
+ "synonyms": ["abstract"],
6
+ "group": "abstracts",
7
+ "isUnique": false
8
+ },
9
+ {
10
+ "id": "acknowledgements",
11
+ "synonyms": ["acknowledgements", "acknowledgments"],
12
+ "titles": ["Acknowledgements"],
13
+ "group": "backmatter",
14
+ "isUnique": true
15
+ },
16
+ {
17
+ "id": "appendices",
18
+ "titles": ["Appendices"],
19
+ "synonyms": ["appendices"],
20
+ "isUnique": false
21
+ },
22
+ {
23
+ "id": "availability",
24
+ "titles": ["Availability"],
25
+ "synonyms": ["availability", "data-availability", "data availability"],
26
+ "group": "backmatter",
27
+ "isUnique": true
28
+ },
29
+ {
30
+ "id": "coi-statement",
31
+ "synonyms": [
32
+ "coi-statement",
33
+ "competing-interests",
34
+ "conflict",
35
+ "conflict of interest",
36
+ "competing interests"
37
+ ],
38
+ "label": "Conflict of Interest",
39
+ "titles": ["Conflict of Interest Statement","COI Statement", "Competing Interests"],
40
+ "group": "backmatter",
41
+ "isUnique": true
42
+ },
43
+ {
44
+ "id": "con",
45
+ "synonyms": ["con"],
46
+ "titles": ["Contributed-by information"],
47
+ "group": "backmatter",
48
+ "isUnique": true
49
+ },
50
+ {
51
+ "id": "conclusions",
52
+ "synonyms": ["conclusions"],
53
+ "titles": ["Conclusions"],
54
+ "group": "body",
55
+ "isUnique": false
56
+ },
57
+ {
58
+ "id": "deceased",
59
+ "titles": ["Deceased"],
60
+ "synonyms": ["deceased"],
61
+ "isUnique": false
62
+ },
63
+ {
64
+ "id": "discussion",
65
+ "synonyms": ["discussion"],
66
+ "titles": ["Discussion"],
67
+ "group": "body",
68
+ "isUnique": false
69
+ },
70
+ {
71
+ "id": "equal",
72
+ "titles": ["Equal"],
73
+ "synonyms": ["equal"],
74
+ "isUnique": false
75
+ },
76
+ {
77
+ "id": "ethics-statement",
78
+ "synonyms": ["ethics-statement"],
79
+ "titles": ["Ethics Statement"],
80
+ "group": "backmatter",
81
+ "isUnique": true
82
+ },
83
+ {
84
+ "id": "financial-disclosure",
85
+ "synonyms": ["financial-disclosure", "funding information"],
86
+ "titles": ["Financial Disclosure"],
87
+ "group": "backmatter",
88
+ "isUnique": true
89
+ },
90
+ {
91
+ "id": "abstract-teaser",
92
+ "titles": ["Abstract Teaser"],
93
+ "synonyms": ["abstract-teaser"],
94
+ "isUnique": false
95
+ },
96
+ {
97
+ "id": "intro",
98
+ "synonyms": ["intro", "introduction"],
99
+ "titles": ["Introduction"],
100
+ "group": "body",
101
+ "isUnique": false
102
+ },
103
+ {
104
+ "id": "methods",
105
+ "synonyms": [
106
+ "materials",
107
+ "methods",
108
+ "materials and methods",
109
+ "materials & methods"
110
+ ],
111
+ "titles": ["Materials & Methods"],
112
+ "group": "body",
113
+ "isUnique": false
114
+ },
115
+ {
116
+ "id": "present-address",
117
+ "titles": ["Present Address"],
118
+ "synonyms": ["present-address"],
119
+ "isUnique": false
120
+ },
121
+ {
122
+ "id": "presented-at",
123
+ "titles": ["Presented at"],
124
+ "synonyms": ["presented-at"],
125
+ "isUnique": false
126
+ },
127
+ {
128
+ "id": "previously-at",
129
+ "titles": ["Previously at"],
130
+ "synonyms": ["previously-at"],
131
+ "isUnique": false
132
+ },
133
+ {
134
+ "id": "results",
135
+ "synonyms": ["results"],
136
+ "titles": ["Results"],
137
+ "group": "body",
138
+ "isUnique": false
139
+ },
140
+ {
141
+ "id": "review",
142
+ "titles": ["Review"],
143
+ "synonyms": [],
144
+ "group": "body",
145
+ "isUnique": false
146
+ },
147
+ {
148
+ "id": "supplementary-material",
149
+ "synonyms": ["supplementary-material"],
150
+ "titles": ["Supplementary Material"],
151
+ "group": "backmatter",
152
+ "isUnique": true
153
+ },
154
+ {
155
+ "id": "supported-by",
156
+ "synonyms": ["supported-by"],
157
+ "titles": ["Supported By"],
158
+ "group": "backmatter",
159
+ "isUnique": true
160
+ }
161
+ ]
@@ -0,0 +1,55 @@
1
+ /*!
2
+ * © 2019 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { schema } from '@manuscripts/transform'
18
+ import { ProsemirrorTestChain, TestEditorView } from 'jest-prosemirror'
19
+ import { EditorState } from 'prosemirror-state'
20
+ import { EditorView } from 'prosemirror-view'
21
+
22
+ import createPlugins from '../configs/editor-plugins'
23
+ import createNodeViews from '../configs/editor-views'
24
+ import { defaultEditorProps } from './default-editor-data'
25
+ import { polyfillDom } from './polyfill-dom'
26
+
27
+ export function parseDoc(json: { [key: string]: unknown }) {
28
+ return schema.nodeFromJSON(json)
29
+ }
30
+
31
+ export function setupEditor() {
32
+ polyfillDom()
33
+
34
+ const props = { ...defaultEditorProps }
35
+ const { doc } = props
36
+ const place = document.body.appendChild(document.createElement('div'))
37
+ const state = EditorState.create({
38
+ doc,
39
+ schema,
40
+ plugins: createPlugins(props),
41
+ })
42
+ const view = new EditorView(place, {
43
+ state,
44
+ scrollMargin: {
45
+ top: 100,
46
+ bottom: 100,
47
+ left: 0,
48
+ right: 0,
49
+ },
50
+ handleScrollToSelection: () => true,
51
+ nodeViews: createNodeViews(props, () => {}), // eslint-disable-line @typescript-eslint/no-empty-function
52
+ })
53
+
54
+ return ProsemirrorTestChain.of(view as TestEditorView)
55
+ }
package/src/tests.ts ADDED
@@ -0,0 +1,42 @@
1
+ /*!
2
+ * © 2019 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { TextDecoder, TextEncoder } from 'util'
18
+ import { v4 as uuid } from 'uuid'
19
+ import { expect, vi } from 'vitest'
20
+
21
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
22
+ expect.addSnapshotSerializer(require('jest-prosemirror/serializer'))
23
+
24
+ process.env.API_BASE_URL = 'https://127.0.0.1/'
25
+
26
+ const supportedCommands: string[] = []
27
+
28
+ Object.defineProperty(document, 'queryCommandSupported', {
29
+ value: (cmd: string) => supportedCommands.includes(cmd),
30
+ })
31
+
32
+ Object.defineProperty(document, 'execCommand', {
33
+ value: (cmd: string) => supportedCommands.includes(cmd),
34
+ })
35
+
36
+ if (!window.URL.createObjectURL) {
37
+ Object.defineProperty(window.URL, 'createObjectURL', {
38
+ value: vi.fn(() => 'blob:https://localhost/' + uuid()),
39
+ })
40
+ }
41
+
42
+ Object.assign(global, { TextDecoder, TextEncoder })