drag & drop support for multi select plus some fixes

This commit is contained in:
azivner 2018-01-01 18:29:06 -05:00
parent 3f976a3821
commit e560072f8b
3 changed files with 45 additions and 22 deletions

View File

@ -46,14 +46,19 @@ const dragAndDropSetup = {
// This function MUST be defined to enable dropping of items on the tree. // This function MUST be defined to enable dropping of items on the tree.
// data.hitMode is 'before', 'after', or 'over'. // data.hitMode is 'before', 'after', or 'over'.
const nodeToMove = data.otherNode;
nodeToMove.setSelected(true);
const selectedNodes = noteTree.getSelectedNodes();
if (data.hitMode === "before") { if (data.hitMode === "before") {
treeChanges.moveBeforeNode(data.otherNode, node); treeChanges.moveBeforeNode(selectedNodes, node);
} }
else if (data.hitMode === "after") { else if (data.hitMode === "after") {
treeChanges.moveAfterNode(data.otherNode, node); treeChanges.moveAfterNode(selectedNodes, node);
} }
else if (data.hitMode === "over") { else if (data.hitMode === "over") {
treeChanges.moveToNode(data.otherNode, node); treeChanges.moveToNode(selectedNodes, node);
} }
else { else {
throw new Exception("Unknown hitMode=" + data.hitMode); throw new Exception("Unknown hitMode=" + data.hitMode);

View File

@ -405,24 +405,32 @@ const noteTree = (function() {
const beforeNode = node.getPrevSibling(); const beforeNode = node.getPrevSibling();
if (beforeNode !== null) { if (beforeNode !== null) {
treeChanges.moveBeforeNode(node, beforeNode); treeChanges.moveBeforeNode([node], beforeNode);
} }
return false;
}, },
"ctrl+down": node => { "ctrl+down": node => {
let afterNode = node.getNextSibling(); let afterNode = node.getNextSibling();
if (afterNode !== null) { if (afterNode !== null) {
treeChanges.moveAfterNode(node, afterNode); treeChanges.moveAfterNode([node], afterNode);
} }
return false;
}, },
"ctrl+left": node => { "ctrl+left": node => {
treeChanges.moveNodeUpInHierarchy(node); treeChanges.moveNodeUpInHierarchy(node);
return false;
}, },
"ctrl+right": node => { "ctrl+right": node => {
let toNode = node.getPrevSibling(); let toNode = node.getPrevSibling();
if (toNode !== null) { if (toNode !== null) {
treeChanges.moveToNode(node, toNode); treeChanges.moveToNode([node], toNode);
} }
return false;
}, },
"shift+up": node => { "shift+up": node => {
node.navigate($.ui.keyCode.UP, true).then(() => { node.navigate($.ui.keyCode.UP, true).then(() => {
@ -434,6 +442,8 @@ const noteTree = (function() {
currentNode.setSelected(true); currentNode.setSelected(true);
}); });
return false;
}, },
"shift+down": node => { "shift+down": node => {
node.navigate($.ui.keyCode.DOWN, true).then(() => { node.navigate($.ui.keyCode.DOWN, true).then(() => {
@ -445,6 +455,8 @@ const noteTree = (function() {
currentNode.setSelected(true); currentNode.setSelected(true);
}); });
return false;
}, },
"f2": node => { "f2": node => {
editTreePrefix.showDialog(node); editTreePrefix.showDialog(node);

View File

@ -1,16 +1,20 @@
"use strict"; "use strict";
const treeChanges = (function() { const treeChanges = (function() {
async function moveBeforeNode(node, beforeNode) { async function moveBeforeNode(nodesToMove, beforeNode) {
await server.put('notes/' + node.data.note_tree_id + '/move-before/' + beforeNode.data.note_tree_id); for (const nodeToMove of nodesToMove) {
await server.put('notes/' + nodeToMove.data.note_tree_id + '/move-before/' + beforeNode.data.note_tree_id);
changeNode(node, node => node.moveTo(beforeNode, 'before')); changeNode(nodeToMove, node => node.moveTo(beforeNode, 'before'));
}
} }
async function moveAfterNode(node, afterNode) { async function moveAfterNode(nodesToMove, afterNode) {
await server.put('notes/' + node.data.note_tree_id + '/move-after/' + afterNode.data.note_tree_id); for (const nodeToMove of nodesToMove) {
await server.put('notes/' + nodeToMove.data.note_tree_id + '/move-after/' + afterNode.data.note_tree_id);
changeNode(node, node => node.moveTo(afterNode, 'after')); changeNode(nodeToMove, node => node.moveTo(afterNode, 'after'));
}
} }
// beware that first arg is noteId and second is noteTreeId! // beware that first arg is noteId and second is noteTreeId!
@ -25,19 +29,21 @@ const treeChanges = (function() {
await noteTree.reload(); await noteTree.reload();
} }
async function moveToNode(node, toNode) { async function moveToNode(nodesToMove, toNode) {
await server.put('notes/' + node.data.note_tree_id + '/move-to/' + toNode.data.note_id); for (const nodeToMove of nodesToMove) {
await server.put('notes/' + nodeToMove.data.note_tree_id + '/move-to/' + toNode.data.note_id);
changeNode(node, node => { changeNode(nodeToMove, node => {
// first expand which will force lazy load and only then move the node // first expand which will force lazy load and only then move the node
// if this is not expanded before moving, then lazy load won't happen because it already contains node // if this is not expanded before moving, then lazy load won't happen because it already contains node
toNode.setExpanded(true); toNode.setExpanded(true);
node.moveTo(toNode); node.moveTo(toNode);
toNode.folder = true; toNode.folder = true;
toNode.renderTitle(); toNode.renderTitle();
}); });
}
} }
async function cloneNoteTo(childNoteId, parentNoteId, prefix) { async function cloneNoteTo(childNoteId, parentNoteId, prefix) {