summaryrefslogtreecommitdiff
path: root/node_modules/swup/src/Swup.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/swup/src/Swup.ts')
-rw-r--r--node_modules/swup/src/Swup.ts13
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 });