{"version":3,"sources":["webpack:////Users/owenli/Documents/workspace/awi-wlc-fe/src/views/pages/mixins/fixedScrollMixinPage/fixedScrollMixinPage.js","webpack:////Users/owenli/Documents/workspace/awi-wlc-fe/src/views/pages/topicDetailsPage/js/topicDetailsPage.js","webpack:///./wlc/mediaQuery.js"],"names":["normalizeWheel","require","fixedScrollMixinPage","initFixedScrollMixin","self","blocks","arguments","length","undefined","$element","$","element","$tplScroller","$tplHeader","$tplFooter","isScrolling","fixedScroll","data","fixedScrollItems","fixedScrollActiveItemIndex","$sectionFixedScrollContainer","$sectionFixedScrollItems","_","isNil","children","toArray","resizeEvent","setFixedScrollActiveItemIndex","index","scrollToElementIndex","section","hide","scrollIntoView","duration","easing","finally","setTimeout","scrollDuration","scrollToPreviousSection","prevElementIndex","scrollToNextSection","nextElementIndex","concat","_toConsumableArray","off","$fixedScrollEvent","window","css","overflow","overflowY","forEach","attr","wrapInner","find","mediaQuery","breakpointMaxWidth","BREAKPOINTS","SM","each","$fixedScrollItem","$fixedScrollItemInner","height","flex","on","event","preventDefault","outerHeight","clientHeight","minHeight","debounce","leading","trailing","width","position","clientY","isElementScrollable","isElementScrollAtTop","scrollTop","isElementScrollAtBottom","Math","ceil","scrollHeight","offsetHeight","isScrollLocked","hasAttribute","updateScrolledIndex","scrolledIndex","findIndex","fixedScrollElement","parents","throttle","pixelY","originalEvent","currentTarget","lockScroll","isScrollingUp","pixelThreshold","isScrollingDown","touches","deltaY","changedTouches","deltaThreshold","setFixedScrollEvent","oldElementIndex","floor","top","$lastScrollElement","setFixedScrollActiveElement","fixedScrollInnerElement","adjustSectionItemsScrollPosition","TopicDetailsPage","_createClass","_classCallCheck","this","Object","assign","prototype","MediaQuery","XS","MD","LG","XL","key","value","breakpoint","max","document","documentElement","clientWidth","innerWidth","isFinite"],"mappings":"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","file":"page-19.2f662a3aa586e55a56ca.js","sourcesContent":["import { scrollIntoView } from 'scroll-js';\nimport { mediaQuery } from '../../../../global/js/wlc/mediaQuery';\nlet normalizeWheel = require('normalize-wheel');\n\nexport let fixedScrollMixinPage = {\n\tinitFixedScrollMixin: (self, blocks = null) => {\n\t\tself.$element = self.$element || $(self.element);\n\t\tself.$tplScroller = self.$tplScroller || $('.tpl-scroller');\n\t\tself.$tplHeader = self.$tplHeader || $('.tpl-header');\n\t\tself.$tplFooter = self.$tplFooter || $('.tpl-footer');\n\n\t\tlet isScrolling = false; // Flag for scrolling, can’t scroll if set to false\n\t\tlet fixedScroll = self.$element.data('fixed-scroll'); // Attribute to enable / disable fixed scroll\n\t\tlet scrollDuration = 750;\n\t\tlet scrollEasing = 'ease-in-out';\n\t\tlet fixedScrollItems = [];\n\t\tlet fixedScrollActiveItemIndex = 0;\n\t\tlet $sectionFixedScrollContainer = $('[data-section-fixed-scroll-container]');\n\t\tlet $sectionFixedScrollItems = [];\n\n\t\tif(_.isNil(blocks)) {\n\t\t\tblocks = $sectionFixedScrollContainer.children().toArray();\n\t\t}\n\n\t\t// Sets attributes to latch events and styling onto the fixed scroll\n\t\tlet setAttributes = () => {\n\t\t\t// Apply a section-fixed-scroll-item attribute to target against\n\t\t\tfixedScrollItems.forEach((element) => {\n\t\t\t\tif(element === self.$tplFooter[0]) {\n\t\t\t\t\t// Add a fixed scroll event to the footer as this is the only element that is outside the fixed-scroll-container\n\t\t\t\t\t$(element).attr('fixed-scroll-event', '');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Insert an inner element with the section-fixed-scroll-item attribute\n\t\t\t\t\t// This is because inside the item we a tweaking to a full height\n\t\t\t\t\t$(element).attr('section-fixed-scroll-item', '');\n\t\t\t\t\t$(element).wrapInner('
');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$sectionFixedScrollItems = $sectionFixedScrollContainer.find('[section-fixed-scroll-item]');\n\t\t};\n\n\t\t// Enables/disables fixed scroll on mobile screens and handles the sizes dependant on viewport height & width.\n\t\tlet setSectionResizeEvent = () => {\n\t\t\tlet resizeEvent = () => {\n\t\t\t\tif(!mediaQuery.breakpointMaxWidth(mediaQuery.BREAKPOINTS.SM)) {\n\t\t\t\t\tself.$tplScroller.css({\n\t\t\t\t\t\toverflowY: 'hidden'\n\t\t\t\t\t});\n\n\t\t\t\t\t$sectionFixedScrollItems.each((index, element) => {\n\t\t\t\t\t\tlet $fixedScrollItem = $(element);\n\t\t\t\t\t\tlet $fixedScrollItemInner = $fixedScrollItem.find(`[section-fixed-scroll-item-inner]`);\n\n\t\t\t\t\t\t// Reset the values\n\t\t\t\t\t\t$fixedScrollItem.css({\n\t\t\t\t\t\t\theight: 'initial'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$fixedScrollItemInner.css({\n\t\t\t\t\t\t\tflex: '1 1 auto'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Prevents bouncing scroll on iOS devices\n\t\t\t\t\t\t$fixedScrollItemInner.on('touchmove', (event) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif($fixedScrollItemInner.outerHeight() >= self.$tplScroller[0].clientHeight) {\n\t\t\t\t\t\t\t$fixedScrollItem.css({\n\t\t\t\t\t\t\t\theight: self.$tplScroller[0].clientHeight\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t$fixedScrollItemInner.css({\n\t\t\t\t\t\t\t\t'minHeight': '100%',\n\t\t\t\t\t\t\t\t'overflowY': 'scroll',\n\t\t\t\t\t\t\t\t'flex': '1 1 auto'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t$fixedScrollItem.css({\n\t\t\t\t\t\t\t\theight: 'initial'\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t$fixedScrollItemInner.css({\n\t\t\t\t\t\t\t\tflex: '1 1 auto'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tself.$tplScroller.css({\n\t\t\t\t\t\toverflowY: 'scroll'\n\t\t\t\t\t});\n\n\t\t\t\t\t$sectionFixedScrollItems.each((index, element) => {\n\t\t\t\t\t\tlet $fixedScrollItem = $(element);\n\t\t\t\t\t\tlet $fixedScrollItemInner = $fixedScrollItem.find(`[section-fixed-scroll-item-inner]`);\n\n\t\t\t\t\t\t$fixedScrollItem.css({\n\t\t\t\t\t\t\theight: 'unset'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$fixedScrollItemInner.css({\n\t\t\t\t\t\t\theight: 'unset',\n\t\t\t\t\t\t\toverflowY: 'unset',\n\t\t\t\t\t\t\tflex: 'unset'\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t$(window).on('resize.fixedScrollMixin', _.debounce(() => {\n\t\t\t\tresizeEvent();\n\t\t\t}, 250, { leading: false, trailing: true }));\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tresizeEvent();\n\t\t\t}, 250);\n\t\t};\n\n\t\t// Sets the default styles for the fixedScrollItems\n\t\tlet setSectionStyles = () => {\n\t\t\t$sectionFixedScrollItems.each((index, element) => {\n\t\t\t\tlet $fixedScrollItem = $(element);\n\t\t\t\tlet $fixedScrollItemInner = $fixedScrollItem.find(`[section-fixed-scroll-item-inner]`);\n\n\t\t\t\t$fixedScrollItem.css({\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\tposition: 'relative'\n\t\t\t\t});\n\n\t\t\t\t$fixedScrollItemInner.css({\n\t\t\t\t\twidth: '100%'\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tlet setFixedScrollEvent = () => {\n\t\t\tself.$fixedScrollEvent = $('[fixed-scroll-event]');\n\n\t\t\tlet isElementScrollable = ($element) => {\n\t\t\t\treturn $element.children()[0].clientHeight > self.$tplScroller[0].clientHeight;\n\t\t\t};\n\n\t\t\tlet isElementScrollAtTop = ($element) => {\n\t\t\t\treturn $element[0].scrollTop <= 0;\n\t\t\t};\n\n\t\t\tlet isElementScrollAtBottom = ($element) => {\n\t\t\t\treturn (Math.ceil($element[0].scrollTop) >= ($element[0].scrollHeight - $element[0].offsetHeight));\n\t\t\t};\n\n\t\t\tlet isScrollLocked = ($element) => {\n\t\t\t\treturn $element[0].hasAttribute('fixed-scroll-event-lock');\n\t\t\t};\n\n\t\t\t// Ensure that the active index is the element that is selected to scroll\n\t\t\tlet updateScrolledIndex = ($element) => {\n\t\t\t\tlet scrolledIndex;\n\t\t\t\t// If the selected element is the element before the tplFooter element and the active index is the tplFooter element\n\t\t\t\tif(fixedScrollItems[fixedScrollItems.length - 2] &&\n\t\t\t\t\tfixedScrollItems[fixedScrollItems.length - 2] === $element[0] && (fixedScrollActiveItemIndex === fixedScrollItems.length - 1)) {\n\t\t\t\t\tscrolledIndex = fixedScrollItems.length - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tscrolledIndex = _.findIndex(fixedScrollItems, (fixedScrollElement) => {\n\t\t\t\t\t\tif(fixedScrollElement === self.$tplFooter[0]) {\n\t\t\t\t\t\t\treturn fixedScrollElement === $element[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Return the current selected element\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn fixedScrollElement === $element.parents('[section-fixed-scroll-item]')[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tsetFixedScrollActiveItemIndex(scrolledIndex);\n\t\t\t};\n\n\t\t\t// Normal desktop devices scrolling event\n\t\t\tself.$fixedScrollEvent.on('DOMMouseScroll.fixedScrollMixin wheel.fixedScrollMixin scroll.fixedScrollMixin', _.throttle((event) => {\n\t\t\t\tlet pixelThreshold = 5;\n\t\t\t\tif(!mediaQuery.breakpointMaxWidth(mediaQuery.BREAKPOINTS.SM) && !isScrolling) {\n\t\t\t\t\tisScrolling = true;\n\t\t\t\t\tlet nomalizeWheelValue = normalizeWheel(event.originalEvent);\n\t\t\t\t\tlet pixelY = nomalizeWheelValue.pixelY;\n\t\t\t\t\tlet $element = $(event.currentTarget);\n\n\t\t\t\t\t// Prevent scrolling that is triggered in certain elements that have an inner scroll.\n\t\t\t\t\tlet lockScroll = isScrollLocked($element);\n\n\t\t\t\t\tupdateScrolledIndex($element);\n\n\t\t\t\t\tlet isScrollingUp = () => {\n\t\t\t\t\t\treturn pixelY < (pixelThreshold * -1);\n\t\t\t\t\t};\n\n\t\t\t\t\tlet isScrollingDown = () => {\n\t\t\t\t\t\treturn pixelY > pixelThreshold;\n\t\t\t\t\t};\n\n\t\t\t\t\t// There is a scrollable element inside the section\n\t\t\t\t\tif(isElementScrollable($element)) {\n\t\t\t\t\t\t// Scrolled to the top of the section scroll item and the scroll direction is up\n\t\t\t\t\t\tif(isElementScrollAtTop($element) && isScrollingUp() && !lockScroll) {\n\t\t\t\t\t\t\tscrollToPreviousSection();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Scrolled to the bottom of the section scroll item and the scroll direction is down\n\t\t\t\t\t\telse if(isElementScrollAtBottom($element) &&\n\t\t\t\t\t\t\tisScrollingDown() && !lockScroll) {\n\t\t\t\t\t\t\tscrollToNextSection();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tisScrolling = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// There isn’t a scrollable event inside the section\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Scroll up\n\t\t\t\t\t\tif(isScrollingUp() && !lockScroll) {\n\t\t\t\t\t\t\tscrollToPreviousSection();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Scroll down\n\t\t\t\t\t\telse if(isScrollingDown() && !lockScroll) {\n\t\t\t\t\t\t\tscrollToNextSection();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tisScrolling = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 250, { leading: false, trailing: true }));\n\n\t\t\t// Deals with touch devices that don’t trigger scroll events\n\t\t\t(() => {\n\t\t\t\tlet clientY;\n\t\t\t\tlet deltaThreshold = 75;\n\n\t\t\t\tself.$fixedScrollEvent.on('touchstart.fixedScrollMixin', _.debounce((event) => {\n\t\t\t\t\tclientY = event.touches[0].clientY;\n\t\t\t\t}, 250, { leading: true, trailing: false }));\n\n\t\t\t\tself.$fixedScrollEvent.on('touchend.fixedScrollMixin', _.debounce((event) => {\n\t\t\t\t\tlet deltaY = event.changedTouches[0].clientY - clientY;\n\n\t\t\t\t\tif(!mediaQuery.breakpointMaxWidth(mediaQuery.BREAKPOINTS.SM) && !isScrolling) {\n\t\t\t\t\t\tisScrolling = true;\n\t\t\t\t\t\tlet $element = $(event.currentTarget);\n\n\t\t\t\t\t\t// Prevent scrolling that is triggered in certain elements that have an inner scroll.\n\t\t\t\t\t\tlet lockScroll = isScrollLocked($element);\n\n\t\t\t\t\t\tupdateScrolledIndex($element);\n\n\t\t\t\t\t\tlet isScrollingUp = () => {\n\t\t\t\t\t\t\treturn deltaY > deltaThreshold;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tlet isScrollingDown = () => {\n\t\t\t\t\t\t\treturn deltaY < (deltaThreshold * -1);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// There is a scrollable element inside the section\n\t\t\t\t\t\tif(isElementScrollable($element)) {\n\t\t\t\t\t\t\t// Scrolled to the top of the section scroll item and the scroll direction is up\n\t\t\t\t\t\t\tif(isElementScrollAtTop($element) && isScrollingUp() && !lockScroll) {\n\t\t\t\t\t\t\t\tscrollToPreviousSection();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Scrolled to the bottom of the section scroll item and the scroll direction is down\n\t\t\t\t\t\t\telse if(isElementScrollAtBottom($element) &&\n\t\t\t\t\t\t\t\tisScrollingDown() && !lockScroll) {\n\t\t\t\t\t\t\t\tscrollToNextSection();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tisScrolling = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// There isn’t a scrollable event inside the section\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Scroll up\n\t\t\t\t\t\t\tif(isScrollingUp() && !lockScroll) {\n\t\t\t\t\t\t\t\tscrollToPreviousSection();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Scroll down\n\t\t\t\t\t\t\telse if(isScrollingDown() && !lockScroll) {\n\t\t\t\t\t\t\t\tscrollToNextSection();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tisScrolling = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, 250, { leading: false, trailing: true }));\n\t\t\t})();\n\t\t};\n\n\t\tlet setFixedScrollActiveItemIndex = (index) => {\n\t\t\tfixedScrollActiveItemIndex = index;\n\t\t};\n\n\t\tlet setFixedScrollActiveElement = () => {\n\t\t\tfixedScrollItems.forEach((element, index) => {\n\t\t\t\tif(0 >= Math.floor($(element).position().top)) {\n\t\t\t\t\tfixedScrollActiveItemIndex = index;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Deals with footer as an active element index\n\t\t\tlet $lastScrollElement = $(fixedScrollItems[fixedScrollItems.length - 1]);\n\t\t\tif(Math.floor(self.$tplScroller.outerHeight()) >= (Math.floor($lastScrollElement.position().top + $lastScrollElement.outerHeight()) - 1)) {\n\t\t\t\tfixedScrollActiveItemIndex = fixedScrollItems.length - 1;\n\t\t\t}\n\t\t};\n\n\t\t// Animate the scroll only when the oldActiveElementIndex isnt the same as the current activeElementIndex\n\t\t// This fixes the scrollPositioning of each section so that it is seemless\n\t\tlet adjustSectionItemsScrollPosition = (oldElementIndex) => {\n\t\t\tif(oldElementIndex !== fixedScrollActiveItemIndex) {\n\t\t\t\t$sectionFixedScrollItems.each((index, element) => {\n\t\t\t\t\tlet $fixedScrollItemInner = $(element).find(`[section-fixed-scroll-item-inner]`);\n\t\t\t\t\tlet fixedScrollInnerElement = $fixedScrollItemInner[0];\n\t\t\t\t\tif(index < fixedScrollActiveItemIndex) {\n\t\t\t\t\t\t// Scroll this sections scroll to the bottom\n\t\t\t\t\t\tfixedScrollInnerElement.scrollTop = fixedScrollInnerElement.scrollHeight - fixedScrollInnerElement.clientHeight;\n\t\t\t\t\t}\n\t\t\t\t\telse if(index > fixedScrollActiveItemIndex) {\n\t\t\t\t\t\t// Scroll this sections scroll to the top\n\t\t\t\t\t\t$fixedScrollItemInner[0].scrollTop = 0;\n\t\t\t\t\t}\n\t\t\t\t\t// Only scroll the current section when not scrolling\n\t\t\t\t\telse if(!isScrolling) {\n\t\t\t\t\t\tif(oldElementIndex < fixedScrollActiveItemIndex) {\n\t\t\t\t\t\t\t// Scroll this sections scroll to the top when the oldElementIndex is less then the current element index\n\t\t\t\t\t\t\t$fixedScrollItemInner[0].scrollTop = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(oldElementIndex > fixedScrollActiveItemIndex) {\n\t\t\t\t\t\t\t// Scroll this sections scroll to the bottom\n\t\t\t\t\t\t\t$fixedScrollItemInner[0].scrollTop = fixedScrollInnerElement.scrollHeight - fixedScrollInnerElement.clientHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t// tplScroller is invoked when the sectionNavigator widget is clicked or when the element scroll event in $sectionFixedScrollItems is triggered\n\t\tlet setTplScrollerEvent = () => {\n\t\t\tself.$tplScroller.on('scroll.fixedScrollMixin touchmove.fixedScrollMixin', _.throttle(() => {\n\t\t\t\tlet oldElementIndex = fixedScrollActiveItemIndex;\n\n\t\t\t\t// Trailing duration\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetFixedScrollActiveElement();\n\t\t\t\t\tadjustSectionItemsScrollPosition(oldElementIndex);\n\t\t\t\t}, scrollDuration);\n\t\t\t}, scrollDuration, { leading: true, trailing: false }));\n\t\t};\n\n\t\tlet scrollToElementIndex = (index) => {\n\t\t\tlet section = fixedScrollItems[index];\n\n\t\t\t// Hide tooltip if exists\n\t\t\tif($('#notepadTooltip').length) {\n\t\t\t\t$('#notepadTooltip').hide();\n\t\t\t}\n\n\t\t\t// Existing scroll into view\n\t\t\tscrollIntoView(section, self.$tplScroller[0], { duration: scrollDuration, easing: scrollEasing }).finally(() => {\n\t\t\t\tsetFixedScrollActiveItemIndex(index);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tisScrolling = false;\n\t\t\t\t}, scrollDuration + 100);\n\t\t\t});\n\t\t};\n\n\t\t// Scrolls to the previous index\n\t\tlet scrollToPreviousSection = () => {\n\t\t\tlet prevElementIndex = fixedScrollActiveItemIndex - 1;\n\n\t\t\tif(prevElementIndex >= 0) {\n\t\t\t\tscrollToElementIndex(prevElementIndex);\n\t\t\t}\n\t\t\t// Edge case for when the footer is displayed\n\t\t\telse if(fixedScrollActiveItemIndex === 0) {\n\t\t\t\tscrollToElementIndex(0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tisScrolling = false;\n\t\t\t}\n\t\t};\n\n\t\t// Scrolls to the next index\n\t\tlet scrollToNextSection = () => {\n\t\t\tlet nextElementIndex = fixedScrollActiveItemIndex + 1;\n\n\t\t\tif(nextElementIndex <= (fixedScrollItems.length - 1)) {\n\t\t\t\tscrollToElementIndex(nextElementIndex);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tisScrolling = false;\n\t\t\t}\n\t\t};\n\n\t\t// Remove scrolling events when sections are inactive. Deals with courseAssessmentPage where fixedScrollItems are re-instantiated\n\t\tlet unsetEvents = () => {\n\t\t\tself.$tplScroller.off('scroll.fixedScrollMixin touchmove.fixedScrollMixin');\n\n\t\t\tif(self.$fixedScrollEvent &&self. $fixedScrollEvent.length > 0) {\n\t\t\t\tself.$fixedScrollEvent.off('touchstart.fixedScrollMixin touchend.fixedScrollMixin DOMMouseScroll.fixedScrollMixin wheel.fixedScrollMixin scroll.fixedScrollMixin');\n\t\t\t}\n\n\t\t\t$(window).off('resize.fixedScrollMixin');\n\t\t};\n\n\t\tif(blocks.length > 0) {\n\t\t\tfixedScrollItems = [...blocks, self.$tplFooter[0]];\n\n\t\t\tif(fixedScroll) {\n\t\t\t\t// Remove old events\n\t\t\t\tunsetEvents();\n\n\t\t\t\t// Prevents scroll bouncing for Mac devices\n\t\t\t\t$('html').css({\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t});\n\n\t\t\t\tself.$tplScroller.css({\n\t\t\t\t\toverflowY: 'hidden'\n\t\t\t\t});\n\t\t\t\t// Deals with targeting alongside overlay.js file. This is then lower priority class than an inline “overflow: hidden !important”.\n\n\t\t\t\tsetAttributes();\n\t\t\t\tsetSectionResizeEvent();\n\t\t\t\tsetSectionStyles();\n\t\t\t\tsetFixedScrollEvent();\n\t\t\t\tsetTplScrollerEvent();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconsole.error('FixedScrollMixin::Error', 'Please insert a list of element to be used for the FixedScrollMixin');\n\t\t}\n\t},\n};\n","const NS = 'topicDetailsPage';\nconst CLS = 'TopicDetailsPage';\n\nimport 'babel-polyfill';\nimport 'regenerator-runtime/runtime';\n\nimport { fixedScrollMixinPage } from '../../../pages/mixins/fixedScrollMixinPage/fixedScrollMixinPage';\n\nexport class TopicDetailsPage {\n\tconstructor(element) {\n\t\tthis.element = element;\n\t\tthis.$element = $(element);\n\t\tthis.initFixedScrollMixin(this, this.$element.children('[data-section-navigator-container]').children().toArray());\n\t}\n}\n\nObject.assign(TopicDetailsPage.prototype, fixedScrollMixinPage);\n\n","class MediaQuery {\n\tconstructor() {\n\t\tthis.BREAKPOINTS = {\n\t\t\tXS: 0,\n\t\t\tSM: 576,\n\t\t\tMD: 768,\n\t\t\tLG: 992,\n\t\t\tXL: 1200\n\t\t};\n\t}\n\n\tbreakpointMaxWidth(breakpoint) {\n\t\tlet width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n\n\t\tif(_.isFinite(breakpoint)) {\n\t\t\treturn breakpoint > width;\n\t\t}\n\t\tconsole.error(`MediaQuery::Error`, 'Please supply a valid breakpoint');\n\t\treturn false;\n\t}\n}\n\nexport let mediaQuery = new MediaQuery();\n"],"sourceRoot":""}