Skip to content

Commit ca62e8b

Browse files
committed
Fetch latest changes to turbo-offline
1 parent 13377ac commit ca62e8b

9 files changed

Lines changed: 601 additions & 167 deletions

app/assets/javascripts/turbo-offline-umd.js

Lines changed: 276 additions & 71 deletions
Large diffs are not rendered by default.

app/assets/javascripts/turbo-offline-umd.min.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/assets/javascripts/turbo-offline-umd.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/assets/javascripts/turbo-offline.js

Lines changed: 281 additions & 72 deletions
Large diffs are not rendered by default.

app/assets/javascripts/turbo-offline.min.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/assets/javascripts/turbo-offline.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/assets/javascripts/turbo.js

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*!
2-
Turbo 8.0.20
3-
Copyright © 2025 37signals LLC
2+
Turbo 8.0.23
3+
Copyright © 2026 37signals LLC
44
*/
55
const FrameLoadingStyle = {
66
eager: "eager",
@@ -4572,13 +4572,14 @@ const deprecatedLocationPropertyDescriptors = {
45724572

45734573
class Offline {
45744574
serviceWorker;
4575-
async start(url = "/service-worker.js", {scope: scope = "/", type: type = "classic", native: native = true} = {}) {
4575+
async start(url = "/service-worker.js", {scope: scope = "/", type: type = "classic", native: native = true, preload: preload} = {}) {
45764576
if (!("serviceWorker" in navigator)) {
45774577
console.warn("Service Worker not available.");
45784578
return;
45794579
}
45804580
if (native) this.#setUserAgentCookie();
45814581
await this.#domReady();
4582+
const needsPreloading = preload && !navigator.serviceWorker.controller;
45824583
this.#checkExistingController(navigator.serviceWorker.controller, url);
45834584
try {
45844585
const registration = await navigator.serviceWorker.register(url, {
@@ -4588,6 +4589,9 @@ class Offline {
45884589
const registered = registration.active || registration.waiting || registration.installing;
45894590
this.#checkExistingController(registered, url);
45904591
this.serviceWorker = registered;
4592+
if (needsPreloading) {
4593+
this.#preloadWhenReady(preload);
4594+
}
45914595
return registration;
45924596
} catch (error) {
45934597
console.error(error);
@@ -4602,6 +4606,22 @@ class Offline {
46024606
console.warn(`Expected service worker script ${url} but found ${controller.scriptURL}. ` + `This may indicate multiple service workers or a cached version.`);
46034607
}
46044608
}
4609+
#preloadWhenReady(pattern) {
4610+
navigator.serviceWorker.addEventListener("controllerchange", (() => {
4611+
this.#preloadResources(pattern);
4612+
}), {
4613+
once: true
4614+
});
4615+
}
4616+
#preloadResources(pattern) {
4617+
const urls = performance.getEntriesByType("resource").map((entry => entry.name)).filter((url => pattern.test(url)));
4618+
navigator.serviceWorker.controller.postMessage({
4619+
action: "preloadResources",
4620+
params: {
4621+
urls: urls
4622+
}
4623+
});
4624+
}
46054625
#domReady() {
46064626
return new Promise((resolve => {
46074627
if (document.readyState !== "complete") {
@@ -4617,7 +4637,7 @@ const offline = new Offline;
46174637

46184638
const session = new Session(recentRequests);
46194639

4620-
const {cache: cache, navigator: navigator} = session;
4640+
const {cache: cache, navigator: sessionNavigator} = session;
46214641

46224642
function start() {
46234643
session.start();
@@ -4668,15 +4688,15 @@ function morphTurboFrameElements(currentFrame, newFrame) {
46684688

46694689
var Turbo = Object.freeze({
46704690
__proto__: null,
4671-
navigator: navigator,
4672-
session: session,
4673-
cache: cache,
46744691
PageRenderer: PageRenderer,
46754692
PageSnapshot: PageSnapshot,
46764693
FrameRenderer: FrameRenderer,
46774694
fetch: fetchWithTurboHeaders,
46784695
config: config,
46794696
offline: offline,
4697+
session: session,
4698+
cache: cache,
4699+
navigator: sessionNavigator,
46804700
start: start,
46814701
registerAdapter: registerAdapter,
46824702
visit: visit,
@@ -5418,7 +5438,7 @@ var Turbo$1 = Object.freeze({
54185438
morphChildren: morphChildren,
54195439
morphElements: morphElements,
54205440
morphTurboFrameElements: morphTurboFrameElements,
5421-
navigator: navigator$1,
5441+
navigator: sessionNavigator,
54225442
offline: offline,
54235443
registerAdapter: registerAdapter,
54245444
renderStreamMessage: renderStreamMessage,

app/assets/javascripts/turbo.min.js

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/assets/javascripts/turbo.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)