@networkpro/web 1.22.1 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/build-and-publish.yml +4 -4
- package/.github/workflows/lighthouse.yml +1 -1
- package/.github/workflows/meta-check.yml +1 -1
- package/.github/workflows/playwright.yml +1 -1
- package/.github/workflows/publish-test.yml +16 -16
- package/.github/workflows/templates/publish.template.yml +4 -4
- package/.ncurc.cjs +50 -0
- package/.node-version +1 -1
- package/.nvmrc +1 -1
- package/CHANGELOG.md +99 -2
- package/LICENSE.md +1 -1
- package/README.md +5 -5
- package/budget.json +1 -1
- package/cspell.json +1 -0
- package/package.json +19 -16
- package/src/app.html +4 -4
- package/src/lib/README.md +12 -9
- package/src/lib/components/Badges.svelte +2 -2
- package/src/lib/components/LegalNav.svelte +1 -1
- package/src/lib/components/MetaTags.svelte +42 -16
- package/src/lib/components/layout/Footer.svelte +7 -7
- package/src/lib/components/layout/HeaderDefault.svelte +1 -1
- package/src/lib/components/layout/HeaderHome.svelte +1 -1
- package/src/lib/index.js +2 -2
- package/src/lib/meta.js +24 -24
- package/src/lib/pages/AboutContent.svelte +9 -9
- package/src/lib/pages/HomeContent.svelte +1 -1
- package/src/lib/pages/LicenseContent.svelte +6 -7
- package/src/lib/pages/ServicesContent.svelte +1 -2
- package/src/lib/pages/TermsUseContent.svelte +1 -1
- package/src/lib/types/README.md +2 -2
- package/src/routes/+layout.js +2 -3
- package/src/routes/+layout.svelte +11 -3
- package/src/routes/+page.svelte +7 -26
- package/src/routes/about/+page.svelte +10 -21
- package/src/routes/{license → foss}/+page.server.js +2 -2
- package/src/routes/{foss-spotlight → foss}/+page.svelte +11 -22
- package/src/routes/{foss-spotlight → legal}/+page.server.js +2 -2
- package/src/routes/{license → legal}/+page.svelte +11 -22
- package/src/routes/pgp/+page.svelte +10 -21
- package/src/routes/privacy/+page.svelte +10 -21
- package/src/routes/privacy-dashboard/+page.svelte +10 -27
- package/src/routes/services/+page.svelte +3 -16
- package/src/routes/terms-conditions/+page.svelte +10 -21
- package/src/routes/terms-of-use/+page.svelte +10 -21
- package/static/sitemap.xml +13 -13
- package/tests/e2e/mobile.spec.js +36 -17
- package/tests/e2e/shared/helpers.js +39 -1
- package/tests/meta/meta.test.js +1 -1
- package/tests/unit/server/meta.test.js +1 -1
- package/vercel.json +8 -8
- package/vite.config.js +11 -0
- package/vitest.config.client.js +9 -0
- package/CODE_OF_CONDUCT.md +0 -173
- package/CONTRIBUTING.md +0 -214
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* ==========================================================================
|
|
2
|
-
src/routes/
|
|
2
|
+
src/routes/legal/+page.server.js
|
|
3
3
|
|
|
4
4
|
Copyright © 2025 Network Pro Strategies (Network Pro™)
|
|
5
5
|
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
@@ -13,6 +13,6 @@ export const prerender = false;
|
|
|
13
13
|
/** @type {import('./$types').PageServerLoad} */
|
|
14
14
|
export function load() {
|
|
15
15
|
return {
|
|
16
|
-
meta: meta['/
|
|
16
|
+
meta: meta['/legal'] || defaultMeta,
|
|
17
17
|
};
|
|
18
18
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- ==========================================================================
|
|
2
|
-
src/routes/
|
|
2
|
+
src/routes/legal/+page.svelte
|
|
3
3
|
|
|
4
4
|
Copyright © 2025 Network Pro Strategies (Network Pro™)
|
|
5
5
|
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
@@ -7,26 +7,15 @@ This file is part of Network Pro.
|
|
|
7
7
|
========================================================================== -->
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @type {string}
|
|
19
|
-
* Style class for the div element.
|
|
20
|
-
*/
|
|
21
|
-
const spaceStyle = 'spacer';
|
|
22
|
-
|
|
23
|
-
export let data;
|
|
10
|
+
import {
|
|
11
|
+
Badges,
|
|
12
|
+
FullWidthSection,
|
|
13
|
+
LegalNav,
|
|
14
|
+
SocialMedia,
|
|
15
|
+
} from '$lib/components';
|
|
16
|
+
import { LicenseContent } from '$lib/pages';
|
|
24
17
|
</script>
|
|
25
18
|
|
|
26
|
-
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
27
|
-
|
|
28
|
-
<link rel="canonical" href="https://netwk.pro/license" />
|
|
29
|
-
|
|
30
19
|
<section id="license">
|
|
31
20
|
<FullWidthSection containerClass="readable">
|
|
32
21
|
<!-- BEGIN LEGAL, COPYRIGHT, AND LICENSING -->
|
|
@@ -35,7 +24,7 @@ This file is part of Network Pro.
|
|
|
35
24
|
</section>
|
|
36
25
|
<!-- END LEGAL, COPYRIGHT, AND LICENSING -->
|
|
37
26
|
|
|
38
|
-
<div class=
|
|
27
|
+
<div class="spacer"></div>
|
|
39
28
|
|
|
40
29
|
<!-- BEGIN SOCIAL MEDIA -->
|
|
41
30
|
<section id="social-media">
|
|
@@ -45,7 +34,7 @@ This file is part of Network Pro.
|
|
|
45
34
|
|
|
46
35
|
<hr />
|
|
47
36
|
|
|
48
|
-
<div class=
|
|
37
|
+
<div class="spacer"></div>
|
|
49
38
|
|
|
50
39
|
<!-- BEGIN LEGAL -->
|
|
51
40
|
<section id="legal-nav">
|
|
@@ -53,7 +42,7 @@ This file is part of Network Pro.
|
|
|
53
42
|
</section>
|
|
54
43
|
<!-- END LEGAL -->
|
|
55
44
|
|
|
56
|
-
<div class=
|
|
45
|
+
<div class="spacer"></div>
|
|
57
46
|
|
|
58
47
|
<!-- BEGIN BADGES -->
|
|
59
48
|
<section id="badges">
|
|
@@ -7,26 +7,15 @@ This file is part of Network Pro.
|
|
|
7
7
|
========================================================================== -->
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @type {string}
|
|
19
|
-
* Style class for the div element.
|
|
20
|
-
*/
|
|
21
|
-
const spaceStyle = 'spacer';
|
|
22
|
-
|
|
23
|
-
export let data;
|
|
10
|
+
import {
|
|
11
|
+
Badges,
|
|
12
|
+
FullWidthSection,
|
|
13
|
+
LegalNav,
|
|
14
|
+
SocialMedia,
|
|
15
|
+
} from '$lib/components';
|
|
16
|
+
import { PGPContent } from '$lib/pages';
|
|
24
17
|
</script>
|
|
25
18
|
|
|
26
|
-
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
27
|
-
|
|
28
|
-
<link rel="canonical" href="https://netwk.pro/pgp" />
|
|
29
|
-
|
|
30
19
|
<section id="about">
|
|
31
20
|
<FullWidthSection containerClass="readable">
|
|
32
21
|
<!-- BEGIN MAIN CONTENT -->
|
|
@@ -35,7 +24,7 @@ This file is part of Network Pro.
|
|
|
35
24
|
</section>
|
|
36
25
|
<!-- END MAIN CONTENT -->
|
|
37
26
|
|
|
38
|
-
<div class=
|
|
27
|
+
<div class="spacer"></div>
|
|
39
28
|
|
|
40
29
|
<!-- SOCIAL MEDIA -->
|
|
41
30
|
<section id="social-media">
|
|
@@ -44,14 +33,14 @@ This file is part of Network Pro.
|
|
|
44
33
|
|
|
45
34
|
<hr />
|
|
46
35
|
|
|
47
|
-
<div class=
|
|
36
|
+
<div class="spacer"></div>
|
|
48
37
|
|
|
49
38
|
<!-- LEGAL NAVIGATION -->
|
|
50
39
|
<section id="legal-nav">
|
|
51
40
|
<LegalNav />
|
|
52
41
|
</section>
|
|
53
42
|
|
|
54
|
-
<div class=
|
|
43
|
+
<div class="spacer"></div>
|
|
55
44
|
|
|
56
45
|
<!-- BADGES -->
|
|
57
46
|
<section id="badges">
|
|
@@ -7,26 +7,15 @@ This file is part of Network Pro.
|
|
|
7
7
|
========================================================================== -->
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @type {string}
|
|
19
|
-
* Style class for the div element.
|
|
20
|
-
*/
|
|
21
|
-
const spaceStyle = 'spacer';
|
|
22
|
-
|
|
23
|
-
export let data;
|
|
10
|
+
import {
|
|
11
|
+
Badges,
|
|
12
|
+
FullWidthSection,
|
|
13
|
+
LegalNav,
|
|
14
|
+
SocialMedia,
|
|
15
|
+
} from '$lib/components';
|
|
16
|
+
import { PrivacyContent } from '$lib/pages';
|
|
24
17
|
</script>
|
|
25
18
|
|
|
26
|
-
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
27
|
-
|
|
28
|
-
<link rel="canonical" href="https://netwk.pro/privacy" />
|
|
29
|
-
|
|
30
19
|
<section id="privacy">
|
|
31
20
|
<FullWidthSection containerClass="readable">
|
|
32
21
|
<!-- BEGIN PRIVACY POLICY -->
|
|
@@ -35,7 +24,7 @@ This file is part of Network Pro.
|
|
|
35
24
|
</section>
|
|
36
25
|
<!-- END PRIVACY POLICY -->
|
|
37
26
|
|
|
38
|
-
<div class=
|
|
27
|
+
<div class="spacer"></div>
|
|
39
28
|
|
|
40
29
|
<!-- BEGIN SOCIAL MEDIA -->
|
|
41
30
|
<section id="social-media">
|
|
@@ -45,7 +34,7 @@ This file is part of Network Pro.
|
|
|
45
34
|
|
|
46
35
|
<hr />
|
|
47
36
|
|
|
48
|
-
<div class=
|
|
37
|
+
<div class="spacer"></div>
|
|
49
38
|
|
|
50
39
|
<!-- BEGIN LEGAL -->
|
|
51
40
|
<section id="legal-nav">
|
|
@@ -53,7 +42,7 @@ This file is part of Network Pro.
|
|
|
53
42
|
</section>
|
|
54
43
|
<!-- END LEGAL -->
|
|
55
44
|
|
|
56
|
-
<div class=
|
|
45
|
+
<div class="spacer"></div>
|
|
57
46
|
|
|
58
47
|
<!-- BEGIN BADGES -->
|
|
59
48
|
<section id="badges">
|
|
@@ -7,32 +7,15 @@ This file is part of Network Pro.
|
|
|
7
7
|
========================================================================== -->
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @type {string}
|
|
19
|
-
* Style class for the horizontal rule element.
|
|
20
|
-
*/
|
|
21
|
-
const hrStyle = 'hr-styled';
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* @type {string}
|
|
25
|
-
* Style class for the div element.
|
|
26
|
-
*/
|
|
27
|
-
const spaceStyle = 'spacer';
|
|
28
|
-
|
|
29
|
-
export let data;
|
|
10
|
+
import {
|
|
11
|
+
Badges,
|
|
12
|
+
FullWidthSection,
|
|
13
|
+
LegalNav,
|
|
14
|
+
SocialMedia,
|
|
15
|
+
} from '$lib/components';
|
|
16
|
+
import { PrivacyDashboard } from '$lib/pages';
|
|
30
17
|
</script>
|
|
31
18
|
|
|
32
|
-
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
33
|
-
|
|
34
|
-
<link rel="canonical" href="https://netwk.pro/privacy-dashboard" />
|
|
35
|
-
|
|
36
19
|
<section id="privacy">
|
|
37
20
|
<FullWidthSection containerClass="readable">
|
|
38
21
|
<!-- BEGIN PRIVACY DASHBOARD -->
|
|
@@ -41,7 +24,7 @@ This file is part of Network Pro.
|
|
|
41
24
|
</section>
|
|
42
25
|
<!-- END PRIVACY DASHBOARD -->
|
|
43
26
|
|
|
44
|
-
<div class=
|
|
27
|
+
<div class="spacer"></div>
|
|
45
28
|
|
|
46
29
|
<!-- BEGIN SOCIAL MEDIA -->
|
|
47
30
|
<section id="social-media">
|
|
@@ -51,7 +34,7 @@ This file is part of Network Pro.
|
|
|
51
34
|
|
|
52
35
|
<hr />
|
|
53
36
|
|
|
54
|
-
<div class=
|
|
37
|
+
<div class="spacer"></div>
|
|
55
38
|
|
|
56
39
|
<!-- BEGIN LEGAL -->
|
|
57
40
|
<section id="legal-nav">
|
|
@@ -59,7 +42,7 @@ This file is part of Network Pro.
|
|
|
59
42
|
</section>
|
|
60
43
|
<!-- END LEGAL -->
|
|
61
44
|
|
|
62
|
-
<div class=
|
|
45
|
+
<div class="spacer"></div>
|
|
63
46
|
|
|
64
47
|
<!-- BEGIN BADGES -->
|
|
65
48
|
<section id="badges">
|
|
@@ -12,23 +12,10 @@ This file is part of Network Pro.
|
|
|
12
12
|
FullWidthSection,
|
|
13
13
|
LegalNav,
|
|
14
14
|
SocialMedia,
|
|
15
|
-
MetaTags,
|
|
16
15
|
} from '$lib/components';
|
|
17
16
|
import { ServicesContent } from '$lib/pages';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @type {string}
|
|
21
|
-
* Style class for the div element.
|
|
22
|
-
*/
|
|
23
|
-
const spaceStyle = 'spacer';
|
|
24
|
-
|
|
25
|
-
export let data;
|
|
26
17
|
</script>
|
|
27
18
|
|
|
28
|
-
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
29
|
-
|
|
30
|
-
<link rel="canonical" href="https://netwk.pro/services" />
|
|
31
|
-
|
|
32
19
|
<section id="services">
|
|
33
20
|
<FullWidthSection>
|
|
34
21
|
<!-- BEGIN PRIVACY POLICY -->
|
|
@@ -37,7 +24,7 @@ This file is part of Network Pro.
|
|
|
37
24
|
</section>
|
|
38
25
|
<!-- END PRIVACY POLICY -->
|
|
39
26
|
|
|
40
|
-
<div class=
|
|
27
|
+
<div class="spacer"></div>
|
|
41
28
|
|
|
42
29
|
<!-- BEGIN SOCIAL MEDIA -->
|
|
43
30
|
<section id="social-media">
|
|
@@ -47,7 +34,7 @@ This file is part of Network Pro.
|
|
|
47
34
|
|
|
48
35
|
<hr />
|
|
49
36
|
|
|
50
|
-
<div class=
|
|
37
|
+
<div class="spacer"></div>
|
|
51
38
|
|
|
52
39
|
<!-- BEGIN LEGAL -->
|
|
53
40
|
<section id="legal-nav">
|
|
@@ -55,7 +42,7 @@ This file is part of Network Pro.
|
|
|
55
42
|
</section>
|
|
56
43
|
<!-- END LEGAL -->
|
|
57
44
|
|
|
58
|
-
<div class=
|
|
45
|
+
<div class="spacer"></div>
|
|
59
46
|
|
|
60
47
|
<!-- BEGIN BADGES -->
|
|
61
48
|
<section id="badges">
|
|
@@ -7,26 +7,15 @@ This file is part of Network Pro.
|
|
|
7
7
|
========================================================================== -->
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @type {string}
|
|
19
|
-
* Style class for the div element.
|
|
20
|
-
*/
|
|
21
|
-
const spaceStyle = 'spacer';
|
|
22
|
-
|
|
23
|
-
export let data;
|
|
10
|
+
import {
|
|
11
|
+
Badges,
|
|
12
|
+
FullWidthSection,
|
|
13
|
+
LegalNav,
|
|
14
|
+
SocialMedia,
|
|
15
|
+
} from '$lib/components';
|
|
16
|
+
import { TermsConditionsContent } from '$lib/pages';
|
|
24
17
|
</script>
|
|
25
18
|
|
|
26
|
-
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
27
|
-
|
|
28
|
-
<link rel="canonical" href="https://netwk.pro/terms-conditions" />
|
|
29
|
-
|
|
30
19
|
<section id="terms-conditions">
|
|
31
20
|
<FullWidthSection containerClass="readable">
|
|
32
21
|
<!-- BEGIN TERMS AND CONDITIONS -->
|
|
@@ -35,7 +24,7 @@ This file is part of Network Pro.
|
|
|
35
24
|
</section>
|
|
36
25
|
<!-- END TERMS AND CONDITIONS -->
|
|
37
26
|
|
|
38
|
-
<div class=
|
|
27
|
+
<div class="spacer"></div>
|
|
39
28
|
|
|
40
29
|
<!-- BEGIN SOCIAL MEDIA -->
|
|
41
30
|
<section id="social-media">
|
|
@@ -45,7 +34,7 @@ This file is part of Network Pro.
|
|
|
45
34
|
|
|
46
35
|
<hr />
|
|
47
36
|
|
|
48
|
-
<div class=
|
|
37
|
+
<div class="spacer"></div>
|
|
49
38
|
|
|
50
39
|
<!-- BEGIN LEGAL -->
|
|
51
40
|
<section id="legal-nav">
|
|
@@ -53,7 +42,7 @@ This file is part of Network Pro.
|
|
|
53
42
|
</section>
|
|
54
43
|
<!-- END LEGAL -->
|
|
55
44
|
|
|
56
|
-
<div class=
|
|
45
|
+
<div class="spacer"></div>
|
|
57
46
|
|
|
58
47
|
<!-- BEGIN BADGES -->
|
|
59
48
|
<section id="badges">
|
|
@@ -7,26 +7,15 @@ This file is part of Network Pro.
|
|
|
7
7
|
========================================================================== -->
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @type {string}
|
|
19
|
-
* Style class for the div element.
|
|
20
|
-
*/
|
|
21
|
-
const spaceStyle = 'spacer';
|
|
22
|
-
|
|
23
|
-
export let data;
|
|
10
|
+
import {
|
|
11
|
+
Badges,
|
|
12
|
+
FullWidthSection,
|
|
13
|
+
LegalNav,
|
|
14
|
+
SocialMedia,
|
|
15
|
+
} from '$lib/components';
|
|
16
|
+
import { TermsUseContent } from '$lib/pages';
|
|
24
17
|
</script>
|
|
25
18
|
|
|
26
|
-
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
27
|
-
|
|
28
|
-
<link rel="canonical" href="https://netwk.pro/terms-of-use" />
|
|
29
|
-
|
|
30
19
|
<section id="terms-of-use">
|
|
31
20
|
<FullWidthSection containerClass="readable">
|
|
32
21
|
<!-- BEGIN TERMS OF USE -->
|
|
@@ -35,7 +24,7 @@ This file is part of Network Pro.
|
|
|
35
24
|
</section>
|
|
36
25
|
<!-- END TERMS OF USE -->
|
|
37
26
|
|
|
38
|
-
<div class=
|
|
27
|
+
<div class="spacer"></div>
|
|
39
28
|
|
|
40
29
|
<!-- BEGIN SOCIAL MEDIA -->
|
|
41
30
|
<section id="social-media">
|
|
@@ -45,7 +34,7 @@ This file is part of Network Pro.
|
|
|
45
34
|
|
|
46
35
|
<hr />
|
|
47
36
|
|
|
48
|
-
<div class=
|
|
37
|
+
<div class="spacer"></div>
|
|
49
38
|
|
|
50
39
|
<!-- BEGIN LEGAL -->
|
|
51
40
|
<section id="legal-nav">
|
|
@@ -53,7 +42,7 @@ This file is part of Network Pro.
|
|
|
53
42
|
</section>
|
|
54
43
|
<!-- END LEGAL -->
|
|
55
44
|
|
|
56
|
-
<div class=
|
|
45
|
+
<div class="spacer"></div>
|
|
57
46
|
|
|
58
47
|
<!-- BEGIN BADGES -->
|
|
59
48
|
<section id="badges">
|
package/static/sitemap.xml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<!-- Sitemap last updated 2025-10-
|
|
2
|
+
<!-- Sitemap last updated 2025-10-30 -->
|
|
3
3
|
|
|
4
4
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
5
5
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<loc>https://netwk.pro</loc>
|
|
9
9
|
|
|
10
|
-
<lastmod>2025-10-
|
|
10
|
+
<lastmod>2025-10-30</lastmod>
|
|
11
11
|
|
|
12
12
|
<changefreq>weekly</changefreq>
|
|
13
13
|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
<loc>https://netwk.pro/services</loc>
|
|
21
21
|
|
|
22
|
-
<lastmod>2025-10-
|
|
22
|
+
<lastmod>2025-10-30</lastmod>
|
|
23
23
|
|
|
24
24
|
<changefreq>monthly</changefreq>
|
|
25
25
|
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
|
|
30
30
|
<url>
|
|
31
31
|
|
|
32
|
-
<loc>https://netwk.pro/foss
|
|
32
|
+
<loc>https://netwk.pro/foss</loc>
|
|
33
33
|
|
|
34
|
-
<lastmod>2025-
|
|
34
|
+
<lastmod>2025-10-30</lastmod>
|
|
35
35
|
|
|
36
36
|
<changefreq>monthly</changefreq>
|
|
37
37
|
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
<loc>https://netwk.pro/about</loc>
|
|
45
45
|
|
|
46
|
-
<lastmod>2025-10-
|
|
46
|
+
<lastmod>2025-10-30</lastmod>
|
|
47
47
|
|
|
48
48
|
<changefreq>monthly</changefreq>
|
|
49
49
|
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
|
|
56
56
|
<loc>https://netwk.pro/privacy-dashboard</loc>
|
|
57
57
|
|
|
58
|
-
<lastmod>2025-
|
|
58
|
+
<lastmod>2025-10-30</lastmod>
|
|
59
59
|
|
|
60
60
|
<changefreq>monthly</changefreq>
|
|
61
61
|
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
|
|
68
68
|
<loc>https://netwk.pro/privacy</loc>
|
|
69
69
|
|
|
70
|
-
<lastmod>2025-10-
|
|
70
|
+
<lastmod>2025-10-30</lastmod>
|
|
71
71
|
|
|
72
72
|
<changefreq>monthly</changefreq>
|
|
73
73
|
|
|
@@ -77,9 +77,9 @@
|
|
|
77
77
|
|
|
78
78
|
<url>
|
|
79
79
|
|
|
80
|
-
<loc>https://netwk.pro/
|
|
80
|
+
<loc>https://netwk.pro/legal</loc>
|
|
81
81
|
|
|
82
|
-
<lastmod>2025-10-
|
|
82
|
+
<lastmod>2025-10-30</lastmod>
|
|
83
83
|
|
|
84
84
|
<changefreq>monthly</changefreq>
|
|
85
85
|
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
|
|
92
92
|
<loc>https://netwk.pro/terms-of-use</loc>
|
|
93
93
|
|
|
94
|
-
<lastmod>2025-
|
|
94
|
+
<lastmod>2025-10-30</lastmod>
|
|
95
95
|
|
|
96
96
|
<changefreq>monthly</changefreq>
|
|
97
97
|
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
|
|
104
104
|
<loc>https://netwk.pro/terms-conditions</loc>
|
|
105
105
|
|
|
106
|
-
<lastmod>2025-
|
|
106
|
+
<lastmod>2025-10-30</lastmod>
|
|
107
107
|
|
|
108
108
|
<changefreq>monthly</changefreq>
|
|
109
109
|
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
|
|
116
116
|
<loc>https://netwk.pro/pgp</loc>
|
|
117
117
|
|
|
118
|
-
<lastmod>2025-10-
|
|
118
|
+
<lastmod>2025-10-30</lastmod>
|
|
119
119
|
|
|
120
120
|
<changefreq>monthly</changefreq>
|
|
121
121
|
|
package/tests/e2e/mobile.spec.js
CHANGED
|
@@ -15,12 +15,24 @@ This file is part of Network Pro.
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { expect, test } from '@playwright/test';
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
clickAndWaitForNavigation,
|
|
20
|
+
getFooter,
|
|
21
|
+
getVisibleNav,
|
|
22
|
+
setMobileView,
|
|
23
|
+
} from './shared/helpers.js';
|
|
24
|
+
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// 📱 Mobile viewport smoke tests
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
19
28
|
|
|
20
|
-
// Mobile viewport smoke tests for the root route
|
|
21
29
|
test.describe('Mobile Tests', () => {
|
|
22
|
-
|
|
30
|
+
// Increase timeout for all mobile tests
|
|
31
|
+
test.setTimeout(90_000);
|
|
23
32
|
|
|
33
|
+
// -------------------------------------------------------------------------
|
|
34
|
+
// 🧱 Test 1: Main description text
|
|
35
|
+
// -------------------------------------------------------------------------
|
|
24
36
|
test('should display the main description text on mobile', async ({
|
|
25
37
|
page,
|
|
26
38
|
browserName,
|
|
@@ -29,7 +41,7 @@ test.describe('Mobile Tests', () => {
|
|
|
29
41
|
|
|
30
42
|
await setMobileView(page);
|
|
31
43
|
await page.goto('/');
|
|
32
|
-
await page.waitForLoadState('domcontentloaded', { timeout:
|
|
44
|
+
await page.waitForLoadState('domcontentloaded', { timeout: 60_000 });
|
|
33
45
|
|
|
34
46
|
const description = page.locator(
|
|
35
47
|
'div.index-title1:has-text("Locking Down Networks")',
|
|
@@ -37,6 +49,9 @@ test.describe('Mobile Tests', () => {
|
|
|
37
49
|
await expect(description).toBeVisible();
|
|
38
50
|
});
|
|
39
51
|
|
|
52
|
+
// -------------------------------------------------------------------------
|
|
53
|
+
// 🧱 Test 2: Main content
|
|
54
|
+
// -------------------------------------------------------------------------
|
|
40
55
|
test('should display main content correctly on mobile', async ({
|
|
41
56
|
page,
|
|
42
57
|
browserName,
|
|
@@ -45,12 +60,15 @@ test.describe('Mobile Tests', () => {
|
|
|
45
60
|
|
|
46
61
|
await setMobileView(page);
|
|
47
62
|
await page.goto('/');
|
|
48
|
-
await page.waitForLoadState('domcontentloaded', { timeout:
|
|
63
|
+
await page.waitForLoadState('domcontentloaded', { timeout: 60_000 });
|
|
49
64
|
|
|
50
65
|
const mainHeading = page.locator('h1, h2');
|
|
51
66
|
await expect(mainHeading).toBeVisible();
|
|
52
67
|
});
|
|
53
68
|
|
|
69
|
+
// -------------------------------------------------------------------------
|
|
70
|
+
// 🧱 Test 3: "About" link navigation
|
|
71
|
+
// -------------------------------------------------------------------------
|
|
54
72
|
test("should ensure the 'about' link is clickable on mobile", async ({
|
|
55
73
|
page,
|
|
56
74
|
browserName,
|
|
@@ -58,23 +76,24 @@ test.describe('Mobile Tests', () => {
|
|
|
58
76
|
if (browserName === 'webkit') test.skip();
|
|
59
77
|
|
|
60
78
|
await setMobileView(page);
|
|
61
|
-
await page.goto('/');
|
|
62
|
-
await page.waitForLoadState('domcontentloaded', { timeout: 60000 });
|
|
79
|
+
await page.goto('/', { waitUntil: 'networkidle' });
|
|
63
80
|
|
|
64
81
|
const nav = await getVisibleNav(page);
|
|
65
|
-
const aboutLink = nav.getByRole('link', { name: 'about' });
|
|
66
|
-
await expect(aboutLink).toBeVisible();
|
|
67
82
|
|
|
68
|
-
//
|
|
69
|
-
await
|
|
70
|
-
|
|
71
|
-
page.waitForURL('**/about', { timeout: 60000 }),
|
|
72
|
-
aboutLink.click(),
|
|
73
|
-
]);
|
|
83
|
+
// Ensure the link exists before interacting
|
|
84
|
+
await page.waitForSelector('a[href="/about"]', { timeout: 10_000 });
|
|
85
|
+
const aboutLink = nav.getByRole('link', { name: 'about' });
|
|
74
86
|
|
|
75
|
-
|
|
87
|
+
// Use the safe navigation helper
|
|
88
|
+
await clickAndWaitForNavigation(page, aboutLink, {
|
|
89
|
+
urlPattern: /\/about/,
|
|
90
|
+
timeout: 60_000,
|
|
91
|
+
});
|
|
76
92
|
});
|
|
77
93
|
|
|
94
|
+
// -------------------------------------------------------------------------
|
|
95
|
+
// 🧱 Test 4: Footer presence on /about
|
|
96
|
+
// -------------------------------------------------------------------------
|
|
78
97
|
test('should display the footer on /about (mobile)', async ({
|
|
79
98
|
page,
|
|
80
99
|
browserName,
|
|
@@ -89,4 +108,4 @@ test.describe('Mobile Tests', () => {
|
|
|
89
108
|
});
|
|
90
109
|
});
|
|
91
110
|
|
|
92
|
-
// cspell:ignore domcontentloaded
|
|
111
|
+
// cspell:ignore domcontentloaded networkidle
|