mirror of
				https://github.com/Eledio/python-eledio.github.io.git
				synced 2025-10-31 00:12:32 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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 {
 | |
|     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;
 | |
| }
 |