From 999827b3ecdce3661c05187e8bd1f0a4b557871b Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Tue, 21 Apr 2026 15:49:51 +0200 Subject: [PATCH 1/6] in mobile replacing lvplan weekview with listview --- public/js/apps/Dashboard/Fhc.js | 9 ++--- public/js/components/Calendar/LvPlan.js | 36 ++++++++++++++----- public/js/components/Calendar/Mode/List.js | 2 +- .../Cis/LvPlan/Lehrveranstaltung.js | 13 +++++-- public/js/components/Cis/LvPlan/LvPlan.js | 7 ++-- public/js/components/Cis/LvPlan/Personal.js | 13 +++++-- .../js/components/Cis/Mylv/RoomInformation.js | 7 ++-- 7 files changed, 64 insertions(+), 23 deletions(-) diff --git a/public/js/apps/Dashboard/Fhc.js b/public/js/apps/Dashboard/Fhc.js index 140c76402..97d3a37c8 100644 --- a/public/js/apps/Dashboard/Fhc.js +++ b/public/js/apps/Dashboard/Fhc.js @@ -11,7 +11,7 @@ import Raumsuche from "../../components/Cis/Raumsuche/Raumsuche.js"; import CmsNews from "../../components/Cis/Cms/News.js"; import CmsContent from "../../components/Cis/Cms/Content.js"; import Info from "../../components/Cis/Mylv/Semester/Studiengang/Lv/Info.js"; -import RoomInformation, {DEFAULT_MODE_RAUMINFO} from "../../components/Cis/Mylv/RoomInformation.js"; +import RoomInformation, {DEFAULT_MODE_RAUMINFO_DESKTOP, DEFAULT_MODE_RAUMINFO_MOBILE} from "../../components/Cis/Mylv/RoomInformation.js"; import AbgabetoolStudent from "../../components/Cis/Abgabetool/AbgabetoolStudent.js"; import AbgabetoolMitarbeiter from "../../components/Cis/Abgabetool/AbgabetoolMitarbeiter.js"; import AbgabetoolAssistenz from "../../components/Cis/Abgabetool/AbgabetoolAssistenz.js"; @@ -23,6 +23,7 @@ import ApiRouteInfo from '../../api/factory/routeinfo.js'; import {capitalize} from "../../helpers/StringHelpers.js"; const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router; +const isMobile = window.matchMedia("(max-width: 767px)").matches; const router = VueRouter.createRouter({ history: VueRouter.createWebHistory(`/${ciPath}`), @@ -85,7 +86,7 @@ const router = VueRouter.createRouter({ name: "RoomInformation", params: { // in this case always populate other params since they are not optional ort_kurzbz: to.params.ort_kurzbz, - mode: DEFAULT_MODE_RAUMINFO, + mode: isMobile ? DEFAULT_MODE_RAUMINFO_MOBILE : DEFAULT_MODE_RAUMINFO_DESKTOP, focus_date: new Date().toISOString().split("T")[0] }, }; @@ -102,7 +103,7 @@ const router = VueRouter.createRouter({ const mode = route.params.mode && validModes.includes(route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase()) ? route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase() - : DEFAULT_MODE_RAUMINFO; + : (isMobile ? DEFAULT_MODE_RAUMINFO_MOBILE : DEFAULT_MODE_RAUMINFO_DESKTOP); // default to today date if not provided const d = new Date(route.params.focus_date) @@ -124,7 +125,7 @@ const router = VueRouter.createRouter({ next({ name: "RoomInformation", params: { - mode: to.params.mode || DEFAULT_MODE_RAUMINFO, + mode: to.params.mode || (isMobile ? DEFAULT_MODE_RAUMINFO_MOBILE : DEFAULT_MODE_RAUMINFO_DESKTOP), focus_date: to.params.focus_date || new Date().toISOString().split("T")[0], ort_kurzbz: route.params.ort_kurzbz } diff --git a/public/js/components/Calendar/LvPlan.js b/public/js/components/Calendar/LvPlan.js index e0e918f01..d03e06171 100644 --- a/public/js/components/Calendar/LvPlan.js +++ b/public/js/components/Calendar/LvPlan.js @@ -7,6 +7,7 @@ import { useEventLoader } from '../../composables/EventLoader.js'; import ModeDay from './Mode/Day.js'; import ModeWeek from './Mode/Week.js'; import ModeMonth from './Mode/Month.js'; +import ModeList from './Mode/List.js'; export default { name: "CalendarLvPlan", @@ -14,7 +15,8 @@ export default { FhcCalendar }, inject: [ - "renderers" + "renderers", + "isMobile", ], props: { timezone: { @@ -27,7 +29,7 @@ export default { }, mode: { type: String, - default: 'Week' + default: 'Day' }, getPromiseFunc: { type: Function, @@ -41,11 +43,6 @@ export default { ], data() { return { - modes: { - day: Vue.markRaw(ModeDay), - week: Vue.markRaw(ModeWeek), - month: Vue.markRaw(ModeMonth) - }, modeOptions: { day: { emptyMessage: Vue.computed(() => this.$p.t('lehre/noLvFound')), @@ -53,6 +50,9 @@ export default { }, week: { collapseEmptyDays: false + }, + list: { + length: 7 } }, teachingunits: null @@ -77,7 +77,20 @@ export default { label: now.startOf('minute').toISOTime({ suppressSeconds: true, includeOffset: false }) } ]; - } + }, + modes() { + let modes = { + day: Vue.markRaw(ModeDay), + month: Vue.markRaw(ModeMonth) + }; + if (this.isMobile) { + modes.list = Vue.markRaw(ModeList); + } else { + modes.week = Vue.markRaw(ModeWeek); + } + + return modes; + }, }, methods: { eventStyle(event) { @@ -136,6 +149,13 @@ export default { > - ` -} + `, +}; From e89ab9b92f7e8a728e05fa422287facec00c5c89 Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Thu, 23 Apr 2026 13:57:27 +0200 Subject: [PATCH 6/6] minor naming change --- public/js/components/Calendar/Base/Grid/Line.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/components/Calendar/Base/Grid/Line.js b/public/js/components/Calendar/Base/Grid/Line.js index 6519e63d9..64a71c5f0 100644 --- a/public/js/components/Calendar/Base/Grid/Line.js +++ b/public/js/components/Calendar/Base/Grid/Line.js @@ -52,14 +52,14 @@ export default { if (this.shouldCompactEvents && this.compactibleEventTypes?.length) { formattedEvents = - this.compactEventsForMobileView(formattedEvents, this.compactibleEventTypes); + this.compactEvents(formattedEvents, this.compactibleEventTypes); } return formattedEvents; }, }, methods: { - compactEventsForMobileView(events, compactibleEventTypes) { + compactEvents(events, compactibleEventTypes) { let formattedEvents = events .filter( (event) =>