12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- $(function(){
- var $typeahead = $('[data-typeahead]');
- var $form = $typeahead.parents('form');
- var searchURL = $form.attr('action');
- function displayTemplate(result) {
- return result.name;
- }
- function suggestionTemplate(result) {
- var t = '<div class="list-group-item clearfix">';
- t += '<span class="doc-name">' + result.name + '</span>';
- if (result.parent_name) {
- t += '<span class="doc-parent-name label">' + result.parent_name + '</span>';
- }
- t += '</div>';
- return t;
- }
- $typeahead.one('focus', function() {
- $form.addClass('loading');
- $.getJSON(searchURL).then(function(searchData) {
- const searchIndex = lunr(function() {
- this.ref('url');
- this.field('name');
- this.field('abstract');
- for (const [url, doc] of Object.entries(searchData)) {
- this.add({url: url, name: doc.name, abstract: doc.abstract});
- }
- });
- $typeahead.typeahead(
- {
- highlight: true,
- minLength: 3,
- autoselect: true
- },
- {
- limit: 10,
- display: displayTemplate,
- templates: { suggestion: suggestionTemplate },
- source: function(query, sync) {
- const lcSearch = query.toLowerCase();
- const results = searchIndex.query(function(q) {
- q.term(lcSearch, { boost: 100 });
- q.term(lcSearch, {
- boost: 10,
- wildcard: lunr.Query.wildcard.TRAILING
- });
- }).map(function(result) {
- var doc = searchData[result.ref];
- doc.url = result.ref;
- return doc;
- });
- sync(results);
- }
- }
- );
- $form.removeClass('loading');
- $typeahead.trigger('focus');
- });
- });
- var baseURL = searchURL.slice(0, -"search.json".length);
- $typeahead.on('typeahead:select', function(e, result) {
- window.location = baseURL + result.url;
- });
- });
|