@very-simple/ajax 0.5.0 → 0.5.2

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 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("cancel");
15
16
  currentLoadController = new AbortController();
16
17
  setProgress(0);
17
- progressDelayTimeout = window.setTimeout(() => toggleLoading(true), 500);
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,8 +60,7 @@ var load = async (url, regionIds) => {
56
60
  return parser.parseFromString(html, "text/html");
57
61
  } catch (e) {
58
62
  setProgress(0);
59
- const isAbortError = e instanceof DOMException && e.name === "AbortError";
60
- if (isAbortError || currentLoadController?.signal.aborted) {
63
+ if (e !== "cancel") {
61
64
  window.location.reload();
62
65
  }
63
66
  } finally {
@@ -150,6 +153,7 @@ var visit = async (url, {
150
153
  isBackForward = false,
151
154
  morphHeads = globalConfig.morphHeads,
152
155
  merge: mergeStrategy = globalConfig.merge,
156
+ loadingDelay = globalConfig.loadingDelay,
153
157
  autoFocus = true
154
158
  } = {}) => {
155
159
  prevUrl = currentUrl;
@@ -160,7 +164,7 @@ var visit = async (url, {
160
164
  newDocument = cache.get(url)?.cloneNode(true);
161
165
  }
162
166
  const regions = findRegions(document);
163
- newDocument ??= await load(url, Array.from(regions.keys()));
167
+ newDocument ??= await load(url, Array.from(regions.keys()), { loadingDelay });
164
168
  if (!newDocument) return;
165
169
  if (emitEvents) emit("before-render", { url, prevUrl, newDocument });
166
170
  if (!isBackForward) {
@@ -208,11 +212,13 @@ var findRegions = (doc) => {
208
212
  var start = ({
209
213
  watchHistory = true,
210
214
  merge: merge2 = "replace",
211
- morphHeads = true
215
+ morphHeads = true,
216
+ loadingDelay = 500
212
217
  } = {}) => {
213
218
  globalConfig.merge = merge2;
214
219
  globalConfig.watchHistory = watchHistory;
215
220
  globalConfig.morphHeads = morphHeads;
221
+ globalConfig.loadingDelay = loadingDelay;
216
222
  if (watchHistory) {
217
223
  window.addEventListener("popstate", () => {
218
224
  visit(window.location.pathname + window.location.search, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@very-simple/ajax",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "A very simple turbolinks inspired library",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",