Files
gitbook/theme/javascript/core/search.js
T
2014-04-06 16:17:54 -07:00

83 lines
1.9 KiB
JavaScript

define([
"jQuery",
"lodash",
"lunr",
"core/state",
"core/sidebar"
], function($, _, lunr, state, sidebar) {
var index = null;
var $searchInput = sidebar.$el.find(".book-search input");
// Load complete index
var loadIndex = function() {
return $.getJSON("search_index.json")
.then(function(data) {
index = lunr.Index.load(data);
});
};
// Search for a term
var search = function(q) {
if (!index) return;
var results = _.chain(index.search(q))
.map(function(result) {
var parts = result.ref.split("#")
return {
path: parts[0],
hash: parts[1]
}
})
.value();
return results;
};
// Toggle search bar
var toggleSearch = function(_state) {
if (state != null && isSearchOpen() == _state) return;
sidebar.$el.toggleClass("with-search", _state);
// If search bar is open: focus input
if (isSearchOpen()) {
$searchInput.focus();
} else {
$searchInput.blur();
}
};
// Return true if search bar is open
var isSearchOpen = function() {
return sidebar.$el.hasClass("with-search");
};
var init = function() {
loadIndex();
// Toggle search
state.$book.find(".book-header .toggle-search").click(function(e) {
e.preventDefault();
toggleSearch();
});
$searchInput.keyup(function(e) {
var key = (e.keyCode ? e.keyCode : e.which);
var q = $(this).val();
if (key == 27) {
e.preventDefault();
toggleSearch(false);
return;
}
console.log("search", q);
});
};
return {
init: init,
search: search,
toggle: toggleSearch
};
});