Skip to content

Instantly share code, notes, and snippets.

@leastbad
Created September 24, 2020 16:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leastbad/660876c18a3ea282d2d3aebf73a518b1 to your computer and use it in GitHub Desktop.
Save leastbad/660876c18a3ea282d2d3aebf73a518b1 to your computer and use it in GitHub Desktop.
Working with Turbolinks events

Here are the Turbolinks events which fire when you do things.

first visit: load

click: click before-visit request-start visit request-end before-cache before-render render load

back: visit before-cache before-render render load

cached: click before-visit request-start visit before-cache before-render render request-end before-render render load

const tlEvent = event => {
console.log(...event)
}
document.addEventListener('turbolinks:click', e => {
tlEvent([e.type, e.originalEvent.data.url])
}) // e.preventDefault() to restore bubble
document.addEventListener('turbolinks:before-visit', e => {
tlEvent([e.type, e.originalEvent.data.url])
}) // e.preventDefault() to prevent visit
document.addEventListener('turbolinks:request-start', e => {
tlEvent([e.type, e.originalEvent.data.xhr])
})
document.addEventListener('turbolinks:visit', e => {
tlEvent([e.type])
}) // after a visit starts
document.addEventListener('turbolinks:request-end', e => {
tlEvent([e.type, e.originalEvent.data.xhr])
})
document.addEventListener('turbolinks:before-cache', e => {
tlEvent([e.type])
}) // restore page to neutral state for caching
document.addEventListener('turbolinks:before-render', e => {
tlEvent([e.type, e.originalEvent.data.newBody])
})
document.addEventListener('turbolinks:render', e => {
tlEvent([e.type])
}) // fires after rendering cached version and again after fresh version
document.addEventListener('turbolinks:load', e => {
tlEvent([e.type, e.originalEvent.data.timing])
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment