/** * Copyright (c) 2011, Robin Appelman * Copyright (c) 2012, Thomas Tanghus * This file is licensed under the Affero General Public License version 3 or later. * See the COPYING-README file. */ OC.Settings = OC.Settings || {}; OC.Settings.Apps = OC.Settings.Apps || { setupGroupsSelect: function() { OC.Settings.setupGroupsSelect($('#group_select'), { placeholder: t('core', 'All') }); }, loadApp:function(app) { var page = $('#app-content'); page.find('p.license').show(); page.find('span.name').text(app.name); page.find('small.externalapp').text(app.internallabel); if (app.version) { page.find('span.version').text(app.version); } else { page.find('span.version').text(''); } page.find('span.score').html(app.score); page.find('p.description').text(app.description); page.find('img.preview').attr('src', app.preview); if (app.preview && app.preview.length) { page.find('img.preview').show(); } else { page.find('img.preview').hide(); } page.find('small.externalapp').attr('style', 'visibility:visible'); page.find('span.author').text(app.author); // FIXME licenses of downloaded apps go into app.licence, licenses of not-downloaded apps into app.license var appLicense = ''; if (typeof(app.licence) !== 'undefined') { appLicense = app.licence; } else if (typeof(app.license) !== 'undefined') { appLicense = app.license; } page.find('span.licence').text(appLicense); var userDocumentation = false; var adminDocumentation = false; if (typeof(app.documentation) !== 'undefined') { if (typeof(app.documentation.user) !== 'undefined') { userDocumentation = true; page.find('span.userDocumentation').html("" + t('settings', 'User Documentation') + ""); page.find('p.documentation').show(); } else { page.find('span.userDocumentation').empty(); userDocumentation = false; } if (typeof(app.documentation.admin) !== 'undefined') { adminDocumentation = true; page.find('span.adminDocumentation').html("" + t('settings', 'Admin Documentation') + ""); page.find('p.documentation').show(); } else { page.find('span.adminDocumentation').empty(); adminDocumentation = false; } if(userDocumentation && adminDocumentation) { page.find('span.comma').remove(); page.find('span.userDocumentation').after(', '); } else { page.find('span.comma').remove(); } } else { page.find('p.documentation').hide(); } if (typeof(app.website) !== 'undefined') { page.find('p.website').show(); page.find('a#websitelink').attr('href', app.website); } if (app.update !== false) { page.find('input.update').show(); page.find('input.update').data('appid', app.id); page.find('input.update').attr('value',t('settings', 'Update to {appversion}', {appversion:app.update})); } else { page.find('input.update').hide(); } if (app.removable !== false && app.active === false) { page.find('a.uninstall').show(); page.find('a.uninstall').data('appid', app.id); page.find('a.uninstall').attr('value', t('settings', 'Uninstall App')); } else { page.find('a.uninstall').hide(); } page.find('input.enable').show(); page.find('input.enable').val((app.active) ? t('settings', 'Disable') : t('settings', 'Enable')); page.find('input.enable').data('appid', app.id); page.find('input.enable').data('active', app.active); if (app.internal === false) { page.find('span.score').show(); page.find('p.appstore').show(); page.find('a#appstorelink').attr('href', 'http://apps.owncloud.com/content/show.php?content=' + app.id); page.find('small.externalapp').hide(); } else { page.find('p.appslink').hide(); page.find('span.score').hide(); } if (typeof($('#app-navigation ul li[data-id="'+app.id+'"]').data('errormsg')) !== "undefined") { page.find(".warning").show(); page.find(".warning").text($('#app-navigation ul li[data-id="'+app.id+'"]').data('errormsg')); } else { page.find(".warning").hide(); } if(OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') || OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) { page.find("#groups_enable").hide(); page.find("label[for='groups_enable']").hide(); page.find("#groups_enable").attr('checked', null); } else { if (app.active) { if (app.groups.length) { OC.Settings.Apps.setupGroupsSelect(); $('#group_select').select2('val', app.groups || []); page.find("#groups_enable").attr('checked','checked'); } else { page.find("#groups_enable").attr('checked', null); } page.find("#groups_enable").show(); page.find("label[for='groups_enable']").show(); } else { page.find("#groups_enable").hide(); page.find("label[for='groups_enable']").hide(); } } }, enableApp:function(appid, active, element, groups) { groups = groups || []; var appitem=$('#app-navigation ul li[data-id="'+appid+'"]'); element.val(t('settings','Please wait....')); if(active && !groups.length) { $.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appid},function(result) { if(!result || result.status !== 'success') { if (result.data && result.data.message) { OC.Settings.Apps.showErrorMessage(result.data.message); appitem.data('errormsg', result.data.message); } else { OC.Settings.Apps.showErrorMessage(t('settings', 'Error while disabling app')); appitem.data('errormsg', t('settings', 'Error while disabling app')); } element.val(t('settings','Disable')); appitem.addClass('appwarning'); } else { 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(); element.parent().find("label[for='groups_enable']").hide(); var app = OC.get('appData_' + appid); app.active = false; } },'json'); } else { $.post(OC.filePath('settings','ajax','enableapp.php'),{appid: appid, groups: groups},function(result) { if(!result || result.status !== 'success') { if (result.data && result.data.message) { OC.Settings.Apps.showErrorMessage(result.data.message); appitem.data('errormsg', result.data.message); } else { OC.Settings.Apps.showErrorMessage(t('settings', 'Error while enabling app')); appitem.data('errormsg', t('settings', 'Error while disabling app')); } element.val(t('settings','Enable')); appitem.addClass('appwarning'); } else { OC.Settings.Apps.addNavigation(appid); appitem.data('active',true); element.data('active',true); appitem.addClass('active'); element.val(t('settings','Disable')); var app = OC.get('appData_' + appid); app.active = true; if (OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') || OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) { element.parent().find("#groups_enable").hide(); element.parent().find("label[for='groups_enable']").hide(); } else { element.parent().find("#groups_enable").show(); element.parent().find("label[for='groups_enable']").show(); if (groups) { appitem.data('groups', JSON.stringify(groups)); } else { appitem.data('groups', ''); } } } },'json') .fail(function() { OC.Settings.Apps.showErrorMessage(t('settings', 'Error while enabling app')); 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')); }); } }, updateApp:function(appid, element) { element.val(t('settings','Updating....')); $.post(OC.filePath('settings','ajax','updateapp.php'),{appid:appid},function(result) { if(!result || result.status !== 'success') { OC.Settings.Apps.showErrorMessage(t('settings','Error while updating app'),t('settings','Error')); element.val(t('settings','Update')); } else { element.val(t('settings','Updated')); element.hide(); } },'json'); }, uninstallApp:function(appid, element) { element.val(t('settings','Uninstalling ....')); $.post(OC.filePath('settings','ajax','uninstallapp.php'),{appid:appid},function(result) { if(!result || result.status !== 'success') { OC.Settings.Apps.showErrorMessage(t('settings','Error while uninstalling app'),t('settings','Error')); element.val(t('settings','Uninstall')); } else { OC.Settings.Apps.removeNavigation(appid); var appItem = $('#app-navigation li').filterAttr('data-id', appid); appItem.removeClass('active'); } },'json'); }, insertApp:function(appdata) { var applist = $('#app-navigation ul li'); var app = $('
  • ' + '' + appdata.name+'3rd party
  • '); app.data('app', appdata); var added = false; applist.each(function() { if(!parseInt($(this).data('installed')) && $(this).find('a').text().toLowerCase() > appdata.name.toLowerCase()) { $(this).before(app); added = true; return false; // dang, remember this to get out of loop } }); if(!added) { applist.last().after(app); } return app; }, 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){ if(response.status === 'success'){ var navEntries=response.nav_entries; for(var i=0; i< navEntries.length; i++){ var entry = navEntries[i]; var container = $('#apps ul'); if(container.children('li[data-id="'+entry.id+'"]').length === 0){ var li=$('
  • '); li.attr('data-id', entry.id); var img= $('').attr({ src: entry.icon}); var a=$('').attr('href', entry.href); var filename=$(''); filename.text(entry.name); a.prepend(filename); a.prepend(img); li.append(a); // append the new app as last item in the list // which is the "add apps" entry with the id // #apps-management $('#apps-management').before(li); // scroll the app navigation down // so the newly added app is seen $('#navigation').animate({ scrollTop: $('#navigation').height() }, 'slow'); // draw attention to the newly added app entry // by flashing it twice $('#header .menutoggle') .animate({opacity: 0.5}) .animate({opacity: 1}) .animate({opacity: 0.5}) .animate({opacity: 1}) .animate({opacity: 0.75}); if (!SVGSupport() && entry.icon.match(/\.svg$/i)) { $(img).addClass('svg'); replaceSVG(); } } } } }); }, showErrorMessage: function(message) { $('.appinfo .warning').show(); $('.appinfo .warning').text(message); }, isType: function(app, type){ return app.types && app.types.indexOf(type) !== -1; } }; $(document).ready(function(){ $('#app-navigation ul li').each(function(index,li){ var app = OC.get('appData_'+$(li).data('id')); if (app) { app.groups= $(li).data('groups') || []; } $(li).data('app',app); $(this).find('span.hidden').remove(); }); $('#app-navigation ul li').keydown(function(event) { if (event.which === 13 || event.which === 32) { $(event.target).click(); } return false; }); $(document).on('click', '#app-navigation', function(event){ var tgt = $(event.target); if (tgt.is('li') || tgt.is('a')) { var item = tgt.is('li') ? $(tgt) : $(tgt).parent(); var app = item.data('app'); OC.Settings.Apps.loadApp(app); $('#app-navigation .selected').removeClass('selected'); item.addClass('selected'); } return false; }); $('#app-content input.enable').click(function(){ var element = $(this); var appid=$(this).data('appid'); var active=$(this).data('active'); if(appid) { OC.Settings.Apps.enableApp(appid, active, element); } }); $('#app-content input.update').click(function(){ var element = $(this); var appid=$(this).data('appid'); if(appid) { OC.Settings.Apps.updateApp(appid, element); } }); $('#app-content a.uninstall').click(function(){ var element = $(this); var appid=$(this).data('appid'); if(appid) { OC.Settings.Apps.uninstallApp(appid, element); } }); $('#group_select').change(function(ev) { var element = $('#app-content input.enable'); // getting an array of values from select2 var groups = ev.val || []; var appid = element.data('appid'); if (appid) { OC.Settings.Apps.enableApp(appid, false, element, groups); var li = $('[data-id="'+appid+'"]'); var app = OC.get('appData_' + $(li).data('id')); app.groups = groups; li.data('groups', groups); li.attr('data-groups', JSON.stringify(groups)); } }); if(appid) { var item = $('#app-navigation ul li[data-id="'+appid+'"]'); if(item) { item.trigger('click'); item.addClass('active'); $('#app-navigation').animate({scrollTop: item.offset().top-70}, 'slow','swing'); } } $("#groups_enable").change(function() { var $select = $('#group_select'); $select.val(''); if (this.checked) { OC.Settings.Apps.setupGroupsSelect(); } else { $select.select2('destroy'); } $select.change(); }); });