mirror of
				https://github.com/Eledio/python-eledio.github.io.git
				synced 2025-10-31 16:11:20 +01:00 
			
		
		
		
	Publish pages
This commit is contained in:
		
							
								
								
									
										3475
									
								
								site/search/lunr.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3475
									
								
								site/search/lunr.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										102
									
								
								site/search/main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								site/search/main.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| 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; | ||||
| } | ||||
							
								
								
									
										1
									
								
								site/search/search_index.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								site/search/search_index.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										133
									
								
								site/search/worker.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								site/search/worker.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,133 @@ | ||||
| var base_path = 'function' === typeof importScripts ? '.' : '/search/'; | ||||
| var allowSearch = false; | ||||
| var index; | ||||
| var documents = {}; | ||||
| var lang = ['en']; | ||||
| var data; | ||||
|  | ||||
| function getScript(script, callback) { | ||||
|   console.log('Loading script: ' + script); | ||||
|   $.getScript(base_path + script).done(function () { | ||||
|     callback(); | ||||
|   }).fail(function (jqxhr, settings, exception) { | ||||
|     console.log('Error: ' + exception); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| function getScriptsInOrder(scripts, callback) { | ||||
|   if (scripts.length === 0) { | ||||
|     callback(); | ||||
|     return; | ||||
|   } | ||||
|   getScript(scripts[0], function() { | ||||
|     getScriptsInOrder(scripts.slice(1), callback); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| function loadScripts(urls, callback) { | ||||
|   if( 'function' === typeof importScripts ) { | ||||
|     importScripts.apply(null, urls); | ||||
|     callback(); | ||||
|   } else { | ||||
|     getScriptsInOrder(urls, callback); | ||||
|   } | ||||
| } | ||||
|  | ||||
| function onJSONLoaded () { | ||||
|   data = JSON.parse(this.responseText); | ||||
|   var scriptsToLoad = ['lunr.js']; | ||||
|   if (data.config && data.config.lang && data.config.lang.length) { | ||||
|     lang = data.config.lang; | ||||
|   } | ||||
|   if (lang.length > 1 || lang[0] !== "en") { | ||||
|     scriptsToLoad.push('lunr.stemmer.support.js'); | ||||
|     if (lang.length > 1) { | ||||
|       scriptsToLoad.push('lunr.multi.js'); | ||||
|     } | ||||
|     if (lang.includes("ja") || lang.includes("jp")) { | ||||
|       scriptsToLoad.push('tinyseg.js'); | ||||
|     } | ||||
|     for (var i=0; i < lang.length; i++) { | ||||
|       if (lang[i] != 'en') { | ||||
|         scriptsToLoad.push(['lunr', lang[i], 'js'].join('.')); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   loadScripts(scriptsToLoad, onScriptsLoaded); | ||||
| } | ||||
|  | ||||
| function onScriptsLoaded () { | ||||
|   console.log('All search scripts loaded, building Lunr index...'); | ||||
|   if (data.config && data.config.separator && data.config.separator.length) { | ||||
|     lunr.tokenizer.separator = new RegExp(data.config.separator); | ||||
|   } | ||||
|  | ||||
|   if (data.index) { | ||||
|     index = lunr.Index.load(data.index); | ||||
|     data.docs.forEach(function (doc) { | ||||
|       documents[doc.location] = doc; | ||||
|     }); | ||||
|     console.log('Lunr pre-built index loaded, search ready'); | ||||
|   } else { | ||||
|     index = lunr(function () { | ||||
|       if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) { | ||||
|         this.use(lunr[lang[0]]); | ||||
|       } else if (lang.length > 1) { | ||||
|         this.use(lunr.multiLanguage.apply(null, lang));  // spread operator not supported in all browsers: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility | ||||
|       } | ||||
|       this.field('title'); | ||||
|       this.field('text'); | ||||
|       this.ref('location'); | ||||
|  | ||||
|       for (var i=0; i < data.docs.length; i++) { | ||||
|         var doc = data.docs[i]; | ||||
|         this.add(doc); | ||||
|         documents[doc.location] = doc; | ||||
|       } | ||||
|     }); | ||||
|     console.log('Lunr index built, search ready'); | ||||
|   } | ||||
|   allowSearch = true; | ||||
|   postMessage({config: data.config}); | ||||
|   postMessage({allowSearch: allowSearch}); | ||||
| } | ||||
|  | ||||
| function init () { | ||||
|   var oReq = new XMLHttpRequest(); | ||||
|   oReq.addEventListener("load", onJSONLoaded); | ||||
|   var index_path = base_path + '/search_index.json'; | ||||
|   if( 'function' === typeof importScripts ){ | ||||
|       index_path = 'search_index.json'; | ||||
|   } | ||||
|   oReq.open("GET", index_path); | ||||
|   oReq.send(); | ||||
| } | ||||
|  | ||||
| function search (query) { | ||||
|   if (!allowSearch) { | ||||
|     console.error('Assets for search still loading'); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   var resultDocuments = []; | ||||
|   var results = index.search(query); | ||||
|   for (var i=0; i < results.length; i++){ | ||||
|     var result = results[i]; | ||||
|     doc = documents[result.ref]; | ||||
|     doc.summary = doc.text.substring(0, 200); | ||||
|     resultDocuments.push(doc); | ||||
|   } | ||||
|   return resultDocuments; | ||||
| } | ||||
|  | ||||
| if( 'function' === typeof importScripts ) { | ||||
|   onmessage = function (e) { | ||||
|     if (e.data.init) { | ||||
|       init(); | ||||
|     } else if (e.data.query) { | ||||
|       postMessage({ results: search(e.data.query) }); | ||||
|     } else { | ||||
|       console.error("Worker - Unrecognized message: " + e); | ||||
|     } | ||||
|   }; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user