Skip to content

Commit

Permalink
Add static footer content pages #167
Browse files Browse the repository at this point in the history
  • Loading branch information
hupf committed Apr 24, 2024
1 parent 5381a3e commit adf0d99
Show file tree
Hide file tree
Showing 13 changed files with 1,037 additions and 321 deletions.
90 changes: 90 additions & 0 deletions cypress/e2e/footer.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
describe("Footer", () => {
beforeEach(() => {
cy.resizeToDesktop();
});

describe("de", () => {
beforeEach(() => {
cy.login({ locale: "de-CH", roles: ["TeacherRole"], permissions: [] });
});

it("renders the footer with links to contact, legal and imprint pages", () => {
cy.visit("/index.html");

cy.get("bkd-footer").within(() => {
cy.get("a").contains("Kontakt");
cy.get("a").contains("Rechtliche Hinweise");
cy.get("a").contains("Impressum");
});
});

it("renders the static contact page", () => {
cy.visit("/index.html");
cy.get("bkd-footer").find("a").contains("Kontakt").click();

cy.get("h1").contains("Kontakt", {});
cy.contains("an die zuständige Stelle in ihrer Schule");
cy.get("iframe").should("not.exist");
});

it("renders the static legal page", () => {
cy.visit("/index.html");
cy.get("bkd-footer").find("a").contains("Rechtliche Hinweise").click();

cy.get("h1").contains("Rechtliche Hinweise", {});
cy.contains("Haftungsausschluss");
cy.get("iframe").should("not.exist");
});

it("renders the static imprint page", () => {
cy.visit("/index.html");
cy.get("bkd-footer").find("a").contains("Impressum").click();

cy.get("h1").contains("Impressum", {});
cy.contains("Inhaltsverantwortung");
cy.get("iframe").should("not.exist");
});
});

describe("fr", () => {
beforeEach(() => {
cy.login({ locale: "fr-CH", roles: ["TeacherRole"], permissions: [] });
});

it("renders the footer with links to contact, legal and imprint pages", () => {
cy.visit("/index.html?locale=fr-CH");
cy.get("bkd-footer").within(() => {
cy.get("a").contains("Contact");
cy.get("a").contains("Mentions légales");
cy.get("a").contains("Impressum");
});
});

it("renders the static contact page", () => {
cy.visit("/index.html?locale=fr-CH");
cy.get("bkd-footer").find("a").contains("Contact").click();

cy.get("h1").contains("Contact", {});
cy.contains("contacter le service compétent de leur établissement");
cy.get("iframe").should("not.exist");
});

it("renders the static legal page", () => {
cy.visit("/index.html?locale=fr-CH");
cy.get("bkd-footer").find("a").contains("Mentions légales").click();

cy.get("h1").contains("Mentions légales", {});
cy.contains("Exclusion de la responsabilité");
cy.get("iframe").should("not.exist");
});

it("renders the static imprint page", () => {
cy.visit("/index.html?locale=fr-CH");
cy.get("bkd-footer").find("a").contains("Impressum").click();

cy.get("h1").contains("Impressum", {});
cy.contains("Responsabilité du contenu");
cy.get("iframe").should("not.exist");
});
});
});
44 changes: 42 additions & 2 deletions public/locales/fr-CH.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,49 @@

export const templates = {
s005058d82b713689: `Notes`,
s05ec46839b2c45c3: `Supprimer la notification`,
s0755fb794c2b9b3d: `Cette application contient des liens hypertextes menant à des offres proposées par des tiers. Vous utilisez ces liens à vos propres risques. Nous ne répondons pas du contenu publié sur ces autres sites Internet. Sont notamment exclus de notre responsabilité la garantie que notre application soit disponible en permanence ainsi que les dommages liés à son utilisation (p. ex. en raison d’une interruption de la connexion ou d’un logiciel malveillant).`,
s0ae8b0f434f47faa: `Les contenus de cette application informatique sont mis à disposition par l’établissement concerné. Bien qu’ils soient régulièrement vérifiés et mis à jour, nous déclinons toute responsabilité, pour autant que la loi le permette, en cas de conséquence indésirable liée à leur utilisation.`,
s1381f1fa0b3ddb62: `En utilisant cette application, vous acceptez le traitement des données citées, dans la mesure de ce qui est nécessaire. Voici des informations détaillées relatives au traitement des données :`,
s17b1ac4c36efd642: `Contact`,
s1a8b197f436e88ab: `Menu paramètres`,
s2ccb1c31fa62fea1: `Absences`,
s2e7964a3ed3ff4b2: `Saisir un remplacement`,
s2f3ed4ae7b042337: `Fournisseur de prestations`,
s2faf4f61874da789: `Rechercher des personnes et des institutions`,
s30329742fbb01b71: `Contrôle des présences`,
s30c3ae3fb64d10bd: `Si vous avez des questions sur la protection des données en lien avec la présente application, vous pouvez vous adresser au service responsable de l’application, dont les coordonnées figurent dans l’impressum.`,
s321998fa37fe89be: `© Direction de l'instruction publique et de la culture`,
s3490946cb9fc3368: `Réseaux sociaux`,
s41d88871e0b18f8b: `Cours et manifestations`,
s41ff2c74cc56bc8f: `En cas de message d’erreur dans Evento Web ou de questions au sujet de cette application, les élèves, les membres du corps enseignant et les collaboratrices et collaborateurs des écoles peuvent contacter le service compétent de leur établissement. L’école indique aux élèves le service concerné. En cas de doute, veuillez contacter le secrétariat de l’école.`,
s44d2798b4a925e79: `Propriété intellectuelle`,
s4c575b80febcc990: `Gérer les remplacements`,
s53f771f096f6dee7: `Adresse IP, données techniques relatives au système d’exploitation et au navigateur web, URL référent, nom d’hôte et heure`,
s6083633db7f4cf90: `La présente application n’utilise pas de cookies.`,
s63e457bc703a3030: `Courriel`,
s64629ecd4900e6de: `Le fournisseur de prestations du canton de Berne qui assure l’exploitation de cette application traite l’adresse IP ou les données techniques des appareils des personnes qui l’utilisent. Le degré de protection des données prévu par la législation que ce fournisseur est tenu de respecter équivaut à celui prévu dans le droit bernois. Avant traitement, l’adresse IP est transmise de manière cryptée et anonymisée.`,
s66a8ea9d4609abf8: `Politique de confidentialité`,
s66fb201578f6f6c2: `Tutoriels vidéo`,
s676022c035fe65f5: `Effectuer un remplacement`,
s67749057edb2586b: `Se déconnecter`,
s6ab9bf010cfc8931: `Enseignement`,
s6d8b7baee47fca15: `Menu`,
s71d64f3daba42f69: `Exploitation et questions techniques`,
s7459bbd6ff0ec70a: `Prestations`,
s751e73928c2bd1b0: `Raison du traitement`,
s784d82bd15c49b4a: `Paramètres`,
s79382e84e0818a6e: `Mon profil`,
s805a26293333f4d7: `Évaluer les absences`,
s8218de939c80532c: `Responsabilité du contenu`,
s84044e9a5f99c170: `Données du journal du serveur web du canton de Berne afin d’identifier et de traiter des problèmes techniques et des attaques.`,
s885970c4ee8d21cc: `Fermer`,
s8bb0b618bf59b96e: `Détails de l'événement`,
s8e7e1013bc071156: `Saisie des notes`,
s918230658d993873: `Navigation mobile`,
s9b0191032da1cf5e: `Traiter les absences`,
sa37b83f4c60e63d3: `Excuser les absences en suspens`,
sa981ad28edcf81e5: `Il se peut que des éléments figurant dans l’application (images, icônes) soient la propriété de tiers. Leur utilisation est donc interdite. Sur demande, le canton de Berne peut cependant autoriser l’utilisation, en dehors du site web, des éléments dont il détient les droits. Veuillez adresser vos demandes à cet effet au service responsable de l’application, dont les coordonnées figurent dans l’impressum.`,
saac6cc64d5c17b4f: `Administration`,
sac1056b6664675ca: `Réserver des salles et des appareils`,
sb5ffc0faf2cf16da: `Formation continue interne`,
Expand All @@ -37,16 +57,36 @@ export const templates = {
sc202079fc13ee45a: `Disciplines actuelles`,
sc217172426ab34d5: `Formation (continue)`,
sc265a7e29e120db0: `Evento`,
sc42d48a091dc3230: `Page d'accueil Evento`,
sc354c34c1a7cbcc4: `Cookies`,
sc42d48a091dc3230: `Page d'accueil Evento`,
sc874744fb4632e62: `Mentions légales`,
sccb118772784d38c: `Bedag Informatique SA
Engehaldenstrasse 12
3012 Berne`,
sccb8c6ab6c0cf3e6: `Terminer le remplacement`,
scde3342a428aaee8: `Hors ligne`,
scfa1631260cdd84a: `Tests et évalution`,
scff9b2b73fc9a17f: `Notifications`,
sd0195378eb1d12a7: `Erreur lors du chargement des notifications`,
sd10fcf5b06af72f6: `Navigation service`,
sd11a46c2e7022f58: `Impressum`,
sda82f4406693e77c: `Tout effacer`,
sd58f707de5fe6c23: `Exclusion de la responsabilité`,
sd79be54b222abcae: `Aucune connexion disponible.`,
sda7b78ee4d822af5: `Traitement des données`,
sda82f4406693e77c: `Tout effacer`,
se33353371b3ee38b: `Données traitées`,
sea31a3191cc166f8: `École compétente, voir Contact`,
seae9439e8d8e58e7: `La présente application renvoie uniquement vers des réseaux sociaux tels que YouTube au moyen de liens et non via l’exécution de programmes (plug-in). Ainsi, aucune donnée personnelle n’est transmise aux réseaux sociaux lorsque vous utilisez l’application.`,
sec148f76974d9b06: `Saisir des détails d'inscription`,
sef3cc5f0adf7abc3: `Application`,
sf49fc5f227269877: `Le service responsable de l’application au sens de la législation sur la protection des données, et notamment du règlement général de l’UE sur la protection des données (RGPD), est :`,
sf4fb738671432c9c: `Direction de l’instruction publique et de la culture du canton de Berne
Office des écoles moyennes et de la formation professionnelle
Unité Applications informatiques
Kasernenstrasse 27
3013 Berne`,
sf6588ea1b5ceacff: `Office des écoles moyennes et de la formation professionnelle
Kasernenstrasse 27
3013 Berne`,
sfb4410b48e95fa73: `Contact`,
};
43 changes: 34 additions & 9 deletions src/components/Content.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { LitElement, css, html } from "lit";
import { customElement, query } from "lit/decorators.js";
import { choose } from "lit/directives/choose.js";
import { keyed } from "lit/directives/keyed.js";
import { when } from "lit/directives/when.js";
import { localized, msg } from "@lit/localize";
Expand Down Expand Up @@ -31,6 +32,8 @@ export class Content extends LitElement {
font-size: 3.375rem;
font-weight: 100;
line-height: 2.25rem;
letter-spacing: 0.01rem;
word-spacing: 0.025rem;
margin: 0 0 calc(3.375rem / 2) 0;
}
Expand Down Expand Up @@ -104,6 +107,33 @@ export class Content extends LitElement {
}
}

private renderAppIframe() {
return html`${keyed(
portalState.app.root,
html`
<iframe
id="app"
title=${portalState.app.key}
src=${`/${portalState.app.root}${portalState.appPath}`}
></iframe>
`,
)}`;
}

private renderFooterContent() {
return html`
${choose(
portalState.navigationItemKey,
[
["contact", () => html`<bkd-contact></bkd-contact>`],
["legal", () => html`<bkd-legal></bkd-legal>`],
["imprint", () => html`<bkd-imprint></bkd-imprint>`],
],
() => html``,
)}
`;
}

render() {
this.renderedOffline = !navigator.onLine;
if (!navigator.onLine) {
Expand All @@ -129,15 +159,10 @@ export class Content extends LitElement {
portalState.app.heading,
() => html`<h1>${portalState.navigationItem.label}</h1>`,
)}
${keyed(
portalState.app.root,
html`
<iframe
id="app"
title=${portalState.app.key}
src=${`/${portalState.app.root}${portalState.appPath}`}
></iframe>
`,
${when(
portalState.app.key === "footer",
() => this.renderFooterContent(),
() => this.renderAppIframe(),
)}
</main>
`;
Expand Down
39 changes: 23 additions & 16 deletions src/components/Footer.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import { LitElement, css, html } from "lit";
import { customElement } from "lit/decorators.js";
import { repeat } from "lit/directives/repeat.js";
import { localized, msg } from "@lit/localize";
import { StateController } from "@lit-app/state";
import { NavigationItem, settings } from "../settings";
import { portalState } from "../state/portal-state";
import { buildUrl } from "../utils/routing";
import { theme } from "../utils/theme";

@customElement("bkd-footer")
Expand Down Expand Up @@ -94,27 +97,31 @@ export class Footer extends LitElement {
new StateController(this, portalState);
}

private renderFooterLink(item: NavigationItem) {
const url = buildUrl(item);
return html`
<a
href=${url}
@click=${(event: MouseEvent) => {
event?.preventDefault();
console.log("navigate", new URL(url));
portalState.navigate(new URL(url));
}}
>${item.label}</a
>
`;
}

render() {
return html`
<footer role="contentinfo">
<div class="copyright">${msg("© Bildungs- und Kulturdirektion")}</div>
<div class="footer-nav">
<a
href=${`https://www.bkd.be.ch/${portalState.locale.slice(
0,
2,
)}/tools/rechtliches.html`}
target="_blank"
>${msg("Rechtliche Hinweise")}</a
>
<a
href=${`https://www.bkd.be.ch/${portalState.locale.slice(
0,
2,
)}/tools/impressum.html`}
target="_blank"
>${msg("Impressum")}</a
>
${repeat(
settings.footer,
(item) => item.key,
this.renderFooterLink.bind(this),
)}
</div>
</footer>
`;
Expand Down
24 changes: 24 additions & 0 deletions src/components/Footer/Contact.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { LitElement, html } from "lit";
import { customElement } from "lit/decorators.js";
import { localized, msg } from "@lit/localize";
import { contentStyles, theme } from "../../utils/theme";

@customElement("bkd-contact")
@localized()
export class Contact extends LitElement {
static styles = [theme, contentStyles];

render() {
return html`<p>
${msg(
"Lernende, Lehrpersonen und Schulmitarbeitende wenden sich bei Fehlermeldungen in Evento Web oder Fragen zu dieser Fachapplikation an die zuständige Stelle in ihrer Schule. Diese wird von der Schule kommuniziert. Im Zweifelsfall kontaktieren Sie bitte das Schulsekretariat.",
)}
</p>`;
}
}

declare global {
interface HTMLElementTagNameMap {
"bkd-contact": Contact;
}
}
57 changes: 57 additions & 0 deletions src/components/Footer/Imprint.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { LitElement, html } from "lit";
import { customElement } from "lit/decorators.js";
import { localized, msg } from "@lit/localize";
import { StateController } from "@lit-app/state";
import { portalState } from "../../state/portal-state";
import { withLineBreaks } from "../../utils/templates";
import { contentStyles, theme } from "../../utils/theme";

@customElement("bkd-imprint")
@localized()
export class Imprint extends LitElement {
static styles = [theme, contentStyles];

constructor() {
super();
new StateController(this, portalState);
}

render() {
return html`
<h2>${msg("Inhaltsverantwortung")}</h2>
<p>${msg("Zuständige Schule, siehe Kontakt")}</p>
<h2>${msg("Fachapplikation")}</h2>
<p>
${withLineBreaks(
msg(`Bildungs- und Kulturdirektion des Kantons Bern
Mittelschul- und Berufsbildungsamt
Fachbereich Informatikanwendungen
Kasernenstrasse 27
3013 Bern`),
)}
</p>
<p><a href="mailto:fbi.mba@be.ch">${msg("E-Mail")}</a></p>
<h2>${msg("Betrieb und Technik")}</h2>
<p>
${withLineBreaks(
msg(
`Bedag Informatik AG
Engehaldenstrasse 12
3012 Bern`,
),
)}
</p>
<p>
<a href="https://www.bedag.ch/" target="_blank">www.bedag.ch</a>
</p>
`;
}
}

declare global {
interface HTMLElementTagNameMap {
"bkd-imprint": Imprint;
}
}
Loading

0 comments on commit adf0d99

Please sign in to comment.