From 74f2f7caef666d91a9c36a9cf0119b0895741d1f Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 8 Jul 2015 17:04:21 -0400 Subject: [PATCH] fixes #3307 --- public/src/admin/extend/plugins.js | 30 ++-- src/plugins.js | 129 ++++++++++-------- src/plugins/install.js | 7 +- src/views/admin/extend/plugins.tpl | 4 +- .../admin/partials/download_plugin_item.tpl | 2 +- .../admin/partials/installed_plugin_item.tpl | 2 +- 6 files changed, 100 insertions(+), 74 deletions(-) diff --git a/public/src/admin/extend/plugins.js b/public/src/admin/extend/plugins.js index 4987d87552..c12e9f02d7 100644 --- a/public/src/admin/extend/plugins.js +++ b/public/src/admin/extend/plugins.js @@ -181,28 +181,32 @@ define('admin/extend/plugins', function() { socket.emit('admin.plugins.toggleInstall', { id: pluginID, version: version - }, function(err, status) { + }, function(err, pluginData) { if (err) { return app.alertError(err.message); } - if (status.installed) { - btn.html(' Uninstall'); - } else { - btn.html(' Install'); - } + var targetList = (pluginData.installed ? 'installed' : 'download'), + otherList = (pluginData.installed ? 'download' : 'installed'), + payload = {}; - activateBtn.toggleClass('hidden', !status.installed); + payload[targetList] = pluginData; + templates.parse('admin/partials/' + targetList + '_plugin_item', payload, function(html) { + var pluginList = $('ul.' + targetList); - btn.toggleClass('btn-danger', status.installed) - .toggleClass('btn-success', !status.installed) - .attr('disabled', false) - .attr('data-installed', status.installed ? 1 : 0); + pluginList.append(html); + $('ul.' + otherList).find('li[data-plugin-id="' + pluginID + '"]').slideUp('slow', function() { + $(this).remove(); + $('html,body').animate({ + scrollTop: pluginList.find('li').last().offset().top - 48 + }, 1000); + }); + }); app.alert({ alert_id: 'plugin_toggled', - title: 'Plugin ' + (status.installed ? 'Installed' : 'Uninstalled'), - message: status.installed ? 'Plugin successfully installed, please activate the plugin.' : 'The plugin has been successfully deactivated and uninstalled.', + title: 'Plugin ' + (pluginData.installed ? 'Installed' : 'Uninstalled'), + message: pluginData.installed ? 'Plugin successfully installed, please activate the plugin.' : 'The plugin has been successfully deactivated and uninstalled.', type: 'info', timeout: 5000 }); diff --git a/src/plugins.js b/src/plugins.js index 078745742c..af92b1f61b 100644 --- a/src/plugins.js +++ b/src/plugins.js @@ -164,81 +164,100 @@ var fs = require('fs'), }); }; + Plugins.get = function(id, callback) { + var url = (nconf.get('registry') || 'https://packages.nodebb.org') + '/api/v1/plugins/' + id; + console.log(url); + + require('request')(url, { + json: true + }, function(err, res, body) { + Plugins.normalise([body.payload], function(err, normalised) { + return callback(err, !err ? normalised[0] : undefined); + }); + }); + }; + Plugins.getAll = function(callback) { var url = (nconf.get('registry') || 'https://packages.nodebb.org') + '/api/v1/plugins?version=' + require('../package.json').version; - require('request')(url, function(err, res, body) { + require('request')(url, { + json: true + }, function(err, res, body) { var plugins = []; - try { - plugins = JSON.parse(body); - } catch(err) { + if (err) { winston.error('Error parsing plugins : ' + err.message); plugins = []; } - var pluginMap = {}; - for(var i=0; i b.name ) { + return 1; + } else if (a.name < b.name ){ + return -1; + } else { + return 0; } - - pluginArray.sort(function(a, b) { - if (a.name > b.name ) { - return 1; - } else if (a.name < b.name ){ - return -1; - } else { - return 0; - } - }); - - callback(null, pluginArray); }); + + callback(null, pluginArray); }); }); }; diff --git a/src/plugins/install.js b/src/plugins/install.js index 5185d38a70..693e90c866 100644 --- a/src/plugins/install.js +++ b/src/plugins/install.js @@ -96,8 +96,11 @@ module.exports = function(Plugins) { if (err) { return callback(err); } - Plugins.fireHook('action:plugin.' + type, id); - callback(null, {id: id, installed: !installed}); + + Plugins.get(id, function(err, pluginData) { + Plugins.fireHook('action:plugin.' + type, id); + callback(null, pluginData); + }); }); }); } diff --git a/src/views/admin/extend/plugins.tpl b/src/views/admin/extend/plugins.tpl index 7cc70b229f..a3dea7554c 100644 --- a/src/views/admin/extend/plugins.tpl +++ b/src/views/admin/extend/plugins.tpl @@ -3,7 +3,7 @@
Installed Plugins
-
    +
      @@ -14,7 +14,7 @@
      Download Plugins
      -
        +
          diff --git a/src/views/admin/partials/download_plugin_item.tpl b/src/views/admin/partials/download_plugin_item.tpl index 1080c700b5..cd31aea8b4 100644 --- a/src/views/admin/partials/download_plugin_item.tpl +++ b/src/views/admin/partials/download_plugin_item.tpl @@ -1,4 +1,4 @@ -
        • +
        • diff --git a/src/views/admin/partials/installed_plugin_item.tpl b/src/views/admin/partials/installed_plugin_item.tpl index 565b205f03..b0399df5e2 100644 --- a/src/views/admin/partials/installed_plugin_item.tpl +++ b/src/views/admin/partials/installed_plugin_item.tpl @@ -1,5 +1,5 @@ -
        • +