diff --git a/public/src/forum/admin/themes.js b/public/src/forum/admin/themes.js index 95881fec63..de6396715b 100644 --- a/public/src/forum/admin/themes.js +++ b/public/src/forum/admin/themes.js @@ -39,7 +39,7 @@ var nodebb_admin = (function(nodebb_admin) { (function() { var scriptEl = document.createElement('script'); - scriptEl.src = 'http://api.bootswatch.com/2/?callback=nodebb_admin.themes.render'; + scriptEl.src = 'http://api.bootswatch.com/3/?callback=nodebb_admin.themes.render'; document.body.appendChild(scriptEl); var bootstrapThemeContainer = document.querySelector('#bootstrap_themes'), @@ -94,7 +94,7 @@ var nodebb_admin = (function(nodebb_admin) { '
' + '
' + ' ' + - '' + + '' + '
' + '

' + themes[x].name + '

' + '

' + diff --git a/src/meta.js b/src/meta.js index 9b0660b70b..5248a68d6b 100644 --- a/src/meta.js +++ b/src/meta.js @@ -42,31 +42,31 @@ var utils = require('./../public/src/utils.js'), Meta.themes = { get: function(callback) { - var themePath = path.join(__dirname, '../', 'public/themes'); + var themePath = path.join(__dirname, '../node_modules'); fs.readdir(themePath, function(err, files) { - var themeArr = []; - async.each(files, function(file, next) { - fs.lstat(path.join(themePath, file), function(err, stats) { - if(stats.isDirectory()) { - var themeDir = file, - themeConfPath = path.join(themePath, themeDir, 'theme.json'); + async.filter(files, function(file, next) { + fs.stat(path.join(themePath, file), function(err, fileStat) { + if (err) next(false); - fs.exists(themeConfPath, function(exists) { - if (exists) { - fs.readFile(themeConfPath, function(err, conf) { - conf = JSON.parse(conf); - conf.src = nconf.get('url') + 'themes/' + themeDir + '/' + conf.src; - if (conf.screenshot) conf.screenshot = nconf.get('url') + 'themes/' + themeDir + '/' + conf.screenshot; - else conf.screenshot = nconf.get('url') + 'images/themes/default.png'; - themeArr.push(conf); - next(); - }); - } else next(); + next((fileStat.isDirectory() && file.slice(0, 13) === 'nodebb-theme-')); + }); + }, function(themes) { + async.map(themes, function(theme, next) { + var config = path.join(themePath, theme, 'theme.json'); + + if (fs.existsSync(config)) { + fs.readFile(config, function(err, file) { + var configObj = JSON.parse(file.toString()); + if (!configObj.screenshot) configObj.screenshot = nconf.get('relative_path') + '/images/themes/default.png'; + next(err, configObj); }); } else next(); + }, function(err, themes) { + themes = themes.filter(function(theme) { + return (theme !== undefined); + }); + callback(null, themes); }); - }, function(err) { - callback(err, themeArr); }); }); }