mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-29 01:56:12 +01:00
widget render change
This commit is contained in:
@@ -238,6 +238,9 @@ var db = require('./database'),
|
||||
|
||||
Categories.getModerators = function(cid, callback) {
|
||||
Groups.get('cid:' + cid + ':privileges:mods', {}, function(err, groupObj) {
|
||||
if (err && err === 'group-not-found') {
|
||||
return callback(null, []);
|
||||
}
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
@@ -98,21 +98,15 @@ apiController.renderWidgets = function(req, res, next) {
|
||||
return res.json(200, {});
|
||||
}
|
||||
|
||||
async.each(areas.locations, function(location, next) {
|
||||
widgets.render(uid, {
|
||||
template: areas.template,
|
||||
url: areas.url,
|
||||
location: location
|
||||
locations: areas.locations
|
||||
}, function(err, widgets) {
|
||||
renderedWidgets.push({
|
||||
location: location,
|
||||
widgets: widgets
|
||||
});
|
||||
|
||||
next();
|
||||
});
|
||||
}, function(err) {
|
||||
res.json(200, renderedWidgets);
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
res.json(200, widgets);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -9,26 +9,26 @@ var async = require('async'),
|
||||
|
||||
|
||||
(function(Widgets) {
|
||||
|
||||
Widgets.render = function(uid, area, callback) {
|
||||
if (!area.location || !area.template) {
|
||||
if (!area.locations || !area.template) {
|
||||
callback({
|
||||
error: 'Missing location and template data'
|
||||
});
|
||||
}
|
||||
|
||||
var rendered = [];
|
||||
Widgets.getAreas(['global', area.template], area.locations, function(err, data) {
|
||||
|
||||
async.parallel({
|
||||
global: function(next) {
|
||||
Widgets.getArea('global', area.location, next);
|
||||
},
|
||||
local: function(next) {
|
||||
Widgets.getArea(area.template, area.location, next);
|
||||
var widgetsByLocation = {};
|
||||
|
||||
async.map(area.locations, function(location, done) {
|
||||
widgetsByLocation[location] = data.global[location].concat(data[area.template][location]);
|
||||
|
||||
if (!widgetsByLocation[location].length) {
|
||||
return done(null, {location: location, widgets: []});
|
||||
}
|
||||
}, function(err, data) {
|
||||
var widgets = data.global.concat(data.local);
|
||||
|
||||
async.eachSeries(widgets, function(widget, next) {
|
||||
async.map(widgetsByLocation[location], function(widget, next) {
|
||||
|
||||
if (!widget || !widget.data || (!!widget.data['registered-only'] && uid === 0)) {
|
||||
return next();
|
||||
@@ -38,7 +38,7 @@ var async = require('async'),
|
||||
uid: uid,
|
||||
area: area,
|
||||
data: widget.data
|
||||
}, function(err, html){
|
||||
}, function(err, html) {
|
||||
if (widget.data.container && widget.data.container.match('{body}')) {
|
||||
html = templates.parse(widget.data.container, {
|
||||
title: widget.data.title,
|
||||
@@ -46,15 +46,38 @@ var async = require('async'),
|
||||
});
|
||||
}
|
||||
|
||||
rendered.push({
|
||||
html: html
|
||||
next(err, {html: html});
|
||||
});
|
||||
}, function(err, widgets) {
|
||||
done(err, {location: location, widgets: widgets.filter(Boolean)});
|
||||
});
|
||||
}, callback);
|
||||
});
|
||||
};
|
||||
|
||||
Widgets.getAreas = function(templates, locations, callback) {
|
||||
var keys = templates.map(function(tpl) {
|
||||
return 'widgets:' + tpl;
|
||||
});
|
||||
db.getObjectsFields(keys, locations, function(err, data) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
var returnData = {};
|
||||
|
||||
templates.forEach(function(template, index) {
|
||||
returnData[template] = returnData[template] || {};
|
||||
locations.forEach(function(location) {
|
||||
if (data && data[index] && data[index][location]) {
|
||||
returnData[template][location] = JSON.parse(data[index][location]);
|
||||
} else {
|
||||
returnData[template][location] = [];
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
next(err);
|
||||
});
|
||||
}, function(err) {
|
||||
callback(err, rendered);
|
||||
});
|
||||
callback(null, returnData);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user