@fiduswriter/editor 0.1.19 → 0.1.21
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.
- package/dist/bibliography/tools.d.ts +14 -0
- package/dist/bibliography/tools.d.ts.map +1 -0
- package/dist/bibliography/tools.js +1 -1
- package/dist/bibliography/tools.js.map +1 -1
- package/dist/citations/index.d.ts +17 -0
- package/dist/citations/index.d.ts.map +1 -0
- package/dist/citations/index.js +22 -13
- package/dist/citations/index.js.map +1 -1
- package/dist/citations/render.d.ts +29 -0
- package/dist/citations/render.d.ts.map +1 -0
- package/dist/citations/render.js +25 -8
- package/dist/citations/render.js.map +1 -1
- package/dist/clipboard/copy/index.d.ts +2 -0
- package/dist/clipboard/copy/index.d.ts.map +1 -0
- package/dist/clipboard/copy/index.js.map +1 -1
- package/dist/clipboard/copy/schema.d.ts +4 -0
- package/dist/clipboard/copy/schema.d.ts.map +1 -0
- package/dist/clipboard/copy/schema.js +6 -5
- package/dist/clipboard/copy/schema.js.map +1 -1
- package/dist/clipboard/copy/serializers.d.ts +24 -0
- package/dist/clipboard/copy/serializers.d.ts.map +1 -0
- package/dist/clipboard/copy/serializers.js +19 -9
- package/dist/clipboard/copy/serializers.js.map +1 -1
- package/dist/clipboard/paste/fidus_writer.d.ts +7 -0
- package/dist/clipboard/paste/fidus_writer.d.ts.map +1 -0
- package/dist/clipboard/paste/fidus_writer.js +5 -2
- package/dist/clipboard/paste/fidus_writer.js.map +1 -1
- package/dist/clipboard/paste/general.d.ts +18 -0
- package/dist/clipboard/paste/general.d.ts.map +1 -0
- package/dist/clipboard/paste/general.js +18 -6
- package/dist/clipboard/paste/general.js.map +1 -1
- package/dist/clipboard/paste/google_docs.d.ts +6 -0
- package/dist/clipboard/paste/google_docs.d.ts.map +1 -0
- package/dist/clipboard/paste/google_docs.js +3 -2
- package/dist/clipboard/paste/google_docs.js.map +1 -1
- package/dist/clipboard/paste/html.d.ts +22 -0
- package/dist/clipboard/paste/html.d.ts.map +1 -0
- package/dist/clipboard/paste/html.js +15 -0
- package/dist/clipboard/paste/html.js.map +1 -1
- package/dist/clipboard/paste/index.d.ts +3 -0
- package/dist/clipboard/paste/index.d.ts.map +1 -0
- package/dist/clipboard/paste/index.js.map +1 -1
- package/dist/clipboard/paste/libreoffice_writer.d.ts +5 -0
- package/dist/clipboard/paste/libreoffice_writer.d.ts.map +1 -0
- package/dist/clipboard/paste/libreoffice_writer.js +2 -2
- package/dist/clipboard/paste/libreoffice_writer.js.map +1 -1
- package/dist/clipboard/paste/microsoft_word.d.ts +7 -0
- package/dist/clipboard/paste/microsoft_word.d.ts.map +1 -0
- package/dist/clipboard/paste/microsoft_word.js +13 -14
- package/dist/clipboard/paste/microsoft_word.js.map +1 -1
- package/dist/clipboard/paste/text.d.ts +11 -0
- package/dist/clipboard/paste/text.d.ts.map +1 -0
- package/dist/clipboard/paste/text.js +5 -3
- package/dist/clipboard/paste/text.js.map +1 -1
- package/dist/collab/chat.d.ts +24 -0
- package/dist/collab/chat.d.ts.map +1 -0
- package/dist/collab/chat.js +46 -16
- package/dist/collab/chat.js.map +1 -1
- package/dist/collab/colors.d.ts +16 -0
- package/dist/collab/colors.d.ts.map +1 -0
- package/dist/collab/colors.js +6 -0
- package/dist/collab/colors.js.map +1 -1
- package/dist/collab/doc.d.ts +147 -0
- package/dist/collab/doc.d.ts.map +1 -0
- package/dist/collab/doc.js +77 -42
- package/dist/collab/doc.js.map +1 -1
- package/dist/collab/index.d.ts +23 -0
- package/dist/collab/index.d.ts.map +1 -0
- package/dist/collab/index.js +14 -3
- package/dist/collab/index.js.map +1 -1
- package/dist/collab/merge/changeset.d.ts +23 -0
- package/dist/collab/merge/changeset.d.ts.map +1 -0
- package/dist/collab/merge/changeset.js +5 -4
- package/dist/collab/merge/changeset.js.map +1 -1
- package/dist/collab/merge/editor.d.ts +53 -0
- package/dist/collab/merge/editor.d.ts.map +1 -0
- package/dist/collab/merge/editor.js +62 -35
- package/dist/collab/merge/editor.js.map +1 -1
- package/dist/collab/merge/footnotes.d.ts +26 -0
- package/dist/collab/merge/footnotes.d.ts.map +1 -0
- package/dist/collab/merge/footnotes.js +14 -5
- package/dist/collab/merge/footnotes.js.map +1 -1
- package/dist/collab/merge/index.d.ts +32 -0
- package/dist/collab/merge/index.d.ts.map +1 -0
- package/dist/collab/merge/index.js +38 -26
- package/dist/collab/merge/index.js.map +1 -1
- package/dist/collab/merge/recreate_transform.d.ts +4 -0
- package/dist/collab/merge/recreate_transform.d.ts.map +1 -0
- package/dist/collab/merge/recreate_transform.js +25 -5
- package/dist/collab/merge/recreate_transform.js.map +1 -1
- package/dist/collab/merge/schema.d.ts +4 -0
- package/dist/collab/merge/schema.d.ts.map +1 -0
- package/dist/collab/merge/schema.js +35 -26
- package/dist/collab/merge/schema.js.map +1 -1
- package/dist/collab/merge/state_plugins/action.d.ts +16 -0
- package/dist/collab/merge/state_plugins/action.d.ts.map +1 -0
- package/dist/collab/merge/state_plugins/action.js +4 -5
- package/dist/collab/merge/state_plugins/action.js.map +1 -1
- package/dist/collab/merge/state_plugins/clipboard.d.ts +6 -0
- package/dist/collab/merge/state_plugins/clipboard.d.ts.map +1 -0
- package/dist/collab/merge/state_plugins/clipboard.js +1 -1
- package/dist/collab/merge/state_plugins/clipboard.js.map +1 -1
- package/dist/collab/merge/state_plugins/diff.d.ts +32 -0
- package/dist/collab/merge/state_plugins/diff.d.ts.map +1 -0
- package/dist/collab/merge/state_plugins/diff.js +108 -84
- package/dist/collab/merge/state_plugins/diff.js.map +1 -1
- package/dist/collab/merge/state_plugins/index.d.ts +3 -0
- package/dist/collab/merge/state_plugins/index.d.ts.map +1 -0
- package/dist/collab/merge/state_plugins/index.js.map +1 -1
- package/dist/collab/merge/tools.d.ts +11 -0
- package/dist/collab/merge/tools.d.ts.map +1 -0
- package/dist/collab/merge/tools.js +16 -14
- package/dist/collab/merge/tools.js.map +1 -1
- package/dist/collab/templates.d.ts +14 -0
- package/dist/collab/templates.d.ts.map +1 -0
- package/dist/collab/templates.js +1 -1
- package/dist/collab/templates.js.map +1 -1
- package/dist/comments/comment.d.ts +29 -0
- package/dist/comments/comment.d.ts.map +1 -0
- package/dist/comments/comment.js +12 -0
- package/dist/comments/comment.js.map +1 -1
- package/dist/comments/editors/answer.d.ts +14 -0
- package/dist/comments/editors/answer.d.ts.map +1 -0
- package/dist/comments/editors/answer.js +5 -3
- package/dist/comments/editors/answer.js.map +1 -1
- package/dist/comments/editors/comment.d.ts +65 -0
- package/dist/comments/editors/comment.d.ts.map +1 -0
- package/dist/comments/editors/comment.js +43 -14
- package/dist/comments/editors/comment.js.map +1 -1
- package/dist/comments/editors/index.d.ts +4 -0
- package/dist/comments/editors/index.d.ts.map +1 -0
- package/dist/comments/editors/index.js.map +1 -1
- package/dist/comments/editors/notify.d.ts +3 -0
- package/dist/comments/editors/notify.d.ts.map +1 -0
- package/dist/comments/editors/notify.js.map +1 -1
- package/dist/comments/editors/schema.d.ts +12 -0
- package/dist/comments/editors/schema.d.ts.map +1 -0
- package/dist/comments/editors/schema.js +5 -5
- package/dist/comments/editors/schema.js.map +1 -1
- package/dist/comments/index.d.ts +10 -0
- package/dist/comments/index.d.ts.map +1 -0
- package/dist/comments/index.js +5 -2
- package/dist/comments/index.js.map +1 -1
- package/dist/comments/interactions.d.ts +49 -0
- package/dist/comments/interactions.d.ts.map +1 -0
- package/dist/comments/interactions.js +33 -18
- package/dist/comments/interactions.js.map +1 -1
- package/dist/comments/store.d.ts +59 -0
- package/dist/comments/store.d.ts.map +1 -0
- package/dist/comments/store.js +36 -16
- package/dist/comments/store.js.map +1 -1
- package/dist/contacts/add_dialog.d.ts +7 -0
- package/dist/contacts/add_dialog.d.ts.map +1 -0
- package/dist/contacts/add_dialog.js +25 -26
- package/dist/contacts/add_dialog.js.map +1 -1
- package/dist/contacts/templates.d.ts +12 -0
- package/dist/contacts/templates.d.ts.map +1 -0
- package/dist/contacts/templates.js +3 -2
- package/dist/contacts/templates.js.map +1 -1
- package/dist/copyright_dialog/index.d.ts +25 -0
- package/dist/copyright_dialog/index.d.ts.map +1 -0
- package/dist/copyright_dialog/index.js +34 -26
- package/dist/copyright_dialog/index.js.map +1 -1
- package/dist/copyright_dialog/templates.d.ts +17 -0
- package/dist/copyright_dialog/templates.d.ts.map +1 -0
- package/dist/copyright_dialog/templates.js.map +1 -1
- package/dist/databases/bibliography.d.ts +42 -0
- package/dist/databases/bibliography.d.ts.map +1 -0
- package/dist/databases/bibliography.js +24 -9
- package/dist/databases/bibliography.js.map +1 -1
- package/dist/databases/images.d.ts +66 -0
- package/dist/databases/images.d.ts.map +1 -0
- package/dist/databases/images.js +19 -9
- package/dist/databases/images.js.map +1 -1
- package/dist/databases/index.d.ts +26 -0
- package/dist/databases/index.d.ts.map +1 -0
- package/dist/databases/index.js +9 -8
- package/dist/databases/index.js.map +1 -1
- package/dist/dialogs/citation.d.ts +58 -0
- package/dist/dialogs/citation.d.ts.map +1 -0
- package/dist/dialogs/citation.js +48 -25
- package/dist/dialogs/citation.js.map +1 -1
- package/dist/dialogs/code_block.d.ts +25 -0
- package/dist/dialogs/code_block.d.ts.map +1 -0
- package/dist/dialogs/code_block.js +32 -11
- package/dist/dialogs/code_block.js.map +1 -1
- package/dist/dialogs/contributor.d.ts +13 -0
- package/dist/dialogs/contributor.d.ts.map +1 -0
- package/dist/dialogs/contributor.js +17 -20
- package/dist/dialogs/contributor.js.map +1 -1
- package/dist/dialogs/figure.d.ts +51 -0
- package/dist/dialogs/figure.d.ts.map +1 -0
- package/dist/dialogs/figure.js +123 -81
- package/dist/dialogs/figure.js.map +1 -1
- package/dist/dialogs/index.d.ts +11 -0
- package/dist/dialogs/index.d.ts.map +1 -0
- package/dist/dialogs/index.js.map +1 -1
- package/dist/dialogs/language.d.ts +10 -0
- package/dist/dialogs/language.d.ts.map +1 -0
- package/dist/dialogs/language.js +4 -1
- package/dist/dialogs/language.js.map +1 -1
- package/dist/dialogs/link.d.ts +30 -0
- package/dist/dialogs/link.d.ts.map +1 -0
- package/dist/dialogs/link.js +27 -15
- package/dist/dialogs/link.js.map +1 -1
- package/dist/dialogs/math.d.ts +22 -0
- package/dist/dialogs/math.d.ts.map +1 -0
- package/dist/dialogs/math.js +27 -14
- package/dist/dialogs/math.js.map +1 -1
- package/dist/dialogs/ordered_list.d.ts +22 -0
- package/dist/dialogs/ordered_list.d.ts.map +1 -0
- package/dist/dialogs/ordered_list.js +12 -5
- package/dist/dialogs/ordered_list.js.map +1 -1
- package/dist/dialogs/revision.d.ts +8 -0
- package/dist/dialogs/revision.d.ts.map +1 -0
- package/dist/dialogs/revision.js +2 -0
- package/dist/dialogs/revision.js.map +1 -1
- package/dist/dialogs/subsup.d.ts +5 -0
- package/dist/dialogs/subsup.d.ts.map +1 -0
- package/dist/dialogs/subsup.js +3 -3
- package/dist/dialogs/subsup.js.map +1 -1
- package/dist/dialogs/table.d.ts +33 -0
- package/dist/dialogs/table.d.ts.map +1 -0
- package/dist/dialogs/table.js +43 -21
- package/dist/dialogs/table.js.map +1 -1
- package/dist/dialogs/templates.d.ts +85 -0
- package/dist/dialogs/templates.d.ts.map +1 -0
- package/dist/dialogs/templates.js +8 -8
- package/dist/dialogs/templates.js.map +1 -1
- package/dist/document_template/exporter.d.ts +23 -0
- package/dist/document_template/exporter.d.ts.map +1 -0
- package/dist/document_template/exporter.js +14 -5
- package/dist/document_template/exporter.js.map +1 -1
- package/dist/document_template/index.d.ts +35 -0
- package/dist/document_template/index.d.ts.map +1 -0
- package/dist/document_template/index.js +61 -53
- package/dist/document_template/index.js.map +1 -1
- package/dist/document_template/schema.d.ts +13 -0
- package/dist/document_template/schema.d.ts.map +1 -0
- package/dist/document_template/schema.js +2 -2
- package/dist/document_template/schema.js.map +1 -1
- package/dist/documents/access_rights/index.d.ts +85 -0
- package/dist/documents/access_rights/index.d.ts.map +1 -0
- package/dist/documents/access_rights/index.js +96 -60
- package/dist/documents/access_rights/index.js.map +1 -1
- package/dist/documents/access_rights/templates.d.ts +47 -0
- package/dist/documents/access_rights/templates.d.ts.map +1 -0
- package/dist/documents/access_rights/templates.js.map +1 -1
- package/dist/e2ee/snapshot-manager.d.ts +120 -0
- package/dist/e2ee/snapshot-manager.d.ts.map +1 -0
- package/dist/e2ee/snapshot-manager.js +27 -38
- package/dist/e2ee/snapshot-manager.js.map +1 -1
- package/dist/exporter/native/copy.d.ts +16 -0
- package/dist/exporter/native/copy.d.ts.map +1 -0
- package/dist/exporter/native/copy.js +51 -35
- package/dist/exporter/native/copy.js.map +1 -1
- package/dist/exporter/native/file.d.ts +6 -0
- package/dist/exporter/native/file.d.ts.map +1 -0
- package/dist/exporter/native/file.js +1 -1
- package/dist/exporter/native/file.js.map +1 -1
- package/dist/exporter/native/index.d.ts +4 -0
- package/dist/exporter/native/index.d.ts.map +1 -0
- package/dist/exporter/native/index.js.map +1 -1
- package/dist/exporter/native/revision.d.ts +8 -0
- package/dist/exporter/native/revision.d.ts.map +1 -0
- package/dist/exporter/native/revision.js +2 -2
- package/dist/exporter/native/revision.js.map +1 -1
- package/dist/exporter/native/zip.d.ts +2 -0
- package/dist/exporter/native/zip.d.ts.map +1 -0
- package/dist/exporter/native/zip.js.map +1 -1
- package/dist/footnotes/editor.d.ts +25 -0
- package/dist/footnotes/editor.d.ts.map +1 -0
- package/dist/footnotes/editor.js +5 -3
- package/dist/footnotes/editor.js.map +1 -1
- package/dist/footnotes/index.d.ts +11 -0
- package/dist/footnotes/index.d.ts.map +1 -0
- package/dist/footnotes/index.js +5 -2
- package/dist/footnotes/index.js.map +1 -1
- package/dist/footnotes/layout.d.ts +15 -0
- package/dist/footnotes/layout.d.ts.map +1 -0
- package/dist/footnotes/layout.js +26 -17
- package/dist/footnotes/layout.js.map +1 -1
- package/dist/footnotes/state_plugins/access_rights.d.ts +6 -0
- package/dist/footnotes/state_plugins/access_rights.d.ts.map +1 -0
- package/dist/footnotes/state_plugins/access_rights.js +1 -1
- package/dist/footnotes/state_plugins/access_rights.js.map +1 -1
- package/dist/footnotes/state_plugins/index.d.ts +2 -0
- package/dist/footnotes/state_plugins/index.d.ts.map +1 -0
- package/dist/footnotes/state_plugins/index.js.map +1 -1
- package/dist/images/edit_dialog/model.d.ts +4 -0
- package/dist/images/edit_dialog/model.d.ts.map +1 -0
- package/dist/images/edit_dialog/model.js.map +1 -1
- package/dist/index.d.ts +74 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +88 -60
- package/dist/index.js.map +1 -1
- package/dist/keymap.d.ts +5 -0
- package/dist/keymap.d.ts.map +1 -0
- package/dist/keymap.js +1 -1
- package/dist/keymap.js.map +1 -1
- package/dist/marginboxes/index.d.ts +107 -0
- package/dist/marginboxes/index.d.ts.map +1 -0
- package/dist/marginboxes/index.js +165 -88
- package/dist/marginboxes/index.js.map +1 -1
- package/dist/marginboxes/templates.d.ts +118 -0
- package/dist/marginboxes/templates.d.ts.map +1 -0
- package/dist/marginboxes/templates.js +25 -24
- package/dist/marginboxes/templates.js.map +1 -1
- package/dist/menus/code_block/index.d.ts +2 -0
- package/dist/menus/code_block/index.d.ts.map +1 -0
- package/dist/menus/code_block/index.js.map +1 -1
- package/dist/menus/code_block/model.d.ts +14 -0
- package/dist/menus/code_block/model.d.ts.map +1 -0
- package/dist/menus/code_block/model.js +5 -4
- package/dist/menus/code_block/model.js.map +1 -1
- package/dist/menus/figure/index.d.ts +3 -0
- package/dist/menus/figure/index.d.ts.map +1 -0
- package/dist/menus/figure/index.js.map +1 -1
- package/dist/menus/figure/model.d.ts +32 -0
- package/dist/menus/figure/model.d.ts.map +1 -0
- package/dist/menus/figure/model.js +11 -12
- package/dist/menus/figure/model.js.map +1 -1
- package/dist/menus/figure/utils.d.ts +3 -0
- package/dist/menus/figure/utils.d.ts.map +1 -0
- package/dist/menus/figure/utils.js +4 -1
- package/dist/menus/figure/utils.js.map +1 -1
- package/dist/menus/headerbar/index.d.ts +3 -0
- package/dist/menus/headerbar/index.d.ts.map +1 -0
- package/dist/menus/headerbar/index.js.map +1 -1
- package/dist/menus/headerbar/model.d.ts +192 -0
- package/dist/menus/headerbar/model.d.ts.map +1 -0
- package/dist/menus/headerbar/model.js +141 -110
- package/dist/menus/headerbar/model.js.map +1 -1
- package/dist/menus/headerbar/view.d.ts +89 -0
- package/dist/menus/headerbar/view.d.ts.map +1 -0
- package/dist/menus/headerbar/view.js +76 -45
- package/dist/menus/headerbar/view.js.map +1 -1
- package/dist/menus/image/index.d.ts +2 -0
- package/dist/menus/image/index.d.ts.map +1 -0
- package/dist/menus/image/index.js.map +1 -1
- package/dist/menus/image/model.d.ts +18 -0
- package/dist/menus/image/model.d.ts.map +1 -0
- package/dist/menus/image/model.js +2 -2
- package/dist/menus/image/model.js.map +1 -1
- package/dist/menus/index.d.ts +10 -0
- package/dist/menus/index.d.ts.map +1 -0
- package/dist/menus/index.js.map +1 -1
- package/dist/menus/navigator/index.d.ts +2 -0
- package/dist/menus/navigator/index.d.ts.map +1 -0
- package/dist/menus/navigator/index.js.map +1 -1
- package/dist/menus/navigator/model.d.ts +9 -0
- package/dist/menus/navigator/model.d.ts.map +1 -0
- package/dist/menus/navigator/model.js.map +1 -1
- package/dist/menus/ordered_list/index.d.ts +2 -0
- package/dist/menus/ordered_list/index.d.ts.map +1 -0
- package/dist/menus/ordered_list/index.js.map +1 -1
- package/dist/menus/ordered_list/model.d.ts +11 -0
- package/dist/menus/ordered_list/model.d.ts.map +1 -0
- package/dist/menus/ordered_list/model.js +1 -1
- package/dist/menus/ordered_list/model.js.map +1 -1
- package/dist/menus/selection/index.d.ts +3 -0
- package/dist/menus/selection/index.d.ts.map +1 -0
- package/dist/menus/selection/index.js.map +1 -1
- package/dist/menus/selection/model.d.ts +16 -0
- package/dist/menus/selection/model.d.ts.map +1 -0
- package/dist/menus/selection/model.js +18 -16
- package/dist/menus/selection/model.js.map +1 -1
- package/dist/menus/selection/view.d.ts +49 -0
- package/dist/menus/selection/view.d.ts.map +1 -0
- package/dist/menus/selection/view.js +33 -18
- package/dist/menus/selection/view.js.map +1 -1
- package/dist/menus/table/index.d.ts +2 -0
- package/dist/menus/table/index.d.ts.map +1 -0
- package/dist/menus/table/index.js.map +1 -1
- package/dist/menus/table/model.d.ts +39 -0
- package/dist/menus/table/model.d.ts.map +1 -0
- package/dist/menus/table/model.js +53 -50
- package/dist/menus/table/model.js.map +1 -1
- package/dist/menus/toolbar/index.d.ts +3 -0
- package/dist/menus/toolbar/index.d.ts.map +1 -0
- package/dist/menus/toolbar/index.js.map +1 -1
- package/dist/menus/toolbar/model.d.ts +125 -0
- package/dist/menus/toolbar/model.d.ts.map +1 -0
- package/dist/menus/toolbar/model.js +160 -140
- package/dist/menus/toolbar/model.js.map +1 -1
- package/dist/menus/toolbar/view.d.ts +72 -0
- package/dist/menus/toolbar/view.d.ts.map +1 -0
- package/dist/menus/toolbar/view.js +61 -36
- package/dist/menus/toolbar/view.js.map +1 -1
- package/dist/navigator/index.d.ts +38 -0
- package/dist/navigator/index.d.ts.map +1 -0
- package/dist/navigator/index.js +42 -21
- package/dist/navigator/index.js.map +1 -1
- package/dist/no_collab_save/index.d.ts +20 -0
- package/dist/no_collab_save/index.d.ts.map +1 -0
- package/dist/no_collab_save/index.js +20 -11
- package/dist/no_collab_save/index.js.map +1 -1
- package/dist/plugins/citation_dialog/index.d.ts +2 -0
- package/dist/plugins/citation_dialog/index.d.ts.map +1 -0
- package/dist/plugins/citation_dialog/index.js.map +1 -1
- package/dist/plugins/editor/index.d.ts +2 -0
- package/dist/plugins/editor/index.d.ts.map +1 -0
- package/dist/plugins/editor/index.js.map +1 -1
- package/dist/state_plugins/access_rights.d.ts +6 -0
- package/dist/state_plugins/access_rights.d.ts.map +1 -0
- package/dist/state_plugins/access_rights.js +5 -3
- package/dist/state_plugins/access_rights.js.map +1 -1
- package/dist/state_plugins/citation_render.d.ts +9 -0
- package/dist/state_plugins/citation_render.d.ts.map +1 -0
- package/dist/state_plugins/citation_render.js +12 -43
- package/dist/state_plugins/citation_render.js.map +1 -1
- package/dist/state_plugins/clipboard.d.ts +12 -0
- package/dist/state_plugins/clipboard.d.ts.map +1 -0
- package/dist/state_plugins/clipboard.js +13 -11
- package/dist/state_plugins/clipboard.js.map +1 -1
- package/dist/state_plugins/code_block.d.ts +6 -0
- package/dist/state_plugins/code_block.d.ts.map +1 -0
- package/dist/state_plugins/code_block.js +23 -9
- package/dist/state_plugins/code_block.js.map +1 -1
- package/dist/state_plugins/collab_carets.d.ts +26 -0
- package/dist/state_plugins/collab_carets.d.ts.map +1 -0
- package/dist/state_plugins/collab_carets.js +24 -16
- package/dist/state_plugins/collab_carets.js.map +1 -1
- package/dist/state_plugins/comments.d.ts +15 -0
- package/dist/state_plugins/comments.d.ts.map +1 -0
- package/dist/state_plugins/comments.js +26 -21
- package/dist/state_plugins/comments.js.map +1 -1
- package/dist/state_plugins/contributor_input/dropup.d.ts +17 -0
- package/dist/state_plugins/contributor_input/dropup.d.ts.map +1 -0
- package/dist/state_plugins/contributor_input/dropup.js +19 -20
- package/dist/state_plugins/contributor_input/dropup.js.map +1 -1
- package/dist/state_plugins/contributor_input/index.d.ts +3 -0
- package/dist/state_plugins/contributor_input/index.d.ts.map +1 -0
- package/dist/state_plugins/contributor_input/index.js.map +1 -1
- package/dist/state_plugins/contributor_input/node_view.d.ts +7 -0
- package/dist/state_plugins/contributor_input/node_view.d.ts.map +1 -0
- package/dist/state_plugins/contributor_input/node_view.js.map +1 -1
- package/dist/state_plugins/contributor_input/plugin.d.ts +19 -0
- package/dist/state_plugins/contributor_input/plugin.d.ts.map +1 -0
- package/dist/state_plugins/contributor_input/plugin.js +14 -45
- package/dist/state_plugins/contributor_input/plugin.js.map +1 -1
- package/dist/state_plugins/document_template.d.ts +33 -0
- package/dist/state_plugins/document_template.d.ts.map +1 -0
- package/dist/state_plugins/document_template.js +34 -15
- package/dist/state_plugins/document_template.js.map +1 -1
- package/dist/state_plugins/figure.d.ts +6 -0
- package/dist/state_plugins/figure.d.ts.map +1 -0
- package/dist/state_plugins/figure.js +26 -8
- package/dist/state_plugins/figure.js.map +1 -1
- package/dist/state_plugins/footnote_markers.d.ts +15 -0
- package/dist/state_plugins/footnote_markers.d.ts.map +1 -0
- package/dist/state_plugins/footnote_markers.js +72 -153
- package/dist/state_plugins/footnote_markers.js.map +1 -1
- package/dist/state_plugins/headerbar.d.ts +6 -0
- package/dist/state_plugins/headerbar.d.ts.map +1 -0
- package/dist/state_plugins/headerbar.js +1 -1
- package/dist/state_plugins/headerbar.js.map +1 -1
- package/dist/state_plugins/index.d.ts +28 -0
- package/dist/state_plugins/index.d.ts.map +1 -0
- package/dist/state_plugins/index.js +13 -12
- package/dist/state_plugins/index.js.map +1 -1
- package/dist/state_plugins/inline_math.d.ts +6 -0
- package/dist/state_plugins/inline_math.d.ts.map +1 -0
- package/dist/state_plugins/inline_math.js +28 -19
- package/dist/state_plugins/inline_math.js.map +1 -1
- package/dist/state_plugins/inline_reference/dropup.d.ts +62 -0
- package/dist/state_plugins/inline_reference/dropup.d.ts.map +1 -0
- package/dist/state_plugins/inline_reference/dropup.js +17 -17
- package/dist/state_plugins/inline_reference/dropup.js.map +1 -1
- package/dist/state_plugins/inline_reference/index.d.ts +2 -0
- package/dist/state_plugins/inline_reference/index.d.ts.map +1 -0
- package/dist/state_plugins/inline_reference/index.js.map +1 -1
- package/dist/state_plugins/inline_reference/plugin.d.ts +35 -0
- package/dist/state_plugins/inline_reference/plugin.d.ts.map +1 -0
- package/dist/state_plugins/inline_reference/plugin.js +68 -55
- package/dist/state_plugins/inline_reference/plugin.js.map +1 -1
- package/dist/state_plugins/jump_hidden_nodes.d.ts +5 -0
- package/dist/state_plugins/jump_hidden_nodes.d.ts.map +1 -0
- package/dist/state_plugins/jump_hidden_nodes.js +35 -22
- package/dist/state_plugins/jump_hidden_nodes.js.map +1 -1
- package/dist/state_plugins/links.d.ts +11 -0
- package/dist/state_plugins/links.d.ts.map +1 -0
- package/dist/state_plugins/links.js +39 -25
- package/dist/state_plugins/links.js.map +1 -1
- package/dist/state_plugins/marginboxes.d.ts +6 -0
- package/dist/state_plugins/marginboxes.d.ts.map +1 -0
- package/dist/state_plugins/marginboxes.js +2 -1
- package/dist/state_plugins/marginboxes.js.map +1 -1
- package/dist/state_plugins/ordered_list_menu.d.ts +6 -0
- package/dist/state_plugins/ordered_list_menu.d.ts.map +1 -0
- package/dist/state_plugins/ordered_list_menu.js +20 -6
- package/dist/state_plugins/ordered_list_menu.js.map +1 -1
- package/dist/state_plugins/placeholders.d.ts +6 -0
- package/dist/state_plugins/placeholders.d.ts.map +1 -0
- package/dist/state_plugins/placeholders.js +18 -54
- package/dist/state_plugins/placeholders.js.map +1 -1
- package/dist/state_plugins/search.d.ts +34 -0
- package/dist/state_plugins/search.d.ts.map +1 -0
- package/dist/state_plugins/search.js +31 -27
- package/dist/state_plugins/search.js.map +1 -1
- package/dist/state_plugins/selection_menu.d.ts +6 -0
- package/dist/state_plugins/selection_menu.d.ts.map +1 -0
- package/dist/state_plugins/selection_menu.js +1 -1
- package/dist/state_plugins/selection_menu.js.map +1 -1
- package/dist/state_plugins/settings.d.ts +8 -0
- package/dist/state_plugins/settings.d.ts.map +1 -0
- package/dist/state_plugins/settings.js +31 -21
- package/dist/state_plugins/settings.js.map +1 -1
- package/dist/state_plugins/table.d.ts +6 -0
- package/dist/state_plugins/table.d.ts.map +1 -0
- package/dist/state_plugins/table.js +33 -13
- package/dist/state_plugins/table.js.map +1 -1
- package/dist/state_plugins/tag_input/index.d.ts +3 -0
- package/dist/state_plugins/tag_input/index.d.ts.map +1 -0
- package/dist/state_plugins/tag_input/index.js.map +1 -1
- package/dist/state_plugins/tag_input/node_view.d.ts +7 -0
- package/dist/state_plugins/tag_input/node_view.d.ts.map +1 -0
- package/dist/state_plugins/tag_input/node_view.js.map +1 -1
- package/dist/state_plugins/tag_input/plugin.d.ts +14 -0
- package/dist/state_plugins/tag_input/plugin.d.ts.map +1 -0
- package/dist/state_plugins/tag_input/plugin.js +7 -6
- package/dist/state_plugins/tag_input/plugin.js.map +1 -1
- package/dist/state_plugins/toc_render.d.ts +6 -0
- package/dist/state_plugins/toc_render.d.ts.map +1 -0
- package/dist/state_plugins/toc_render.js +59 -96
- package/dist/state_plugins/toc_render.js.map +1 -1
- package/dist/state_plugins/toolbar.d.ts +6 -0
- package/dist/state_plugins/toolbar.d.ts.map +1 -0
- package/dist/state_plugins/toolbar.js +1 -1
- package/dist/state_plugins/toolbar.js.map +1 -1
- package/dist/state_plugins/track/find_selected_changes.d.ts +13 -0
- package/dist/state_plugins/track/find_selected_changes.d.ts.map +1 -0
- package/dist/state_plugins/track/find_selected_changes.js +4 -3
- package/dist/state_plugins/track/find_selected_changes.js.map +1 -1
- package/dist/state_plugins/track/helpers.d.ts +29 -0
- package/dist/state_plugins/track/helpers.d.ts.map +1 -0
- package/dist/state_plugins/track/helpers.js +9 -3
- package/dist/state_plugins/track/helpers.js.map +1 -1
- package/dist/state_plugins/track/index.d.ts +3 -0
- package/dist/state_plugins/track/index.d.ts.map +1 -0
- package/dist/state_plugins/track/index.js.map +1 -1
- package/dist/state_plugins/track/plugin.d.ts +14 -0
- package/dist/state_plugins/track/plugin.d.ts.map +1 -0
- package/dist/state_plugins/track/plugin.js +10 -6
- package/dist/state_plugins/track/plugin.js.map +1 -1
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/key_bindings/index.d.ts +7 -0
- package/dist/tools/key_bindings/index.d.ts.map +1 -0
- package/dist/tools/key_bindings/index.js +1 -3
- package/dist/tools/key_bindings/index.js.map +1 -1
- package/dist/tools/key_bindings/templates.d.ts +2 -0
- package/dist/tools/key_bindings/templates.d.ts.map +1 -0
- package/dist/tools/key_bindings/templates.js.map +1 -1
- package/dist/tools/search_replace/index.d.ts +28 -0
- package/dist/tools/search_replace/index.d.ts.map +1 -0
- package/dist/tools/search_replace/index.js +53 -27
- package/dist/tools/search_replace/index.js.map +1 -1
- package/dist/tools/search_replace/templates.d.ts +6 -0
- package/dist/tools/search_replace/templates.d.ts.map +1 -0
- package/dist/tools/search_replace/templates.js.map +1 -1
- package/dist/tools/word_count/index.d.ts +15 -0
- package/dist/tools/word_count/index.d.ts.map +1 -0
- package/dist/tools/word_count/index.js +2 -1
- package/dist/tools/word_count/index.js.map +1 -1
- package/dist/tools/word_count/templates.d.ts +11 -0
- package/dist/tools/word_count/templates.d.ts.map +1 -0
- package/dist/tools/word_count/templates.js.map +1 -1
- package/dist/track/accept.d.ts +3 -0
- package/dist/track/accept.d.ts.map +1 -0
- package/dist/track/accept.js +10 -5
- package/dist/track/accept.js.map +1 -1
- package/dist/track/accept_all.d.ts +3 -0
- package/dist/track/accept_all.d.ts.map +1 -0
- package/dist/track/accept_all.js +2 -2
- package/dist/track/accept_all.js.map +1 -1
- package/dist/track/accept_all_no_insertions.d.ts +3 -0
- package/dist/track/accept_all_no_insertions.d.ts.map +1 -0
- package/dist/track/accept_all_no_insertions.js +2 -2
- package/dist/track/accept_all_no_insertions.js.map +1 -1
- package/dist/track/amend_transaction.d.ts +5 -0
- package/dist/track/amend_transaction.d.ts.map +1 -0
- package/dist/track/amend_transaction.js +55 -32
- package/dist/track/amend_transaction.js.map +1 -1
- package/dist/track/delete.d.ts +3 -0
- package/dist/track/delete.d.ts.map +1 -0
- package/dist/track/delete.js +4 -3
- package/dist/track/delete.js.map +1 -1
- package/dist/track/index.d.ts +6 -0
- package/dist/track/index.d.ts.map +1 -0
- package/dist/track/index.js.map +1 -1
- package/dist/track/mod.d.ts +10 -0
- package/dist/track/mod.d.ts.map +1 -0
- package/dist/track/mod.js +9 -5
- package/dist/track/mod.js.map +1 -1
- package/dist/track/reject.d.ts +3 -0
- package/dist/track/reject.d.ts.map +1 -0
- package/dist/track/reject.js +14 -5
- package/dist/track/reject.js.map +1 -1
- package/dist/track/reject_all.d.ts +3 -0
- package/dist/track/reject_all.d.ts.map +1 -0
- package/dist/track/reject_all.js +6 -2
- package/dist/track/reject_all.js.map +1 -1
- package/dist/types.d.ts +182 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +17 -0
- package/dist/types.js.map +1 -0
- package/package.json +38 -3
- package/src/bibliography/{tools.js → tools.ts} +16 -5
- package/src/citations/{index.js → index.ts} +100 -80
- package/src/citations/{render.js → render.ts} +43 -15
- package/src/clipboard/copy/{schema.js → schema.ts} +19 -8
- package/src/clipboard/copy/{serializers.js → serializers.ts} +44 -32
- package/src/clipboard/paste/{fidus_writer.js → fidus_writer.ts} +28 -8
- package/src/clipboard/paste/{general.js → general.ts} +28 -13
- package/src/clipboard/paste/{google_docs.js → google_docs.ts} +7 -4
- package/src/clipboard/paste/{html.js → html.ts} +35 -8
- package/src/clipboard/paste/{libreoffice_writer.js → libreoffice_writer.ts} +4 -4
- package/src/clipboard/paste/{microsoft_word.js → microsoft_word.ts} +22 -21
- package/src/clipboard/paste/{text.js → text.ts} +11 -7
- package/src/collab/{chat.js → chat.ts} +78 -27
- package/src/collab/{colors.js → colors.ts} +21 -5
- package/src/collab/{doc.js → doc.ts} +290 -184
- package/src/collab/{index.js → index.ts} +47 -13
- package/src/collab/merge/{changeset.js → changeset.ts} +33 -20
- package/src/collab/merge/{editor.js → editor.ts} +211 -107
- package/src/collab/merge/{footnotes.js → footnotes.ts} +43 -22
- package/src/collab/merge/{index.js → index.ts} +147 -70
- package/src/collab/merge/{recreate_transform.js → recreate_transform.ts} +60 -29
- package/src/collab/merge/{schema.js → schema.ts} +55 -35
- package/src/collab/merge/state_plugins/{action.js → action.ts} +65 -27
- package/src/collab/merge/state_plugins/{clipboard.js → clipboard.ts} +13 -3
- package/src/collab/merge/state_plugins/{diff.js → diff.ts} +279 -168
- package/src/collab/merge/{tools.js → tools.ts} +57 -27
- package/src/collab/{templates.js → templates.ts} +17 -2
- package/src/comments/{comment.js → comment.ts} +26 -0
- package/src/comments/editors/{answer.js → answer.ts} +27 -12
- package/src/comments/editors/{comment.js → comment.ts} +112 -36
- package/src/comments/editors/{notify.js → notify.ts} +6 -1
- package/src/comments/editors/{schema.js → schema.ts} +9 -8
- package/src/comments/index.ts +16 -0
- package/src/comments/{interactions.js → interactions.ts} +150 -89
- package/src/comments/{store.js → store.ts} +149 -73
- package/src/contacts/{add_dialog.js → add_dialog.ts} +50 -37
- package/src/contacts/{templates.js → templates.ts} +9 -3
- package/src/copyright_dialog/{index.js → index.ts} +92 -57
- package/src/copyright_dialog/{templates.js → templates.ts} +18 -3
- package/src/databases/{bibliography.js → bibliography.ts} +62 -36
- package/src/databases/{images.js → images.ts} +146 -96
- package/src/databases/index.ts +116 -0
- package/src/dialogs/{citation.js → citation.ts} +191 -107
- package/src/dialogs/{code_block.js → code_block.ts} +75 -33
- package/src/dialogs/{contributor.js → contributor.ts} +74 -49
- package/src/dialogs/{figure.js → figure.ts} +250 -149
- package/src/dialogs/{language.js → language.ts} +11 -6
- package/src/dialogs/{link.js → link.ts} +105 -60
- package/src/dialogs/{math.js → math.ts} +56 -28
- package/src/dialogs/{ordered_list.js → ordered_list.ts} +25 -12
- package/src/dialogs/{revision.js → revision.ts} +13 -9
- package/src/dialogs/{subsup.js → subsup.ts} +9 -7
- package/src/dialogs/{table.js → table.ts} +129 -70
- package/src/dialogs/{templates.js → templates.ts} +102 -22
- package/src/document_template/exporter.ts +158 -0
- package/src/document_template/{index.js → index.ts} +158 -117
- package/src/document_template/{schema.js → schema.ts} +31 -28
- package/src/documents/access_rights/{index.js → index.ts} +240 -123
- package/src/documents/access_rights/{templates.js → templates.ts} +41 -5
- package/src/e2ee/{snapshot-manager.js → snapshot-manager.ts} +80 -49
- package/src/exporter/native/copy.ts +302 -0
- package/src/exporter/native/{file.js → file.ts} +12 -5
- package/src/exporter/native/{revision.js → revision.ts} +17 -9
- package/src/footnotes/{editor.js → editor.ts} +37 -18
- package/src/footnotes/index.ts +21 -0
- package/src/footnotes/{layout.js → layout.ts} +53 -36
- package/src/footnotes/state_plugins/{access_rights.js → access_rights.ts} +6 -4
- package/src/global.d.ts +29 -0
- package/src/images/edit_dialog/{model.js → model.ts} +1 -1
- package/src/{index.js → index.ts} +194 -132
- package/src/{keymap.js → keymap.ts} +36 -16
- package/src/marginboxes/{index.js → index.ts} +341 -171
- package/src/marginboxes/{templates.js → templates.ts} +236 -38
- package/src/menus/code_block/{model.js → model.ts} +16 -5
- package/src/menus/figure/{model.js → model.ts} +21 -16
- package/src/menus/figure/utils.ts +13 -0
- package/src/menus/headerbar/{model.js → model.ts} +243 -153
- package/src/menus/headerbar/{view.js → view.ts} +189 -92
- package/src/menus/image/{model.js → model.ts} +13 -4
- package/src/menus/navigator/{model.js → model.ts} +6 -1
- package/src/menus/ordered_list/{model.js → model.ts} +2 -1
- package/src/menus/selection/{model.js → model.ts} +38 -20
- package/src/menus/selection/{view.js → view.ts} +88 -35
- package/src/menus/table/{model.js → model.ts} +84 -63
- package/src/menus/toolbar/{model.js → model.ts} +267 -215
- package/src/menus/toolbar/{view.js → view.ts} +135 -65
- package/src/modules.d.ts +84 -0
- package/src/navigator/{index.js → index.ts} +90 -56
- package/src/no_collab_save/{index.js → index.ts} +54 -31
- package/src/state_plugins/{access_rights.js → access_rights.ts} +12 -7
- package/src/state_plugins/citation_render.ts +63 -0
- package/src/state_plugins/{clipboard.js → clipboard.ts} +38 -23
- package/src/state_plugins/{code_block.js → code_block.ts} +62 -28
- package/src/state_plugins/{collab_carets.js → collab_carets.ts} +56 -25
- package/src/state_plugins/{comments.js → comments.ts} +70 -40
- package/src/state_plugins/contributor_input/{dropup.js → dropup.ts} +70 -38
- package/src/state_plugins/contributor_input/{node_view.js → node_view.ts} +13 -4
- package/src/state_plugins/contributor_input/{plugin.js → plugin.ts} +74 -75
- package/src/state_plugins/{document_template.js → document_template.ts} +108 -49
- package/src/state_plugins/{figure.js → figure.ts} +61 -23
- package/src/state_plugins/footnote_markers.ts +142 -0
- package/src/state_plugins/{headerbar.js → headerbar.ts} +4 -2
- package/src/state_plugins/{index.js → index.ts} +23 -56
- package/src/state_plugins/{inline_math.js → inline_math.ts} +151 -65
- package/src/state_plugins/inline_reference/{dropup.js → dropup.ts} +68 -34
- package/src/state_plugins/inline_reference/{plugin.js → plugin.ts} +221 -101
- package/src/state_plugins/jump_hidden_nodes.ts +67 -0
- package/src/state_plugins/{links.js → links.ts} +153 -99
- package/src/state_plugins/marginboxes.ts +17 -0
- package/src/state_plugins/{ordered_list_menu.js → ordered_list_menu.ts} +43 -17
- package/src/state_plugins/placeholders.ts +78 -0
- package/src/state_plugins/{search.js → search.ts} +110 -48
- package/src/state_plugins/{selection_menu.js → selection_menu.ts} +4 -2
- package/src/state_plugins/{settings.js → settings.ts} +68 -39
- package/src/state_plugins/table.ts +169 -0
- package/src/state_plugins/tag_input/{node_view.js → node_view.ts} +12 -3
- package/src/state_plugins/tag_input/plugin.ts +292 -0
- package/src/state_plugins/toc_render.ts +133 -0
- package/src/state_plugins/{toolbar.js → toolbar.ts} +4 -2
- package/src/state_plugins/track/{find_selected_changes.js → find_selected_changes.ts} +34 -19
- package/src/state_plugins/track/{helpers.js → helpers.ts} +36 -10
- package/src/state_plugins/track/{plugin.js → plugin.ts} +38 -14
- package/src/tools/key_bindings/{index.js → index.ts} +7 -3
- package/src/tools/key_bindings/{templates.js → templates.ts} +1 -1
- package/src/tools/search_replace/{index.js → index.ts} +115 -69
- package/src/tools/search_replace/{templates.js → templates.ts} +6 -1
- package/src/tools/word_count/{index.js → index.ts} +16 -6
- package/src/tools/word_count/{templates.js → templates.ts} +10 -1
- package/src/track/{accept.js → accept.ts} +20 -9
- package/src/track/{accept_all.js → accept_all.ts} +27 -17
- package/src/track/{accept_all_no_insertions.js → accept_all_no_insertions.ts} +16 -10
- package/src/track/{amend_transaction.js → amend_transaction.ts} +130 -70
- package/src/track/{delete.js → delete.ts} +15 -12
- package/src/track/{mod.js → mod.ts} +51 -32
- package/src/track/{reject.js → reject.ts} +34 -19
- package/src/track/{reject_all.js → reject_all.ts} +44 -24
- package/src/types.ts +214 -0
- package/src/comments/index.js +0 -11
- package/src/databases/index.js +0 -69
- package/src/document_template/exporter.js +0 -97
- package/src/exporter/native/copy.js +0 -191
- package/src/footnotes/index.js +0 -16
- package/src/menus/figure/utils.js +0 -5
- package/src/state_plugins/citation_render.js +0 -88
- package/src/state_plugins/footnote_markers.js +0 -238
- package/src/state_plugins/jump_hidden_nodes.js +0 -58
- package/src/state_plugins/marginboxes.js +0 -14
- package/src/state_plugins/placeholders.js +0 -123
- package/src/state_plugins/table.js +0 -127
- package/src/state_plugins/tag_input/plugin.js +0 -278
- package/src/state_plugins/toc_render.js +0 -160
- /package/src/clipboard/copy/{index.js → index.ts} +0 -0
- /package/src/clipboard/paste/{index.js → index.ts} +0 -0
- /package/src/collab/merge/state_plugins/{index.js → index.ts} +0 -0
- /package/src/comments/editors/{index.js → index.ts} +0 -0
- /package/src/dialogs/{index.js → index.ts} +0 -0
- /package/src/exporter/native/{index.js → index.ts} +0 -0
- /package/src/exporter/native/{zip.js → zip.ts} +0 -0
- /package/src/footnotes/state_plugins/{index.js → index.ts} +0 -0
- /package/src/menus/code_block/{index.js → index.ts} +0 -0
- /package/src/menus/figure/{index.js → index.ts} +0 -0
- /package/src/menus/headerbar/{index.js → index.ts} +0 -0
- /package/src/menus/image/{index.js → index.ts} +0 -0
- /package/src/menus/{index.js → index.ts} +0 -0
- /package/src/menus/navigator/{index.js → index.ts} +0 -0
- /package/src/menus/ordered_list/{index.js → index.ts} +0 -0
- /package/src/menus/selection/{index.js → index.ts} +0 -0
- /package/src/menus/table/{index.js → index.ts} +0 -0
- /package/src/menus/toolbar/{index.js → index.ts} +0 -0
- /package/src/plugins/citation_dialog/{index.js → index.ts} +0 -0
- /package/src/plugins/editor/{index.js → index.ts} +0 -0
- /package/src/state_plugins/contributor_input/{index.js → index.ts} +0 -0
- /package/src/state_plugins/inline_reference/{index.js → index.ts} +0 -0
- /package/src/state_plugins/tag_input/{index.js → index.ts} +0 -0
- /package/src/state_plugins/track/{index.js → index.ts} +0 -0
- /package/src/tools/{index.js → index.ts} +0 -0
- /package/src/track/{index.js → index.ts} +0 -0
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
import {avatarTemplate, escapeText} from "fwtoolkit"
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
interface Contact {
|
|
4
|
+
id: number | string
|
|
5
|
+
type: string
|
|
6
|
+
name: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface CollaboratorHolder {
|
|
10
|
+
id: number | string
|
|
11
|
+
type: string
|
|
12
|
+
name: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface Collaborator {
|
|
16
|
+
holder: CollaboratorHolder
|
|
17
|
+
rights: string
|
|
18
|
+
count?: number
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface ShareToken {
|
|
22
|
+
id: number | string
|
|
23
|
+
expires_at?: string
|
|
24
|
+
note?: string
|
|
25
|
+
rights: string
|
|
26
|
+
share_url: string
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const peopleTabTemplate = ({
|
|
30
|
+
contacts,
|
|
31
|
+
collaborators
|
|
32
|
+
}: {
|
|
33
|
+
contacts: Contact[]
|
|
34
|
+
collaborators: Collaborator[]
|
|
35
|
+
}) =>
|
|
4
36
|
`<div id="my-contacts" class="fw-ar-container">
|
|
5
37
|
<h3 class="fw-green-title">${gettext("My contacts")}</h3>
|
|
6
38
|
<table class="fw-data-table">
|
|
@@ -36,7 +68,7 @@ export const shareLinkTabTemplate = () =>
|
|
|
36
68
|
</button>`
|
|
37
69
|
|
|
38
70
|
/** The list of active share-link tokens for a single document */
|
|
39
|
-
export const shareTokenListTemplate = ({tokens}) => {
|
|
71
|
+
export const shareTokenListTemplate = ({tokens}: {tokens: ShareToken[]}) => {
|
|
40
72
|
if (!tokens.length) {
|
|
41
73
|
return `<p class="fw-ar-no-tokens">${gettext("No active share links yet.")}</p>`
|
|
42
74
|
}
|
|
@@ -44,7 +76,7 @@ export const shareTokenListTemplate = ({tokens}) => {
|
|
|
44
76
|
}
|
|
45
77
|
|
|
46
78
|
/** A single share-link token row */
|
|
47
|
-
export const shareTokenRowTemplate = ({token}) => {
|
|
79
|
+
export const shareTokenRowTemplate = ({token}: {token: ShareToken}) => {
|
|
48
80
|
const expiry = token.expires_at
|
|
49
81
|
? escapeText(token.expires_at.slice(0, 10))
|
|
50
82
|
: gettext("never")
|
|
@@ -125,7 +157,7 @@ export const createShareTokenDialogTemplate = (
|
|
|
125
157
|
</table>`
|
|
126
158
|
|
|
127
159
|
/** The template for an individual row in the left hand side list of users (all contacts) of the access rights dialogue. */
|
|
128
|
-
export const contactsTemplate = ({contacts}) =>
|
|
160
|
+
export const contactsTemplate = ({contacts}: {contacts: Contact[]}) =>
|
|
129
161
|
contacts
|
|
130
162
|
.map(
|
|
131
163
|
contact =>
|
|
@@ -147,7 +179,11 @@ export const contactsTemplate = ({contacts}) =>
|
|
|
147
179
|
.join("")
|
|
148
180
|
|
|
149
181
|
/** The template for the right hand side list of users (the collaborators of the current document) of the access rights dialogue. */
|
|
150
|
-
export const collaboratorsTemplate = ({
|
|
182
|
+
export const collaboratorsTemplate = ({
|
|
183
|
+
collaborators
|
|
184
|
+
}: {
|
|
185
|
+
collaborators: Collaborator[]
|
|
186
|
+
}) =>
|
|
151
187
|
collaborators
|
|
152
188
|
.map(
|
|
153
189
|
collaborator =>
|
|
@@ -14,11 +14,27 @@
|
|
|
14
14
|
* The server stores the encrypted snapshot as opaque data and notifies
|
|
15
15
|
* other clients via an "e2ee_snapshot_received" message.
|
|
16
16
|
*/
|
|
17
|
+
import type {Editor} from "../types.js"
|
|
18
|
+
|
|
19
|
+
interface SnapshotPayload {
|
|
20
|
+
content: string
|
|
21
|
+
comments: string
|
|
22
|
+
bibliography: string
|
|
23
|
+
title: string
|
|
24
|
+
e2ee_salt?: string
|
|
25
|
+
e2ee_iterations?: number
|
|
26
|
+
v?: number
|
|
27
|
+
}
|
|
28
|
+
|
|
17
29
|
export class E2EESnapshotManager {
|
|
30
|
+
editor: Editor
|
|
31
|
+
pendingSave: boolean
|
|
32
|
+
key: CryptoKey | null
|
|
33
|
+
|
|
18
34
|
/**
|
|
19
|
-
* @param
|
|
35
|
+
* @param editor - The Fidus Writer editor instance
|
|
20
36
|
*/
|
|
21
|
-
constructor(editor) {
|
|
37
|
+
constructor(editor: Editor) {
|
|
22
38
|
this.editor = editor
|
|
23
39
|
this.pendingSave = false
|
|
24
40
|
this.key = null
|
|
@@ -28,25 +44,25 @@ export class E2EESnapshotManager {
|
|
|
28
44
|
* Set the encryption key for this document.
|
|
29
45
|
* Called after the user enters the password and the key is derived.
|
|
30
46
|
*
|
|
31
|
-
* @param
|
|
47
|
+
* @param key - An AES-GCM key (from E2EEKeyManager.deriveKey)
|
|
32
48
|
*/
|
|
33
|
-
setKey(key) {
|
|
49
|
+
setKey(key: CryptoKey): void {
|
|
34
50
|
this.key = key
|
|
35
51
|
}
|
|
36
52
|
|
|
37
53
|
/**
|
|
38
54
|
* Clear the encryption key (e.g., when the document is closed).
|
|
39
55
|
*/
|
|
40
|
-
clearKey() {
|
|
56
|
+
clearKey(): void {
|
|
41
57
|
this.key = null
|
|
42
58
|
}
|
|
43
59
|
|
|
44
60
|
/**
|
|
45
61
|
* Check whether the snapshot manager has a key set.
|
|
46
62
|
*
|
|
47
|
-
* @returns
|
|
63
|
+
* @returns boolean
|
|
48
64
|
*/
|
|
49
|
-
get hasKey() {
|
|
65
|
+
get hasKey(): boolean {
|
|
50
66
|
return this.key !== null
|
|
51
67
|
}
|
|
52
68
|
|
|
@@ -57,16 +73,16 @@ export class E2EESnapshotManager {
|
|
|
57
73
|
* non-collaborative mode where snapshots are sent via REST instead
|
|
58
74
|
* of WebSocket.
|
|
59
75
|
*
|
|
60
|
-
* @returns
|
|
76
|
+
* @returns The encrypted snapshot payload or null if no key.
|
|
61
77
|
*/
|
|
62
|
-
async getEncryptedSnapshot() {
|
|
78
|
+
async getEncryptedSnapshot(): Promise<SnapshotPayload | null> {
|
|
63
79
|
if (!this.key) {
|
|
64
80
|
return null
|
|
65
81
|
}
|
|
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()
|
|
82
|
+
const content = ((this.editor.view as any).docView as any).node.toJSON()
|
|
83
|
+
const comments = (this.editor.docInfo as any).comments || {}
|
|
84
|
+
const bibliography = (this.editor.docInfo as any).bibliography || {}
|
|
85
|
+
const {title} = this.editor.getDoc() as {title: string} as {title: string}
|
|
70
86
|
|
|
71
87
|
const {E2EEEncryptor} = await import("fwtoolkit/e2ee/encryptor")
|
|
72
88
|
|
|
@@ -89,8 +105,8 @@ export class E2EESnapshotManager {
|
|
|
89
105
|
comments: encryptedComments,
|
|
90
106
|
bibliography: encryptedBibliography,
|
|
91
107
|
title: encryptedTitle,
|
|
92
|
-
e2ee_salt: this.editor.e2ee
|
|
93
|
-
e2ee_iterations: this.editor.e2ee
|
|
108
|
+
e2ee_salt: this.editor.e2ee?.encryptionSalt,
|
|
109
|
+
e2ee_iterations: this.editor.e2ee?.encryptionIterations,
|
|
94
110
|
v: this.editor.docInfo.version
|
|
95
111
|
}
|
|
96
112
|
}
|
|
@@ -102,10 +118,10 @@ export class E2EESnapshotManager {
|
|
|
102
118
|
* an encrypted snapshot (typically after DOC_SAVE_INTERVAL diffs).
|
|
103
119
|
* Only write-capable clients should respond.
|
|
104
120
|
*
|
|
105
|
-
* @param
|
|
106
|
-
* @param
|
|
121
|
+
* @param request - The request_snapshot message
|
|
122
|
+
* @param request.v - The server's current document version
|
|
107
123
|
*/
|
|
108
|
-
async handleRequestSnapshot(_request) {
|
|
124
|
+
async handleRequestSnapshot(_request: {v?: number}): Promise<void> {
|
|
109
125
|
if (this.pendingSave) {
|
|
110
126
|
return
|
|
111
127
|
}
|
|
@@ -121,12 +137,12 @@ export class E2EESnapshotManager {
|
|
|
121
137
|
const docInfo = this.editor.docInfo
|
|
122
138
|
|
|
123
139
|
// 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 || {}
|
|
140
|
+
const content = ((this.editor.view as any).docView as any).node.toJSON()
|
|
141
|
+
const comments = (docInfo as any).comments || {}
|
|
142
|
+
const bibliography = (docInfo as any).bibliography || {}
|
|
127
143
|
|
|
128
144
|
// Extract the current title from the editor
|
|
129
|
-
const {title} = this.editor.getDoc()
|
|
145
|
+
const {title} = this.editor.getDoc() as {title: string}
|
|
130
146
|
|
|
131
147
|
// Dynamically import to avoid circular dependencies
|
|
132
148
|
const {E2EEEncryptor} = await import("fwtoolkit/e2ee/encryptor")
|
|
@@ -147,13 +163,13 @@ export class E2EESnapshotManager {
|
|
|
147
163
|
const encryptedTitle = await E2EEEncryptor.encrypt(title, this.key)
|
|
148
164
|
|
|
149
165
|
// Send snapshot to server
|
|
150
|
-
this.editor.ws
|
|
166
|
+
this.editor.ws!.send(() => ({
|
|
151
167
|
type: "e2ee_snapshot",
|
|
152
168
|
v: docInfo.version,
|
|
153
169
|
content: encryptedContent,
|
|
154
170
|
comments: encryptedComments,
|
|
155
171
|
bibliography: encryptedBibliography,
|
|
156
|
-
e2ee_salt: this.editor.e2ee
|
|
172
|
+
e2ee_salt: this.editor.e2ee?.encryptionSalt,
|
|
157
173
|
title: encryptedTitle
|
|
158
174
|
}))
|
|
159
175
|
this.pendingSave = false
|
|
@@ -168,24 +184,30 @@ export class E2EESnapshotManager {
|
|
|
168
184
|
* since they already have the latest state from the diffs they've
|
|
169
185
|
* been receiving.
|
|
170
186
|
*
|
|
171
|
-
* @param
|
|
172
|
-
* @param
|
|
187
|
+
* @param message - The e2ee_snapshot_received message
|
|
188
|
+
* @param message.v - The version of the saved snapshot
|
|
173
189
|
*/
|
|
174
|
-
async handleSnapshotReceived(message
|
|
190
|
+
async handleSnapshotReceived(message: {
|
|
191
|
+
v?: number
|
|
192
|
+
e2ee_salt?: string
|
|
193
|
+
e2ee_iterations?: number
|
|
194
|
+
}): Promise<void> {
|
|
175
195
|
// Informational — no action needed for regular snapshots.
|
|
176
196
|
// If the server included new KDF params, the password was changed
|
|
177
197
|
// by another client. Update local state so that if we re-fetch
|
|
178
198
|
// we use the new salt.
|
|
179
199
|
if (message.e2ee_salt) {
|
|
180
|
-
this.editor.e2ee
|
|
181
|
-
|
|
182
|
-
|
|
200
|
+
if (this.editor.e2ee) {
|
|
201
|
+
this.editor.e2ee.encryptionSalt = message.e2ee_salt
|
|
202
|
+
this.editor.e2ee.encryptionIterations = message.e2ee_iterations
|
|
203
|
+
this.editor.e2ee.key = undefined
|
|
204
|
+
}
|
|
183
205
|
this.clearKey()
|
|
184
206
|
// Clear cached password and key from sessionStorage so the user
|
|
185
207
|
// is prompted for the new password on next access.
|
|
186
208
|
const {E2EEKeyManager} = await import("fwtoolkit/e2ee/key-manager")
|
|
187
|
-
E2EEKeyManager.clearKeyFromSession(this.editor.docInfo.id)
|
|
188
|
-
E2EEKeyManager.clearPasswordFromSession(this.editor.docInfo.id)
|
|
209
|
+
E2EEKeyManager.clearKeyFromSession(this.editor.docInfo.id as number)
|
|
210
|
+
E2EEKeyManager.clearPasswordFromSession(this.editor.docInfo.id as number)
|
|
189
211
|
// Notify the user that the password has changed.
|
|
190
212
|
const {showSystemMessage} = await import("fwtoolkit")
|
|
191
213
|
showSystemMessage(
|
|
@@ -203,12 +225,17 @@ export class E2EESnapshotManager {
|
|
|
203
225
|
* the template) needs to be encrypted and saved as the first snapshot.
|
|
204
226
|
* This method handles that initial save.
|
|
205
227
|
*
|
|
206
|
-
* @param
|
|
207
|
-
* @param
|
|
208
|
-
* @param
|
|
209
|
-
* @param
|
|
228
|
+
* @param content - The document content (ProseMirror JSON)
|
|
229
|
+
* @param comments - The comments object (usually empty {})
|
|
230
|
+
* @param bibliography - The bibliography object (usually {})
|
|
231
|
+
* @param version - The document version (usually 0)
|
|
210
232
|
*/
|
|
211
|
-
async sendInitialSnapshot(
|
|
233
|
+
async sendInitialSnapshot(
|
|
234
|
+
content: any,
|
|
235
|
+
comments: any,
|
|
236
|
+
bibliography: any,
|
|
237
|
+
version: number
|
|
238
|
+
): Promise<void> {
|
|
212
239
|
if (!this.key) {
|
|
213
240
|
return
|
|
214
241
|
}
|
|
@@ -229,16 +256,16 @@ export class E2EESnapshotManager {
|
|
|
229
256
|
)
|
|
230
257
|
|
|
231
258
|
// Extract the current title from the editor
|
|
232
|
-
const {title} = this.editor.getDoc()
|
|
259
|
+
const {title} = this.editor.getDoc() as {title: string}
|
|
233
260
|
const encryptedTitle = await E2EEEncryptor.encrypt(title, this.key)
|
|
234
261
|
|
|
235
|
-
this.editor.ws
|
|
262
|
+
this.editor.ws!.send(() => ({
|
|
236
263
|
type: "e2ee_snapshot",
|
|
237
264
|
v: version,
|
|
238
265
|
content: encryptedContent,
|
|
239
266
|
comments: encryptedComments,
|
|
240
267
|
bibliography: encryptedBibliography,
|
|
241
|
-
e2ee_salt: this.editor.e2ee
|
|
268
|
+
e2ee_salt: this.editor.e2ee?.encryptionSalt,
|
|
242
269
|
title: encryptedTitle
|
|
243
270
|
}))
|
|
244
271
|
}
|
|
@@ -251,23 +278,27 @@ export class E2EESnapshotManager {
|
|
|
251
278
|
* that by collecting the current document state, encrypting it with
|
|
252
279
|
* the new key, and sending a snapshot.
|
|
253
280
|
*
|
|
254
|
-
* @param
|
|
255
|
-
* @param
|
|
256
|
-
* @param
|
|
281
|
+
* @param newKey - The new AES-GCM key derived from the new password
|
|
282
|
+
* @param newSaltBase64 - The new salt (Base64-encoded) to send to the server
|
|
283
|
+
* @param newIterations - The new iteration count
|
|
257
284
|
*/
|
|
258
|
-
async reEncryptWithNewKey(
|
|
285
|
+
async reEncryptWithNewKey(
|
|
286
|
+
newKey: CryptoKey,
|
|
287
|
+
newSaltBase64: string,
|
|
288
|
+
newIterations: number
|
|
289
|
+
): Promise<void> {
|
|
259
290
|
if (this.pendingSave) {
|
|
260
291
|
return
|
|
261
292
|
}
|
|
262
293
|
this.pendingSave = true
|
|
263
294
|
|
|
264
295
|
const docInfo = this.editor.docInfo
|
|
265
|
-
const content = this.editor.view.docView.node.toJSON()
|
|
266
|
-
const comments = docInfo.comments || {}
|
|
267
|
-
const bibliography = docInfo.bibliography || {}
|
|
296
|
+
const content = ((this.editor.view as any).docView as any).node.toJSON()
|
|
297
|
+
const comments = (docInfo as any).comments || {}
|
|
298
|
+
const bibliography = (docInfo as any).bibliography || {}
|
|
268
299
|
|
|
269
300
|
// Extract the current title from the editor
|
|
270
|
-
const {title} = this.editor.getDoc()
|
|
301
|
+
const {title} = this.editor.getDoc() as {title: string}
|
|
271
302
|
|
|
272
303
|
const {E2EEEncryptor} = await import("fwtoolkit/e2ee/encryptor")
|
|
273
304
|
|
|
@@ -290,7 +321,7 @@ export class E2EESnapshotManager {
|
|
|
290
321
|
this.key = newKey
|
|
291
322
|
|
|
292
323
|
// Send the re-encrypted snapshot along with the new KDF parameters
|
|
293
|
-
this.editor.ws
|
|
324
|
+
this.editor.ws!.send(() => ({
|
|
294
325
|
type: "e2ee_snapshot",
|
|
295
326
|
v: docInfo.version,
|
|
296
327
|
content: encryptedContent,
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
BibDB,
|
|
3
|
+
ExportDoc,
|
|
4
|
+
ImageDB,
|
|
5
|
+
ImageDBEntry,
|
|
6
|
+
SaveCopyE2EE,
|
|
7
|
+
Template,
|
|
8
|
+
User
|
|
9
|
+
} from "@fiduswriter/document"
|
|
10
|
+
import {SaveCopy as GenericSaveCopy} from "@fiduswriter/document/exporter/native"
|
|
11
|
+
import {NativeImporter} from "@fiduswriter/document/importer/native"
|
|
12
|
+
import {addAlert, addProgress, gettext, postJson, shortFileTitle} from "fwtoolkit"
|
|
13
|
+
import {E2EEEncryptor} from "fwtoolkit/e2ee/encryptor"
|
|
14
|
+
import {E2EEKeyManager} from "fwtoolkit/e2ee/key-manager"
|
|
15
|
+
|
|
16
|
+
type ProgressCallback = (message: string, percentage?: number | null) => void
|
|
17
|
+
|
|
18
|
+
type ImportDocument = (
|
|
19
|
+
doc: Record<string, unknown>,
|
|
20
|
+
bibDB: BibDB,
|
|
21
|
+
imageDB: ImageDB,
|
|
22
|
+
httpIncludes: Array<{url: string; filename: string}>,
|
|
23
|
+
options: Record<string, unknown>
|
|
24
|
+
) => Promise<{doc: Record<string, unknown>; docInfo: Record<string, unknown>}>
|
|
25
|
+
|
|
26
|
+
interface ImageEntry extends ImageDBEntry {
|
|
27
|
+
file?: Blob
|
|
28
|
+
checksum?: string
|
|
29
|
+
original_file_type?: string
|
|
30
|
+
image: string
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
interface E2EEOptions {
|
|
34
|
+
enabled?: boolean
|
|
35
|
+
key?: CryptoKey
|
|
36
|
+
sourceKey?: CryptoKey
|
|
37
|
+
targetE2EE?: boolean
|
|
38
|
+
targetPassword?: string
|
|
39
|
+
salt?: string
|
|
40
|
+
iterations?: number
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
interface CreateDocumentResult {
|
|
44
|
+
id: number
|
|
45
|
+
path: string
|
|
46
|
+
e2ee?: boolean
|
|
47
|
+
template?: string
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
interface SaveDocumentResult {
|
|
51
|
+
added: number
|
|
52
|
+
updated: number
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
interface NativeImporterBackend {
|
|
56
|
+
createDoc: (
|
|
57
|
+
template: Template,
|
|
58
|
+
importId: string | number | null,
|
|
59
|
+
requestedPath: string,
|
|
60
|
+
e2eeOptions: E2EEOptions | null,
|
|
61
|
+
files: Record<string, File[]>
|
|
62
|
+
) => Promise<CreateDocumentResult>
|
|
63
|
+
saveImages: (
|
|
64
|
+
images: ImageDB,
|
|
65
|
+
docId: number,
|
|
66
|
+
e2eeOptions: E2EEOptions | null
|
|
67
|
+
) => Promise<Record<number | string, number>>
|
|
68
|
+
saveDocument: (
|
|
69
|
+
saveData: Record<string, unknown>,
|
|
70
|
+
e2eeOptions: E2EEOptions | null
|
|
71
|
+
) => Promise<SaveDocumentResult>
|
|
72
|
+
encryptImage: (file: Blob, key: CryptoKey) => Promise<Blob>
|
|
73
|
+
encryptObject: (obj: unknown, key: CryptoKey) => Promise<unknown>
|
|
74
|
+
encrypt: (text: string, key: CryptoKey) => Promise<unknown>
|
|
75
|
+
storeKeyInSession: (docId: number, key: CryptoKey) => Promise<void>
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
interface ImportDocumentOptions extends Record<string, unknown> {
|
|
79
|
+
user: User
|
|
80
|
+
importId?: string | number | null
|
|
81
|
+
requestedPath?: string
|
|
82
|
+
e2eeOptions?: E2EEOptions | null
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async function maybeDecryptImage(
|
|
86
|
+
imageEntry: ImageEntry,
|
|
87
|
+
sourceKey: CryptoKey | undefined
|
|
88
|
+
): Promise<void> {
|
|
89
|
+
if (!sourceKey || !imageEntry.file) {
|
|
90
|
+
return
|
|
91
|
+
}
|
|
92
|
+
if (imageEntry.file_type !== "application/octet-stream") {
|
|
93
|
+
return
|
|
94
|
+
}
|
|
95
|
+
const fileBuffer = await imageEntry.file.arrayBuffer()
|
|
96
|
+
const bytes = new Uint8Array(fileBuffer)
|
|
97
|
+
let binary = ""
|
|
98
|
+
const chunkSize = 65536
|
|
99
|
+
for (let i = 0; i < bytes.length; i += chunkSize) {
|
|
100
|
+
const chunk = bytes.subarray(i, i + chunkSize)
|
|
101
|
+
binary += String.fromCharCode.apply(null, Array.from(chunk))
|
|
102
|
+
}
|
|
103
|
+
const base64 = btoa(binary)
|
|
104
|
+
const decrypted = await E2EEEncryptor.decryptBufferToBase64(base64, sourceKey)
|
|
105
|
+
const mime = imageEntry.original_file_type || "image/png"
|
|
106
|
+
const byteCharacters = atob(decrypted)
|
|
107
|
+
const byteNumbers = new Array<number>(byteCharacters.length)
|
|
108
|
+
for (let i = 0; i < byteCharacters.length; i++) {
|
|
109
|
+
byteNumbers[i] = byteCharacters.charCodeAt(i)
|
|
110
|
+
}
|
|
111
|
+
const byteArray = new Uint8Array(byteNumbers)
|
|
112
|
+
imageEntry.file = new Blob([byteArray], {type: mime})
|
|
113
|
+
imageEntry.file_type = mime
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function createNativeImporterBackend(
|
|
117
|
+
_user: User,
|
|
118
|
+
_e2eeOptions: E2EEOptions | null
|
|
119
|
+
): NativeImporterBackend {
|
|
120
|
+
return {
|
|
121
|
+
createDoc: (template, importId, path, e2ee, files) => {
|
|
122
|
+
const jsonData: Record<string, unknown> = {
|
|
123
|
+
template: template.content,
|
|
124
|
+
export_templates: template.exportTemplates,
|
|
125
|
+
document_styles: template.documentStyles,
|
|
126
|
+
import_id: importId
|
|
127
|
+
? importId
|
|
128
|
+
: (template.content.attrs as Record<string, unknown> | undefined)
|
|
129
|
+
?.import_id,
|
|
130
|
+
template_title: (template.content.attrs as Record<string, unknown> | undefined)
|
|
131
|
+
?.template,
|
|
132
|
+
path
|
|
133
|
+
}
|
|
134
|
+
if (e2ee?.enabled) {
|
|
135
|
+
jsonData.e2ee = true
|
|
136
|
+
if (e2ee.salt) {
|
|
137
|
+
jsonData.e2ee_salt = e2ee.salt
|
|
138
|
+
}
|
|
139
|
+
if (e2ee.iterations) {
|
|
140
|
+
jsonData.e2ee_iterations = e2ee.iterations
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return postJson("/api/document/import/create/", jsonData, files)
|
|
144
|
+
.then(({json}) => {
|
|
145
|
+
const data = json as Record<string, unknown>
|
|
146
|
+
return {
|
|
147
|
+
id: data.id as number,
|
|
148
|
+
path: data.path as string,
|
|
149
|
+
e2ee: data.e2ee as boolean | undefined,
|
|
150
|
+
template: data.template as string | undefined
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
.catch(error => {
|
|
154
|
+
addAlert("error", gettext("Could not create document"))
|
|
155
|
+
throw error
|
|
156
|
+
})
|
|
157
|
+
},
|
|
158
|
+
saveImages: async (images, docId, e2ee) => {
|
|
159
|
+
const isE2EE = e2ee?.enabled
|
|
160
|
+
const endpoint = isE2EE
|
|
161
|
+
? "/api/document/e2ee_image/"
|
|
162
|
+
: "/api/document/import/image/"
|
|
163
|
+
const imageTranslationTable: Record<number | string, number> = {}
|
|
164
|
+
await Promise.all(
|
|
165
|
+
Object.values(images.db).map(async imageEntry => {
|
|
166
|
+
const entry = imageEntry as ImageEntry
|
|
167
|
+
await maybeDecryptImage(entry, e2ee?.sourceKey)
|
|
168
|
+
const encryptedFile =
|
|
169
|
+
e2ee?.enabled && e2ee.key
|
|
170
|
+
? await E2EEEncryptor.encryptImage(
|
|
171
|
+
entry.file as Blob,
|
|
172
|
+
e2ee.key
|
|
173
|
+
)
|
|
174
|
+
: entry.file
|
|
175
|
+
const jsonData: Record<string, unknown> = {
|
|
176
|
+
doc_id: docId,
|
|
177
|
+
title: entry.title,
|
|
178
|
+
copyright: entry.copyright,
|
|
179
|
+
checksum: entry.checksum
|
|
180
|
+
}
|
|
181
|
+
const files = {
|
|
182
|
+
image: {
|
|
183
|
+
file: encryptedFile as Blob,
|
|
184
|
+
filename: entry.image.split("/").pop() as string
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const {json} = await postJson(endpoint, jsonData, files)
|
|
188
|
+
const response = json as Record<string, unknown>
|
|
189
|
+
imageTranslationTable[entry.id] = response.id as number
|
|
190
|
+
})
|
|
191
|
+
)
|
|
192
|
+
return imageTranslationTable
|
|
193
|
+
},
|
|
194
|
+
saveDocument: async (saveData, e2ee) => {
|
|
195
|
+
if (e2ee?.enabled && e2ee.key) {
|
|
196
|
+
saveData.content = await E2EEEncryptor.encryptObject(
|
|
197
|
+
saveData.content as object,
|
|
198
|
+
e2ee.key
|
|
199
|
+
)
|
|
200
|
+
saveData.comments = await E2EEEncryptor.encryptObject(
|
|
201
|
+
saveData.comments || {},
|
|
202
|
+
e2ee.key
|
|
203
|
+
)
|
|
204
|
+
saveData.bibliography = await E2EEEncryptor.encryptObject(
|
|
205
|
+
saveData.bibliography as object,
|
|
206
|
+
e2ee.key
|
|
207
|
+
)
|
|
208
|
+
saveData.title = await E2EEEncryptor.encrypt(
|
|
209
|
+
saveData.title as string,
|
|
210
|
+
e2ee.key
|
|
211
|
+
)
|
|
212
|
+
}
|
|
213
|
+
return postJson("/api/document/import/", saveData)
|
|
214
|
+
.then(({json}) => {
|
|
215
|
+
const data = json as Record<string, unknown>
|
|
216
|
+
return {
|
|
217
|
+
added: data.added as number,
|
|
218
|
+
updated: data.updated as number
|
|
219
|
+
}
|
|
220
|
+
})
|
|
221
|
+
.catch(error => {
|
|
222
|
+
addAlert(
|
|
223
|
+
"error",
|
|
224
|
+
`${gettext("Could not save ")} ${shortFileTitle(
|
|
225
|
+
saveData.title as string,
|
|
226
|
+
""
|
|
227
|
+
)}`
|
|
228
|
+
)
|
|
229
|
+
throw error
|
|
230
|
+
})
|
|
231
|
+
},
|
|
232
|
+
encryptImage: (file, key) => E2EEEncryptor.encryptImage(file, key),
|
|
233
|
+
encryptObject: (obj, key) => E2EEEncryptor.encryptObject(obj as object, key),
|
|
234
|
+
encrypt: (text, key) => E2EEEncryptor.encrypt(text, key),
|
|
235
|
+
storeKeyInSession: (docId, key) => E2EEKeyManager.storeKeyInSession(docId, key)
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
export class SaveCopy extends GenericSaveCopy {
|
|
240
|
+
constructor(
|
|
241
|
+
doc: Record<string, unknown> | ExportDoc,
|
|
242
|
+
bibDB: BibDB,
|
|
243
|
+
imageDB: ImageDB,
|
|
244
|
+
newUser: User,
|
|
245
|
+
importId: string | number | null = null,
|
|
246
|
+
e2eeOptions: E2EEOptions | null = null
|
|
247
|
+
) {
|
|
248
|
+
const title = shortFileTitle(doc.title as string, (doc.path as string) || "")
|
|
249
|
+
const task = addProgress(
|
|
250
|
+
"info",
|
|
251
|
+
`${title}: ${gettext("Creating copy...")}`,
|
|
252
|
+
{autoClose: 6000}
|
|
253
|
+
)
|
|
254
|
+
const progressCallback: ProgressCallback = (message, percentage) =>
|
|
255
|
+
task.update(percentage as number | null, message)
|
|
256
|
+
const e2ee: SaveCopyE2EE = {
|
|
257
|
+
decryptObject: (encrypted, key) =>
|
|
258
|
+
E2EEEncryptor.decryptObject(encrypted as string, key),
|
|
259
|
+
encryptObject: (obj, key) =>
|
|
260
|
+
E2EEEncryptor.encryptObject(obj as object, key),
|
|
261
|
+
encrypt: (text, key) => E2EEEncryptor.encrypt(text, key),
|
|
262
|
+
encryptImage: (file, key) => E2EEEncryptor.encryptImage(file, key),
|
|
263
|
+
generateSalt: () => E2EEKeyManager.generateSalt(),
|
|
264
|
+
deriveKey: (password, salt, iterations) =>
|
|
265
|
+
E2EEKeyManager.deriveKey(password, salt, iterations)
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
const importDocument: ImportDocument = (
|
|
269
|
+
doc,
|
|
270
|
+
bibDB,
|
|
271
|
+
imageDB,
|
|
272
|
+
httpIncludes,
|
|
273
|
+
options
|
|
274
|
+
) => {
|
|
275
|
+
const opts = options as ImportDocumentOptions
|
|
276
|
+
return new NativeImporter(
|
|
277
|
+
doc,
|
|
278
|
+
bibDB as unknown as Record<string, unknown>,
|
|
279
|
+
imageDB,
|
|
280
|
+
httpIncludes as unknown as Array<{
|
|
281
|
+
filename: string
|
|
282
|
+
content: Blob | ArrayBuffer | string
|
|
283
|
+
}>,
|
|
284
|
+
opts.user,
|
|
285
|
+
createNativeImporterBackend(opts.user, opts.e2eeOptions ?? null),
|
|
286
|
+
{
|
|
287
|
+
importId: opts.importId,
|
|
288
|
+
requestedPath: opts.requestedPath,
|
|
289
|
+
e2eeOptions: opts.e2eeOptions ?? null
|
|
290
|
+
}
|
|
291
|
+
).init()
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
super(doc as Record<string, unknown>, bibDB, imageDB, newUser, {
|
|
295
|
+
importId,
|
|
296
|
+
e2eeOptions,
|
|
297
|
+
e2ee,
|
|
298
|
+
importDocument,
|
|
299
|
+
progressCallback
|
|
300
|
+
})
|
|
301
|
+
}
|
|
302
|
+
}
|
|
@@ -1,23 +1,30 @@
|
|
|
1
|
+
import type {BibDB, ExportDoc, ImageDB} from "@fiduswriter/document"
|
|
1
2
|
import {ExportFidusFile as GenericExportFidusFile} from "@fiduswriter/document/exporter/native"
|
|
2
3
|
import {addProgress, gettext, shortFileTitle} from "fwtoolkit"
|
|
3
4
|
import {DocumentTemplateExporter} from "../../document_template/exporter.js"
|
|
4
5
|
|
|
5
6
|
export class ExportFidusFile extends GenericExportFidusFile {
|
|
6
|
-
constructor(
|
|
7
|
+
constructor(
|
|
8
|
+
doc: ExportDoc,
|
|
9
|
+
bibDB: BibDB,
|
|
10
|
+
imageDB: ImageDB,
|
|
11
|
+
includeTemplate = true,
|
|
12
|
+
token: string | boolean = false
|
|
13
|
+
) {
|
|
7
14
|
const title = shortFileTitle(doc.title, doc.path || "")
|
|
8
15
|
const task = addProgress(
|
|
9
16
|
"info",
|
|
10
17
|
`${title}: ${gettext("Exporting Fidus file...")}`,
|
|
11
18
|
{autoClose: 6000}
|
|
12
19
|
)
|
|
13
|
-
const progressCallback = (message, percentage) =>
|
|
14
|
-
task.update(percentage, message)
|
|
15
|
-
const getTemplateFiles = (docId, token) => {
|
|
20
|
+
const progressCallback = (message: string, percentage?: number | null) =>
|
|
21
|
+
task.update(percentage ?? null, message)
|
|
22
|
+
const getTemplateFiles = (docId: number | string, token: string | boolean) => {
|
|
16
23
|
const templateExporter = new DocumentTemplateExporter(
|
|
17
24
|
docId,
|
|
18
25
|
"/api/document/get_template_for_doc/",
|
|
19
26
|
false,
|
|
20
|
-
token
|
|
27
|
+
token as string | false
|
|
21
28
|
)
|
|
22
29
|
return templateExporter.init().then(() => ({
|
|
23
30
|
textFiles: templateExporter.textFiles,
|