!function(b,a){"object"==typeof exports&&"undefined"!=typeof module?a(exports):"function"==typeof define&&define.amd?define(["exports"],a):a(b.StickySidebar={})}(this,function(b){"use strict";var a,e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},c=function(b,a){return b(a={exports:{}},a.exports),a.exports}(function(a,b){!function(c,a){a(b)}(e,function(a){Object.defineProperty(a,"__esModule",{value:!0});var c,d,e=function(){function a(d,c){for(var b=0;b1&& void 0!==arguments[1]?arguments[1]:{};if(function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}(this,a),this.options=a.extend(d,c),this.sidebar="string"==typeof b?document.querySelector(b):b,void 0===this.sidebar)throw new Error("There is no specific sidebar element.");this.sidebarInner=!1,this.container=this.sidebar.parentElement,this.affixedType="STATIC",this.direction="down",this.support={transform:!1,transform3d:!1},this._initialized=!1,this._reStyle=!1,this._breakpoint=!1,this.dimensions={translateY:0,maxTranslateY:0,topSpacing:0,lastTopSpacing:0,bottomSpacing:0,lastBottomSpacing:0,sidebarHeight:0,sidebarWidth:0,containerTop:0,containerHeight:0,viewportHeight:0,viewportTop:0,lastViewportTop:0},["handleEvent"].forEach(function(a){e[a]=e[a].bind(e)}),this.initialize()}return e(a,[{key:"initialize",value:function(){var c=this;if(this._setSupportFeatures(),this.options.innerWrapperSelector&&(this.sidebarInner=this.sidebar.querySelector(this.options.innerWrapperSelector),null===this.sidebarInner&&(this.sidebarInner=!1)),!this.sidebarInner){var a=document.createElement("div");for(a.setAttribute("class","inner-wrapper-sticky"),this.sidebar.appendChild(a);this.sidebar.firstChild!=a;)a.appendChild(this.sidebar.firstChild);this.sidebarInner=this.sidebar.querySelector(".inner-wrapper-sticky")}if(this.options.containerSelector){var b=document.querySelectorAll(this.options.containerSelector);if((b=Array.prototype.slice.call(b)).forEach(function(a,b){a.contains(c.sidebar)&&(c.container=a)}),!b.length)throw new Error("The container does not contains on the sidebar.")}"function"!=typeof this.options.topSpacing&&(this.options.topSpacing=parseInt(this.options.topSpacing)||0),"function"!=typeof this.options.bottomSpacing&&(this.options.bottomSpacing=parseInt(this.options.bottomSpacing)||0),this._widthBreakpoint(),this.calcDimensions(),this.stickyPosition(),this.bindEvents(),this._initialized=!0}},{key:"bindEvents",value:function(){window.addEventListener("resize",this,{passive:!0,capture:!1}),window.addEventListener("scroll",this,{passive:!0,capture:!1}),this.sidebar.addEventListener("update"+c,this),this.options.resizeSensor&&"undefined"!=typeof ResizeSensor&&(new ResizeSensor(this.sidebarInner,this.handleEvent),new ResizeSensor(this.container,this.handleEvent))}},{key:"handleEvent",value:function(a){this.updateSticky(a)}},{key:"calcDimensions",value:function(){if(!this._breakpoint){var b=this.dimensions;b.containerTop=a.offsetRelative(this.container).top,b.containerHeight=this.container.clientHeight,b.containerBottom=b.containerTop+b.containerHeight,b.sidebarHeight=this.sidebarInner.offsetHeight,b.sidebarWidth=this.sidebarInner.offsetWidth,b.viewportHeight=window.innerHeight,b.maxTranslateY=b.containerHeight-b.sidebarHeight,this._calcDimensionsWithScroll()}}},{key:"_calcDimensionsWithScroll",value:function(){var b=this.dimensions;b.sidebarLeft=a.offsetRelative(this.sidebar).left,b.viewportTop=document.documentElement.scrollTop||document.body.scrollTop,b.viewportBottom=b.viewportTop+b.viewportHeight,b.viewportLeft=document.documentElement.scrollLeft||document.body.scrollLeft,b.topSpacing=this.options.topSpacing,b.bottomSpacing=this.options.bottomSpacing,"function"==typeof b.topSpacing&&(b.topSpacing=parseInt(b.topSpacing(this.sidebar))||0),"function"==typeof b.bottomSpacing&&(b.bottomSpacing=parseInt(b.bottomSpacing(this.sidebar))||0),"VIEWPORT-TOP"===this.affixedType?b.topSpacing=a.containerBottom?(a.translateY=a.containerBottom-c,b="CONTAINER-BOTTOM"):d>=a.containerTop&&(a.translateY=d-a.containerTop,b="VIEWPORT-TOP"):a.containerBottom<=e?(a.translateY=a.containerBottom-c,b="CONTAINER-BOTTOM"):c+a.translateY<=e?(a.translateY=e-c,b="VIEWPORT-BOTTOM"):a.containerTop+a.translateY<=d&&0!==a.translateY&&a.maxTranslateY!==a.translateY&&(b="VIEWPORT-UNBOTTOM"),b}},{key:"_getAffixTypeScrollingUp",value:function(){var a=this.dimensions,d=a.sidebarHeight+a.containerTop,c=a.viewportTop+a.topSpacing,e=a.viewportBottom-a.bottomSpacing,b=this.affixedType;return c<=a.translateY+a.containerTop?(a.translateY=c-a.containerTop,b="VIEWPORT-TOP"):a.containerBottom<=e?(a.translateY=a.containerBottom-d,b="CONTAINER-BOTTOM"):!this.isSidebarFitsViewport()&&a.containerTop<=c&&0!==a.translateY&&a.maxTranslateY!==a.translateY&&(b="VIEWPORT-UNBOTTOM"),b}},{key:"_getStyle",value:function(d){if(void 0!==d){var c={inner:{},outer:{}},b=this.dimensions;switch(d){case"VIEWPORT-TOP":c.inner={position:"fixed",top:b.topSpacing,left:b.sidebarLeft-b.viewportLeft,width:b.sidebarWidth};break;case"VIEWPORT-BOTTOM":c.inner={position:"fixed",top:"auto",left:b.sidebarLeft,bottom:b.bottomSpacing,width:b.sidebarWidth};break;case"CONTAINER-BOTTOM":case"VIEWPORT-UNBOTTOM":var e=this._getTranslate(0,b.translateY+"px");e?c.inner={transform:e}:c.inner={position:"absolute",top:b.translateY,width:b.sidebarWidth}}switch(d){case"VIEWPORT-TOP":case"VIEWPORT-BOTTOM":case"VIEWPORT-UNBOTTOM":case"CONTAINER-BOTTOM":c.outer={height:b.sidebarHeight,position:"relative"}}return c.outer=a.extend({height:"",position:""},c.outer),c.inner=a.extend({position:"relative",top:"",left:"",bottom:"",width:"",transform:""},c.inner),c}}},{key:"stickyPosition",value:function(e){if(!this._breakpoint){e=this._reStyle||e||!1,this.options.topSpacing,this.options.bottomSpacing;var b=this.getAffixType(),d=this._getStyle(b);if((this.affixedType!=b||e)&&b){var h="affix."+b.toLowerCase().replace("viewport-","")+c;for(var f in a.eventTrigger(this.sidebar,h),"STATIC"===b?a.removeClass(this.sidebar,this.options.stickyClass):a.addClass(this.sidebar,this.options.stickyClass),d.outer){var i="number"==typeof d.outer[f]?"px":"";this.sidebar.style[f]=d.outer[f]+i}for(var g in d.inner){var j="number"==typeof d.inner[g]?"px":"";this.sidebarInner.style[g]=d.inner[g]+j}var k="affixed."+b.toLowerCase().replace("viewport-","")+c;a.eventTrigger(this.sidebar,k)}else this._initialized&&(this.sidebarInner.style.left=d.inner.left);this.affixedType=b}}},{key:"_widthBreakpoint",value:function(){window.innerWidth<=this.options.minWidth?(this._breakpoint=!0,this.affixedType="STATIC",this.sidebar.removeAttribute("style"),a.removeClass(this.sidebar,this.options.stickyClass),this.sidebarInner.removeAttribute("style")):this._breakpoint=!1}},{key:"updateSticky",value:function(){var a,c=this,b=arguments.length>0&& void 0!==arguments[0]?arguments[0]:{};this._running||(this._running=!0,a=b.type,requestAnimationFrame(function(){"scroll"===a?(c._calcDimensionsWithScroll(),c.observeScrollDir(),c.stickyPosition()):(c._widthBreakpoint(),c.calcDimensions(),c.stickyPosition(!0)),c._running=!1}))}},{key:"_setSupportFeatures",value:function(){var b=this.support;b.transform=a.supportTransform(),b.transform3d=a.supportTransform(!0)}},{key:"_getTranslate",value:function(){var a=arguments.length>0&& void 0!==arguments[0]?arguments[0]:0,b=arguments.length>1&& void 0!==arguments[1]?arguments[1]:0,c=arguments.length>2&& void 0!==arguments[2]?arguments[2]:0;return this.support.transform3d?"translate3d("+a+", "+b+", "+c+")":!!this.support.translate&&"translate("+a+", "+b+")"}},{key:"destroy",value:function(){window.removeEventListener("resize",this,{capture:!1}),window.removeEventListener("scroll",this,{capture:!1}),this.sidebar.classList.remove(this.options.stickyClass),this.sidebar.style.minHeight="",this.sidebar.removeEventListener("update"+c,this);var a={inner:{},outer:{}};for(var b in a.inner={position:"",top:"",left:"",bottom:"",width:"",transform:""},a.outer={height:"",position:""},a.outer)this.sidebar.style[b]=a.outer[b];for(var d in a.inner)this.sidebarInner.style[d]=a.inner[d];this.options.resizeSensor&&"undefined"!=typeof ResizeSensor&&(ResizeSensor.detach(this.sidebarInner,this.handleEvent),ResizeSensor.detach(this.container,this.handleEvent))}}],[{key:"supportTransform",value:function(c){var d=!1,a=c?"perspective":"transform",b=a.charAt(0).toUpperCase()+a.slice(1),e=document.createElement("support").style;return(a+" "+["Webkit","Moz","O","ms"].join(b+" ")+b).split(" ").forEach(function(a,b){if(void 0!==e[a])return d=a,!1}),d}},{key:"eventTrigger",value:function(d,b,c){try{var a=new CustomEvent(b,{detail:c})}catch(e){var a=document.createEvent("CustomEvent");a.initCustomEvent(b,!0,!0,c)}d.dispatchEvent(a)}},{key:"extend",value:function(c,d){var b={};for(var a in c)void 0!==d[a]?b[a]=d[a]:b[a]=c[a];return b}},{key:"offsetRelative",value:function(a){var b={left:0,top:0};do{var c=a.offsetTop,d=a.offsetLeft;isNaN(c)||(b.top+=c),isNaN(d)||(b.left+=d),a="BODY"===a.tagName?a.parentElement:a.offsetParent}while(a)return b}},{key:"addClass",value:function(b,c){a.hasClass(b,c)||(b.classList?b.classList.add(c):b.className+=" "+c)}},{key:"removeClass",value:function(b,c){a.hasClass(b,c)&&(b.classList?b.classList.remove(c):b.className=b.className.replace(new RegExp("(^|\\b)"+c.split(" ").join("|")+"(\\b|$)","gi")," "))}},{key:"hasClass",value:function(a,b){return a.classList?a.classList.contains(b):new RegExp("(^| )"+b+"( |$)","gi").test(a.className)}},{key:"defaults",get:function(){return d}}]),a}());a.default=b,window.StickySidebar=b})}),d=(a=c)&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a;b.default=d,b.__moduleExports=c,Object.defineProperty(b,"__esModule",{value:!0})})