gitcoinco/code_fund_ads

View on GitHub
app/javascript/src/turbolinks-persist-scroll.js

Summary

Maintainability
A
0 mins
Test Coverage
const turbolinksPersistScroll = () => {
  const persistScrollDataAttribute = 'turbolinks-persist-scroll'
  let scrollPosition = null
  let enabled = false

  document.addEventListener('turbolinks:before-visit', event => {
    if (enabled) scrollPosition = window.scrollY
    else scrollPosition = null
    enabled = false
  })

  document.addEventListener('turbolinks:load', event => {
    const elements = document.querySelectorAll(
      `[data-${persistScrollDataAttribute}="true"]`
    )
    for (let i = 0; i < elements.length; i++) {
      elements[i].addEventListener('click', () => {
        enabled = true
      })
    }

    if (scrollPosition) window.scrollTo(0, scrollPosition)
  })
}

turbolinksPersistScroll()