Permalink
Cannot retrieve contributors at this time
Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.
Sign up
Find file
Copy path
Fetching contributors…
| define([ | |
| "jQuery", | |
| "lodash", | |
| "lunr", | |
| "utils/storage", | |
| "core/state", | |
| "core/sidebar" | |
| ], function($, _, lunr, storage, state, sidebar) { | |
| var index = null; | |
| // Use a specific idnex | |
| var useIndex = function(data) { | |
| index = lunr.Index.load(data); | |
| }; | |
| // Load complete index | |
| var loadIndex = function() { | |
| $.getJSON(state.basePath+"/search_index.json") | |
| .then(useIndex); | |
| }; | |
| // 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; | |
| var $searchInput = $(".book-search input"); | |
| state.$book.toggleClass("with-search", _state); | |
| // If search bar is open: focus input | |
| if (isSearchOpen()) { | |
| sidebar.toggle(true); | |
| $searchInput.focus(); | |
| } else { | |
| $searchInput.blur(); | |
| $searchInput.val(""); | |
| sidebar.filter(null); | |
| } | |
| }; | |
| // Return true if search bar is open | |
| var isSearchOpen = function() { | |
| return state.$book.hasClass("with-search"); | |
| }; | |
| var init = function() { | |
| loadIndex(); | |
| // Toggle search | |
| $(document).on("click", ".book-header .toggle-search", function(e) { | |
| e.preventDefault(); | |
| toggleSearch(); | |
| }); | |
| // Type in search bar | |
| $(document).on("keyup", ".book-search input", function(e) { | |
| var key = (e.keyCode ? e.keyCode : e.which); | |
| var q = $(this).val(); | |
| if (key == 27) { | |
| e.preventDefault(); | |
| toggleSearch(false); | |
| return; | |
| } | |
| if (q.length == 0) { | |
| sidebar.filter(null); | |
| storage.remove("keyword"); | |
| } else { | |
| var results = search(q); | |
| sidebar.filter( | |
| _.pluck(results, "path") | |
| ); | |
| storage.set("keyword", q); | |
| } | |
| }) | |
| }; | |
| // filter sidebar menu with current search keyword | |
| var recoverSearch = function() { | |
| var keyword = storage.get("keyword", ""); | |
| if(keyword.length > 0) { | |
| if(!isSearchOpen()){ | |
| toggleSearch(); | |
| } | |
| sidebar.filter(_.pluck(search(keyword), "path")); | |
| } | |
| $(".book-search input").val(keyword); | |
| }; | |
| return { | |
| init: init, | |
| search: search, | |
| toggle: toggleSearch, | |
| recover:recoverSearch | |
| }; | |
| }); |