summaryrefslogtreecommitdiffstats
path: root/settings/js/apps.js
diff options
context:
space:
mode:
authorRobin McCorkell <rmccorkell@owncloud.com>2015-09-05 02:24:18 +0100
committerRobin McCorkell <rmccorkell@owncloud.com>2015-09-05 02:24:18 +0100
commitb06bc409e072343a69410283e1dcedfb5630572f (patch)
treebe8f9ae7a70bbb689551000c7a815ff394cb8a0a /settings/js/apps.js
parent7f8bca64cbb32df8eca313a886fd21e54fc24f13 (diff)
downloadnextcloud-server-b06bc409e072343a69410283e1dcedfb5630572f.tar.gz
nextcloud-server-b06bc409e072343a69410283e1dcedfb5630572f.zip
Rebuild app navigation in JS
Retrieve all app navigations to prevent reloading appinfo/app.php and causing an error when the app isn't fully loaded. The addition/deletion logic has been moved to JS, simplifying a lot of code.
Diffstat (limited to 'settings/js/apps.js')
-rw-r--r--settings/js/apps.js31
1 files changed, 14 insertions, 17 deletions
diff --git a/settings/js/apps.js b/settings/js/apps.js
index d1de3d727c0..f775ecad620 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -219,10 +219,10 @@ OC.Settings.Apps = OC.Settings.Apps || {
element.val(t('settings','Disable'));
appItem.addClass('appwarning');
} else {
+ OC.Settings.Apps.rebuildNavigation();
appItem.data('active',false);
appItem.data('groups', '');
element.data('active',false);
- OC.Settings.Apps.removeNavigation(appId);
appItem.removeClass('active');
element.val(t('settings','Enable'));
element.parent().find(".groups-enable").hide();
@@ -245,7 +245,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
element.val(t('settings','Enable'));
appItem.addClass('appwarning');
} else {
- OC.Settings.Apps.addNavigation(appId);
+ OC.Settings.Apps.rebuildNavigation();
appItem.data('active',true);
element.data('active',true);
appItem.addClass('active');
@@ -278,7 +278,6 @@ OC.Settings.Apps = OC.Settings.Apps || {
appItem.data('errormsg', t('settings', 'Error while enabling app'));
appItem.data('active',false);
appItem.addClass('appwarning');
- OC.Settings.Apps.removeNavigation(appId);
element.val(t('settings','Enable'));
});
}
@@ -312,7 +311,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
OC.Settings.Apps.showErrorMessage(appId, t('settings','Error while uninstalling app'));
element.val(t('settings','Uninstall'));
} else {
- OC.Settings.Apps.removeNavigation(appId);
+ OC.Settings.Apps.rebuildNavigation();
element.parent().fadeOut(function() {
element.remove();
});
@@ -320,23 +319,15 @@ OC.Settings.Apps = OC.Settings.Apps || {
},'json');
},
- removeNavigation: function(appId){
- $.getJSON(OC.filePath('settings', 'ajax', 'navigationdetect.php'), {app: appId}).done(function(response){
- if(response.status === 'success'){
- var navIds=response.nav_ids;
- for(var i=0; i< navIds.length; i++){
- $('#apps ul').children('li[data-id="'+navIds[i]+'"]').remove();
- }
- }
- });
- },
- addNavigation: function(appid){
- $.getJSON(OC.filePath('settings', 'ajax', 'navigationdetect.php'), {app: appid}).done(function(response){
+ rebuildNavigation: function() {
+ $.getJSON(OC.filePath('settings', 'ajax', 'navigationdetect.php')).done(function(response){
if(response.status === 'success'){
+ var idsToKeep = {};
var navEntries=response.nav_entries;
+ var container = $('#apps ul');
for(var i=0; i< navEntries.length; i++){
var entry = navEntries[i];
- var container = $('#apps ul');
+ idsToKeep[entry.id] = true;
if(container.children('li[data-id="'+entry.id+'"]').length === 0){
var li=$('<li></li>');
@@ -377,6 +368,12 @@ OC.Settings.Apps = OC.Settings.Apps || {
}
}
}
+
+ container.children('li[data-id]').each(function(index, el) {
+ if (!idsToKeep[$(el).data('id')]) {
+ $(el).remove();
+ }
+ });
}
});
},