| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- module.exports = {
- isPopulated: false,
- ingredients: [],
- display: function(){
- if(!this.isPopulated){
- this.populateByProperty("category");
- document.getElementById("ingredientSearch").oninput = ()=>{this.search()};
- document.getElementById("ingredientClearButton").onclick = ()=>{this.clearSorting()};
- document.getElementById("ingredientSelect").onchange = ()=>{this.sort()};
- this.isPopulated = true;
- }
- },
- populateByProperty: function(property){
- let categories;
- if(property === "category"){
- categories = merchant.categorizeIngredients();
- }else if(property === "unit"){
- categories = merchant.unitizeIngredients();
- }
-
- let ingredientStrand = document.getElementById("categoryList");
- let categoryTemplate = document.getElementById("categoryDiv").content.children[0];
- let ingredientTemplate = document.getElementById("ingredient").content.children[0];
- this.ingredients = [];
- while(ingredientStrand.children.length > 0){
- ingredientStrand.removeChild(ingredientStrand.firstChild);
- }
- for(let i = 0; i < categories.length; i++){
- let categoryDiv = categoryTemplate.cloneNode(true);
- categoryDiv.children[0].children[0].innerText = categories[i].name;
-
- categoryDiv.children[0].children[1].onclick = ()=>{
- this.toggleCategory(categoryDiv.children[1], categoryDiv.children[0].children[1]);
- };
- categoryDiv.children[1].style.display = "none";
- ingredientStrand.appendChild(categoryDiv);
- for(let j = 0; j < categories[i].ingredients.length; j++){
- let ingredient = categories[i].ingredients[j];
- let ingredientDiv = ingredientTemplate.cloneNode(true);
- ingredientDiv.children[0].innerText = ingredient.ingredient.name;
- ingredientDiv.children[2].innerText = `${ingredient.ingredient.convert(ingredient.quantity).toFixed(2)} ${ingredient.ingredient.unit.toUpperCase()}`;
- ingredientDiv.onclick = ()=>{controller.openSidebar("ingredientDetails", ingredient)};
- ingredientDiv._name = ingredient.ingredient.name.toLowerCase();
- ingredientDiv._unit = ingredient.ingredient.unit.toLowerCase();
- categoryDiv.children[1].appendChild(ingredientDiv);
- this.ingredients.push(ingredientDiv);
- }
- }
- },
- displayIngredientsOnly: function(ingredients){
- let ingredientDiv = document.getElementById("categoryList");
- while(ingredientDiv.children.length > 0){
- ingredientDiv.removeChild(ingredientDiv.firstChild);
- }
- for(let i = 0; i < ingredients.length; i++){
- ingredientDiv.appendChild(ingredients[i]);
- }
- },
- toggleCategory: function(div, button){
- if(div.style.display === "none"){
- button.innerHTML = '<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="18 15 12 9 6 15"></polyline></svg>';
- div.style.display = "flex";
- }else if(div.style.display === "flex"){
- button.innerHTML = '<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>';
- div.style.display = "none";
- }
- },
- search: function(){
- let input = document.getElementById("ingredientSearch").value.toLowerCase();
- document.getElementById("ingredientSelect").selectedIndex = 0;
- if(input === ""){
- this.populateByProperty("category");
- document.getElementById("ingredientClearButton").style.display = "none";
- return;
- }
- let matchingIngredients = [];
- for(let i = 0; i < this.ingredients.length; i++){
- if(this.ingredients[i]._name.includes(input)){
- matchingIngredients.push(this.ingredients[i]);
- }
- }
- document.getElementById("ingredientClearButton").style.display = "inline";
- this.displayIngredientsOnly(matchingIngredients);
- },
- sort: function(){
- let sortType = document.getElementById("ingredientSelect").value;
-
- if(sortType === ""){
- return;
- }
- document.getElementById("ingredientSearch").value = "";
- if(sortType === "category"){
- this.populateByProperty("category");
- return;
- }
- if(sortType === "unit"){
- this.populateByProperty("unit");
- return;
- }
- document.getElementById("ingredientClearButton").style.display = "inline";
- let sortedIngredients = this.ingredients.slice().sort((a, b)=> (a[sortType] > b[sortType]) ? 1 : -1);
- this.displayIngredientsOnly(sortedIngredients);
- },
- clearSorting: function(button){
- document.getElementById("ingredientSearch").value = "";
- document.getElementById("ingredientSelect").selectedIndex = 0;
- document.getElementById("ingredientClearButton").style.display = "none";
- this.populateByProperty("category");
- }
- }
|