2
var searchIndex = window.esdocSearchIndex;
3
var searchBox = document.querySelector('.search-box');
4
var input = document.querySelector('.search-input');
5
var result = document.querySelector('.search-result');
6
var selectedIndex = -1;
10
searchBox.addEventListener('mouseenter', function(){
11
searchBox.classList.add('active');
16
input.addEventListener('keyup', function(ev){
17
var text = ev.target.value.toLowerCase();
19
result.style.display = 'none';
20
result.innerHTML = '';
24
if (text === prevText) return;
27
var html = {class: [], method: [], member: [], function: [], variable: [], typedef: [], external: [], file: [], test: [], testFile: []};
28
var len = searchIndex.length;
30
for (var i = 0; i < len; i++) {
31
var pair = searchIndex[i];
32
if (pair[0].indexOf(text) !== -1) {
34
html[kind].push('<li><a href="' + pair[1] + '">' + pair[2] + '</a></li>');
40
var list = html[kind];
41
if (!list.length) continue;
42
innerHTML += '<li class="search-separator">' + kind + '</li>\n' + list.join('\n');
44
result.innerHTML = innerHTML;
45
if (innerHTML) result.style.display = 'block';
50
input.addEventListener('keydown', function(ev){
51
if (ev.keyCode === 40) {
53
var current = result.children[selectedIndex];
54
var selected = result.children[selectedIndex + 1];
55
if (selected && selected.classList.contains('search-separator')) {
56
var selected = result.children[selectedIndex + 2];
61
if (current) current.classList.remove('selected');
63
selected.classList.add('selected');
65
} else if (ev.keyCode === 38) {
67
var current = result.children[selectedIndex];
68
var selected = result.children[selectedIndex - 1];
69
if (selected && selected.classList.contains('search-separator')) {
70
var selected = result.children[selectedIndex - 2];
75
if (current) current.classList.remove('selected');
77
selected.classList.add('selected');
79
} else if (ev.keyCode === 13) {
81
var current = result.children[selectedIndex];
83
var link = current.querySelector('a');
84
if (link) location.href = link.href;
94
result.addEventListener('mousemove', function(ev){
95
var current = result.children[selectedIndex];
96
if (current) current.classList.remove('selected');
100
if (li.nodeName === 'LI') break;
101
li = li.parentElement;
105
selectedIndex = Array.prototype.indexOf.call(result.children, li);
106
li.classList.add('selected');
111
document.body.addEventListener('click', function(ev){
113
result.style.display = 'none';
114
result.innerHTML = '';