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}}
+
+
+