@very-simple/ajax 1.0.0-beta.4 → 1.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +5 -0
- package/dist/index.js +10 -16
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -74,6 +74,11 @@ type EventMap = {
|
|
|
74
74
|
'before-visit': Payload;
|
|
75
75
|
'before-swap': Payload;
|
|
76
76
|
'after-swap': Payload;
|
|
77
|
+
'progress-start': Record<string, never>;
|
|
78
|
+
progress: {
|
|
79
|
+
progress: number;
|
|
80
|
+
};
|
|
81
|
+
'progress-end': Record<string, never>;
|
|
77
82
|
};
|
|
78
83
|
type DomEventMap = {
|
|
79
84
|
[K in keyof EventMap as `ajax:${K & string}`]: CustomEvent<EventMap[K]>;
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@ var parser = new DOMParser();
|
|
|
15
15
|
var currentLoadController;
|
|
16
16
|
var progress = 0;
|
|
17
17
|
var trickleInterval;
|
|
18
|
+
var emit = (type, payload) => document.dispatchEvent(new CustomEvent(`ajax:${type}`, { detail: payload }));
|
|
18
19
|
var cache = /* @__PURE__ */ new Map();
|
|
19
20
|
var load = async (url, regions, options) => {
|
|
20
21
|
let progressDelayTimeout;
|
|
@@ -23,8 +24,7 @@ var load = async (url, regions, options) => {
|
|
|
23
24
|
currentLoadController = new AbortController();
|
|
24
25
|
setProgress(0);
|
|
25
26
|
progressDelayTimeout = window.setTimeout(() => {
|
|
26
|
-
|
|
27
|
-
toggleProgress(true);
|
|
27
|
+
emit("progress-start", {});
|
|
28
28
|
startTrickle();
|
|
29
29
|
}, options.loadingDelay);
|
|
30
30
|
const response = await fetch(url, {
|
|
@@ -50,8 +50,7 @@ var load = async (url, regions, options) => {
|
|
|
50
50
|
clearTimeout(progressDelayTimeout);
|
|
51
51
|
stopTrickle();
|
|
52
52
|
setProgress(1);
|
|
53
|
-
|
|
54
|
-
setTimeout(() => toggleProgress(false), options.progressHideDelay);
|
|
53
|
+
setTimeout(() => emit("progress-end", {}), options.progressHideDelay);
|
|
55
54
|
}
|
|
56
55
|
};
|
|
57
56
|
var parseHtml = (html) => parser.parseFromString(html, "text/html");
|
|
@@ -63,13 +62,8 @@ var startTrickle = () => trickleInterval = window.setInterval(trickle, 300);
|
|
|
63
62
|
var stopTrickle = () => clearInterval(trickleInterval);
|
|
64
63
|
var setProgress = (value) => {
|
|
65
64
|
progress = value;
|
|
66
|
-
|
|
67
|
-
"--ajax-progress",
|
|
68
|
-
`${Math.round(value * 1e4) / 100}%`
|
|
69
|
-
);
|
|
65
|
+
emit("progress", { progress: value });
|
|
70
66
|
};
|
|
71
|
-
var toggleProgress = (state) => document.documentElement.toggleAttribute(`${config.prefix}progress`, state);
|
|
72
|
-
var toggleLoading = (state) => document.documentElement.toggleAttribute(`${config.prefix}loading`, state);
|
|
73
67
|
|
|
74
68
|
// src/merge.ts
|
|
75
69
|
import { Idiomorph } from "idiomorph/dist/idiomorph.esm.js";
|
|
@@ -205,7 +199,7 @@ var normalizeUrl = (url) => {
|
|
|
205
199
|
return url;
|
|
206
200
|
}
|
|
207
201
|
};
|
|
208
|
-
var
|
|
202
|
+
var emit2 = (type, payload) => {
|
|
209
203
|
const waiting = [];
|
|
210
204
|
const waitUntil = (promise) => waiting.push(Promise.resolve(promise));
|
|
211
205
|
payload = { ...payload, waitUntil };
|
|
@@ -239,7 +233,7 @@ var visit = async (url, {
|
|
|
239
233
|
currentVisitController = new AbortController();
|
|
240
234
|
const { signal } = currentVisitController;
|
|
241
235
|
if (url === currentUrl) historyMode = "none";
|
|
242
|
-
await
|
|
236
|
+
await emit2("before-visit", {
|
|
243
237
|
from: { url: fromUrl, state: fromState, document },
|
|
244
238
|
to: { url, state },
|
|
245
239
|
signal,
|
|
@@ -266,7 +260,7 @@ var visit = async (url, {
|
|
|
266
260
|
else if (historyMode === "push") history.pushState(state, "", url);
|
|
267
261
|
const from = { url: fromUrl, state: fromState, document };
|
|
268
262
|
const to = { url, state, document: newDocument };
|
|
269
|
-
await
|
|
263
|
+
await emit2("before-swap", { from, to, isBackForward, signal });
|
|
270
264
|
if (signal.aborted) return;
|
|
271
265
|
const getMergeStrategy = (oldEl, newEl) => newEl.getAttribute(`${config.prefix}merge`) || oldEl.getAttribute(`${config.prefix}merge`) || mergeStrategy;
|
|
272
266
|
let autoFocusEl;
|
|
@@ -319,18 +313,18 @@ var visit = async (url, {
|
|
|
319
313
|
await document.startViewTransition(async () => {
|
|
320
314
|
if (morphHeads) Idiomorph2.morph(document.head, newDocument.head);
|
|
321
315
|
await mergeRegions();
|
|
322
|
-
await
|
|
316
|
+
await emit2("after-swap", { from, to, isBackForward, signal });
|
|
323
317
|
applyScrollBehavior();
|
|
324
318
|
}).ready;
|
|
325
319
|
} else {
|
|
326
320
|
if (morphHeads) Idiomorph2.morph(document.head, newDocument.head);
|
|
327
321
|
await mergeRegions();
|
|
328
|
-
await
|
|
322
|
+
await emit2("after-swap", { from, to, isBackForward, signal });
|
|
329
323
|
applyScrollBehavior();
|
|
330
324
|
}
|
|
331
325
|
if (signal.aborted) return;
|
|
332
326
|
if (autoFocus) autoFocusEl?.focus({ preventScroll: true });
|
|
333
|
-
|
|
327
|
+
emit2("load", { from, to, isBackForward });
|
|
334
328
|
};
|
|
335
329
|
|
|
336
330
|
// src/intercept.ts
|