@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,305 @@
1
+ /**
2
+ * E2EE Snapshot Manager - Handles encrypted snapshot requests and saves
3
+ * for end-to-end encrypted documents.
4
+ *
5
+ * For E2EE documents, the server cannot process encrypted content, so clients
6
+ * are responsible for saving periodic snapshots. When the server's
7
+ * DOC_SAVE_INTERVAL is reached, it sends a "request_snapshot" message to
8
+ * one of the write-capable clients. This module handles that request by:
9
+ *
10
+ * 1. Collecting the current document state (content, comments, bibliography)
11
+ * 2. Encrypting each field with the document's AES-GCM key
12
+ * 3. Sending an "e2ee_snapshot" message to the server for persistence
13
+ *
14
+ * The server stores the encrypted snapshot as opaque data and notifies
15
+ * other clients via an "e2ee_snapshot_received" message.
16
+ */
17
+ export class E2EESnapshotManager {
18
+ /**
19
+ * @param {Editor} editor - The Fidus Writer editor instance
20
+ */
21
+ constructor(editor) {
22
+ this.editor = editor
23
+ this.pendingSave = false
24
+ this.key = null
25
+ }
26
+
27
+ /**
28
+ * Set the encryption key for this document.
29
+ * Called after the user enters the password and the key is derived.
30
+ *
31
+ * @param {CryptoKey} key - An AES-GCM key (from E2EEKeyManager.deriveKey)
32
+ */
33
+ setKey(key) {
34
+ this.key = key
35
+ }
36
+
37
+ /**
38
+ * Clear the encryption key (e.g., when the document is closed).
39
+ */
40
+ clearKey() {
41
+ this.key = null
42
+ }
43
+
44
+ /**
45
+ * Check whether the snapshot manager has a key set.
46
+ *
47
+ * @returns {boolean}
48
+ */
49
+ get hasKey() {
50
+ return this.key !== null
51
+ }
52
+
53
+ /**
54
+ * Build an encrypted snapshot payload for the current document state.
55
+ *
56
+ * Returns the encrypted data without sending it. Used in
57
+ * non-collaborative mode where snapshots are sent via REST instead
58
+ * of WebSocket.
59
+ *
60
+ * @returns {Object|null} The encrypted snapshot payload or null if no key.
61
+ */
62
+ async getEncryptedSnapshot() {
63
+ if (!this.key) {
64
+ return null
65
+ }
66
+ const content = this.editor.view.docView.node.toJSON()
67
+ const comments = this.editor.docInfo.comments || {}
68
+ const bibliography = this.editor.docInfo.bibliography || {}
69
+ const {title} = this.editor.getDoc()
70
+
71
+ const {E2EEEncryptor} = await import("./encryptor")
72
+
73
+ const encryptedContent = await E2EEEncryptor.encryptObject(
74
+ content,
75
+ this.key
76
+ )
77
+ const encryptedComments = await E2EEEncryptor.encryptObject(
78
+ comments,
79
+ this.key
80
+ )
81
+ const encryptedBibliography = await E2EEEncryptor.encryptObject(
82
+ bibliography,
83
+ this.key
84
+ )
85
+ const encryptedTitle = await E2EEEncryptor.encrypt(title, this.key)
86
+
87
+ return {
88
+ content: encryptedContent,
89
+ comments: encryptedComments,
90
+ bibliography: encryptedBibliography,
91
+ title: encryptedTitle,
92
+ e2ee_salt: this.editor.e2ee.encryptionSalt,
93
+ e2ee_iterations: this.editor.e2ee.encryptionIterations,
94
+ v: this.editor.docInfo.version
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Handle a "request_snapshot" message from the server.
100
+ *
101
+ * The server sends this message when it needs a client to save
102
+ * an encrypted snapshot (typically after DOC_SAVE_INTERVAL diffs).
103
+ * Only write-capable clients should respond.
104
+ *
105
+ * @param {Object} request - The request_snapshot message
106
+ * @param {number} request.v - The server's current document version
107
+ */
108
+ async handleRequestSnapshot(_request) {
109
+ if (this.pendingSave) {
110
+ return
111
+ }
112
+ if (!this.key) {
113
+ return
114
+ }
115
+ if (this.editor.docInfo.access_rights !== "write") {
116
+ return
117
+ }
118
+
119
+ this.pendingSave = true
120
+
121
+ const docInfo = this.editor.docInfo
122
+
123
+ // Get the current document content as JSON
124
+ const content = this.editor.view.docView.node.toJSON()
125
+ const comments = docInfo.comments || {}
126
+ const bibliography = docInfo.bibliography || {}
127
+
128
+ // Extract the current title from the editor
129
+ const {title} = this.editor.getDoc()
130
+
131
+ // Dynamically import to avoid circular dependencies
132
+ const {E2EEEncryptor} = await import("./encryptor")
133
+
134
+ // Encrypt all document data
135
+ const encryptedContent = await E2EEEncryptor.encryptObject(
136
+ content,
137
+ this.key
138
+ )
139
+ const encryptedComments = await E2EEEncryptor.encryptObject(
140
+ comments,
141
+ this.key
142
+ )
143
+ const encryptedBibliography = await E2EEEncryptor.encryptObject(
144
+ bibliography,
145
+ this.key
146
+ )
147
+ const encryptedTitle = await E2EEEncryptor.encrypt(title, this.key)
148
+
149
+ // Send snapshot to server
150
+ this.editor.ws.send(() => ({
151
+ type: "e2ee_snapshot",
152
+ v: docInfo.version,
153
+ content: encryptedContent,
154
+ comments: encryptedComments,
155
+ bibliography: encryptedBibliography,
156
+ e2ee_salt: this.editor.e2ee.encryptionSalt,
157
+ title: encryptedTitle
158
+ }))
159
+ this.pendingSave = false
160
+ }
161
+
162
+ /**
163
+ * Handle an "e2ee_snapshot_received" message from the server.
164
+ *
165
+ * The server sends this to all clients (except the one that sent
166
+ * the snapshot) to notify them that a new snapshot has been saved.
167
+ * This is informational — clients don't need to take any action
168
+ * since they already have the latest state from the diffs they've
169
+ * been receiving.
170
+ *
171
+ * @param {Object} message - The e2ee_snapshot_received message
172
+ * @param {number} message.v - The version of the saved snapshot
173
+ */
174
+ async handleSnapshotReceived(message) {
175
+ // Informational — no action needed for regular snapshots.
176
+ // If the server included new KDF params, the password was changed
177
+ // by another client. Update local state so that if we re-fetch
178
+ // we use the new salt.
179
+ if (message.e2ee_salt) {
180
+ this.editor.e2ee.encryptionSalt = message.e2ee_salt
181
+ this.editor.e2ee.encryptionIterations = message.e2ee_iterations
182
+ this.editor.e2ee.key = null
183
+ this.clearKey()
184
+ // Clear cached password and key from sessionStorage so the user
185
+ // is prompted for the new password on next access.
186
+ const {E2EEKeyManager} = await import("./key-manager")
187
+ E2EEKeyManager.clearKeyFromSession(this.editor.docInfo.id)
188
+ E2EEKeyManager.clearPasswordFromSession(this.editor.docInfo.id)
189
+ // Notify the user that the password has changed.
190
+ const {showSystemMessage} = await import("fwtoolkit")
191
+ showSystemMessage(
192
+ gettext(
193
+ "The document password was changed by another user. You will need to enter the new password to continue editing."
194
+ )
195
+ )
196
+ }
197
+ }
198
+
199
+ /**
200
+ * Send an initial snapshot for a newly created E2EE document.
201
+ *
202
+ * When a new E2EE document is created, the initial content (from
203
+ * the template) needs to be encrypted and saved as the first snapshot.
204
+ * This method handles that initial save.
205
+ *
206
+ * @param {Object} content - The document content (ProseMirror JSON)
207
+ * @param {Object} comments - The comments object (usually empty {})
208
+ * @param {Object} bibliography - The bibliography object (usually {})
209
+ * @param {number} version - The document version (usually 0)
210
+ */
211
+ async sendInitialSnapshot(content, comments, bibliography, version) {
212
+ if (!this.key) {
213
+ return
214
+ }
215
+
216
+ const {E2EEEncryptor} = await import("./encryptor")
217
+
218
+ const encryptedContent = await E2EEEncryptor.encryptObject(
219
+ content,
220
+ this.key
221
+ )
222
+ const encryptedComments = await E2EEEncryptor.encryptObject(
223
+ comments,
224
+ this.key
225
+ )
226
+ const encryptedBibliography = await E2EEEncryptor.encryptObject(
227
+ bibliography,
228
+ this.key
229
+ )
230
+
231
+ // Extract the current title from the editor
232
+ const {title} = this.editor.getDoc()
233
+ const encryptedTitle = await E2EEEncryptor.encrypt(title, this.key)
234
+
235
+ this.editor.ws.send(() => ({
236
+ type: "e2ee_snapshot",
237
+ v: version,
238
+ content: encryptedContent,
239
+ comments: encryptedComments,
240
+ bibliography: encryptedBibliography,
241
+ e2ee_salt: this.editor.e2ee.encryptionSalt,
242
+ title: encryptedTitle
243
+ }))
244
+ }
245
+
246
+ /**
247
+ * Re-encrypt the document with a new key (for password changes).
248
+ *
249
+ * When the user changes the document password, a new key is derived
250
+ * and the entire document must be re-encrypted. This method handles
251
+ * that by collecting the current document state, encrypting it with
252
+ * the new key, and sending a snapshot.
253
+ *
254
+ * @param {CryptoKey} newKey - The new AES-GCM key derived from the new password
255
+ * @param {string} newSaltBase64 - The new salt (Base64-encoded) to send to the server
256
+ * @param {number} newIterations - The new iteration count
257
+ */
258
+ async reEncryptWithNewKey(newKey, newSaltBase64, newIterations) {
259
+ if (this.pendingSave) {
260
+ return
261
+ }
262
+ this.pendingSave = true
263
+
264
+ const docInfo = this.editor.docInfo
265
+ const content = this.editor.view.docView.node.toJSON()
266
+ const comments = docInfo.comments || {}
267
+ const bibliography = docInfo.bibliography || {}
268
+
269
+ // Extract the current title from the editor
270
+ const {title} = this.editor.getDoc()
271
+
272
+ const {E2EEEncryptor} = await import("./encryptor")
273
+
274
+ // Encrypt with the new key
275
+ const encryptedContent = await E2EEEncryptor.encryptObject(
276
+ content,
277
+ newKey
278
+ )
279
+ const encryptedComments = await E2EEEncryptor.encryptObject(
280
+ comments,
281
+ newKey
282
+ )
283
+ const encryptedBibliography = await E2EEEncryptor.encryptObject(
284
+ bibliography,
285
+ newKey
286
+ )
287
+ const encryptedTitle = await E2EEEncryptor.encrypt(title, newKey)
288
+
289
+ // Update the key
290
+ this.key = newKey
291
+
292
+ // Send the re-encrypted snapshot along with the new KDF parameters
293
+ this.editor.ws.send(() => ({
294
+ type: "e2ee_snapshot",
295
+ v: docInfo.version,
296
+ content: encryptedContent,
297
+ comments: encryptedComments,
298
+ bibliography: encryptedBibliography,
299
+ e2ee_salt: newSaltBase64,
300
+ e2ee_iterations: newIterations,
301
+ title: encryptedTitle
302
+ }))
303
+ this.pendingSave = false
304
+ }
305
+ }
@@ -0,0 +1,54 @@
1
+ import {SaveCopy as GenericSaveCopy} from "@fiduswriter/document/exporter/native"
2
+ import {addProgress, gettext, shortFileTitle} from "fwtoolkit"
3
+ import {E2EEEncryptor} from "../../e2ee/encryptor"
4
+ import {E2EEKeyManager} from "../../e2ee/key-manager"
5
+ import {NativeImporter} from "../../importer/native"
6
+
7
+ export class SaveCopy extends GenericSaveCopy {
8
+ constructor(
9
+ doc,
10
+ bibDB,
11
+ imageDB,
12
+ newUser,
13
+ importId = null,
14
+ e2eeOptions = null
15
+ ) {
16
+ const title = shortFileTitle(doc.title, doc.path || "")
17
+ const task = addProgress(
18
+ "info",
19
+ `${title}: ${gettext("Creating copy...")}`,
20
+ {autoClose: false}
21
+ )
22
+ const progressCallback = (message, percentage) =>
23
+ task.update(percentage, message)
24
+ const e2ee = {
25
+ decryptObject: E2EEEncryptor.decryptObject.bind(E2EEEncryptor),
26
+ encryptObject: E2EEEncryptor.encryptObject.bind(E2EEEncryptor),
27
+ encrypt: E2EEEncryptor.encrypt.bind(E2EEEncryptor),
28
+ encryptImage: E2EEEncryptor.encryptImage.bind(E2EEEncryptor),
29
+ generateSalt: E2EEKeyManager.generateSalt.bind(E2EEKeyManager),
30
+ deriveKey: E2EEKeyManager.deriveKey.bind(E2EEKeyManager)
31
+ }
32
+
33
+ const importDocument = (doc, bibDB, imageDB, httpIncludes, options) =>
34
+ new NativeImporter(
35
+ doc,
36
+ bibDB,
37
+ imageDB,
38
+ httpIncludes,
39
+ options.user,
40
+ options.importId,
41
+ options.requestedPath,
42
+ null,
43
+ options.e2eeOptions
44
+ ).init()
45
+
46
+ super(doc, bibDB, imageDB, newUser, {
47
+ importId,
48
+ e2eeOptions,
49
+ e2ee,
50
+ importDocument,
51
+ progressCallback
52
+ })
53
+ }
54
+ }
@@ -0,0 +1,37 @@
1
+ import {ExportFidusFile as GenericExportFidusFile} from "@fiduswriter/document/exporter/native"
2
+ import {addProgress, gettext, shortFileTitle} from "fwtoolkit"
3
+ import {DocumentTemplateExporter} from "../../document_template/exporter"
4
+
5
+ export class ExportFidusFile extends GenericExportFidusFile {
6
+ constructor(doc, bibDB, imageDB, includeTemplate = true, token = false) {
7
+ const title = shortFileTitle(doc.title, doc.path || "")
8
+ const task = addProgress(
9
+ "info",
10
+ `${title}: ${gettext("Exporting Fidus file...")}`,
11
+ {autoClose: false}
12
+ )
13
+ const progressCallback = (message, percentage) =>
14
+ task.update(percentage, message)
15
+ const getTemplateFiles = (docId, token) => {
16
+ const templateExporter = new DocumentTemplateExporter(
17
+ docId,
18
+ "/api/document/get_template_for_doc/",
19
+ false,
20
+ token
21
+ )
22
+ return templateExporter.init().then(() => ({
23
+ textFiles: templateExporter.textFiles,
24
+ httpFiles: templateExporter.httpFiles
25
+ }))
26
+ }
27
+ super(
28
+ doc,
29
+ bibDB,
30
+ imageDB,
31
+ includeTemplate,
32
+ token,
33
+ getTemplateFiles,
34
+ progressCallback
35
+ )
36
+ }
37
+ }
@@ -0,0 +1,3 @@
1
+ export {ExportFidusFile} from "./file"
2
+ export {SaveRevision} from "./revision"
3
+ export {SaveCopy} from "./copy"
@@ -0,0 +1,86 @@
1
+ import {SaveRevision as GenericSaveRevision} from "@fiduswriter/document/exporter/native"
2
+ import {createSlug} from "@fiduswriter/document/exporter/tools/file"
3
+ import {addAlert, addProgress, gettext, post, shortFileTitle} from "fwtoolkit"
4
+ import {DocumentTemplateExporter} from "../../document_template/exporter"
5
+
6
+ export class SaveRevision extends GenericSaveRevision {
7
+ constructor(doc, imageDB, bibDB, note, app) {
8
+ const title = shortFileTitle(doc.title, doc.path || "")
9
+ const task = addProgress(
10
+ "info",
11
+ `${title}: ${gettext("Saving revision...")}`,
12
+ {autoClose: false}
13
+ )
14
+ const progressCallback = (message, percentage) =>
15
+ task.update(percentage, message)
16
+
17
+ const onError = error => {
18
+ task.close()
19
+ addAlert("error", gettext("Revision file could not be generated."))
20
+ if (app.isOffline()) {
21
+ addAlert(
22
+ "info",
23
+ gettext(
24
+ "You are currently offline. Please try again when you are back online."
25
+ )
26
+ )
27
+ } else {
28
+ throw error
29
+ }
30
+ }
31
+
32
+ const getTemplateFiles = (docId, token) => {
33
+ const templateExporter = new DocumentTemplateExporter(
34
+ docId,
35
+ "/api/document/get_template_for_doc/",
36
+ false,
37
+ token
38
+ )
39
+ return templateExporter.init().then(() => ({
40
+ textFiles: templateExporter.textFiles,
41
+ httpFiles: templateExporter.httpFiles
42
+ }))
43
+ }
44
+
45
+ const uploadRevision = (blob, doc) => {
46
+ return post(
47
+ "/api/document/upload/",
48
+ {
49
+ note,
50
+ document_id: doc.id
51
+ },
52
+ {
53
+ file: {
54
+ file: blob,
55
+ filename: `${createSlug(
56
+ shortFileTitle(doc.title, doc.path)
57
+ )}.fidus`
58
+ }
59
+ }
60
+ )
61
+ .then(
62
+ () => {},
63
+ () => {
64
+ if (app.isOffline()) {
65
+ addAlert(
66
+ "info",
67
+ gettext(
68
+ "You are currently offline. Please try again when you are back online."
69
+ )
70
+ )
71
+ }
72
+ throw new Error(gettext("Revision could not be saved."))
73
+ }
74
+ )
75
+ .catch(error => {
76
+ throw error
77
+ })
78
+ }
79
+
80
+ super(doc, imageDB, bibDB, note, uploadRevision, {
81
+ getTemplateFiles,
82
+ onError,
83
+ progressCallback
84
+ })
85
+ }
86
+ }
@@ -0,0 +1 @@
1
+ export {ZipFidus} from "@fiduswriter/document/exporter/native"