+1
flake.nix
+1
flake.nix
+40
-1
src/routes/index.js
+40
-1
src/routes/index.js
···
102
102
res.render("subs", { subs, user: req.user });
103
103
});
104
104
105
-
// GET /search-subreddits
105
+
// GET /search
106
106
router.get("/search", authenticateToken, async (req, res) => {
107
+
res.render("search", { user: req.user });
108
+
});
109
+
110
+
// GET /sub-search
111
+
router.get("/sub-search", authenticateToken, async (req, res) => {
107
112
if (!req.query || !req.query.q) {
108
113
res.render("sub-search", { user: req.user });
109
114
} else {
···
133
138
res.render("sub-search", {
134
139
items,
135
140
subs,
141
+
after,
142
+
message,
143
+
user: req.user,
144
+
original_query: req.query.q,
145
+
});
146
+
}
147
+
});
148
+
149
+
// GET /post-search
150
+
router.get("/post-search", authenticateToken, async (req, res) => {
151
+
if (!req.query || !req.query.q) {
152
+
res.render("post-search", { user: req.user });
153
+
} else {
154
+
const { q, options } = req.query.q.split(/\s+/).reduce(
155
+
(acc, word) => {
156
+
if (word.startsWith("+")) {
157
+
acc.options.push(word.slice(1));
158
+
} else {
159
+
acc.q += `${word} `;
160
+
}
161
+
return acc;
162
+
},
163
+
{ options: [], q: "" },
164
+
);
165
+
166
+
const { items, after } = await G.searchSubmissions(q, {
167
+
include_over_18: options.includes("nsfw"),
168
+
});
169
+
const message =
170
+
items.length === 0
171
+
? "no results found"
172
+
: `showing ${items.length} results`;
173
+
res.render("post-search", {
174
+
items,
136
175
after,
137
176
message,
138
177
user: req.user,
+23
src/views/post-search.pug
+23
src/views/post-search.pug
···
1
+
include ../mixins/post
2
+
include ../mixins/header
3
+
include ../mixins/head
4
+
5
+
doctype html
6
+
html
7
+
+head("search posts")
8
+
include ../mixins/subUtils
9
+
body
10
+
main#content
11
+
+header(user)
12
+
div.hero
13
+
h1 search posts
14
+
form(action="/post-search" method="get").search-bar
15
+
- var prefill = original_query ?? "";
16
+
input(type="text" name="q" placeholder="search posts" value=prefill required).search-input
17
+
button(type="submit").search-button go
18
+
if message
19
+
div.search-message
20
+
i #{message}
21
+
if items
22
+
each item in items
23
+
+post(item.data)
+54
src/views/search.pug
+54
src/views/search.pug
···
1
+
include ../mixins/header
2
+
include ../mixins/head
3
+
4
+
doctype html
5
+
html
6
+
+head("search subreddits")
7
+
include ../mixins/subUtils
8
+
body
9
+
main#content
10
+
+header(user)
11
+
div.hero
12
+
h1 search subreddits
13
+
14
+
form(action="/sub-search" method="get").search-bar
15
+
- var prefill = original_query ?? "";
16
+
input(type="text" name="q" placeholder="search subreddits" value=prefill required).search-input
17
+
button(type="submit").search-button go
18
+
19
+
h1 search posts
20
+
21
+
form(action="/post-search" method="get").search-bar
22
+
- var prefill = original_query ?? "";
23
+
input(type="text" name="q" placeholder="search posts" value=prefill required).search-input
24
+
button(type="submit").search-button go
25
+
26
+
hr
27
+
28
+
h3 tips
29
+
p
30
+
| you can narrow search results using filters:
31
+
br
32
+
-
33
+
var triples = [
34
+
["subreddit", "ohio", "find submissions in 'r/ohio'"],
35
+
["author", "spez", "find submissions by 'u/spez'"],
36
+
["site", "x.com", "find submissions from 'x.com'"],
37
+
["url", "text", "search for 'text' in url"],
38
+
["selftext", "text", "search for 'text' in post contents"],
39
+
["self", "yes/no", "include/exclude selftext posts"],
40
+
["nsfw", "yes/no", "include/exclude over-18 posts"],
41
+
]
42
+
43
+
ul
44
+
each triple in triples
45
+
li
46
+
strong
47
+
| #{triple[0]}:
48
+
em #{triple[1]}
49
+
| #{triple[2]}
50
+
| example:
51
+
br
52
+
|
53
+
code subreddit:iowa site:x.com elections
54
+
+2
-2
src/views/sub-search.pug
+2
-2
src/views/sub-search.pug
···
10
10
+header(user)
11
11
div.hero
12
12
h1 search subreddits
13
-
form(action="/search" method="get").search-bar
13
+
form(action="/sub-search" method="get").search-bar
14
14
- var prefill = original_query ?? "";
15
-
input(type="text" name="q" placeholder="search subreddits (add +nsfw to include over-18 results)" value=prefill required).search-input
15
+
input(type="text" name="q" placeholder="search subreddits" value=prefill required).search-input
16
16
button(type="submit").search-button go
17
17
if message
18
18
div.search-message