{“version”:3,“sources”:,“names”:[],“mappings”:“qBASQ,OAAA,4BAA2B,kCAAA,+CAE7B,aAAU,kDAMV,SAAI,IACJ,SAAI,IACJ,OAAI,oHAWE,GAAU,EAAQ,GACtB,MAAI,GAAQ,GAAA,UAAiB,EAAA,GAAU,SAAA,gBAAA,EAAA,sBAGnC,GAAW,GAGf,GAAG,GAAM,QAAW,UAAA,EAAA,EAClB,GAAM,UAAU,EAAA,QAAA,MAChB,GAAa,EAAA,EAAA,QAAA,kDAOf,MADA,GAAI,GAAA,UACA,EAAA,EAGJ,IAGI,GAAA,EAGJ,MAGE,MATE,KAIA,EAAA,EAAA,kCASF,KAAA,WAGA,KAAA,QAAY,EAGZ,EAAA,EAA0B,KAAW,cAAI,EAAA,UACzC,EAAA,EAA6B,KAAA,cAAe,EAAA,UAC5C,EAAA,GAAA,QAAA,KAAA,gEAIoB,EAAA,KAAA,aAAA,EAAA,mHAepB,KAAA,UACA,KAAA,QAAa,uFAQf,iBAGM,GAAA,mDAUK,EAAW,EAAA,YAAiB,EAAe,KAAA,eAAA,mDAMlD,EAAG,EAAiB,GAAA,WAAkB,IAAQ,EAAA,GAAA,OAC9C,MAAG,GAAY,iBAAkB,EAAW,+GAOhD,EAAW,EAAA,GAAA,4HAUH,EAAgB,cAAW,sEAQjC,KACA,EAAe,OAAS,YAAA,UACrB,EAAS,EAAgB,OAAS,OAAS,EAAQ,EAAgB,OAAA,SAAU,SAAO,OACrF,EAAe,OAAS,SAAS,SAAS,YAAA,WAI9C,EAAW,EAAA,OACT,EAAO,OAAA,SAAgB,UACrB,EAAO,EAAI,OAAW,OAAA,EAAA,EAAA,OAAA,SAAA,SAAA,SACrB,OAAA,SAAA,SAAA,SAAA,4CAKL,MAAA,GAAW,OAAe,SAAW,yBAEnC,sCAOQ,QAAA,EAAa,SAAA,GACnB,GAAA,GAAU,SAAc,cAAA,EAAA,2CAEzB,EAAK,QAAe,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,EAAA,cAIrB,OAAA,SAAA,kDAIF,MAAW,GAAA,UAAA,EAAe,mBAOnB,aAAmB,SAAA,EAAW,KACpB,MAAA,OAAA,EAAA,OAAA,2CAIf,wDAGF,EAAW,CACT,wBAMF,EAAO,SAAA,SAAA,0CAhLP,GAAO,QAAW,QAAA,0GAiMlB,eAAiB,aAAU,WAAoB,aAAK,aAAA,SAAA,EAAA,EAAA,EAAA,8BAIhD,SAAY,EAAW,EAAA,kBAG3B,SAAM,SAAI,SAAY,UAAW,SAAA,GAC/B,QAAI,UAAW,EAAA,MAAA,EAAA,GAAA,EAAA,mBAIf,aAAU,EAAA,OAAA,4GAiBV,mBAAsB,aAAQ,WAAA,aAAA,aAAA,6HAOnC,GAAA,GAAA,QAAA,QAAA”,“file”:“scrollspy.min.js”,“sourcesContent”:[“‘use strict’;nnangular.module(‘mgcrea.ngStrap.scrollspy’, [‘mgcrea.ngStrap.helpers.debounce’, ‘mgcrea.ngStrap.helpers.dimensions’])nn .provider(‘$scrollspy’, function() {nn // Pool of registered spiesn var spies = this.$$spies = {};nn var defaults = this.defaults = {n debounce: 150,n throttle: 100,n offset: 100n };nn this.$get = function($window, $document, $rootScope, dimensions, debounce, throttle) {nn var windowEl = angular.element($window);n var docEl = angular.element($document.prop(‘documentElement’));n var bodyEl = angular.element($window.document.body);nn // Helper functionsnn function nodeName(element, name) {n return element.nodeName && element.nodeName.toLowerCase() === name.toLowerCase();n }nn function ScrollSpyFactory(config) {nn // Common varsn var options = angular.extend({}, defaults, config);n if(!options.element) options.element = bodyEl;n var isWindowSpy = nodeName(options.element, ‘body’);n var scrollEl = isWindowSpy ? windowEl : options.element;n var scrollId = isWindowSpy ? ‘window’ : options.id;nn // Use existing spyn if(spies) {n spies.$$count++;n return spies;n }nn var $scrollspy = {};nn // Private varsn var unbindViewContentLoaded, unbindIncludeContentLoaded;n var trackedElements = $scrollspy.$trackedElements = [];n var sortedElements = [];n var activeTarget;n var debouncedCheckPosition;n var throttledCheckPosition;n var debouncedCheckOffsets;n var viewportHeight;n var scrollTop;nn $scrollspy.init = function() {nn // Setup internal ref countern this.$$count = 1;nn // Bind eventsn debouncedCheckPosition = debounce(this.checkPosition, options.debounce);n throttledCheckPosition = throttle(this.checkPosition, options.throttle);n scrollEl.on(‘click’, this.checkPositionWithEventLoop);n windowEl.on(‘resize’, debouncedCheckPosition);n scrollEl.on(‘scroll’, throttledCheckPosition);nn debouncedCheckOffsets = debounce(this.checkOffsets, options.debounce);n unbindViewContentLoaded = $rootScope.$on(‘$viewContentLoaded’, debouncedCheckOffsets);n unbindIncludeContentLoaded = $rootScope.$on(‘$includeContentLoaded’, debouncedCheckOffsets);n debouncedCheckOffsets();nn // Register spy for reusen if(scrollId) {n spies = $scrollspy;n }nn };nn $scrollspy.destroy = function() {nn // Check internal ref countern this.$$count–;n if(this.$$count > 0) {n return;n }nn // Unbind eventsn scrollEl.off(‘click’, this.checkPositionWithEventLoop);n windowEl.off(‘resize’, debouncedCheckPosition);n scrollEl.off(‘scroll’, throttledCheckPosition);n unbindViewContentLoaded();n unbindIncludeContentLoaded();n if (scrollId) {n delete spies;n }n };nn $scrollspy.checkPosition = function() {nn // Not ready yetn if(!sortedElements.length) return;nn // Calculate the scroll positionn scrollTop = (isWindowSpy ? $window.pageYOffset : scrollEl.prop(‘scrollTop’)) || 0;nn // Calculate the viewport height for use by the componentsn viewportHeight = Math.max($window.innerHeight, docEl.prop(‘clientHeight’));nn // Activate first element if scroll is smallern if(scrollTop < sortedElements.offsetTop && activeTarget !== sortedElements.target) {n return $scrollspy.$activateElement(sortedElements);n }nn // Activate proper elementn for (var i = sortedElements.length; i–;) {n if(angular.isUndefined(sortedElements.offsetTop) || sortedElements.offsetTop === null) continue;n if(activeTarget === sortedElements.target) continue;n if(scrollTop < sortedElements.offsetTop) continue;n if(sortedElements[i + 1] && scrollTop > sortedElements[i + 1].offsetTop) continue;n return $scrollspy.$activateElement(sortedElements);n }nn };nn $scrollspy.checkPositionWithEventLoop = function() {n // IE 9 throws an error if we use ‘this’ instead of ‘$scrollspy’n // in this setTimeout calln setTimeout($scrollspy.checkPosition, 1);n };nn // Protected methodsnn $scrollspy.$activateElement = function(element) {n if(activeTarget) {n var activeElement = $scrollspy.$getTrackedElement(activeTarget);n if(activeElement) {n activeElement.source.removeClass(‘active’);n if(nodeName(activeElement.source, ‘li’) && nodeName(activeElement.source.parent().parent(), ‘li’)) {n activeElement.source.parent().parent().removeClass(‘active’);n }n }n }n activeTarget = element.target;n element.source.addClass(‘active’);n if(nodeName(element.source, ‘li’) && nodeName(element.source.parent().parent(), ‘li’)) {n element.source.parent().parent().addClass(‘active’);n }n };nn $scrollspy.$getTrackedElement = function(target) {n return trackedElements.filter(function(obj) {n return obj.target === target;n })[0];n };nn // Track offsets behaviornn $scrollspy.checkOffsets = function() {nn angular.forEach(trackedElements, function(trackedElement) {n var targetElement = document.querySelector(trackedElement.target);n trackedElement.offsetTop = targetElement ? dimensions.offset(targetElement).top : null;n if(options.offset && trackedElement.offsetTop !== null) trackedElement.offsetTop -= options.offset * 1;n });nn sortedElements = trackedElementsn .filter(function(el) {n return el.offsetTop !== null;n })n .sort(function(a, b) {n return a.offsetTop - b.offsetTop;n });nn debouncedCheckPosition();nn };nn $scrollspy.trackElement = function(target, source) {n trackedElements.push({target: target, source: source});n };nn $scrollspy.untrackElement = function(target, source) {n var toDelete;n for (var i = trackedElements.length; i–;) {n if(trackedElements.target === target && trackedElements.source === source) {n toDelete = i;n break;n }n }n trackedElements = trackedElements.splice(toDelete, 1);n };nn $scrollspy.activate = function(i) {n trackedElements.addClass(‘active’);n };nn // Initialize pluginnn $scrollspy.init();n return $scrollspy;nn }nn return ScrollSpyFactory;nn };nn })nn .directive(‘bsScrollspy’, function($rootScope, debounce, dimensions, $scrollspy) {nn return {n restrict: ‘EAC’,n link: function postLink(scope, element, attr) {nn var options = {scope: scope};n angular.forEach([‘offset’, ‘target’], function(key) {n if(angular.isDefined(attr)) options = attr;n });nn var scrollspy = $scrollspy(options);n scrollspy.trackElement(options.target, element);nn scope.$on(‘$destroy’, function() {n if (scrollspy) {n scrollspy.untrackElement(options.target, element);n scrollspy.destroy();n }n options = null;n scrollspy = null;n });nn }n };nn })nnn .directive(‘bsScrollspyList’, function($rootScope, debounce, dimensions, $scrollspy) {nn return {n restrict: ‘A’,n compile: function postLink(element, attr) {n var children = element.querySelectorAll(‘li > a’);n angular.forEach(children, function(child) {n var childEl = angular.element(child);n childEl.parent().attr(‘bs-scrollspy’, ”).attr(‘data-target’, childEl.attr(‘href’));n });n }nn };nn });n”],“sourceRoot”:“/source/”}