Static documentation site in Mkdocs
https://doc.gregandev.fr
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.1 KiB
110 lines
3.1 KiB
2 years ago
|
function getSearchTermFromLocation() {
|
||
|
var sPageURL = window.location.search.substring(1);
|
||
|
var sURLVariables = sPageURL.split('&');
|
||
|
for (var i = 0; i < sURLVariables.length; i++) {
|
||
|
var sParameterName = sURLVariables[i].split('=');
|
||
|
if (sParameterName[0] == 'q') {
|
||
|
return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20'));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function joinUrl (base, path) {
|
||
|
if (path.substring(0, 1) === "/") {
|
||
|
// path starts with `/`. Thus it is absolute.
|
||
|
return path;
|
||
|
}
|
||
|
if (base.substring(base.length-1) === "/") {
|
||
|
// base ends with `/`
|
||
|
return base + path;
|
||
|
}
|
||
|
return base + "/" + path;
|
||
|
}
|
||
|
|
||
|
function escapeHtml (value) {
|
||
|
return value.replace(/&/g, '&')
|
||
|
.replace(/"/g, '"')
|
||
|
.replace(/</g, '<')
|
||
|
.replace(/>/g, '>');
|
||
|
}
|
||
|
|
||
|
function formatResult (location, title, summary) {
|
||
|
return '<article><h3><a href="' + joinUrl(base_url, location) + '">'+ escapeHtml(title) + '</a></h3><p>' + escapeHtml(summary) +'</p></article>';
|
||
|
}
|
||
|
|
||
|
function displayResults (results) {
|
||
|
var search_results = document.getElementById("mkdocs-search-results");
|
||
|
while (search_results.firstChild) {
|
||
|
search_results.removeChild(search_results.firstChild);
|
||
|
}
|
||
|
if (results.length > 0){
|
||
|
for (var i=0; i < results.length; i++){
|
||
|
var result = results[i];
|
||
|
var html = formatResult(result.location, result.title, result.summary);
|
||
|
search_results.insertAdjacentHTML('beforeend', html);
|
||
|
}
|
||
|
} else {
|
||
|
var noResultsText = search_results.getAttribute('data-no-results-text');
|
||
|
if (!noResultsText) {
|
||
|
noResultsText = "No results found";
|
||
|
}
|
||
|
search_results.insertAdjacentHTML('beforeend', '<p>' + noResultsText + '</p>');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function doSearch () {
|
||
|
var query = document.getElementById('mkdocs-search-query').value;
|
||
|
if (query.length > min_search_length) {
|
||
|
if (!window.Worker) {
|
||
|
displayResults(search(query));
|
||
|
} else {
|
||
|
searchWorker.postMessage({query: query});
|
||
|
}
|
||
|
} else {
|
||
|
// Clear results for short queries
|
||
|
displayResults([]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function initSearch () {
|
||
|
var search_input = document.getElementById('mkdocs-search-query');
|
||
|
if (search_input) {
|
||
|
search_input.addEventListener("keyup", doSearch);
|
||
|
}
|
||
|
var term = getSearchTermFromLocation();
|
||
|
if (term) {
|
||
|
search_input.value = term;
|
||
|
doSearch();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function onWorkerMessage (e) {
|
||
|
if (e.data.allowSearch) {
|
||
|
initSearch();
|
||
|
} else if (e.data.results) {
|
||
|
var results = e.data.results;
|
||
|
displayResults(results);
|
||
|
} else if (e.data.config) {
|
||
|
min_search_length = e.data.config.min_search_length-1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!window.Worker) {
|
||
|
console.log('Web Worker API not supported');
|
||
|
// load index in main thread
|
||
|
$.getScript(joinUrl(base_url, "search/worker.js")).done(function () {
|
||
|
console.log('Loaded worker');
|
||
|
init();
|
||
|
window.postMessage = function (msg) {
|
||
|
onWorkerMessage({data: msg});
|
||
|
};
|
||
|
}).fail(function (jqxhr, settings, exception) {
|
||
|
console.error('Could not load worker.js');
|
||
|
});
|
||
|
} else {
|
||
|
// Wrap search in a web worker
|
||
|
var searchWorker = new Worker(joinUrl(base_url, "search/worker.js"));
|
||
|
searchWorker.postMessage({init: true});
|
||
|
searchWorker.onmessage = onWorkerMessage;
|
||
|
}
|