mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01:00 
			
		
		
		
	refactored note creation methods into a separate service
This commit is contained in:
		
							
								
								
									
										89
									
								
								src/public/javascripts/services/note_create.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								src/public/javascripts/services/note_create.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
import hoistedNoteService from "./hoisted_note.js";
 | 
			
		||||
import appContext from "./app_context.js";
 | 
			
		||||
import utils from "./utils.js";
 | 
			
		||||
import protectedSessionHolder from "./protected_session_holder.js";
 | 
			
		||||
import server from "./server.js";
 | 
			
		||||
import ws from "./ws.js";
 | 
			
		||||
import treeCache from "./tree_cache.js";
 | 
			
		||||
import toastService from "./toast.js";
 | 
			
		||||
 | 
			
		||||
async function createNewTopLevelNote() {
 | 
			
		||||
    const hoistedNoteId = await hoistedNoteService.getHoistedNoteId();
 | 
			
		||||
 | 
			
		||||
    await createNote(hoistedNoteId);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function createNote(parentNoteId, options = {}) {
 | 
			
		||||
    options = Object.assign({
 | 
			
		||||
        activate: true,
 | 
			
		||||
        target: 'into'
 | 
			
		||||
    }, options);
 | 
			
		||||
 | 
			
		||||
    // if isProtected isn't available (user didn't enter password yet), then note is created as unencrypted
 | 
			
		||||
    // but this is quite weird since user doesn't see WHERE the note is being created so it shouldn't occur often
 | 
			
		||||
    if (!options.isProtected || !protectedSessionHolder.isProtectedSessionAvailable()) {
 | 
			
		||||
        options.isProtected = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (appContext.getActiveTabNoteType() !== 'text') {
 | 
			
		||||
        options.saveSelection = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (options.saveSelection && utils.isCKEditorInitialized()) {
 | 
			
		||||
        [options.title, options.content] = parseSelectedHtml(window.cutToNote.getSelectedHtml());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const newNoteName = options.title || "new note";
 | 
			
		||||
 | 
			
		||||
    const {note, branch} = await server.post(`notes/${parentNoteId}/children?target=${options.target}&targetBranchId=${options.targetBranchId}`, {
 | 
			
		||||
        title: newNoteName,
 | 
			
		||||
        content: options.content || "",
 | 
			
		||||
        isProtected: options.isProtected,
 | 
			
		||||
        type: options.type
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    if (options.saveSelection && utils.isCKEditorInitialized()) {
 | 
			
		||||
        // we remove the selection only after it was saved to server to make sure we don't lose anything
 | 
			
		||||
        window.cutToNote.removeSelection();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (options.activate) {
 | 
			
		||||
        const activeTabContext = appContext.getActiveTabContext();
 | 
			
		||||
        activeTabContext.setNote(note.noteId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return {note, branch};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* If first element is heading, parse it out and use it as a new heading. */
 | 
			
		||||
function parseSelectedHtml(selectedHtml) {
 | 
			
		||||
    const dom = $.parseHTML(selectedHtml);
 | 
			
		||||
 | 
			
		||||
    if (dom.length > 0 && dom[0].tagName && dom[0].tagName.match(/h[1-6]/i)) {
 | 
			
		||||
        const title = $(dom[0]).text();
 | 
			
		||||
        // remove the title from content (only first occurence)
 | 
			
		||||
        const content = selectedHtml.replace(dom[0].outerHTML, "");
 | 
			
		||||
 | 
			
		||||
        return [title, content];
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        return [null, selectedHtml];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function duplicateNote(noteId, parentNoteId) {
 | 
			
		||||
    const {note} = await server.post(`notes/${noteId}/duplicate/${parentNoteId}`);
 | 
			
		||||
 | 
			
		||||
    await ws.waitForMaxKnownSyncId();
 | 
			
		||||
 | 
			
		||||
    await appContext.activateOrOpenNote(note.noteId);
 | 
			
		||||
 | 
			
		||||
    const origNote = await treeCache.getNote(noteId);
 | 
			
		||||
    toastService.showMessage(`Note "${origNote.title}" has been duplicated`);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
    createNote,
 | 
			
		||||
    createNewTopLevelNote,
 | 
			
		||||
    duplicateNote
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user