1-
21'use strict' ;
32
43const nconf = require ( 'nconf' ) ;
54
6- const user = require ( '../user' ) ;
7- const topics = require ( '../topics' ) ;
8- const meta = require ( '../meta' ) ;
9- const helpers = require ( './helpers' ) ;
10- const pagination = require ( '../pagination' ) ;
11- const privileges = require ( '../privileges' ) ;
12-
135const recentController = module . exports ;
146const relative_path = nconf . get ( 'relative_path' ) ;
157
8+ // helper to set title & breadcrumbs
9+ function setTitleAndBreadcrumbs ( data , url , asHome ) {
10+ if ( asHome ) {
11+ data . title = meta . config . homePageTitle || '[[pages:home]]' ;
12+ return ;
13+ }
14+ data . title = `[[pages:${ url } ]]` ;
15+ data . breadcrumbs = helpers . buildBreadcrumbs ( [ { text : `[[${ url } :title]]` } ] ) ;
16+ }
17+
18+ // helper to set RSS fields
19+ function setRssFields ( ctx ) {
20+ const { data, url, req, rssToken } = ctx ;
21+ const disabled = meta . config [ 'feeds:disableRSS' ] || 0 ;
22+
23+ data [ 'feeds:disableRSS' ] = disabled ;
24+ if ( disabled ) return ;
25+
26+ let rss = `${ relative_path } /${ url } .rss` ;
27+ if ( req . loggedIn ) {
28+ rss += `?uid=${ req . uid } &token=${ rssToken } ` ;
29+ }
30+ data . rssFeedUrl = rss ;
31+ }
32+
1633recentController . get = async function ( req , res , next ) {
1734 const data = await recentController . getData ( req , 'recent' , 'recent' ) ;
1835 if ( ! data ) {
1936 return next ( ) ;
2037 }
21-
2238 res . render ( 'recent' , data ) ;
2339} ;
2440
2541recentController . getData = async function ( req , url , sort ) {
2642 const page = parseInt ( req . query . page , 10 ) || 1 ;
27- let term = helpers . terms [ req . query . term ] ;
43+
44+ // single, simplified term logic
45+ const termKey = req . query . term ;
46+ let term = termKey ? helpers . terms [ termKey ] : 'alltime' ;
47+ if ( termKey && ! term ) return null ;
48+
2849 const { cid, tag } = req . query ;
2950 const filter = req . query . filter || '' ;
3051
31- if ( ! term && req . query . term ) {
32- return null ;
33- }
34- term = term || 'alltime' ;
35-
3652 const [ settings , categoryData , tagData , rssToken , canPost , isPrivileged ] = await Promise . all ( [
3753 user . getSettings ( req . uid ) ,
3854 helpers . getSelectedCategory ( cid ) ,
@@ -49,27 +65,23 @@ recentController.getData = async function (req, url, sort) {
4965 cids : cid ,
5066 tags : tag ,
5167 uid : req . uid ,
52- start : start ,
53- stop : stop ,
54- filter : filter ,
55- term : term ,
56- sort : sort ,
68+ start,
69+ stop,
70+ filter,
71+ term,
72+ sort,
5773 floatPinned : req . query . pinned ,
5874 query : req . query ,
5975 } ) ;
6076
61- const isDisplayedAsHome = ! ( req . originalUrl . startsWith ( `${ relative_path } /api/${ url } ` ) || req . originalUrl . startsWith ( `${ relative_path } /${ url } ` ) ) ;
62- const baseUrl = isDisplayedAsHome ? '' : url ;
63-
64- if ( isDisplayedAsHome ) {
65- data . title = meta . config . homePageTitle || '[[pages:home]]' ;
66- } else {
67- data . title = `[[pages:${ url } ]]` ;
68- data . breadcrumbs = helpers . buildBreadcrumbs ( [ { text : `[[${ url } :title]]` } ] ) ;
69- }
77+ // use one computation + helper
78+ const asHome = ! ( req . originalUrl . startsWith ( `${ relative_path } /api/${ url } ` ) || req . originalUrl . startsWith ( `${ relative_path } /${ url } ` ) ) ;
79+ const baseUrl = asHome ? '' : url ;
80+ setTitleAndBreadcrumbs ( data , url , asHome ) ;
7081
7182 const query = { ...req . query } ;
7283 delete query . page ;
84+
7385 data . canPost = canPost ;
7486 data . showSelect = isPrivileged ;
7587 data . showTopicTools = isPrivileged ;
@@ -78,29 +90,15 @@ recentController.getData = async function (req, url, sort) {
7890 data . selectedCids = categoryData . selectedCids ;
7991 data . selectedTag = tagData . selectedTag ;
8092 data . selectedTags = tagData . selectedTags ;
81- data [ 'feeds:disableRSS' ] = meta . config [ 'feeds:disableRSS' ] || 0 ;
82- if ( ! meta . config [ 'feeds:disableRSS' ] ) {
83- data . rssFeedUrl = `${ relative_path } /${ url } .rss` ;
84- if ( req . loggedIn ) {
85- data . rssFeedUrl += `?uid=${ req . uid } &token=${ rssToken } ` ;
86- }
87- }
93+
94+ // single RSS path via helper
95+ setRssFields ( { data, url, req, rssToken } ) ;
8896
8997 data . filters = helpers . buildFilters ( baseUrl , filter , query ) ;
90- data . selectedFilter = data . filters . find ( filter => filter && filter . selected ) ;
91- data . terms = helpers . buildTerms ( baseUrl , term , query ) ;
92- data . selectedTerm = data . terms . find ( term => term && term . selected ) ;
93-
94- const pageCount = Math . max ( 1 , Math . ceil ( data . topicCount / settings . topicsPerPage ) ) ;
95- data . pagination = pagination . create ( page , pageCount , req . query ) ;
96- helpers . addLinkTags ( {
97- url : url ,
98- res : req . res ,
99- tags : data . pagination . rel ,
100- page : page ,
101- } ) ;
98+ data . selectedFilter = data . filters . find ( f => f && f . selected ) ;
99+
102100 return data ;
103101} ;
104102
105-
106103require ( '../promisify' ) ( recentController , [ 'get' ] ) ;
104+
0 commit comments