fix:#15 linted format and typ fix

This commit is contained in:
masterelmar
2023-11-20 11:50:46 +01:00
parent e8e7c6149a
commit ab25df81c1
13 changed files with 219 additions and 137 deletions

View File

@@ -1,4 +1,3 @@
<script lang="ts" setup>
import { Ref, computed, ref } from "vue";
import moduleStore from "../store/moduleStore";
@@ -11,14 +10,14 @@ const tableData = computed(() =>
store.getAllModules().map((module) => {
return {
Course: module.course,
Module: module.userDefinedName
Module: module.userDefinedName,
};
}),
);
const previewOn: Ref<boolean> = computed(() => {
return moduleStore().modules.size > 0;
})
});
const columns = ref([
{ field: "Course", header: "Course" },
@@ -39,13 +38,13 @@ window.addEventListener("resize", updateMobile);
id="calendar-dialog"
ref="calendar"
:visible="dialogVisible && previewOn"
@update:visible="dialogVisible = $event"
:maximizable=!mobilePage
:draggable=false
:maximizable="!mobilePage"
:draggable="false"
header="Kalendervorschau"
class="w-full lg:w-30rem lg:h-auto m-0 lg:m-2"
position="bottomright"
>
@update:visible="dialogVisible = $event"
>
Hier könnte Ihre Werbung stehen!
<DataTable
@@ -65,20 +64,19 @@ window.addEventListener("resize", updateMobile);
{{ data[field] }}
</template>
</Column>
</DataTable>
</Dialog>
<SpeedDial
:style="{ position: 'fixed', bottom: '2rem', right: '2rem' }"
v-if="previewOn && !dialogVisible"
>
:style="{ position: 'fixed', bottom: '2rem', right: '2rem' }"
>
<template #button>
<Button
icon="pi pi-calendar"
label="Preview"
class="p-button-rounded p-button-primary"
@click="dialogVisible = true"
/>
/>
</template>
</SpeedDial>
</template>

View File

@@ -1,141 +1,216 @@
<script lang="ts" setup>
</script>
<script lang="ts" setup></script>
<template>
<div class="flex align-items-center justify-content-center flex-column">
<div class="flex align-items-center justify-content-center h-4rem m-2">
<h1>{{$t('faqView.headline')}}</h1>
<h1>{{ $t("faqView.headline") }}</h1>
</div>
<div class="flex flex-column col-7">
<div class="grid my-2">
<div class="col">
{{$t('faqView.firstQuestion')}}
{{ $t("faqView.firstQuestion") }}
</div>
<div class="col">
{{$t('faqView.firstAnswer')}}
{{ $t("faqView.firstAnswer") }}
</div>
</div>
<div class="grid my-2">
<div class="col">{{$t('faqView.secondQuestion')}}</div>
<div class="col">{{ $t("faqView.secondQuestion") }}</div>
<div class="col">
{{$t('faqView.secondAnswer')}}
{{ $t("faqView.secondAnswer") }}
</div>
</div>
<div class="grid my-2">
<div class="col">{{$t('faqView.thirdQuestion')}}</div>
<div class="col">{{ $t("faqView.thirdQuestion") }}</div>
<div class="col">
<Accordion>
<AccordionTab :header="$t('faqView.thirdAnswer.tabTitle')">
<ol>
<li>{{$t('faqView.thirdAnswer.google.first')}}</li>
<li>{{ $t("faqView.thirdAnswer.google.first") }}</li>
<li>
{{$t('faqView.thirdAnswer.google.second')}}
{{ $t("faqView.thirdAnswer.google.second") }}
</li>
<li>
{{$t('faqView.thirdAnswer.google.third')}}
{{ $t("faqView.thirdAnswer.google.third") }}
</li>
</ol>
</AccordionTab>
<AccordionTab :header="$t('faqView.thirdAnswer.microsoft_outlook.title')">
<p>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2010.title')}}</p>
<AccordionTab
:header="$t('faqView.thirdAnswer.microsoft_outlook.title')"
>
<p>
{{
$t("faqView.thirdAnswer.microsoft_outlook.outlook_2010.title")
}}
</p>
<ol>
<li>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2010.first')}}</li>
<li>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2010.second')}}</li>
<li>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2010.third')}}</li>
<li>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2010.fourth')}}</li>
<li>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2010.fifth')}}</li>
<li>
{{
$t(
"faqView.thirdAnswer.microsoft_outlook.outlook_2010.first",
)
}}
</li>
<li>
{{
$t(
"faqView.thirdAnswer.microsoft_outlook.outlook_2010.second",
)
}}
</li>
<li>
{{
$t(
"faqView.thirdAnswer.microsoft_outlook.outlook_2010.third",
)
}}
</li>
<li>
{{
$t(
"faqView.thirdAnswer.microsoft_outlook.outlook_2010.fourth",
)
}}
</li>
<li>
{{
$t(
"faqView.thirdAnswer.microsoft_outlook.outlook_2010.fifth",
)
}}
</li>
</ol>
<p>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2007.title')}}</p>
<p>
{{
$t("faqView.thirdAnswer.microsoft_outlook.outlook_2007.title")
}}
</p>
<ol>
<li>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2007.first')}}</li>
<li>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2007.second')}}</li>
<li>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2007.third')}}</li>
<li>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2007.fourth')}}</li>
<li>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2007.fifth')}}</li>
<li>{{$t('faqView.thirdAnswer.microsoft_outlook.outlook_2007.sixth')}}</li>
<li>
{{
$t(
"faqView.thirdAnswer.microsoft_outlook.outlook_2007.first",
)
}}
</li>
<li>
{{
$t(
"faqView.thirdAnswer.microsoft_outlook.outlook_2007.second",
)
}}
</li>
<li>
{{
$t(
"faqView.thirdAnswer.microsoft_outlook.outlook_2007.third",
)
}}
</li>
<li>
{{
$t(
"faqView.thirdAnswer.microsoft_outlook.outlook_2007.fourth",
)
}}
</li>
<li>
{{
$t(
"faqView.thirdAnswer.microsoft_outlook.outlook_2007.fifth",
)
}}
</li>
<li>
{{
$t(
"faqView.thirdAnswer.microsoft_outlook.outlook_2007.sixth",
)
}}
</li>
</ol>
</AccordionTab>
<AccordionTab :header="$t('faqView.thirdAnswer.apple_osx.title')">
<ol>
<li>{{$t('faqView.thirdAnswer.apple_osx.first')}}</li>
<li>{{$t('faqView.thirdAnswer.apple_osx.second')}}</li>
<li>{{$t('faqView.thirdAnswer.apple_osx.third')}}</li>
<li>{{$t('faqView.thirdAnswer.apple_osx.fourth')}}</li>
<li>{{ $t("faqView.thirdAnswer.apple_osx.first") }}</li>
<li>{{ $t("faqView.thirdAnswer.apple_osx.second") }}</li>
<li>{{ $t("faqView.thirdAnswer.apple_osx.third") }}</li>
<li>{{ $t("faqView.thirdAnswer.apple_osx.fourth") }}</li>
</ol>
</AccordionTab>
<AccordionTab :header="$t('faqView.thirdAnswer.thunderbird.title')">
<ol>
<li>{{ $t('faqView.thirdAnswer.thunderbird.one') }}</li>
<li>{{ $t('faqView.thirdAnswer.thunderbird.two') }}</li>
<li>{{ $t('faqView.thirdAnswer.thunderbird.three') }}</li>
<li>{{ $t('faqView.thirdAnswer.thunderbird.four') }} </li>
<li>{{ $t('faqView.thirdAnswer.thunderbird.five') }}</li>
<li>{{ $t('faqView.thirdAnswer.thunderbird.six') }}</li>
<li>{{ $t('faqView.thirdAnswer.thunderbird.seven') }}</li>
<li>{{ $t("faqView.thirdAnswer.thunderbird.one") }}</li>
<li>{{ $t("faqView.thirdAnswer.thunderbird.two") }}</li>
<li>{{ $t("faqView.thirdAnswer.thunderbird.three") }}</li>
<li>{{ $t("faqView.thirdAnswer.thunderbird.four") }}</li>
<li>{{ $t("faqView.thirdAnswer.thunderbird.five") }}</li>
<li>{{ $t("faqView.thirdAnswer.thunderbird.six") }}</li>
<li>{{ $t("faqView.thirdAnswer.thunderbird.seven") }}</li>
</ol>
</AccordionTab>
<AccordionTab :header="$t('faqView.thirdAnswer.iphone.title')">
<p>{{$t('faqView.thirdAnswer.iphone.description')}}</p>
<p>{{ $t("faqView.thirdAnswer.iphone.description") }}</p>
<ol>
<li>{{$t('faqView.thirdAnswer.iphone.one')}}</li>
<li>{{$t('faqView.thirdAnswer.iphone.two')}}</li>
<li>{{$t('faqView.thirdAnswer.iphone.three')}}</li>
<li>{{$t('faqView.thirdAnswer.iphone.four')}}</li>
<li>{{$t('faqView.thirdAnswer.iphone.five')}}</li>
<li>{{$t('faqView.thirdAnswer.iphone.six')}}</li>
<li>{{$t('faqView.thirdAnswer.iphone.seven')}}</li>
<li>{{$t('faqView.thirdAnswer.iphone.eight')}}</li>
<li>{{$t('faqView.thirdAnswer.iphone.nine')}}</li>
<li>{{ $t("faqView.thirdAnswer.iphone.one") }}</li>
<li>{{ $t("faqView.thirdAnswer.iphone.two") }}</li>
<li>{{ $t("faqView.thirdAnswer.iphone.three") }}</li>
<li>{{ $t("faqView.thirdAnswer.iphone.four") }}</li>
<li>{{ $t("faqView.thirdAnswer.iphone.five") }}</li>
<li>{{ $t("faqView.thirdAnswer.iphone.six") }}</li>
<li>{{ $t("faqView.thirdAnswer.iphone.seven") }}</li>
<li>{{ $t("faqView.thirdAnswer.iphone.eight") }}</li>
<li>{{ $t("faqView.thirdAnswer.iphone.nine") }}</li>
</ol>
</AccordionTab>
<AccordionTab header="Android">
<p>{{$t('faqView.thirdAnswer.android.description')}}</p>
<p>{{ $t("faqView.thirdAnswer.android.description") }}</p>
</AccordionTab>
<AccordionTab header="Windows Phone">
<p>{{$t('faqView.thirdAnswer.windows_phone.description')}}</p>
<p>{{ $t("faqView.thirdAnswer.windows_phone.description") }}</p>
<ol>
<li>{{$t('faqView.thirdAnswer.windows_phone.one')}}</li>
<li>{{$t('faqView.thirdAnswer.windows_phone.two')}}</li>
<li>{{$t('faqView.thirdAnswer.windows_phone.three')}}</li>
<li>{{$t('faqView.thirdAnswer.windows_phone.four')}}</li>
<li>{{$t('faqView.thirdAnswer.windows_phone.five')}}</li>
<li>{{$t('faqView.thirdAnswer.windows_phone.six')}}</li>
<li>{{$t('faqView.thirdAnswer.windows_phone.seven')}}</li>
<li>{{$t('faqView.thirdAnswer.windows_phone.eight')}}</li>
<li>{{ $t("faqView.thirdAnswer.windows_phone.one") }}</li>
<li>{{ $t("faqView.thirdAnswer.windows_phone.two") }}</li>
<li>{{ $t("faqView.thirdAnswer.windows_phone.three") }}</li>
<li>{{ $t("faqView.thirdAnswer.windows_phone.four") }}</li>
<li>{{ $t("faqView.thirdAnswer.windows_phone.five") }}</li>
<li>{{ $t("faqView.thirdAnswer.windows_phone.six") }}</li>
<li>{{ $t("faqView.thirdAnswer.windows_phone.seven") }}</li>
<li>{{ $t("faqView.thirdAnswer.windows_phone.eight") }}</li>
</ol>
</AccordionTab>
</Accordion>
</div>
</div>
<div class="grid my-2">
<div class="col">{{$t('faqView.fourthQuestion')}}</div>
<div class="col">{{$t('faqView.fourthAnswer')}}</div>
<div class="col">{{ $t("faqView.fourthQuestion") }}</div>
<div class="col">{{ $t("faqView.fourthAnswer") }}</div>
</div>
<div class="grid my-2">
<div class="col">{{$t('faqView.fifthQuestion')}}</div>
<div class="col">{{$t('faqView.fifthAnswer')}}</div>
<div class="col">{{ $t("faqView.fifthQuestion") }}</div>
<div class="col">{{ $t("faqView.fifthAnswer") }}</div>
</div>
<div class="grid my-2">
<div class="col my-2">{{$t('faqView.sixthQuestion')}}</div>
<div class="col">{{$t('faqView.sixthAnswer')}}</div>
<div class="col my-2">{{ $t("faqView.sixthQuestion") }}</div>
<div class="col">{{ $t("faqView.sixthAnswer") }}</div>
</div>
<div class="grid my-2">
<div class="col">{{$t('faqView.seventhQuestion')}}</div>
<div class="col">{{$t('faqView.seventhAnswer')}}</div>
<div class="col">{{ $t("faqView.seventhQuestion") }}</div>
<div class="col">{{ $t("faqView.seventhAnswer") }}</div>
</div>
<div class="grid my-2">
<div class="col">{{$t('faqView.eighthQuestion')}}</div>
<div class="col">{{$t('faqView.eighthAnswer')}}</div>
<div class="col">{{ $t("faqView.eighthQuestion") }}</div>
<div class="col">{{ $t("faqView.eighthAnswer") }}</div>
</div>
<p>
{{$t('faqView.notFound')}}<br />
<a href="/imprint">{{$t('faqView.contact')}}</a>
{{ $t("faqView.notFound") }}<br />
<a href="/imprint">{{ $t("faqView.contact") }}</a>
</p>
</div>
</div>

View File

@@ -1,7 +1,7 @@
<script lang="ts" setup>
import {inject} from "vue";
import {Module} from "../model/module.ts";
import {Event} from "../model/event.ts";
import { inject } from "vue";
import { Module } from "../model/module.ts";
import { Event } from "../model/event.ts";
import moment from "moment-timezone";
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -14,10 +14,10 @@ function formatTimestamp(timestampString: string): string {
const timestamp = moment(timestampString);
// Die Zeitzone auf "Europe/Berlin" setzen
const berlinTime = timestamp.tz('Europe/Berlin');
const berlinTime = timestamp.tz("Europe/Berlin");
// Das gewünschte Format für die Ausgabe festlegen
return berlinTime.format('DD.MM.YYYY HH:mm');
return berlinTime.format("DD.MM.YYYY HH:mm");
}
function sortModuleEventsByStart(events: Event[]) {
@@ -43,8 +43,14 @@ function sortModuleEventsByStart(events: Event[]) {
<tr>
<td>
<div class="card">
<DataTable :value="sortModuleEventsByStart(module.events)" table-style="min-width: 50rem">
<Column field="day" :header="$t('moduleInformation.day')"></Column>
<DataTable
:value="sortModuleEventsByStart(module.events)"
table-style="min-width: 50rem"
>
<Column
field="day"
:header="$t('moduleInformation.day')"
></Column>
<Column field="start" :header="$t('moduleInformation.start')">
<template #body="slotProps">
{{ formatTimestamp(slotProps.data.start) }}
@@ -52,12 +58,21 @@ function sortModuleEventsByStart(events: Event[]) {
</Column>
<Column field="end" :header="$t('moduleInformation.end')">
<template #body="slotProps">
{{formatTimestamp( slotProps.data.end) }}
{{ formatTimestamp(slotProps.data.end) }}
</template>
</Column>
<Column field="rooms" :header="$t('moduleInformation.room')"></Column>
<Column field="eventType" :header="$t('moduleInformation.type')"></Column>
<Column field="week" :header="$t('moduleInformation.week')"></Column>
<Column
field="rooms"
:header="$t('moduleInformation.room')"
></Column>
<Column
field="eventType"
:header="$t('moduleInformation.type')"
></Column>
<Column
field="week"
:header="$t('moduleInformation.week')"
></Column>
</DataTable>
</div>
</td>

View File

@@ -19,7 +19,7 @@ const modulesWithSelection: Ref<ModuleWithSelection[]> = ref(
props.modules.map((propModule) => {
return {
module: propModule,
selected: store.hasModule(propModule)
selected: store.hasModule(propModule),
};
}),
);

View File

@@ -68,6 +68,4 @@ const placeholders = computed(() => [
</Dialog>
</template>
<style scoped>
</style>
<style scoped></style>

View File

@@ -125,5 +125,4 @@ async function finalStep() {
</div>
</template>
<style scoped>
</style>
<style scoped></style>

View File

@@ -158,5 +158,4 @@ async function finalStep() {
</div>
</template>
<style scoped>
</style>
<style scoped></style>

View File

@@ -132,13 +132,13 @@
},
"thunderbird": {
"title": "Thunderbird",
"one" : "Erstelle deinen Kalender und kopiere den Link.",
"two" : "Im Menü “Termine und Aufgaben” den Punkt “Kalender” wählen. ",
"three" : "Links siehst du die Kalenderübersicht. In diesem Bereich über die rechte Maustaste klicken und im darauf erscheinenden Kontextmenü “Neuer Kalender” anklicken.",
"four" : "Du hast die Wahl zwischen “Auf meinem Computer” und “Im Netzwerk”. Bitte letzteres wählen und “Fortsetzen” klicken.",
"five" : "Im folgenden Fenster lässt du das “Format” wie es ist (“iCalender”).",
"six" : "Unter \"Adresse\" den kopierten Kalenderlink einfügen.",
"seven" : "Anschließend kannst du noch einen Namen vergeben und weitere Einstellungen nach Belieben vornehmen."
"one": "Erstelle deinen Kalender und kopiere den Link.",
"two": "Im Menü “Termine und Aufgaben” den Punkt “Kalender” wählen. ",
"three": "Links siehst du die Kalenderübersicht. In diesem Bereich über die rechte Maustaste klicken und im darauf erscheinenden Kontextmenü “Neuer Kalender” anklicken.",
"four": "Du hast die Wahl zwischen “Auf meinem Computer” und “Im Netzwerk”. Bitte letzteres wählen und “Fortsetzen” klicken.",
"five": "Im folgenden Fenster lässt du das “Format” wie es ist (“iCalender”).",
"six": "Unter \"Adresse\" den kopierten Kalenderlink einfügen.",
"seven": "Anschließend kannst du noch einen Namen vergeben und weitere Einstellungen nach Belieben vornehmen."
},
"iphone": {
"title": "iPhone",

View File

@@ -13,8 +13,10 @@ const moduleStore = defineStore("moduleStore", {
this.modules.delete(module.uuid);
},
hasModule(module: Module): boolean {
return this.modules.has(module.uuid) &&
(this.modules.get(module.uuid)?.isEqual(module) ?? false);
return (
this.modules.has(module.uuid) &&
(this.modules.get(module.uuid)?.isEqual(module) ?? false)
);
},
removeAllModules() {
this.modules.clear();

View File

@@ -1,18 +1,14 @@
<script lang="ts" setup>
import {defineAsyncComponent, ref, Ref} from "vue";
import {Module} from "../model/module.ts";
import {fetchAllModules} from "../api/fetchCourse.ts";
import { defineAsyncComponent, ref, Ref } from "vue";
import { Module } from "../model/module.ts";
import { fetchAllModules } from "../api/fetchCourse.ts";
import moduleStore from "../store/moduleStore.ts";
import {MultiSelectAllChangeEvent} from "primevue/multiselect";
import { FilterMatchMode } from "primevue/api";
import { useDialog } from "primevue/usedialog";
import router from "../router";
import {fetchModule} from "../api/fetchModule.ts";
import {useDialog} from "primevue/usedialog";
import {useI18n} from "vue-i18n";
import { fetchModule } from "../api/fetchModule.ts";
const dialog = useDialog();
const { t } = useI18n({ useScope: "global" });
const fetchedModules = async () => {
return await fetchAllModules();
@@ -32,7 +28,7 @@ const filters = ref({
prof: {
value: null,
matchMode: FilterMatchMode.CONTAINS,
}
},
});
//const selectedModules: Ref<Module[]> = ref([] as Module[]);
@@ -148,19 +144,15 @@ function itemsLabelWithNumber(selectedModules: Module[]): string {
:show-gridlines="true"
:striped-rows="true"
class="w-10"
>
<Column
selection-mode="multiple"
>
</Column>
>
<Column selection-mode="multiple"> </Column>
<Column
field="course"
header="Course"
:show-clear-button="false"
:show-filter-menu="false"
>
>
<template #filter="{ filterModel, filterCallback }">
<InputText
v-model="filterModel.value"
@@ -175,7 +167,7 @@ function itemsLabelWithNumber(selectedModules: Module[]): string {
header="Name"
:show-clear-button="false"
:show-filter-menu="false"
>
>
<template #filter="{ filterModel, filterCallback }">
<InputText
v-model="filterModel.value"
@@ -190,7 +182,7 @@ function itemsLabelWithNumber(selectedModules: Module[]): string {
header="Professor"
:show-clear-button="false"
:show-filter-menu="false"
>
>
<template #filter="{ filterModel, filterCallback }">
<InputText
v-model="filterModel.value"
@@ -212,14 +204,11 @@ function itemsLabelWithNumber(selectedModules: Module[]): string {
@click.stop="showInfo(slotProps.data)"
></Button>
</template>
</Column>
<template #footer>
<div class="py-2 px-3">
<b>{{ store ? store.countModules() : 0 }}</b>
item{{
(store ? store.countModules() : 0) !== 1 ? "s" : ""
}}
item{{ (store ? store.countModules() : 0) !== 1 ? "s" : "" }}
selected.
</div>
</template>
@@ -274,8 +263,7 @@ function itemsLabelWithNumber(selectedModules: Module[]): string {
</div>
</template>
</MultiSelect>
-->
</div>
--></div>
<div class="flex align-items-center justify-content-center h-4rem m-2">
<Button @click="nextStep()">{{
$t("additionalModules.nextStep")

View File

@@ -12,7 +12,7 @@ const { t } = useI18n({ useScope: "global" });
const toast = useToast();
const token: Ref<string> = ref("");
const modules: Ref<Module[]> = ref(moduleStore().modules);
const modules: Ref<Map<string, Module>> = ref(moduleStore().modules);
function extractToken(token: string): string {
const tokenRegex = /^[a-z0-9]{15}$/;
@@ -50,7 +50,7 @@ function loadCalendar(): void {
data.forEach((module) => {
moduleStore().addModule(module);
});
modules.value = data;
modules.value = moduleStore().modules;
});
router.push("/edit-additional-modules");
@@ -77,12 +77,20 @@ function loadCalendar(): void {
<div
class="flex align-items-center justify-content-center border-round m-2"
>
<InputText v-model="token" type="text" autofocus @keyup.enter="loadCalendar" />
<InputText
v-model="token"
type="text"
autofocus
@keyup.enter="loadCalendar"
/>
</div>
<div
class="flex align-items-center justify-content-center border-round m-2"
>
<Button :label="$t('editCalendarView.loadCalendar')" @click="loadCalendar" />
<Button
:label="$t('editCalendarView.loadCalendar')"
@click="loadCalendar"
/>
</div>
</div>
</template>

View File

@@ -3,7 +3,7 @@
<template>
<div class="flex align-items-center justify-content-center flex-column">
<div class="flex align-items-center justify-content-center h-4rem mt-2">
<h3 class="text-4xl">{{$t("imprint")}}</h3>
<h3 class="text-4xl">{{ $t("imprint") }}</h3>
</div>
<div class="flex flex-column col-7">
<p>nach dem Telemediengesetz (TMG) der Bundesrepublik Deutschland.</p>

View File

@@ -3,7 +3,7 @@
<template>
<div class="flex align-items-center justify-content-center flex-column">
<div class="flex align-items-center justify-content-center h-4rem mt-2">
<h3 class="text-4xl">{{$t("privacy")}}</h3>
<h3 class="text-4xl">{{ $t("privacy") }}</h3>
</div>
<div class="flex flex-column col-7">
<h1>Datenschutzerklärung</h1>