Skip to content

Commit 2e9cc39

Browse files
authored
Merge pull request #13 from qgis/use_qgis_org_footer
Use the same footer as QGIS.org
2 parents 591ef77 + eba1e0a commit 2e9cc39

File tree

5 files changed

+409
-34
lines changed

5 files changed

+409
-34
lines changed

.github/workflows/playwright-e2e.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
- name: ⚡️ Run Playwright tests
4848
working-directory: playwright/ci-test
4949
run: npx playwright test
50-
- uses: actions/upload-artifact@v3
50+
- uses: actions/upload-artifact@v4
5151
if: always()
5252
with:
5353
name: playwright-report

config.toml

+169
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,175 @@ sectionPagesMenu = 'main'
177177
name = "Tickets"
178178
url = "/tickets/"
179179
weight = 60
180+
181+
182+
[[menu.qgis_org]]
183+
name = "Project"
184+
url = "https://qgis.org/project/overview"
185+
weight = 10
186+
#pre = "<i class='fa-solid fa-clipboard-question mr-1'></i>"
187+
188+
[[menu.qgis_org]]
189+
parent = "Project"
190+
name = "Overview"
191+
url = "https://qgis.org/project/overview/"
192+
weight = 10
193+
194+
[[menu.qgis_org]]
195+
parent = "Project"
196+
name = "Case studies"
197+
url = "https://qgis.org/project/case-studies/"
198+
weight = 20
199+
200+
[[menu.qgis_org]]
201+
parent = "Project"
202+
name = "Plugins"
203+
url = "https://plugins.qgis.org"
204+
weight = 30
205+
206+
[[menu.qgis_org]]
207+
parent = "Project"
208+
name = "Visual Changelogs"
209+
url = "https://qgis.org/project/visual-changelogs"
210+
weight = 40
211+
212+
213+
[[menu.qgis_org]]
214+
name = "Community"
215+
url = "https://qgis.org/community/involve"
216+
weight = 20
217+
218+
[[menu.qgis_org]]
219+
parent = "Community"
220+
name = "Get involved"
221+
url = "https://qgis.org/community/involve"
222+
weight = 10
223+
224+
[[menu.qgis_org]]
225+
parent = "Community"
226+
name = "Certification Programme"
227+
url = "https://qgis.org/community/certification"
228+
weight = 20
229+
230+
[[menu.qgis_org]]
231+
parent = "Community"
232+
name = "QGIS Foundation"
233+
url = "https://qgis.org/community/foundation"
234+
weight = 30
235+
236+
[[menu.qgis_org]]
237+
parent = "Community"
238+
name = "Project Organisation"
239+
url = "https://qgis.org/community/organisation"
240+
weight = 80
241+
242+
243+
[[menu.qgis_org]]
244+
parent = "Community"
245+
name = "Local User Groups"
246+
url = "https://qgis.org/community/groups"
247+
weight = 110
248+
249+
250+
[[menu.qgis_org]]
251+
parent = "Community"
252+
name = "Members Blogs"
253+
url = "https://plugins.qgis.org/planet/"
254+
weight = 280
255+
256+
[[menu.qgis_org]]
257+
name = "Resources"
258+
url = "https://qgis.org/resources/hub"
259+
weight = 40 # Sets the menu order
260+
#pre = "<i class='fa-solid fa-handshake-angle mr-1'></i>"
261+
262+
[[menu.qgis_org]]
263+
parent = "Resources"
264+
name = "Documentation"
265+
url = "https://qgis.org/resources/hub"
266+
weight = 5 # Sets the menu order
267+
#pre = "<i class='fa-solid fa-handshake-angle mr-1'></i>"
268+
269+
# Submenus are done this way: parent -> identifier
270+
[[menu.qgis_org]]
271+
parent = "Resources"
272+
name = "Installation guide"
273+
url = "https://qgis.org/resources/installation-guide/"
274+
weight = 10
275+
276+
[[menu.qgis_org]]
277+
parent = "Resources"
278+
name = "Testing"
279+
url = "https://qgis.org/resources/testing/"
280+
weight = 30
281+
282+
[[menu.qgis_org]]
283+
parent = "Resources"
284+
name = "Roadmap"
285+
url = "https://qgis.org/resources/roadmap/"
286+
weight = 40
287+
288+
[[menu.qgis_org]]
289+
parent = "Resources"
290+
name = "Reports"
291+
url = "https://qgis.org/resources/reports/"
292+
weight = 50
293+
294+
295+
[[menu.qgis_org]]
296+
parent = "Resources"
297+
name = "Books"
298+
url = "https://qgis.org/resources/books/"
299+
weight = 90
300+
301+
[[menu.qgis_org]]
302+
parent = "Resources"
303+
name = "Contact and Support"
304+
url = "https://qgis.org/resources/support/"
305+
weight = 100
306+
307+
[[menu.qgis_org]]
308+
parent = "Resources"
309+
name = "QGIS Metrics"
310+
url = "https://analytics.qgis.org"
311+
weight = 180
312+
313+
[[menu.qgis_org]]
314+
parent = "Resources"
315+
name = "Plugins Metrics"
316+
url = "https://plugins.qgis.org/metabase/public/dashboard/7ecd345f-7321-423d-9844-71e526a454a9"
317+
weight = 190
318+
319+
[[menu.qgis_org]]
320+
parent = "Resources"
321+
name = "Blog"
322+
url = "https://blog.qgis.org/"
323+
weight = 200
324+
325+
[[menu.qgis_org]]
326+
name = "Funding"
327+
url = "https://qgis.org/funding/donate"
328+
#pre = "<i class='fa-solid fa-circle-down mr-1'></i>"
329+
weight = 50 # Sets the menu order
330+
331+
[[menu.qgis_org]]
332+
parent = "Funding"
333+
name = "Donate"
334+
url = "https://qgis.org/funding/donate"
335+
#pre = "<i class='fa-solid fa-circle-down mr-1'></i>"
336+
weight = 30 # Sets the menu order
337+
338+
[[menu.qgis_org]]
339+
parent = "Funding"
340+
name = "Membership"
341+
url = "https://qgis.org/funding/membership"
342+
weight = 230
343+
344+
[[menu.qgis_org]]
345+
parent = "Membership"
346+
name = "Members"
347+
url = "https://qgis.org/funding/membership/members"
348+
weight = 240
180349

181350
[outputs]
182351
home = ["HTML", "RSS", "JSON"]

playwright/ci-test/tests/01-home-page.spec.ts

+33
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,39 @@ test.describe("Home page", () => {
7070

7171
test("Footer", async ({ footer }) => {
7272
await expect(footer.banner).toBeVisible();
73+
await expect(footer.projectList).toBeVisible();
74+
await expect(footer.communityList).toBeVisible();
75+
await expect(footer.resourcesList.first()).toBeVisible();
76+
await expect(footer.fundingList).toBeVisible();
77+
await expect(footer.downloadLink).toBeVisible();
78+
await expect(footer.overviewLink).toBeVisible();
79+
await expect(footer.caseStudiesLink).toBeVisible();
80+
await expect(footer.pluginsLink).toBeVisible();
81+
await expect(footer.visualChangelogsLink).toBeVisible();
82+
await expect(footer.getInvolvedLink).toBeVisible();
83+
await expect(footer.becomeCertifiedMemberLink).toBeVisible();
84+
await expect(footer.qgisFoundationLink).toBeVisible();
85+
await expect(footer.projectOrganisationLink).toBeVisible();
86+
await expect(footer.localUserGroupsLink).toBeVisible();
87+
await expect(footer.membersBlogsList).toBeVisible();
88+
await expect(footer.documentationLink).toBeVisible();
89+
await expect(footer.installationGuideLink).toBeVisible();
90+
await expect(footer.archiveLink).toBeVisible();
91+
await expect(footer.roadmapLink).toBeVisible();
92+
await expect(footer.reportsLink).toBeVisible();
93+
await expect(footer.booksLink).toBeVisible();
94+
await expect(footer.supportLink).toBeVisible();
95+
await expect(footer.qgisDashboardLink).toBeVisible();
96+
await expect(footer.pluginsDashboardLink).toBeVisible();
97+
await expect(footer.blogLink).toBeVisible();
98+
await expect(footer.donateLink).toBeVisible();
99+
await expect(footer.membershipList).toBeVisible();
100+
await expect(footer.diversityStatementLink).toBeVisible();
101+
await expect(footer.codeOfConductLink).toBeVisible();
102+
await expect(footer.environmentalPolicyLink).toBeVisible();
103+
await expect(footer.licenseLink).toBeVisible();
104+
await expect(footer.visualStyleGuideLink).toBeVisible();
105+
await expect(footer.goodiesLink).toBeVisible();
73106
await expect(footer.logoImage).toBeVisible();
74107
await expect(footer.facebookLink).toBeVisible();
75108
await expect(footer.youtubeLink).toBeVisible();

playwright/ci-test/tests/fixtures/footer.ts

+107-9
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,39 @@ import type { Page, Locator } from "@playwright/test";
33
export class Footer {
44
public readonly banner: Locator;
55
private readonly liElement: Locator;
6-
public readonly conferenceLink: Locator;
7-
public readonly aboutLink: Locator;
8-
public readonly attendingLink: Locator;
6+
public readonly projectList: Locator;
7+
public readonly communityList: Locator;
8+
public readonly resourcesList: Locator;
99
public readonly fundingList: Locator;
10+
public readonly downloadLink: Locator;
11+
public readonly overviewLink: Locator;
12+
public readonly caseStudiesLink: Locator;
13+
public readonly pluginsLink: Locator;
14+
public readonly visualChangelogsLink: Locator;
15+
public readonly getInvolvedLink: Locator;
16+
public readonly becomeCertifiedMemberLink: Locator;
17+
public readonly qgisFoundationLink: Locator;
18+
public readonly projectOrganisationLink: Locator;
19+
public readonly localUserGroupsLink: Locator;
20+
public readonly membersBlogsList: Locator;
21+
public readonly documentationLink: Locator;
22+
public readonly installationGuideLink: Locator;
23+
public readonly archiveLink: Locator;
24+
public readonly roadmapLink: Locator;
25+
public readonly reportsLink: Locator;
26+
public readonly booksLink: Locator;
27+
public readonly supportLink: Locator;
28+
public readonly qgisDashboardLink: Locator;
29+
public readonly pluginsDashboardLink: Locator;
30+
public readonly blogLink: Locator;
31+
public readonly donateLink: Locator;
32+
public readonly membershipList: Locator;
33+
public readonly diversityStatementLink: Locator;
34+
public readonly codeOfConductLink: Locator;
35+
public readonly environmentalPolicyLink: Locator;
36+
public readonly licenseLink: Locator;
37+
public readonly visualStyleGuideLink: Locator;
38+
public readonly goodiesLink: Locator;
1039
public readonly logoImage: Locator;
1140
public readonly facebookLink: Locator;
1241
public readonly youtubeLink: Locator;
@@ -17,12 +46,81 @@ export class Footer {
1746
constructor(public readonly page: Page) {
1847
this.banner = this.page.getByRole("contentinfo");
1948
this.liElement = this.page.locator("li");
20-
this.conferenceLink = this.liElement
21-
.filter({ hasText: "Conference" })
22-
.first();
23-
this.aboutLink = this.liElement.filter({ hasText: "About" });
24-
this.attendingLink = this.liElement.filter({ hasText: "Attending" });
25-
49+
this.projectList = this.liElement.filter({ hasText: "Project"}).first();
50+
this.communityList = this.liElement.filter({ hasText: "Community" });
51+
this.resourcesList = this.liElement.filter({ hasText: "Resources" });
52+
this.fundingList = this.liElement.filter({ hasText: "Funding" });
53+
this.downloadLink = this.banner
54+
.locator("div")
55+
.filter({ hasText: "Download" })
56+
.nth(2);
57+
this.overviewLink = this.banner.getByRole("link", { name: "Overview" });
58+
this.caseStudiesLink = this.banner.getByRole("link", {
59+
name: "Case studies",
60+
});
61+
this.pluginsLink = this.banner.getByRole("link", { name: "Plugins", exact: true });
62+
this.visualChangelogsLink = this.banner.getByRole("link", {
63+
name: "Visual Changelogs",
64+
});
65+
this.getInvolvedLink = this.banner.getByRole("link", {
66+
name: "Get involved",
67+
});
68+
this.becomeCertifiedMemberLink = this.page.getByRole("link", {
69+
name: "Certification Programme",
70+
exact: true,
71+
}).first();
72+
this.qgisFoundationLink = this.banner.getByRole("link", {
73+
name: "QGIS Foundation",
74+
});
75+
this.projectOrganisationLink = this.banner.getByRole("link", {
76+
name: "Project Organisation",
77+
});
78+
this.localUserGroupsLink = this.banner.getByRole("link", {
79+
name: "Local User Groups",
80+
});
81+
this.membersBlogsList = this.liElement.filter({
82+
hasText: "Members Blogs",
83+
});
84+
this.documentationLink = this.page.getByRole("link", {
85+
name: "Documentation",
86+
exact: true,
87+
}).first();
88+
this.installationGuideLink = this.liElement.filter({
89+
hasText: "Installation guide",
90+
});
91+
this.roadmapLink = this.banner.getByRole("link", { name: "Roadmap" });
92+
this.reportsLink = this.banner.getByRole("link", { name: "Reports" });
93+
this.booksLink = this.banner.getByRole("link", { name: "Books" });
94+
this.supportLink = this.banner.getByRole("link", { name: "Support" });
95+
this.qgisDashboardLink = this.banner.getByRole("link", {
96+
name: "QGIS Metrics",
97+
exact: true,
98+
});
99+
this.pluginsDashboardLink = this.banner.getByRole("link", {
100+
name: "Plugins Metrics",
101+
exact: true,
102+
});
103+
this.blogLink = this.banner.getByRole("link", {
104+
name: "Blog",
105+
exact: true,
106+
});
107+
this.donateLink = this.banner.getByRole("link", { name: "Donate" });
108+
this.membershipList = this.liElement.filter({ hasText: "Membership" });
109+
this.diversityStatementLink = this.page.getByRole("link", {
110+
name: "Diversity statement",
111+
});
112+
this.codeOfConductLink = this.page.getByRole("link", {
113+
name: "Code of conduct",
114+
});
115+
this.environmentalPolicyLink = this.page.getByRole("link", {
116+
name: "Environmental policy",
117+
});
118+
this.licenseLink = this.page.getByRole("link", { name: "License" });
119+
this.visualStyleGuideLink = this.page.getByRole("link", {
120+
name: "Visual Style Guide",
121+
});
122+
this.goodiesLink = this.page.getByRole("link", { name: "Goodies", exact: true });
123+
this.archiveLink = this.page.getByRole("link", { name: "Archive" }).last();
26124
this.logoImage = this.page.getByRole("img", { name: "Logo" });
27125
this.facebookLink = this.page.getByRole("link", { name: "" });
28126
this.youtubeLink = this.page.getByRole("link", { name: "" });

0 commit comments

Comments
 (0)