Events

Four CustomEvents on window – that's the whole API.

Events are Sparke's entire API. Four CustomEvents fire on window; listen for the ones you need.

The four events

Event Detail Cancelable When
sparke:navigate { from, to } no A navigation is requested, before any network.
sparke:before-swap { from, to } yes About to swap. preventDefault() keeps the user put.
sparke:after-swap { from, to } no New content is in place.
sparke:loading { active } no Loading state changed (debounced).

Re-initialise after a swap

after-swapjs
window.addEventListener("sparke:after-swap", (e) => {
  initWidgets();
  trackPageview(new URL(e.detail.to).pathname);
});

Cancel a navigation

before-swap (cancelable)js
window.addEventListener("sparke:before-swap", (e) => {
  if (formIsDirty() && !confirm("Leave with unsaved changes?"))
    e.preventDefault();
});

React to loading state

loadingjs
window.addEventListener("sparke:loading", (e) => {
  document.body.classList.toggle("is-loading", e.detail.active);
});

e.detail.from and e.detail.to are full URLs – use new URL(...).pathname when you only want the path.