123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- /**
- * Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
- * Copyright (c) 2012, Thomas Tanghus <thomas@tanghus.net>
- * 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 || {
- 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("<a id='userDocumentation' href='" + app.documentation.user + "'>" + t('settings', 'User Documentation') + "</a>");
- page.find('p.documentation').show();
- }
- if (typeof(app.documentation.admin) !== 'undefined') {
- adminDocumentation = true;
- page.find('span.adminDocumentation').html("<a id='adminDocumentation' href='" + app.documentation.admin + "'>" + t('settings', 'Admin Documentation') + "</a>");
- page.find('p.documentation').show();
- }
- if(userDocumentation && adminDocumentation) {
- page.find('span.userDocumentation').after(', ');
- }
- }
- 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();
- }
- 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();
- }
- },
- enableApp:function(appid, active, element) {
- console.log('enableApp:', appid, active, element);
- var appitem=$('#app-navigation ul li[data-id="'+appid+'"]');
- element.val(t('settings','Please wait....'));
- if(active) {
- $.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);
- element.data('active',false);
- OC.Settings.Apps.removeNavigation(appid);
- appitem.removeClass('active');
- element.val(t('settings','Enable'));
- }
- },'json');
- } else {
- $.post(OC.filePath('settings','ajax','enableapp.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 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'));
- }
- },'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) {
- console.log('updateApp:', 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');
- },
- insertApp:function(appdata) {
- var applist = $('#app-navigation ul li');
- var app =
- $('<li data-id="' + appdata.id + '" data-type="external" data-installed="0">'
- + '<a class="app externalapp" href="' + OC.filePath('settings', 'apps', 'index.php') + '&appid=' + appdata.id+'">'
- + appdata.name+'</a><small class="externalapp list">3rd party</small></li>');
- 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 .wrapper').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 .wrapper');
- if(container.children('li[data-id="'+entry.id+'"]').length === 0){
- var li=$('<li></li>');
- li.attr('data-id', entry.id);
- var img= $('<img class="icon"/>').attr({ src: entry.icon});
- var a=$('<a></a>').attr('href', entry.href);
- var filename=$('<span></span>');
- filename.text(entry.name);
- a.prepend(filename);
- a.prepend(img);
- li.append(a);
- // append the new app as last item in the list
- // (.push is from sticky footer)
- $('#apps .wrapper .push').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
- container.children('li[data-id="' + entry.id + '"]')
- .animate({opacity: 0.3})
- .animate({opacity: 1})
- .animate({opacity: 0.3})
- .animate({opacity: 1});
- if (!SVGSupport() && entry.icon.match(/\.svg$/i)) {
- $(img).addClass('svg');
- replaceSVG();
- }
- }
- }
- }
- });
- },
- showErrorMessage: function(message) {
- $('.appinfo .warning').show();
- $('.appinfo .warning').text(message);
- }
- };
- $(document).ready(function(){
- $('#app-navigation ul li').each(function(index,li){
- var app = OC.get('appData_'+$(li).data('id'));
- $(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);
- }
- });
- 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');
- }
- }
- });
|