-
- {posts.content}
-
+
+ {posts.topic.title}
+
+
+ {posts.content}
+
diff --git a/src/database/mongo.js b/src/database/mongo.js
index f568f3d514..a9cc09c2d4 100644
--- a/src/database/mongo.js
+++ b/src/database/mongo.js
@@ -166,15 +166,8 @@
module.flushdb = function(callback) {
db.dropDatabase(function(err, result) {
- if (err) {
- winston.error(err.message);
- if (typeof callback === 'function') {
- return callback(err);
- }
- }
-
if (typeof callback === 'function') {
- callback();
+ callback(err);
}
});
};
@@ -551,8 +544,8 @@
value = value.toString();
}
var data = {
- score:score,
- value:value
+ score: parseInt(score, 10),
+ value: value
};
db.collection('objects').update({_key:key, value:value}, {$set:data}, {upsert:true, w: 1}, function(err, result) {
diff --git a/src/database/redis.js b/src/database/redis.js
index 4655eabb62..d672994b6c 100644
--- a/src/database/redis.js
+++ b/src/database/redis.js
@@ -117,11 +117,9 @@
module.flushdb = function(callback) {
redisClient.send_command('flushdb', [], function(err) {
- if (err) {
- winston.error(err.message);
- return callback(err);
+ if (typeof callback === 'function') {
+ callback(err);
}
- callback();
});
};
diff --git a/src/install.js b/src/install.js
index 10ca8c39e6..dfd4cf994b 100644
--- a/src/install.js
+++ b/src/install.js
@@ -253,12 +253,6 @@ var async = require('async'),
}, {
field: 'chatMessagesToDisplay',
value: 50
- }, {
- field: 'theme:type',
- value: 'local'
- }, {
- field: 'theme:id',
- value: 'nodebb-theme-cerulean'
}];
async.each(defaults, function (configObj, next) {
@@ -282,6 +276,15 @@ var async = require('async'),
}
}
},
+ function(next) {
+ var meta = require('./meta');
+ winston.info('Enabling default theme: Lavender');
+
+ meta.themes.set({
+ type: 'local',
+ id: 'nodebb-theme-lavender'
+ }, next);
+ },
function (next) {
// Check if an administrator needs to be created
var Groups = require('./groups');
diff --git a/src/meta.js b/src/meta.js
index ad788fdece..f3eb5218bf 100644
--- a/src/meta.js
+++ b/src/meta.js
@@ -89,6 +89,9 @@ var fs = require('fs'),
Meta.themes = {
get: function (callback) {
var themePath = nconf.get('themes_path');
+ if (typeof themePath !== 'string') {
+ return callback(null, []);
+ }
fs.readdir(themePath, function (err, files) {
async.filter(files, function (file, next) {
fs.stat(path.join(themePath, file), function (err, fileStat) {
diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js
index e2b0948cb2..4407adc595 100644
--- a/src/middleware/middleware.js
+++ b/src/middleware/middleware.js
@@ -163,7 +163,6 @@ middleware.renderHeader = function(req, res, callback) {
}],
templateValues = {
bootswatchCSS: meta.config['theme:src'],
- pluginCSS: plugins.cssFiles.map(function(file) { return { path: nconf.get('relative_path') + file.replace(/\\/g, '/') }; }),
title: meta.config.title || '',
description: meta.config.description || '',
'brand:logo': meta.config['brand:logo'] || '',
diff --git a/src/plugins.js b/src/plugins.js
index 44433270eb..0b1d07c1cf 100644
--- a/src/plugins.js
+++ b/src/plugins.js
@@ -63,6 +63,8 @@ var fs = require('fs'),
Plugins.loadedHooks = {};
Plugins.staticDirs = {};
Plugins.cssFiles.length = 0;
+ Plugins.lessFiles.length = 0;
+ Plugins.clientScripts.length = 0;
// Read the list of activated plugins and require their libraries
async.waterfall([
@@ -196,21 +198,22 @@ var fs = require('fs'),
winston.info('[plugins] Found ' + pluginData.css.length + ' CSS file(s) for plugin ' + pluginData.id);
}
- if (!pluginData.staticDir) {
- Plugins.cssFiles = Plugins.cssFiles.concat(pluginData.css.map(function(file) {
- return path.join('/plugins', file);
- }));
- } else {
- winston.warn('[plugins/' + pluginData.id + '] staticDir is deprecated, define CSS files with new staticDirs instead.');
- Plugins.cssFiles = Plugins.cssFiles.concat(pluginData.css.map(function(file) {
- return path.join('/plugins', pluginData.id, file);
- }));
- }
-
- next();
- } else {
- next();
+ Plugins.cssFiles = Plugins.cssFiles.concat(pluginData.css.map(function(file) {
+ if (fs.existsSync(path.join(__dirname, '../node_modules', pluginData.id, file))) {
+ return path.join(pluginData.id, file);
+ } else {
+ // Backwards compatibility with < v0.4.0, remove this for v0.5.0
+ if (pluginData.staticDir) {
+ return path.join(pluginData.id, pluginData.staticDir, file);
+ } else {
+ winston.error('[plugins/' + pluginData.id + '] This plugin\'s CSS is incorrectly configured, please contact the plugin author.');
+ return null;
+ }
+ }
+ }).filter(function(path) { return path })); // Filter out nulls, remove this for v0.5.0
}
+
+ next();
},
function(next) {
// LESS files for plugins
diff --git a/src/routes/meta.js b/src/routes/meta.js
index f2d2af8ad6..ad74931749 100644
--- a/src/routes/meta.js
+++ b/src/routes/meta.js
@@ -50,6 +50,11 @@ function sendStylesheet(req, res, next) {
source += '\n@import "./' + plugins.lessFiles[x] + '";';
}
+ // ... and for each CSS file
+ for(x=0,numCSS=plugins.cssFiles.length;x