mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2024-12-01 02:27:17 +01:00
Added search separator customization option
This commit is contained in:
parent
147e5ef75d
commit
d204b63ee4
File diff suppressed because one or more lines are too long
@ -150,7 +150,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script src="{{ base_url }}/assets/javascripts/application-07b0fbb49b.js"></script>
|
<script src="{{ base_url }}/assets/javascripts/application-7a3ab08b28.js"></script>
|
||||||
{% set languages = lang.t("search.languages").split(",") %}
|
{% set languages = lang.t("search.languages").split(",") %}
|
||||||
{% if languages | length and languages[0] != "" %}
|
{% if languages | length and languages[0] != "" %}
|
||||||
{% set path = base_url + "/assets/javascripts/lunr" %}
|
{% set path = base_url + "/assets/javascripts/lunr" %}
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
"search.result.none": "No matching documents",
|
"search.result.none": "No matching documents",
|
||||||
"search.result.one": "1 matching document",
|
"search.result.one": "1 matching document",
|
||||||
"search.result.other": "# matching documents",
|
"search.result.other": "# matching documents",
|
||||||
|
"search.tokenizer": "",
|
||||||
"source.link.title": "Go to repository",
|
"source.link.title": "Go to repository",
|
||||||
"toc.title": "Table of contents"
|
"toc.title": "Table of contents"
|
||||||
}[key] }}{% endmacro %}
|
}[key] }}{% endmacro %}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
</form>
|
</form>
|
||||||
<div class="md-search__output">
|
<div class="md-search__output">
|
||||||
<div class="md-search__scrollwrap" data-md-scrollfix>
|
<div class="md-search__scrollwrap" data-md-scrollfix>
|
||||||
<div class="md-search-result" data-md-component="result" data-md-lang-search="{{ lang.t('search.languages') }}">
|
<div class="md-search-result" data-md-component="result" data-md-lang-search="{{ lang.t('search.languages') }}" data-md-lang-tokenizer="{{ lang.t('search.tokenizer') }}">
|
||||||
<div class="md-search-result__meta" data-md-lang-result-none="{{ lang.t('search.result.none') }}" data-md-lang-result-one="{{ lang.t('search.result.one') }}" data-md-lang-result-other="{{ lang.t('search.result.other') }}">
|
<div class="md-search-result__meta" data-md-lang-result-none="{{ lang.t('search.result.none') }}" data-md-lang-result-one="{{ lang.t('search.result.one') }}" data-md-lang-result-other="{{ lang.t('search.result.other') }}">
|
||||||
{{ lang.t("search.result.placeholder") }}
|
{{ lang.t("search.result.placeholder") }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -71,6 +71,10 @@ export default class Result {
|
|||||||
other: this.meta_.dataset.mdLangResultOther
|
other: this.meta_.dataset.mdLangResultOther
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Override tokenizer separator, if given */
|
||||||
|
if (this.el_.dataset.mdLangTokenizer.length)
|
||||||
|
lunr.tokenizer.separator = this.el_.dataset.mdLangTokenizer
|
||||||
|
|
||||||
/* Load search languages */
|
/* Load search languages */
|
||||||
this.lang_ = this.el_.dataset.mdLangSearch.split(",")
|
this.lang_ = this.el_.dataset.mdLangSearch.split(",")
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
@ -139,13 +143,20 @@ export default class Result {
|
|||||||
return docs
|
return docs
|
||||||
}, new Map)
|
}, new Map)
|
||||||
|
|
||||||
/* eslint-disable no-invalid-this, lines-around-comment */
|
/* eslint-disable no-invalid-this */
|
||||||
const docs = this.docs_,
|
const docs = this.docs_,
|
||||||
lang = this.lang_
|
lang = this.lang_
|
||||||
|
|
||||||
/* Create index */
|
/* Create index */
|
||||||
this.index_ = lunr(function() {
|
this.index_ = lunr(function() {
|
||||||
|
|
||||||
|
/* Remove stemmer, as it cripples search experience */
|
||||||
|
this.pipeline.reset()
|
||||||
|
this.pipeline.add(
|
||||||
|
lunr.trimmer,
|
||||||
|
lunr.stopWordFilter
|
||||||
|
)
|
||||||
|
|
||||||
/* Set up stemmers for search languages */
|
/* Set up stemmers for search languages */
|
||||||
if (lang.length === 1) {
|
if (lang.length === 1) {
|
||||||
this.use(lunr[lang[0]])
|
this.use(lunr[lang[0]])
|
||||||
@ -161,8 +172,8 @@ export default class Result {
|
|||||||
/* Index documents */
|
/* Index documents */
|
||||||
docs.forEach(doc => this.add(doc))
|
docs.forEach(doc => this.add(doc))
|
||||||
})
|
})
|
||||||
/* eslint-enable no-invalid-this, lines-around-comment */
|
|
||||||
}
|
}
|
||||||
|
/* eslint-enable no-invalid-this */
|
||||||
|
|
||||||
/* Initialize index after short timeout to account for transition */
|
/* Initialize index after short timeout to account for transition */
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@ -217,10 +228,13 @@ export default class Result {
|
|||||||
return items
|
return items
|
||||||
}, new Map)
|
}, new Map)
|
||||||
|
|
||||||
/* Assemble highlight regex from query string */
|
/* Assemble regular expressions for matching */
|
||||||
const match = new RegExp(
|
const query = escape(this.value_.trim()).replace(
|
||||||
`(?:^|\\b)(${escape(this.value_.trim()).replace(" ", "|")})`, "img")
|
new RegExp(lunr.tokenizer.separator, "img"), "|")
|
||||||
const highlight = string => `<em>${string}</em>`
|
const match =
|
||||||
|
new RegExp(`(^|${lunr.tokenizer.separator})(${query})`, "img")
|
||||||
|
const highlight = (_, separator, token) =>
|
||||||
|
`${separator}<em>${token}</em>`
|
||||||
|
|
||||||
/* Render results */
|
/* Render results */
|
||||||
result.forEach((items, ref) => {
|
result.forEach((items, ref) => {
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
"search.result.none": "No matching documents",
|
"search.result.none": "No matching documents",
|
||||||
"search.result.one": "1 matching document",
|
"search.result.one": "1 matching document",
|
||||||
"search.result.other": "# matching documents",
|
"search.result.other": "# matching documents",
|
||||||
|
"search.tokenizer": "",
|
||||||
"source.link.title": "Go to repository",
|
"source.link.title": "Go to repository",
|
||||||
"toc.title": "Table of contents"
|
"toc.title": "Table of contents"
|
||||||
}[key] }}{% endmacro %}
|
}[key] }}{% endmacro %}
|
||||||
|
@ -38,7 +38,8 @@
|
|||||||
<div class="md-search__output">
|
<div class="md-search__output">
|
||||||
<div class="md-search__scrollwrap" data-md-scrollfix>
|
<div class="md-search__scrollwrap" data-md-scrollfix>
|
||||||
<div class="md-search-result" data-md-component="result"
|
<div class="md-search-result" data-md-component="result"
|
||||||
data-md-lang-search="{{ lang.t('search.languages') }}">
|
data-md-lang-search="{{ lang.t('search.languages') }}"
|
||||||
|
data-md-lang-tokenizer="{{ lang.t('search.tokenizer') }}">
|
||||||
<div class="md-search-result__meta"
|
<div class="md-search-result__meta"
|
||||||
data-md-lang-result-none="{{ lang.t('search.result.none') }}"
|
data-md-lang-result-none="{{ lang.t('search.result.none') }}"
|
||||||
data-md-lang-result-one="{{ lang.t('search.result.one') }}"
|
data-md-lang-result-one="{{ lang.t('search.result.one') }}"
|
||||||
|
Loading…
Reference in New Issue
Block a user