diff --git a/src/frontend/src/components/cards/CardPopup.vue b/src/frontend/src/components/cards/CardPopup.vue index cbda1f8267a49218b47ce53eb479682f9809659a..aaa276fceca493d6fefc1aa325398b314b12c521 100644 --- a/src/frontend/src/components/cards/CardPopup.vue +++ b/src/frontend/src/components/cards/CardPopup.vue @@ -30,6 +30,7 @@ style="max-height: 0px;" /> <div + id="inputs-div" ref="inputs" class="flex flex-col overflow-auto" > @@ -215,10 +216,16 @@ export default { setTitle(title) { this.m_title = title; }, + clearInputs() { + const inputsContainer = this.$el.querySelector("#inputs-div") + const inputs = inputsContainer.querySelectorAll("input"); + inputs.forEach(i => { i.value = ''; }); + }, execOnValidate() { executeAfter( this.validate?.(this), res => { + this.clearInputs(); if (res) this.hide(); } ); diff --git a/src/frontend/src/components/cards/TripDetail.vue b/src/frontend/src/components/cards/TripDetail.vue index cba17af1254969abe682cc1ff000b757b51fe7b4..8f2b6884731ff8498272c91bb4196340a9703d52 100644 --- a/src/frontend/src/components/cards/TripDetail.vue +++ b/src/frontend/src/components/cards/TripDetail.vue @@ -112,7 +112,7 @@ <p class="text-xl text-slate-600 dark:text-slate-300 font-bold mx-2 mb-1 mx-auto text-center"> {{ lang.PRICE }} </p> - <div class="flex flex-col justify-center items-center m-2 h-20 w-20 items-center bg-white dark:bg-slate-700 rounded-md mx-auto"> + <div class="flex flex-col justify-center items-center m-2 p-2 h-20 min-w-20 w-fit items-center bg-white dark:bg-slate-700 rounded-md mx-auto"> <p class="text-slate-500 dark:text-slate-300 text-2xl font-bold"> {{ trip.price + " €" }} </p> diff --git a/src/frontend/src/components/profile/UserGroups.vue b/src/frontend/src/components/profile/UserGroups.vue index cc77606992f73a05f008f3d2698bfd9c05f501e1..ba8ff55206bb2e475f406858cc609807782ec695 100644 --- a/src/frontend/src/components/profile/UserGroups.vue +++ b/src/frontend/src/components/profile/UserGroups.vue @@ -356,7 +356,7 @@ export default { const oldName = this.selectedGroup.name; const newName = ev.target.value.trim(); if (oldName != newName) { - API.execute_logged(API.ROUTE.GROUPS + "/" + this.selectedGroup.id + "/name", API.METHOD.PATCH, User.CurrentUser?.getCredentials(), {groupName: newName}).then(res => { + API.execute_logged(API.ROUTE.GROUPS + "/my/" + this.selectedGroup.id, API.METHOD.PATCH, User.CurrentUser?.getCredentials(), {groupName: newName}).then(res => { this.selectedGroup.name = newName; this.editGroupName = false; }).catch(err => { diff --git a/src/frontend/src/langs/en.js b/src/frontend/src/langs/en.js index f84883641c43d7d924c5beaf5fa927ec138e1de7..c3a7185d157d885bcd5627d9ad7caedfee281739 100644 --- a/src/frontend/src/langs/en.js +++ b/src/frontend/src/langs/en.js @@ -224,7 +224,6 @@ export default { MARKING_TRIP_AS_FINISHED: "Finishing trip", TRIP_MARKED_AS_FINISHED: "Trip finished successfully", - // booking BOOKING_DOESNT_EXIST_ANYMORE: "This booking doesn't exist anymore.", @@ -260,6 +259,7 @@ export default { TRIP_SLOTS: "Number of slots", TRIP_START: "Start", TRIP_END: "End", + TRIP_STEP: "Step", TRIP_INFO: "Additional informations", SAME_DAY: "Same day", CONFIRM_TRIP: "Confirm trip", diff --git a/src/frontend/src/scripts/Logs.js b/src/frontend/src/scripts/Logs.js index a04574c4a93d74ce991f8fd1d2efcb6e0a713121..0a9972d43b024a83a17f1deb1a31ba6a9d8ee677 100644 --- a/src/frontend/src/scripts/Logs.js +++ b/src/frontend/src/scripts/Logs.js @@ -12,7 +12,7 @@ class Log { this.zone = null; this.type = type; this.dom = document.createElement("p"); - this.dom.innerHTML = msg; + this.dom.innerText = msg; applyClasses(this.dom, "text-lg h-fit text-center font-semibold transition-all overflow-hidden " + this.type); this.dom.style.maxHeight = "100px"; } @@ -44,12 +44,12 @@ class Log { if (animate) { this.dom.style.opacity = "0"; setTimeout(() => { - this.dom.innerHTML = msg; + this.dom.innerText = msg; this.dom.style.opacity = "1"; this.resize(); }, 200); } else { - this.dom.innerHTML = msg; + this.dom.innerText = msg; this.resize(); } } diff --git a/src/frontend/src/views/Main.vue b/src/frontend/src/views/Main.vue index b2d0b987f55551d58b0da84985d7f7f77a91f695..76ea051ba32a98317356601bcae7b648352a0521 100644 --- a/src/frontend/src/views/Main.vue +++ b/src/frontend/src/views/Main.vue @@ -1,5 +1,5 @@ <template> - <div class="flex grow flex-col"> + <div class="flex grow flex-col max-w-full"> <topbar /> <div class="flex grow flex-col"> <div class="show-down relative flex w-full min-h-[60vh] bg-teal-500"> @@ -135,7 +135,7 @@ </div> </div> - <div class="flex flex-col grow min-h-[50vh] w-full justify-center items-center md:mt-0 mt-48"> + <div class="flex flex-col grow min-h-[50vh] w-full md:mt-0 mt-48"> <div ref="log-zone" class="flex flex-col w-full justify-center items-center min-h-max h-max transition-all" @@ -171,13 +171,15 @@ </card-border> </div> - <trip-card - v-for="trip in trips" - :key="trip.id" - :trip="trip" - class="mx-auto" - @click="selectTrip(trip.id)" - /> + <div class="flex md:flex-row flex-col grow wrap p-2 justify-center h-fit max-w-full mt-16"> + <trip-card + v-for="trip in trips" + :key="trip.id" + :trip="trip" + class="md:m-8 m-4" + @click="selectTrip(trip.id)" + /> + </div> </div> </div> <card-popup diff --git a/src/frontend/src/views/Recovery.vue b/src/frontend/src/views/Recovery.vue index 913c518a2d05f8591f53ed9e8fc4cbcd7c46b855..064f79075d7cf11df0c0f3422bb3a5af4f131694 100644 --- a/src/frontend/src/views/Recovery.vue +++ b/src/frontend/src/views/Recovery.vue @@ -36,7 +36,7 @@ import API from '../scripts/API'; import Lang from '../scripts/Lang'; const field_checks = [ - {field: "email", check: (value) => value.length > 0, error: lang.EMAIL_SPECIFY} + {field: "email", check: (value) => value.length > 0, error: Lang.CurrentLang.EMAIL_SPECIFY} ]; function onCancel(modal) { diff --git a/src/frontend/src/views/TripsNew.vue b/src/frontend/src/views/TripsNew.vue index 0ab727509ea3e801d08f0023e37af02441b9fbd6..07acfd174c851f40c19bdacf4f709713edf937e7 100644 --- a/src/frontend/src/views/TripsNew.vue +++ b/src/frontend/src/views/TripsNew.vue @@ -437,7 +437,7 @@ export default { this.$el.querySelector("input[name=trip-type]").value = this.selectedTripType; this.$el.querySelector("input[name=trip-slots]").value = trip.maxPassengers; this.$el.querySelector("input[name=trip-price]").value = trip.price; - this.$el.querySelector("textarea[name=trip-infos]").innerHTML = trip.description; + this.$el.querySelector("textarea[name=trip-infos]").innerText = trip.description; this.oldTrip = Object.assign({}, trip); }).catch(err => { console.error(err); @@ -558,7 +558,14 @@ export default { if (!data) return false; let startDate = ""; - const stylize = str => `<span class="text-slate-600 dark:text-slate-200 font-bold">${str}</span>`; + const stylize = str => { + if (!str) return ""; + + const span = document.createElement("span"); + span.classList.add("text-slate-600", "dark:text-slate-200", "font-bold"); + span.innerText = str; + return span.outerHTML; + }; const getDate = date => { if (!date) return undefined; const strDate = new Date(date).toLocaleDateString(); @@ -567,8 +574,13 @@ export default { }; const getTime = date => !date ? undefined: new Date(date).toLocaleTimeString().substring(0, 5); const formatString = (str, ...args) => { + let shouldStylize = true; + if (typeof args[args.length -1] === 'boolean' && args[args.length -1] === false) + shouldStylize = false; return str.replace(/\{(\d+)\}/g, (match, number) => { - return stylize(typeof args[number] != 'undefined' ? args[number] : match); + return shouldStylize + ? stylize(typeof args[number] != 'undefined' ? args[number] : match) + : ( typeof args[number] != 'undefined' ? args[number] : match); }); } @@ -619,7 +631,8 @@ export default { desc += formatString( data.description == ""? Lang.CurrentLang.CONFIRM_TRIP_NO_INFOS+".": Lang.CurrentLang.CONFIRM_TRIP_INFOS, - "\n" + data.description.split("\n").map(l => stylize(l)).join("\n") + "\n" + data.description.split("\n").map(l => stylize(l)).join("\n"), + false ); const lines = desc.split("\n");