Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions www/core/components/courses/controllers/list.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
18 changes: 17 additions & 1 deletion www/core/components/courses/services/delegate.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand All @@ -74,6 +88,7 @@ angular.module('mm.core.courses')
*/
self.clearCoursesHandlers = function() {
coursesHandlers = {};
loaded = {};
};

/**
Expand Down Expand Up @@ -207,6 +222,7 @@ angular.module('mm.core.courses')
priority: handler.priority
});
});
loaded[courseId] = true;
});
};

Expand Down
5 changes: 4 additions & 1 deletion www/core/components/courses/templates/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,14 @@ <h2><mm-format-text watch="true">{{course.fullname}}</mm-format-text></h2>
</summary>
</p>
</div>
<div class="item tabs tabs-icon-left" ng-show="course._handlers.length">
<div class="item tabs tabs-icon-left" ng-show="course._handlers && course._handlers.length">
<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}}">
<i class="icon {{icon}}"></i> {{title | translate}}
</a>
</div>
<div class="item text-center" ng-if="(!course._handlers || !course._handlers.length) && !areNavHandlersLoadedFor(course.id)">
<ion-spinner></ion-spinner>
</div>
</section>
</mm-loading>
</ion-content>
Expand Down
1 change: 1 addition & 0 deletions www/core/components/sidemenu/controllers/menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
3 changes: 2 additions & 1 deletion www/core/components/sidemenu/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
30 changes: 29 additions & 1 deletion www/core/components/sidemenu/services/delegate.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down Expand Up @@ -148,6 +174,8 @@ angular.module('mm.core.sidemenu')
priority: handler.priority
});
});

loaded = true;
});
};

Expand Down
3 changes: 3 additions & 0 deletions www/core/components/sidemenu/templates/menu.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ <h2>{{siteinfo.fullname}}</h2>
<i class="icon ion-ionic"></i>{{ 'mm.sidemenu.mycourses' | translate}}
</a>
</li>
<li class="item text-center" ng-if="(!handlers || !handlers.length) && !areNavHandlersLoaded()">
<ion-spinner></ion-spinner>
</li>
<li ng-repeat="handler in handlers | orderBy:'-priority'" ng-controller="handler.controller" >
<a menu-close class="item item-icon-left" ui-sref="{{state}}" title="{{title | translate}}">
<i class="icon {{icon}}"></i> {{title | translate}}
Expand Down
3 changes: 3 additions & 0 deletions www/core/components/user/controllers/profile.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 3 additions & 0 deletions www/core/components/user/templates/profile.html
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ <h2>{{ 'mm.user.description' | translate}}</h2>
<mm-format-text class="mm-content-with-float" watch="true">{{user.description}}</mm-format-text>
</div>

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