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 29, 2024
1 parent 5381a3e commit a77b15a
Show file tree
Hide file tree
Showing 14 changed files with 1,074 additions and 323 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");
});
});
});
4 changes: 2 additions & 2 deletions doc/design.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@

Mobile breakpoints:

- bigger than 1920px: content centered
- bigger than 1920px: layout limited & centered
- smaller than 1200px: hamburger menu
- smaller than 767px: mobile compact

## CI/CD Canton of Bern

- The base layout is implemented according to the CI/CD of the Canton of Bern:<br>https://www.be.ch/cd (see section "Web-Applikationen")
- There is a "Web-Styleguide" with implementations of the relevant components (HTML/CSS):<br>https://www.be.ch/web-styleguide (username "guest", password "kantonbern")
- There is a "Web-Styleguide" with implementations of the relevant components (HTML/CSS):<br>https://www.be.ch/web-styleguide
- Since the _Evento Portal_ only uses a few components, we did not use any CSS framework, but implemented the layout and the components based on the above design system as Web Components with plain CSS.
45 changes: 43 additions & 2 deletions public/locales/fr-CH.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,50 @@

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`,
s269516fd03223694: `https://www.be.ch/omp`,
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 +58,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
38 changes: 22 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,30 @@ 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();
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;
}
}
Loading

0 comments on commit a77b15a

Please sign in to comment.