| 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 formatResult (location, title, summary) { |
| return '<article><h3><a href="' + joinUrl(base_url, location) + '">'+ title + '</a></h3><p>' + 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 { |
| search_results.insertAdjacentHTML('beforeend', "<p>No results found</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; |
| } |