tree now shows list of different cloned notes

This commit is contained in:
azivner 2017-11-21 20:04:06 -05:00
parent 84a9e9067d
commit d7644de666
6 changed files with 82 additions and 15 deletions

View File

@ -61,7 +61,7 @@ const noteHistory = (function() {
$(document).on('click', "a[action='note-history']", event => { $(document).on('click', "a[action='note-history']", event => {
const linkEl = $(event.target); const linkEl = $(event.target);
const noteId = linkEl.attr('note-id'); const noteId = linkEl.attr('note-path');
const noteHistoryId = linkEl.attr('note-history-id'); const noteHistoryId = linkEl.attr('note-history-id');
showNoteHistoryDialog(noteId, noteHistoryId); showNoteHistoryDialog(noteId, noteHistoryId);

View File

@ -34,7 +34,7 @@ const recentChanges = (function() {
href: 'javascript:', href: 'javascript:',
text: 'rev' text: 'rev'
}).attr('action', 'note-history') }).attr('action', 'note-history')
.attr('note-id', change.note_id) .attr('note-path', change.note_id)
.attr('note-history-id', change.note_history_id); .attr('note-history-id', change.note_history_id);
changesListEl.append($('<li>') changesListEl.append($('<li>')

View File

@ -22,19 +22,23 @@ const link = (function() {
return null; return null;
} }
function createNoteLink(noteId) { function createNoteLink(noteId, noteTitle) {
if (!noteTitle) {
noteTitle = noteTree.getNoteTitle(noteId);
}
const noteLink = $("<a>", { const noteLink = $("<a>", {
href: 'javascript:', href: 'javascript:',
text: noteTree.getNoteTitle(noteId) text: noteTitle
}).attr('action', 'note') }).attr('action', 'note')
.attr('note-id', noteId); .attr('note-path', noteId);
return noteLink; return noteLink;
} }
function goToInternalNote(e) { function goToInternalNote(e) {
const linkEl = $(e.target); const linkEl = $(e.target);
let noteId = linkEl.attr("note-id"); let noteId = linkEl.attr("note-path");
if (!noteId) { if (!noteId) {
noteId = getNotePathFromLink(linkEl.attr('href')); noteId = getNotePathFromLink(linkEl.attr('href'));

View File

@ -3,6 +3,8 @@
const noteTree = (function() { const noteTree = (function() {
const noteDetailEl = $('#note-detail'); const noteDetailEl = $('#note-detail');
const treeEl = $("#tree"); const treeEl = $("#tree");
const parentListEl = $("#parent-list");
let startNoteTreeId = null; let startNoteTreeId = null;
let treeLoadTime = null; let treeLoadTime = null;
let clipboardNoteTreeId = null; let clipboardNoteTreeId = null;
@ -55,7 +57,7 @@ const noteTree = (function() {
const title = noteIdToTitle[noteId]; const title = noteIdToTitle[noteId];
if (!title) { if (!title) {
throw new Error("Can't find title for noteId=" + noteId); throw new Error("Can't find title for noteId='" + noteId + "'");
} }
return title; return title;
@ -113,8 +115,6 @@ const noteTree = (function() {
} }
if (childToParents[childNoteId].length > 1) { if (childToParents[childNoteId].length > 1) {
console.log("Multiple classes!");
note.extraClasses += ",multiple-parents"; note.extraClasses += ",multiple-parents";
} }
@ -184,26 +184,83 @@ const noteTree = (function() {
childNoteId = parentNoteId; childNoteId = parentNoteId;
} }
const noteId = treeUtils.getNoteIdFromNotePath(notePath);
const runPath = effectivePath.reverse(); const runPath = effectivePath.reverse();
let parentNoteId = 'root'; let parentNoteId = 'root';
for (let i = 0; i < runPath.length; i++) { for (const childNoteId of runPath) {
const childNoteId = runPath[i];
const noteTreeId = getNoteTreeId(parentNoteId, childNoteId); const noteTreeId = getNoteTreeId(parentNoteId, childNoteId);
const node = treeUtils.getNodeByNoteTreeId(noteTreeId); const node = treeUtils.getNodeByNoteTreeId(noteTreeId);
if (i < runPath.length - 1) { if (childNoteId === noteId) {
await node.setExpanded(); await node.setActive();
} }
else { else {
await node.setActive(); await node.setExpanded();
} }
parentNoteId = childNoteId; parentNoteId = childNoteId;
} }
} }
function showParentList(noteId, node) {
const parents = childToParents[noteId];
if (parents.length <= 1) {
parentListEl.hide();
}
else {
parentListEl.show();
parentListEl.empty();
const list = $("<ul/>");
for (const parentNoteId of parents) {
const notePath = getSomeNotePath(parentNoteId) + '/' + noteId;
const title = getNotePathTitle(notePath);
let item;
if (node.getParent().data.note_id === parentNoteId) {
item = $("<span/>").attr("title", "Current note").append(title);
}
else {
item = link.createNoteLink(notePath, title);
}
list.append($("<li/>").append(item));
}
parentListEl.append(list);
}
}
function getNotePathTitle(notePath) {
const titlePath = [];
for (const path of notePath.split('/')) {
titlePath.push(getNoteTitle(path));
}
return titlePath.join(' / ');
}
function getSomeNotePath(noteId) {
const path = [];
let cur = noteId;
while (cur !== 'root') {
path.push(cur);
cur = childToParents[cur][0];
}
return path.reverse().join('/');
}
function setExpandedToServer(noteTreeId, isExpanded) { function setExpandedToServer(noteTreeId, isExpanded) {
const expandedNum = isExpanded ? 1 : 0; const expandedNum = isExpanded ? 1 : 0;
@ -277,6 +334,8 @@ const noteTree = (function() {
setCurrentNotePathToHash(data.node); setCurrentNotePathToHash(data.node);
noteEditor.switchToNote(node.note_id); noteEditor.switchToNote(node.note_id);
showParentList(node.note_id, data.node);
}, },
expand: (event, data) => { expand: (event, data) => {
setExpandedToServer(getNoteTreeIdFromKey(data.node.key), true); setExpandedToServer(getNoteTreeIdFromKey(data.node.key), true);

View File

@ -5,7 +5,8 @@
display: grid; display: grid;
grid-template-areas: "header header" grid-template-areas: "header header"
"tree-actions title" "tree-actions title"
"tree note-content"; "tree note-content"
"parent-list note-content";
grid-template-columns: 2fr 5fr; grid-template-columns: 2fr 5fr;
grid-template-rows: auto grid-template-rows: auto
auto auto

View File

@ -66,6 +66,9 @@
<div id="tree" class="hide-toggle" style="grid-area: tree; overflow: auto;"> <div id="tree" class="hide-toggle" style="grid-area: tree; overflow: auto;">
</div> </div>
<div id="parent-list" style="display: none;">
</div>
<div class="hide-toggle" style="grid-area: title;"> <div class="hide-toggle" style="grid-area: title;">
<div style="display: flex; align-items: center;"> <div style="display: flex; align-items: center;">
<a onclick="protected_session.protectNoteAndSendToServer()" <a onclick="protected_session.protectNoteAndSendToServer()"