mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
140 lines
4.1 KiB
JavaScript
140 lines
4.1 KiB
JavaScript
import treeService from "../services/tree.js";
|
|
import utils from "../services/utils.js";
|
|
import ws from "../services/ws.js";
|
|
import toastService from "../services/toast.js";
|
|
import treeCache from "../services/tree_cache.js";
|
|
|
|
const $dialog = $("#export-dialog");
|
|
const $form = $("#export-form");
|
|
const $noteTitle = $dialog.find(".export-note-title");
|
|
const $subtreeFormats = $("#export-subtree-formats");
|
|
const $singleFormats = $("#export-single-formats");
|
|
const $subtreeType = $("#export-type-subtree");
|
|
const $singleType = $("#export-type-single");
|
|
const $exportButton = $("#export-button");
|
|
const $opmlVersions = $("#opml-versions");
|
|
|
|
let taskId = '';
|
|
let branchId = null;
|
|
|
|
export async function showDialog(notePath, defaultType) {
|
|
utils.closeActiveDialog();
|
|
|
|
// each opening of the dialog resets the taskId so we don't associate it with previous exports anymore
|
|
taskId = '';
|
|
$exportButton.removeAttr("disabled");
|
|
|
|
if (defaultType === 'subtree') {
|
|
$subtreeType.prop("checked", true).trigger('change');
|
|
|
|
// to show/hide OPML versions
|
|
$("input[name=export-subtree-format]:checked").trigger('change');
|
|
}
|
|
else if (defaultType === 'single') {
|
|
$singleType.prop("checked", true).trigger('change');
|
|
}
|
|
else {
|
|
throw new Error("Unrecognized type " + defaultType);
|
|
}
|
|
|
|
$("#opml-v2").prop("checked", true); // setting default
|
|
|
|
glob.activeDialog = $dialog;
|
|
|
|
$dialog.modal();
|
|
|
|
const {noteId, parentNoteId} = treeService.getNoteIdAndParentIdFromNotePath(notePath);
|
|
|
|
branchId = await treeCache.getBranchId(parentNoteId, noteId);
|
|
|
|
const noteTitle = await treeService.getNoteTitle(noteId);
|
|
|
|
$noteTitle.html(noteTitle);
|
|
}
|
|
|
|
$form.on('submit', () => {
|
|
$dialog.modal('hide');
|
|
|
|
const exportType = $dialog.find("input[name='export-type']:checked").val();
|
|
|
|
if (!exportType) {
|
|
// this shouldn't happen as we always choose default export type
|
|
alert("Choose export type first please");
|
|
return;
|
|
}
|
|
|
|
const exportFormat = exportType === 'subtree'
|
|
? $("input[name=export-subtree-format]:checked").val()
|
|
: $("input[name=export-single-format]:checked").val();
|
|
|
|
const exportVersion = exportFormat === 'opml' ? $dialog.find("input[name='opml-version']:checked").val() : "1.0";
|
|
|
|
exportBranch(branchId, exportType, exportFormat, exportVersion);
|
|
|
|
return false;
|
|
});
|
|
|
|
function exportBranch(branchId, type, format, version) {
|
|
taskId = utils.randomString(10);
|
|
|
|
const url = utils.getUrlForDownload(`api/notes/${branchId}/export/${type}/${format}/${version}/${taskId}`);
|
|
|
|
utils.download(url);
|
|
}
|
|
|
|
$('input[name=export-type]').on('change', function () {
|
|
if (this.value === 'subtree') {
|
|
if ($("input[name=export-subtree-format]:checked").length === 0) {
|
|
$("input[name=export-subtree-format]:first").prop("checked", true);
|
|
}
|
|
|
|
$subtreeFormats.slideDown();
|
|
$singleFormats.slideUp();
|
|
}
|
|
else {
|
|
if ($("input[name=export-single-format]:checked").length === 0) {
|
|
$("input[name=export-single-format]:first").prop("checked", true);
|
|
}
|
|
|
|
$subtreeFormats.slideUp();
|
|
$singleFormats.slideDown();
|
|
}
|
|
});
|
|
|
|
$('input[name=export-subtree-format]').on('change', function () {
|
|
if (this.value === 'opml') {
|
|
$opmlVersions.slideDown();
|
|
}
|
|
else {
|
|
$opmlVersions.slideUp();
|
|
}
|
|
});
|
|
|
|
function makeToast(id, message) {
|
|
return {
|
|
id: id,
|
|
title: "Export status",
|
|
message: message,
|
|
icon: "arrow-square-up-right"
|
|
};
|
|
}
|
|
|
|
ws.subscribeToMessages(async message => {
|
|
if (message.taskType !== 'export') {
|
|
return;
|
|
}
|
|
|
|
if (message.type === 'task-error') {
|
|
toastService.closePersistent(message.taskId);
|
|
toastService.showError(message.message);
|
|
}
|
|
else if (message.type === 'task-progress-count') {
|
|
toastService.showPersistent(makeToast(message.taskId, "Export in progress: " + message.progressCount));
|
|
}
|
|
else if (message.type === 'task-succeeded') {
|
|
const toast = makeToast(message.taskId, "Import finished successfully.");
|
|
toast.closeAfter = 5000;
|
|
|
|
toastService.showPersistent(toast);
|
|
}
|
|
}); |