From 1d8d17cfe268f06cb87118605dc4886f6fd81a86 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 17 Nov 2015 17:49:17 +0100 Subject: [PATCH] MOBILE-1318 delegates: Show loading while addons are being loaded --- .../components/courses/controllers/list.js | 1 + .../components/courses/services/delegate.js | 18 ++++++++++- .../components/courses/templates/list.html | 5 +++- .../components/sidemenu/controllers/menu.js | 1 + www/core/components/sidemenu/main.js | 3 +- .../components/sidemenu/services/delegate.js | 30 ++++++++++++++++++- .../components/sidemenu/templates/menu.html | 3 ++ .../components/user/controllers/profile.js | 3 ++ .../components/user/templates/profile.html | 3 ++ 9 files changed, 63 insertions(+), 4 deletions(-) diff --git a/www/core/components/courses/controllers/list.js b/www/core/components/courses/controllers/list.js index e41388199a5..67e64f4506d 100644 --- a/www/core/components/courses/controllers/list.js +++ b/www/core/components/courses/controllers/list.js @@ -25,6 +25,7 @@ angular.module('mm.core.courses') mmCoursesEventMyCoursesUpdated) { $scope.searchEnabled = $mmCourses.isSearchCoursesAvailable(); + $scope.areNavHandlersLoadedFor = $mmCoursesDelegate.areNavHandlersLoadedFor; // Convenience function to fetch courses. function fetchCourses(refresh) { diff --git a/www/core/components/courses/services/delegate.js b/www/core/components/courses/services/delegate.js index dd6810568b3..95d5d58bae0 100644 --- a/www/core/components/courses/services/delegate.js +++ b/www/core/components/courses/services/delegate.js @@ -60,10 +60,24 @@ angular.module('mm.core.courses') self.$get = function($mmUtil, $q, $log, $mmSite) { var enabledNavHandlers = {}, coursesHandlers = {}, - self = {}; + self = {}, + loaded = {}; $log = $log.getInstance('$mmCoursesDelegate'); + /** + * Check if addons are loaded for a certain course. + * + * @module mm.core.courses + * @ngdoc method + * @name $mmCoursesDelegate#areNavHandlersLoadedFor + * @param {Number} courseId The course ID. + * @return {Boolean} True if addons are loaded, false otherwise. + */ + self.areNavHandlersLoadedFor = function(courseId) { + return loaded[courseId]; + }; + /** * Clear all courses handlers. * @@ -74,6 +88,7 @@ angular.module('mm.core.courses') */ self.clearCoursesHandlers = function() { coursesHandlers = {}; + loaded = {}; }; /** @@ -207,6 +222,7 @@ angular.module('mm.core.courses') priority: handler.priority }); }); + loaded[courseId] = true; }); }; diff --git a/www/core/components/courses/templates/list.html b/www/core/components/courses/templates/list.html index 70f4a54e631..f9839b2947e 100644 --- a/www/core/components/courses/templates/list.html +++ b/www/core/components/courses/templates/list.html @@ -24,11 +24,14 @@

{{course.fullname}}

-
+ +
+ +
diff --git a/www/core/components/sidemenu/controllers/menu.js b/www/core/components/sidemenu/controllers/menu.js index e5c2f174077..a4636d28065 100644 --- a/www/core/components/sidemenu/controllers/menu.js +++ b/www/core/components/sidemenu/controllers/menu.js @@ -25,6 +25,7 @@ angular.module('mm.core.sidemenu') $timeout, mmCoreEventLanguageChanged, mmCoreEventSiteUpdated) { $scope.handlers = $mmSideMenuDelegate.getNavHandlers(); + $scope.areNavHandlersLoaded = $mmSideMenuDelegate.areNavHandlersLoaded; $scope.siteinfo = $mmSite.getInfo(); $scope.logout = function() { diff --git a/www/core/components/sidemenu/main.js b/www/core/components/sidemenu/main.js index 519f6def9d2..bd65a0e2584 100644 --- a/www/core/components/sidemenu/main.js +++ b/www/core/components/sidemenu/main.js @@ -37,7 +37,8 @@ angular.module('mm.core.sidemenu', []) }) -.run(function($mmEvents, mmCoreEventLogin, mmCoreEventSiteUpdated, $mmSideMenuDelegate) { +.run(function($mmEvents, mmCoreEventLogin, mmCoreEventSiteUpdated, mmCoreEventLogout, $mmSideMenuDelegate) { $mmEvents.on(mmCoreEventLogin, $mmSideMenuDelegate.updateNavHandlers); $mmEvents.on(mmCoreEventSiteUpdated, $mmSideMenuDelegate.updateNavHandlers); + $mmEvents.on(mmCoreEventLogout, $mmSideMenuDelegate.clearSiteHandlers); }); diff --git a/www/core/components/sidemenu/services/delegate.js b/www/core/components/sidemenu/services/delegate.js index 61061ecb67f..45afcd7dc45 100644 --- a/www/core/components/sidemenu/services/delegate.js +++ b/www/core/components/sidemenu/services/delegate.js @@ -59,10 +59,36 @@ angular.module('mm.core.sidemenu') self.$get = function($mmUtil, $q, $log, $mmSite) { var enabledNavHandlers = {}, currentSiteHandlers = [], // Handlers to return. - self = {}; + self = {}, + loaded = false; // If site handlers have been loaded. $log = $log.getInstance('$mmSideMenuDelegate'); + /** + * Check if addons are loaded. + * + * @module mm.core.sidemenu + * @ngdoc method + * @name $mmSideMenuDelegate#areNavHandlersLoaded + * @return {Boolean} True if addons are loaded, false otherwise. + */ + self.areNavHandlersLoaded = function() { + return loaded; + }; + + /** + * Clear current site nav handlers. Reserved for core use. + * + * @module mm.core.sidemenu + * @ngdoc method + * @name $mmSideMenuDelegate#clearSiteHandlers + * @return {Void} + */ + self.clearSiteHandlers = function() { + loaded = false; + $mmUtil.emptyArray(currentSiteHandlers); + }; + /** * Get the handlers for the current site. * @@ -148,6 +174,8 @@ angular.module('mm.core.sidemenu') priority: handler.priority }); }); + + loaded = true; }); }; diff --git a/www/core/components/sidemenu/templates/menu.html b/www/core/components/sidemenu/templates/menu.html index 3eb2adcd60f..ad917ff6656 100644 --- a/www/core/components/sidemenu/templates/menu.html +++ b/www/core/components/sidemenu/templates/menu.html @@ -33,6 +33,9 @@

{{siteinfo.fullname}}

{{ 'mm.sidemenu.mycourses' | translate}} +
  • + +
  • {{title | translate}} diff --git a/www/core/components/user/controllers/profile.js b/www/core/components/user/controllers/profile.js index de1da94621c..2c251e9073c 100644 --- a/www/core/components/user/controllers/profile.js +++ b/www/core/components/user/controllers/profile.js @@ -46,8 +46,11 @@ angular.module('mm.core.user') $scope.hasContact = user.email || user.phone1 || user.phone2 || user.city || user.country || user.address; $scope.hasDetails = user.url || user.roles || user.interests; + $scope.isLoadingHandlers = true; $mmUserDelegate.getProfileHandlersFor(user, courseid).then(function(handlers) { $scope.profileHandlers = handlers; + }).finally(function() { + $scope.isLoadingHandlers = false; }); }, function(message) { $scope.user = false; diff --git a/www/core/components/user/templates/profile.html b/www/core/components/user/templates/profile.html index 6e2a99d3e81..8bbfa454b50 100644 --- a/www/core/components/user/templates/profile.html +++ b/www/core/components/user/templates/profile.html @@ -89,6 +89,9 @@

    {{ 'mm.user.description' | translate}}

    {{user.description}}
  • +
    + +
    {{ title | translate }}