From 0bc13911487a51a229e24c9288dcf3644f5d3532 Mon Sep 17 00:00:00 2001 From: Enix Date: Fri, 1 Nov 2019 18:40:01 +0800 Subject: [PATCH] feat: add force cache --- packages/pjax/index.d.ts | 5 +++++ packages/pjax/index.js | 2 +- packages/pjax/lib/send-request.js | 9 +++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/pjax/index.d.ts b/packages/pjax/index.d.ts index 1e78099..13769ec 100644 --- a/packages/pjax/index.d.ts +++ b/packages/pjax/index.d.ts @@ -179,6 +179,11 @@ declare namespace Pjax { requestParams?: IRequestParams[]; formData?: FormData; } + + /** + * Cache accessed pages + */ + forceCache?: boolean } export type Switch = (oldEl: Element, newEl: Element, options?: IOptions, switchesOptions?: StringKeyedObject) => void; diff --git a/packages/pjax/index.js b/packages/pjax/index.js index b528d85..889cb6f 100644 --- a/packages/pjax/index.js +++ b/packages/pjax/index.js @@ -23,7 +23,7 @@ var Pjax = function(options) { this.log("Pjax options", this.options); if (this.options.scrollRestoration && "scrollRestoration" in history) { - history.scrollRestoration = "manual"; + history.scrollRestoration = "auto"; } this.maxUid = this.lastUid = newUid(); diff --git a/packages/pjax/lib/send-request.js b/packages/pjax/lib/send-request.js index ad7b1b1..7d282cf 100644 --- a/packages/pjax/lib/send-request.js +++ b/packages/pjax/lib/send-request.js @@ -1,8 +1,11 @@ var updateQueryString = require("./util/update-query-string"); +const cache = new Map(); + module.exports = function(location, options, callback) { options = options || {}; var queryString; + var forceCache = options.forceCache || false; var requestOptions = options.requestOptions || {}; var requestMethod = (requestOptions.requestMethod || "GET").toUpperCase(); var requestParams = requestOptions.requestParams || null; @@ -11,9 +14,15 @@ module.exports = function(location, options, callback) { var request = new XMLHttpRequest(); var timeout = options.timeout || 0; + if (forceCache && cache.has(location)) { + callback(cache.get(location), request, location, options); + return; + } + request.onreadystatechange = function() { if (request.readyState === 4) { if (request.status === 200) { + if (forceCache) cache.set(location, request.responseText); callback(request.responseText, request, location, options); } else if (request.status !== 0) { callback(null, request, location, options);