mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01:00 
			
		
		
		
	refactoring and fixes for saved note
This commit is contained in:
		
							
								
								
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -2669,9 +2669,9 @@
 | 
			
		||||
      "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA=="
 | 
			
		||||
    },
 | 
			
		||||
    "electron": {
 | 
			
		||||
      "version": "8.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/electron/-/electron-8.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-vBXUKRqTUq0jv1upvISdvScDDH3uCPwXj4eA5BeR3UDbJp2hOhq7eJxwjIQbfLQql98aYz4X6pSlzBnhfyQqHA==",
 | 
			
		||||
      "version": "9.0.0-beta.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/electron/-/electron-9.0.0-beta.1.tgz",
 | 
			
		||||
      "integrity": "sha512-OUqCC/aGYjFb2cA2ta1eBcjBW9yembcwtOQ9jKu75Lk3zTIVPavKLQxkC0LDy1FqTL9/Et8VtBI86EDvnFm3xw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@electron/get": "^1.0.1",
 | 
			
		||||
@@ -3790,9 +3790,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "file-type": {
 | 
			
		||||
      "version": "14.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/file-type/-/file-type-14.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-fGmNwmRgDi3uMDNbJfRRKaOUGN/uzeWRl2Ti9RJdvLpzFMKbl5cBGP3ngHYKiBSbHPB8wzMckP9x9SixJDFftg==",
 | 
			
		||||
      "version": "14.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/file-type/-/file-type-14.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-9NI4+QzDlEPB6OETc/FcJt8i8vNT396VweRwEwLcE07MnorWkZDopNuc+MeoYA7ArbzoK044JbaDExWys8deTQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "readable-web-to-node-stream": "^2.0.0",
 | 
			
		||||
        "strtok3": "^6.0.0",
 | 
			
		||||
@@ -6858,9 +6858,9 @@
 | 
			
		||||
      "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
 | 
			
		||||
    },
 | 
			
		||||
    "node-abi": {
 | 
			
		||||
      "version": "2.14.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.14.0.tgz",
 | 
			
		||||
      "integrity": "sha512-y54KGgEOHnRHlGQi7E5UiryRkH8bmksmQLj/9iLAjoje743YS+KaKB/sDYXgqtT0J16JT3c3AYJZNI98aU/kYg==",
 | 
			
		||||
      "version": "2.15.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.15.0.tgz",
 | 
			
		||||
      "integrity": "sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "semver": "^5.4.1"
 | 
			
		||||
      },
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@
 | 
			
		||||
    "electron-window-state": "5.0.3",
 | 
			
		||||
    "express": "4.17.1",
 | 
			
		||||
    "express-session": "1.17.0",
 | 
			
		||||
    "file-type": "14.1.1",
 | 
			
		||||
    "file-type": "14.1.2",
 | 
			
		||||
    "fs-extra": "8.1.0",
 | 
			
		||||
    "helmet": "3.21.2",
 | 
			
		||||
    "html": "1.0.0",
 | 
			
		||||
@@ -53,7 +53,7 @@
 | 
			
		||||
    "jimp": "0.9.3",
 | 
			
		||||
    "mime-types": "2.1.26",
 | 
			
		||||
    "multer": "1.4.2",
 | 
			
		||||
    "node-abi": "2.14.0",
 | 
			
		||||
    "node-abi": "2.15.0",
 | 
			
		||||
    "open": "7.0.2",
 | 
			
		||||
    "portscanner": "2.2.0",
 | 
			
		||||
    "rand-token": "0.4.0",
 | 
			
		||||
@@ -75,7 +75,7 @@
 | 
			
		||||
    "ws": "7.2.1"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "electron": "8.0.0",
 | 
			
		||||
    "electron": "9.0.0-beta.1",
 | 
			
		||||
    "electron-builder": "22.3.2",
 | 
			
		||||
    "electron-packager": "14.2.1",
 | 
			
		||||
    "electron-rebuild": "1.10.0",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,6 @@ import ws from './services/ws.js';
 | 
			
		||||
import noteType from './widgets/note_type.js';
 | 
			
		||||
import protectedSessionService from './services/protected_session.js';
 | 
			
		||||
import protectedSessionHolder from './services/protected_session_holder.js';
 | 
			
		||||
import searchNotesService from './services/search_notes.js';
 | 
			
		||||
import FrontendScriptApi from './services/frontend_script_api.js';
 | 
			
		||||
import ScriptContext from './services/script_context.js';
 | 
			
		||||
import sync from './services/sync.js';
 | 
			
		||||
@@ -135,9 +134,22 @@ window.glob.importMarkdownInline = async () => {
 | 
			
		||||
    dialog.importMarkdownInline();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
macInit.init();
 | 
			
		||||
window.glob.SEARCH_HELP_TEXT = `
 | 
			
		||||
<strong>Search tips</strong> - also see <button class="btn btn-sm" type="button" data-help-page="Search">complete help on search</button>
 | 
			
		||||
<p>
 | 
			
		||||
<ul>
 | 
			
		||||
    <li>Just enter any text for full text search</li>
 | 
			
		||||
    <li><code>@abc</code> - returns notes with label abc</li>
 | 
			
		||||
    <li><code>@year=2019</code> - matches notes with label <code>year</code> having value <code>2019</code></li>
 | 
			
		||||
    <li><code>@rock @pop</code> - matches notes which have both <code>rock</code> and <code>pop</code> labels</li>
 | 
			
		||||
    <li><code>@rock or @pop</code> - only one of the labels must be present</li>
 | 
			
		||||
    <li><code>@year<=2000</code> - numerical comparison (also >, >=, <).</li>
 | 
			
		||||
    <li><code>@dateCreated>=MONTH-1</code> - notes created in the last month</li>
 | 
			
		||||
    <li><code>=handler</code> - will execute script defined in <code>handler</code> relation to get results</li>
 | 
			
		||||
</ul>
 | 
			
		||||
</p>`;
 | 
			
		||||
 | 
			
		||||
searchNotesService.init(); // should be in front of treeService since that one manipulates address bar hash
 | 
			
		||||
macInit.init();
 | 
			
		||||
 | 
			
		||||
appContext.start();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
import searchNotesService from '../services/search_notes.js';
 | 
			
		||||
import noteAutocompleteService from '../services/note_autocomplete.js';
 | 
			
		||||
import utils from "../services/utils.js";
 | 
			
		||||
import appContext from "../services/app_context.js";
 | 
			
		||||
 
 | 
			
		||||
@@ -1,42 +0,0 @@
 | 
			
		||||
import toastService from "./toast.js";
 | 
			
		||||
import appContext from "./app_context.js";
 | 
			
		||||
 | 
			
		||||
const helpText = `
 | 
			
		||||
<strong>Search tips</strong> - also see <button class="btn btn-sm" type="button" data-help-page="Search">complete help on search</button>
 | 
			
		||||
<p>
 | 
			
		||||
<ul>
 | 
			
		||||
    <li>Just enter any text for full text search</li>
 | 
			
		||||
    <li><code>@abc</code> - returns notes with label abc</li>
 | 
			
		||||
    <li><code>@year=2019</code> - matches notes with label <code>year</code> having value <code>2019</code></li>
 | 
			
		||||
    <li><code>@rock @pop</code> - matches notes which have both <code>rock</code> and <code>pop</code> labels</li>
 | 
			
		||||
    <li><code>@rock or @pop</code> - only one of the labels must be present</li>
 | 
			
		||||
    <li><code>@year<=2000</code> - numerical comparison (also >, >=, <).</li>
 | 
			
		||||
    <li><code>@dateCreated>=MONTH-1</code> - notes created in the last month</li>
 | 
			
		||||
    <li><code>=handler</code> - will execute script defined in <code>handler</code> relation to get results</li>
 | 
			
		||||
</ul>
 | 
			
		||||
</p>`;
 | 
			
		||||
 | 
			
		||||
async function refreshSearch() {
 | 
			
		||||
    // FIXME
 | 
			
		||||
    const activeNode = appContext.getMainNoteTree().getActiveNode();
 | 
			
		||||
 | 
			
		||||
    activeNode.load(true);
 | 
			
		||||
    activeNode.setExpanded(true);
 | 
			
		||||
 | 
			
		||||
    toastService.showMessage("Saved search note refreshed.");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function init() {
 | 
			
		||||
    const hashValue = document.location.hash ? document.location.hash.substr(1) : ""; // strip initial #
 | 
			
		||||
 | 
			
		||||
    if (hashValue.startsWith("search=")) {
 | 
			
		||||
        showSearch();
 | 
			
		||||
        doSearch(hashValue.substr(7));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
    refreshSearch,
 | 
			
		||||
    init,
 | 
			
		||||
    getHelpText: () => helpText
 | 
			
		||||
};
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
import hoistedNoteService from "../services/hoisted_note.js";
 | 
			
		||||
import searchNotesService from "../services/search_notes.js";
 | 
			
		||||
import treeService from "../services/tree.js";
 | 
			
		||||
import utils from "../services/utils.js";
 | 
			
		||||
import contextMenuWidget from "../services/context_menu.js";
 | 
			
		||||
@@ -12,6 +11,7 @@ import ws from "../services/ws.js";
 | 
			
		||||
import TabAwareWidget from "./tab_aware_widget.js";
 | 
			
		||||
import server from "../services/server.js";
 | 
			
		||||
import noteCreateService from "../services/note_create.js";
 | 
			
		||||
import toastService from "../services/toast.js";
 | 
			
		||||
 | 
			
		||||
const TPL = `
 | 
			
		||||
<div class="tree">
 | 
			
		||||
@@ -41,7 +41,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
 | 
			
		||||
        this.$widget = $(TPL);
 | 
			
		||||
 | 
			
		||||
        this.$widget.on("click", ".unhoist-button", hoistedNoteService.unhoist);
 | 
			
		||||
        this.$widget.on("click", ".refresh-search-button", searchNotesService.refreshSearch);
 | 
			
		||||
        this.$widget.on("click", ".refresh-search-button", () => this.refreshSearch());
 | 
			
		||||
 | 
			
		||||
        // fancytree doesn't support middle click so this is a way to support it
 | 
			
		||||
        this.$widget.on('mousedown', '.fancytree-title', e => {
 | 
			
		||||
@@ -438,6 +438,15 @@ export default class NoteTreeWidget extends TabAwareWidget {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async refreshSearch() {
 | 
			
		||||
        const activeNode = this.getActiveNode();
 | 
			
		||||
 | 
			
		||||
        activeNode.load(true);
 | 
			
		||||
        activeNode.setExpanded(true);
 | 
			
		||||
 | 
			
		||||
        toastService.showMessage("Saved search note refreshed.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async entitiesReloadedListener({loadResults}) {
 | 
			
		||||
        const noteIdsToUpdate = new Set();
 | 
			
		||||
        const noteIdsToReload = new Set();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,4 @@
 | 
			
		||||
import BasicWidget from "./basic_widget.js";
 | 
			
		||||
import searchService from "../services/search_notes.js";
 | 
			
		||||
import treeCache from "../services/tree_cache.js";
 | 
			
		||||
import toastService from "../services/toast.js";
 | 
			
		||||
import appContext from "../services/app_context.js";
 | 
			
		||||
import noteCreateService from "../services/note_create.js";
 | 
			
		||||
@@ -109,14 +107,13 @@ export default class SearchBoxWidget extends BasicWidget {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // FIXME
 | 
			
		||||
        let activeNode = appContext.getMainNoteTree().getActiveNode();
 | 
			
		||||
        const parentNote = await treeCache.getNote(activeNode.data.noteId);
 | 
			
		||||
        let activeNote = appContext.tabManager.getActiveTabNote();
 | 
			
		||||
 | 
			
		||||
        if (parentNote.type === 'search') {
 | 
			
		||||
            activeNode = activeNode.getParent();
 | 
			
		||||
        if (activeNote.type === 'search') {
 | 
			
		||||
            activeNote = (await activeNote.getParentNotes())[0];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        await noteCreateService.createNote(activeNode.data.noteId, {
 | 
			
		||||
        await noteCreateService.createNote(activeNote.noteId, {
 | 
			
		||||
            type: "search",
 | 
			
		||||
            mime: "application/json",
 | 
			
		||||
            title: searchString,
 | 
			
		||||
@@ -134,7 +131,7 @@ export default class SearchBoxWidget extends BasicWidget {
 | 
			
		||||
        this.$searchBox.tooltip({
 | 
			
		||||
            trigger: 'focus',
 | 
			
		||||
            html: true,
 | 
			
		||||
            title: searchService.getHelpText(),
 | 
			
		||||
            title: window.glob.SEARCH_HELP_TEXT,
 | 
			
		||||
            placement: 'right',
 | 
			
		||||
            delay: {
 | 
			
		||||
                show: 500, // necessary because sliding out may cause wrong position
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
import searchNotesService from "../../services/search_notes.js";
 | 
			
		||||
import TypeWidget from "./type_widget.js";
 | 
			
		||||
 | 
			
		||||
const TPL = `
 | 
			
		||||
@@ -6,11 +5,6 @@ const TPL = `
 | 
			
		||||
    <div style="display: flex; align-items: center; margin-right: 20px; margin-top: 15px;">
 | 
			
		||||
        <strong>Search string:    </strong>
 | 
			
		||||
        <textarea rows="4" style="width: auto !important; flex-grow: 4" class="search-string form-control"></textarea>
 | 
			
		||||
 | 
			
		||||
        <span>
 | 
			
		||||
               
 | 
			
		||||
            <button type="button" class="btn btn-primary note-detail-search-refresh-results-button">Refresh search results</button>
 | 
			
		||||
        </span>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <br />
 | 
			
		||||
@@ -26,19 +20,12 @@ export default class SearchTypeWidget extends TypeWidget {
 | 
			
		||||
        this.$searchString = this.$widget.find(".search-string");
 | 
			
		||||
        this.$component = this.$widget.find('.note-detail-search');
 | 
			
		||||
        this.$help = this.$widget.find(".note-detail-search-help");
 | 
			
		||||
        this.$refreshButton = this.$widget.find('.note-detail-search-refresh-results-button');
 | 
			
		||||
 | 
			
		||||
        this.$refreshButton.on('click', async () => {
 | 
			
		||||
            await this.spacedUpdate.updateNowIfNecessary();
 | 
			
		||||
 | 
			
		||||
            await searchNotesService.refreshSearch();
 | 
			
		||||
        });
 | 
			
		||||
        
 | 
			
		||||
        return this.$widget;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async doRefresh(note) {
 | 
			
		||||
        this.$help.html(searchNotesService.getHelpText());
 | 
			
		||||
        this.$help.html(window.glob.SEARCH_HELP_TEXT);
 | 
			
		||||
 | 
			
		||||
        this.$component.show();
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +40,7 @@ export default class SearchTypeWidget extends TypeWidget {
 | 
			
		||||
            this.$searchString.val('');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.$searchString.on('input', () => this.noteChanged());
 | 
			
		||||
        this.$searchString.on('input', () => this.spacedUpdate.scheduleUpdate());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getContent() {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user