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 = $("