/*global jQuery */ /*! * Simple Jekyll Search * Christian Fei - https://github.com/christian-fei/Simple-Jekyll-Search * * */ (function($) { $.fn.jekyllSearch = function(options) { var settings = $.extend({ jsonFile : '/search.json', template : '{title}', searchResults : '.results', searchResultsTitle : '

Search results

', limit : '10', noResults : '

Oh shucks
Nothing found :(

' }, options); var jsonData = [], origThis = this, searchResults = $(settings.searchResults); var matches = []; if(settings.jsonFile.length && searchResults.length){ $.ajax({ type: "GET", url: settings.jsonFile, dataType: 'json', success: function(data, textStatus, jqXHR) { jsonData = data; registerEvent(); }, error: function(x,y,z) { console.log("***ERROR in jekyllSearch.js***"); console.log(x); console.log(y); console.log(z); // x.responseText should have what's wrong } }); } function registerEvent(){ origThis.keyup(function(e){ if(e.which === 13){ if(matches) window.location = matches[0].url; //follow the first link // if(searchResults.children().length) } if($(this).val().length){ writeMatches( performSearch($(this).val()) ); }else{ clearSearchResults(); } }); } function performSearch(str){ matches = []; for (var i = 0; i < jsonData.length; i++) { var obj = jsonData[i]; for (key in obj) { if(obj.hasOwnProperty(key)){ if (obj[key] instanceof Array){ var seen = false; for (var j = 0; j < obj[key].length; j++){ if(obj[key][j].toLowerCase().indexOf(str.toLowerCase()) >= 0){ matches.push(obj); break; } } }else if (obj[key].toLowerCase().indexOf(str.toLowerCase()) >= 0){ matches.push(obj); break; } } } } return matches; } function writeMatches(m){ clearSearchResults(); searchResults.append( $(settings.searchResultsTitle) ); if(m && m.length){ for (var i = 0; i < m.length && i < settings.limit; i++) { var obj = m[i]; output = settings.template; output = output.replace(/\{(.*?)\}/g, function(match, property) { return obj[property]; }); searchResults.append($(output)); } }else{ searchResults.append( settings.noResults ); } } function clearSearchResults(){ searchResults.children().remove(); } } }(jQuery));