Skip to content

Commit 49d1fd1

Browse files
committed
chore: merge main
2 parents f7b828e + 12d5069 commit 49d1fd1

File tree

91 files changed

+3598
-2013
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+3598
-2013
lines changed

.github/workflows/cypress.yml

+8-8
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,27 @@ jobs:
55
runs-on: ubuntu-latest
66
steps:
77
- name: Checkout
8-
uses: actions/checkout@v3
8+
uses: actions/checkout@v4
99
# Install NPM dependencies, cache them correctly
1010
# and run all Cypress tests
1111
- name: Cypress run
12-
uses: cypress-io/github-action@v5
12+
uses: cypress-io/github-action@v6
1313
with:
1414
start: yarn start
1515
browser: chrome
1616

1717
cypress-run-firefox:
1818
runs-on: ubuntu-latest
1919
container:
20-
image: cypress/browsers:node16.18.0-chrome107-ff106-edge
20+
image: cypress/browsers:node-20.12.0-chrome-123.0.6312.86-1-ff-124.0.2-edge-123.0.2420.65-1
2121
options: --user 1001
2222
steps:
2323
- name: Checkout
24-
uses: actions/checkout@v3
24+
uses: actions/checkout@v4
2525
# Install NPM dependencies, cache them correctly
2626
# and run all Cypress tests
2727
- name: Cypress run
28-
uses: cypress-io/github-action@v5
28+
uses: cypress-io/github-action@v6
2929
with:
3030
start: yarn start
3131
browser: firefox
@@ -34,14 +34,14 @@ jobs:
3434
cypress-run-edge:
3535
runs-on: ubuntu-latest
3636
container:
37-
image: cypress/browsers:node16.18.0-chrome107-ff106-edge
37+
image: cypress/browsers:node-20.12.0-chrome-123.0.6312.86-1-ff-124.0.2-edge-123.0.2420.65-1
3838
options: --user 1001
3939
steps:
4040
- name: Checkout
41-
uses: actions/checkout@v3
41+
uses: actions/checkout@v4
4242

4343
- name: Cypress run
44-
uses: cypress-io/github-action@v5
44+
uses: cypress-io/github-action@v6
4545
with:
4646
start: yarn start
4747
browser: edge

.github/workflows/images.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
runs-on: ubuntu-latest
1515

1616
steps:
17-
- uses: actions/checkout@v3
17+
- uses: actions/checkout@v4
1818
- uses: actions/setup-node@v3
1919
with:
2020
node-version-file: ".nvmrc"

.github/workflows/test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
runs-on: ubuntu-latest
1515

1616
steps:
17-
- uses: actions/checkout@v3
17+
- uses: actions/checkout@v4
1818
- uses: actions/setup-node@v3
1919
with:
2020
node-version-file: ".nvmrc"

.husky/post-checkout

-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
#!/bin/sh
2-
3-
. "$(dirname "$0")/_/husky.sh"
4-
51
yarn install --frozen-lockfile

.husky/post-merge

-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
#!/bin/sh
2-
3-
. "$(dirname "$0")/_/husky.sh"
4-
51
yarn install --frozen-lockfile

.husky/post-rebase

-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
#!/bin/sh
2-
3-
. "$(dirname "$0")/_/husky.sh"
4-
51
yarn install --frozen-lockfile

.husky/pre-commit

-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
#!/bin/sh
2-
3-
. "$(dirname "$0")/_/husky.sh"
4-
51
CI=true npx lint-staged

.nvmrc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
18
1+
20

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,7 @@ This library only support by default these entities:
3232

3333
If you have to use another one, please add it to [namedCodesToUnicode.js](https://github.com/geops/website/blob/main/lib/namedCodesToUnicode.js).
3434
You can find list of html entities and their unicode values [here](https://dev.w3.org/html5/html-author/charref).
35+
36+
## CMS
37+
38+
Edit website content on https://geops.com/admin

app/de/newsletter/newsletter.js

-19
This file was deleted.

app/de/newsletter/page.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getNewsletterProps } from "../../../lib/getProps";
22
import { generateNewsletterMetadata } from "../../../lib/getMetadata";
3-
import Newsletter from "./newsletter";
3+
import Newsletter from "../../../components/Newsletter";
44

55
export async function generateMetadata() {
66
const md = await generateNewsletterMetadata("de");

components/AboutContent.js

+31-1
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,20 @@ import { useI18n } from "../lib/i18n";
77
import Circle from "./Circle.js";
88
import aboutImage from "../public/images/page/about/geops-about-text1.jpg";
99
import about2Image from "../public/images/page/about/geops-about-text2.jpg";
10+
import bwconImage from "../public/images/partnership/bwcon.svg";
11+
import chOpenImage from "../public/images/partnership/ch-open.png";
12+
import fossgisImage from "../public/images/partnership/fossgis.svg";
13+
import itsChImage from "../public/images/partnership/its-ch.png";
14+
import sogiImage from "../public/images/partnership/sogi.svg";
15+
import utpImage from "../public/images/partnership/utp.svg";
1016
import Markdown from "markdown-to-jsx";
1117

1218
const TechnologyCarousel = dynamic(() => import("./TechnologyCarousel"), {
1319
ssr: false,
1420
});
1521

1622
export default function AboutContent({ content, technologies }) {
17-
const { t } = useI18n();
23+
const { language, t } = useI18n();
1824
return (
1925
<div className="prose prose-xl mx-auto max-w-screen-lg p-8">
2026
<h2 id="we">{t("about.we")}</h2>
@@ -66,6 +72,30 @@ export default function AboutContent({ content, technologies }) {
6672
<Markdown>{content.sustainability}</Markdown>
6773
</p>
6874
<Image alt={t("about.sustainability")} src={about2Image} />
75+
<h2 id="partnership">{t("about.partnership")}</h2>
76+
<p>
77+
<Markdown>{content.partnership}</Markdown>
78+
</p>
79+
<div className="grid md:grid-cols-6 sm:grid-cols-3 grid-cols-2 items-center gap-x-8">
80+
<a href="https://www.its-ch.ch/" target="partnership">
81+
<Image alt="its ch" src={itsChImage} />
82+
</a>
83+
<a href="https://www.voev.ch/de/" target="partnership">
84+
<Image alt="VÖV UTP" src={utpImage} />
85+
</a>
86+
<a href="https://www.ch-open.ch/" target="partnership">
87+
<Image alt="CH Open" src={chOpenImage} />
88+
</a>
89+
<a href="https://www.fossgis.de/" target="partnership">
90+
<Image alt="FOSSGIS" src={fossgisImage} />
91+
</a>
92+
<a href={`https://www.sogi.ch/${language}`} target="partnership">
93+
<Image alt="SOGI" className="px-6 w-full" src={sogiImage} />
94+
</a>
95+
<a href="https://www.bwcon.de/de/" target="partnership">
96+
<Image alt="bwcon" className="w-full" src={bwconImage} />
97+
</a>
98+
</div>
6999
</div>
70100
);
71101
}

components/Article.js

+19-6
Original file line numberDiff line numberDiff line change
@@ -20,37 +20,50 @@ function PreBlock({ children, ...rest }) {
2020
return <pre {...rest}>{children}</pre>;
2121
}
2222

23-
function ArticleImage({ alt, imageSizes, src }) {
23+
function ArticleImage({ alt, imageSizes, src, title }) {
2424
const { height, width } = imageSizes[src] || {};
2525
if (!height || !width) {
2626
return `Fehler: Bildgröße für ${src} konnte nicht ermittelt werden.`;
2727
}
2828

29-
return <Image alt={alt} src={src} height={height} width={width} />;
29+
return (
30+
<Image alt={alt} src={src} height={height} width={width} title={title} />
31+
);
3032
}
3133

32-
function ResponsiveImage({ alt, desktop, mobile, imageSizes }) {
34+
function ResponsiveImage({ alt, desktop, mobile, imageSizes, title }) {
3335
return (
3436
<>
3537
{desktop && (
3638
<div className="block-desktop">
37-
<ArticleImage alt={alt} imageSizes={imageSizes} src={desktop} />
39+
<ArticleImage
40+
alt={alt}
41+
imageSizes={imageSizes}
42+
src={desktop}
43+
title={title}
44+
/>
3845
</div>
3946
)}
4047
{mobile && (
4148
<div className="block-mobile">
42-
<ArticleImage alt={alt} imageSizes={imageSizes} src={mobile} />
49+
<ArticleImage
50+
alt={alt}
51+
imageSizes={imageSizes}
52+
src={mobile}
53+
title={title}
54+
/>
4355
</div>
4456
)}
4557
</>
4658
);
4759
}
4860

49-
export default function Article({ author, body, created, imageSizes }) {
61+
export default function Article({ author, body, created, imageSizes, title }) {
5062
const { language, t } = useI18n();
5163

5264
return (
5365
<article className="container prose prose-xl mx-auto mb-16 max-w-screen-lg break-words px-8 pt-8 lg:pt-0">
66+
{title && <h1 className="pt-16 text-center">{title}</h1>}
5467
<Markdown
5568
options={{
5669
overrides: {

components/Carousel.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,8 @@ export default function Carousel({ slides = [] }) {
7474
<div
7575
data-cy="pageMainTitle"
7676
className="text-shadow max-w-screen-sm break-words text-4xl font-black leading-normal text-white md:text-5xl md:leading-normal lg:text-right"
77-
>
78-
{slide.title}
79-
</div>
77+
dangerouslySetInnerHTML={{ __html: slide.title }}
78+
/>
8079
{slide.summary && (
8180
<h2 className="text-shadow max-w-screen-sm text-right text-xl text-white">
8281
{slide.summary}

components/Header.js

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export default function Header({ pathByLocale }) {
3838
{ href: "/about#work", title: t("about.work") },
3939
{ href: "/about#tech", title: t("about.tech") },
4040
{ href: "/about#sustainability", title: t("about.sustainability") },
41+
{ href: "/about#partnership", title: t("about.partnership") },
4142
{ href: "/about#team", title: "Team" },
4243
];
4344
const menu = [

components/Newsletter.js

-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import Layout from "./Layout.js";
44
import NewsletterForm from "./NewsletterForm.js";
5-
import PageHeader from "./PageHeader.js";
65

76
export default function Newsletter({ content }) {
87
return (
@@ -12,7 +11,6 @@ export default function Newsletter({ content }) {
1211
path="/newsletter"
1312
translationPath="/newsletter"
1413
>
15-
<PageHeader title="Newsletter" />
1614
<NewsletterForm translations={content} />
1715
</Layout>
1816
);

components/NewsletterForm.js

+21-76
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,31 @@
1-
import { createRef, useState } from "react";
2-
import Button from "./Button.js";
3-
import CheckmarkCircleIcon from "./icons/CheckmarkCircleIcon.js";
4-
import MailCircleIcon from "./icons/MailCircleIcon.js";
5-
import PointerCircleIcon from "./icons/PointerCircleIcon.js";
1+
import { useEffect } from "react";
62
import { useI18n } from "../lib/i18n";
73

8-
const newsletterFormEndpoint =
9-
"https://geops.us4.list-manage.com/subscribe/post-json?u=23161055bb6a407f7e6c00038&id=c9694280f7";
10-
114
export default function NewsletterForm({ translations }) {
12-
const refHeader = createRef();
13-
const [email, setEmail] = useState("");
14-
const [submitted, setSubmitted] = useState(false);
155
const { language } = useI18n();
6+
useEffect(() => {
7+
const script = document.createElement("script");
8+
script.src = "https://js.hsforms.net/forms/v2.js";
9+
document.body.appendChild(script);
1610

17-
const handleSubmit = async (event) => {
18-
event.preventDefault();
19-
refHeader.current.scrollIntoView({ behavior: "smooth" });
20-
await fetch(`${newsletterFormEndpoint}&EMAIL=${email}&c=?`, {
21-
mode: "no-cors",
11+
script.addEventListener("load", () => {
12+
if (window.hbspt) {
13+
window.hbspt.forms.create({
14+
region: "eu1",
15+
portalId: "143209811",
16+
formId:
17+
language === "de"
18+
? "6d86cf62-264e-49bc-a950-f94fa84e2a8e"
19+
: "e9d6a25f-86d6-4a7b-997f-fce926dfbb18",
20+
target: "#hubspotForm",
21+
});
22+
}
2223
});
23-
setSubmitted(true);
24-
};
24+
}, [language]);
2525

2626
return (
27-
<form
28-
className="container mx-auto max-w-screen-lg p-8"
29-
onSubmit={handleSubmit}
30-
>
31-
<h4 className="mb-10 text-center sm:text-left" ref={refHeader}>
32-
{submitted ? translations.submittedTitle : translations.subtitle}
33-
</h4>
34-
{submitted ? (
35-
<div className="flex flex-col items-center sm:flex-row sm:items-start sm:justify-between">
36-
<div className="w-48 text-center">
37-
<MailCircleIcon />
38-
<div className="my-4">{translations.submitted1}</div>
39-
</div>
40-
<div className="w-56 text-center">
41-
<PointerCircleIcon />
42-
<div className="my-4">{translations.submitted2}</div>
43-
</div>
44-
<div className="w-48 text-center">
45-
<CheckmarkCircleIcon />
46-
<div className="my-4">{translations.submitted3}</div>
47-
</div>
48-
</div>
49-
) : (
50-
<>
51-
<label className="block">
52-
{translations.email}*
53-
<input
54-
autoCapitalize="off"
55-
autoCorrect="off"
56-
onChange={(e) => setEmail(e.target.value)}
57-
value={email}
58-
type="email"
59-
className="block h-14 w-full rounded border-2 border-gray-light focus:border-blue focus:ring-0"
60-
required
61-
/>
62-
</label>
63-
<p className="text-gray-light">* {translations.required}</p>
64-
<label className="mt-8 inline-flex">
65-
<input
66-
type="checkbox"
67-
defaultChecked={false}
68-
className="mt-3 text-blue focus:ring-0"
69-
required
70-
/>
71-
<span className="ml-4">{translations.privacy}</span>
72-
</label>
73-
</>
74-
)}
75-
<div className="py-16 text-center">
76-
{submitted ? (
77-
<Button href={language === "de" ? "/" : "/en"}>
78-
{translations.submittedButton}
79-
</Button>
80-
) : (
81-
<Button type="submit">{translations.subscribe}</Button>
82-
)}
83-
</div>
84-
</form>
27+
<div id="hubspotForm" className="container mx-auto max-w-screen-lg p-8">
28+
{translations.loading}
29+
</div>
8530
);
8631
}

components/TechnologyCarousel.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export default function TechnologyCarousel({ slides = [] }) {
3434
<Slider
3535
aria-label="Slider"
3636
className="overflow-hidden"
37-
classNameAnimation="transition ease-in-out duration-1000"
37+
classNameAnimation="transition ease-in-out duration-1000 h-32"
3838
>
3939
{slides.map((technology) => (
4040
<Slide key={technology.image} className="text-center">

0 commit comments

Comments
 (0)