blob: f48843693bc78bf37347729b89458d1eddb043cd [file] [log] [blame]
/* Based on https://ryankaskel.com/blog/2013/05/27/
a-different-approach-to-angularjs-navigation-menus */
module.exports = function($location) {
return {
restrict: 'EA',
scope: {},
link: function(scope, element, attrs) {
var links = element.find('a')
var onClass = attrs.navMenu || 'current'
var urlMap = []
var routePattern, link, url
if (!$location.$$html5) {
routePattern = /\/#[^/]*/
}
for (var i = 0; i < links.length; i++) {
link = angular.element(links[i])
url = link.attr('ng-href')
// Remove angular route expressions
url = url.replace(/\/{{.*}}/g, '')
if ($location.$$html5) {
urlMap.push({url: url, link: link})
} else {
urlMap.push({url: url.replace(routePattern, ''), link: link})
}
}
function activateLink() {
var location = $location.path()
var pathLink = ''
for (var i = 0; i < urlMap.length; ++i) {
if (location.search(urlMap[i].url) !== -1) {
pathLink = urlMap[i].link
}
}
// Remove all active links
for (var j = 0; j < links.length; j++) {
link = angular.element(links[j])
link.removeClass(onClass)
}
if (pathLink) {
pathLink.addClass(onClass)
}
}
activateLink()
scope.$on('$routeChangeStart', activateLink)
}
}
}