mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01:00 
			
		
		
		
	Merge remote-tracking branch 'origin/master' into next60
This commit is contained in:
		@@ -185,6 +185,7 @@ div.ui-tooltip {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dropdown-menu {
 | 
			
		||||
    border: 1px solid var(--dropdown-border-color);
 | 
			
		||||
    color: var(--menu-text-color) !important;
 | 
			
		||||
    background-color: var(--menu-background-color) !important;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@
 | 
			
		||||
    --main-background-color: #333;
 | 
			
		||||
    --main-text-color: #ccc;
 | 
			
		||||
    --main-border-color: #aaa;
 | 
			
		||||
    --dropdown-border-color: #555;
 | 
			
		||||
 | 
			
		||||
    --accented-background-color: #555;
 | 
			
		||||
    --more-accented-background-color: #777;
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,7 @@ html {
 | 
			
		||||
    --main-background-color: white;
 | 
			
		||||
    --main-text-color: black;
 | 
			
		||||
    --main-border-color: #ccc;
 | 
			
		||||
    --dropdown-border-color: #ccc;
 | 
			
		||||
 | 
			
		||||
    --accented-background-color: #f5f5f5;
 | 
			
		||||
    --more-accented-background-color: #ddd;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,12 @@
 | 
			
		||||
const becca = require("../../becca/becca");
 | 
			
		||||
const { JSDOM } = require("jsdom");
 | 
			
		||||
const NotFoundError = require("../../errors/not_found_error");
 | 
			
		||||
function buildDescendantCountMap(noteIdsToCount) {
 | 
			
		||||
    if (!Array.isArray(noteIdsToCount)) {
 | 
			
		||||
        throw new Error('noteIdsToCount: type error');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
function buildDescendantCountMap() {
 | 
			
		||||
    const noteIdToCountMap = {};
 | 
			
		||||
    const noteIdToCountMap = Object.create(null);
 | 
			
		||||
 | 
			
		||||
    function getCount(noteId) {
 | 
			
		||||
        if (!(noteId in noteIdToCountMap)) {
 | 
			
		||||
@@ -24,12 +27,12 @@ function buildDescendantCountMap() {
 | 
			
		||||
 | 
			
		||||
        return noteIdToCountMap[noteId];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getCount('root');
 | 
			
		||||
    noteIdsToCount.forEach((noteId) => {
 | 
			
		||||
        getCount(noteId);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return noteIdToCountMap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {BNote} note
 | 
			
		||||
 * @param {int} depth
 | 
			
		||||
@@ -119,7 +122,9 @@ function getLinkMap(req) {
 | 
			
		||||
        noteIds.add(noteId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const notes = Array.from(noteIds).map(noteId => {
 | 
			
		||||
    const noteIdsArray = Array.from(noteIds)
 | 
			
		||||
 | 
			
		||||
    const notes = noteIdsArray.map(noteId => {
 | 
			
		||||
        const note = becca.getNote(noteId);
 | 
			
		||||
 | 
			
		||||
        return [
 | 
			
		||||
@@ -155,7 +160,7 @@ function getLinkMap(req) {
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
        notes: notes,
 | 
			
		||||
        noteIdToDescendantCountMap: buildDescendantCountMap(),
 | 
			
		||||
        noteIdToDescendantCountMap: buildDescendantCountMap(noteIdsArray),
 | 
			
		||||
        links: links
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
@@ -209,7 +214,7 @@ function getTreeMap(req) {
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const noteIdToDescendantCountMap = buildDescendantCountMap();
 | 
			
		||||
    const noteIdToDescendantCountMap = buildDescendantCountMap(Array.from(noteIds));
 | 
			
		||||
 | 
			
		||||
    updateDescendantCountMapForSearch(noteIdToDescendantCountMap, subtree.relationships);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -137,13 +137,13 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
    this.getNoteWithLabel = attributeService.getNoteWithLabel;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * If there's no branch between note and parent note, create one. Otherwise, do nothing.
 | 
			
		||||
     * If there's no branch between note and parent note, create one. Otherwise, do nothing. Returns the new or existing branch.
 | 
			
		||||
     *
 | 
			
		||||
     * @method
 | 
			
		||||
     * @param {string} noteId
 | 
			
		||||
     * @param {string} parentNoteId
 | 
			
		||||
     * @param {string} prefix - if branch will be created between note and parent note, set this prefix
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     * @returns {{branch: BBranch|null}}
 | 
			
		||||
     */
 | 
			
		||||
    this.ensureNoteIsPresentInParent = cloningService.ensureNoteIsPresentInParent;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -61,15 +61,15 @@ function cloneNoteToBranch(noteId, parentBranchId, prefix) {
 | 
			
		||||
 | 
			
		||||
function ensureNoteIsPresentInParent(noteId, parentNoteId, prefix) {
 | 
			
		||||
    if (isNoteDeleted(noteId)) {
 | 
			
		||||
        return { success: false, message: `Note '${noteId}' is deleted.` };
 | 
			
		||||
        return { branch: null, success: false, message: `Note '${noteId}' is deleted.` };
 | 
			
		||||
    } else if (isNoteDeleted(parentNoteId)) {
 | 
			
		||||
        return { success: false, message: `Note '${parentNoteId}' is deleted.` };
 | 
			
		||||
        return { branch: null, success: false, message: `Note '${parentNoteId}' is deleted.` };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const parentNote = becca.getNote(parentNoteId);
 | 
			
		||||
 | 
			
		||||
    if (parentNote.type === 'search') {
 | 
			
		||||
        return { success: false, message: "Can't clone into a search note" };
 | 
			
		||||
        return { branch: null, success: false, message: "Can't clone into a search note" };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const validationResult = treeService.validateParentChild(parentNoteId, noteId);
 | 
			
		||||
@@ -87,7 +87,7 @@ function ensureNoteIsPresentInParent(noteId, parentNoteId, prefix) {
 | 
			
		||||
 | 
			
		||||
    log.info(`Ensured note '${noteId}' is in parent note '${parentNoteId}' with prefix '${branch.prefix}'`);
 | 
			
		||||
 | 
			
		||||
    return { success: true };
 | 
			
		||||
    return { branch: branch, success: true };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function ensureNoteIsAbsentFromParent(noteId, parentNoteId) {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,12 +8,12 @@ const becca = require('../becca/becca');
 | 
			
		||||
 | 
			
		||||
function validateParentChild(parentNoteId, childNoteId, branchId = null) {
 | 
			
		||||
    if (['root', '_hidden', '_share', '_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(childNoteId)) {
 | 
			
		||||
        return { success: false, message: `Cannot change this note's location.`};
 | 
			
		||||
        return { branch: null, success: false, message: `Cannot change this note's location.`};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (parentNoteId === 'none') {
 | 
			
		||||
        // this shouldn't happen
 | 
			
		||||
        return { success: false, message: `Cannot move anything into 'none' parent.` };
 | 
			
		||||
        return { branch: null, success: false, message: `Cannot move anything into 'none' parent.` };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const existing = becca.getBranchFromChildAndParent(childNoteId, parentNoteId);
 | 
			
		||||
@@ -23,6 +23,7 @@ function validateParentChild(parentNoteId, childNoteId, branchId = null) {
 | 
			
		||||
        const childNote = becca.getNote(childNoteId);
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
            branch: existing,
 | 
			
		||||
            success: false,
 | 
			
		||||
            message: `Note "${childNote.title}" note already exists in the "${parentNote.title}".`
 | 
			
		||||
        };
 | 
			
		||||
@@ -30,6 +31,7 @@ function validateParentChild(parentNoteId, childNoteId, branchId = null) {
 | 
			
		||||
 | 
			
		||||
    if (wouldAddingBranchCreateCycle(parentNoteId, childNoteId)) {
 | 
			
		||||
        return {
 | 
			
		||||
            branch: null,
 | 
			
		||||
            success: false,
 | 
			
		||||
            message: 'Moving/cloning note here would create cycle.'
 | 
			
		||||
        };
 | 
			
		||||
@@ -37,12 +39,13 @@ function validateParentChild(parentNoteId, childNoteId, branchId = null) {
 | 
			
		||||
 | 
			
		||||
    if (parentNoteId !== '_lbBookmarks' && becca.getNote(parentNoteId).type === 'launcher') {
 | 
			
		||||
        return {
 | 
			
		||||
            branch: null,
 | 
			
		||||
            success: false,
 | 
			
		||||
            message: 'Launcher note cannot have any children.'
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return { success: true };
 | 
			
		||||
    return { branch: null, success: true };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user