mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2024-11-24 15:40:15 +01:00
Fixed search for use_directory_urls: false
This commit is contained in:
parent
ff9ef6a4a7
commit
68c9cb6dac
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
material/assets/javascripts/bundle.63709496.min.js.map
Normal file
1
material/assets/javascripts/bundle.63709496.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.55767211.min.js",
|
||||
"assets/javascripts/bundle.js.map": "assets/javascripts/bundle.55767211.min.js.map",
|
||||
"assets/javascripts/bundle.js": "assets/javascripts/bundle.63709496.min.js",
|
||||
"assets/javascripts/bundle.js.map": "assets/javascripts/bundle.63709496.min.js.map",
|
||||
"assets/javascripts/worker/search.js": "assets/javascripts/worker/search.926ffd9e.min.js",
|
||||
"assets/javascripts/worker/search.js.map": "assets/javascripts/worker/search.926ffd9e.min.js.map",
|
||||
"assets/stylesheets/main.scss": "assets/stylesheets/main.0d8ec950.min.css",
|
||||
|
@ -195,7 +195,7 @@
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% block scripts %}
|
||||
<script src="{{ 'assets/javascripts/bundle.55767211.min.js' | url }}"></script>
|
||||
<script src="{{ 'assets/javascripts/bundle.63709496.min.js' | url }}"></script>
|
||||
{%- set translations = {} -%}
|
||||
{%- for key in [
|
||||
"clipboard.copy",
|
||||
|
@ -52,7 +52,8 @@ import {
|
||||
debounceTime,
|
||||
distinctUntilKeyChanged,
|
||||
distinctUntilChanged,
|
||||
bufferCount
|
||||
bufferCount,
|
||||
startWith
|
||||
} from "rxjs/operators"
|
||||
|
||||
import {
|
||||
@ -68,7 +69,8 @@ import {
|
||||
useToggle,
|
||||
getElement,
|
||||
setViewportOffset,
|
||||
ViewportOffset
|
||||
ViewportOffset,
|
||||
getLocation
|
||||
} from "./observables"
|
||||
import { setupSearchWorker } from "./workers"
|
||||
|
||||
@ -158,7 +160,7 @@ export function initialize(config: unknown) {
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
const worker = setupSearchWorker(config.worker.search, {
|
||||
base: config.base
|
||||
base: config.base, location$
|
||||
})
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
@ -28,11 +28,10 @@ import {
|
||||
pluck,
|
||||
share,
|
||||
skip,
|
||||
startWith,
|
||||
switchMap
|
||||
} from "rxjs/operators"
|
||||
|
||||
import { getLocation, setLocation } from "../../location"
|
||||
import { setLocation } from "../../location"
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Helper types
|
||||
@ -52,7 +51,7 @@ interface WatchOptions {
|
||||
/**
|
||||
* Watch document switch
|
||||
*
|
||||
* This function returns an observables that fetches a document if the provided // TODO: update docs
|
||||
* This function returns an observables that fetches a document if the provided
|
||||
* location observable emits a new value (i.e. URL). If the emitted URL points
|
||||
* to the same page, the request is effectively ignored (i.e. when only the
|
||||
* fragment identifier changes).
|
||||
@ -68,7 +67,6 @@ export function watchDocumentSwitch(
|
||||
): Observable<Document> {
|
||||
return location$
|
||||
.pipe(
|
||||
startWith(getLocation()),
|
||||
distinctUntilKeyChanged("pathname"),
|
||||
skip(1),
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
import { Subject } from "rxjs"
|
||||
import { BehaviorSubject } from "rxjs"
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Functions
|
||||
@ -56,6 +56,6 @@ export function setLocation(url: URL): void {
|
||||
*
|
||||
* @return Location subject
|
||||
*/
|
||||
export function watchLocation(): Subject<URL> {
|
||||
return new Subject<URL>()
|
||||
export function watchLocation(): BehaviorSubject<URL> {
|
||||
return new BehaviorSubject<URL>(getLocation())
|
||||
}
|
||||
|
@ -20,14 +20,19 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
import { Subject, Subscriber, from, fromEvent } from "rxjs"
|
||||
import { Observable, Subject, from } from "rxjs"
|
||||
import { ajax } from "rxjs/ajax"
|
||||
import { map, pluck, shareReplay } from "rxjs/operators"
|
||||
import {
|
||||
map,
|
||||
pluck,
|
||||
shareReplay,
|
||||
take,
|
||||
withLatestFrom
|
||||
} from "rxjs/operators"
|
||||
|
||||
import { SearchIndexOptions } from "integrations/search"
|
||||
import {
|
||||
WorkerHandler,
|
||||
getLocation,
|
||||
watchWorker
|
||||
} from "observables"
|
||||
|
||||
@ -48,26 +53,7 @@ import {
|
||||
interface SetupOptions {
|
||||
base: string /* Base url */
|
||||
index?: Promise<SearchIndexOptions> /* Promise resolving with index */
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Helper functions
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Resolve URL
|
||||
* * TODO: document what's going on here + cache results
|
||||
*
|
||||
* @param origin - Base URL
|
||||
* @param paths - Further URL paths
|
||||
*
|
||||
* @return Relative URL
|
||||
*/
|
||||
function resolve(origin: URL, ...paths: string[]) {
|
||||
const path = location.pathname
|
||||
.replace(origin.pathname, "")
|
||||
.replace(/[^\/]+/g, "..")
|
||||
return [path, ...paths].join("")
|
||||
location$: Observable<URL> /* Location observable */
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
@ -88,21 +74,39 @@ function resolve(origin: URL, ...paths: string[]) {
|
||||
* @return Worker handler
|
||||
*/
|
||||
export function setupSearchWorker(
|
||||
url: string, { base, index }: SetupOptions
|
||||
url: string, { base, index, location$ }: SetupOptions
|
||||
): WorkerHandler<SearchMessage> {
|
||||
const worker = new Worker(url)
|
||||
const origin = new URL(base, getLocation())
|
||||
|
||||
/* Compute new base URL when location changes */
|
||||
const origin$ = location$
|
||||
.pipe(
|
||||
withLatestFrom(location$
|
||||
.pipe(
|
||||
take(1),
|
||||
map(({ href }) => new URL(base, href))
|
||||
)
|
||||
),
|
||||
map(([location, origin]) => location.href
|
||||
.replace(origin.href, "")
|
||||
.split("/")
|
||||
.slice(1)
|
||||
.map(() => "..")
|
||||
.join("/")
|
||||
)
|
||||
)
|
||||
|
||||
/* Create communication channels and resolve relative links */
|
||||
const tx$ = new Subject<SearchMessage>()
|
||||
const rx$ = watchWorker(worker, { tx$ })
|
||||
.pipe(
|
||||
map(message => {
|
||||
withLatestFrom(origin$),
|
||||
map(([message, origin]) => {
|
||||
if (isSearchResultMessage(message)) {
|
||||
for (const { article, sections } of message.data) {
|
||||
article.location = resolve(origin, article.location)
|
||||
article.location = `${origin}/${article.location}`
|
||||
for (const section of sections)
|
||||
section.location = resolve(origin, section.location)
|
||||
section.location = `${origin}/${section.location}`
|
||||
}
|
||||
}
|
||||
return message
|
||||
@ -114,7 +118,7 @@ export function setupSearchWorker(
|
||||
const index$ = typeof index !== "undefined"
|
||||
? from(index)
|
||||
: ajax({
|
||||
url: resolve(origin, "search/search_index.json"),
|
||||
url: `${base}/search/search_index.json`,
|
||||
responseType: "json",
|
||||
withCredentials: true
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user