-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsearch.html
86 lines (74 loc) · 2.36 KB
/
search.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
---
layout: with_sidebar
body: search
title: Archives
---
{% if site.tapir_token %}
<div class="shadow-box" id="search_results_area">
<h2>Posts <span id="result_count"></span></h2>
<ol id="search_results" class="dates">
</ol>
</div>
<script type="text/javascript">
window.addEventListener("load", function() {
var tapir = function(query, callback) {
var url = 'http://tapirgo.com/api/1/search.json?token={{ site.tapir_token }}&query=' + encodeURIComponent(query);
var req;
{% comment %}
// Tapir doesn't support CORS yet...
if (window.XMLHttpRequest) {
req = new XMLHttpRequest()
} else {
req = new ActiveXObject("Msxml2.XMLHTTP")
}
if (!req) return;
req.onreadystatechange = function () {
if (req.readystate != 4) return;
if (req.status != 200) {
callback([])
} else {
callback(JSON.parse(req.responseText))
}
}
req.open('GET', url);
req.send();
{% endcomment %}
// JSONP is not safe, but it's all we've got...
window.tapir_callback = callback
var script = document.createElement('script')
script.setAttribute('type', 'text/javascript')
script.setAttribute('src', url + "&callback=tapir_callback")
document.head.appendChild(script)
}
var search_results = document.getElementById('search_results')
var search_field = document.getElementById('search');
var query = window.location.search.match(/query=(.+?)(\x26|$)/)
if (query) search_field.value = query[1]
var tapir_callback = function(results) {
search_results.className = 'dates';
var resultCount = document.getElementById('result_count')
if (resultCount.textContent) resultCount.textContent = '(' + results.length + ')';
else resultCount.innerText = '(' + results.length + ')';
search_results.innerHTML = results.map(function(post) { return '\
<li>\
<span class="date">' + post.published_on.substr(0,10) + '</span>\
<a href="' + post.link + '">' + post.title + '</a>\
</li>';
}).join('');
}
var run_query = function(e) {
if (e) e.preventDefault();
var query = search_field.value;
if (!query) return;
search_results.className = 'loading dates';
tapir(query, tapir_callback);
}
search_field.form.addEventListener('submit', run_query);
run_query();
});
</script>
{% else %}
<div class="shadow-box" id="search_results_area">
<p>Search is not enabled on this site.</p>
</div>
{% endif %}