From 7c6008077261ab84a3ef48073703e4bd8f2575f1 Mon Sep 17 00:00:00 2001 From: zadam Date: Sun, 1 Sep 2019 08:58:13 +0200 Subject: [PATCH] basic implementation of "similar notes" widget --- db/migrations/0142__similar_notes_widget.sql | 2 ++ .../javascripts/dialogs/options/sidebar.js | 3 +- src/public/javascripts/services/sidebar.js | 3 +- .../javascripts/widgets/similar_notes.js | 36 +++++++++++++++++++ src/routes/api/options.js | 1 + src/routes/api/similar_notes.js | 24 +++++++++++++ src/routes/routes.js | 3 ++ src/services/app_info.js | 2 +- 8 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 db/migrations/0142__similar_notes_widget.sql create mode 100644 src/public/javascripts/widgets/similar_notes.js create mode 100644 src/routes/api/similar_notes.js diff --git a/db/migrations/0142__similar_notes_widget.sql b/db/migrations/0142__similar_notes_widget.sql new file mode 100644 index 000000000..1cfa6d65f --- /dev/null +++ b/db/migrations/0142__similar_notes_widget.sql @@ -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); \ No newline at end of file diff --git a/src/public/javascripts/dialogs/options/sidebar.js b/src/public/javascripts/dialogs/options/sidebar.js index ff0f73e7a..5fc29a712 100644 --- a/src/public/javascripts/dialogs/options/sidebar.js +++ b/src/public/javascripts/dialogs/options/sidebar.js @@ -51,7 +51,8 @@ export default class SidebarOptions { {name: 'linkMap', title: 'Link map'}, {name: 'noteInfo', title: 'Note info'}, {name: 'noteRevisions', title: 'Note revisions'}, - {name: 'whatLinksHere', title: 'What links here'} + {name: 'whatLinksHere', title: 'What links here'}, + {name: 'similarNotes', title: 'Similar notes'} ].map(widget => { widget.option = this.parseJsonSafely(options[widget.name + 'Widget']) || { enabled: true, diff --git a/src/public/javascripts/services/sidebar.js b/src/public/javascripts/services/sidebar.js index 8102fe888..be8688ff8 100644 --- a/src/public/javascripts/services/sidebar.js +++ b/src/public/javascripts/services/sidebar.js @@ -65,7 +65,8 @@ class Sidebar { import("../widgets/link_map.js"), import("../widgets/note_revisions.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); const options = await optionsService.waitForOptions(); diff --git a/src/public/javascripts/widgets/similar_notes.js b/src/public/javascripts/widgets/similar_notes.js new file mode 100644 index 000000000..d1a3bf2e0 --- /dev/null +++ b/src/public/javascripts/widgets/similar_notes.js @@ -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 = $("