From fb617b594cafe9feef85e2c1d5a4f730dd13f799 Mon Sep 17 00:00:00 2001 From: OfficialBrot <36410565+OfficialFreak@users.noreply.github.com> Date: Mon, 11 Mar 2024 23:25:14 +0100 Subject: [PATCH 01/11] @Belissimo-T take it from here :sweat_smile: --- client/src/App.svelte | 24 ++++++++++++++++++++---- client/src/components/Plan.svelte | 10 +++++++--- client/src/plan.js | 14 ++++++++++++-- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/client/src/App.svelte b/client/src/App.svelte index 0cf5f3fe..7a532101 100644 --- a/client/src/App.svelte +++ b/client/src/App.svelte @@ -14,6 +14,7 @@ import {get_settings, group_rooms, update_colors, navigate_page, init_indexed_db, clear_plan_cache, get_favorites} from "./utils.js"; import {notifications} from './notifications.js'; import {logged_in, title, current_page, settings, active_modal, pwa_prompt, indexed_db, selected_favorite, favorites} from './stores.js' + import {getDateDisabled} from './plan.js'; import SchoolManager from "./components/SchoolManager.svelte"; import Changelog from "./components/Changelog.svelte"; import Select from "./base_components/Select.svelte"; @@ -42,6 +43,7 @@ let selected_revision; let meta; let enabled_dates; + let free_days; let grouped_rooms; let course_lists; let selected_teacher; @@ -75,6 +77,7 @@ selected_revision = ".newest"; meta = {}; enabled_dates = []; + free_days = []; grouped_rooms = []; course_lists = {}; selected_teacher = null; @@ -100,6 +103,7 @@ teacher_dict = meta.teachers; grouped_forms = meta.forms.grouped_forms; enabled_dates = Object.keys(meta.dates); + free_days = meta.meta.free_days; if(!date) { date = meta.date; } @@ -244,8 +248,11 @@ } } - function getDateDisabled(date) { - return !enabled_dates.includes(`${date.getFullYear()}-${pad(date.getMonth()+1)}-${pad(date.getDate())}`); + function customGetDateDisabled(date) { + if(typeof date === "object") { + date = `${date.getFullYear()}-${pad(date.getMonth()+1)}-${pad(date.getDate())}`; + } + return getDateDisabled(enabled_dates, free_days, date); } function logout() { @@ -327,6 +334,15 @@ $: school_num && (api_base = `/api/v69.420/${school_num}`); $: school_num && get_meta(school_num); $: all_revisions = [".newest"].concat((meta?.dates || {})[date] || []); + // If no date selected, default to today + $: !date && (() => { + let tmp_date = new Date(); + date = `${tmp_date.getFullYear()}-${pad(tmp_date.getMonth()+1)}-${pad(tmp_date.getDate())}` + })(); + // If the selected date is disabled, and meta date is not disabled, set to meta date + $: date && customGetDateDisabled(date) && (date !== meta.date) && (() => { + date = meta.date; + })(); //$: school_num && get_preferences(); $: all_rooms && (grouped_rooms = group_rooms(all_rooms)); $: $logged_in && (get_settings(), get_favorites(navigate_favorite)); @@ -417,7 +433,7 @@ {#if $current_page.substring(0, 4) === "plan"} - + {:else} {/if} diff --git a/client/src/components/Plan.svelte b/client/src/components/Plan.svelte index 7669c55c..374b09a3 100644 --- a/client/src/components/Plan.svelte +++ b/client/src/components/Plan.svelte @@ -23,6 +23,7 @@ export let all_rooms; export let selected_revision; export let enabled_dates; + export let free_days; export let available_plan_version; let used_rooms_hidden = true; @@ -32,6 +33,7 @@ let info; let exams; let last_fetch; + let is_default_plan = false; let loading = false; let loading_failed = false; let cache_loading_failed = false; @@ -76,6 +78,7 @@ plan_data = data; info = data.info; last_fetch = data.last_fetch; + is_default_plan = data.is_default_plan; exams = data.exams; week_letter = info.week; } @@ -115,7 +118,7 @@ if (typeof tmp_date === 'undefined') { // Removed due to being more annoying than it bringing value to the UX // notifications.danger("Für dieses Datum existiert kein Vertretungsplan!"); - return; + //return; } date = tmp_date; } @@ -170,7 +173,8 @@ school_num, date, selected_revision, - enabled_dates, + enabled_dates, + free_days, handle_last_updated, handle_loading_state, handle_plan_data, renew_abort_controller ); // Load the new lessons on change to selected plan @@ -209,7 +213,7 @@ {/if}

- Plan für {plan_type_map[plan_type]} {plan_value}{#if plan_type === "teachers"}{#if full_teacher_name !== null}{` (${full_teacher_name})`}{/if}{/if} am {format_date(date)} ({info.week}-Woche) + Plan{#if is_default_plan}vorhersage{/if} für {plan_type_map[plan_type]} {plan_value}{#if plan_type === "teachers"}{#if full_teacher_name !== null}{` (${full_teacher_name})`}{/if}{/if} am {format_date(date)} {#if info.week}({info.week}-Woche){/if}

{/if} {#if loading} diff --git a/client/src/plan.js b/client/src/plan.js index 6b509361..fef4a596 100644 --- a/client/src/plan.js +++ b/client/src/plan.js @@ -39,12 +39,22 @@ export function get_teacher_data(teacher_meta, teacher, school_num) { return [full_teacher_name, teacher_contact_link, teacher_image_path]; } +function isWeekend(date) { + let day = date.getDay(); + return day === 0 || day === 6; +} + +export function getDateDisabled(enabled_dates, free_days, date) { + return !(enabled_dates.includes(date) || (date > enabled_dates[0]) && !free_days.includes(date) && !isWeekend(new Date(date))); +} + export function load_plan( api_base, school_num, date, revision=".newest", - enabled_dates, + enabled_dates, + free_days, last_updated_handler, loading_state_updater, plan_data_handler, @@ -53,7 +63,7 @@ export function load_plan( if (enabled_dates === null || enabled_dates === undefined) { return; } - if (date === null || date === undefined || !enabled_dates.includes(date)) { + if (date === null || date === undefined || getDateDisabled(enabled_dates, free_days, date)) { return; } From b0dd5b204a9576e2496f13624a86de23bada93b8 Mon Sep 17 00:00:00 2001 From: OfficialBrot <36410565+OfficialFreak@users.noreply.github.com> Date: Mon, 11 Mar 2024 23:39:53 +0100 Subject: [PATCH 02/11] added default plan to plan indicator --- client/src/App.svelte | 9 +++++++-- client/src/components/Plan.svelte | 2 +- client/src/plan.js | 4 ++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/client/src/App.svelte b/client/src/App.svelte index 7a532101..93681299 100644 --- a/client/src/App.svelte +++ b/client/src/App.svelte @@ -60,7 +60,8 @@ const available_plan_version_map = { "cached": "Offline Plan", "network_cached": "Aktueller Plan", - "network_uncached": "Online only Plan" + "network_uncached": "Online only Plan", + "default_plan": "Vorhersage" }; let load_favorite = false; @@ -442,7 +443,11 @@ /> {#if available_plan_version}
- check_circle + {#if available_plan_version === "default_plan"} + warning + {:else} + check_circle + {/if} {available_plan_version_map[available_plan_version]}
{/if} diff --git a/client/src/components/Plan.svelte b/client/src/components/Plan.svelte index 374b09a3..b1f36384 100644 --- a/client/src/components/Plan.svelte +++ b/client/src/components/Plan.svelte @@ -196,7 +196,7 @@ $: loading_failed = (cache_loading_failed && network_loading_failed && !loading); // Get plan version string - $: available_plan_version = get_plan_version(data_from_cache, network_loading_failed, caching_successful); + $: available_plan_version = get_plan_version(is_default_plan, data_from_cache, network_loading_failed, caching_successful); // Update location hash $: location.hash = gen_location_hash("plan", school_num, date, plan_type, plan_value); diff --git a/client/src/plan.js b/client/src/plan.js index fef4a596..bfebb923 100644 --- a/client/src/plan.js +++ b/client/src/plan.js @@ -21,8 +21,8 @@ export function sameBlock(a, b) { return a.includes(b[0]) || a.includes(b[1]) } -export function get_plan_version(data_from_cache, network_loading_failed, caching_successful) { - return data_from_cache ? "cached" : !network_loading_failed ? caching_successful ? "network_cached" : "network_uncached" : null; +export function get_plan_version(is_default_plan, data_from_cache, network_loading_failed, caching_successful) { + return is_default_plan ? "default_plan" : data_from_cache ? "cached" : !network_loading_failed ? caching_successful ? "network_cached" : "network_uncached" : null; } export function get_teacher_data(teacher_meta, teacher, school_num) { From febdd5ef24d2523d36307ce045fef177914081cd Mon Sep 17 00:00:00 2001 From: OfficialBrot <36410565+OfficialFreak@users.noreply.github.com> Date: Tue, 12 Mar 2024 11:16:14 +0100 Subject: [PATCH 03/11] implemented change_day + more default_plan indicators + fixes --- client/src/components/LandingPage.svelte | 2 +- client/src/components/Plan.svelte | 53 +++++++++++++++++++----- client/src/plan.js | 4 +- client/src/utils.js | 3 ++ 4 files changed, 48 insertions(+), 14 deletions(-) diff --git a/client/src/components/LandingPage.svelte b/client/src/components/LandingPage.svelte index eb9fba18..54c02e5f 100644 --- a/client/src/components/LandingPage.svelte +++ b/client/src/components/LandingPage.svelte @@ -129,7 +129,7 @@
-

Klassenplan
Wahrer Lehrerplan
Raumplan

+

Klassenplan
Wahrer Lehrerplan
Raumplan
Planvorhersage

diff --git a/client/src/components/Plan.svelte b/client/src/components/Plan.svelte index b1f36384..f427e182 100644 --- a/client/src/components/Plan.svelte +++ b/client/src/components/Plan.svelte @@ -6,7 +6,7 @@ import { swipe } from 'svelte-gestures'; import {indexed_db, settings, title, selected_favorite, favorites} from '../stores.js'; import {arraysEqual, format_date, navigate_page, format_timestamp} from "../utils.js"; - import {sameBlock, get_plan_version, get_teacher_data, load_plan, gen_location_hash, load_lessons, apply_preferences} from "../plan.js"; + import {sameBlock, get_plan_version, get_teacher_data, load_plan, gen_location_hash, load_lessons, apply_preferences, getDateDisabled} from "../plan.js"; import {getLabelOfPeriods} from "../periods_utils.js"; import Dropdown from '../base_components/Dropdown.svelte'; @@ -27,6 +27,7 @@ export let available_plan_version; let used_rooms_hidden = true; + const pad = (n, s = 2) => (`${new Array(s).fill(0)}${n}`).slice(-s); let plan_data = []; let all_lessons = []; let rooms_data = {}; @@ -51,7 +52,9 @@ let preferences_apply = true; let lessons = []; let show_left_key = true; + let left_key_default_plan = false; let show_right_key = true; + let right_key_default_plan = false; let last_updated = {}; let caching_successful; @@ -112,15 +115,35 @@ return controller; } - function change_day(day_amount) { + function get_valid_date(date, direction) { let tmp_date; - tmp_date = enabled_dates[(enabled_dates.indexOf(date)+day_amount)]; - if (typeof tmp_date === 'undefined') { + let date_index = enabled_dates.indexOf(date); + if(date_index !== -1 && enabled_dates.length > date_index+direction) { + tmp_date = enabled_dates[date_index+direction]; + } else { // Removed due to being more annoying than it bringing value to the UX // notifications.danger("Für dieses Datum existiert kein Vertretungsplan!"); - //return; + tmp_date = new Date(date); + tmp_date.setDate(tmp_date.getDate() + direction); + let tmp_str_date = `${tmp_date.getFullYear()}-${pad(tmp_date.getMonth()+1)}-${pad(tmp_date.getDate())}`; + console.log(tmp_str_date); + let tmp_disabled = getDateDisabled(enabled_dates, free_days, tmp_str_date); + while (tmp_disabled) { + tmp_date.setDate(tmp_date.getDate() + direction); + tmp_str_date = `${tmp_date.getFullYear()}-${pad(tmp_date.getMonth()+1)}-${pad(tmp_date.getDate())}`; + console.log(tmp_str_date); + // If Date is before first enabled_date, return + if (tmp_str_date < enabled_dates[0]) {return;} + tmp_disabled = getDateDisabled(enabled_dates, free_days, tmp_str_date); + } + tmp_date = tmp_str_date; } - date = tmp_date; + return tmp_date; + } + + function change_day(direction) { + let tmp_valid_date = get_valid_date(date, direction); + if(tmp_valid_date) {date = tmp_valid_date} } function keydown_handler(event) { @@ -146,8 +169,11 @@ } function update_date_btns() { - show_left_key = enabled_dates.indexOf(date) > 0; - show_right_key = enabled_dates.indexOf(date) < (enabled_dates.length - 1); + let valid_prev_date = get_valid_date(date, -1); + left_key_default_plan = valid_prev_date && enabled_dates.indexOf(valid_prev_date) === -1; + show_left_key = !!valid_prev_date; + right_key_default_plan = enabled_dates.indexOf(date) === -1 || enabled_dates.indexOf(date) === enabled_dates.length - 1; + show_right_key = true; } function handle_last_updated(given_date, renew) { @@ -333,8 +359,8 @@ {/if}
- - + +