@very-simple/ajax 0.5.1 → 0.5.3
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 +4 -2
- package/dist/index.js +15 -7
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -5,12 +5,14 @@ interface VisitOptions {
|
|
|
5
5
|
merge?: MergeStrategy;
|
|
6
6
|
morphHeads?: boolean;
|
|
7
7
|
autoFocus?: boolean;
|
|
8
|
+
loadingDelay?: number;
|
|
8
9
|
}
|
|
9
10
|
type MergeStrategy = 'replace' | 'morph' | 'before' | 'after' | 'prepend' | 'append' | 'update';
|
|
10
11
|
interface Config {
|
|
11
12
|
watchHistory?: boolean;
|
|
12
13
|
merge?: MergeStrategy;
|
|
13
14
|
morphHeads?: boolean;
|
|
15
|
+
loadingDelay?: number;
|
|
14
16
|
}
|
|
15
17
|
type EventMap = {
|
|
16
18
|
visit: {
|
|
@@ -36,8 +38,8 @@ declare global {
|
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
declare const _default: {
|
|
39
|
-
start: ({ watchHistory, merge, morphHeads, }?: Config) => void;
|
|
40
|
-
visit: (url: string, { action, emitEvents, isBackForward, morphHeads, merge: mergeStrategy, autoFocus, }?: VisitOptions) => Promise<void>;
|
|
41
|
+
start: ({ watchHistory, merge, morphHeads, loadingDelay, }?: Config) => void;
|
|
42
|
+
visit: (url: string, { action, emitEvents, isBackForward, morphHeads, merge: mergeStrategy, loadingDelay, autoFocus, }?: VisitOptions) => Promise<void>;
|
|
41
43
|
};
|
|
42
44
|
|
|
43
45
|
export { _default as default };
|
package/dist/index.js
CHANGED
|
@@ -2,19 +2,23 @@
|
|
|
2
2
|
var globalConfig = {
|
|
3
3
|
watchHistory: true,
|
|
4
4
|
morphHeads: true,
|
|
5
|
-
merge: "replace"
|
|
5
|
+
merge: "replace",
|
|
6
|
+
loadingDelay: 500
|
|
6
7
|
};
|
|
7
8
|
|
|
8
9
|
// src/load.ts
|
|
9
10
|
var parser = new DOMParser();
|
|
10
11
|
var currentLoadController;
|
|
11
|
-
var load = async (url, regionIds) => {
|
|
12
|
+
var load = async (url, regionIds, options) => {
|
|
12
13
|
let progressDelayTimeout;
|
|
13
14
|
try {
|
|
14
|
-
currentLoadController?.abort(
|
|
15
|
+
currentLoadController?.abort();
|
|
15
16
|
currentLoadController = new AbortController();
|
|
16
17
|
setProgress(0);
|
|
17
|
-
progressDelayTimeout = window.setTimeout(
|
|
18
|
+
progressDelayTimeout = window.setTimeout(
|
|
19
|
+
() => toggleLoading(true),
|
|
20
|
+
options.loadingDelay
|
|
21
|
+
);
|
|
18
22
|
const response = await fetch(url, {
|
|
19
23
|
headers: {
|
|
20
24
|
"X-Very-Simple-Request": "true",
|
|
@@ -56,7 +60,8 @@ var load = async (url, regionIds) => {
|
|
|
56
60
|
return parser.parseFromString(html, "text/html");
|
|
57
61
|
} catch (e) {
|
|
58
62
|
setProgress(0);
|
|
59
|
-
|
|
63
|
+
const isAbortError = e instanceof DOMException && e.name === "AbortError";
|
|
64
|
+
if (!isAbortError) {
|
|
60
65
|
window.location.reload();
|
|
61
66
|
}
|
|
62
67
|
} finally {
|
|
@@ -149,6 +154,7 @@ var visit = async (url, {
|
|
|
149
154
|
isBackForward = false,
|
|
150
155
|
morphHeads = globalConfig.morphHeads,
|
|
151
156
|
merge: mergeStrategy = globalConfig.merge,
|
|
157
|
+
loadingDelay = globalConfig.loadingDelay,
|
|
152
158
|
autoFocus = true
|
|
153
159
|
} = {}) => {
|
|
154
160
|
prevUrl = currentUrl;
|
|
@@ -159,7 +165,7 @@ var visit = async (url, {
|
|
|
159
165
|
newDocument = cache.get(url)?.cloneNode(true);
|
|
160
166
|
}
|
|
161
167
|
const regions = findRegions(document);
|
|
162
|
-
newDocument ??= await load(url, Array.from(regions.keys()));
|
|
168
|
+
newDocument ??= await load(url, Array.from(regions.keys()), { loadingDelay });
|
|
163
169
|
if (!newDocument) return;
|
|
164
170
|
if (emitEvents) emit("before-render", { url, prevUrl, newDocument });
|
|
165
171
|
if (!isBackForward) {
|
|
@@ -207,11 +213,13 @@ var findRegions = (doc) => {
|
|
|
207
213
|
var start = ({
|
|
208
214
|
watchHistory = true,
|
|
209
215
|
merge: merge2 = "replace",
|
|
210
|
-
morphHeads = true
|
|
216
|
+
morphHeads = true,
|
|
217
|
+
loadingDelay = 500
|
|
211
218
|
} = {}) => {
|
|
212
219
|
globalConfig.merge = merge2;
|
|
213
220
|
globalConfig.watchHistory = watchHistory;
|
|
214
221
|
globalConfig.morphHeads = morphHeads;
|
|
222
|
+
globalConfig.loadingDelay = loadingDelay;
|
|
215
223
|
if (watchHistory) {
|
|
216
224
|
window.addEventListener("popstate", () => {
|
|
217
225
|
visit(window.location.pathname + window.location.search, {
|