{"version":3,"file":"scrollnav.min.mjs","sources":["../src/util/extend.js","../src/util/getYPosition.js","../src/util/populateSectionData.js","../src/util/getOrSetID.js","../src/util/nextUntil.js","../src/util/createNav.js","../src/util/createList.js","../src/util/updatePositionData.js","../src/util/getTargetYPosition.js","../src/util/easing.js","../src/scrollnav.js","../src/scrollTo.js","../src/util/calculateScrollDuration.js","../src/setupScrollHandler.js","../src/util/getActiveSection.js","../src/util/updateActiveNavItem.js","../src/util/insertNav.js","../src/util/insertVisualDebugger.js","../src/setupClickHandlers.js","../src/setupResizeHandler.js","../src/teardownClickHandlers.js","../src/teardownScrollHandler.js","../src/teardownResizeHandler.js"],"sourcesContent":["/* Borrowed from https://gist.github.com/cferdinandi/4f8a0e17921c5b46e6c4 */\n\nexport default function extend(defaults, options) {\n  const extended = {};\n  let prop;\n\n  for (prop in defaults) {\n    if (Object.prototype.hasOwnProperty.call(defaults, prop)) {\n      extended[prop] = defaults[prop];\n    }\n  }\n\n  for (prop in options) {\n    if (Object.prototype.hasOwnProperty.call(options, prop)) {\n      extended[prop] = options[prop];\n    }\n  }\n\n  return extended;\n}\n","export default function getYPosition(elem, parent) {\n  if (typeof elem !== 'object') {\n    return Promise.reject(new Error('First argument must be an object'));\n  }\n\n  parent = parent || document.body;\n  if (typeof parent !== 'object') {\n    return Promise.reject(new Error('Second argument must be an object'));\n  }\n\n  const bodyRect = parent.getBoundingClientRect();\n  const elemRect = elem.getBoundingClientRect();\n\n  return elemRect.top - bodyRect.top;\n}\n","import getOrSetID from './getOrSetID';\nimport getYPosition from './getYPosition';\nimport nextUntil from './nextUntil';\n\nexport default function populateSectionData(\n  sections,\n  settings,\n  prefix = 'scroll-nav'\n) {\n  const sectionData = [];\n  prefix = prefix + '__';\n\n  sections.forEach((elem, i) => {\n    let subSectionData = [];\n    const id = getOrSetID(elem, prefix + (i + 1));\n\n    if (settings.subSections && elem.matches(settings.sections)) {\n      const subSectionDom = nextUntil(\n        elem,\n        settings.sections,\n        settings.subSections\n      );\n      subSectionData = populateSectionData(subSectionDom, settings, id);\n    }\n\n    sectionData.push({\n      id: id,\n      text: elem.innerText || elem.textContent,\n      offsetTop: getYPosition(elem),\n      subSections: subSectionData\n    });\n  });\n\n  return sectionData;\n}\n","export default function getOrSetID(elem, setID) {\n  if (typeof elem !== 'object') {\n    return Promise.reject(new Error('First argument must be an object'));\n  }\n\n  let id = elem.id;\n\n  if (!id) {\n    if (typeof setID !== 'string') {\n      return Promise.reject(new Error('Second argument must be a string'));\n    }\n\n    id = setID;\n    elem.id = id;\n  }\n  return id;\n}\n","/* Borrowed from https://github.com/cferdinandi/nextUntil */\n\nexport default function nextUntil(elem, selector, filter) {\n  var siblings = [];\n\n  elem = elem.nextElementSibling;\n\n  while (elem) {\n    if (elem.matches(selector)) break;\n\n    if (filter && !elem.matches(filter)) {\n      elem = elem.nextElementSibling;\n      continue;\n    }\n\n    siblings.push(elem);\n\n    elem = elem.nextElementSibling;\n  }\n\n  return siblings;\n}\n","import createList from './createList';\n\nexport default function createNav(data) {\n  const nav = document.createElement('nav');\n  nav.className = 'scroll-nav';\n  nav.innerHTML = createList(data);\n\n  return nav;\n}\n","export default function createList(data, isSubList = false) {\n  const suffix = isSubList ? '__sub-' : '__';\n  const baseClass = 'scroll-nav' + suffix;\n\n  const itemsMarkup = `\n    ${data\n      .map(\n        item =>\n          `<li class=\"${baseClass}item\" data-sn-section=\"${item.id}\">\n            <a class=\"${baseClass}link\" href=\"#${item.id}\">${item.text}</a>\n            ${\n              item.subSections && item.subSections.length\n                ? `${createList(item.subSections, true)}`\n                : ''\n            }\n          </li>`\n      )\n      .join('')}\n  `;\n\n  const list = `\n    <ol class=\"${baseClass}list\">\n      ${itemsMarkup}\n    </ol>\n  `;\n\n  return list;\n}\n","import getYPosition from './getYPosition';\n\nexport default function updatePositionData(data) {\n  data.forEach(section => {\n    const sectionDom = document.querySelector(`#${section.id}`);\n    section.offsetTop = getYPosition(sectionDom);\n\n    if (section.subSections.length) {\n      section.subSections = updatePositionData(section.subSections);\n    }\n  });\n\n  return data;\n}\n","export default function getTargetYPosition(target, data) {\n  let id = target.getAttribute('href');\n  if (id.charAt(0) === '#') {\n    id = id.substr(1);\n  }\n\n  const targetSection = filterData(data, id);\n\n  return targetSection.offsetTop;\n}\n\nfunction filterData(data, id) {\n  let targetSection;\n\n  data.forEach(section => {\n    if (section.id === id) {\n      targetSection = section;\n    }\n\n    if (section.subSections && targetSection === undefined) {\n      targetSection = filterData(section.subSections, id);\n    }\n  });\n\n  return targetSection;\n}\n","/* Borrowed from https://gist.github.com/gre/1650294#gistcomment-1806616 */\n\nconst easeIn = p => t => Math.pow(t, p);\nconst easeOut = p => t => 1 - Math.abs(Math.pow(t - 1, p));\nconst easeInOut = p => t =>\n  t < 0.5 ? easeIn(p)(t * 2) / 2 : easeOut(p)(t * 2 - 1) / 2 + 0.5;\n\nconst easing = {\n  linear: easeInOut(1),\n  easeInQuad: easeIn(2),\n  easeOutQuad: easeOut(2),\n  easeInOutQuad: easeInOut(2),\n  easeInCubic: easeIn(3),\n  easeOutCubic: easeOut(3),\n  easeInOutCubic: easeInOut(3),\n  easeInQuart: easeIn(4),\n  easeOutQuart: easeOut(4),\n  easeInOutQuart: easeInOut(4),\n  easeInQuint: easeIn(5),\n  easeOutQuint: easeOut(5),\n  easeInOutQuint: easeInOut(5)\n};\n\nexport { easing };\n","/*\n * scrollnav\n * http://scrollnav.com\n *\n * Copyright (c) 2013-2018 James Wilson\n * Licensed under the MIT license.\n */\n\nimport extend from './util/extend';\nimport populateSectionData from './util/populateSectionData';\nimport createNav from './util/createNav';\nimport insertNav from './util/insertNav';\nimport updatePositionData from './util/updatePositionData';\nimport insertVisualDebugger from './util/insertVisualDebugger';\nimport setupClickHandlers from './setupClickHandlers';\nimport setupScrollHandler from './setupScrollHandler';\nimport setupResizeHandler from './setupResizeHandler';\nimport teardownClickHandlers from './teardownClickHandlers';\nimport teardownScrollHandler from './teardownScrollHandler';\nimport teardownResizeHandler from './teardownResizeHandler';\n\nlet clickHandler;\nlet scrollHandler;\nlet resizeHandler;\n\nfunction isElement(element) {\n  return element instanceof Element;\n}\n\nfunction init(elem, options) {\n  const defaults = {\n    sections: 'h2',\n    insertTarget: elem,\n    insertLocation: 'before',\n    easingStyle: 'easeOutQuad',\n    updateHistory: true\n  };\n  this.settings = extend(defaults, options);\n  const locationOptions = ['append', 'prepend', 'after', 'before'];\n\n  if (!isElement(elem)) {\n    if (this.settings.debug) {\n      // eslint-disable-next-line no-console\n      console.error(`\n        scrollnav build failed, content argument \"${elem}\" is not an HTML Element\n      `);\n    }\n    return;\n  }\n\n  if (this.settings.insertTarget && !isElement(this.settings.insertTarget)) {\n    if (this.settings.debug) {\n      // eslint-disable-next-line no-console\n      console.error(`\n        scrollnav build failed, options.insertTarget \"${elem}\" is not an HTML Element\n      `);\n    }\n    return;\n  }\n\n  if (!locationOptions.includes(this.settings.insertLocation)) {\n    if (this.settings.debug) {\n      // eslint-disable-next-line no-console\n      console.error(`\n        scrollnav build failed, options.insertLocation \"${\n          this.settings.insertLocation\n        }\" is not a valid option\n      `);\n    }\n    return;\n  }\n\n  const sectionsDom = elem.querySelectorAll(this.settings.sections);\n\n  if (!sectionsDom.length) {\n    if (this.settings.debug) {\n      // eslint-disable-next-line no-console\n      console.error(`\n        scrollnav build failed, could not find any \"${this.settings.sections}\"\n        elements inside of \"${elem}\"\n      `);\n    }\n    return;\n  }\n\n  this.data = populateSectionData(sectionsDom, this.settings);\n  this.nav = createNav(this.data);\n\n  insertNav(this);\n  clickHandler = setupClickHandlers(this);\n  scrollHandler = setupScrollHandler(this);\n  resizeHandler = setupResizeHandler(this);\n\n  if (this.settings.debug) insertVisualDebugger();\n  if (this.settings.onInit) return this.settings.onInit();\n}\n\nfunction destroy(options) {\n  this.settings = extend(this.settings, options);\n\n  teardownClickHandlers(this.nav, clickHandler);\n  teardownScrollHandler(scrollHandler);\n  teardownResizeHandler(resizeHandler);\n  this.nav.remove();\n\n  if (this.settings.onDestroy) return this.settings.onDestroy();\n}\n\nfunction updatePositions(options) {\n  this.settings = extend(this.settings, options);\n  this.data = updatePositionData(this.data);\n\n  if (this.settings.onUpdatePositions) return this.settings.onUpdatePositions();\n}\n\nconst scrollnav = {\n  init: init,\n  destroy: destroy,\n  updatePositions: updatePositions\n};\n\nexport default scrollnav;\n","import calculateScrollDuration from './util/calculateScrollDuration';\nimport { easing } from './util/easing';\n\n/* istanbul ignore next */\nexport default function scrollTo(targetPosition, easingStyle) {\n  return new Promise((resolve, reject) => {\n    if (typeof targetPosition !== 'number') {\n      return reject(new Error('First argument must be a number'));\n    }\n\n    easingStyle = easingStyle || 'linear';\n    if (typeof easingStyle !== 'string') {\n      return reject(new Error('Second argument must be a string'));\n    }\n\n    const startingPosition = window.pageYOffset;\n    const distance = targetPosition - startingPosition;\n    const duration = calculateScrollDuration(distance);\n    const framerate = 50;\n    const increment = 1000 / framerate;\n    let ellapsedTime = 0;\n    let easedTime;\n    let next;\n\n    function animateScroll() {\n      ellapsedTime += increment;\n      easedTime = easing[easingStyle](ellapsedTime / duration);\n      next = easedTime * distance + startingPosition;\n      window.scroll(0, next);\n\n      if (ellapsedTime < duration) {\n        setTimeout(animateScroll, increment);\n      } else {\n        resolve(window.pageYOffset);\n      }\n    }\n\n    animateScroll();\n  });\n}\n","export default function calculateScrollDuration(distance) {\n  const halfDistance = Math.abs(distance / 2);\n\n  return Math.min(Math.max(halfDistance, 250), 1200);\n}\n","import getActiveSection from './util/getActiveSection';\nimport updateActiveNavItem from './util/updateActiveNavItem';\n\nexport default function setupScrollHandler(scrollnav) {\n  function scrollHandler() {\n    const top = window.scrollY || window.pageYOffset || document.body.scrollTop;\n    const boundryTop = top;\n    const boundryBottom = top + window.innerHeight * 0.4;\n    const activeSection = getActiveSection(\n      scrollnav.data,\n      boundryTop,\n      boundryBottom\n    );\n\n    updateActiveNavItem(activeSection, scrollnav.nav);\n\n    return activeSection;\n  }\n\n  window.addEventListener('scroll', scrollHandler);\n\n  return scrollHandler;\n}\n","export default function getActiveSection(data, boundryTop, boundryBottom) {\n  let activeSection;\n\n  data.forEach(section => {\n    if (section.offsetTop > boundryBottom) {\n      if (!activeSection && section.offsetTop < boundryTop) {\n        activeSection = section;\n      }\n    } else {\n      activeSection = section;\n    }\n  });\n\n  if (activeSection && activeSection.subSections.length) {\n    let activeSubSection;\n\n    activeSubSection = getActiveSection(\n      activeSection.subSections,\n      boundryTop,\n      boundryBottom\n    );\n\n    if (activeSubSection) {\n      activeSection = activeSubSection;\n    }\n  }\n\n  return activeSection;\n}\n","export default function updateActiveNavItem(activeSection, nav) {\n  const previousActive = nav.querySelector('[data-sn-active]');\n\n  if (!activeSection) {\n    if (previousActive) {\n      previousActive.classList.remove('scroll-nav__item--active');\n      previousActive.removeAttribute('data-sn-active');\n    }\n\n    return;\n  }\n\n  const newActive = nav.querySelector(\n    '[data-sn-section=' + activeSection.id + ']'\n  );\n\n  if (newActive && newActive !== previousActive) {\n    if (previousActive) {\n      previousActive.classList.remove('scroll-nav__item--active');\n      previousActive.removeAttribute('data-sn-active');\n    }\n    newActive.classList.add('scroll-nav__item--active');\n    newActive.setAttribute('data-sn-active', true);\n  }\n}\n","export default function insertNav(scrollnav) {\n  const target = scrollnav.settings.insertTarget;\n  const location = scrollnav.settings.insertLocation;\n\n  if (location === 'append') {\n    target.appendChild(scrollnav.nav);\n  } else if (location === 'prepend') {\n    target.insertBefore(scrollnav.nav, target.firstChild);\n  } else if (location === 'before') {\n    target.parentNode.insertBefore(scrollnav.nav, target);\n  } else if (location === 'after') {\n    target.parentNode.insertBefore(scrollnav.nav, target.nextSibling);\n  }\n}\n","export default function insertVisualDebugger() {\n  const snDebugger = document.createElement('div');\n  snDebugger.className = 'snDebugger';\n\n  snDebugger.setAttribute(\n    'style',\n    `\n      position: fixed;\n      top: 40%;\n      height: 0px;\n      border-bottom:5px solid red;\n      border-top: 5px solid blue;\n      width: 100%;\n      opacity: .5;\n      pointer-events: none;\n    `\n  );\n\n  document.body.appendChild(snDebugger);\n}\n","import getTargetYPosition from './util/getTargetYPosition';\nimport scrollTo from './scrollTo';\n\nexport default function setupClickHandlers(scrollnav) {\n  const settings = scrollnav.settings;\n  function clickHandler(event) {\n    event.preventDefault();\n\n    const activeArea = window.innerHeight * 0.39;\n    const targetYPosition = getTargetYPosition(event.target, scrollnav.data);\n    const scrollYTarget = targetYPosition - activeArea;\n\n    /* istanbul ignore next */\n    return scrollTo(scrollYTarget, settings.easingStyle).then(() => {\n      if (settings.updateHistory) {\n        history.replaceState({}, '', event.target.getAttribute('href'));\n      }\n\n      if (settings.onScroll) {\n        settings.onScroll();\n      }\n    });\n  }\n\n  const links = scrollnav.nav.querySelectorAll('a');\n  links.forEach(link => {\n    link.addEventListener('click', clickHandler);\n  });\n\n  return clickHandler;\n}\n","import updatePositionData from './util/updatePositionData';\n\nexport default function setupResizeHandler(scrollnav) {\n  function resizeHandler() {\n    scrollnav.data = updatePositionData(scrollnav.data);\n  }\n\n  window.addEventListener('resize', resizeHandler);\n\n  return resizeHandler;\n}\n","export default function teardownClickHandlers(nav, clickHandler) {\n  const links = nav.querySelectorAll('a');\n  links.forEach(link => {\n    link.removeEventListener('click', clickHandler);\n  });\n}\n","export default function teardownScrollHandler(scrollHandler) {\n  window.removeEventListener('scroll', scrollHandler);\n}\n","export default function teardownResizelHandler(resizeHandler) {\n  window.removeEventListener('resize', resizeHandler);\n}\n"],"names":["extend","defaults","options","prop","extended","Object","prototype","hasOwnProperty","call","getYPosition","elem","parent","Promise","reject","Error","document","body","bodyRect","getBoundingClientRect","top","populateSectionData","sections","settings","prefix","sectionData","forEach","i","subSectionData","id","setID","getOrSetID","subSections","matches","selector","filter","siblings","nextElementSibling","push","nextUntil","text","innerText","textContent","offsetTop","createNav","data","nav","createElement","className","innerHTML","createList","isSubList","baseClass","itemsMarkup","map","item","length","join","updatePositionData","section","sectionDom","querySelector","getTargetYPosition","target","getAttribute","charAt","substr","filterData","targetSection","undefined","const","clickHandler","scrollHandler","resizeHandler","easeIn","p","t","Math","pow","easeOut","abs","easeInOut","easing","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","scrollTo","targetPosition","easingStyle","resolve","easedTime","startingPosition","window","pageYOffset","distance","duration","halfDistance","min","max","calculateScrollDuration","increment","ellapsedTime","animateScroll","scroll","setTimeout","setupScrollHandler","scrollnav","scrollY","scrollTop","boundryBottom","innerHeight","activeSection","getActiveSection","boundryTop","activeSubSection","previousActive","newActive","classList","remove","removeAttribute","add","setAttribute","updateActiveNavItem","addEventListener","isElement","element","Element","init","insertTarget","insertLocation","updateHistory","this","includes","location","snDebugger","sectionsDom","querySelectorAll","appendChild","insertBefore","firstChild","parentNode","nextSibling","event","preventDefault","activeArea","then","history","replaceState","onScroll","link","setupClickHandlers","setupResizeHandler","debug","onInit","console","error","destroy","removeEventListener","teardownClickHandlers","teardownScrollHandler","teardownResizeHandler","onDestroy","updatePositions","onUpdatePositions"],"mappings":"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"}