add suggested subreddits for search pages (ref #104)
This commit is contained in:
parent
6bcb181cb1
commit
80b67fa3ab
|
@ -15,6 +15,15 @@ module.exports = function() {
|
|||
search_firstpage = true
|
||||
}
|
||||
|
||||
let suggested_subreddits = false
|
||||
if(json.suggested_subreddits) {
|
||||
if(json.suggested_subreddits.data) {
|
||||
if(json.suggested_subreddits.data.children.length > 0) {
|
||||
suggested_subreddits = json.suggested_subreddits.data.children
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(json.data.children) {
|
||||
let view_more_posts = false
|
||||
let posts_limit = 25
|
||||
|
@ -90,7 +99,8 @@ module.exports = function() {
|
|||
search_firstpage: search_firstpage,
|
||||
before: before,
|
||||
after: after,
|
||||
posts: posts
|
||||
posts: posts,
|
||||
suggested_subreddits: suggested_subreddits,
|
||||
}
|
||||
|
||||
resolve(obj)
|
||||
|
|
57
routes.js
57
routes.js
|
@ -916,28 +916,43 @@ module.exports = (app, redis, fetch, RedditAPI) => {
|
|||
if(result.status === 200) {
|
||||
result.json()
|
||||
.then(json => {
|
||||
redis.setex(key, config.setexs.searches, JSON.stringify(json), (error) => {
|
||||
if(error) {
|
||||
console.error('Error setting the searches key to redis.', error)
|
||||
return res.render('index', { json: null, user_preferences: req.cookies })
|
||||
} else {
|
||||
console.log('Fetched search results from Reddit.');
|
||||
(async () => {
|
||||
let processed_json = await processSearchResults(json, true, after, before, req.cookies)
|
||||
return res.render('search', {
|
||||
no_query: false,
|
||||
json: processed_json,
|
||||
q: q,
|
||||
restrict_sr: restrict_sr,
|
||||
nsfw: nsfw,
|
||||
subreddit: subreddit,
|
||||
sortby: sortby,
|
||||
past: past,
|
||||
user_preferences: req.cookies
|
||||
})
|
||||
})()
|
||||
(async () => {
|
||||
/**
|
||||
* Fetch suggested subreddits when the restrict_sr option is
|
||||
* turned off ("limit my search to") and we are on the first search
|
||||
* page (just like in Reddit).
|
||||
*/
|
||||
json.suggested_subreddits = {}
|
||||
if(restrict_sr === 'off' && before == '' && after == '') {
|
||||
let url = `https://reddit.com/subreddits/search.json?q=${q}&include_over_18=${nsfw}&limit=3`
|
||||
const response = await fetch(url)
|
||||
const data = await response.json()
|
||||
json.suggested_subreddits = data
|
||||
}
|
||||
})
|
||||
|
||||
redis.setex(key, config.setexs.searches, JSON.stringify(json), (error) => {
|
||||
if(error) {
|
||||
console.error('Error setting the searches key to redis.', error)
|
||||
return res.render('index', { json: null, user_preferences: req.cookies })
|
||||
} else {
|
||||
console.log('Fetched search results from Reddit.');
|
||||
(async () => {
|
||||
let processed_json = await processSearchResults(json, true, after, before, req.cookies)
|
||||
return res.render('search', {
|
||||
no_query: false,
|
||||
json: processed_json,
|
||||
q: q,
|
||||
restrict_sr: restrict_sr,
|
||||
nsfw: nsfw,
|
||||
subreddit: subreddit,
|
||||
sortby: sortby,
|
||||
past: past,
|
||||
user_preferences: req.cookies
|
||||
})
|
||||
})()
|
||||
}
|
||||
})
|
||||
})()
|
||||
})
|
||||
} else {
|
||||
console.error(`Something went wrong while fetching data from Reddit. ${result.status} – ${result.statusText}`)
|
||||
|
|
|
@ -1228,6 +1228,23 @@ a.sub-to-subreddit.gray {
|
|||
border-radius: 0;
|
||||
margin-bottom: 11px;
|
||||
}
|
||||
/* SUGGESTED SUBREDDITS ON SEARCH PAGES */
|
||||
.suggested-subreddits {
|
||||
margin: 0px 0px 30px 1%;
|
||||
}
|
||||
.suggested-subreddits h3 {
|
||||
border-bottom: 1px solid #7d7d7d;
|
||||
max-width: 820px;
|
||||
margin: 0px 0px 16px 10px;
|
||||
padding: 0px 0px 5px 0px;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.suggested-subreddits .sub-button {
|
||||
margin: 0px 0px 7px 0px;
|
||||
}
|
||||
.suggested-subreddits .description {
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
/* REDDIT STYLES */
|
||||
.md .md-spoiler-text {
|
||||
border-radius:2px;
|
||||
|
|
|
@ -100,6 +100,40 @@ html
|
|||
if json.posts.length === 0 && !no_query
|
||||
p no results
|
||||
else
|
||||
if json.suggested_subreddits
|
||||
.suggested-subreddits
|
||||
h3 suggested subreddits
|
||||
each suggested_subreddit in json.suggested_subreddits
|
||||
.link
|
||||
.entry
|
||||
-
|
||||
let subbed_to_this_subreddit = false
|
||||
let subbed = []
|
||||
if(user_preferences.subbed_subreddits && Array.isArray(user_preferences.subbed_subreddits))
|
||||
subbed = user_preferences.subbed_subreddits
|
||||
for(let i = 0; i < subbed.length; i++) {
|
||||
if(subbed[i].toLowerCase() === suggested_subreddit.data.display_name.toLowerCase())
|
||||
subbed_to_this_subreddit = true
|
||||
}
|
||||
.content
|
||||
.title
|
||||
a(href="" + suggested_subreddit.data.url + "", rel="noopener noreferrer")
|
||||
h2 #{suggested_subreddit.data.display_name_prefixed}: #{cleanTitle(suggested_subreddit.data.title)}
|
||||
.sub-button
|
||||
if subbed_to_this_subreddit
|
||||
a(href="/unsubscribe/" + suggested_subreddit.data.display_name + "?b=/r/" + subreddit + "?q=" + q + "§nsfw=" + nsfw + "", class="sub-to-subreddit gray", title="subscriptions are saved in your browser's cookies") unsubscribe
|
||||
else
|
||||
a(href="/subscribe/" + suggested_subreddit.data.display_name + "?b=/r/" + subreddit + "?q=" + q + "§nsfw=" + nsfw + "", class="sub-to-subreddit", title="subscriptions are saved in your browser's cookies") subscribe
|
||||
.description
|
||||
p #{cleanTitle(suggested_subreddit.data.public_description)}
|
||||
.meta
|
||||
p.subscribers #{kFormatter(suggested_subreddit.data.subscribers)} subscribers,
|
||||
p.submitted created
|
||||
span(title="" + toUTCString(suggested_subreddit.data.created) + "") #{timeDifference(suggested_subreddit.data.created)}
|
||||
.links
|
||||
if suggested_subreddit.data.over_18
|
||||
span.tag.nsfw NSFW
|
||||
a(href="/subreddits/search?q="+ q +"", class="btn") show more similar subreddits
|
||||
each link in json.posts
|
||||
.link
|
||||
.upvotes
|
||||
|
|
Loading…
Reference in New Issue