second commit
This commit is contained in:
parent
0d337a818f
commit
bffdcf4bdf
16 changed files with 2366 additions and 4 deletions
95
webshop_app/mvc-emne2/js/controller.js
Normal file
95
webshop_app/mvc-emne2/js/controller.js
Normal file
|
@ -0,0 +1,95 @@
|
|||
// Laster og viser alle produkter - brukes ved app-initialisering og navigasjon
|
||||
// Henter data fra model og sender til view for rendering
|
||||
function loadProducts() {
|
||||
const products = getAllProducts();
|
||||
updateView('products', { products });
|
||||
}
|
||||
|
||||
// Viser detaljside for spesifikt produkt basert på ID
|
||||
// Kaller updateView som håndterer både gyldige og ugyldige produkter
|
||||
function showProductDetail(productId) {
|
||||
const product = getProductById(productId);
|
||||
updateView('product-detail', { product });
|
||||
}
|
||||
|
||||
// Hovedfunksjon for å legge produkter i handlekurv
|
||||
// Koordinerer mellom model (dataendring) og view (brukernotifikasjon + UI-oppdatering)
|
||||
function handleAddToCart(productId) {
|
||||
const success = addToCart(productId); // Model-operasjon som returnerer boolean
|
||||
if (success) {
|
||||
// Henter produktnavn for personlig notifikasjon
|
||||
const product = getProductById(productId);
|
||||
updateView('notification', { message: product.name + ' lagt til i handlekurv!' });
|
||||
// Oppdaterer handlekurvvisning og teller umiddelbart
|
||||
updateCartDisplay();
|
||||
} else {
|
||||
// Viser feilmelding hvis produktet ikke eksisterer
|
||||
updateView('notification', { message: 'Feil ved å legge produktet i handlekurven' });
|
||||
}
|
||||
}
|
||||
|
||||
// Fjerner produkt fra handlekurv med brukerbekreftelse
|
||||
// Kombinerer model-operasjon med brukernotifikasjon
|
||||
function handleRemoveFromCart(productId) {
|
||||
removeFromCart(productId); // Model-operasjon
|
||||
updateView('notification', { message: 'Vare fjernet fra handlekurv' });
|
||||
updateCartDisplay(); // Oppdaterer UI umiddelbart
|
||||
}
|
||||
|
||||
// Endrer antall av et produkt i handlekurv (+1 eller -1)
|
||||
// Inneholder defensiv sjekk selv om UI-logikk ikke burde kalle dette for ikke-eksisterende varer
|
||||
function changeQuantity(productId, change) {
|
||||
const cart = getCart();
|
||||
const item = cart.find(item => item.productId === productId);
|
||||
|
||||
// Sikkerhetsjekk - kun hvis varen faktisk finnes i handlekurven
|
||||
// Forhindrer feil hvis UI og model kommer ut av synk
|
||||
if (item) {
|
||||
const newQuantity = item.quantity + change;
|
||||
updateCartQuantity(productId, newQuantity); // Model håndterer edge cases (quantity <= 0)
|
||||
updateCartDisplay(); // Oppdaterer UI for å reflektere endringer
|
||||
}
|
||||
// Ingen else - ignorerer stille forsøk på å endre ikke-eksisterende varer
|
||||
}
|
||||
|
||||
// Tømmer hele handlekurven med bekreftelsdialog
|
||||
// Forhindrer utilsiktet tap av handlekurvinnhold
|
||||
function handleClearCart() {
|
||||
// Browser-standard confirm() for brukersikkerhet
|
||||
if (confirm('Er du sikker på at du vil tømme handlekurven?')) {
|
||||
clearCart(); // Model-operasjon
|
||||
updateView('notification', { message: 'Handlekurv tømt' });
|
||||
updateCartDisplay(); // Oppdaterer til tom handlekurv
|
||||
}
|
||||
// Ingen else - kansellering ignoreres stille
|
||||
}
|
||||
|
||||
// Navigerer til produktoversikt - brukes fra tilbake-knapp og hovednavigasjon
|
||||
// Laster ferske produktdata og rendrer siden
|
||||
function navigateToProducts() {
|
||||
const products = getAllProducts();
|
||||
updateView('products', { products });
|
||||
}
|
||||
|
||||
// Navigerer til handlekurvside med komplett handlekurvstatus
|
||||
// Samler all nødvendig data fra model i én operasjon
|
||||
function navigateToCart() {
|
||||
const cart = getCart();
|
||||
const total = getCartTotal();
|
||||
const itemCount = getCartItemCount();
|
||||
// Sender all handlekurvdata til view for komplett rendering
|
||||
updateView('cart', { cartItems: cart, total, itemCount });
|
||||
}
|
||||
|
||||
// Oppdaterer handlekurvvisning etter endringer (add, remove, quantity change)
|
||||
// Koordinerer mellom handlekurvside og navigationsteller
|
||||
function updateCartDisplay() {
|
||||
const cart = getCart();
|
||||
const total = getCartTotal();
|
||||
const itemCount = getCartItemCount();
|
||||
|
||||
// Oppdaterer handlekurvside (hvis bruker er på den siden)
|
||||
updateView('cart', { cartItems: cart, total, itemCount });
|
||||
// Oppdaterer også telleren i navigasjonen (synlig på alle sider)
|
||||
updateView('cart-count', { count: itemCount });
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue