trilium/src/public/javascripts/services/mobile.js

128 lines
4.2 KiB
JavaScript
Raw Normal View History

2018-12-24 05:28:57 +08:00
import treeService from "./tree.js";
import noteDetailService from "./note_detail.js";
import dragAndDropSetup from "./drag_and_drop.js";
import treeCache from "./tree_cache.js";
import treeBuilder from "./tree_builder.js";
2018-12-29 05:05:04 +08:00
import contextMenuWidget from "./context_menu.js";
import confirmDialog from "../dialogs/confirm.js";
import server from "./server.js";
import promptDialog from "../dialogs/prompt.js";
import ContextMenuItemsContainer from "./context_menu_items_container.js";
import treeChangesService from "./branches.js";
2018-12-29 07:09:16 +08:00
import utils from "./utils.js";
2018-12-24 05:28:57 +08:00
const $leftPane = $("#left-pane");
const $tree = $("#tree");
2018-12-25 01:39:31 +08:00
const $detail = $("#detail");
2018-12-25 03:38:38 +08:00
const $closeDetailButton = $("#close-detail-button");
2018-12-25 01:39:31 +08:00
2018-12-25 03:38:38 +08:00
function togglePanes() {
if (!$leftPane.is(":visible") || !$detail.is(":visible")) {
2018-12-25 03:38:38 +08:00
$detail.toggleClass("d-none");
$leftPane.toggleClass("d-none");
2018-12-25 03:38:38 +08:00
}
}
$closeDetailButton.click(togglePanes);
async function showTree() {
const tree = await treeService.loadTree();
$tree.fancytree({
autoScroll: true,
extensions: ["dnd5", "clones"],
source: tree,
scrollParent: $tree,
minExpandLevel: 2, // root can't be collapsed
activate: (event, data) => {
const node = data.node;
const noteId = node.data.noteId;
2018-12-28 05:36:11 +08:00
treeService.clearSelectedNodes();
treeService.setCurrentNotePathToHash(node);
2018-12-25 03:38:38 +08:00
togglePanes();
noteDetailService.switchToNote(noteId, true);
},
expand: (event, data) => treeService.setExpandedToServer(data.node.data.branchId, true),
collapse: (event, data) => treeService.setExpandedToServer(data.node.data.branchId, false),
init: (event, data) => treeService.treeInitialized(), // don't collapse to short form
dnd5: dragAndDropSetup,
lazyLoad: function(event, data) {
const noteId = data.node.data.noteId;
data.result = treeCache.getNote(noteId).then(note => treeBuilder.prepareBranch(note));
},
clones: {
highlightActiveClones: true
2018-12-25 17:58:40 +08:00
},
renderNode: function (event, data) {
const node = data.node;
const $nodeSpan = $(node.span);
// check if span of node already rendered
if (!$nodeSpan.data('rendered')) {
const addNoteButton = $('<button class="action-button" title="Add new sub-note" type="button" class="btn">+</button>');
addNoteButton.click(() => {
alert("Add new note");
});
$nodeSpan.append(addNoteButton);
// span rendered
$nodeSpan.data('rendered', true);
}
}
});
2018-12-29 05:05:04 +08:00
}
$("#note-menu-button").click(async e => {
const node = treeService.getCurrentNode();
const branch = await treeCache.getBranch(node.data.branchId);
const note = await treeCache.getNote(node.data.noteId);
const parentNote = await treeCache.getNote(branch.parentNoteId);
const isNotRoot = note.noteId !== 'root';
const itemsContainer = new ContextMenuItemsContainer([
{title: "Delete note", cmd: "delete", uiIcon: "trash"}
]);
itemsContainer.enableItem("delete", isNotRoot && parentNote.type !== 'search');
2018-12-29 06:57:11 +08:00
contextMenuWidget.initContextMenu(e, itemsContainer, (event, cmd) => {
if (cmd === "delete") {
treeChangesService.deleteNodes([node]);
2018-12-29 06:57:11 +08:00
// move to the tree
togglePanes();
}
else {
throw new Error("Unrecognized command " + cmd);
}
});
});
2018-12-29 05:05:04 +08:00
2018-12-29 06:57:11 +08:00
$("#global-actions-button").click(async e => {
const itemsContainer = new ContextMenuItemsContainer([
{title: "Switch to desktop version", cmd: "switch-to-desktop", uiIcon: "computer"},
{title: "Logout", cmd: "log-out", uiIcon: "log-out"}
]);
2018-12-29 05:05:04 +08:00
2018-12-29 06:57:11 +08:00
contextMenuWidget.initContextMenu(e, itemsContainer, (event, cmd) => {
if (cmd === "switch-to-desktop") {
2018-12-29 07:09:16 +08:00
utils.setCookie('trilium-device', 'desktop');
utils.reloadApp();
2018-12-29 06:57:11 +08:00
}
else if (cmd === 'log-out') {
$("#logout-form").submit();
}
else {
throw new Error("Unrecognized command " + cmd);
}
});
});
showTree();