Skip to content

Commit

Permalink
Merge pull request #4075 from msrose/docs-search
Browse files Browse the repository at this point in the history
Add filtering to documentation
  • Loading branch information
jashkenas committed Sep 16, 2016
2 parents 96e94b3 + ea34297 commit 09c8d72
Show file tree
Hide file tree
Showing 2 changed files with 299 additions and 211 deletions.
58 changes: 58 additions & 0 deletions docs/search.js
@@ -0,0 +1,58 @@
(function() {
var functions = document.querySelectorAll('[data-name]');
var sections = document.querySelectorAll('.searchable_section');
var searchInput = document.getElementById('function_filter');

function strIn(a, b) {
a = a.toLowerCase();
b = b.toLowerCase();
return b.indexOf(a) >= 0;
}

function doesMatch(element) {
var name = element.getAttribute('data-name');
var aliases = element.getAttribute('data-aliases') || '';
return strIn(searchInput.value, name) || strIn(searchInput.value, aliases);
}

function filterElement(element) {
element.style.display = doesMatch(element) ? '' : 'none';
}

function filterToc() {
_.each(functions, filterElement);

var emptySearch = searchInput.value === '';

// Hide the titles of empty sections
_.each(sections, function(section) {
var sectionFunctions = section.querySelectorAll('[data-name]');
var showSection = emptySearch || _.some(sectionFunctions, doesMatch);
section.style.display = showSection ? '' : 'none';
});
}

function gotoFirst() {
var firstFunction = _.find(functions, doesMatch);
if(firstFunction) {
window.location.hash = firstFunction.lastChild.getAttribute('href');
searchInput.focus();
}
}

searchInput.addEventListener('input', filterToc, false);

// Press "Enter" to jump to the first matching function
searchInput.addEventListener('keypress', function(e) {
if (e.which === 13) {
gotoFirst();
}
});

// Press "/" to search
document.body.addEventListener('keyup', function(event) {
if (191 === event.which) {
searchInput.focus();
}
});
}());

0 comments on commit 09c8d72

Please sign in to comment.