'use strict'; /* global angular:false */ /* global $:false */ angular.module('Application').controller('AppsController', ['$scope', '$timeout', '$interval', '$location', 'Client', function ($scope, $timeout, $interval, $location, Client) { var ALL_DOMAINS_DOMAIN = { _alldomains: true, domain: 'All Domains' }; // dummy record for the single select filter $scope.installedApps = Client.getInstalledApps(); $scope.tags = Client.getAppTags(); $scope.selectedTags = []; $scope.selectedDomain = ALL_DOMAINS_DOMAIN; $scope.filterDomains = [ ALL_DOMAINS_DOMAIN ]; $scope.config = Client.getConfig(); $scope.user = Client.getUserInfo(); $scope.domains = []; $scope.appPostInstallConfirm = { app: {}, message: '', confirmed: false, show: function (app) { $scope.reset(); $scope.appPostInstallConfirm.app = app; $scope.appPostInstallConfirm.message = app.manifest.postInstallMessage; $('#appPostInstallConfirmModal').modal('show'); return false; // prevent propagation and default }, submit: function () { if (!$scope.appPostInstallConfirm.confirmed) return; $scope.appPostInstallConfirm.app.pendingPostInstallConfirmation = false; delete localStorage['confirmPostInstall_' + $scope.appPostInstallConfirm.app.id]; $('#appPostInstallConfirmModal').modal('hide'); } }; $scope.showAppDebug = function (app) { $location.path('/app/' + app.id + '/debug'); }; $scope.appUpdate = { busy: false, error: {}, app: {}, manifest: {}, portBindings: {}, show: function (app, updateManifest) { $scope.reset(); $scope.appUpdate.app = app; $scope.appUpdate.manifest = angular.copy(updateManifest); $('#appUpdateModal').modal('show'); }, submit: function () { $scope.appUpdate.busy = true; Client.updateApp($scope.appUpdate.app.id, $scope.appUpdate.manifest, function (error) { if (error) { Client.error(error); } else { $scope.appUpdate.app = {}; $('#appUpdateModal').modal('hide'); } $scope.appUpdate.busy = false; Client.refreshAppCache($scope.appUpdate.app.id); // reflect the new app state immediately }); } }; $scope.reset = function () { // close all dialogs $('#appUpdateModal').modal('hide'); $('#appPostInstallConfirmModal').modal('hide'); // reset update dialog $scope.appUpdate.error = {}; $scope.appUpdate.app = {}; $scope.appUpdate.manifest = {}; // post install confirmation dialog $scope.appPostInstallConfirm.app = {}; $scope.appPostInstallConfirm.message = ''; $scope.appPostInstallConfirm.confirmed = false; }; function getDomains() { Client.getDomains(function (error, result) { if (error) { console.error(error); return $timeout(getDomains, 5000); } $scope.domains = result; $scope.filterDomains = [ALL_DOMAINS_DOMAIN].concat(result); }); } Client.onReady(function () { Client.refreshInstalledApps(); // refresh the new list immediately when switching from another view (appstore) if ($scope.user.admin) getDomains(); var refreshAppsTimer = $interval(Client.refreshInstalledApps.bind(Client), 5000); $scope.$on('$destroy', function () { $interval.cancel(refreshAppsTimer); }); }); // setup all the dialog focus handling ['appUpdateModal'].forEach(function (id) { $('#' + id).on('shown.bs.modal', function () { $(this).find("[autofocus]:first").focus(); }); }); $('.modal-backdrop').remove(); }]);