UNPKG

@simbachain/libsimba-js

Version:

libsimba-js is a library simplifying the use of SIMBAChain APIs. We aim to abstract away the various blockchain concepts, reducing the necessary time needed to get to working code.

118 lines (103 loc) 3.54 kB
(function(){ var searchIndex = window.esdocSearchIndex; var searchBox = document.querySelector('.search-box'); var input = document.querySelector('.search-input'); var result = document.querySelector('.search-result'); var selectedIndex = -1; var prevText; // active search box and focus when mouse enter on search box. searchBox.addEventListener('mouseenter', function(){ searchBox.classList.add('active'); input.focus(); }); // search with text when key is upped. input.addEventListener('keyup', function(ev){ var text = ev.target.value.toLowerCase(); if (!text) { result.style.display = 'none'; result.innerHTML = ''; return; } if (text === prevText) return; prevText = text; var html = {class: [], method: [], member: [], function: [], variable: [], typedef: [], external: [], file: [], test: [], testFile: []}; var len = searchIndex.length; var kind; for (var i = 0; i < len; i++) { var pair = searchIndex[i]; if (pair[0].indexOf(text) !== -1) { kind = pair[3]; html[kind].push('<li><a href="' + pair[1] + '">' + pair[2] + '</a></li>'); } } var innerHTML = ''; for (kind in html) { var list = html[kind]; if (!list.length) continue; innerHTML += '<li class="search-separator">' + kind + '</li>\n' + list.join('\n'); } result.innerHTML = innerHTML; if (innerHTML) result.style.display = 'block'; selectedIndex = -1; }); // down, up and enter key are pressed, select search result. input.addEventListener('keydown', function(ev){ if (ev.keyCode === 40) { // arrow down var current = result.children[selectedIndex]; var selected = result.children[selectedIndex + 1]; if (selected && selected.classList.contains('search-separator')) { var selected = result.children[selectedIndex + 2]; selectedIndex++; } if (selected) { if (current) current.classList.remove('selected'); selectedIndex++; selected.classList.add('selected'); } } else if (ev.keyCode === 38) { // arrow up var current = result.children[selectedIndex]; var selected = result.children[selectedIndex - 1]; if (selected && selected.classList.contains('search-separator')) { var selected = result.children[selectedIndex - 2]; selectedIndex--; } if (selected) { if (current) current.classList.remove('selected'); selectedIndex--; selected.classList.add('selected'); } } else if (ev.keyCode === 13) { // enter var current = result.children[selectedIndex]; if (current) { var link = current.querySelector('a'); if (link) location.href = link.href; } } else { return; } ev.preventDefault(); }); // select search result when search result is mouse over. result.addEventListener('mousemove', function(ev){ var current = result.children[selectedIndex]; if (current) current.classList.remove('selected'); var li = ev.target; while (li) { if (li.nodeName === 'LI') break; li = li.parentElement; } if (li) { selectedIndex = Array.prototype.indexOf.call(result.children, li); li.classList.add('selected'); } }); // clear search result when body is clicked. document.body.addEventListener('click', function(ev){ selectedIndex = -1; result.style.display = 'none'; result.innerHTML = ''; }); })();