mirror of
https://github.com/zadam/trilium.git
synced 2025-01-01 12:52:17 +08:00
improvements to search, fixing issue #1
This commit is contained in:
parent
31a69a96c0
commit
7ea23586fe
3 changed files with 27 additions and 19 deletions
|
@ -200,7 +200,7 @@ const noteTree = (function() {
|
|||
return noteList;
|
||||
}
|
||||
|
||||
async function activateNode(notePath) {
|
||||
async function expandToNote(notePath, expandOpts) {
|
||||
assertArguments(notePath);
|
||||
|
||||
const runPath = getRunPath(notePath);
|
||||
|
@ -213,14 +213,22 @@ const noteTree = (function() {
|
|||
const node = getNodesByNoteId(childNoteId).find(node => node.data.parent_note_id === parentNoteId);
|
||||
|
||||
if (childNoteId === noteId) {
|
||||
await node.setActive();
|
||||
return node;
|
||||
}
|
||||
else {
|
||||
await node.setExpanded();
|
||||
await node.setExpanded(true, expandOpts);
|
||||
}
|
||||
|
||||
parentNoteId = childNoteId;
|
||||
}
|
||||
}
|
||||
|
||||
async function activateNode(notePath) {
|
||||
assertArguments(notePath);
|
||||
|
||||
const node = await expandToNote(notePath);
|
||||
|
||||
await node.setActive();
|
||||
|
||||
clearSelectedNodes();
|
||||
}
|
||||
|
@ -841,6 +849,7 @@ const noteTree = (function() {
|
|||
setNoteTreeBackgroundBasedOnProtectedStatus,
|
||||
setProtected,
|
||||
getCurrentNode,
|
||||
expandToNote,
|
||||
activateNode,
|
||||
getCurrentNotePath,
|
||||
getNoteTitle,
|
||||
|
|
|
@ -30,7 +30,7 @@ const searchTree = (function() {
|
|||
return treeEl.fancytree('getTree');
|
||||
}
|
||||
|
||||
searchInputEl.keyup(e => {
|
||||
searchInputEl.keyup(async e => {
|
||||
const searchText = searchInputEl.val();
|
||||
|
||||
if (e && e.which === $.ui.keyCode.ESCAPE || $.trim(searchText) === "") {
|
||||
|
@ -39,12 +39,14 @@ const searchTree = (function() {
|
|||
}
|
||||
|
||||
if (e && e.which === $.ui.keyCode.ENTER) {
|
||||
server.get('notes?search=' + searchText).then(resp => {
|
||||
// Pass a string to perform case insensitive matching
|
||||
getTree().filterBranches(node => {
|
||||
return resp.includes(node.data.note_id);
|
||||
});
|
||||
});
|
||||
const noteIds = await server.get('notes?search=' + encodeURIComponent(searchText));
|
||||
|
||||
for (const noteId of noteIds) {
|
||||
await noteTree.expandToNote(noteId, {noAnimation: true, noEvents: true});
|
||||
}
|
||||
|
||||
// Pass a string to perform case insensitive matching
|
||||
getTree().filterBranches(node => noteIds.includes(node.data.note_id));
|
||||
}
|
||||
}).focus();
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ const auth = require('../../services/auth');
|
|||
const sql = require('../../services/sql');
|
||||
const notes = require('../../services/notes');
|
||||
const log = require('../../services/log');
|
||||
const utils = require('../../services/utils');
|
||||
const protected_session = require('../../services/protected_session');
|
||||
const data_encryption = require('../../services/data_encryption');
|
||||
const tree = require('../../services/tree');
|
||||
|
@ -59,17 +60,13 @@ router.put('/:noteId', auth.checkApiAuth, wrap(async (req, res, next) => {
|
|||
}));
|
||||
|
||||
router.get('/', auth.checkApiAuth, wrap(async (req, res, next) => {
|
||||
const search = '%' + req.query.search + '%';
|
||||
const search = '%' + utils.sanitizeSql(req.query.search) + '%';
|
||||
|
||||
const result = await sql.getAll("SELECT note_id FROM notes WHERE note_title LIKE ? OR note_text LIKE ?", [search, search]);
|
||||
// searching in protected notes is pointless because of encryption
|
||||
const noteIds = await sql.getFirstColumn(`SELECT note_id FROM notes
|
||||
WHERE is_deleted = 0 AND is_protected = 0 AND (note_title LIKE ? OR note_text LIKE ?)`, [search, search]);
|
||||
|
||||
const noteIdList = [];
|
||||
|
||||
for (const res of result) {
|
||||
noteIdList.push(res.note_id);
|
||||
}
|
||||
|
||||
res.send(noteIdList);
|
||||
res.send(noteIds);
|
||||
}));
|
||||
|
||||
router.put('/:noteId/sort', auth.checkApiAuth, wrap(async (req, res, next) => {
|
||||
|
|
Loading…
Reference in a new issue