Permalink
Browse files

Add filtering to documentation

1 parent 96e94b3 commit ea34297329784909f67c9bd4412952872d08998f @msrose msrose committed Sep 12, 2016
Showing with 299 additions and 211 deletions.
  1. +58 −0 docs/search.js
  2. +241 −211 index.html
View
@@ -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();
+ }
+ });
+}());
Oops, something went wrong.

0 comments on commit ea34297

Please sign in to comment.