mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2024-11-28 09:20:52 +01:00
Added loading of sitemap to filter instant loading requests
This commit is contained in:
parent
9a0c3e9094
commit
252db1334e
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
material/assets/javascripts/bundle.1fe7f735.min.js
vendored
Normal file
2
material/assets/javascripts/bundle.1fe7f735.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
material/assets/javascripts/bundle.1fe7f735.min.js.map
Normal file
1
material/assets/javascripts/bundle.1fe7f735.min.js.map
Normal file
File diff suppressed because one or more lines are too long
@ -1,6 +1,6 @@
|
||||
{
|
||||
"assets/javascripts/bundle.js": "assets/javascripts/bundle.193efd2f.min.js",
|
||||
"assets/javascripts/bundle.js.map": "assets/javascripts/bundle.193efd2f.min.js.map",
|
||||
"assets/javascripts/bundle.js": "assets/javascripts/bundle.1fe7f735.min.js",
|
||||
"assets/javascripts/bundle.js.map": "assets/javascripts/bundle.1fe7f735.min.js.map",
|
||||
"assets/javascripts/vendor.js": "assets/javascripts/vendor.8caa27b7.min.js",
|
||||
"assets/javascripts/vendor.js.map": "assets/javascripts/vendor.8caa27b7.min.js.map",
|
||||
"assets/javascripts/worker/search.js": "assets/javascripts/worker/search.37585f48.min.js",
|
||||
|
@ -179,7 +179,7 @@
|
||||
</div>
|
||||
{% block scripts %}
|
||||
<script src="{{ 'assets/javascripts/vendor.8caa27b7.min.js' | url }}"></script>
|
||||
<script src="{{ 'assets/javascripts/bundle.193efd2f.min.js' | url }}"></script>
|
||||
<script src="{{ 'assets/javascripts/bundle.1fe7f735.min.js' | url }}"></script>
|
||||
{%- set translations = {} -%}
|
||||
{%- for key in [
|
||||
"clipboard.copy",
|
||||
|
@ -52,7 +52,7 @@ theme:
|
||||
language: en
|
||||
features:
|
||||
- tabs
|
||||
#- instant
|
||||
- instant
|
||||
palette:
|
||||
primary: indigo
|
||||
accent: indigo
|
||||
|
@ -46,7 +46,8 @@ import {
|
||||
take,
|
||||
shareReplay,
|
||||
pluck,
|
||||
catchError
|
||||
catchError,
|
||||
map
|
||||
} from "rxjs/operators"
|
||||
|
||||
import {
|
||||
@ -352,8 +353,28 @@ export function initialize(config: unknown) {
|
||||
})
|
||||
|
||||
/* Enable instant loading, if not on file:// protocol */
|
||||
if (config.features.includes("instant") && location.protocol !== "file:")
|
||||
setupInstantLoading({ document$, location$, viewport$ })
|
||||
if (config.features.includes("instant") && location.protocol !== "file:") {
|
||||
|
||||
/* Fetch sitemap and extract URL whitelist */
|
||||
base$
|
||||
.pipe(
|
||||
switchMap(base => ajax({
|
||||
url: `${base}/sitemap.xml`,
|
||||
responseType: "document",
|
||||
withCredentials: true
|
||||
})
|
||||
.pipe<Document>(
|
||||
pluck("response")
|
||||
)
|
||||
),
|
||||
map(document => (
|
||||
getElements("loc", document).map(node => node.textContent!)
|
||||
))
|
||||
)
|
||||
.subscribe(urls => {
|
||||
setupInstantLoading(urls, { document$, location$, viewport$ })
|
||||
})
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
|
@ -100,7 +100,7 @@ interface SetupOptions {
|
||||
* @param options - Options
|
||||
*/
|
||||
export function setupInstantLoading(
|
||||
{ document$, viewport$, location$ }: SetupOptions
|
||||
urls: string[], { document$, viewport$, location$ }: SetupOptions
|
||||
): void {
|
||||
|
||||
/* Disable automatic scroll restoration */
|
||||
@ -125,7 +125,11 @@ export function setupInstantLoading(
|
||||
switchMap(ev => {
|
||||
if (ev.target instanceof HTMLElement) {
|
||||
const el = ev.target.closest("a")
|
||||
if (el && !el.target && isLocalLocation(el)) {
|
||||
if (
|
||||
el && !el.target &&
|
||||
isLocalLocation(el) &&
|
||||
urls.includes(el.href)
|
||||
) {
|
||||
if (!isAnchorLocation(el))
|
||||
ev.preventDefault()
|
||||
return of(el)
|
||||
|
Loading…
Reference in New Issue
Block a user