refactor widgets admin

so we dont load the widget-settings.tpl in the upgrade script and only load areas
v1.18.x
Barış Soner Uşaklı 6 years ago
parent 9fecad138c
commit c72299ad71

@ -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(null, results.availableWidgets);
callback(false, {
templates: templates,
areas: widgetData.areas,
availableWidgets: widgetData.widgets,
}); });
}); }
});
};
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) {
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;
} }
callback(null, source || '');
templates[list[area.template]].areas.push({
name: area.name,
location: area.location,
});
}); });
return templates;
} }

Loading…
Cancel
Save