{"version":3,"sources":["bottom-bar.js"],"names":["window","$","undefined","VerticalScrollDirection","DOWN","UP","BottomBar","_this","this","_classCallCheck","$document","document","scrollTop","current","event","location","delta","previous","Object","assign","content","element","addClass","onComponentShouldUpdate","bind","onDocumentScroll","append","data","insertBefore","acpv","CompareVehicles","on","setTimeout","reflow","_createClass","key","value","currentTarget","hasClass","href","prop","SavedVehicles","show","isOpen","hide","off","css","remove","elementClientRect","getBoundingClientRect","bottom","contentClientRect","toggleClass","isPinned","removeClass","activateComponent","deactivateComponent","render","onComponentDidUpdate","getScrollDirection","onDocumentScrollUp","onDocumentScrollDown","hasReachedElementBottom","unpin","hasReachedWindowBottom","pin","size","console","log","html","renderCompareLink","renderContactDealerButton","renderSavedLink","jQuery"],"mappings":"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","file":"bottom-bar.min.js","sourcesContent":["(function (window, $, undefined) {\r\n \r\n const VerticalScrollDirection = {\r\n DOWN: 0,\r\n UP: 1\r\n };\r\n\r\n class BottomBar {\r\n\r\n static gotoCompareVehicles(event) {\r\n if (!$(event.currentTarget).hasClass('disabled')) {\r\n location.href = '/vehicle-search#!/compare-vehicles';\r\n }\r\n }\r\n \r\n static gotoSavedVehicles(event) {\r\n if (!$(event.currentTarget).hasClass('disabled')) {\r\n location.href = '/saved-vehicles';\r\n }\r\n }\r\n \r\n $document = $(document);\r\n\r\n scrollTop = {\r\n current: 0,\r\n previous: 0,\r\n \r\n get delta() {\r\n return this.current - this.previous;\r\n }\r\n };\r\n\r\n constructor() {\r\n Object.assign(this, {\r\n content: $(''),\r\n element: $('').addClass('hide-bar'),\r\n onComponentShouldUpdate: this.onComponentShouldUpdate.bind(this),\r\n onDocumentScroll: this.onDocumentScroll.bind(this)\r\n });\r\n\r\n this.element.append(this.content);\r\n this.element.data('controller', this);\r\n this.element.insertBefore($('footer'));\r\n\r\n acpv.CompareVehicles.on('change', this.onComponentShouldUpdate);\r\n acpv.SavedVehicles.on('change', this.onComponentShouldUpdate);\r\n \r\n this.onComponentShouldUpdate();\r\n\r\n // reflow after angular renders (next pass of the event loop)\r\n setTimeout(() => this.reflow());\r\n }\r\n\r\n activateComponent() {\r\n this.element.css('height', `${this.content.prop('offsetHeight')}px`);\r\n this.reflow();\r\n\r\n if (this.isClosed()) { \r\n this.show();\r\n this.$document.on('scroll', this.onDocumentScroll);\r\n }\r\n }\r\n\r\n deactivateComponent() {\r\n if (this.isOpen()) {\r\n this.hide();\r\n this.$document.off('scroll', this.onDocumentScroll);\r\n }\r\n\r\n this.element.css('height', 0);\r\n }\r\n\r\n destroy() {\r\n acpv.CompareVehicles.off('change', this.onComponentShouldUpdate);\r\n acpv.SavedVehicles.off('change', this.onComponentShouldUpdate);\r\n\r\n if (this.isOpen()) {\r\n this.$document.off('scroll', this.onDocumentScroll);\r\n }\r\n\r\n this.element.remove();\r\n }\r\n\r\n getScrollDirection() {\r\n this.scrollTop.previous = this.scrollTop.current;\r\n this.scrollTop.current = this.$document.scrollTop();\r\n\r\n if (this.scrollTop.delta < 0) {\r\n return VerticalScrollDirection.UP;\r\n }\r\n\r\n return VerticalScrollDirection.DOWN;\r\n }\r\n\r\n hasReachedElementBottom() {\r\n const elementClientRect = this.element[0].getBoundingClientRect();\r\n const contentCleintRect = this.content[0].getBoundingClientRect();\r\n\r\n return contentCleintRect.bottom - elementClientRect.bottom > -1;\r\n }\r\n\r\n hasReachedWindowBottom() {\r\n const contentClientRect = this.content[0].getBoundingClientRect();\r\n\r\n return window.innerHeight - contentClientRect.bottom < 1;\r\n }\r\n\r\n hide() {\r\n this.content.toggleClass('animate', this.isPinned());\r\n this.element.addClass('hide-bar').removeClass('show-bar');\r\n }\r\n \r\n isClosed() {\r\n return this.element.hasClass('hide-bar');\r\n }\r\n \r\n isOpen() {\r\n return this.element.hasClass('show-bar');\r\n }\r\n\r\n isPinned() {\r\n return this.content.hasClass('pin');\r\n }\r\n\r\n onComponentDidUpdate() {\r\n if (this.shouldComponentBecomeActive()) {\r\n return this.activateComponent();\r\n }\r\n\r\n return this.deactivateComponent();\r\n }\r\n\r\n onComponentShouldUpdate() {\r\n this.render();\r\n this.onComponentDidUpdate();\r\n }\r\n\r\n onDocumentScroll() {\r\n if (this.getScrollDirection() === VerticalScrollDirection.UP) {\r\n return this.onDocumentScrollUp();\r\n }\r\n\r\n return this.onDocumentScrollDown();\r\n }\r\n\r\n onDocumentScrollDown() {\r\n if (this.hasReachedElementBottom()) {\r\n this.unpin();\r\n }\r\n }\r\n\r\n onDocumentScrollUp() {\r\n if (this.hasReachedWindowBottom()) {\r\n this.pin();\r\n }\r\n }\r\n \r\n pin() {\r\n this.content.addClass('pin');\r\n }\r\n\r\n unpin() {\r\n this.content.removeClass('animate pin');\r\n }\r\n\r\n reflow() {\r\n if (this.isPinned()) {\r\n if (this.hasReachedElementBottom()) {\r\n this.unpin();\r\n }\r\n } else if (this.hasReachedWindowBottom()) {\r\n this.pin();\r\n }\r\n }\r\n\r\n shouldComponentBecomeActive() {\r\n return acpv.CompareVehicles.size || acpv.SavedVehicles.size;\r\n }\r\n \r\n show() {\r\n this.content.toggleClass('animate', this.isPinned());\r\n this.element.addClass('show-bar').removeClass('hide-bar');\r\n }\r\n\r\n renderCompareLink() {\r\n const {size} = acpv.CompareVehicles;\r\n if (size > 1){\r\n console.log(\"size: \" + size)\r\n return '\\n \\n \\n
\\n
Compare
\\n
\\n (' + size + ')\\n
\\n
\\n \\n
View Comparison
\\n \\n \\n '; \r\n }\r\n else{\r\n return '\\n \\n \\n
\\n
Compare
\\n
\\n (' + size + ')\\n
\\n
\\n \\n
Select 2 to 3 vehicles
\\n \\n \\n ';\r\n } \r\n \r\n }\r\n\r\n renderContactDealerButton() {\r\n return `\r\n
\r\n \r\n CONTACT DEALER\r\n \r\n
\r\n `;\r\n }\r\n\r\n renderSavedLink() {\r\n const {size} = acpv.SavedVehicles;\r\n\r\n return `\r\n
\r\n
\r\n
0 && 'underline'}\">Saved
\r\n
(${size})
\r\n
\r\n `;\r\n }\r\n\r\n render() {\r\n this.content.html(`\r\n ${this.renderCompareLink()}\r\n ${this.renderContactDealerButton()}\r\n ${this.renderSavedLink()}\r\n `);\r\n }\r\n }\r\n\r\n window.acpv.BottomBar = BottomBar;\r\n\r\n})(window, jQuery);\r\n"]}