| New file |
| | |
| | | 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; |
| | | } |