Files
Aberwyn/Aberwyn/wwwroot/js/menu.js
Elias Jansson d1e4901eee
All checks were successful
continuous-integration/drone/push Build is passing
Layout ändringar och meal fixar
2025-06-12 13:00:52 +02:00

181 lines
6.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
function setTheme(mode) {
document.documentElement.setAttribute('data-theme', mode);
localStorage.setItem('theme', mode);
}
angular.module('mealMenuApp', ['ngSanitize'])
.controller('MealMenuController', function ($scope, $http, $sce, $timeout) {
console.log("Controller initierad");
const savedView = localStorage.getItem('mealViewMode');
$scope.viewMode = savedView === 'card' || savedView === 'list' ? savedView : 'card';
$scope.tooltip = {};
$scope.menu = {};
const today = new Date();
$scope.selectedWeek = getWeek(today);
$scope.selectedYear = today.getFullYear();
$scope.daysOfWeek = ["Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"];
$scope.loadMenu = function () {
console.log("Hämtar meny för vecka:", $scope.selectedWeek, $scope.selectedYear);
$http.get('/api/mealMenuApi/getWeeklyMenu', {
params: { weekNumber: $scope.selectedWeek, year: $scope.selectedYear }
}).then(res => {
const rawMenu = res.data;
$scope.menu = {};
rawMenu.forEach(item => {
const dayIndex = item.DayOfWeek - 1;
const day = $scope.daysOfWeek[dayIndex];
console.warn("Item:", item);
console.log("day: " + day + "(" + dayIndex + " ) item: " + item.DinnerMealName);
const thumb = item.DinnerMealThumbnail;
$scope.menu[day] = {
breakfastMealId: item.BreakfastMealId,
breakfastMealName: item.BreakfastMealName,
lunchMealId: item.LunchMealId,
lunchMealName: item.LunchMealName,
dinnerMealId: item.DinnerMealId,
dinnerMealName: item.DinnerMealName,
imageUrl: thumb ? `data:image/webp;base64,${thumb}` : '/img/default-thumbnail.webp'
};
});
}).catch(err => console.error("Fel vid hämtning av meny:", err));
$scope.loadSchoolMeals(); // Lägg till här
};
$scope.schoolMeals = [];
$scope.schoolMealsBySchool = [];
$scope.schoolSensors = [
{ name: "William Engelbrektsskolan", entity: "sensor.engelbrektsskolan" },
{ name: "Louise - Nyeds skolan", entity: "sensor.nyedsskola" },
{ name: "Ludwig - Skogsgläntan", entity: "sensor.skogsglantan" }
];
$scope.schoolMealsBySchool = [];
$scope.loadSchoolMeals = function () {
const savedExpanded = JSON.parse(localStorage.getItem("expandedSchools") || "{}");
$scope.schoolMealsBySchool = $scope.schoolSensors.map(sensor => ({
name: sensor.name,
entity: sensor.entity,
days: [],
expanded: savedExpanded[sensor.entity] || false
}));
$scope.schoolMealsBySchool.forEach(school => {
$http.get(`/api/mealmenuapi/skolmat?week=${$scope.selectedWeek}&sensor=${school.entity}`)
.then(res => {
school.days = res.data;
})
.catch(() => {
school.days = [];
});
});
};
$scope.toggleSchoolExpanded = function (school) {
school.expanded = !school.expanded;
const expandedState = {};
$scope.schoolMealsBySchool.forEach(s => {
expandedState[s.entity] = s.expanded;
});
localStorage.setItem("expandedSchools", JSON.stringify(expandedState));
};
$scope.openMeal = function (mealId) {
if (mealId) {
const page = document.querySelector('.meal-menu-page');
page.classList.add('fade-out');
setTimeout(() => {
window.location.href = "/Meal/View/" + mealId;
}, 400); // matchar CSS-transition
}
};
$scope.getDayImage = function (day) {
return $scope.menu[day]?.imageUrl || '/img/default-thumbnail.webp';
};
$scope.getMealIdByDay = function (day) {
const item = $scope.menu[day] || {};
return item.dinnerMealId || item.lunchMealId || item.breakfastMealId || null;
};
$scope.goToPreviousWeek = function () {
if ($scope.selectedWeek === 1) {
$scope.selectedYear--;
$scope.selectedWeek = 52;
} else {
$scope.selectedWeek--;
}
$scope.loadMenu();
};
$scope.goToNextWeek = function () {
if ($scope.selectedWeek === 52) {
$scope.selectedYear++;
$scope.selectedWeek = 1;
} else {
$scope.selectedWeek++;
}
$scope.loadMenu();
};
function getWeek(d) {
d = new Date(d.getFullYear(), d.getMonth(), d.getDate());
const dayNum = d.getDay() || 7;
d.setDate(d.getDate() + 4 - dayNum);
const yearStart = new Date(d.getFullYear(), 0, 1);
return Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
}
$scope.getViewIcon = function () {
return $scope.viewMode === 'list' ? '🗒️' : '▣';
};
$scope.toggleView = function () {
$scope.viewMode = $scope.viewMode === 'list' ? 'card' : 'list';
localStorage.setItem('mealViewMode', $scope.viewMode);
$timeout(() => {
const viewBtn = document.getElementById('toggle-view');
if (viewBtn) viewBtn.textContent = $scope.getViewIcon();
}, 0);
};
console.log("Initierar meny och måltidsladdning...");
$scope.loadMenu();
});
document.addEventListener("DOMContentLoaded", function () {
const themeBtn = document.getElementById('toggle-theme');
const viewBtn = document.getElementById('toggle-view');
if (themeBtn) {
themeBtn.addEventListener('click', () => {
const current = document.documentElement.getAttribute('data-theme');
const newTheme = current === 'dark' ? 'light' : 'dark';
setTheme(newTheme);
themeBtn.textContent = newTheme === 'dark' ? '🌙' : '☀️';
});
}
const saved = localStorage.getItem('theme');
if (saved) {
setTheme(saved);
} else {
const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
setTheme(systemPrefersDark ? 'dark' : 'light');
}
});