From 42a57b3271575fd323068bf8b9108d00f0b4a5b3 Mon Sep 17 00:00:00 2001 From: Přemysl Eric Janouch Date: Fri, 22 Dec 2023 23:46:27 +0100 Subject: WIP: Global duplicate search --- public/gallery.js | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- public/style.css | 3 +++ 2 files changed, 58 insertions(+), 2 deletions(-) (limited to 'public') diff --git a/public/gallery.js b/public/gallery.js index ee11858..009eb1e 100644 --- a/public/gallery.js +++ b/public/gallery.js @@ -213,7 +213,7 @@ let View = { m(m.route.Link, { href: `/similar/:key`, params: {key: ViewModel.sha1}, - }, "Similar") + }, "Similar"), ]), m('.body', {}, [view, m(ViewBar)]), ]) @@ -302,7 +302,7 @@ let Similar = { m(m.route.Link, { href: `/view/:key`, params: {key: SimilarModel.sha1}, - }, "View") + }, "View"), ]), m('.body', {}, m(SimilarList)), ]) @@ -311,6 +311,58 @@ let Similar = { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +let DuplicatesModel = { + entries: [], + + async reload() { + this.entries = await call('duplicates', {}) + }, +} + +let DuplicatesThumbnail = { + view(vnode) { + const info = vnode.attrs.info + return [ + m(m.route.Link, {href: `/similar/${info.sha1}`}, + m('img', {src: `/thumb/${info.sha1}`, + width: info.thumbW, height: info.thumbH})), + info.occurences, + ] + }, +} + +let DuplicatesList = { + view(vnode) { + if (DuplicatesModel.entries.length == 0) + return "No duplicates" + + return m('.duplicates', {}, DuplicatesModel.entries.map(entry => + m('.row', [ + m(DuplicatesThumbnail, {info: entry.main}), + entry.similar.map(entry => + m(DuplicatesThumbnail, {info: entry})), + ]), + )) + }, +} + +let Duplicates = { + oninit(vnode) { + DuplicatesModel.reload() + }, + + view(vnode) { + return m('.container', {}, [ + m('.header', {}, [ + "Duplicates", + ]), + m('.body', {}, m(DuplicatesList)), + ]) + }, +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + window.addEventListener('load', () => { m.route(document.body, "/browse/", { // The path doesn't need to be escaped, perhaps change that (":key..."). @@ -318,6 +370,7 @@ window.addEventListener('load', () => { "/browse/:key": Browse, "/view/:key": View, "/similar/:key": Similar, + "/duplicates": Duplicates, "/tags": undefined, "/tags/:space": undefined, diff --git a/public/style.css b/public/style.css index d6c2e3f..d18735d 100644 --- a/public/style.css +++ b/public/style.css @@ -54,3 +54,6 @@ ul.sidebar li.child a { .similar h2 { margin: 1em 0 0.5em 0; padding: 0; font-size: 1.2rem; } .similar .row { display: flex; } .similar .row ul { margin: 0; padding: 0 0 0 1.25em; list-style-type: "- "; } + +.duplicates { padding: .5rem; flex-grow: 1; overflow: auto; } +.duplicates .row { display: flex; } -- cgit v1.2.3-70-g09d2