mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
basic implementation of "similar notes" widget
This commit is contained in:
parent
bf5a31dcdb
commit
7c60080772
2
db/migrations/0142__similar_notes_widget.sql
Normal file
2
db/migrations/0142__similar_notes_widget.sql
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
|
||||||
|
VALUES ('similarNotesWidget', '{"enabled":false,"expanded":true,"position":60}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
|
@ -51,7 +51,8 @@ export default class SidebarOptions {
|
|||||||
{name: 'linkMap', title: 'Link map'},
|
{name: 'linkMap', title: 'Link map'},
|
||||||
{name: 'noteInfo', title: 'Note info'},
|
{name: 'noteInfo', title: 'Note info'},
|
||||||
{name: 'noteRevisions', title: 'Note revisions'},
|
{name: 'noteRevisions', title: 'Note revisions'},
|
||||||
{name: 'whatLinksHere', title: 'What links here'}
|
{name: 'whatLinksHere', title: 'What links here'},
|
||||||
|
{name: 'similarNotes', title: 'Similar notes'}
|
||||||
].map(widget => {
|
].map(widget => {
|
||||||
widget.option = this.parseJsonSafely(options[widget.name + 'Widget']) || {
|
widget.option = this.parseJsonSafely(options[widget.name + 'Widget']) || {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
@ -65,7 +65,8 @@ class Sidebar {
|
|||||||
import("../widgets/link_map.js"),
|
import("../widgets/link_map.js"),
|
||||||
import("../widgets/note_revisions.js"),
|
import("../widgets/note_revisions.js"),
|
||||||
import("../widgets/attributes.js"),
|
import("../widgets/attributes.js"),
|
||||||
import("../widgets/what_links_here.js")
|
import("../widgets/what_links_here.js"),
|
||||||
|
import("../widgets/similar_notes.js")
|
||||||
])).map(m => m.default);
|
])).map(m => m.default);
|
||||||
|
|
||||||
const options = await optionsService.waitForOptions();
|
const options = await optionsService.waitForOptions();
|
||||||
|
36
src/public/javascripts/widgets/similar_notes.js
Normal file
36
src/public/javascripts/widgets/similar_notes.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import StandardWidget from "./standard_widget.js";
|
||||||
|
import linkService from "../services/link.js";
|
||||||
|
import server from "../services/server.js";
|
||||||
|
import treeCache from "../services/tree_cache.js";
|
||||||
|
|
||||||
|
class SimilarNotesWidget extends StandardWidget {
|
||||||
|
getWidgetTitle() { return "Similar notes"; }
|
||||||
|
|
||||||
|
getMaxHeight() { return "200px"; }
|
||||||
|
|
||||||
|
async doRenderBody() {
|
||||||
|
const similarNoteIds = await server.get('similar_notes/' + this.ctx.note.noteId);
|
||||||
|
|
||||||
|
console.log(similarNoteIds);
|
||||||
|
|
||||||
|
if (similarNoteIds.length === 0) {
|
||||||
|
this.$body.text("No similar notes found ...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await treeCache.getNotes(similarNoteIds); // preload all at once
|
||||||
|
|
||||||
|
const $list = $("<ul>");
|
||||||
|
|
||||||
|
for (const similarNoteId of similarNoteIds) {
|
||||||
|
const $item = $("<li>")
|
||||||
|
.append(await linkService.createNoteLink(similarNoteId));
|
||||||
|
|
||||||
|
$list.append($item);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$body.empty().append($list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SimilarNotesWidget;
|
@ -29,6 +29,7 @@ const ALLOWED_OPTIONS = [
|
|||||||
'linkMapWidget',
|
'linkMapWidget',
|
||||||
'noteRevisionsWidget',
|
'noteRevisionsWidget',
|
||||||
'whatLinksHereWidget',
|
'whatLinksHereWidget',
|
||||||
|
'similarNotesWidget',
|
||||||
'codeNotesMimeTypes'
|
'codeNotesMimeTypes'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
24
src/routes/api/similar_notes.js
Normal file
24
src/routes/api/similar_notes.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
const noteCacheService = require('../../services/note_cache');
|
||||||
|
const repository = require('../../services/repository');
|
||||||
|
|
||||||
|
async function getSimilarNotes(req) {
|
||||||
|
const noteId = req.params.noteId;
|
||||||
|
|
||||||
|
const note = await repository.getNote(noteId);
|
||||||
|
|
||||||
|
if (!note) {
|
||||||
|
return [404, `Note ${noteId} not found.`];
|
||||||
|
}
|
||||||
|
|
||||||
|
const results = await noteCacheService.findNotes(note.title);
|
||||||
|
|
||||||
|
return results
|
||||||
|
.map(r => r.noteId)
|
||||||
|
.filter(similarNoteId => similarNoteId !== noteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getSimilarNotes
|
||||||
|
};
|
@ -34,6 +34,7 @@ const searchRoute = require('./api/search');
|
|||||||
const dateNotesRoute = require('./api/date_notes');
|
const dateNotesRoute = require('./api/date_notes');
|
||||||
const linkMapRoute = require('./api/link_map');
|
const linkMapRoute = require('./api/link_map');
|
||||||
const clipperRoute = require('./api/clipper');
|
const clipperRoute = require('./api/clipper');
|
||||||
|
const similarNotesRoute = require('./api/similar_notes');
|
||||||
|
|
||||||
const log = require('../services/log');
|
const log = require('../services/log');
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
@ -235,6 +236,8 @@ function register(app) {
|
|||||||
route(POST, '/api/clipper/notes', clipperMiddleware, clipperRoute.createNote, apiResultHandler);
|
route(POST, '/api/clipper/notes', clipperMiddleware, clipperRoute.createNote, apiResultHandler);
|
||||||
route(POST, '/api/clipper/open/:noteId', clipperMiddleware, clipperRoute.openNote, apiResultHandler);
|
route(POST, '/api/clipper/open/:noteId', clipperMiddleware, clipperRoute.openNote, apiResultHandler);
|
||||||
|
|
||||||
|
apiRoute(GET, '/api/similar_notes/:noteId', similarNotesRoute.getSimilarNotes);
|
||||||
|
|
||||||
app.use('', router);
|
app.use('', router);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ const build = require('./build');
|
|||||||
const packageJson = require('../../package');
|
const packageJson = require('../../package');
|
||||||
const {TRILIUM_DATA_DIR} = require('./data_dir');
|
const {TRILIUM_DATA_DIR} = require('./data_dir');
|
||||||
|
|
||||||
const APP_DB_VERSION = 141;
|
const APP_DB_VERSION = 142;
|
||||||
const SYNC_VERSION = 10;
|
const SYNC_VERSION = 10;
|
||||||
const CLIPPER_PROTOCOL_VERSION = "1.0";
|
const CLIPPER_PROTOCOL_VERSION = "1.0";
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user