Added stemmer support for file:// protocol through iframe-worker

This commit is contained in:
squidfunk 2020-09-27 19:09:09 +02:00
parent ee808c769e
commit 9fe00ec0af
8 changed files with 24 additions and 10 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -3,8 +3,8 @@
"assets/javascripts/bundle.js.map": "assets/javascripts/bundle.d5b17bb4.min.js.map", "assets/javascripts/bundle.js.map": "assets/javascripts/bundle.d5b17bb4.min.js.map",
"assets/javascripts/vendor.js": "assets/javascripts/vendor.186f2b9b.min.js", "assets/javascripts/vendor.js": "assets/javascripts/vendor.186f2b9b.min.js",
"assets/javascripts/vendor.js.map": "assets/javascripts/vendor.186f2b9b.min.js.map", "assets/javascripts/vendor.js.map": "assets/javascripts/vendor.186f2b9b.min.js.map",
"assets/javascripts/worker/search.js": "assets/javascripts/worker/search.cbc634e2.min.js", "assets/javascripts/worker/search.js": "assets/javascripts/worker/search.c9a3f22b.min.js",
"assets/javascripts/worker/search.js.map": "assets/javascripts/worker/search.cbc634e2.min.js.map", "assets/javascripts/worker/search.js.map": "assets/javascripts/worker/search.c9a3f22b.min.js.map",
"assets/stylesheets/main.css": "assets/stylesheets/main.f6c1319f.min.css", "assets/stylesheets/main.css": "assets/stylesheets/main.f6c1319f.min.css",
"assets/stylesheets/main.css.map": "assets/stylesheets/main.f6c1319f.min.css.map", "assets/stylesheets/main.css.map": "assets/stylesheets/main.f6c1319f.min.css.map",
"assets/stylesheets/overrides.css": "assets/stylesheets/overrides.41a1bb10.min.css", "assets/stylesheets/overrides.css": "assets/stylesheets/overrides.41a1bb10.min.css",

View File

@ -200,7 +200,7 @@
base: "{{ base_url }}", base: "{{ base_url }}",
features: {{ config.theme.features or [] | tojson }}, features: {{ config.theme.features or [] | tojson }},
search: Object.assign({ search: Object.assign({
worker: "{{ 'assets/javascripts/worker/search.cbc634e2.min.js' | url }}" worker: "{{ 'assets/javascripts/worker/search.c9a3f22b.min.js' | url }}"
}, typeof search !== "undefined" && search) }, typeof search !== "undefined" && search)
}) })
</script> </script>

View File

@ -37,8 +37,8 @@
"focus-visible": "^5.1.0", "focus-visible": "^5.1.0",
"lunr": "^2.3.9", "lunr": "^2.3.9",
"lunr-languages": "^1.4.0", "lunr-languages": "^1.4.0",
"resize-observer-polyfill": "^1.5.1",
"ramda": "^0.27.1", "ramda": "^0.27.1",
"resize-observer-polyfill": "^1.5.1",
"rxjs": "^7.0.0-beta.7" "rxjs": "^7.0.0-beta.7"
}, },
"devDependencies": { "devDependencies": {

View File

@ -83,6 +83,11 @@ async function fetchSearchIndex(url: string): Promise<SearchIndex> {
* This function will automatically import the stemmers necessary to process * This function will automatically import the stemmers necessary to process
* the languages which were given through the search index configuration. * the languages which were given through the search index configuration.
* *
* If the worker runs inside of an `iframe` (when using `iframe-worker` as a
* shim), the base URL must be determined by searching for the first `script`
* element with a `src` attribute, which will equal the worker script, and
* determine the base URL by examining the worker URL.
*
* @param config - Search index configuration * @param config - Search index configuration
* *
* @return Promise resolving with no result * @return Promise resolving with no result
@ -90,7 +95,16 @@ async function fetchSearchIndex(url: string): Promise<SearchIndex> {
async function setupSearchLanguages( async function setupSearchLanguages(
config: SearchIndexConfig config: SearchIndexConfig
): Promise<void> { ): Promise<void> {
const base = "../lunr" let base = "../lunr"
/* Detect `iframe-worker` and fix base URL */
if (typeof parent !== "undefined" && "IFrameWorker" in parent) {
const worker = document.querySelector<HTMLScriptElement>("script[src]")!
const [path] = worker.src.split("/worker")
/* Prefix base with path */
base = base.replace("..", path)
}
/* Add scripts for languages */ /* Add scripts for languages */
const scripts = [] const scripts = []