| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 | 
							- summaryInclude = 200;
 
- var fuseOptions = {
 
-     shouldSort: true,
 
-     includeMatches: true,
 
-     threshold: 0.0,
 
-     tokenize: true,
 
-     location: 0,
 
-     distance: 100,
 
-     maxPatternLength: 32,
 
-     minMatchCharLength: 3,
 
-     includeScore: true,
 
-     isCaseSensitive: false,
 
-     keys: [{
 
-             name: "title",
 
-             weight: 0.6
 
-         },
 
-         {
 
-             name: "contents",
 
-             weight: 0.3
 
-         },
 
-         {
 
-             name: "tags",
 
-             weight: 0.05
 
-         },
 
-         {
 
-             name: "categories",
 
-             weight: 0.05
 
-         }
 
-     ]
 
- };
 
- var searchQuery = param("s");
 
- if (searchQuery) {
 
-     $("#search-form-wrapper").removeClass("add-margin-top-search-form");
 
-     $("#search-query").val(searchQuery);
 
-     executeSearch(searchQuery);
 
- } else {
 
-     $("#search-form-wrapper").addClass("add-margin-top-search-form");
 
- }
 
- function executeSearch(searchQuery) {
 
-     $("#loading-icon").fadeIn();
 
-     $.getJSON("/index.json?t=" + $("#search-db-version").text(), function (data) {
 
-         var pages = data;
 
-         var fuse = new Fuse(pages, fuseOptions);
 
-         var result = fuse.search(searchQuery);
 
-         $("#loading-icon").hide();
 
-         if (result.length > 0) {
 
-             populateResults(result);
 
-         } else {
 
-             $('#search-results').append("<p>No matches found</p>");
 
-         }
 
-     });
 
- }
 
- function populateResults(result) {
 
-     $.each(result, function (key, value) {
 
-         var contents = value.item.contents;
 
-         var snippet = "";
 
-         var snippetHighlights = [];
 
-         var tags = [];
 
-         if (fuseOptions.tokenize) {
 
-             snippetHighlights.push(searchQuery);
 
-         } else {
 
-             $.each(value.matches, function (matchKey, mvalue) {
 
-                 if (mvalue.key == "tags" || mvalue.key == "categories") {
 
-                     snippetHighlights.push(mvalue.value);
 
-                 } else if (mvalue.key == "contents") {
 
-                     start = mvalue.indices[0][0] - summaryInclude > 0 ? mvalue.indices[0][0] - summaryInclude : 0;
 
-                     end = mvalue.indices[0][1] + summaryInclude < contents.length ? mvalue.indices[0][1] + summaryInclude : contents.length;
 
-                     snippet += contents.substring(start, end);
 
-                     snippetHighlights.push(mvalue.value.substring(mvalue.indices[0][0], mvalue.indices[0][1] - mvalue.indices[0][0] + 1));
 
-                 }
 
-             });
 
-         }
 
-         if (snippet.length < 1) {
 
-             snippet += contents.substring(0, summaryInclude * 2);
 
-         }
 
-         //pull template from hugo templarte definition
 
-         var templateDefinition = $('#search-result-template').html();
 
-         //replace values
 
-         var output = render(templateDefinition, {
 
-             key: key,
 
-             title: value.item.title,
 
-             link: value.item.permalink,
 
-             tags: value.item.tags,
 
-             categories: value.item.categories,
 
-             snippet: snippet,
 
-             score: value.score
 
-         });
 
-         $('#search-results').append(output);
 
-         $.each(snippetHighlights, function (snipkey, snipvalue) {
 
-             $("#summary-" + key).mark(snipvalue);
 
-         });
 
-     });
 
- }
 
- function param(name) {
 
-     return decodeURIComponent((location.search.split(name + '=')[1] || '').split('&')[0]).replace(/\+/g, ' ');
 
- }
 
- function render(templateString, data) {
 
-     var conditionalMatches, conditionalPattern, copy;
 
-     conditionalPattern = /\$\{\s*isset ([a-zA-Z]*) \s*\}(.*)\$\{\s*end\s*}/g;
 
-     //since loop below depends on re.lastInxdex, we use a copy to capture any manipulations whilst inside the loop
 
-     copy = templateString;
 
-     while ((conditionalMatches = conditionalPattern.exec(templateString)) !== null) {
 
-         if (data[conditionalMatches[1]]) {
 
-             //valid key, remove conditionals, leave contents.
 
-             copy = copy.replace(conditionalMatches[0], conditionalMatches[2]);
 
-         } else {
 
-             //not valid, remove entire section
 
-             copy = copy.replace(conditionalMatches[0], '');
 
-         }
 
-     }
 
-     templateString = copy;
 
-     //now any conditionals removed we can do simple substitution
 
-     var key, find, re;
 
-     for (key in data) {
 
-         find = '\\$\\{\\s*' + key + '\\s*\\}';
 
-         re = new RegExp(find, 'g');
 
-         templateString = templateString.replace(re, data[key]);
 
-     }
 
-     return templateString;
 
- }
 
 
  |