Files
goodgarden/src/py/static/js/planten.class.js
2024-04-12 21:23:08 +02:00

115 lines
4.6 KiB
JavaScript

// Definitie van de Plant klasse.
class Plant {
// Constructor om een Plant object te initialiseren met data van een dataObject.
constructor(dataObject) {
// Initialiseren van de eigenschappen van de plant.
this.id = dataObject.id;
this.plantNaam = dataObject.plant_naam; // Naam van de plant.
this.plantensoort = dataObject.plantensoort; // Soort van de plant.
this.plantGeteelt = dataObject.plant_geteelt; // Geteelt status van de plant.
}
}
class PlantGrid {
// Constructor om een PlantGrid object te initialiseren.
constructor() {
this.grid = []; // De datastructuur die het raster van planten bevat.
this.cols = 2; // Aantal kolommen in het raster.
this.rows = 4; // Aantal rijen in het raster (inclusief de rij voor de "Toevoegen" knop).
// Initialiseren van het raster met null waarden.
for (let i = 0; i < this.rows; i++) {
this.grid[i] = new Array(this.cols).fill(null);
}
// Laadt JSON data van de server.
this.loadData();
}
// Methode om data te laden.
loadData() {
fetch('../script/json/plants.json')
.then(response => {
// Controleer of de netwerkrespons ok is.
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json(); // Parse de JSON uit de respons.
})
.then(data => {
// Filter de data op planten die geteeld zijn.
const filteredData = data.filter(plantObject => plantObject.plant_geteelt === 1);
// Vul het raster met plantobjecten.
filteredData.slice(0, 8).forEach((plantObject, index) => {
const plant = new Plant(plantObject); // Maak een nieuw Plant object.
const col = index % this.cols; // Bereken de kolomindex.
const row = Math.floor(index / this.cols); // Bereken de rijindex.
this.grid[row][col] = plant; // Voeg de plant toe aan het raster.
});
// Toon het raster in de HTML tabel met id "planten".
this.displayGrid();
})
.catch(error => console.error('Error loading data:', error)); // Log eventuele fouten.
}
displayGrid() {
const plantenTable = document.getElementById("planten");
let itemCount = 0; // Counter for the number of items in the grid
this.grid.forEach((row, rowIndex) => {
const tr = document.createElement("tr");
row.forEach((plant, colIndex) => {
const td = document.createElement("td");
if (itemCount < 8) {
if (plant) {
// Handle regular plant items
const link = document.createElement("a");
link.href = `planteninfo.html?id=${plant.id}`; // Link naar de planteninfo pagina met plant id als query parameter
const article = document.createElement("article");
article.classList.add("plant-container");
link.appendChild(article); // Voeg het artikel toe aan de link
const img = article.appendChild(document.createElement("img"));
img.src = "../static/images/icon_awesome-apple-alt.png";
const h2 = article.appendChild(document.createElement("h2"));
h2.classList.add("plant-naam");
h2.textContent = plant.plantNaam;
td.appendChild(link); // Voeg de link toe aan de td
itemCount++;
} else if (rowIndex === this.rows - 1 && colIndex === this.cols - 1 && itemCount <= 7) {
// Handle the "Add" button
const article = document.createElement("article");
const img = article.appendChild(document.createElement("img"));
img.src = "../static/images/plus.png";
img.id = "toevoegen";
img.alt = "Add";
article.id = "modalButton";
article.onclick = openModal;
td.appendChild(article);
itemCount++;
}
}
tr.appendChild(td);
});
plantenTable.appendChild(tr);
});
}
}
document.addEventListener("DOMContentLoaded", () => {
const plantGrid = new PlantGrid();
});