{“version”:3,“sources”:,“names”:[],“mappings”:“4JAaM,GAAI,KAAW,iCAIb,MAAI,UAAS,WAAA,aAAA,SAAA,EAAA,EAAA,2BAqKJ,GAAsB,EAAA,EAAY,SAE/B,IACR,EAAO,UAEA,IAAP,+DAKK,+BAQT,MAAO,GAAA,KAAA,EAAA,EAAA,YAAA,EAAA,GAAA,sFAhLP,GAAI,MAGA,EAAA,QAAA,UAAmB,EAAA,GACnB,EAAA,EAAY,OAGZ,EAAQ,oCAER,EAAiB,MAEjB,EAAQ,EACV,EAAY,EACV,EAAS,OACP,qBAIF,EAAA,oGAOF,GAAA,QAAmB,QAAA,EAAW,uBAI9B,KAAY,WAEZ,KAAA,2DAKA,EAAK,GAAA,SAAA,KAAA,yHAOL,KAAA,sNAiBA,WAAI,EAAY,cAAA,yCAQb,EAAY,EAAO,OAAA,EAAA,IACtB,EAAU,EAAA,OAAA,EAAA,IAGV,EAAQ,EAAmB,EAAS,EAAY,EAG9C,KAAQ,MACA,6DAKA,WACR,EAAI,OACF,IAAU,WAAQ,EAAc,aAAA,GAAA,iBAE7B,IAAA,QAAA,qBAGK,WAAR,GAEF,kBAAa,EAAV,EAAU,aAKR,EAAA,IAAA,EAEF,GACD,EAAQ,IAAI,QAAS,IAEvB,EAAQ,IAAI,WAAY,EAAA,aAAA,GAAA,YACxB,EAAQ,IAAI,MAAO,EAAkB,aAAA,GAAA,EAAA,GAAA,aAAA,EAAA,EAAA,EAAA,uDAMvC,EAAO,IAAA,WAAA,SACP,EAAO,IAAA,MAAA,EAAA,WAKH,UAAA,6BAEJ,EAAA,mBAEG,mBAAmB,EAAA,EAAA,UAAA,MAElB,cAAQ,qCAGR,IAAA,WAAoB,EAAoB,aAAA,GAAA,cAEtC,qCAEG,UAAA,uDAKL,EADG,EAAA,aACS,EAAQ,OAAY,EAAA,IAAA,IAAA,EAAA,EAAA,uEAOhC,EAAe,EAAf,EAAe,6JAenB,EAAI,IAAA,WAAY,sDA7JlB,EAAI,QAAU,QAAe,0BAsMzB,WAAW,SAAO,UAAO,SAAW,EAAQ,wDAK5C,SAAe,EAAS,EAAA,EAAA,MAE1B,IAAS,MAAM,EAAA,UAAA,OAAA,OAAA,EAAA,EAAA,SAAA,QAAA,QAAA,YACf,SAAU,YAAA,eAAA,eAAA,eAAA,SAAA,GACV,QAAQ,UAAA,EAAA,MAAA,EAAA,GAAA,EAAA”,“file”:“affix.min.js”,“sourcesContent”:[“‘use strict’;nnangular.module(‘mgcrea.ngStrap.affix’, [‘mgcrea.ngStrap.helpers.dimensions’, ‘mgcrea.ngStrap.helpers.debounce’])nn .provider(‘$affix’, function() {nn var defaults = this.defaults = {n offsetTop: ‘auto’n };nn this.$get = function($window, debounce, dimensions) {nn var bodyEl = angular.element($window.document.body);n var windowEl = angular.element($window);nn function AffixFactory(element, config) {nn var $affix = {};nn // Common varsn var options = angular.extend({}, defaults, config);n var targetEl = options.target;nn // Initial private varsn var reset = ‘affix affix-top affix-bottom’,n setWidth = false,n initialAffixTop = 0,n initialOffsetTop = 0,n offsetTop = 0,n offsetBottom = 0,n affixed = null,n unpin = null;nn var parent = element.parent();n // Options: custom parentn if (options.offsetParent) {n if (options.offsetParent.match(/^\d+$/)) {n for (var i = 0; i < (options.offsetParent * 1) - 1; i++) {n parent = parent.parent();n }n }n else {n parent = angular.element(options.offsetParent);n }n }nn $affix.init = function() {nn this.$parseOffsets();n initialOffsetTop = dimensions.offset(element).top + initialAffixTop;n setWidth = !element.style.width;nn // Bind eventsn targetEl.on(‘scroll’, this.checkPosition);n targetEl.on(‘click’, this.checkPositionWithEventLoop);n windowEl.on(‘resize’, this.$debouncedOnResize);nn // Both of these checkPosition() calls are necessary for the case wheren // the user hits refresh after scrolling to the bottom of the page.n this.checkPosition();n this.checkPositionWithEventLoop();nn };nn $affix.destroy = function() {nn // Unbind eventsn targetEl.off(‘scroll’, this.checkPosition);n targetEl.off(‘click’, this.checkPositionWithEventLoop);n windowEl.off(‘resize’, this.$debouncedOnResize);nn };nn $affix.checkPositionWithEventLoop = function() {nn // IE 9 throws an error if we use ‘this’ instead of ‘$affix’n // in this setTimeout calln setTimeout($affix.checkPosition, 1);nn };nn $affix.checkPosition = function() {n // if (!this.$element.is(‘:visible’)) returnnn var scrollTop = getScrollTop();n var position = dimensions.offset(element);n var elementHeight = dimensions.height(element);nn // Get required affix class according to positionn var affix = getRequiredAffixClass(unpin, position, elementHeight);nn // Did affix status changed this last check?n if(affixed === affix) return;n affixed = affix;nn // Add proper affix classn element.removeClass(reset).addClass(‘affix’ + ((affix !== ‘middle’) ? ‘-’ + affix : ”));nn if(affix === ‘top’) {n unpin = null;n element.css(‘position’, (options.offsetParent) ? ” : ‘relative’);n if(setWidth) {n element.css(‘width’, ”);n }n element.css(‘top’, ”);n } else if(affix === ‘bottom’) {n if (options.offsetUnpin) {n unpin = -(options.offsetUnpin * 1);n }n else {n // Calculate unpin threshold when affixed to bottom.n // Hopefully the browser scrolls pixel by pixel.n unpin = position.top - scrollTop;n }n if(setWidth) {n element.css(‘width’, ”);n }n element.css(‘position’, (options.offsetParent) ? ” : ‘relative’);n element.css(‘top’, (options.offsetParent) ? ” : ((bodyEl.offsetHeight - offsetBottom - elementHeight - initialOffsetTop) + ‘px’));n } else { // affix === ‘middle’n unpin = null;n if(setWidth) {n element.css(‘width’, element.offsetWidth + ‘px’);n }n element.css(‘position’, ‘fixed’);n element.css(‘top’, initialAffixTop + ‘px’);n }nn };nn $affix.$onResize = function() {n $affix.$parseOffsets();n $affix.checkPosition();n };n $affix.$debouncedOnResize = debounce($affix.$onResize, 50);nn $affix.$parseOffsets = function() {n var initialPosition = element.css(‘position’);n // Reset position to calculate correct offsetTopn element.css(‘position’, (options.offsetParent) ? ” : ‘relative’);nn if(options.offsetTop) {n if(options.offsetTop === ‘auto’) {n options.offsetTop = ‘+0’;n }n if(options.offsetTop.match(/^\d+$/)) {n initialAffixTop = - options.offsetTop * 1;n if(options.offsetParent) {n offsetTop = dimensions.offset(parent).top + (options.offsetTop * 1);n }n else {n offsetTop = dimensions.offset(element).top - dimensions.css(element, ‘marginTop’, true) + (options.offsetTop * 1);n }n }n else {n offsetTop = options.offsetTop * 1;n }n }nn if(options.offsetBottom) {n if(options.offsetParent && options.offsetBottom.match(/^\d+$/)) {n // add 1 pixel due to rounding problems…n offsetBottom = getScrollHeight() - (dimensions.offset(parent).top + dimensions.height(parent)) + (options.offsetBottom * 1) + 1;n }n else {n offsetBottom = options.offsetBottom * 1;n }n }nn // Bring back the element’s position after calculationsn element.css(‘position’, initialPosition);n };nn // Private methodsnn function getRequiredAffixClass(unpin, position, elementHeight) {nn var scrollTop = getScrollTop();n var scrollHeight = getScrollHeight();nn if(scrollTop <= offsetTop) {n return ‘top’;n } else if(unpin !== null && (scrollTop + unpin <= position.top)) {n return ‘middle’;n } else if(offsetBottom !== null && (position.top + elementHeight + initialAffixTop >= scrollHeight - offsetBottom)) {n return ‘bottom’;n } else {n return ‘middle’;n }nn }nn function getScrollTop() {n return targetEl === $window ? $window.pageYOffset : targetEl.scrollTop;n }nn function getScrollHeight() {n return targetEl === $window ? $window.document.body.scrollHeight : targetEl.scrollHeight;n }nn $affix.init();n return $affix;nn }nn return AffixFactory;nn };nn })nn .directive(‘bsAffix’, function($affix, $window) {nn return {n restrict: ‘EAC’,n require: ‘^?bsAffixTarget’,n link: function postLink(scope, element, attr, affixTarget) {nn var options = {scope: scope, offsetTop: ‘auto’, target: affixTarget ? affixTarget.$element : angular.element($window)};n angular.forEach([‘offsetTop’, ‘offsetBottom’, ‘offsetParent’, ‘offsetUnpin’], function(key) {n if(angular.isDefined(attr)) options = attr;n });nn var affix = $affix(element, options);n scope.$on(‘$destroy’, function() {n affix && affix.destroy();n options = null;n affix = null;n });nn }n };nn })nn .directive(‘bsAffixTarget’, function() {n return {n controller: function($element) {n this.$element = $element;n }n };n });n”],“sourceRoot”:“/source/”}