mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-16 02:36:16 +01:00
refactor widgets admin
so we dont load the widget-settings.tpl in the upgrade script and only load areas
This commit is contained in:
@@ -10,10 +10,10 @@ module.exports = {
|
|||||||
const widgets = require('../../widgets');
|
const widgets = require('../../widgets');
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
function (next) {
|
function (next) {
|
||||||
widgetAdmin.get(next);
|
widgetAdmin.getAreas(next);
|
||||||
},
|
},
|
||||||
function (data, next) {
|
function (areas, next) {
|
||||||
async.eachSeries(data.areas, function (area, next) {
|
async.eachSeries(areas, function (area, next) {
|
||||||
if (area.data.length) {
|
if (area.data.length) {
|
||||||
// area.data is actually an array of widgets
|
// area.data is actually an array of widgets
|
||||||
area.widgets = area.data;
|
area.widgets = area.data;
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ var path = require('path');
|
|||||||
var async = require('async');
|
var async = require('async');
|
||||||
var nconf = require('nconf');
|
var nconf = require('nconf');
|
||||||
var benchpress = require('benchpressjs');
|
var benchpress = require('benchpressjs');
|
||||||
var winston = require('winston');
|
|
||||||
|
|
||||||
var plugins = require('../plugins');
|
var plugins = require('../plugins');
|
||||||
var groups = require('../groups');
|
var groups = require('../groups');
|
||||||
@@ -14,7 +13,24 @@ var admin = module.exports;
|
|||||||
|
|
||||||
admin.get = function (callback) {
|
admin.get = function (callback) {
|
||||||
async.parallel({
|
async.parallel({
|
||||||
areas: function (next) {
|
areas: admin.getAreas,
|
||||||
|
availableWidgets: getAvailableWidgets,
|
||||||
|
}, function (err, widgetData) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
callback(false, {
|
||||||
|
templates: buildTemplatesFromAreas(widgetData.areas),
|
||||||
|
areas: widgetData.areas,
|
||||||
|
availableWidgets: widgetData.availableWidgets,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
admin.getAreas = function (callback) {
|
||||||
|
async.waterfall([
|
||||||
|
function (next) {
|
||||||
var defaultAreas = [
|
var defaultAreas = [
|
||||||
{ name: 'Global Sidebar', template: 'global', location: 'sidebar' },
|
{ name: 'Global Sidebar', template: 'global', location: 'sidebar' },
|
||||||
{ name: 'Global Header', template: 'global', location: 'header' },
|
{ name: 'Global Header', template: 'global', location: 'header' },
|
||||||
@@ -26,61 +42,36 @@ admin.get = function (callback) {
|
|||||||
|
|
||||||
plugins.fireHook('filter:widgets.getAreas', defaultAreas, next);
|
plugins.fireHook('filter:widgets.getAreas', defaultAreas, next);
|
||||||
},
|
},
|
||||||
widgets: function (next) {
|
function (areas, next) {
|
||||||
|
areas.push({ name: 'Draft Zone', template: 'global', location: 'drafts' });
|
||||||
|
async.map(areas, function (area, next) {
|
||||||
|
require('./index').getArea(area.template, area.location, function (err, areaData) {
|
||||||
|
area.data = areaData;
|
||||||
|
next(err, area);
|
||||||
|
});
|
||||||
|
}, next);
|
||||||
|
},
|
||||||
|
], callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
function getAvailableWidgets(callback) {
|
||||||
|
async.parallel({
|
||||||
|
availableWidgets: function (next) {
|
||||||
plugins.fireHook('filter:widgets.getWidgets', [], next);
|
plugins.fireHook('filter:widgets.getWidgets', [], next);
|
||||||
},
|
},
|
||||||
adminTemplate: function (next) {
|
adminTemplate: function (next) {
|
||||||
renderAdminTemplate(next);
|
renderAdminTemplate(next);
|
||||||
},
|
},
|
||||||
}, function (err, widgetData) {
|
}, function (err, results) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
widgetData.areas.push({ name: 'Draft Zone', template: 'global', location: 'drafts' });
|
results.availableWidgets.forEach(function (w) {
|
||||||
|
w.content += results.adminTemplate;
|
||||||
async.each(widgetData.areas, function (area, next) {
|
|
||||||
require('./index').getArea(area.template, area.location, function (err, areaData) {
|
|
||||||
area.data = areaData;
|
|
||||||
next(err);
|
|
||||||
});
|
|
||||||
}, function (err) {
|
|
||||||
if (err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
widgetData.widgets.forEach(function (w) {
|
|
||||||
w.content += widgetData.adminTemplate;
|
|
||||||
});
|
|
||||||
|
|
||||||
var templates = [];
|
|
||||||
var list = {};
|
|
||||||
var index = 0;
|
|
||||||
|
|
||||||
widgetData.areas.forEach(function (area) {
|
|
||||||
if (typeof list[area.template] === 'undefined') {
|
|
||||||
list[area.template] = index;
|
|
||||||
templates.push({
|
|
||||||
template: area.template,
|
|
||||||
areas: [],
|
|
||||||
});
|
|
||||||
|
|
||||||
index += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
templates[list[area.template]].areas.push({
|
|
||||||
name: area.name,
|
|
||||||
location: area.location,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
callback(false, {
|
|
||||||
templates: templates,
|
|
||||||
areas: widgetData.areas,
|
|
||||||
availableWidgets: widgetData.widgets,
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
callback(null, results.availableWidgets);
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
function renderAdminTemplate(callback) {
|
function renderAdminTemplate(callback) {
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
@@ -98,10 +89,29 @@ function renderAdminTemplate(callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getSource(callback) {
|
function getSource(callback) {
|
||||||
fs.readFile(path.resolve(nconf.get('views_dir'), 'admin/partials/widget-settings.tpl'), 'utf8', function (err, source) {
|
fs.readFile(path.resolve(nconf.get('views_dir'), 'admin/partials/widget-settings.tpl'), 'utf8', callback);
|
||||||
if (err) {
|
}
|
||||||
winston.error(err);
|
|
||||||
}
|
function buildTemplatesFromAreas(areas) {
|
||||||
callback(null, source || '');
|
const templates = [];
|
||||||
});
|
var list = {};
|
||||||
|
var index = 0;
|
||||||
|
|
||||||
|
areas.forEach(function (area) {
|
||||||
|
if (typeof list[area.template] === 'undefined') {
|
||||||
|
list[area.template] = index;
|
||||||
|
templates.push({
|
||||||
|
template: area.template,
|
||||||
|
areas: [],
|
||||||
|
});
|
||||||
|
|
||||||
|
index += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
templates[list[area.template]].areas.push({
|
||||||
|
name: area.name,
|
||||||
|
location: area.location,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return templates;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user