From 9a5bd1634215dc479b3a608b2d5f241955e10722 Mon Sep 17 00:00:00 2001 From: Alessandro <51910404+aledipa@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:18:55 +0200 Subject: [PATCH] Added a browsing mechanism similar to the original's Wikipedia one --- dist/index.js | 27 ++++++++++++++++++-- dist/index.js.map | 2 +- dist/views/search.html | 57 ++++++++++++++++++++++++++++++++++++++++++ src/index.ts | 30 ++++++++++++++++++++-- 4 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 dist/views/search.html diff --git a/dist/index.js b/dist/index.js index 57f4ef0..ee8c3f5 100644 --- a/dist/index.js +++ b/dist/index.js @@ -32,12 +32,26 @@ app.get('/result', (req, res) => { try { req.query.search = setPhraseCapitalFirstLetters(req.query.search); const summary = await wiki.summary(req.query.search, { autoSuggest: false }); + if (summary.extract.includes("refer to:")) { + throw new Error("No specific summary found"); + } res.render(__dirname + '/views/result.html', { title: summary.title, description: summary.description, summary: summary.extract }); //Response of type @wikiSummary - contains the intro and the main image } catch (error) { - const summary = await wiki.summary("HTTP 404", { autoSuggest: false }); - res.render(__dirname + '/views/result.html', { title: summary.title, description: summary.description, summary: summary.extract }); + const search_results = await wiki.search(req.query.search, { suggestion: true, limit: 10 }); + if (search_results.results.length > 0) { + var links = []; + for (let i = 0; i < search_results.results.length; i++) { + links.push(formatSpaces(linkFromTitle(search_results.results[i].title), '_')); + } + res.render(__dirname + '/views/search.html', { title: req.query.search, description: "Topics referred to by the same term", search_results: search_results.results, links: links }); + // console.log("Search result link 1: " + linkFromTitle(search_results.results[0].title)); + } + else { + const summary = await wiki.summary("HTTP 404", { autoSuggest: false }); + res.render(__dirname + '/views/result.html', { title: summary.title, description: summary.description, summary: summary.extract }); + } //=> Typeof wikiError } })(); @@ -67,4 +81,13 @@ function setPhraseCapitalFirstLetters(phrase) { }); return capitalizedWords.join(' '); } +// Replaces spaces with underscores +function formatSpaces(phrase, replacement) { + let words = phrase.split(' '); + return words.join(replacement); +} +// Creates the link of the result option +function linkFromTitle(title) { + return "/result?search=" + title; +} //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index 35c041a..c62d375 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/views/search.html b/dist/views/search.html new file mode 100644 index 0000000..5536509 --- /dev/null +++ b/dist/views/search.html @@ -0,0 +1,57 @@ + + + + + + + + + + miniWikipedia - <%= title %> + + + + + + + +
+

<%= title %>

+

<%= description %>

+
+ + +
<%= search_results[1].title %>
+
<%= search_results[2].title %>
+
<%= search_results[3].title %>
+
<%= search_results[4].title %>
+
<%= search_results[5].title %>
+
<%= search_results[6].title %>
+
<%= search_results[7].title %>
+
<%= search_results[8].title %>
+
<%= search_results[9].title %>
+
+ + \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 261a33b..5de05aa 100644 --- a/src/index.ts +++ b/src/index.ts @@ -37,11 +37,24 @@ app.get('/result', (req, res) => { try { req.query.search = setPhraseCapitalFirstLetters(req.query.search); const summary = await wiki.summary(req.query.search, {autoSuggest: false}); + if (summary.extract.includes("refer to:")) { + throw new Error("No specific summary found"); + } res.render(__dirname + '/views/result.html', {title:summary.title, description:summary.description, summary:summary.extract}); //Response of type @wikiSummary - contains the intro and the main image } catch (error) { - const summary = await wiki.summary("HTTP 404", {autoSuggest: false}); - res.render(__dirname + '/views/result.html', {title:summary.title, description:summary.description, summary:summary.extract}); + const search_results = await wiki.search(req.query.search, {suggestion: true, limit: 10}); + if (search_results.results.length > 0) { + var links:Array = []; + for (let i=0; i Typeof wikiError } })(); @@ -73,3 +86,16 @@ function setPhraseCapitalFirstLetters(phrase: string) { }); return capitalizedWords.join(' '); } + +// Replaces spaces with underscores +function formatSpaces(phrase: string, replacement: string) { + let words = phrase.split(' '); + return words.join(replacement); +} + + +// Creates the link of the result option +function linkFromTitle(title: string) { + return "/result?search=" + title; +} +