Fixed invalid outdated version banner URL when using instant loading

This commit is contained in:
squidfunk
2022-03-02 09:26:00 +01:00
parent 1cc250625b
commit bcc2c180cd
12 changed files with 52 additions and 27 deletions

View File

@@ -237,6 +237,7 @@ export function setupInstantLoading(
"[data-md-component=announce]",
"[data-md-component=container]",
"[data-md-component=header-topic]",
"[data-md-component=outdated]",
"[data-md-component=logo]",
"[data-md-component=skip]",
...feature("navigation.tabs.sticky")

View File

@@ -22,12 +22,14 @@
import {
EMPTY,
Subject,
combineLatest,
filter,
fromEvent,
map,
of,
switchMap
switchMap,
switchMapTo
} from "rxjs"
import { configuration } from "~/_"
@@ -45,14 +47,29 @@ import {
import { fetchSitemap } from "../sitemap"
/* ----------------------------------------------------------------------------
* Helper types
* ------------------------------------------------------------------------- */
/**
* Setup options
*/
interface SetupOptions {
document$: Subject<Document> /* Document subject */
}
/* ----------------------------------------------------------------------------
* Functions
* ------------------------------------------------------------------------- */
/**
* Set up version selector
*
* @param options - Options
*/
export function setupVersionSelector(): void {
export function setupVersionSelector(
{ document$ }: SetupOptions
): void {
const config = configuration()
const versions$ = requestJSON<Version[]>(
new URL("../versions.json", config.base)
@@ -115,17 +132,25 @@ export function setupVersionSelector(): void {
.subscribe(([versions, current]) => {
const topic = getElement(".md-header__topic")
topic.appendChild(renderVersionSelector(versions, current))
})
/* Integrate outdated version banner with instant loading */
document$.pipe(switchMapTo(current$))
.subscribe(current => {
/* Check if version state was already determined */
if (__md_get("__outdated", sessionStorage) === null) {
let outdated = __md_get("__outdated", sessionStorage)
if (outdated === null) {
const latest = config.version?.default || "latest"
const outdated = !current.aliases.includes(latest)
outdated = !current.aliases.includes(latest)
/* Persist version state in session storage */
__md_set("__outdated", outdated, sessionStorage)
if (outdated)
for (const warning of getComponentElements("outdated"))
warning.hidden = false
}
/* Unhide outdated version banner */
if (outdated)
for (const warning of getComponentElements("outdated"))
warning.hidden = false
})
}