diff --git a/app/assets/javascripts/app/controllers/home.js b/app/assets/javascripts/app/controllers/home.js index c83a1c0a4..72e095a93 100644 --- a/app/assets/javascripts/app/controllers/home.js +++ b/app/assets/javascripts/app/controllers/home.js @@ -84,14 +84,14 @@ angular.module('app') syncManager.loadLocalItems().then(() => { $timeout(() => { $scope.allTag.didLoad = true; - $rootScope.$broadcast("initial-data-loaded"); + $rootScope.$broadcast("initial-data-loaded"); // This needs to be processed first before sync is called so that singletonManager observers function properly. + syncManager.sync(); + // refresh every 30s + setInterval(function () { + syncManager.sync(); + }, 30000); }) - syncManager.sync(); - // refresh every 30s - setInterval(function () { - syncManager.sync(); - }, 30000); }); authManager.addEventHandler((event) => { diff --git a/app/assets/javascripts/app/directives/functional/snEnter.js b/app/assets/javascripts/app/directives/functional/snEnter.js new file mode 100644 index 000000000..fe12e0983 --- /dev/null +++ b/app/assets/javascripts/app/directives/functional/snEnter.js @@ -0,0 +1,15 @@ +angular +.module('app') +.directive('snEnter', function() { + return function(scope, element, attrs) { + element.bind("keydown keypress", function(event) { + if(event.which === 13) { + scope.$apply(function(){ + scope.$eval(attrs.snEnter, {'event': event}); + }); + + event.preventDefault(); + } + }); + }; +}); diff --git a/app/assets/javascripts/app/directives/views/accountMenu.js b/app/assets/javascripts/app/directives/views/accountMenu.js index d984c28f8..ae33c16c2 100644 --- a/app/assets/javascripts/app/directives/views/accountMenu.js +++ b/app/assets/javascripts/app/directives/views/accountMenu.js @@ -170,6 +170,8 @@ class AccountMenu { } $scope.openPrivilegesModal = async function() { + $scope.close(); + let run = () => { $timeout(() => { privilegesManager.presentPrivilegesManagementModal(); diff --git a/app/assets/javascripts/app/directives/views/privilegesAuthModal.js b/app/assets/javascripts/app/directives/views/privilegesAuthModal.js index 91816b1b8..c677da92b 100644 --- a/app/assets/javascripts/app/directives/views/privilegesAuthModal.js +++ b/app/assets/javascripts/app/directives/views/privilegesAuthModal.js @@ -61,7 +61,23 @@ class PrivilegesAuthModal { }) != null; } + $scope.validate = function() { + var failed = []; + for(var cred of $scope.requiredCredentials) { + var value = $scope.authenticationParameters[cred]; + if(!value || value.length == 0) { + failed.push(cred); + } + } + + $scope.failedCredentials = failed; + return failed.length == 0; + } + $scope.submit = function() { + if(!$scope.validate()) { + return; + } privilegesManager.authenticateAction($scope.action, $scope.authenticationParameters).then((result) => { $timeout(() => { if(result.success) { diff --git a/app/assets/javascripts/app/services/authManager.js b/app/assets/javascripts/app/services/authManager.js index 47e169a68..3e4381e1f 100644 --- a/app/assets/javascripts/app/services/authManager.js +++ b/app/assets/javascripts/app/services/authManager.js @@ -135,6 +135,7 @@ class AuthManager extends SFAuthManager { let contentTypePredicate = new SFPredicate("content_type", "=", prefsContentType); this.singletonManager.registerSingleton([contentTypePredicate], (resolvedSingleton) => { + // console.log("Loaded existing user prefs", resolvedSingleton.uuid); this.userPreferences = resolvedSingleton; this.userPreferencesDidChange(); }, (valueCallback) => { diff --git a/app/assets/javascripts/app/services/privilegesManager.js b/app/assets/javascripts/app/services/privilegesManager.js index a2869ead4..5e695a030 100644 --- a/app/assets/javascripts/app/services/privilegesManager.js +++ b/app/assets/javascripts/app/services/privilegesManager.js @@ -120,6 +120,7 @@ class PrivilegesManager { if(!this.privileges.content.desktopPrivileges) { this.privileges.content.desktopPrivileges = {}; } + console.log("Resolved existing privs", resolvedSingleton.uuid); resolve(resolvedSingleton); }, (valueCallback) => { // Safe to create. Create and return object. @@ -128,6 +129,7 @@ class PrivilegesManager { privs.setDirty(true); this.$rootScope.sync(); valueCallback(privs); + console.log("Creating new privs", privs.uuid); resolve(privs); }); }); diff --git a/app/assets/javascripts/app/services/singletonManager.js b/app/assets/javascripts/app/services/singletonManager.js index dd1624072..c7ca742cc 100644 --- a/app/assets/javascripts/app/services/singletonManager.js +++ b/app/assets/javascripts/app/services/singletonManager.js @@ -104,7 +104,6 @@ class SingletonManager { var singleton = allExtantItemsMatchingPredicate[0]; singletonHandler.singleton = singleton; singletonHandler.resolutionCallback(singleton); - } } } else { diff --git a/app/assets/templates/directives/privileges-auth-modal.html.haml b/app/assets/templates/directives/privileges-auth-modal.html.haml index 3be9f08d5..5e649f502 100644 --- a/app/assets/templates/directives/privileges-auth-modal.html.haml +++ b/app/assets/templates/directives/privileges-auth-modal.html.haml @@ -7,12 +7,13 @@ %h1.title Authentication Required %a.close-button.info{"ng-click" => "cancel()"} Cancel .content - %form.panel-section{"ng-submit" => "submit()"} + .panel-section %div{"ng-repeat" => "credential in requiredCredentials"} %p %strong {{promptForCredential(credential)}} %div - %input{"type" => "password", "ng-model" => "authenticationParameters[credential]", "sn-autofocus" => "true", "should-focus" => "$index == 0"} + %input{"type" => "password", "ng-model" => "authenticationParameters[credential]", + "sn-autofocus" => "true", "should-focus" => "$index == 0", "sn-enter" => "submit()"} %div %label.danger{"ng-if" => "isCredentialInFailureState(credential)"} Invalid authentication. Please try again. .panel-row diff --git a/app/assets/templates/directives/privileges-management-modal.html.haml b/app/assets/templates/directives/privileges-management-modal.html.haml index ee9dac0ae..a8ebc25b0 100644 --- a/app/assets/templates/directives/privileges-management-modal.html.haml +++ b/app/assets/templates/directives/privileges-management-modal.html.haml @@ -20,7 +20,7 @@ %td %p {{displayInfoForAction(action)}} %th{"ng-repeat" => "credential in availableCredentials"} - %input{"type" => "checkbox", "ng-checked" => "isCredentialRequiredForAction(action, credential)", "ng-click" => "checkboxValueChanged(action, credential)"} + %input{"type" => "checkbox", "ng-disabled" => "!credentialDisplayInfo[credential].availability", "ng-checked" => "isCredentialRequiredForAction(action, credential)", "ng-click" => "checkboxValueChanged(action, credential)"} .panel-section{"ng-if" => "sessionExpirey && !sessionExpired"} %p You will not be asked to authenticate until {{sessionExpirey}}.