Remove unused JS
This commit is contained in:
parent
7f24eeae9e
commit
4513881b55
|
|
@ -1,2 +0,0 @@
|
|||
import 'alpinejs';
|
||||
import './search';
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
const searchHomeInput = document.querySelector('.js-search-home-input');
|
||||
const searchHomeResultsWrapper = document.querySelector('.js-search-home-results');
|
||||
|
||||
let searchResults;
|
||||
|
||||
const clearChildNodes = (parent) => {
|
||||
while (parent.firstChild) {
|
||||
parent.removeChild(parent.firstChild);
|
||||
}
|
||||
}
|
||||
|
||||
const highlightText = (text, match) => {
|
||||
const index = text.toLowerCase().indexOf(match.toLowerCase());
|
||||
if (index === -1) return text;
|
||||
return text.substring(0, index) + '<span class="u-highlight">' + text.substring(index, index + match.length) + '</span>' + text.substring(index + match.length);
|
||||
}
|
||||
|
||||
if (searchHomeInput) {
|
||||
// Fetch all recipes data when the user is about to search
|
||||
searchHomeInput.addEventListener('focus', () => {
|
||||
if (!searchResults) {
|
||||
fetch('/search.json').then(res => res.json()).then(res => {
|
||||
searchResults = res;
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
searchHomeInput.addEventListener('input', (e) => {
|
||||
const searchInput = e.target.value.toLowerCase();
|
||||
const results = [];
|
||||
|
||||
clearChildNodes(searchHomeResultsWrapper);
|
||||
|
||||
// For lower letter counts, results are unlikely to be relevant. So we don't show anything yet
|
||||
if (searchInput.length < 3) { return };
|
||||
|
||||
searchResults.forEach(recipe => {
|
||||
// We search on both recipe titles and ingredients. This could easily be extended to include the recipe tags, body, etc
|
||||
const matchTitle = recipe.title.toLowerCase().includes(searchInput);
|
||||
const matchIngredients = recipe.ingredients.filter(ingredient => ingredient.toLowerCase().includes(searchInput));
|
||||
|
||||
if (!matchTitle && !matchIngredients.length) { return };
|
||||
|
||||
const match = {...recipe};
|
||||
if (matchTitle) { match.matchTitle = matchTitle };
|
||||
if (matchIngredients.length) { match.matchIngredients = matchIngredients };
|
||||
|
||||
results.push(match)
|
||||
});
|
||||
|
||||
// Now we have the search results, we just need to display them on the page
|
||||
results.forEach(result => {
|
||||
const listItem = document.createElement('li');
|
||||
listItem.classList.add('c-search-block__search-result-title');
|
||||
const link = document.createElement('a');
|
||||
link.innerHTML = highlightText(result.title, searchInput);
|
||||
link.setAttribute('href', result.url);
|
||||
listItem.appendChild(link);
|
||||
|
||||
if (result.matchIngredients) {
|
||||
const paragraph = document.createElement('p');
|
||||
paragraph.classList.add('c-search-block__search-result-ingredients');
|
||||
paragraph.innerHTML = 'Contains : ' + highlightText(result.matchIngredients.join(', '), searchInput);
|
||||
listItem.appendChild(paragraph);
|
||||
}
|
||||
|
||||
searchHomeResultsWrapper.appendChild(listItem);
|
||||
});
|
||||
});
|
||||
}
|
||||
Loading…
Reference in a new issue