{"version":3,"sources":["webpack://@verndale/toolkit/./src/js/modules/community-nav-row.js","webpack://@verndale/toolkit/./node_modules/headroom.js/dist/headroom.js"],"names":["Module","Component","e","url","eventId","Boxever","_boxever_settings","eventToSend","data","Headroom","global","factory","module","isBrowser","passiveEventsSupported","supported","options","isSupported","isDocument","obj","isWindow","windowScroller","win","doc","body","html","elementScroller","element","createScroller","trackScroll","callback","isPassiveSupported","rafId","scrolled","scroller","lastScrollY","details","update","scrollY","height","scrollHeight","handleScroll","eventOptions","normalizeUpDown","elem","self","scrollingDown","scrollingUp","className","cls"],"mappings":"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","file":"Areas/SunriseSeniorLiving/Scripts/4445.26756f6deb303608187d.bundle.js","sourcesContent":["import { Component } from '@verndale/core';\nimport Headroom from 'headroom.js';\n\nclass Module extends Component {\n setupDefaults() {\n this.dom = {\n $displayTrigger: this.el._$('.community-nav-row__expand-trigger'),\n $panel: this.el._$('.community-nav-row__to-stick-panel'),\n $copyForm: _$('.share-popup'),\n $copyField: _$('.share-popup__input'), \n $navLinks: this.el._$$('.community-nav-row__primary-link'),\n };\n\n this.expandedClass = 'community-nav-row--expanded';\n this.stick();\n }\n\n addListeners() {\n this.dom.$displayTrigger._on('click', this.handleDisplayTriggerClick.bind(this))\n this.dom.$copyForm._on('submit', this.handleCopyFormSubmit.bind(this))\n this.dom.$navLinks._on('click', this.handleLinkClick.bind(this))\n }\n\n handleDisplayTriggerClick() {\n const isExpanded = this.el.classList.contains(this.expandedClass);\n\n if (isExpanded) {\n this.collapse()\n } else {\n this.expand();\n }\n }\n\n handleListenToOutsidePrimaryNavPanel(e) {\n const hasClickedOutsidePanel = !this.dom.$panel.contains(e.target);\n\n if (hasClickedOutsidePanel) {\n this.collapse();\n }\n }\n\n handleCopyFormSubmit(e) {\n e.preventDefault();\n this.dom.$copyField.select();\n navigator.clipboard.writeText(this.dom.$copyField.value);\n }\n\n handleLinkClick(e) {\n e.preventDefault();\n\n var url = e.target.getAttribute('href');\n var eventId = e.target.getAttribute('data-event-id');\n\n const { Boxever, _boxever_settings } = window;\n\n if (!Boxever || !_boxever_settings || !eventId) {\n window.location = url;\n return;\n }\n\n const eventToSend = {\n channel: 'WEB',\n type: eventId,\n pos: window._boxever_settings.pointOfSale,\n browser_id: Boxever.getID()\n };\n\n Boxever.eventCreate(\n eventToSend,\n data => {\n window.location = url;\n },\n 'json'\n );\n }\n\n expand() {\n this.el.classList.add(this.expandedClass);\n document._on('mousedown', this.handleListenToOutsidePrimaryNavPanel.bind(this));\n }\n\n collapse() {\n this.el.classList.remove(this.expandedClass);\n document.removeEventListener('click', this.handleListenToOutsidePrimaryNavPanel.bind(this));\n }\n\n stick() {\n new Headroom(this.el, {\n offset: this.el.offsetTop,\n classes : {\n initial : 'community-nav-row',\n pinned : 'community-nav-row--visible',\n unpinned : 'community-nav-row--hidden',\n top : '-',\n notTop : '-',\n bottom : '-',\n notBottom : '-',\n frozen: '-'\n }\n }).init();\n }\n}\n\nexport default Module;\n","/*!\n * headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it\n * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js\n * License: MIT\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Headroom = factory());\n}(this, function () { 'use strict';\n\n function isBrowser() {\n return typeof window !== \"undefined\";\n }\n\n /**\n * Used to detect browser support for adding an event listener with options\n * Credit: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n */\n function passiveEventsSupported() {\n var supported = false;\n\n try {\n var options = {\n // eslint-disable-next-line getter-return\n get passive() {\n supported = true;\n }\n };\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (err) {\n supported = false;\n }\n\n return supported;\n }\n\n function isSupported() {\n return !!(\n isBrowser() &&\n function() {}.bind &&\n \"classList\" in document.documentElement &&\n Object.assign &&\n Object.keys &&\n requestAnimationFrame\n );\n }\n\n function isDocument(obj) {\n return obj.nodeType === 9; // Node.DOCUMENT_NODE === 9\n }\n\n function isWindow(obj) {\n // `obj === window` or `obj instanceof Window` is not sufficient,\n // as the obj may be the window of an iframe.\n return obj && obj.document && isDocument(obj.document);\n }\n\n function windowScroller(win) {\n var doc = win.document;\n var body = doc.body;\n var html = doc.documentElement;\n\n return {\n /**\n * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/\n * @return {Number} the scroll height of the document in pixels\n */\n scrollHeight: function() {\n return Math.max(\n body.scrollHeight,\n html.scrollHeight,\n body.offsetHeight,\n html.offsetHeight,\n body.clientHeight,\n html.clientHeight\n );\n },\n\n /**\n * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript\n * @return {Number} the height of the viewport in pixels\n */\n height: function() {\n return win.innerHeight || html.clientHeight || body.clientHeight;\n },\n\n /**\n * Gets the Y scroll position\n * @return {Number} pixels the page has scrolled along the Y-axis\n */\n scrollY: function() {\n if (win.pageYOffset !== undefined) {\n return win.pageYOffset;\n }\n\n return (html || body.parentNode || body).scrollTop;\n }\n };\n }\n\n function elementScroller(element) {\n return {\n /**\n * @return {Number} the scroll height of the element in pixels\n */\n scrollHeight: function() {\n return Math.max(\n element.scrollHeight,\n element.offsetHeight,\n element.clientHeight\n );\n },\n\n /**\n * @return {Number} the height of the element in pixels\n */\n height: function() {\n return Math.max(element.offsetHeight, element.clientHeight);\n },\n\n /**\n * Gets the Y scroll position\n * @return {Number} pixels the element has scrolled along the Y-axis\n */\n scrollY: function() {\n return element.scrollTop;\n }\n };\n }\n\n function createScroller(element) {\n return isWindow(element) ? windowScroller(element) : elementScroller(element);\n }\n\n /**\n * @param element EventTarget\n */\n function trackScroll(element, options, callback) {\n var isPassiveSupported = passiveEventsSupported();\n var rafId;\n var scrolled = false;\n var scroller = createScroller(element);\n var lastScrollY = scroller.scrollY();\n var details = {};\n\n function update() {\n var scrollY = Math.round(scroller.scrollY());\n var height = scroller.height();\n var scrollHeight = scroller.scrollHeight();\n\n // reuse object for less memory churn\n details.scrollY = scrollY;\n details.lastScrollY = lastScrollY;\n details.direction = scrollY > lastScrollY ? \"down\" : \"up\";\n details.distance = Math.abs(scrollY - lastScrollY);\n details.isOutOfBounds = scrollY < 0 || scrollY + height > scrollHeight;\n details.top = scrollY <= options.offset[details.direction];\n details.bottom = scrollY + height >= scrollHeight;\n details.toleranceExceeded =\n details.distance > options.tolerance[details.direction];\n\n callback(details);\n\n lastScrollY = scrollY;\n scrolled = false;\n }\n\n function handleScroll() {\n if (!scrolled) {\n scrolled = true;\n rafId = requestAnimationFrame(update);\n }\n }\n\n var eventOptions = isPassiveSupported\n ? { passive: true, capture: false }\n : false;\n\n element.addEventListener(\"scroll\", handleScroll, eventOptions);\n update();\n\n return {\n destroy: function() {\n cancelAnimationFrame(rafId);\n element.removeEventListener(\"scroll\", handleScroll, eventOptions);\n }\n };\n }\n\n function normalizeUpDown(t) {\n return t === Object(t) ? t : { down: t, up: t };\n }\n\n /**\n * UI enhancement for fixed headers.\n * Hides header when scrolling down\n * Shows header when scrolling up\n * @constructor\n * @param {DOMElement} elem the header element\n * @param {Object} options options for the widget\n */\n function Headroom(elem, options) {\n options = options || {};\n Object.assign(this, Headroom.options, options);\n this.classes = Object.assign({}, Headroom.options.classes, options.classes);\n\n this.elem = elem;\n this.tolerance = normalizeUpDown(this.tolerance);\n this.offset = normalizeUpDown(this.offset);\n this.initialised = false;\n this.frozen = false;\n }\n Headroom.prototype = {\n constructor: Headroom,\n\n /**\n * Start listening to scrolling\n * @public\n */\n init: function() {\n if (Headroom.cutsTheMustard && !this.initialised) {\n this.addClass(\"initial\");\n this.initialised = true;\n\n // defer event registration to handle browser\n // potentially restoring previous scroll position\n setTimeout(\n function(self) {\n self.scrollTracker = trackScroll(\n self.scroller,\n { offset: self.offset, tolerance: self.tolerance },\n self.update.bind(self)\n );\n },\n 100,\n this\n );\n }\n\n return this;\n },\n\n /**\n * Destroy the widget, clearing up after itself\n * @public\n */\n destroy: function() {\n this.initialised = false;\n Object.keys(this.classes).forEach(this.removeClass, this);\n this.scrollTracker.destroy();\n },\n\n /**\n * Unpin the element\n * @public\n */\n unpin: function() {\n if (this.hasClass(\"pinned\") || !this.hasClass(\"unpinned\")) {\n this.addClass(\"unpinned\");\n this.removeClass(\"pinned\");\n\n if (this.onUnpin) {\n this.onUnpin.call(this);\n }\n }\n },\n\n /**\n * Pin the element\n * @public\n */\n pin: function() {\n if (this.hasClass(\"unpinned\")) {\n this.addClass(\"pinned\");\n this.removeClass(\"unpinned\");\n\n if (this.onPin) {\n this.onPin.call(this);\n }\n }\n },\n\n /**\n * Freezes the current state of the widget\n * @public\n */\n freeze: function() {\n this.frozen = true;\n this.addClass(\"frozen\");\n },\n\n /**\n * Re-enables the default behaviour of the widget\n * @public\n */\n unfreeze: function() {\n this.frozen = false;\n this.removeClass(\"frozen\");\n },\n\n top: function() {\n if (!this.hasClass(\"top\")) {\n this.addClass(\"top\");\n this.removeClass(\"notTop\");\n\n if (this.onTop) {\n this.onTop.call(this);\n }\n }\n },\n\n notTop: function() {\n if (!this.hasClass(\"notTop\")) {\n this.addClass(\"notTop\");\n this.removeClass(\"top\");\n\n if (this.onNotTop) {\n this.onNotTop.call(this);\n }\n }\n },\n\n bottom: function() {\n if (!this.hasClass(\"bottom\")) {\n this.addClass(\"bottom\");\n this.removeClass(\"notBottom\");\n\n if (this.onBottom) {\n this.onBottom.call(this);\n }\n }\n },\n\n notBottom: function() {\n if (!this.hasClass(\"notBottom\")) {\n this.addClass(\"notBottom\");\n this.removeClass(\"bottom\");\n\n if (this.onNotBottom) {\n this.onNotBottom.call(this);\n }\n }\n },\n\n shouldUnpin: function(details) {\n var scrollingDown = details.direction === \"down\";\n\n return scrollingDown && !details.top && details.toleranceExceeded;\n },\n\n shouldPin: function(details) {\n var scrollingUp = details.direction === \"up\";\n\n return (scrollingUp && details.toleranceExceeded) || details.top;\n },\n\n addClass: function(className) {\n this.elem.classList.add.apply(\n this.elem.classList,\n this.classes[className].split(\" \")\n );\n },\n\n removeClass: function(className) {\n this.elem.classList.remove.apply(\n this.elem.classList,\n this.classes[className].split(\" \")\n );\n },\n\n hasClass: function(className) {\n return this.classes[className].split(\" \").every(function(cls) {\n return this.classList.contains(cls);\n }, this.elem);\n },\n\n update: function(details) {\n if (details.isOutOfBounds) {\n // Ignore bouncy scrolling in OSX\n return;\n }\n\n if (this.frozen === true) {\n return;\n }\n\n if (details.top) {\n this.top();\n } else {\n this.notTop();\n }\n\n if (details.bottom) {\n this.bottom();\n } else {\n this.notBottom();\n }\n\n if (this.shouldUnpin(details)) {\n this.unpin();\n } else if (this.shouldPin(details)) {\n this.pin();\n }\n }\n };\n\n /**\n * Default options\n * @type {Object}\n */\n Headroom.options = {\n tolerance: {\n up: 0,\n down: 0\n },\n offset: 0,\n scroller: isBrowser() ? window : null,\n classes: {\n frozen: \"headroom--frozen\",\n pinned: \"headroom--pinned\",\n unpinned: \"headroom--unpinned\",\n top: \"headroom--top\",\n notTop: \"headroom--not-top\",\n bottom: \"headroom--bottom\",\n notBottom: \"headroom--not-bottom\",\n initial: \"headroom\"\n }\n };\n\n Headroom.cutsTheMustard = isSupported();\n\n return Headroom;\n\n}));\n"],"sourceRoot":""}