8000 Added loading of sitemap to filter instant loading requests · squidfunk/mkdocs-material@252db13 · GitHub
[go: up one dir, main page]

Skip to content

Commit 252db13

Browse files
committed
Added loading of sitemap to filter instant loading requests
1 parent 9a0c3e9 commit 252db13

File tree

9 files changed

+37
-12
lines changed

9 files changed

+37
-12
lines changed

material/assets/javascripts/bundle.193efd2f.min.js

Lines changed: 0 additions & 2 deletions
This file was deleted.

material/assets/javascripts/bundle.193efd2f.min.js.map

Lines changed: 0 additions & 1 deletion
This file was deleted.

material/assets/javascripts/bundle.1fe7f735.min.js

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

material/assets/javascripts/bundle.1fe7f735.min.js.map

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

material/assets/manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"assets/javascripts/bundle.js": "assets/javascripts/bundle.193efd2f.min.js",
3-
"assets/javascripts/bundle.js.map": "assets/javascripts/bundle.193efd2f.min.js.map",
2+
"assets/javascripts/bundle.js": "assets/javascripts/bundle.1fe7f735.min.js",
3+
"assets/javascripts/bundle.js.map": "assets/javascripts/bundle.1fe7f735.min.js.map",
44
"assets/javascripts/vendor.js": "assets/javascripts/vendor.8caa27b7.min.js",
55
"assets/javascripts/vendor.js.map": "assets/javascripts/vendor.8caa27b7.min.js.map",
66
"assets/javascripts/worker/search.js": "assets/javascripts/worker/search.37585f48.min.js",

material/base.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ <h1>{{ page.title | default(config.site_name, true)}}</h1>
179179
</div>
180180
{% block scripts %}
181181
<script src="{{ 'assets/javascripts/vendor.8caa27b7.min.js' | url }}"></script>
182-
<script src="{{ 'assets/javascripts/bundle.193efd2f.min.js' | url }}"></script>
182+
<script src="{{ 'assets/javascripts/bundle.1fe7f735.min.js' | url }}"></script>
183183
{%- set translations = {} -%}
184184
{%- for key in [
185185
"clipboard.copy",

mkdocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ theme:
5252
language: en
5353
features:
5454
- tabs
55-
#- instant
55+
- instant
5656
palette:
5757
primary: indigo
5858
accent: indigo

src/assets/javascripts/index.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ import {
4646
take,
4747
shareReplay,
4848
pluck,
49-
catchError
49+
catchError,
50+
map
5051
} from "rxjs/operators"
5152

5253
import {
@@ -352,8 +353,28 @@ export function initialize(config: unknown) {
352353
})
353354

354355
/* Enable instant loading, if not on file:// protocol */
355-
if (config.features.includes("instant") && location.protocol !== "file:")
356-
setupInstantLoading({ document$, location$, viewport$ })
356+
if (config.features.includes("instant") && location.protocol !== "file:") {
357+
358+
/* Fetch sitemap and extract URL whitelist */
359+
base$
360+
.pipe(
361+
switchMap(base => ajax({
362+
url: `${base}/sitemap.xml`,
363+
responseType: "document",
364+
withCredentials: true
365+
})
366+
.pipe<Document>(
367+
pluck("response")
368+
)
369+
),
370+
map(document => (
371+
getElements("loc", document).map(node => node.textContent!)
372+
))
373+
)
374+
.subscribe(urls => {
375+
setupInstantLoading(urls, { document$, location$, viewport$ })
376+
})
377+
}
357378

358379
/* ----------------------------------------------------------------------- */
359380

src/assets/javascripts/integrations/instant/index.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ interface SetupOptions {
100100
* @param options - Options
101101
*/
102102
export function setupInstantLoading(
103-
{ document$, viewport$, location$ }: SetupOptions
103+
urls: string[], { document$, viewport$, location$ }: SetupOptions
104104
): void {
105105

106106
/* Disable automatic scroll restoration */
@@ -125,7 +125,11 @@ export function setupInstantLoading(
125125
switchMap(ev => {
126126
if (ev.target instanceof HTMLElement) {
127127
const el = ev.target.closest("a")
128-
if (el && !el.target && isLocalLocation(el)) {
128+
if (
129+
el && !el.target &&
130+
isLocalLocation(el) &&
131+
urls.includes(el.href)
132+
) {
129133
if (!isAnchorLocation(el))
130134
ev.preventDefault()
131135
return of(el)

0 commit comments

Comments
 (0)
0