1 | function getSearchTermFromLocation() {
|
2 | var sPageURL = window.location.search.substring(1);
|
3 | var sURLVariables = sPageURL.split('&');
|
4 | for (var i = 0; i < sURLVariables.length; i++) {
|
5 | var sParameterName = sURLVariables[i].split('=');
|
6 | if (sParameterName[0] == 'q') {
|
7 | return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20'));
|
8 | }
|
9 | }
|
10 | }
|
11 |
|
12 | function joinUrl (base, path) {
|
13 | if (path.substring(0, 1) === "/") {
|
14 |
|
15 | return path;
|
16 | }
|
17 | if (base.substring(base.length-1) === "/") {
|
18 |
|
19 | return base + path;
|
20 | }
|
21 | return base + "/" + path;
|
22 | }
|
23 |
|
24 | function formatResult (location, title, summary) {
|
25 | return '<article><h3><a href="' + joinUrl(base_url, location) + '">'+ title + '</a></h3><p>' + summary +'</p></article>';
|
26 | }
|
27 |
|
28 | function displayResults (results) {
|
29 | var search_results = document.getElementById("mkdocs-search-results");
|
30 | while (search_results.firstChild) {
|
31 | search_results.removeChild(search_results.firstChild);
|
32 | }
|
33 | if (results.length > 0){
|
34 | for (var i=0; i < results.length; i++){
|
35 | var result = results[i];
|
36 | var html = formatResult(result.location, result.title, result.summary);
|
37 | search_results.insertAdjacentHTML('beforeend', html);
|
38 | }
|
39 | } else {
|
40 | search_results.insertAdjacentHTML('beforeend', "<p>No results found</p>");
|
41 | }
|
42 | }
|
43 |
|
44 | function doSearch () {
|
45 | var query = document.getElementById('mkdocs-search-query').value;
|
46 | if (query.length > 2) {
|
47 | if (!window.Worker) {
|
48 | displayResults(search(query));
|
49 | } else {
|
50 | searchWorker.postMessage({query: query});
|
51 | }
|
52 | } else {
|
53 |
|
54 | displayResults([]);
|
55 | }
|
56 | }
|
57 |
|
58 | function initSearch () {
|
59 | var search_input = document.getElementById('mkdocs-search-query');
|
60 | if (search_input) {
|
61 | search_input.addEventListener("keyup", doSearch);
|
62 | }
|
63 | var term = getSearchTermFromLocation();
|
64 | if (term) {
|
65 | search_input.value = term;
|
66 | doSearch();
|
67 | }
|
68 | }
|
69 |
|
70 | function onWorkerMessage (e) {
|
71 | if (e.data.allowSearch) {
|
72 | initSearch();
|
73 | } else if (e.data.results) {
|
74 | var results = e.data.results;
|
75 | displayResults(results);
|
76 | }
|
77 | }
|
78 |
|
79 | if (!window.Worker) {
|
80 | console.log('Web Worker API not supported');
|
81 |
|
82 | $.getScript(joinUrl(base_url, "search/worker.js")).done(function () {
|
83 | console.log('Loaded worker');
|
84 | init();
|
85 | window.postMessage = function (msg) {
|
86 | onWorkerMessage({data: msg});
|
87 | };
|
88 | }).fail(function (jqxhr, settings, exception) {
|
89 | console.error('Could not load worker.js');
|
90 | });
|
91 | } else {
|
92 |
|
93 | var searchWorker = new Worker(joinUrl(base_url, "search/worker.js"));
|
94 | searchWorker.postMessage({init: true});
|
95 | searchWorker.onmessage = onWorkerMessage;
|
96 | }
|