Skip to content

Commit

Permalink
Implement fallback for no worker support
Browse files Browse the repository at this point in the history
Fixes mkdocs#1218, fixes mkdocs#1127, and partially addresses mkdocs#859.
  • Loading branch information
waylan committed Jan 31, 2018
1 parent d7e948d commit 2c544d6
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 41 deletions.
88 changes: 60 additions & 28 deletions mkdocs/contrib/search/templates/search/main.js
Expand Up @@ -13,51 +13,83 @@ function formatResult (location, title, summary) {
return '<article><h3><a href="'+ location + '">'+ title + '</a></h3><p>' + summary +'</p></article>';
}

function onWorkerMessage (e) {
if (e.data.results) {
var results = e.data.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 displayResults (results) {
var search_results = document.getElementById("mkdocs-search-results");
while (search_results.firstChild) {
search_results.removeChild(search_results.firstChild);
}
}

function search () {
var query = document.getElementById('mkdocs-search-query').value;
if (query.length > 2) {
console.log('Sending search query for: ' + query);
searchWorker.postMessage({query: query});
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>");
}
}

if (!window.Worker) {
console.error('Web Worker API not supported');
// TODO: load legacy search.js?
console.log('Web Worker API not supported');
// load index in main thread
$.getScript(base_url + "/search/lunr.min.js", function () {
$.getScript(base_url + "/search/worker.js", function () {
init();

function doSearch () {
var query = document.getElementById('mkdocs-search-query').value;
if (query.length > 2) {
console.log('Searching with query: ' + query);
var results = search(query);
displayResults(results);
}
}

$(function() {
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();
}
});
});
});
} else {
var searchWorker = new Worker("/search/worker.js");
// Wrap search in a web worker
function onWorkerMessage (e) {
if (e.data.results) {
var results = e.data.results;
displayResults(results);
}
}

var searchWorker = new Worker(base_url + "/search/worker.js");
searchWorker.postMessage({baseUrl: base_url});
searchWorker.onmessage = onWorkerMessage;

function doSearch () {
var query = document.getElementById('mkdocs-search-query').value;
if (query.length > 2) {
console.log('Sending search query for: ' + query);
searchWorker.postMessage({query: query});
}
}

$(function() {
var search_input = document.getElementById('mkdocs-search-query');
if (search_input) {
search_input.addEventListener("keyup", search);
search_input.addEventListener("keyup", doSearch);
}

var term = getSearchTermFromLocation();
if (term) {
search_input.value = term;
search();
doSearch();
}
});
}
35 changes: 22 additions & 13 deletions mkdocs/contrib/search/templates/search/worker.js
@@ -1,6 +1,9 @@
importScripts('lunr.min.js');
if( 'function' === typeof importScripts ){
importScripts('lunr.min.js');

var base_url = '.';
}

var base_url = '.';
var index;
var documents = {};

Expand All @@ -22,7 +25,11 @@ function onLoad () {
function init () {
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", onLoad);
oReq.open("GET", '/search/search_index.json');
var index_path = base_url + '/search/search_index.json';
if( 'function' === typeof importScripts ){
index_path = 'search_index.json';
}
oReq.open("GET", index_path);
oReq.send();
}

Expand All @@ -39,13 +46,15 @@ function search (query) {
return resultDocuments;
}

onmessage = function (e) {
if (e.data.baseUrl) {
base_url = e.data.baseUrl;
init();
} else if (e.data.query) {
postMessage({ results: search(e.data.query) });
} else {
console.error("Worker - Unrecognized message: " + e);
}
};
if( 'function' === typeof importScripts ){
onmessage = function (e) {
if (e.data.baseUrl) {
base_url = e.data.baseUrl;
init();
} else if (e.data.query) {
postMessage({ results: search(e.data.query) });
} else {
console.error("Worker - Unrecognized message: " + e);
}
};
}

0 comments on commit 2c544d6

Please sign in to comment.