Skip to content

Commit 1d8d17c

Browse files
committed
MOBILE-1318 delegates: Show loading while addons are being loaded
1 parent b467acc commit 1d8d17c

File tree

9 files changed

+63
-4
lines changed

9 files changed

+63
-4
lines changed

www/core/components/courses/controllers/list.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ angular.module('mm.core.courses')
2525
mmCoursesEventMyCoursesUpdated) {
2626

2727
$scope.searchEnabled = $mmCourses.isSearchCoursesAvailable();
28+
$scope.areNavHandlersLoadedFor = $mmCoursesDelegate.areNavHandlersLoadedFor;
2829

2930
// Convenience function to fetch courses.
3031
function fetchCourses(refresh) {

www/core/components/courses/services/delegate.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,24 @@ angular.module('mm.core.courses')
6060
self.$get = function($mmUtil, $q, $log, $mmSite) {
6161
var enabledNavHandlers = {},
6262
coursesHandlers = {},
63-
self = {};
63+
self = {},
64+
loaded = {};
6465

6566
$log = $log.getInstance('$mmCoursesDelegate');
6667

68+
/**
69+
* Check if addons are loaded for a certain course.
70+
*
71+
* @module mm.core.courses
72+
* @ngdoc method
73+
* @name $mmCoursesDelegate#areNavHandlersLoadedFor
74+
* @param {Number} courseId The course ID.
75+
* @return {Boolean} True if addons are loaded, false otherwise.
76+
*/
77+
self.areNavHandlersLoadedFor = function(courseId) {
78+
return loaded[courseId];
79+
};
80+
6781
/**
6882
* Clear all courses handlers.
6983
*
@@ -74,6 +88,7 @@ angular.module('mm.core.courses')
7488
*/
7589
self.clearCoursesHandlers = function() {
7690
coursesHandlers = {};
91+
loaded = {};
7792
};
7893

7994
/**
@@ -207,6 +222,7 @@ angular.module('mm.core.courses')
207222
priority: handler.priority
208223
});
209224
});
225+
loaded[courseId] = true;
210226
});
211227
};
212228

www/core/components/courses/templates/list.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,14 @@ <h2><mm-format-text watch="true">{{course.fullname}}</mm-format-text></h2>
2424
</summary>
2525
</p>
2626
</div>
27-
<div class="item tabs tabs-icon-left" ng-show="course._handlers.length">
27+
<div class="item tabs tabs-icon-left" ng-show="course._handlers && course._handlers.length">
2828
<a ng-repeat="handler in course._handlers | orderBy:'-priority'" ng-controller="handler.controller" ng-click="action($event, course)" class="tab-item active" title="{{title | translate}}">
2929
<i class="icon {{icon}}"></i> {{title | translate}}
3030
</a>
3131
</div>
32+
<div class="item text-center" ng-if="(!course._handlers || !course._handlers.length) && !areNavHandlersLoadedFor(course.id)">
33+
<ion-spinner></ion-spinner>
34+
</div>
3235
</section>
3336
</mm-loading>
3437
</ion-content>

www/core/components/sidemenu/controllers/menu.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ angular.module('mm.core.sidemenu')
2525
$timeout, mmCoreEventLanguageChanged, mmCoreEventSiteUpdated) {
2626

2727
$scope.handlers = $mmSideMenuDelegate.getNavHandlers();
28+
$scope.areNavHandlersLoaded = $mmSideMenuDelegate.areNavHandlersLoaded;
2829
$scope.siteinfo = $mmSite.getInfo();
2930

3031
$scope.logout = function() {

www/core/components/sidemenu/main.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ angular.module('mm.core.sidemenu', [])
3737

3838
})
3939

40-
.run(function($mmEvents, mmCoreEventLogin, mmCoreEventSiteUpdated, $mmSideMenuDelegate) {
40+
.run(function($mmEvents, mmCoreEventLogin, mmCoreEventSiteUpdated, mmCoreEventLogout, $mmSideMenuDelegate) {
4141
$mmEvents.on(mmCoreEventLogin, $mmSideMenuDelegate.updateNavHandlers);
4242
$mmEvents.on(mmCoreEventSiteUpdated, $mmSideMenuDelegate.updateNavHandlers);
43+
$mmEvents.on(mmCoreEventLogout, $mmSideMenuDelegate.clearSiteHandlers);
4344
});

www/core/components/sidemenu/services/delegate.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,36 @@ angular.module('mm.core.sidemenu')
5959
self.$get = function($mmUtil, $q, $log, $mmSite) {
6060
var enabledNavHandlers = {},
6161
currentSiteHandlers = [], // Handlers to return.
62-
self = {};
62+
self = {},
63+
loaded = false; // If site handlers have been loaded.
6364

6465
$log = $log.getInstance('$mmSideMenuDelegate');
6566

67+
/**
68+
* Check if addons are loaded.
69+
*
70+
* @module mm.core.sidemenu
71+
* @ngdoc method
72+
* @name $mmSideMenuDelegate#areNavHandlersLoaded
73+
* @return {Boolean} True if addons are loaded, false otherwise.
74+
*/
75+
self.areNavHandlersLoaded = function() {
76+
return loaded;
77+
};
78+
79+
/**
80+
* Clear current site nav handlers. Reserved for core use.
81+
*
82+
* @module mm.core.sidemenu
83+
* @ngdoc method
84+
* @name $mmSideMenuDelegate#clearSiteHandlers
85+
* @return {Void}
86+
*/
87+
self.clearSiteHandlers = function() {
88+
loaded = false;
89+
$mmUtil.emptyArray(currentSiteHandlers);
90+
};
91+
6692
/**
6793
* Get the handlers for the current site.
6894
*
@@ -148,6 +174,8 @@ angular.module('mm.core.sidemenu')
148174
priority: handler.priority
149175
});
150176
});
177+
178+
loaded = true;
151179
});
152180
};
153181

www/core/components/sidemenu/templates/menu.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ <h2>{{siteinfo.fullname}}</h2>
3333
<i class="icon ion-ionic"></i>{{ 'mm.sidemenu.mycourses' | translate}}
3434
</a>
3535
</li>
36+
<li class="item text-center" ng-if="(!handlers || !handlers.length) && !areNavHandlersLoaded()">
37+
<ion-spinner></ion-spinner>
38+
</li>
3639
<li ng-repeat="handler in handlers | orderBy:'-priority'" ng-controller="handler.controller" >
3740
<a menu-close class="item item-icon-left" ui-sref="{{state}}" title="{{title | translate}}">
3841
<i class="icon {{icon}}"></i> {{title | translate}}

www/core/components/user/controllers/profile.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,11 @@ angular.module('mm.core.user')
4646
$scope.hasContact = user.email || user.phone1 || user.phone2 || user.city || user.country || user.address;
4747
$scope.hasDetails = user.url || user.roles || user.interests;
4848

49+
$scope.isLoadingHandlers = true;
4950
$mmUserDelegate.getProfileHandlersFor(user, courseid).then(function(handlers) {
5051
$scope.profileHandlers = handlers;
52+
}).finally(function() {
53+
$scope.isLoadingHandlers = false;
5154
});
5255
}, function(message) {
5356
$scope.user = false;

www/core/components/user/templates/profile.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ <h2>{{ 'mm.user.description' | translate}}</h2>
8989
<mm-format-text class="mm-content-with-float" watch="true">{{user.description}}</mm-format-text>
9090
</div>
9191

92+
<div class="item text-center" ng-if="(!profileHandlers || !profileHandlers.length) && isLoadingHandlers">
93+
<ion-spinner></ion-spinner>
94+
</div>
9295
<div ng-repeat="handler in profileHandlers | orderBy:'-priority'" ng-controller="handler.controller">
9396
<a class="button button-block" ng-click="action($event)" ng-hide="hidden" title="{{ title | translate }}">
9497
{{ title | translate }} <ion-spinner class="icon" ng-if="spinner"></ion-spinner>

0 commit comments

Comments
 (0)