@ -52,7 +52,7 @@ module.exports = function (middleware) {
] , next ) ;
} ;
middleware . generateHeader = function generateHeader ( req , res , data , callback ) {
async function generateHeader ( req , res , data ) {
var registrationType = meta . config . registrationType || 'normal' ;
res . locals . config = res . locals . config || { } ;
var templateValues = {
@ -73,50 +73,24 @@ module.exports = function (middleware) {
templateValues . configJSON = jsesc ( JSON . stringify ( res . locals . config ) , { isScriptContext : true } ) ;
async . waterfall ( [
function ( next ) {
async . parallel ( {
isAdmin : function ( next ) {
user . isAdministrator ( req . uid , next ) ;
} ,
isGlobalMod : function ( next ) {
user . isGlobalModerator ( req . uid , next ) ;
} ,
isModerator : function ( next ) {
user . isModeratorOfAnyCategory ( req . uid , next ) ;
} ,
privileges : function ( next ) {
privileges . global . get ( req . uid , next ) ;
} ,
user : function ( next ) {
user . getUserData ( req . uid , next ) ;
} ,
isEmailConfirmSent : function ( next ) {
if ( ! meta . config . requireEmailConfirmation || req . uid <= 0 ) {
return next ( null , false ) ;
}
db . get ( 'uid:' + req . uid + ':confirm:email:sent' , next ) ;
} ,
languageDirection : function ( next ) {
translator . translate ( '[[language:dir]]' , res . locals . config . userLang , function ( translated ) {
next ( null , translated ) ;
const results = await utils . promiseParallel ( {
isAdmin : user . isAdministrator ( req . uid ) ,
isGlobalMod : user . isGlobalModerator ( req . uid ) ,
isModerator : user . isModeratorOfAnyCategory ( req . uid ) ,
privileges : privileges . global . get ( req . uid ) ,
user : user . getUserData ( req . uid ) ,
isEmailConfirmSent : ( ! meta . config . requireEmailConfirmation || req . uid <= 0 ) ? false : await db . get ( 'uid:' + req . uid + ':confirm:email:sent' ) ,
languageDirection : translator . translate ( '[[language:dir]]' , res . locals . config . userLang ) ,
browserTitle : translator . translate ( controllers . helpers . buildTitle ( translator . unescape ( data . title ) ) ) ,
navigation : navigation . get ( req . uid ) ,
banned : user . bans . isBanned ( req . uid ) ,
banReason : user . bans . getReason ( req . uid ) ,
unreadData : topics . getUnreadData ( { uid : req . uid } ) ,
unreadChatCount : messaging . getUnreadCount ( req . uid ) ,
unreadNotificationCount : user . notifications . getUnreadCount ( req . uid ) ,
} ) ;
} ,
browserTitle : function ( next ) {
translator . translate ( controllers . helpers . buildTitle ( translator . unescape ( data . title ) ) , function ( translated ) {
next ( null , translated ) ;
} ) ;
} ,
navigation : async . apply ( navigation . get , req . uid ) ,
banned : async . apply ( user . bans . isBanned , req . uid ) ,
banReason : async . apply ( user . bans . getReason , req . uid ) ,
unreadData : async . apply ( topics . getUnreadData , { uid : req . uid } ) ,
unreadChatCount : async . apply ( messaging . getUnreadCount , req . uid ) ,
unreadNotificationCount : async . apply ( user . notifications . getUnreadCount , req . uid ) ,
} , next ) ;
} ,
function ( results , next ) {
if ( results . banned ) {
req . logout ( ) ;
return res . redirect ( '/' ) ;
@ -144,7 +118,7 @@ module.exports = function (middleware) {
templateValues . config . bootswatchSkin = templateValues . bootswatchSkin || 'noskin' ; // TODO remove in v1.12.0+
const unreadCounts = results . unreadData . counts ;
var unreadCount = {
const unreadCount = {
topic : unreadCounts [ '' ] || 0 ,
newTopic : unreadCounts . new || 0 ,
watchedTopic : unreadCounts . watched || 0 ,
@ -207,60 +181,42 @@ module.exports = function (middleware) {
modifyTitle ( templateValues ) ;
}
plugins . fireHook ( 'filter:middleware.renderHeader' , {
const hookReturn = await plugins . fireHook ( 'filter:middleware.renderHeader' , {
req : req ,
res : res ,
templateValues : templateValues ,
data : data ,
} , next ) ;
} ,
] , function ( err , data ) {
callback ( err , data . templateValues ) ;
} ) ;
} ;
middleware . renderHeader = function renderHeader ( req , res , data , callback ) {
async . waterfall ( [
async . apply ( middleware . generateHeader , req , res , data ) ,
function ( templateValues , next ) {
req . app . render ( 'header' , templateValues , next ) ;
} ,
] , callback ) ;
return hookReturn . templateValues ;
}
middleware . renderHeader = async function renderHeader ( req , res , data ) {
return await req . app . renderAsync ( 'header' , await generateHeader ( req , res , data ) ) ;
} ;
middleware . renderFooter = function renderFooter ( req , res , data , callback ) {
async . waterfall ( [
function ( next ) {
plugins . fireHook ( 'filter:middleware.renderFooter' , {
middleware . renderFooter = async function renderFooter ( req , res , templateValues ) {
const data = await plugins . fireHook ( 'filter:middleware.renderFooter' , {
req : req ,
res : res ,
templateValues : data ,
} , next ) ;
} ,
function ( data , next ) {
async . parallel ( {
scripts : async . apply ( plugins . fireHook , 'filter:scripts.get' , [ ] ) ,
timeagoLocale : ( next ) => {
async . waterfall ( [
async . apply ( languages . listCodes ) ,
( languageCodes , next ) => {
templateValues : templateValues ,
} ) ;
const results = await utils . promiseParallel ( {
scripts : plugins . fireHook ( 'filter:scripts.get' , [ ] ) ,
timeagoLocale : ( async ( ) => {
const languageCodes = await languages . listCodes ( ) ;
const userLang = res . locals . config . userLang ;
const timeagoCode = utils . userLangToTimeagoCode ( userLang ) ;
if ( languageCodes . includes ( userLang ) && languages . timeagoCodes . includes ( timeagoCode ) ) {
const pathToLocaleFile = '/vendor/jquery/timeago/locales/jquery.timeago.' + timeagoCode + '.js' ;
next ( null , ( nconf . get ( 'relative_path' ) + '/assets' + pathToLocaleFile ) ) ;
} else {
next ( null , false ) ;
return nconf . get ( 'relative_path' ) + '/assets' + pathToLocaleFile ;
}
} ,
] , next ) ;
} ,
} , function ( err , results ) {
next ( err , data , results ) ;
return false ;
} ) ( ) ,
} ) ;
} ,
function ( data , results , next ) {
if ( results . timeagoLocale ) {
results . scripts . push ( results . timeagoLocale ) ;
}
@ -271,9 +227,8 @@ module.exports = function (middleware) {
data . templateValues . useCustomJS = meta . config . useCustomJS ;
data . templateValues . customJS = data . templateValues . useCustomJS ? meta . config . customJS : '' ;
data . templateValues . isSpider = req . uid === - 1 ;
req . app . render ( 'footer' , data . templateValues , next ) ;
} ,
] , callback ) ;
return await req . app . renderAsync ( 'footer' , data . templateValues ) ;
} ;
function modifyTitle ( obj ) {