diff options
Diffstat (limited to 'node_modules/swup/src/Swup.ts')
| -rw-r--r-- | node_modules/swup/src/Swup.ts | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/node_modules/swup/src/Swup.ts b/node_modules/swup/src/Swup.ts index 8d5d769e..7fb76f06 100644 --- a/node_modules/swup/src/Swup.ts +++ b/node_modules/swup/src/Swup.ts @@ -8,7 +8,7 @@ import { type DelegateEventUnsubscribe } from './helpers/delegateEvent.js'; import { Cache } from './modules/Cache.js'; import { Classes } from './modules/Classes.js'; import { type Visit, createVisit } from './modules/Visit.js'; -import { Hooks } from './modules/Hooks.js'; +import { Hooks, type HookName, type HookInitOptions } from './modules/Hooks.js'; import { getAnchorElement } from './modules/getAnchorElement.js'; import { awaitAnimations } from './modules/awaitAnimations.js'; import { navigate, performNavigation, type NavigationToSelfAction } from './modules/navigate.js'; @@ -43,6 +43,8 @@ export type Options = { linkToSelf: NavigationToSelfAction; /** Enable native animations using the View Transitions API. */ native: boolean; + /** Hook handlers to register. */ + hooks: Partial<HookInitOptions>; /** Plugins to register on startup. */ plugins: Plugin[]; /** Custom headers sent along with fetch requests. */ @@ -61,6 +63,7 @@ const defaults: Options = { animationScope: 'html', cache: true, containers: ['#swup'], + hooks: {}, ignoreVisit: (url, { el } = {}) => !!el?.closest('[data-no-swup]'), linkSelector: 'a[href]', linkToSelf: 'scroll', @@ -188,6 +191,14 @@ export default class Swup { // Mount plugins this.options.plugins.forEach((plugin) => this.use(plugin)); + // Install user hooks + for (const [key, handler] of Object.entries(this.options.hooks)) { + // Build hook options from modifier suffix: 'content:replace.before' => { before: true } + const [hook, modifiers] = this.hooks.parseName(key as HookName); + // @ts-expect-error: object.entries() does not preserve key/value types + this.hooks.on(hook, handler, modifiers); + } + // Create initial history record if ((window.history.state as HistoryState)?.source !== 'swup') { updateHistoryRecord(null, { index: this.currentHistoryIndex }); |
