@networkpro/web 1.12.9 → 1.13.1
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/CHANGELOG.md +65 -1
- package/README.md +26 -18
- package/cspell.json +1 -0
- package/eslint.config.mjs +48 -48
- package/netlify/edge-functions/csp-report.js +31 -31
- package/package.json +3 -3
- package/playwright.config.js +14 -14
- package/postcss.config.mjs +1 -1
- package/scripts/auditScripts.js +16 -16
- package/scripts/bundleCss.js +5 -5
- package/scripts/checkEnv.js +6 -6
- package/scripts/checkNode.js +10 -10
- package/scripts/checkVersions.js +6 -6
- package/scripts/flattenHeaders.js +13 -13
- package/scripts/generateTest.js +5 -5
- package/scripts/openReport.js +3 -3
- package/scripts/validateHeaders.js +13 -13
- package/src/app.html +0 -9
- package/src/hooks.client.ts +1 -1
- package/src/hooks.server.js +31 -32
- package/src/lib/components/Badges.svelte +10 -10
- package/src/lib/components/CodeBlock.svelte +1 -1
- package/src/lib/components/ContainerSection.svelte +1 -1
- package/src/lib/components/FullWidthSection.svelte +3 -3
- package/src/lib/components/LegalNav.svelte +7 -7
- package/src/lib/components/Logo.svelte +9 -9
- package/src/lib/components/MetaTags.svelte +4 -4
- package/src/lib/components/PWAInstallButton.svelte +4 -4
- package/src/lib/components/RedirectPage.svelte +4 -4
- package/src/lib/components/SocialMedia.svelte +16 -16
- package/src/lib/components/foss/FossItemContent.svelte +27 -58
- package/src/lib/components/foss/ObtainiumBlock.svelte +64 -0
- package/src/lib/components/layout/Footer.svelte +18 -18
- package/src/lib/components/layout/HeaderDefault.svelte +16 -16
- package/src/lib/components/layout/HeaderHome.svelte +14 -14
- package/src/lib/data/fossData.js +22 -10
- package/src/lib/images.js +34 -34
- package/src/lib/img/obtainium.png +0 -0
- package/src/lib/img/obtainium.webp +0 -0
- package/src/lib/index.js +15 -15
- package/src/lib/meta.js +29 -29
- package/src/lib/pages/AboutContent.svelte +24 -24
- package/src/lib/pages/FossContent.svelte +13 -13
- package/src/lib/pages/HomeContent.svelte +7 -7
- package/src/lib/pages/LicenseContent.svelte +39 -39
- package/src/lib/pages/PGPContent.svelte +23 -23
- package/src/lib/pages/PrivacyContent.svelte +39 -39
- package/src/lib/pages/PrivacyDashboard.svelte +12 -12
- package/src/lib/pages/TermsConditionsContent.svelte +29 -29
- package/src/lib/pages/TermsUseContent.svelte +26 -26
- package/src/lib/registerServiceWorker.js +25 -25
- package/src/lib/stores/posthog.js +13 -13
- package/src/lib/stores/trackingPreferences.js +19 -19
- package/src/lib/styles/css/default.css +30 -0
- package/src/lib/styles/global.min.css +1 -1
- package/src/lib/types/fossTypes.js +9 -2
- package/src/lib/unregisterServiceWorker.js +1 -1
- package/src/lib/utils/purify.js +4 -4
- package/src/lib/utils/utm.js +2 -2
- package/src/routes/+error.svelte +4 -4
- package/src/routes/+layout.js +6 -6
- package/src/routes/+layout.svelte +29 -29
- package/src/routes/+page.server.js +2 -2
- package/src/routes/+page.svelte +9 -9
- package/src/routes/about/+page.server.js +2 -2
- package/src/routes/about/+page.svelte +7 -7
- package/src/routes/api/mock-csp/+server.js +3 -3
- package/src/routes/consultation/+page.svelte +5 -5
- package/src/routes/contact/+page.svelte +5 -5
- package/src/routes/foss-spotlight/+page.server.js +2 -2
- package/src/routes/foss-spotlight/+page.svelte +7 -7
- package/src/routes/license/+page.server.js +2 -2
- package/src/routes/license/+page.svelte +7 -7
- package/src/routes/pgp/+page.server.js +2 -2
- package/src/routes/pgp/+page.svelte +7 -7
- package/src/routes/pgp/[key]/+server.js +9 -9
- package/src/routes/privacy/+page.server.js +2 -2
- package/src/routes/privacy/+page.svelte +7 -7
- package/src/routes/privacy-dashboard/+page.server.js +2 -2
- package/src/routes/privacy-dashboard/+page.svelte +8 -8
- package/src/routes/privacy-rights/+page.svelte +5 -5
- package/src/routes/status/+page.server.js +2 -2
- package/src/routes/terms-conditions/+page.server.js +2 -2
- package/src/routes/terms-conditions/+page.svelte +7 -7
- package/src/routes/terms-of-use/+page.server.js +2 -2
- package/src/routes/terms-of-use/+page.svelte +7 -7
- package/src/service-worker.js +86 -86
- package/static/bin/heliboard.json +8 -0
- package/static/disableSw.js +2 -2
- package/static/offline.html +7 -7
- package/stylelint.config.js +56 -56
- package/svelte.config.js +6 -6
- package/tests/e2e/app.spec.js +27 -27
- package/tests/e2e/mobile.spec.js +18 -18
- package/tests/e2e/shared/helpers.js +4 -4
- package/tests/internal/auditCoverage.test.js +24 -24
- package/tests/unit/checkEnv.test.js +10 -10
- package/tests/unit/checkVersions.test.js +4 -4
- package/tests/unit/csp-report.test.js +24 -24
- package/tests/unit/demo.test.js +3 -3
- package/tests/unit/lib/utils/purify.test.js +12 -12
- package/tests/unit/routes/page.svelte.test.js +10 -10
- package/tests/unit/unregisterServiceWorker.test.js +5 -5
- package/tests/unit/utm.test.js +13 -13
- package/vite.config.js +5 -5
- package/vitest-setup-client.js +4 -4
- package/vitest.config.client.js +15 -15
- package/vitest.config.server.js +13 -13
|
@@ -7,13 +7,13 @@ This file is part of Network Pro.
|
|
|
7
7
|
========================================================================== -->
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
|
-
import { base } from
|
|
11
|
-
import { CONSTANTS } from
|
|
10
|
+
import { base } from '$app/paths';
|
|
11
|
+
import { CONSTANTS } from '$lib';
|
|
12
12
|
|
|
13
13
|
// Log the base path to verify its value
|
|
14
14
|
//console.log("Base path:", base);
|
|
15
15
|
|
|
16
|
-
console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
16
|
+
//console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
17
17
|
|
|
18
18
|
const { PAGE } = CONSTANTS;
|
|
19
19
|
|
|
@@ -38,21 +38,21 @@ This file is part of Network Pro.
|
|
|
38
38
|
[
|
|
39
39
|
{
|
|
40
40
|
href: privacyLink,
|
|
41
|
-
text:
|
|
41
|
+
text: 'Privacy Policy',
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
href: pdashLink,
|
|
45
|
-
text:
|
|
45
|
+
text: 'Privacy Dashboard',
|
|
46
46
|
},
|
|
47
47
|
],
|
|
48
48
|
[
|
|
49
49
|
{
|
|
50
50
|
href: termsLink,
|
|
51
|
-
text:
|
|
51
|
+
text: 'Terms of Use',
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
54
|
href: licenseLink,
|
|
55
|
-
text:
|
|
55
|
+
text: 'Legal',
|
|
56
56
|
},
|
|
57
57
|
],
|
|
58
58
|
];
|
|
@@ -8,43 +8,43 @@ This file is part of Network Pro.
|
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
10
|
// Import logo images
|
|
11
|
-
import { logoPng, logoWbp } from
|
|
11
|
+
import { logoPng, logoWbp } from '$lib';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Decoding mode for the image.
|
|
15
15
|
* @type {"sync" | "async" | "auto"}
|
|
16
16
|
*/
|
|
17
|
-
export let decoding =
|
|
17
|
+
export let decoding = 'sync';
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Loading mode for the image.
|
|
21
21
|
* @type {"eager" | "lazy"}
|
|
22
22
|
*/
|
|
23
|
-
export let loading =
|
|
23
|
+
export let loading = 'eager';
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* CSS class for the logo image.
|
|
27
27
|
* @type {string}
|
|
28
28
|
*/
|
|
29
|
-
export let className =
|
|
29
|
+
export let className = 'logo';
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Alt text for the logo image.
|
|
33
33
|
* @type {string}
|
|
34
34
|
*/
|
|
35
|
-
export let alt =
|
|
35
|
+
export let alt = 'Network Pro Strategies';
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* First part of the company slogan.
|
|
39
39
|
* @type {string}
|
|
40
40
|
*/
|
|
41
|
-
export let sloganA =
|
|
41
|
+
export let sloganA = 'Locking Down Networks';
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
44
|
* Second part of the company slogan.
|
|
45
45
|
* @type {string}
|
|
46
46
|
*/
|
|
47
|
-
export let sloganB =
|
|
47
|
+
export let sloganB = 'Unlocking Confidence™';
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
50
|
* Enable/disable display of the slogan.
|
|
@@ -74,13 +74,13 @@ This file is part of Network Pro.
|
|
|
74
74
|
* Fetch priority for the logo image.
|
|
75
75
|
* @type {"high" | "low" | "auto"}
|
|
76
76
|
*/
|
|
77
|
-
export let fetchpriority =
|
|
77
|
+
export let fetchpriority = 'high';
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
80
|
* Tagline text to display.
|
|
81
81
|
* @type {string}
|
|
82
82
|
*/
|
|
83
|
-
export let tagline =
|
|
83
|
+
export let tagline = 'Security | Networking | Privacy';
|
|
84
84
|
</script>
|
|
85
85
|
|
|
86
86
|
<!-- BEGIN LOGO AND SITE TITLE -->
|
|
@@ -10,17 +10,17 @@ This file is part of Network Pro.
|
|
|
10
10
|
export let title;
|
|
11
11
|
export let description;
|
|
12
12
|
|
|
13
|
-
import { CONSTANTS } from
|
|
13
|
+
import { CONSTANTS } from '$lib';
|
|
14
14
|
|
|
15
|
-
console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
15
|
+
//console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
16
16
|
|
|
17
17
|
const { COMPANY_INFO, LINKS } = CONSTANTS;
|
|
18
18
|
|
|
19
19
|
// Static shared values
|
|
20
20
|
const ogUrl = LINKS.HOME;
|
|
21
|
-
const ogImg =
|
|
21
|
+
const ogImg = '/img/banner-og-1200x630.png';
|
|
22
22
|
const companyName = COMPANY_INFO.NAME;
|
|
23
|
-
const twitterAct =
|
|
23
|
+
const twitterAct = '@NetEng_Pro';
|
|
24
24
|
</script>
|
|
25
25
|
|
|
26
26
|
<svelte:head>
|
|
@@ -7,8 +7,8 @@ This file is part of Network Pro.
|
|
|
7
7
|
========================================================================== -->
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
|
-
import { onMount } from
|
|
11
|
-
import { fade } from
|
|
10
|
+
import { onMount } from 'svelte';
|
|
11
|
+
import { fade } from 'svelte/transition';
|
|
12
12
|
|
|
13
13
|
let show = false;
|
|
14
14
|
|
|
@@ -26,10 +26,10 @@ This file is part of Network Pro.
|
|
|
26
26
|
show = true;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
window.addEventListener(
|
|
29
|
+
window.addEventListener('pwa-install-available', handleInstallPrompt);
|
|
30
30
|
|
|
31
31
|
return () => {
|
|
32
|
-
window.removeEventListener(
|
|
32
|
+
window.removeEventListener('pwa-install-available', handleInstallPrompt);
|
|
33
33
|
};
|
|
34
34
|
});
|
|
35
35
|
|
|
@@ -7,19 +7,19 @@ This file is part of Network Pro.
|
|
|
7
7
|
========================================================================== -->
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
|
-
import { onMount } from
|
|
11
|
-
import FullWidthSection from
|
|
10
|
+
import { onMount } from 'svelte';
|
|
11
|
+
import FullWidthSection from '$lib/components/FullWidthSection.svelte';
|
|
12
12
|
|
|
13
13
|
export let to;
|
|
14
14
|
export let delay = 3;
|
|
15
15
|
|
|
16
16
|
onMount(() => {
|
|
17
17
|
if (!to) {
|
|
18
|
-
console.warn(
|
|
18
|
+
console.warn('⛔ No redirect target provided');
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
console.log(
|
|
22
|
+
console.log('✅ Starting redirect to:', to);
|
|
23
23
|
|
|
24
24
|
setTimeout(() => {
|
|
25
25
|
window.location.href = to;
|
|
@@ -22,30 +22,30 @@ This file is part of Network Pro.
|
|
|
22
22
|
*/
|
|
23
23
|
const socialLinks = [
|
|
24
24
|
{
|
|
25
|
-
href:
|
|
26
|
-
label:
|
|
27
|
-
iconClass:
|
|
25
|
+
href: 'https://instagram.com/netwk_pro',
|
|
26
|
+
label: 'Instagram',
|
|
27
|
+
iconClass: 'fab fa-square-instagram fa-2x',
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
|
-
href:
|
|
31
|
-
label:
|
|
32
|
-
iconClass:
|
|
30
|
+
href: 'https://facebook.com/neteng.pro',
|
|
31
|
+
label: 'Facebook',
|
|
32
|
+
iconClass: 'fab fa-square-facebook fa-2x',
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
href:
|
|
36
|
-
label:
|
|
37
|
-
iconClass:
|
|
35
|
+
href: 'https://linkedin.com/company/netwk-pro',
|
|
36
|
+
label: 'LinkedIn',
|
|
37
|
+
iconClass: 'fab fa-linkedin fa-2x',
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
|
-
href:
|
|
41
|
-
label:
|
|
42
|
-
rel:
|
|
43
|
-
iconClass:
|
|
40
|
+
href: 'https://noc.social/@NetEng_Pro',
|
|
41
|
+
label: 'Mastodon',
|
|
42
|
+
rel: 'me noopener noreferrer', // Special rel attribute for Mastodon
|
|
43
|
+
iconClass: 'fab fa-mastodon fa-2x',
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
|
-
href:
|
|
47
|
-
label:
|
|
48
|
-
iconClass:
|
|
46
|
+
href: 'https://github.com/netwk-pro/',
|
|
47
|
+
label: 'GitHub',
|
|
48
|
+
iconClass: 'fab fa-square-github fa-2x',
|
|
49
49
|
},
|
|
50
50
|
];
|
|
51
51
|
</script>
|
|
@@ -10,26 +10,24 @@ This file is part of Network Pro.
|
|
|
10
10
|
/* at-html is sanitized by DOMPurify */
|
|
11
11
|
/* eslint-disable svelte/no-at-html-tags */
|
|
12
12
|
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import FossFeatures from "$lib/components/foss/FossFeatures.svelte";
|
|
16
|
-
// Import directly from $lib by way of image utility
|
|
17
|
-
import { obtainiumPng, obtainiumWbp } from "$lib";
|
|
18
|
-
import { CONSTANTS } from "$lib";
|
|
13
|
+
import ObtainiumBlock from '$lib/components/foss/ObtainiumBlock.svelte';
|
|
14
|
+
import FossFeatures from '$lib/components/foss/FossFeatures.svelte';
|
|
19
15
|
|
|
20
|
-
|
|
16
|
+
import { onMount } from 'svelte';
|
|
17
|
+
import { sanitizeHtml } from '$lib/utils/purify.js';
|
|
18
|
+
import { obtainiumPng, obtainiumWbp } from '$lib';
|
|
21
19
|
|
|
22
|
-
|
|
20
|
+
import { CONSTANTS } from '$lib';
|
|
21
|
+
|
|
22
|
+
//console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
const obtainiumLink =
|
|
26
|
-
"https://apps.obtainium.imranr.dev/redirect.html?r=obtainium://app/%7B%22id%22%3A%22fe.linksheet.nightly%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FLinkSheet%2Fnightly%22%2C%22author%22%3A%221fexd%22%2C%22name%22%3A%22LinkSheet%20Nightly%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Afalse%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22LinkSheet.Nightly%5C%22%2C%5C%22invertAPKFilter%5C%22%3Atrue%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22Restore%20link%20control%20on%20Android%2012%2B%5C%22%7D%22%7D";
|
|
24
|
+
const { PAGE, NAV } = CONSTANTS;
|
|
27
25
|
|
|
28
26
|
/** @type {"async"} */
|
|
29
|
-
const decoding =
|
|
27
|
+
const decoding = 'async';
|
|
30
28
|
|
|
31
29
|
/** @type {"lazy"} */
|
|
32
|
-
const loading =
|
|
30
|
+
const loading = 'lazy';
|
|
33
31
|
|
|
34
32
|
/// <reference path="$lib/types/fossTypes.js" />
|
|
35
33
|
|
|
@@ -43,8 +41,8 @@ This file is part of Network Pro.
|
|
|
43
41
|
*/
|
|
44
42
|
export let isFirst = false;
|
|
45
43
|
|
|
46
|
-
let safeHeadlineDescription =
|
|
47
|
-
let safeDetailsDescription =
|
|
44
|
+
let safeHeadlineDescription = '';
|
|
45
|
+
let safeDetailsDescription = '';
|
|
48
46
|
/** @type {string[]} */
|
|
49
47
|
let safeNotes = [];
|
|
50
48
|
|
|
@@ -66,12 +64,12 @@ This file is part of Network Pro.
|
|
|
66
64
|
<picture>
|
|
67
65
|
<source srcset={fossItem.images.webp} type="image/webp" />
|
|
68
66
|
<img
|
|
69
|
-
decoding={isFirst ?
|
|
70
|
-
loading={isFirst ?
|
|
71
|
-
fetchpriority={isFirst ?
|
|
67
|
+
decoding={isFirst ? 'sync' : decoding}
|
|
68
|
+
loading={isFirst ? 'eager' : loading}
|
|
69
|
+
fetchpriority={isFirst ? 'high' : 'auto'}
|
|
72
70
|
src={fossItem.images.png}
|
|
73
71
|
alt={fossItem.imgAlt}
|
|
74
|
-
|
|
72
|
+
class="obtainium-icon" />
|
|
75
73
|
</picture>
|
|
76
74
|
</td>
|
|
77
75
|
<td class="foss-cell">
|
|
@@ -105,49 +103,20 @@ This file is part of Network Pro.
|
|
|
105
103
|
|
|
106
104
|
|
|
107
105
|
|
|
108
|
-
<div class="
|
|
106
|
+
<div class="obtainium">
|
|
109
107
|
<!-- Special handling for LinkSheet's Obtainium link -->
|
|
110
|
-
{#if fossItem.
|
|
111
|
-
<
|
|
112
|
-
<a rel={PAGE.REL} href={obtainiumLink} target={PAGE.BLANK}>
|
|
113
|
-
<picture>
|
|
114
|
-
<source srcset={obtainiumWbp} type="image/webp" />
|
|
115
|
-
<img
|
|
116
|
-
decoding={isFirst ? "sync" : decoding}
|
|
117
|
-
loading={isFirst ? "eager" : loading}
|
|
118
|
-
fetchpriority={isFirst ? "high" : "auto"}
|
|
119
|
-
src={obtainiumPng}
|
|
120
|
-
alt="Obtainium"
|
|
121
|
-
style="width: 207px; height: 80px" />
|
|
122
|
-
</picture>
|
|
123
|
-
</a>
|
|
124
|
-
<p>
|
|
125
|
-
<span style="color: #ffc627"
|
|
126
|
-
><i class="fas fa-file-arrow-down" style="margin-left: 8px;"></i
|
|
127
|
-
></span>
|
|
128
|
-
<a
|
|
129
|
-
href="/bin/linksheet.json"
|
|
130
|
-
type="application/json"
|
|
131
|
-
download
|
|
132
|
-
style="margin-left: 8px;"
|
|
133
|
-
target={PAGE.BLANK}>
|
|
134
|
-
Obtainium App Config
|
|
135
|
-
</a>
|
|
136
|
-
</p>
|
|
137
|
-
</div>
|
|
108
|
+
{#if fossItem.obtainium}
|
|
109
|
+
<ObtainiumBlock obtainium={fossItem.obtainium} {isFirst} />
|
|
138
110
|
{/if}
|
|
139
111
|
|
|
140
112
|
<!-- Other links -->
|
|
141
|
-
{#each fossItem.links as { label, href, imgAlt, downloadText, downloadHref
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
{
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
{/if}
|
|
149
|
-
</div>
|
|
150
|
-
{/if}
|
|
113
|
+
{#each fossItem.links as { label, href, imgAlt, downloadText, downloadHref }, i}
|
|
114
|
+
<div class="linksheet-entry">
|
|
115
|
+
{#if label && href}
|
|
116
|
+
<strong>{label}:</strong>
|
|
117
|
+
<a rel={PAGE.REL} {href} target={PAGE.BLANK}>{href}</a>
|
|
118
|
+
{/if}
|
|
119
|
+
</div>
|
|
151
120
|
{/each}
|
|
152
121
|
</div>
|
|
153
122
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<!-- ==========================================================================
|
|
2
|
+
src/lib/components/foss/ObtainiumBlock.svelte
|
|
3
|
+
|
|
4
|
+
Copyright © 2025 Network Pro Strategies (Network Pro™)
|
|
5
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
6
|
+
This file is part of Network Pro.
|
|
7
|
+
========================================================================== -->
|
|
8
|
+
|
|
9
|
+
<!-- Encapsulated UI block for Obtainium deep-link + manual config download. -->
|
|
10
|
+
|
|
11
|
+
<script>
|
|
12
|
+
/// <reference path="$lib/types/fossTypes.js" />
|
|
13
|
+
/** @type {{ href: string; download: string; label: string; isFirst?: boolean }} */
|
|
14
|
+
export let obtainium;
|
|
15
|
+
export let isFirst = false;
|
|
16
|
+
|
|
17
|
+
import { obtainiumPng, obtainiumWbp } from '$lib';
|
|
18
|
+
import { CONSTANTS } from '$lib';
|
|
19
|
+
|
|
20
|
+
const { PAGE } = CONSTANTS;
|
|
21
|
+
|
|
22
|
+
/** @type {"async"} */
|
|
23
|
+
const decoding = 'async';
|
|
24
|
+
|
|
25
|
+
/** @type {"lazy"} */
|
|
26
|
+
const loading = 'lazy';
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<div class="linksheet-entry">
|
|
30
|
+
<p class="obtainium-direct-label">Open directly in Obtainium:</p>
|
|
31
|
+
|
|
32
|
+
<a
|
|
33
|
+
rel={PAGE.REL}
|
|
34
|
+
href={obtainium.href}
|
|
35
|
+
target={PAGE.BLANK}
|
|
36
|
+
aria-label="Open this app in Obtainium">
|
|
37
|
+
<picture>
|
|
38
|
+
<source srcset={obtainiumWbp} type="image/webp" />
|
|
39
|
+
<img
|
|
40
|
+
decoding={isFirst ? 'sync' : decoding}
|
|
41
|
+
loading={isFirst ? 'eager' : loading}
|
|
42
|
+
fetchpriority={isFirst ? 'high' : 'auto'}
|
|
43
|
+
src={obtainiumPng}
|
|
44
|
+
alt="Obtainium"
|
|
45
|
+
class="obtainium-img" />
|
|
46
|
+
</picture>
|
|
47
|
+
</a>
|
|
48
|
+
|
|
49
|
+
<p class="obtainium-manual-label">Download and import manually:</p>
|
|
50
|
+
|
|
51
|
+
<p>
|
|
52
|
+
<span class="obtainium-fa-down">
|
|
53
|
+
<i class="fas fa-file-arrow-down"></i>
|
|
54
|
+
</span>
|
|
55
|
+
<a
|
|
56
|
+
href={obtainium.download}
|
|
57
|
+
type="application/json"
|
|
58
|
+
download
|
|
59
|
+
class="obtainium-margin"
|
|
60
|
+
target={PAGE.BLANK}>
|
|
61
|
+
{obtainium.label}
|
|
62
|
+
</a>
|
|
63
|
+
</p>
|
|
64
|
+
</div>
|
|
@@ -9,15 +9,15 @@ This file is part of Network Pro.
|
|
|
9
9
|
<!-- cspell:ignore ccby gnugpl -->
|
|
10
10
|
|
|
11
11
|
<script>
|
|
12
|
-
import { base } from
|
|
12
|
+
import { base } from '$app/paths';
|
|
13
13
|
// Import icons for licenses
|
|
14
|
-
import { bySvg, ccSvg } from
|
|
15
|
-
import { CONSTANTS } from
|
|
14
|
+
import { bySvg, ccSvg } from '$lib';
|
|
15
|
+
import { CONSTANTS } from '$lib';
|
|
16
16
|
|
|
17
17
|
// Log the base path to verify its value
|
|
18
18
|
//console.log("Base path:", base);
|
|
19
19
|
|
|
20
|
-
console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
20
|
+
//console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
21
21
|
|
|
22
22
|
const { COMPANY_INFO, CONTACT, PAGE, NAV } = CONSTANTS;
|
|
23
23
|
|
|
@@ -27,10 +27,10 @@ This file is part of Network Pro.
|
|
|
27
27
|
const trademarkLink = `${base}/license#trademark`;
|
|
28
28
|
|
|
29
29
|
/** @type {string} */
|
|
30
|
-
const creatorUrl =
|
|
30
|
+
const creatorUrl = 'https://netwk.pro';
|
|
31
31
|
|
|
32
32
|
/** @type {string} */
|
|
33
|
-
const creatorSlogan =
|
|
33
|
+
const creatorSlogan = 'Locking Down Networks...';
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
36
|
* Icon used in a license object.
|
|
@@ -51,25 +51,25 @@ This file is part of Network Pro.
|
|
|
51
51
|
|
|
52
52
|
const licenses = [
|
|
53
53
|
{
|
|
54
|
-
type:
|
|
54
|
+
type: 'CC BY 4.0',
|
|
55
55
|
url: ccbyLink,
|
|
56
|
-
externalUrl:
|
|
56
|
+
externalUrl: 'https://creativecommons.org/licenses/by/4.0/',
|
|
57
57
|
icons: [
|
|
58
58
|
{
|
|
59
59
|
src: ccSvg,
|
|
60
|
-
alt:
|
|
60
|
+
alt: 'Creative Commons BY',
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
63
|
src: bySvg,
|
|
64
|
-
alt:
|
|
64
|
+
alt: 'Creative Commons BY',
|
|
65
65
|
},
|
|
66
66
|
],
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
|
-
type:
|
|
69
|
+
type: 'GNU GPL',
|
|
70
70
|
url: gnugplLink,
|
|
71
|
-
externalUrl:
|
|
72
|
-
description:
|
|
71
|
+
externalUrl: 'https://fsf.org',
|
|
72
|
+
description: 'Free Software Foundation',
|
|
73
73
|
},
|
|
74
74
|
];
|
|
75
75
|
|
|
@@ -78,15 +78,15 @@ This file is part of Network Pro.
|
|
|
78
78
|
* @type {Object}
|
|
79
79
|
*/
|
|
80
80
|
const namespaceAttributes = {
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
'xmlns:cc': 'http://creativecommons.org/ns#',
|
|
82
|
+
'xmlns:dct': 'http://purl.org/dc/terms/',
|
|
83
83
|
};
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
86
|
* Relation attributes for license links.
|
|
87
87
|
* @type {string}
|
|
88
88
|
*/
|
|
89
|
-
const relLicense =
|
|
89
|
+
const relLicense = 'license noopener noreferrer';
|
|
90
90
|
</script>
|
|
91
91
|
|
|
92
92
|
<!-- BEGIN FOOTER -->
|
|
@@ -116,7 +116,7 @@ This file is part of Network Pro.
|
|
|
116
116
|
<p>
|
|
117
117
|
Licensed under
|
|
118
118
|
{#each licenses as license, index}
|
|
119
|
-
{#if license.type ===
|
|
119
|
+
{#if license.type === 'CC BY 4.0'}
|
|
120
120
|
<a
|
|
121
121
|
href={license.url}
|
|
122
122
|
target={PAGE.SELF}
|
|
@@ -155,7 +155,7 @@ This file is part of Network Pro.
|
|
|
155
155
|
>, either version 3 of the License or (at your option) any later
|
|
156
156
|
version.
|
|
157
157
|
{/if}
|
|
158
|
-
{index < licenses.length - 1 ?
|
|
158
|
+
{index < licenses.length - 1 ? ' and the ' : ''}
|
|
159
159
|
{/each}
|
|
160
160
|
</p>
|
|
161
161
|
</div>
|
|
@@ -7,15 +7,15 @@ This file is part of Network Pro.
|
|
|
7
7
|
========================================================================== -->
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
|
-
import { base } from
|
|
10
|
+
import { base } from '$app/paths';
|
|
11
11
|
|
|
12
12
|
// Log the base path to verify its value
|
|
13
13
|
//console.log("Base path:", base);
|
|
14
14
|
|
|
15
|
-
const homeLink = base ||
|
|
15
|
+
const homeLink = base || '/';
|
|
16
16
|
const aboutLink = `${base}/about`;
|
|
17
17
|
const fossLink = `${base}/foss-spotlight`;
|
|
18
|
-
const blogLink =
|
|
18
|
+
const blogLink = 'https://blog.netwk.pro';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Navigation link object.
|
|
@@ -31,25 +31,25 @@ This file is part of Network Pro.
|
|
|
31
31
|
* @type {NavItem[]}
|
|
32
32
|
*/
|
|
33
33
|
const nav = [
|
|
34
|
-
{ label:
|
|
35
|
-
{ label:
|
|
36
|
-
{ label:
|
|
34
|
+
{ label: 'home', href: homeLink, target: '_self', external: false },
|
|
35
|
+
{ label: 'about', href: aboutLink, target: '_self', external: false },
|
|
36
|
+
{ label: 'foss', href: fossLink, target: '_self', external: false },
|
|
37
37
|
{
|
|
38
|
-
label:
|
|
38
|
+
label: 'blog',
|
|
39
39
|
href: blogLink,
|
|
40
|
-
target:
|
|
40
|
+
target: '_self',
|
|
41
41
|
external: false,
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
|
-
label:
|
|
45
|
-
href:
|
|
46
|
-
target:
|
|
44
|
+
label: 'discussions',
|
|
45
|
+
href: 'https://github.com/netwk-pro/netwk-pro.github.io/discussions',
|
|
46
|
+
target: '_blank',
|
|
47
47
|
external: true,
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
|
-
label:
|
|
51
|
-
href:
|
|
52
|
-
target:
|
|
50
|
+
label: 'link hub',
|
|
51
|
+
href: 'https://linktr.ee/neteng_pro',
|
|
52
|
+
target: '_blank',
|
|
53
53
|
external: true,
|
|
54
54
|
},
|
|
55
55
|
];
|
|
@@ -58,7 +58,7 @@ This file is part of Network Pro.
|
|
|
58
58
|
* Relation attribute for external links.
|
|
59
59
|
* @type {string}
|
|
60
60
|
*/
|
|
61
|
-
const rel =
|
|
61
|
+
const rel = 'noopener noreferrer';
|
|
62
62
|
</script>
|
|
63
63
|
|
|
64
64
|
<!-- BEGIN DEFAULT HEADER -->
|
|
@@ -76,7 +76,7 @@ This file is part of Network Pro.
|
|
|
76
76
|
{/if}
|
|
77
77
|
<!-- Separator logic -->
|
|
78
78
|
{#if index < nav.length - 1}
|
|
79
|
-
{#if label ===
|
|
79
|
+
{#if label === 'blog'}
|
|
80
80
|
<br />
|
|
81
81
|
{:else}
|
|
82
82
|
<span class="goldseparator">|</span>
|