@fiduswriter/editor 0.1.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 (525) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +22 -0
  3. package/dist/bibliography/tools.js +53 -0
  4. package/dist/bibliography/tools.js.map +1 -0
  5. package/dist/citations/index.js +339 -0
  6. package/dist/citations/index.js.map +1 -0
  7. package/dist/citations/render.js +47 -0
  8. package/dist/citations/render.js.map +1 -0
  9. package/dist/clipboard/copy/index.js +2 -0
  10. package/dist/clipboard/copy/index.js.map +1 -0
  11. package/dist/clipboard/copy/schema.js +54 -0
  12. package/dist/clipboard/copy/schema.js.map +1 -0
  13. package/dist/clipboard/copy/serializers.js +132 -0
  14. package/dist/clipboard/copy/serializers.js.map +1 -0
  15. package/dist/clipboard/paste/fidus_writer.js +45 -0
  16. package/dist/clipboard/paste/fidus_writer.js.map +1 -0
  17. package/dist/clipboard/paste/general.js +76 -0
  18. package/dist/clipboard/paste/general.js.map +1 -0
  19. package/dist/clipboard/paste/google_docs.js +24 -0
  20. package/dist/clipboard/paste/google_docs.js.map +1 -0
  21. package/dist/clipboard/paste/html.js +68 -0
  22. package/dist/clipboard/paste/html.js.map +1 -0
  23. package/dist/clipboard/paste/index.js +3 -0
  24. package/dist/clipboard/paste/index.js.map +1 -0
  25. package/dist/clipboard/paste/libreoffice_writer.js +27 -0
  26. package/dist/clipboard/paste/libreoffice_writer.js.map +1 -0
  27. package/dist/clipboard/paste/microsoft_word.js +79 -0
  28. package/dist/clipboard/paste/microsoft_word.js.map +1 -0
  29. package/dist/clipboard/paste/text.js +41 -0
  30. package/dist/clipboard/paste/text.js.map +1 -0
  31. package/dist/collab/chat.js +154 -0
  32. package/dist/collab/chat.js.map +1 -0
  33. package/dist/collab/colors.js +62 -0
  34. package/dist/collab/colors.js.map +1 -0
  35. package/dist/collab/doc.js +1090 -0
  36. package/dist/collab/doc.js.map +1 -0
  37. package/dist/collab/index.js +75 -0
  38. package/dist/collab/index.js.map +1 -0
  39. package/dist/collab/merge/changeset.js +90 -0
  40. package/dist/collab/merge/changeset.js.map +1 -0
  41. package/dist/collab/merge/editor.js +708 -0
  42. package/dist/collab/merge/editor.js.map +1 -0
  43. package/dist/collab/merge/footnotes.js +149 -0
  44. package/dist/collab/merge/footnotes.js.map +1 -0
  45. package/dist/collab/merge/index.js +270 -0
  46. package/dist/collab/merge/index.js.map +1 -0
  47. package/dist/collab/merge/recreate_transform.js +259 -0
  48. package/dist/collab/merge/recreate_transform.js.map +1 -0
  49. package/dist/collab/merge/schema.js +117 -0
  50. package/dist/collab/merge/schema.js.map +1 -0
  51. package/dist/collab/merge/state_plugins/action.js +138 -0
  52. package/dist/collab/merge/state_plugins/action.js.map +1 -0
  53. package/dist/collab/merge/state_plugins/clipboard.js +32 -0
  54. package/dist/collab/merge/state_plugins/clipboard.js.map +1 -0
  55. package/dist/collab/merge/state_plugins/diff.js +541 -0
  56. package/dist/collab/merge/state_plugins/diff.js.map +1 -0
  57. package/dist/collab/merge/state_plugins/index.js +3 -0
  58. package/dist/collab/merge/state_plugins/index.js.map +1 -0
  59. package/dist/collab/merge/tools.js +175 -0
  60. package/dist/collab/merge/tools.js.map +1 -0
  61. package/dist/collab/templates.js +10 -0
  62. package/dist/collab/templates.js.map +1 -0
  63. package/dist/comments/comment.js +17 -0
  64. package/dist/comments/comment.js.map +1 -0
  65. package/dist/comments/editors/answer.js +43 -0
  66. package/dist/comments/editors/answer.js.map +1 -0
  67. package/dist/comments/editors/comment.js +278 -0
  68. package/dist/comments/editors/comment.js.map +1 -0
  69. package/dist/comments/editors/index.js +4 -0
  70. package/dist/comments/editors/index.js.map +1 -0
  71. package/dist/comments/editors/notify.js +13 -0
  72. package/dist/comments/editors/notify.js.map +1 -0
  73. package/dist/comments/editors/schema.js +60 -0
  74. package/dist/comments/editors/schema.js.map +1 -0
  75. package/dist/comments/index.js +11 -0
  76. package/dist/comments/index.js.map +1 -0
  77. package/dist/comments/interactions.js +379 -0
  78. package/dist/comments/interactions.js.map +1 -0
  79. package/dist/comments/store.js +438 -0
  80. package/dist/comments/store.js.map +1 -0
  81. package/dist/contacts/add_dialog.js +88 -0
  82. package/dist/contacts/add_dialog.js.map +1 -0
  83. package/dist/contacts/templates.js +23 -0
  84. package/dist/contacts/templates.js.map +1 -0
  85. package/dist/copyright_dialog/index.js +148 -0
  86. package/dist/copyright_dialog/index.js.map +1 -0
  87. package/dist/copyright_dialog/templates.js +48 -0
  88. package/dist/copyright_dialog/templates.js.map +1 -0
  89. package/dist/databases/bibliography.js +162 -0
  90. package/dist/databases/bibliography.js.map +1 -0
  91. package/dist/databases/images.js +260 -0
  92. package/dist/databases/images.js.map +1 -0
  93. package/dist/databases/index.js +55 -0
  94. package/dist/databases/index.js.map +1 -0
  95. package/dist/dialogs/citation.js +321 -0
  96. package/dist/dialogs/citation.js.map +1 -0
  97. package/dist/dialogs/code_block.js +192 -0
  98. package/dist/dialogs/code_block.js.map +1 -0
  99. package/dist/dialogs/contributor.js +132 -0
  100. package/dist/dialogs/contributor.js.map +1 -0
  101. package/dist/dialogs/figure.js +378 -0
  102. package/dist/dialogs/figure.js.map +1 -0
  103. package/dist/dialogs/index.js +11 -0
  104. package/dist/dialogs/index.js.map +1 -0
  105. package/dist/dialogs/language.js +47 -0
  106. package/dist/dialogs/language.js.map +1 -0
  107. package/dist/dialogs/link.js +243 -0
  108. package/dist/dialogs/link.js.map +1 -0
  109. package/dist/dialogs/math.js +121 -0
  110. package/dist/dialogs/math.js.map +1 -0
  111. package/dist/dialogs/ordered_list.js +67 -0
  112. package/dist/dialogs/ordered_list.js.map +1 -0
  113. package/dist/dialogs/revision.js +36 -0
  114. package/dist/dialogs/revision.js.map +1 -0
  115. package/dist/dialogs/subsup.js +109 -0
  116. package/dist/dialogs/subsup.js.map +1 -0
  117. package/dist/dialogs/table.js +217 -0
  118. package/dist/dialogs/table.js.map +1 -0
  119. package/dist/dialogs/templates.js +366 -0
  120. package/dist/dialogs/templates.js.map +1 -0
  121. package/dist/document_template/exporter.js +83 -0
  122. package/dist/document_template/exporter.js.map +1 -0
  123. package/dist/document_template/index.js +327 -0
  124. package/dist/document_template/index.js.map +1 -0
  125. package/dist/documents/access_rights/index.js +532 -0
  126. package/dist/documents/access_rights/index.js.map +1 -0
  127. package/dist/documents/access_rights/templates.js +150 -0
  128. package/dist/documents/access_rights/templates.js.map +1 -0
  129. package/dist/e2ee/encryptor.js +201 -0
  130. package/dist/e2ee/encryptor.js.map +1 -0
  131. package/dist/e2ee/key-manager.js +171 -0
  132. package/dist/e2ee/key-manager.js.map +1 -0
  133. package/dist/e2ee/passphrase-crypto.js +365 -0
  134. package/dist/e2ee/passphrase-crypto.js.map +1 -0
  135. package/dist/e2ee/passphrase-dialog.js +548 -0
  136. package/dist/e2ee/passphrase-dialog.js.map +1 -0
  137. package/dist/e2ee/passphrase-manager.js +350 -0
  138. package/dist/e2ee/passphrase-manager.js.map +1 -0
  139. package/dist/e2ee/password-dialog.js +552 -0
  140. package/dist/e2ee/password-dialog.js.map +1 -0
  141. package/dist/e2ee/snapshot-manager.js +238 -0
  142. package/dist/e2ee/snapshot-manager.js.map +1 -0
  143. package/dist/exporter/native/copy.js +29 -0
  144. package/dist/exporter/native/copy.js.map +1 -0
  145. package/dist/exporter/native/file.js +19 -0
  146. package/dist/exporter/native/file.js.map +1 -0
  147. package/dist/exporter/native/index.js +4 -0
  148. package/dist/exporter/native/index.js.map +1 -0
  149. package/dist/exporter/native/revision.js +54 -0
  150. package/dist/exporter/native/revision.js.map +1 -0
  151. package/dist/exporter/native/zip.js +2 -0
  152. package/dist/exporter/native/zip.js.map +1 -0
  153. package/dist/footnotes/editor.js +180 -0
  154. package/dist/footnotes/editor.js.map +1 -0
  155. package/dist/footnotes/index.js +15 -0
  156. package/dist/footnotes/index.js.map +1 -0
  157. package/dist/footnotes/layout.js +125 -0
  158. package/dist/footnotes/layout.js.map +1 -0
  159. package/dist/footnotes/state_plugins/access_rights.js +25 -0
  160. package/dist/footnotes/state_plugins/access_rights.js.map +1 -0
  161. package/dist/footnotes/state_plugins/index.js +2 -0
  162. package/dist/footnotes/state_plugins/index.js.map +1 -0
  163. package/dist/images/edit_dialog/edit_dialog/index.js +186 -0
  164. package/dist/images/edit_dialog/edit_dialog/index.js.map +1 -0
  165. package/dist/images/edit_dialog/edit_dialog/model.js +152 -0
  166. package/dist/images/edit_dialog/edit_dialog/model.js.map +1 -0
  167. package/dist/images/edit_dialog/edit_dialog/templates.js +33 -0
  168. package/dist/images/edit_dialog/edit_dialog/templates.js.map +1 -0
  169. package/dist/images/edit_dialog/model.js +6 -0
  170. package/dist/images/edit_dialog/model.js.map +1 -0
  171. package/dist/images/selection_dialog/index.js +149 -0
  172. package/dist/images/selection_dialog/index.js.map +1 -0
  173. package/dist/index.js +1002 -0
  174. package/dist/index.js.map +1 -0
  175. package/dist/keymap.js +73 -0
  176. package/dist/keymap.js.map +1 -0
  177. package/dist/marginboxes/index.js +674 -0
  178. package/dist/marginboxes/index.js.map +1 -0
  179. package/dist/marginboxes/templates.js +447 -0
  180. package/dist/marginboxes/templates.js.map +1 -0
  181. package/dist/menus/code_block/index.js +2 -0
  182. package/dist/menus/code_block/index.js.map +1 -0
  183. package/dist/menus/code_block/model.js +49 -0
  184. package/dist/menus/code_block/model.js.map +1 -0
  185. package/dist/menus/figure/index.js +3 -0
  186. package/dist/menus/figure/index.js.map +1 -0
  187. package/dist/menus/figure/model.js +80 -0
  188. package/dist/menus/figure/model.js.map +1 -0
  189. package/dist/menus/figure/utils.js +6 -0
  190. package/dist/menus/figure/utils.js.map +1 -0
  191. package/dist/menus/headerbar/index.js +3 -0
  192. package/dist/menus/headerbar/index.js.map +1 -0
  193. package/dist/menus/headerbar/model.js +743 -0
  194. package/dist/menus/headerbar/model.js.map +1 -0
  195. package/dist/menus/headerbar/view.js +579 -0
  196. package/dist/menus/headerbar/view.js.map +1 -0
  197. package/dist/menus/image/index.js +2 -0
  198. package/dist/menus/image/index.js.map +1 -0
  199. package/dist/menus/image/model.js +32 -0
  200. package/dist/menus/image/model.js.map +1 -0
  201. package/dist/menus/index.js +10 -0
  202. package/dist/menus/index.js.map +1 -0
  203. package/dist/menus/navigator/index.js +2 -0
  204. package/dist/menus/navigator/index.js.map +1 -0
  205. package/dist/menus/navigator/model.js +29 -0
  206. package/dist/menus/navigator/model.js.map +1 -0
  207. package/dist/menus/ordered_list/index.js +2 -0
  208. package/dist/menus/ordered_list/index.js.map +1 -0
  209. package/dist/menus/ordered_list/model.js +17 -0
  210. package/dist/menus/ordered_list/model.js.map +1 -0
  211. package/dist/menus/selection/index.js +3 -0
  212. package/dist/menus/selection/index.js.map +1 -0
  213. package/dist/menus/selection/model.js +108 -0
  214. package/dist/menus/selection/model.js.map +1 -0
  215. package/dist/menus/selection/view.js +125 -0
  216. package/dist/menus/selection/view.js.map +1 -0
  217. package/dist/menus/table/index.js +2 -0
  218. package/dist/menus/table/index.js.map +1 -0
  219. package/dist/menus/table/model.js +319 -0
  220. package/dist/menus/table/model.js.map +1 -0
  221. package/dist/menus/toolbar/index.js +3 -0
  222. package/dist/menus/toolbar/index.js.map +1 -0
  223. package/dist/menus/toolbar/model.js +747 -0
  224. package/dist/menus/toolbar/model.js.map +1 -0
  225. package/dist/menus/toolbar/view.js +314 -0
  226. package/dist/menus/toolbar/view.js.map +1 -0
  227. package/dist/navigator/index.js +435 -0
  228. package/dist/navigator/index.js.map +1 -0
  229. package/dist/no_collab_save/index.js +169 -0
  230. package/dist/no_collab_save/index.js.map +1 -0
  231. package/dist/plugins/citation_dialog/index.js +2 -0
  232. package/dist/plugins/citation_dialog/index.js.map +1 -0
  233. package/dist/plugins/editor/index.js +2 -0
  234. package/dist/plugins/editor/index.js.map +1 -0
  235. package/dist/state_plugins/access_rights.js +30 -0
  236. package/dist/state_plugins/access_rights.js.map +1 -0
  237. package/dist/state_plugins/citation_render.js +78 -0
  238. package/dist/state_plugins/citation_render.js.map +1 -0
  239. package/dist/state_plugins/clipboard.js +217 -0
  240. package/dist/state_plugins/clipboard.js.map +1 -0
  241. package/dist/state_plugins/code_block.js +165 -0
  242. package/dist/state_plugins/code_block.js.map +1 -0
  243. package/dist/state_plugins/collab_carets.js +115 -0
  244. package/dist/state_plugins/collab_carets.js.map +1 -0
  245. package/dist/state_plugins/comments.js +197 -0
  246. package/dist/state_plugins/comments.js.map +1 -0
  247. package/dist/state_plugins/contributor_input/add_button.js +101 -0
  248. package/dist/state_plugins/contributor_input/add_button.js.map +1 -0
  249. package/dist/state_plugins/contributor_input/dropup.js +273 -0
  250. package/dist/state_plugins/contributor_input/dropup.js.map +1 -0
  251. package/dist/state_plugins/contributor_input/helpers.js +23 -0
  252. package/dist/state_plugins/contributor_input/helpers.js.map +1 -0
  253. package/dist/state_plugins/contributor_input/index.js +3 -0
  254. package/dist/state_plugins/contributor_input/index.js.map +1 -0
  255. package/dist/state_plugins/contributor_input/node_view.js +76 -0
  256. package/dist/state_plugins/contributor_input/node_view.js.map +1 -0
  257. package/dist/state_plugins/contributor_input/plugin.js +236 -0
  258. package/dist/state_plugins/contributor_input/plugin.js.map +1 -0
  259. package/dist/state_plugins/document_template.js +213 -0
  260. package/dist/state_plugins/document_template.js.map +1 -0
  261. package/dist/state_plugins/figure.js +90 -0
  262. package/dist/state_plugins/figure.js.map +1 -0
  263. package/dist/state_plugins/footnote_markers.js +187 -0
  264. package/dist/state_plugins/footnote_markers.js.map +1 -0
  265. package/dist/state_plugins/headerbar.js +10 -0
  266. package/dist/state_plugins/headerbar.js.map +1 -0
  267. package/dist/state_plugins/index.js +27 -0
  268. package/dist/state_plugins/index.js.map +1 -0
  269. package/dist/state_plugins/inline_math.js +719 -0
  270. package/dist/state_plugins/inline_math.js.map +1 -0
  271. package/dist/state_plugins/inline_reference/dropup.js +182 -0
  272. package/dist/state_plugins/inline_reference/dropup.js.map +1 -0
  273. package/dist/state_plugins/inline_reference/index.js +2 -0
  274. package/dist/state_plugins/inline_reference/index.js.map +1 -0
  275. package/dist/state_plugins/inline_reference/plugin.js +1134 -0
  276. package/dist/state_plugins/inline_reference/plugin.js.map +1 -0
  277. package/dist/state_plugins/jump_hidden_nodes.js +47 -0
  278. package/dist/state_plugins/jump_hidden_nodes.js.map +1 -0
  279. package/dist/state_plugins/links.js +622 -0
  280. package/dist/state_plugins/links.js.map +1 -0
  281. package/dist/state_plugins/marginboxes.js +13 -0
  282. package/dist/state_plugins/marginboxes.js.map +1 -0
  283. package/dist/state_plugins/ordered_list_menu.js +72 -0
  284. package/dist/state_plugins/ordered_list_menu.js.map +1 -0
  285. package/dist/state_plugins/placeholders.js +98 -0
  286. package/dist/state_plugins/placeholders.js.map +1 -0
  287. package/dist/state_plugins/search.js +212 -0
  288. package/dist/state_plugins/search.js.map +1 -0
  289. package/dist/state_plugins/selection_menu.js +10 -0
  290. package/dist/state_plugins/selection_menu.js.map +1 -0
  291. package/dist/state_plugins/settings.js +191 -0
  292. package/dist/state_plugins/settings.js.map +1 -0
  293. package/dist/state_plugins/table.js +104 -0
  294. package/dist/state_plugins/table.js.map +1 -0
  295. package/dist/state_plugins/tag_input/helpers.js +55 -0
  296. package/dist/state_plugins/tag_input/helpers.js.map +1 -0
  297. package/dist/state_plugins/tag_input/index.js +3 -0
  298. package/dist/state_plugins/tag_input/index.js.map +1 -0
  299. package/dist/state_plugins/tag_input/node_view.js +77 -0
  300. package/dist/state_plugins/tag_input/node_view.js.map +1 -0
  301. package/dist/state_plugins/tag_input/plugin.js +199 -0
  302. package/dist/state_plugins/tag_input/plugin.js.map +1 -0
  303. package/dist/state_plugins/tag_input/tag_editor.js +159 -0
  304. package/dist/state_plugins/tag_input/tag_editor.js.map +1 -0
  305. package/dist/state_plugins/tag_input/tag_editor_plugins.js +61 -0
  306. package/dist/state_plugins/tag_input/tag_editor_plugins.js.map +1 -0
  307. package/dist/state_plugins/toc_render.js +142 -0
  308. package/dist/state_plugins/toc_render.js.map +1 -0
  309. package/dist/state_plugins/toolbar.js +10 -0
  310. package/dist/state_plugins/toolbar.js.map +1 -0
  311. package/dist/state_plugins/track/find_selected_changes.js +82 -0
  312. package/dist/state_plugins/track/find_selected_changes.js.map +1 -0
  313. package/dist/state_plugins/track/helpers.js +67 -0
  314. package/dist/state_plugins/track/helpers.js.map +1 -0
  315. package/dist/state_plugins/track/index.js +3 -0
  316. package/dist/state_plugins/track/index.js.map +1 -0
  317. package/dist/state_plugins/track/plugin.js +114 -0
  318. package/dist/state_plugins/track/plugin.js.map +1 -0
  319. package/dist/tools/index.js +4 -0
  320. package/dist/tools/index.js.map +1 -0
  321. package/dist/tools/key_bindings/index.js +20 -0
  322. package/dist/tools/key_bindings/index.js.map +1 -0
  323. package/dist/tools/key_bindings/templates.js +68 -0
  324. package/dist/tools/key_bindings/templates.js.map +1 -0
  325. package/dist/tools/search_replace/index.js +275 -0
  326. package/dist/tools/search_replace/index.js.map +1 -0
  327. package/dist/tools/search_replace/templates.js +18 -0
  328. package/dist/tools/search_replace/templates.js.map +1 -0
  329. package/dist/tools/word_count/index.js +40 -0
  330. package/dist/tools/word_count/index.js.map +1 -0
  331. package/dist/tools/word_count/templates.js +27 -0
  332. package/dist/tools/word_count/templates.js.map +1 -0
  333. package/dist/track/accept.js +66 -0
  334. package/dist/track/accept.js.map +1 -0
  335. package/dist/track/accept_all.js +51 -0
  336. package/dist/track/accept_all.js.map +1 -0
  337. package/dist/track/accept_all_no_insertions.js +63 -0
  338. package/dist/track/accept_all_no_insertions.js.map +1 -0
  339. package/dist/track/amend_transaction.js +390 -0
  340. package/dist/track/amend_transaction.js.map +1 -0
  341. package/dist/track/delete.js +62 -0
  342. package/dist/track/delete.js.map +1 -0
  343. package/dist/track/index.js +6 -0
  344. package/dist/track/index.js.map +1 -0
  345. package/dist/track/mod.js +86 -0
  346. package/dist/track/mod.js.map +1 -0
  347. package/dist/track/reject.js +67 -0
  348. package/dist/track/reject.js.map +1 -0
  349. package/dist/track/reject_all.js +56 -0
  350. package/dist/track/reject_all.js.map +1 -0
  351. package/package.json +80 -0
  352. package/src/bibliography/tools.js +58 -0
  353. package/src/citations/index.js +443 -0
  354. package/src/citations/render.js +68 -0
  355. package/src/clipboard/copy/index.js +1 -0
  356. package/src/clipboard/copy/schema.js +62 -0
  357. package/src/clipboard/copy/serializers.js +179 -0
  358. package/src/clipboard/paste/fidus_writer.js +55 -0
  359. package/src/clipboard/paste/general.js +80 -0
  360. package/src/clipboard/paste/google_docs.js +26 -0
  361. package/src/clipboard/paste/html.js +76 -0
  362. package/src/clipboard/paste/index.js +2 -0
  363. package/src/clipboard/paste/libreoffice_writer.js +32 -0
  364. package/src/clipboard/paste/microsoft_word.js +87 -0
  365. package/src/clipboard/paste/text.js +58 -0
  366. package/src/collab/chat.js +195 -0
  367. package/src/collab/colors.js +67 -0
  368. package/src/collab/doc.js +1436 -0
  369. package/src/collab/index.js +81 -0
  370. package/src/collab/merge/changeset.js +103 -0
  371. package/src/collab/merge/editor.js +1065 -0
  372. package/src/collab/merge/footnotes.js +175 -0
  373. package/src/collab/merge/index.js +401 -0
  374. package/src/collab/merge/recreate_transform.js +326 -0
  375. package/src/collab/merge/schema.js +135 -0
  376. package/src/collab/merge/state_plugins/action.js +171 -0
  377. package/src/collab/merge/state_plugins/clipboard.js +32 -0
  378. package/src/collab/merge/state_plugins/diff.js +780 -0
  379. package/src/collab/merge/state_plugins/index.js +2 -0
  380. package/src/collab/merge/tools.js +217 -0
  381. package/src/collab/templates.js +10 -0
  382. package/src/comments/comment.js +29 -0
  383. package/src/comments/editors/answer.js +55 -0
  384. package/src/comments/editors/comment.js +318 -0
  385. package/src/comments/editors/index.js +4 -0
  386. package/src/comments/editors/notify.js +13 -0
  387. package/src/comments/editors/schema.js +65 -0
  388. package/src/comments/index.js +11 -0
  389. package/src/comments/interactions.js +465 -0
  390. package/src/comments/store.js +513 -0
  391. package/src/contacts/add_dialog.js +110 -0
  392. package/src/contacts/templates.js +28 -0
  393. package/src/copyright_dialog/index.js +179 -0
  394. package/src/copyright_dialog/templates.js +56 -0
  395. package/src/databases/bibliography.js +179 -0
  396. package/src/databases/images.js +320 -0
  397. package/src/databases/index.js +69 -0
  398. package/src/dialogs/citation.js +428 -0
  399. package/src/dialogs/code_block.js +242 -0
  400. package/src/dialogs/contributor.js +173 -0
  401. package/src/dialogs/figure.js +479 -0
  402. package/src/dialogs/index.js +10 -0
  403. package/src/dialogs/language.js +58 -0
  404. package/src/dialogs/link.js +358 -0
  405. package/src/dialogs/math.js +148 -0
  406. package/src/dialogs/ordered_list.js +84 -0
  407. package/src/dialogs/revision.js +43 -0
  408. package/src/dialogs/subsup.js +116 -0
  409. package/src/dialogs/table.js +258 -0
  410. package/src/dialogs/templates.js +426 -0
  411. package/src/document_template/exporter.js +97 -0
  412. package/src/document_template/index.js +483 -0
  413. package/src/documents/access_rights/index.js +693 -0
  414. package/src/documents/access_rights/templates.js +178 -0
  415. package/src/e2ee/encryptor.js +228 -0
  416. package/src/e2ee/key-manager.js +202 -0
  417. package/src/e2ee/passphrase-crypto.js +606 -0
  418. package/src/e2ee/passphrase-dialog.js +655 -0
  419. package/src/e2ee/passphrase-manager.js +502 -0
  420. package/src/e2ee/password-dialog.js +652 -0
  421. package/src/e2ee/snapshot-manager.js +305 -0
  422. package/src/exporter/native/copy.js +54 -0
  423. package/src/exporter/native/file.js +37 -0
  424. package/src/exporter/native/index.js +3 -0
  425. package/src/exporter/native/revision.js +86 -0
  426. package/src/exporter/native/zip.js +1 -0
  427. package/src/footnotes/editor.js +227 -0
  428. package/src/footnotes/index.js +16 -0
  429. package/src/footnotes/layout.js +190 -0
  430. package/src/footnotes/state_plugins/access_rights.js +39 -0
  431. package/src/footnotes/state_plugins/index.js +1 -0
  432. package/src/images/edit_dialog/edit_dialog/index.js +222 -0
  433. package/src/images/edit_dialog/edit_dialog/model.js +183 -0
  434. package/src/images/edit_dialog/edit_dialog/templates.js +41 -0
  435. package/src/images/edit_dialog/model.js +5 -0
  436. package/src/images/selection_dialog/index.js +176 -0
  437. package/src/index.js +1252 -0
  438. package/src/keymap.js +102 -0
  439. package/src/marginboxes/index.js +946 -0
  440. package/src/marginboxes/templates.js +573 -0
  441. package/src/menus/code_block/index.js +1 -0
  442. package/src/menus/code_block/model.js +52 -0
  443. package/src/menus/figure/index.js +2 -0
  444. package/src/menus/figure/model.js +91 -0
  445. package/src/menus/figure/utils.js +5 -0
  446. package/src/menus/headerbar/index.js +2 -0
  447. package/src/menus/headerbar/model.js +1077 -0
  448. package/src/menus/headerbar/view.js +675 -0
  449. package/src/menus/image/index.js +1 -0
  450. package/src/menus/image/model.js +32 -0
  451. package/src/menus/index.js +9 -0
  452. package/src/menus/navigator/index.js +1 -0
  453. package/src/menus/navigator/model.js +28 -0
  454. package/src/menus/ordered_list/index.js +1 -0
  455. package/src/menus/ordered_list/model.js +19 -0
  456. package/src/menus/selection/index.js +2 -0
  457. package/src/menus/selection/model.js +134 -0
  458. package/src/menus/selection/view.js +154 -0
  459. package/src/menus/table/index.js +1 -0
  460. package/src/menus/table/model.js +414 -0
  461. package/src/menus/toolbar/index.js +2 -0
  462. package/src/menus/toolbar/model.js +920 -0
  463. package/src/menus/toolbar/view.js +354 -0
  464. package/src/navigator/index.js +515 -0
  465. package/src/no_collab_save/index.js +209 -0
  466. package/src/plugins/citation_dialog/index.js +1 -0
  467. package/src/plugins/editor/index.js +1 -0
  468. package/src/state_plugins/access_rights.js +47 -0
  469. package/src/state_plugins/citation_render.js +88 -0
  470. package/src/state_plugins/clipboard.js +289 -0
  471. package/src/state_plugins/code_block.js +201 -0
  472. package/src/state_plugins/collab_carets.js +152 -0
  473. package/src/state_plugins/comments.js +259 -0
  474. package/src/state_plugins/contributor_input/add_button.js +134 -0
  475. package/src/state_plugins/contributor_input/dropup.js +318 -0
  476. package/src/state_plugins/contributor_input/helpers.js +24 -0
  477. package/src/state_plugins/contributor_input/index.js +2 -0
  478. package/src/state_plugins/contributor_input/node_view.js +86 -0
  479. package/src/state_plugins/contributor_input/plugin.js +318 -0
  480. package/src/state_plugins/document_template.js +315 -0
  481. package/src/state_plugins/figure.js +108 -0
  482. package/src/state_plugins/footnote_markers.js +238 -0
  483. package/src/state_plugins/headerbar.js +12 -0
  484. package/src/state_plugins/index.js +73 -0
  485. package/src/state_plugins/inline_math.js +918 -0
  486. package/src/state_plugins/inline_reference/dropup.js +208 -0
  487. package/src/state_plugins/inline_reference/index.js +5 -0
  488. package/src/state_plugins/inline_reference/plugin.js +1429 -0
  489. package/src/state_plugins/jump_hidden_nodes.js +58 -0
  490. package/src/state_plugins/links.js +830 -0
  491. package/src/state_plugins/marginboxes.js +14 -0
  492. package/src/state_plugins/ordered_list_menu.js +84 -0
  493. package/src/state_plugins/placeholders.js +123 -0
  494. package/src/state_plugins/search.js +251 -0
  495. package/src/state_plugins/selection_menu.js +12 -0
  496. package/src/state_plugins/settings.js +223 -0
  497. package/src/state_plugins/table.js +127 -0
  498. package/src/state_plugins/tag_input/helpers.js +69 -0
  499. package/src/state_plugins/tag_input/index.js +2 -0
  500. package/src/state_plugins/tag_input/node_view.js +85 -0
  501. package/src/state_plugins/tag_input/plugin.js +278 -0
  502. package/src/state_plugins/tag_input/tag_editor.js +202 -0
  503. package/src/state_plugins/tag_input/tag_editor_plugins.js +74 -0
  504. package/src/state_plugins/toc_render.js +160 -0
  505. package/src/state_plugins/toolbar.js +12 -0
  506. package/src/state_plugins/track/find_selected_changes.js +107 -0
  507. package/src/state_plugins/track/helpers.js +108 -0
  508. package/src/state_plugins/track/index.js +6 -0
  509. package/src/state_plugins/track/plugin.js +140 -0
  510. package/src/tools/index.js +3 -0
  511. package/src/tools/key_bindings/index.js +21 -0
  512. package/src/tools/key_bindings/templates.js +68 -0
  513. package/src/tools/search_replace/index.js +421 -0
  514. package/src/tools/search_replace/templates.js +19 -0
  515. package/src/tools/word_count/index.js +59 -0
  516. package/src/tools/word_count/templates.js +34 -0
  517. package/src/track/accept.js +102 -0
  518. package/src/track/accept_all.js +103 -0
  519. package/src/track/accept_all_no_insertions.js +102 -0
  520. package/src/track/amend_transaction.js +562 -0
  521. package/src/track/delete.js +92 -0
  522. package/src/track/index.js +8 -0
  523. package/src/track/mod.js +116 -0
  524. package/src/track/reject.js +116 -0
  525. package/src/track/reject_all.js +121 -0
@@ -0,0 +1,326 @@
1
+ // See https://gitlab.com/mpapp-public/prosemirror-recreate-steps/blob/master/src/recreate.js
2
+ // We only need this file from the prosemirror-recreate-steps (apache) project, so it's copied
3
+ // in here.
4
+
5
+ import {diffChars, diffWordsWithSpace} from "diff"
6
+ import {ReplaceStep, Transform} from "prosemirror-transform"
7
+ import {applyPatch, createPatch} from "rfc6902"
8
+
9
+ function getReplaceStep(fromDoc, toDoc) {
10
+ let start = toDoc.content.findDiffStart(fromDoc.content)
11
+ if (start === null) {
12
+ return false
13
+ }
14
+ let {a: endA, b: endB} = toDoc.content.findDiffEnd(fromDoc.content)
15
+ const overlap = start - Math.min(endA, endB)
16
+ if (overlap > 0) {
17
+ if (
18
+ // If there is an overlap, there is some freedom of choise in how to calculate the start/end boundary.
19
+ // for an inserted/removed slice. We choose the extreme with the lowest depth value.
20
+ fromDoc.resolve(start - overlap).depth <
21
+ toDoc.resolve(endA + overlap).depth
22
+ ) {
23
+ start -= overlap
24
+ } else {
25
+ endA += overlap
26
+ endB += overlap
27
+ }
28
+ }
29
+ return new ReplaceStep(start, endB, toDoc.slice(start, endA))
30
+ }
31
+
32
+ class RecreateTransform {
33
+ constructor(fromDoc, toDoc, complexSteps, wordDiffs) {
34
+ this.fromDoc = fromDoc
35
+ this.toDoc = toDoc
36
+ this.complexSteps = complexSteps // Whether to return steps other than ReplaceSteps
37
+ this.wordDiffs = wordDiffs // Whether to make text diffs cover entire words
38
+ this.schema = fromDoc.type.schema
39
+ this.tr = new Transform(fromDoc)
40
+ }
41
+
42
+ init() {
43
+ if (this.complexSteps) {
44
+ // For First steps: we create versions of the documents without marks as
45
+ // these will only confuse the diffing mechanism and marks won't cause
46
+ // any mapping changes anyway.
47
+ this.currentJSON = this.marklessDoc(this.fromDoc).toJSON()
48
+ this.finalJSON = this.marklessDoc(this.toDoc).toJSON()
49
+ this.ops = createPatch(this.currentJSON, this.finalJSON)
50
+ this.recreateChangeContentSteps()
51
+ this.recreateChangeMarkSteps()
52
+ } else {
53
+ // We don't differentiate between mark changes and other changes.
54
+ this.currentJSON = this.fromDoc.toJSON()
55
+ this.finalJSON = this.toDoc.toJSON()
56
+ this.ops = createPatch(this.currentJSON, this.finalJSON)
57
+ this.recreateChangeContentSteps()
58
+ }
59
+
60
+ this.simplifyTr()
61
+
62
+ return this.tr
63
+ }
64
+
65
+ recreateChangeContentSteps() {
66
+ // First step: find content changing steps.
67
+ let ops = [],
68
+ afterStepJSON = JSON.parse(JSON.stringify(this.currentJSON))
69
+ while (this.ops.length) {
70
+ let op = this.ops.shift(),
71
+ toDoc = false
72
+ const pathParts = op.path.split("/")
73
+ ops.push(op)
74
+ while (!toDoc) {
75
+ applyPatch(afterStepJSON, [op])
76
+ try {
77
+ toDoc = this.schema.nodeFromJSON(afterStepJSON)
78
+ toDoc.check()
79
+ } catch (error) {
80
+ toDoc = false
81
+ if (this.ops.length) {
82
+ op = this.ops.shift()
83
+ ops.push(op)
84
+ } else {
85
+ throw error
86
+ }
87
+ }
88
+ }
89
+
90
+ if (
91
+ this.complexSteps &&
92
+ ops.length === 1 &&
93
+ (pathParts.includes("attrs") || pathParts.includes("type"))
94
+ ) {
95
+ // Node markup is changing
96
+ this.addSetNodeMarkup()
97
+ ops = []
98
+ afterStepJSON = JSON.parse(JSON.stringify(this.currentJSON))
99
+ } else if (
100
+ ops.length === 1 &&
101
+ op.op === "replace" &&
102
+ pathParts[pathParts.length - 1] === "text"
103
+ ) {
104
+ // Text is being replaced, we apply text diffing to find the smallest possible diffs.
105
+ this.addReplaceTextSteps(op, afterStepJSON)
106
+ ops = []
107
+ afterStepJSON = JSON.parse(JSON.stringify(this.currentJSON))
108
+ } else {
109
+ if (this.addReplaceStep(toDoc, afterStepJSON)) {
110
+ ops = []
111
+ afterStepJSON = JSON.parse(JSON.stringify(this.currentJSON))
112
+ }
113
+ }
114
+ }
115
+ }
116
+
117
+ recreateChangeMarkSteps() {
118
+ // Now the documents should be the same, except their marks, so everything should map 1:1.
119
+ // Second step: Iterate through the toDoc and make sure all marks are the same in tr.doc
120
+ this.toDoc.descendants((tNode, tPos) => {
121
+ if (!tNode.isInline) {
122
+ return true
123
+ }
124
+
125
+ this.tr.doc.nodesBetween(
126
+ tPos,
127
+ tPos + tNode.nodeSize,
128
+ (fNode, fPos) => {
129
+ if (!fNode.isInline) {
130
+ return true
131
+ }
132
+ const from = Math.max(tPos, fPos),
133
+ to = Math.min(
134
+ tPos + tNode.nodeSize,
135
+ fPos + fNode.nodeSize
136
+ )
137
+ fNode.marks.forEach(nodeMark => {
138
+ if (!nodeMark.isInSet(tNode.marks)) {
139
+ this.tr.removeMark(from, to, nodeMark)
140
+ }
141
+ })
142
+ tNode.marks.forEach(nodeMark => {
143
+ if (!nodeMark.isInSet(fNode.marks)) {
144
+ this.tr.addMark(from, to, nodeMark)
145
+ }
146
+ })
147
+ }
148
+ )
149
+ })
150
+ }
151
+
152
+ marklessDoc(doc) {
153
+ const tr = new Transform(doc)
154
+ tr.removeMark(0, doc.nodeSize - 2)
155
+ return tr.doc
156
+ }
157
+
158
+ // From http://prosemirror.net/examples/footnote/
159
+ addReplaceStep(toDoc, afterStepJSON) {
160
+ const fromDoc = this.schema.nodeFromJSON(this.currentJSON),
161
+ step = getReplaceStep(fromDoc, toDoc)
162
+ if (!step) {
163
+ return false
164
+ } else if (!this.tr.maybeStep(step).failed) {
165
+ this.currentJSON = afterStepJSON
166
+ return true
167
+ } else {
168
+ throw new Error("No valid step found.")
169
+ }
170
+ }
171
+
172
+ addSetNodeMarkup() {
173
+ const fromDoc = this.schema.nodeFromJSON(this.currentJSON),
174
+ toDoc = this.schema.nodeFromJSON(this.finalJSON)
175
+ let updatedSettings = false
176
+ Object.entries(fromDoc.attrs).forEach(([key, value]) => {
177
+ if (toDoc.attrs[key] !== value) {
178
+ this.tr.setDocAttribute(key, toDoc.attrs[key])
179
+ updatedSettings = true
180
+ }
181
+ })
182
+ if (updatedSettings) {
183
+ this.currentJSON = this.marklessDoc(this.tr.doc).toJSON()
184
+ this.ops = createPatch(this.currentJSON, this.finalJSON)
185
+ }
186
+ const start = toDoc.content.findDiffStart(fromDoc.content)
187
+ if (start !== null) {
188
+ const fromNode = fromDoc.nodeAt(start),
189
+ toNode = toDoc.nodeAt(start)
190
+ try {
191
+ this.tr.setNodeMarkup(
192
+ start,
193
+ fromNode.type === toNode.type ? null : toNode.type,
194
+ toNode.attrs,
195
+ toNode.marks
196
+ )
197
+ } catch (_error) {
198
+ return
199
+ }
200
+ this.currentJSON = this.marklessDoc(this.tr.doc).toJSON()
201
+ // Setting the node markup may have invalidated more ops, so we calculate them again.
202
+ this.ops = createPatch(this.currentJSON, this.finalJSON)
203
+ }
204
+ }
205
+
206
+ addReplaceTextSteps(op, afterStepJSON) {
207
+ // We find the position number of the first character in the string
208
+ const op1 = Object.assign({}, op, {value: "xx"}),
209
+ op2 = Object.assign({}, op, {value: "yy"})
210
+
211
+ const afterOP1JSON = JSON.parse(JSON.stringify(this.currentJSON)),
212
+ afterOP2JSON = JSON.parse(JSON.stringify(this.currentJSON)),
213
+ pathParts = op.path.split("/")
214
+
215
+ let obj = this.currentJSON
216
+
217
+ applyPatch(afterOP1JSON, [op1])
218
+ applyPatch(afterOP2JSON, [op2])
219
+
220
+ const op1Doc = this.schema.nodeFromJSON(afterOP1JSON),
221
+ op2Doc = this.schema.nodeFromJSON(afterOP2JSON)
222
+
223
+ let offset = op1Doc.content.findDiffStart(op2Doc.content)
224
+ const marks = op1Doc.resolve(offset + 1).marks()
225
+
226
+ pathParts.shift()
227
+
228
+ while (pathParts.length) {
229
+ const pathPart = pathParts.shift()
230
+ obj = obj[pathPart]
231
+ }
232
+
233
+ const finalText = op.value,
234
+ currentText = obj
235
+
236
+ const textDiffs = this.wordDiffs
237
+ ? diffWordsWithSpace(currentText, finalText)
238
+ : diffChars(currentText, finalText)
239
+
240
+ while (textDiffs.length) {
241
+ const diff = textDiffs.shift()
242
+ if (diff.added) {
243
+ if (textDiffs[0]?.removed) {
244
+ const nextDiff = textDiffs.shift()
245
+ this.tr.replaceWith(
246
+ offset,
247
+ offset + nextDiff.value.length,
248
+ this.schema
249
+ .nodeFromJSON({type: "text", text: diff.value})
250
+ .mark(marks)
251
+ )
252
+ } else {
253
+ this.tr.insert(
254
+ offset,
255
+ this.schema
256
+ .nodeFromJSON({type: "text", text: diff.value})
257
+ .mark(marks)
258
+ )
259
+ }
260
+ offset += diff.value.length
261
+ } else if (diff.removed) {
262
+ if (textDiffs[0]?.added) {
263
+ const nextDiff = textDiffs.shift()
264
+ this.tr.replaceWith(
265
+ offset,
266
+ offset + diff.value.length,
267
+ this.schema
268
+ .nodeFromJSON({type: "text", text: nextDiff.value})
269
+ .mark(marks)
270
+ )
271
+ offset += nextDiff.value.length
272
+ } else {
273
+ this.tr.delete(offset, offset + diff.value.length)
274
+ }
275
+ } else {
276
+ offset += diff.value.length
277
+ }
278
+ }
279
+ this.currentJSON = afterStepJSON
280
+ }
281
+
282
+ // join adjacent ReplaceSteps
283
+ simplifyTr() {
284
+ if (!this.tr.steps.length) {
285
+ return
286
+ }
287
+
288
+ const newTr = new Transform(this.tr.docs[0]),
289
+ oldSteps = this.tr.steps.slice()
290
+ while (oldSteps.length) {
291
+ let step = oldSteps.shift()
292
+ while (oldSteps.length && step.merge(oldSteps[0])) {
293
+ const addedStep = oldSteps.shift()
294
+ if (
295
+ step instanceof ReplaceStep &&
296
+ addedStep instanceof ReplaceStep
297
+ ) {
298
+ step =
299
+ getReplaceStep(
300
+ newTr.doc,
301
+ addedStep.apply(step.apply(newTr.doc).doc).doc
302
+ ) || step.merge(addedStep)
303
+ } else {
304
+ step = step.merge(addedStep)
305
+ }
306
+ }
307
+ newTr.step(step)
308
+ }
309
+ this.tr = newTr
310
+ }
311
+ }
312
+
313
+ export function recreateTransform(
314
+ fromDoc,
315
+ toDoc,
316
+ complexSteps = true,
317
+ wordDiffs = true
318
+ ) {
319
+ const recreator = new RecreateTransform(
320
+ fromDoc,
321
+ toDoc,
322
+ complexSteps,
323
+ wordDiffs
324
+ )
325
+ return recreator.init()
326
+ }
@@ -0,0 +1,135 @@
1
+ import {Schema} from "prosemirror-model"
2
+
3
+ export function parseDiff(str) {
4
+ if (!str) {
5
+ return []
6
+ }
7
+ let tracks
8
+ try {
9
+ tracks = JSON.parse(str)
10
+ } catch (_error) {
11
+ return []
12
+ }
13
+ if (!Array.isArray(tracks)) {
14
+ return []
15
+ }
16
+ }
17
+
18
+ export const createDiffSchema = docSchema => {
19
+ let specNodes = docSchema.spec.nodes
20
+
21
+ specNodes.forEach(nodeTypeName => {
22
+ const nodeType = specNodes.get(nodeTypeName)
23
+ if (nodeType.group !== "block") {
24
+ return
25
+ }
26
+ const attrs = nodeType.attrs
27
+ specNodes = specNodes.update(
28
+ nodeTypeName,
29
+ Object.assign({}, nodeType, {
30
+ attrs: Object.assign({diffdata: {default: []}}, attrs),
31
+ toDOM: node => {
32
+ let dom = nodeType.toDOM(node)
33
+ if (node.attrs.diffdata && node.attrs.diffdata.length) {
34
+ if (dom[1].class) {
35
+ dom[1].class =
36
+ dom[1].class + " " + node.attrs.diffdata[0].type
37
+ } else {
38
+ dom[1]["class"] = node.attrs.diffdata[0].type
39
+ }
40
+ dom = [
41
+ dom[0],
42
+ Object.assign(
43
+ {
44
+ "data-diffdata": JSON.stringify(
45
+ node.attrs.diffdata
46
+ )
47
+ },
48
+ dom[1]
49
+ ),
50
+ dom[2]
51
+ ]
52
+ }
53
+ return dom
54
+ },
55
+ parseDOM: nodeType.parseDOM.map(tag => ({
56
+ tag: tag.tag,
57
+ getAttrs: dom => {
58
+ const attrs = tag.getAttrs(dom)
59
+ return Object.assign(
60
+ {
61
+ diffdata: parseDiff(dom.dataset.diffdata)
62
+ },
63
+ attrs
64
+ )
65
+ }
66
+ }))
67
+ })
68
+ )
69
+ })
70
+
71
+ const diffdata = {
72
+ attrs: {
73
+ diff: {
74
+ default: ""
75
+ },
76
+ steps: {
77
+ default: []
78
+ },
79
+ from: {
80
+ default: ""
81
+ },
82
+ to: {
83
+ default: ""
84
+ },
85
+ markOnly: false
86
+ },
87
+ inclusive: false,
88
+ parseDOM: [
89
+ {
90
+ tag: "span.diff",
91
+ getAttrs(dom) {
92
+ return {
93
+ diff: dom.dataset.diff,
94
+ steps: dom.dataset.steps
95
+ }
96
+ }
97
+ }
98
+ ],
99
+ toDOM(node) {
100
+ return [
101
+ "span",
102
+ {
103
+ class: `diff ${node.attrs.diff}`,
104
+ "data-diff": node.attrs.diff,
105
+ "data-steps": node.attrs.steps,
106
+ "data-from": node.attrs.from,
107
+ "data-to": node.attrs.to,
108
+ "data-markOnly": node.attrs.markOnly
109
+ }
110
+ ]
111
+ }
112
+ }
113
+
114
+ const spec = {
115
+ nodes: specNodes,
116
+ marks: docSchema.spec.marks.addToEnd("diffdata", diffdata)
117
+ }
118
+
119
+ // Update link mark toDom to render a span instead of anchor tag
120
+ // Since editable false PM Editor treats anchor tag as a normal a tag
121
+ // and redirects
122
+ const linkMarkSpec = spec.marks.get("link")
123
+ spec.marks = spec.marks.update(
124
+ "link",
125
+ Object.assign({}, linkMarkSpec, {
126
+ toDOM: node => {
127
+ const dom = linkMarkSpec.toDOM(node)
128
+ dom[0] = "span"
129
+ return dom
130
+ }
131
+ })
132
+ )
133
+
134
+ return new Schema(spec)
135
+ }
@@ -0,0 +1,171 @@
1
+ import {showSystemMessage} from "fwtoolkit"
2
+ import {TextSelection} from "prosemirror-state"
3
+ import {AddMarkStep, Mapping, RemoveMarkStep, Step} from "prosemirror-transform"
4
+ import {dispatchRemoveDiffdata} from "../tools"
5
+
6
+ export const copyChange = (view, from, to) => {
7
+ /* when a certain change cannot be applied automatically,
8
+ we give users the ability to copy a change */
9
+ const tr = view.state.tr
10
+ const resolvedFrom = view.state.doc.resolve(from)
11
+ const resolvedTo = view.state.doc.resolve(to)
12
+ const sel = new TextSelection(resolvedFrom, resolvedTo)
13
+ sel.visible = false
14
+ tr.setSelection(sel)
15
+ view.dispatch(tr)
16
+ view.focus()
17
+
18
+ const slice = view.state.selection.content()
19
+ const {dom} = view.serializeForClipboard(slice)
20
+
21
+ // Copy data to clipboard!!
22
+ document.body.appendChild(dom)
23
+ const range = document.createRange()
24
+ range.selectNode(dom)
25
+ window.getSelection().addRange(range)
26
+ try {
27
+ document.execCommand("copy") // Security exception may be thrown by some browsers.
28
+ document.body.removeChild(dom)
29
+ showSystemMessage(gettext("Change copied to clipboard."))
30
+ } catch (_ex) {
31
+ showSystemMessage(
32
+ gettext("Copy to clipboard failed. Please copy manually.")
33
+ )
34
+ }
35
+ window.getSelection().removeAllRanges()
36
+ }
37
+
38
+ export const acceptChanges = (merge, mark, mergeView, originalView, tr) => {
39
+ /* This is used to accept a change either from the offline/online version or
40
+ incase of deletion from the middle editor */
41
+ const mergedDocMap = new Mapping()
42
+ mergedDocMap.appendMapping(merge.mergedDocMap)
43
+ const insertionTr = mergeView.state.tr
44
+ const from = mark.attrs.from
45
+ const to = mark.attrs.to
46
+ const steps = JSON.parse(mark.attrs.steps)
47
+ const stepMaps = tr.mapping.maps
48
+ .slice()
49
+ .reverse()
50
+ .map(map => map.invert())
51
+ const rebasedMapping = new Mapping(stepMaps)
52
+ rebasedMapping.appendMapping(mergedDocMap)
53
+ for (const stepIndex of steps) {
54
+ const maps = rebasedMapping.slice(tr.steps.length - stepIndex)
55
+ let mappedStep = tr.steps[stepIndex].map(maps)
56
+ if (mappedStep) {
57
+ mappedStep = Step.fromJSON(
58
+ // Switch from main editor schema to merge editor schema
59
+ insertionTr.doc.type.schema,
60
+ mappedStep.toJSON()
61
+ )
62
+ }
63
+ if (mappedStep && !insertionTr.maybeStep(mappedStep).failed) {
64
+ mergedDocMap.appendMap(mappedStep.getMap())
65
+ rebasedMapping.appendMap(mappedStep.getMap())
66
+ rebasedMapping.setMirror(
67
+ tr.steps.length - stepIndex - 1,
68
+ tr.steps.length + mergedDocMap.maps.length - 1
69
+ )
70
+ }
71
+ }
72
+ // Make sure that all the content steps are present in the new transaction
73
+ if (insertionTr.steps.length < steps.length) {
74
+ showSystemMessage(
75
+ gettext(
76
+ "The change could not be applied automatically. Please consider using the copy option to copy the changes."
77
+ )
78
+ )
79
+ } else {
80
+ dispatchRemoveDiffdata(originalView, from, to)
81
+ merge.mergedDocMap = mergedDocMap
82
+ insertionTr.setMeta("mapAppended", true)
83
+ insertionTr.setMeta("notrack", true)
84
+ mergeView.dispatch(insertionTr)
85
+ }
86
+ }
87
+
88
+ export const removeDecoration = (view, decorationId) => {
89
+ const tr = view.state.tr
90
+ tr.setMeta("decorationId", decorationId)
91
+ view.dispatch(tr)
92
+ }
93
+
94
+ export const deleteContent = (merge, view, diffMark, mappingNeeded = true) => {
95
+ // const originalOnlineMapping = merge.onlineTr.mapping
96
+ const rebasedMapping = new Mapping()
97
+ const tr = view.state.tr
98
+ if (mappingNeeded) {
99
+ rebasedMapping.appendMapping(merge.mergedDocMap)
100
+ }
101
+ const rebasedFrom = rebasedMapping.map(diffMark.attrs.from),
102
+ rebasedTo = rebasedMapping.map(diffMark.attrs.to)
103
+ if (rebasedFrom && rebasedTo) {
104
+ tr.delete(rebasedFrom, rebasedTo)
105
+ merge.mergedDocMap.appendMapping(tr.mapping)
106
+ tr.setMeta("mapAppended", true)
107
+ tr.setMeta("notrack", true)
108
+ view.dispatch(tr)
109
+ return true
110
+ }
111
+ showSystemMessage(
112
+ gettext(
113
+ "The change could not be applied automatically. Please consider using the copy option to copy the changes."
114
+ )
115
+ )
116
+ return false
117
+ }
118
+
119
+ export const addDeletedContentBack = (merge, view, diffMark) => {
120
+ const commonDoc = merge.cpDoc
121
+ const tr = view.state.tr
122
+ const slice = commonDoc.slice(diffMark.attrs.from, diffMark.attrs.to)
123
+ const rebasedMapping = new Mapping()
124
+ rebasedMapping.appendMapping(merge.mergedDocMap)
125
+ const insertionPoint = rebasedMapping.map(diffMark.attrs.from)
126
+ if (insertionPoint) {
127
+ tr.insert(insertionPoint, slice.content)
128
+ tr.setMeta("mapAppended", true)
129
+ tr.setMeta("notrack", true)
130
+ view.dispatch(tr)
131
+ merge.mergedDocMap.appendMapping(tr.mapping)
132
+ return true
133
+ }
134
+ showSystemMessage(
135
+ gettext(
136
+ "The change could not be applied automatically. Please consider using the copy option to copy the changes."
137
+ )
138
+ )
139
+ return false
140
+ }
141
+
142
+ export const handleMarks = (view, mark, tr, schema) => {
143
+ // This function is used to remove the marks that have been applied in the online editor
144
+ const newTr = view.state.tr
145
+ const steps = JSON.parse(mark.attrs.steps)
146
+ const marksToBeRemoved = [],
147
+ marksToBeAdded = []
148
+ steps.forEach(index => {
149
+ const JSONStep = tr.steps[index].toJSON()
150
+ if (JSONStep.mark && JSONStep.mark.type) {
151
+ if (tr.steps[index] instanceof AddMarkStep) {
152
+ marksToBeRemoved.push(JSONStep.mark.type)
153
+ } else if (tr.steps[index] instanceof RemoveMarkStep) {
154
+ marksToBeAdded.push(tr.steps[index].mark)
155
+ }
156
+ }
157
+ })
158
+ marksToBeRemoved.forEach(removalMark =>
159
+ newTr.removeMark(
160
+ mark.attrs.from,
161
+ mark.attrs.to,
162
+ schema.marks[removalMark]
163
+ )
164
+ )
165
+ marksToBeAdded.forEach(AddMark =>
166
+ newTr.addMark(mark.attrs.from, mark.attrs.to, AddMark)
167
+ )
168
+ newTr.setMeta("notrack", true)
169
+ newTr.setMeta("mapAppended", true)
170
+ view.dispatch(newTr)
171
+ }
@@ -0,0 +1,32 @@
1
+ import {Plugin, PluginKey, TextSelection} from "prosemirror-state"
2
+ import {docClipboardSerializer} from "../../../clipboard/copy"
3
+
4
+ const key = new PluginKey("clipboard")
5
+ export const clipboardPlugin = options => {
6
+ return new Plugin({
7
+ key,
8
+ props: {
9
+ handleDrop: (view, event, slice, moved) => {
10
+ if (moved || (slice && slice.size)) {
11
+ return false // Something other than en empty plain text string from outside. Handled by PM already.
12
+ }
13
+ const eventPos = view.posAtCoords({
14
+ left: event.clientX,
15
+ top: event.clientY
16
+ })
17
+ if (!eventPos) {
18
+ return false
19
+ }
20
+ const $mouse = view.state.doc.resolve(eventPos.pos)
21
+ if (!$mouse) {
22
+ return false
23
+ }
24
+ const tr = view.state.tr
25
+ tr.setSelection(new TextSelection($mouse))
26
+ view.dispatch(tr)
27
+ return true
28
+ },
29
+ clipboardSerializer: docClipboardSerializer(options.editor)
30
+ }
31
+ })
32
+ }