From b3978d53bb0bd35c7fc3d59741c56287ab8ce56c Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 19 Feb 2014 17:07:47 -0500 Subject: [PATCH] widgets.render --- src/widgets.js | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/widgets.js b/src/widgets.js index 5e9e754d2d..b341c25284 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -1,24 +1,51 @@ var async = require('async'), winston = require('winston'), + plugins = require('./plugins'), db = require('./database'); (function(Widgets) { + Widgets.render = function(uid, area, callback) { + if (!area.location || !area.template) { + callback({ + error: 'Missing location and template data' + }); + } + + var rendered = []; + + Widgets.getArea(area.template, area.location, function(err, widgets) { + async.each(widgets, function(widget, next) { + plugins.fireHook('filter:widget.render:' + widget.widget, { + uid: uid, + area: area, + data: widget.data + }, function(err, html){ + rendered.push({ + html: html + }); + }); + }, function(err) { + callback(err, rendered); + }); + }); + }; + Widgets.getArea = function(template, location, callback) { db.getObjectField('widgets:' + template, location, function(err, widgets) { callback(err, JSON.parse(widgets)); }) }; - Widgets.setArea = function(data, callback) { - if (!data.location || !data.template) { + Widgets.setArea = function(area, callback) { + if (!area.location || !data.template) { callback({ error: 'Missing location and template data' }); } - db.setObjectField('widgets:' + data.template, data.location, JSON.stringify(data.widgets), function(err) { + db.setObjectField('widgets:' + area.template, area.location, JSON.stringify(area.widgets), function(err) { callback(err); }); };