diff --git a/src/public/app/dialogs/import.js b/src/public/app/dialogs/import.js deleted file mode 100644 index b37ca63c0..000000000 --- a/src/public/app/dialogs/import.js +++ /dev/null @@ -1,76 +0,0 @@ -import utils from '../services/utils.js'; -import treeService from "../services/tree.js"; -import importService from "../services/import.js"; -import options from "../services/options.js"; - -const $dialog = $("#import-dialog"); -const $form = $("#import-form"); -const $noteTitle = $dialog.find(".import-note-title"); -const $fileUploadInput = $("#import-file-upload-input"); -const $importButton = $("#import-button"); -const $safeImportCheckbox = $("#safe-import-checkbox"); -const $shrinkImagesWrapper = $("shrink-images-wrapper"); -const $shrinkImagesCheckbox = $("#shrink-images-checkbox"); -const $textImportedAsTextCheckbox = $("#text-imported-as-text-checkbox"); -const $codeImportedAsCodeCheckbox = $("#code-imported-as-code-checkbox"); -const $explodeArchivesCheckbox = $("#explode-archives-checkbox"); -const $replaceUnderscoresWithSpacesCheckbox = $("#replace-underscores-with-spaces-checkbox"); -const $csrf = $("#import-csrf"); - -let parentNoteId = null; - -export async function showDialog(noteId) { - $fileUploadInput.val('').trigger('change'); // to trigger Import button disabling listener below - - $safeImportCheckbox.prop("checked", true); - $shrinkImagesCheckbox.prop("checked", options.is('compressImages')); - $textImportedAsTextCheckbox.prop("checked", true); - $codeImportedAsCodeCheckbox.prop("checked", true); - $explodeArchivesCheckbox.prop("checked", true); - $replaceUnderscoresWithSpacesCheckbox.prop("checked", true); - - parentNoteId = noteId; - - $noteTitle.text(await treeService.getNoteTitle(parentNoteId)); - - utils.openDialog($dialog); -} - -$form.on('submit', () => { - // disabling so that import is not triggered again. - $importButton.attr("disabled", "disabled"); - - importIntoNote(parentNoteId); - - return false; -}); - -async function importIntoNote(parentNoteId) { - const files = Array.from($fileUploadInput[0].files); // shallow copy since we're resetting the upload button below - - const options = { - safeImport: boolToString($safeImportCheckbox), - shrinkImages: boolToString($shrinkImagesCheckbox), - textImportedAsText: boolToString($textImportedAsTextCheckbox), - codeImportedAsCode: boolToString($codeImportedAsCodeCheckbox), - explodeArchives: boolToString($explodeArchivesCheckbox), - replaceUnderscoresWithSpaces: boolToString($replaceUnderscoresWithSpacesCheckbox) - }; - - $dialog.modal('hide'); - - await importService.uploadFiles(parentNoteId, files, options); -} - -function boolToString($el) { - return $el.is(":checked") ? "true" : "false"; -} - -$fileUploadInput.on('change', () => { - if ($fileUploadInput.val()) { - $importButton.removeAttr("disabled"); - } - else { - $importButton.attr("disabled", "disabled"); - } -}); diff --git a/src/public/app/layouts/desktop_layout.js b/src/public/app/layouts/desktop_layout.js index 9ae5a736a..e92ac7609 100644 --- a/src/public/app/layouts/desktop_layout.js +++ b/src/public/app/layouts/desktop_layout.js @@ -65,6 +65,7 @@ import JumpToNoteDialog from "../widgets/dialogs/jump_to_note.js"; import AddLinkDialog from "../widgets/dialogs/add_link.js"; import CloneToDialog from "../widgets/dialogs/clone_to.js"; import MoveToDialog from "../widgets/dialogs/move_to.js"; +import ImportDialog from "../widgets/dialogs/import.js"; export default class DesktopLayout { constructor(customWidgets) { @@ -204,6 +205,7 @@ export default class DesktopLayout { .child(new JumpToNoteDialog()) .child(new AddLinkDialog()) .child(new CloneToDialog()) - .child(new MoveToDialog()); + .child(new MoveToDialog()) + .child(new ImportDialog()); } } diff --git a/src/public/app/widgets/buttons/note_actions.js b/src/public/app/widgets/buttons/note_actions.js index 80001dead..89bac66df 100644 --- a/src/public/app/widgets/buttons/note_actions.js +++ b/src/public/app/widgets/buttons/note_actions.js @@ -57,7 +57,7 @@ export default class NoteActionsWidget extends NoteContextAwareWidget { }); this.$importNoteButton = this.$widget.find('.import-files-button'); - this.$importNoteButton.on("click", () => import('../../dialogs/import.js').then(d => d.showDialog(this.noteId))); + this.$importNoteButton.on("click", () => this.triggerCommand("showImportDialog", {noteId: this.noteId})); this.$widget.on('click', '.dropdown-item', () => this.$widget.find("[data-toggle='dropdown']").dropdown('toggle')); diff --git a/src/public/app/widgets/dialogs/import.js b/src/public/app/widgets/dialogs/import.js new file mode 100644 index 000000000..087f48673 --- /dev/null +++ b/src/public/app/widgets/dialogs/import.js @@ -0,0 +1,155 @@ +import utils from '../../services/utils.js'; +import treeService from "../../services/tree.js"; +import importService from "../../services/import.js"; +import options from "../../services/options.js"; +import BasicWidget from "../basic_widget.js"; + +const TPL = ` +`; + +export default class ImportDialog extends BasicWidget { + constructor() { + super(); + + this.parentNoteId = null; + } + + doRender() { + this.$widget = $(TPL); + this.$form = this.$widget.find(".import-form"); + this.$noteTitle = this.$widget.find(".import-note-title"); + this.$fileUploadInput = this.$widget.find(".import-file-upload-input"); + this.$importButton = this.$widget.find(".import-button"); + this.$safeImportCheckbox = this.$widget.find(".safe-import-checkbox"); + this.$shrinkImagesCheckbox = this.$widget.find(".shrink-images-checkbox"); + this.$textImportedAsTextCheckbox = this.$widget.find(".text-imported-as-text-checkbox"); + this.$codeImportedAsCodeCheckbox = this.$widget.find(".code-imported-as-code-checkbox"); + this.$explodeArchivesCheckbox = this.$widget.find(".explode-archives-checkbox"); + this.$replaceUnderscoresWithSpacesCheckbox = this.$widget.find(".replace-underscores-with-spaces-checkbox"); + + this.$form.on('submit', () => { + // disabling so that import is not triggered again. + this.$importButton.attr("disabled", "disabled"); + + this.importIntoNote(this.parentNoteId); + + return false; + }); + + this.$fileUploadInput.on('change', () => { + if (this.$fileUploadInput.val()) { + this.$importButton.removeAttr("disabled"); + } + else { + this.$importButton.attr("disabled", "disabled"); + } + }); + } + + async showImportDialogEvent({noteId}) { + this.parentNoteId = noteId; + + this.$fileUploadInput.val('').trigger('change'); // to trigger Import button disabling listener below + + this.$safeImportCheckbox.prop("checked", true); + this.$shrinkImagesCheckbox.prop("checked", options.is('compressImages')); + this.$textImportedAsTextCheckbox.prop("checked", true); + this.$codeImportedAsCodeCheckbox.prop("checked", true); + this.$explodeArchivesCheckbox.prop("checked", true); + this.$replaceUnderscoresWithSpacesCheckbox.prop("checked", true); + + this.$noteTitle.text(await treeService.getNoteTitle(this.parentNoteId)); + + utils.openDialog(this.$widget); + } + + async importIntoNote(parentNoteId) { + const files = Array.from(this.$fileUploadInput[0].files); // shallow copy since we're resetting the upload button below + + const boolToString = $el => $el.is(":checked") ? "true" : "false"; + + const options = { + safeImport: boolToString(this.$safeImportCheckbox), + shrinkImages: boolToString(this.$shrinkImagesCheckbox), + textImportedAsText: boolToString(this.$textImportedAsTextCheckbox), + codeImportedAsCode: boolToString(this.$codeImportedAsCodeCheckbox), + explodeArchives: boolToString(this.$explodeArchivesCheckbox), + replaceUnderscoresWithSpaces: boolToString(this.$replaceUnderscoresWithSpacesCheckbox) + }; + + this.$widget.modal('hide'); + + await importService.uploadFiles(parentNoteId, files, options); + } +} diff --git a/src/public/app/widgets/note_tree.js b/src/public/app/widgets/note_tree.js index a75ea11b4..a5fdb0fb0 100644 --- a/src/public/app/widgets/note_tree.js +++ b/src/public/app/widgets/note_tree.js @@ -1458,8 +1458,7 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { } async importIntoNoteCommand({node}) { - const importDialog = await import('../dialogs/import.js'); - importDialog.showDialog(node.data.noteId); + this.triggerCommand("showImportDialog", {noteId: node.data.noteId}); } forceNoteSyncCommand({node}) { diff --git a/src/views/desktop.ejs b/src/views/desktop.ejs index 0098b8d9d..f93d173bd 100644 --- a/src/views/desktop.ejs +++ b/src/views/desktop.ejs @@ -18,7 +18,6 @@ <%- include('dialogs/export.ejs') %> -<%- include('dialogs/import.ejs') %> <%- include('dialogs/markdown_import.ejs') %> <%- include('dialogs/note_revisions.ejs') %> <%- include('dialogs/options.ejs') %> diff --git a/src/views/dialogs/import.ejs b/src/views/dialogs/import.ejs deleted file mode 100644 index da2e29718..000000000 --- a/src/views/dialogs/import.ejs +++ /dev/null @@ -1,72 +0,0 @@ -