navbar.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /**
  2. * angular-strap
  3. * @version v2.3.9 - 2016-06-10
  4. * @link http://mgcrea.github.io/angular-strap
  5. * @author Olivier Louvignes <olivier@mg-crea.com> (https://github.com/mgcrea)
  6. * @license MIT License, http://www.opensource.org/licenses/MIT
  7. */
  8. 'use strict';
  9. angular.module('mgcrea.ngStrap.navbar', []).provider('$navbar', function() {
  10. var defaults = this.defaults = {
  11. activeClass: 'active',
  12. routeAttr: 'data-match-route',
  13. strict: false
  14. };
  15. this.$get = function() {
  16. return {
  17. defaults: defaults
  18. };
  19. };
  20. }).directive('bsNavbar', [ '$window', '$location', '$navbar', function($window, $location, $navbar) {
  21. var defaults = $navbar.defaults;
  22. return {
  23. restrict: 'A',
  24. link: function postLink(scope, element, attr, controller) {
  25. var options = angular.copy(defaults);
  26. angular.forEach(Object.keys(defaults), function(key) {
  27. if (angular.isDefined(attr[key])) options[key] = attr[key];
  28. });
  29. scope.$watch(function() {
  30. return $location.path();
  31. }, function(newValue, oldValue) {
  32. var liElements = element[0].querySelectorAll('li[' + options.routeAttr + ']');
  33. angular.forEach(liElements, function(li) {
  34. var liElement = angular.element(li);
  35. var pattern = liElement.attr(options.routeAttr).replace('/', '\\/');
  36. if (options.strict) {
  37. pattern = '^' + pattern + '$';
  38. }
  39. var regexp = new RegExp(pattern, 'i');
  40. if (regexp.test(newValue)) {
  41. liElement.addClass(options.activeClass);
  42. } else {
  43. liElement.removeClass(options.activeClass);
  44. }
  45. });
  46. });
  47. }
  48. };
  49. } ]);