savvy-js
Version:
Savvy - Style sheet documentation tool
107 lines (87 loc) • 3.13 kB
JavaScript
(function(){
'use strict';
var defaultMessae = 'Use the search box to look things up or switch to the Browse tab.',
searchInputElement,
searchResultsElement;
function initSearch(){
searchInputElement = $('#savvy-searchInput');
searchResultsElement = $('#savvy-searchResults');
searchResultsElement.html(defaultMessae);
searchInputElement.on('keyup', function(){
search($(this).val());
});
}
function search(searchTerm){
var modules = [],
submodules = [],
classes = [],
html;
if(!searchTerm || searchTerm.length < 1){
searchResultsElement.html(defaultMessae);
return;
}
function renderSearchResults(){
var result = '';
if(modules.length){
result += '<h3>Modules</h3>';
modules.forEach(function(module){
result += '<div>' + app.navigation.getLink(module) + '</div>';
});
}
if(submodules.length){
result += '<h3>Submodules</h3>';
submodules.forEach(function(submodule){
result += '<div>' + app.navigation.getLink(submodule) + '</div>';
});
}
if(classes.length){
result += '<h3>Classes</h3>';
classes.forEach(function(classObject){
result += '<div>' + app.navigation.getLink(classObject) + '</div>';
});
}
if(!result){
result = 'No results';
}
return result;
}
function searchClasses(parent) {
if(parent.classes) {
parent.classes.forEach(function (classObject) {
if (classObject.class.indexOf(searchTerm) >= 0) {
classes.push(classObject);
}
});
}
}
function searchSubmodules(parent){
if( parent.submodules) {
parent.submodules.forEach(function (submodule) {
if (submodule.name.indexOf(searchTerm) >= 0) {
submodules.push(submodule);
}
searchClasses(submodule);
});
}
}
function searchModules(parent){
if(parent.modules) {
parent.modules.forEach(function (module) {
if (module.name.indexOf(searchTerm) >= 0) {
modules.push(module);
}
searchClasses(module);
searchSubmodules(module);
});
}
}
searchClasses(data);
searchModules(data);
html = renderSearchResults();
searchResultsElement.html(html);
}
app.search = {
init : initSearch,
search : search
};
}());