diff --git a/inc/processSubredditAbout.js b/inc/processSubredditAbout.js index 1601fab..aeadf11 100644 --- a/inc/processSubredditAbout.js +++ b/inc/processSubredditAbout.js @@ -3,7 +3,20 @@ module.exports = function() { this.processSubredditAbout = (subreddit, redis, fetch, RedditAPI) => { return new Promise(resolve => { (async () => { - if(subreddit && !subreddit.includes('+')) { + if(subreddit && !subreddit.includes('+') && subreddit !== 'all') { + function returnRelevantKeys(json) { + return { + title: json.data.title, + public_description_html: json.data.public_description_html, + active_user_count: json.data.active_user_count, + subscribers: json.data.subscribers, + created_utc: json.data.created_utc, + over18: json.data.over18, + description_html: json.data.description_html, + moderators: json.moderators + } + } + let key = `${subreddit}:sidebar` redis.get(key, (error, json) => { if(error) { @@ -12,61 +25,65 @@ module.exports = function() { } if(json) { json = JSON.parse(json) - let obj = { - title: json.data.title, - public_description_html: json.data.public_description_html, - active_user_count: json.data.active_user_count, - subscribers: json.data.subscribers, - created_utc: json.data.created_utc, - over18: json.data.over18, - description_html: json.data.description_html - } - resolve(obj) + resolve(returnRelevantKeys(json)) } else { - if(subreddit !== 'all') { - let url = '' - if(config.use_reddit_oauth) - url = `https://oauth.reddit.com/r/${subreddit}/about` - else - url = `https://reddit.com/r/${subreddit}/about.json` - fetch(encodeURI(url), redditApiGETHeaders()) - .then(result => { - if(result.status === 200) { - result.json() - .then(json => { - redis.setex(key, config.setexs.sidebar, JSON.stringify(json), (error) => { - if(error) { - console.error('Error setting the sidebar key to redis.', error) - return res.render('index', { json: null, user_preferences: req.cookies }) - } else { - console.log('Fetched the sidebar from reddit API.'); - (async () => { - let obj = { - title: json.data.title, - public_description_html: json.data.public_description_html, - active_user_count: json.data.active_user_count, - subscribers: json.data.subscribers, - created_utc: json.data.created_utc, - over18: json.data.over18, - description_html: json.data.description_html - } - resolve(obj) - })() + let url = `https://reddit.com/r/${subreddit}/about.json` + if(config.use_reddit_oauth) { + url = `https://oauth.reddit.com/r/${subreddit}/about` + } + fetch(encodeURI(url), redditApiGETHeaders()) + .then(result => { + if(result.status === 200) { + result.json() + .then(json => { + json.moderators = [] + redis.setex(key, config.setexs.sidebar, JSON.stringify(json), (error) => { + if(error) { + console.error('Error setting the sidebar key to redis.', error) + return res.render('index', { json: null, user_preferences: req.cookies }) + } else { + console.log('Fetched the sidebar from reddit API.') + let moderators_url = `https://reddit.com/r/${subreddit}/about/moderators.json` + if(config.use_reddit_oauth) { + moderators_url = `https://oauth.reddit.com/r/${subreddit}/about/moderators` } - }) + fetch(encodeURI(moderators_url), redditApiGETHeaders()) + .then(mod_result => { + if(mod_result.status === 200) { + mod_result.json() + .then(mod_json => { + json.moderators = mod_json + redis.setex(key, config.setexs.sidebar, JSON.stringify(json), (error) => { + if(error) { + console.error('Error setting the sidebar with moderators key to redis.', error) + return res.render('index', { json: null, user_preferences: req.cookies }) + } else { + console.log('Fetched the moderators from reddit API.') + resolve(returnRelevantKeys(json)) + } + }) + }) + } else { + console.error(`Something went wrong while fetching moderators data from reddit API. ${mod_result.status} – ${mod_result.statusText}`) + console.error(config.reddit_api_error_text) + resolve(returnRelevantKeys(json)) + } + }).catch(error => { + console.error('Error fetching moderators.', error) + resolve(returnRelevantKeys(json)) + }) + } }) - } else { + }) + } else { console.error(`Something went wrong while fetching data from reddit API. ${result.status} – ${result.statusText}`) console.error(config.reddit_api_error_text) resolve(null) - } - }).catch(error => { - console.error('Error fetching the sidebar.', error) - resolve(null) - }) - } else { + } + }).catch(error => { + console.error('Error fetching the sidebar.', error) resolve(null) - } + }) } }) } else { diff --git a/static/css/styles.css b/static/css/styles.css index 5864cb9..3b45e44 100644 --- a/static/css/styles.css +++ b/static/css/styles.css @@ -1149,6 +1149,17 @@ footer a { .subreddit-listing li { margin: 15px 0; } +#sidebar .mod-list { + float: left; + width: auto; + margin-top: 25px; +} +#sidebar .mod-list ul { + padding: 7px 0px 0px 20px; +} +#sidebar .mod-list li a { + float: left; +} #sidebar .content .description { margin-top: 38px; } diff --git a/views/subreddit.pug b/views/subreddit.pug index ad8b384..bfdbfe6 100644 --- a/views/subreddit.pug +++ b/views/subreddit.pug @@ -219,6 +219,17 @@ html != unescape(subreddit_about.public_description_html, user_preferences) .description != unescape(subreddit_about.description_html, user_preferences) + if subreddit_about.moderators + if subreddit_about.moderators.kind === 'UserList' + if subreddit_about.moderators.data.children.length > 0 + .mod-list + h4 Moderators + ul + each moderator in subreddit_about.moderators.data.children + li + a(href="/u/"+ moderator.name +"") + p(title=""+ moderator.mod_permissions.join(', ') +"") #{moderator.name} + span.flair #{moderator.author_flair_text} else if subreddit.includes('+') .content