| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- var lunrIndex, pagesIndex;
- function endsWith(str, suffix) {
- return str.indexOf(suffix, str.length - suffix.length) !== -1;
- }
- // Initialize lunrjs using our generated index file
- function initLunr() {
- if (!endsWith(baseurl,"/")){
- baseurl = baseurl+'/'
- };
- // First retrieve the index file
- $.getJSON(baseurl +"index.json")
- .done(function(index) {
- pagesIndex = index;
- // Set up lunrjs by declaring the fields we use
- // Also provide their boost level for the ranking
- lunrIndex = new lunr.Index
- lunrIndex.ref("uri");
- lunrIndex.field('title', {
- boost: 15
- });
- lunrIndex.field('tags', {
- boost: 10
- });
- lunrIndex.field("content", {
- boost: 5
- });
- // Feed lunr with each file and let lunr actually index them
- pagesIndex.forEach(function(page) {
- if (page.tags.indexOf('skipIndexing') == -1) {
- lunrIndex.add(page);
- }
- });
- lunrIndex.pipeline.remove(lunrIndex.stemmer)
- })
- .fail(function(jqxhr, textStatus, error) {
- var err = textStatus + ", " + error;
- console.error("Error getting Hugo index flie:", err);
- });
- }
- /**
- * Trigger a search in lunr and transform the result
- *
- * @param {String} query
- * @return {Array} results
- */
- function search(query) {
- // Find the item in our index corresponding to the lunr one to have more info
- return lunrIndex.search(query).map(function(result) {
- return pagesIndex.filter(function(page) {
- return page.uri === result.ref;
- })[0];
- });
- }
- // Let's get started
- initLunr();
- $( document ).ready(function() {
- var searchList = new autoComplete({
- /* selector for the search box element */
- selector: $("#search-by").get(0),
- /* source is the callback to perform the search */
- source: function(term, response) {
- response(search(term));
- },
- /* renderItem displays individual search results */
- renderItem: function(item, term) {
- var numContextWords = 2;
- var text = item.content.match(
- "(?:\\s?(?:[\\w]+)\\s?){0,"+numContextWords+"}" +
- term+"(?:\\s?(?:[\\w]+)\\s?){0,"+numContextWords+"}");
- item.context = text;
- return '<div class="autocomplete-suggestion" ' +
- 'data-term="' + term + '" ' +
- 'data-title="' + item.title + '" ' +
- 'data-uri="'+ item.uri + '" ' +
- 'data-context="' + item.context + '">' +
- '» ' + item.title +
- '<div class="context">' +
- (item.context || '') +'</div>' +
- '</div>';
- },
- /* onSelect callback fires when a search suggestion is chosen */
- onSelect: function(e, term, item) {
- location.href = item.getAttribute('data-uri');
- }
- });
- });
|