@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.
Files changed (108) hide show
  1. package/CHANGELOG.md +65 -1
  2. package/README.md +26 -18
  3. package/cspell.json +1 -0
  4. package/eslint.config.mjs +48 -48
  5. package/netlify/edge-functions/csp-report.js +31 -31
  6. package/package.json +3 -3
  7. package/playwright.config.js +14 -14
  8. package/postcss.config.mjs +1 -1
  9. package/scripts/auditScripts.js +16 -16
  10. package/scripts/bundleCss.js +5 -5
  11. package/scripts/checkEnv.js +6 -6
  12. package/scripts/checkNode.js +10 -10
  13. package/scripts/checkVersions.js +6 -6
  14. package/scripts/flattenHeaders.js +13 -13
  15. package/scripts/generateTest.js +5 -5
  16. package/scripts/openReport.js +3 -3
  17. package/scripts/validateHeaders.js +13 -13
  18. package/src/app.html +0 -9
  19. package/src/hooks.client.ts +1 -1
  20. package/src/hooks.server.js +31 -32
  21. package/src/lib/components/Badges.svelte +10 -10
  22. package/src/lib/components/CodeBlock.svelte +1 -1
  23. package/src/lib/components/ContainerSection.svelte +1 -1
  24. package/src/lib/components/FullWidthSection.svelte +3 -3
  25. package/src/lib/components/LegalNav.svelte +7 -7
  26. package/src/lib/components/Logo.svelte +9 -9
  27. package/src/lib/components/MetaTags.svelte +4 -4
  28. package/src/lib/components/PWAInstallButton.svelte +4 -4
  29. package/src/lib/components/RedirectPage.svelte +4 -4
  30. package/src/lib/components/SocialMedia.svelte +16 -16
  31. package/src/lib/components/foss/FossItemContent.svelte +27 -58
  32. package/src/lib/components/foss/ObtainiumBlock.svelte +64 -0
  33. package/src/lib/components/layout/Footer.svelte +18 -18
  34. package/src/lib/components/layout/HeaderDefault.svelte +16 -16
  35. package/src/lib/components/layout/HeaderHome.svelte +14 -14
  36. package/src/lib/data/fossData.js +22 -10
  37. package/src/lib/images.js +34 -34
  38. package/src/lib/img/obtainium.png +0 -0
  39. package/src/lib/img/obtainium.webp +0 -0
  40. package/src/lib/index.js +15 -15
  41. package/src/lib/meta.js +29 -29
  42. package/src/lib/pages/AboutContent.svelte +24 -24
  43. package/src/lib/pages/FossContent.svelte +13 -13
  44. package/src/lib/pages/HomeContent.svelte +7 -7
  45. package/src/lib/pages/LicenseContent.svelte +39 -39
  46. package/src/lib/pages/PGPContent.svelte +23 -23
  47. package/src/lib/pages/PrivacyContent.svelte +39 -39
  48. package/src/lib/pages/PrivacyDashboard.svelte +12 -12
  49. package/src/lib/pages/TermsConditionsContent.svelte +29 -29
  50. package/src/lib/pages/TermsUseContent.svelte +26 -26
  51. package/src/lib/registerServiceWorker.js +25 -25
  52. package/src/lib/stores/posthog.js +13 -13
  53. package/src/lib/stores/trackingPreferences.js +19 -19
  54. package/src/lib/styles/css/default.css +30 -0
  55. package/src/lib/styles/global.min.css +1 -1
  56. package/src/lib/types/fossTypes.js +9 -2
  57. package/src/lib/unregisterServiceWorker.js +1 -1
  58. package/src/lib/utils/purify.js +4 -4
  59. package/src/lib/utils/utm.js +2 -2
  60. package/src/routes/+error.svelte +4 -4
  61. package/src/routes/+layout.js +6 -6
  62. package/src/routes/+layout.svelte +29 -29
  63. package/src/routes/+page.server.js +2 -2
  64. package/src/routes/+page.svelte +9 -9
  65. package/src/routes/about/+page.server.js +2 -2
  66. package/src/routes/about/+page.svelte +7 -7
  67. package/src/routes/api/mock-csp/+server.js +3 -3
  68. package/src/routes/consultation/+page.svelte +5 -5
  69. package/src/routes/contact/+page.svelte +5 -5
  70. package/src/routes/foss-spotlight/+page.server.js +2 -2
  71. package/src/routes/foss-spotlight/+page.svelte +7 -7
  72. package/src/routes/license/+page.server.js +2 -2
  73. package/src/routes/license/+page.svelte +7 -7
  74. package/src/routes/pgp/+page.server.js +2 -2
  75. package/src/routes/pgp/+page.svelte +7 -7
  76. package/src/routes/pgp/[key]/+server.js +9 -9
  77. package/src/routes/privacy/+page.server.js +2 -2
  78. package/src/routes/privacy/+page.svelte +7 -7
  79. package/src/routes/privacy-dashboard/+page.server.js +2 -2
  80. package/src/routes/privacy-dashboard/+page.svelte +8 -8
  81. package/src/routes/privacy-rights/+page.svelte +5 -5
  82. package/src/routes/status/+page.server.js +2 -2
  83. package/src/routes/terms-conditions/+page.server.js +2 -2
  84. package/src/routes/terms-conditions/+page.svelte +7 -7
  85. package/src/routes/terms-of-use/+page.server.js +2 -2
  86. package/src/routes/terms-of-use/+page.svelte +7 -7
  87. package/src/service-worker.js +86 -86
  88. package/static/bin/heliboard.json +8 -0
  89. package/static/disableSw.js +2 -2
  90. package/static/offline.html +7 -7
  91. package/stylelint.config.js +56 -56
  92. package/svelte.config.js +6 -6
  93. package/tests/e2e/app.spec.js +27 -27
  94. package/tests/e2e/mobile.spec.js +18 -18
  95. package/tests/e2e/shared/helpers.js +4 -4
  96. package/tests/internal/auditCoverage.test.js +24 -24
  97. package/tests/unit/checkEnv.test.js +10 -10
  98. package/tests/unit/checkVersions.test.js +4 -4
  99. package/tests/unit/csp-report.test.js +24 -24
  100. package/tests/unit/demo.test.js +3 -3
  101. package/tests/unit/lib/utils/purify.test.js +12 -12
  102. package/tests/unit/routes/page.svelte.test.js +10 -10
  103. package/tests/unit/unregisterServiceWorker.test.js +5 -5
  104. package/tests/unit/utm.test.js +13 -13
  105. package/vite.config.js +5 -5
  106. package/vitest-setup-client.js +4 -4
  107. package/vitest.config.client.js +15 -15
  108. 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 "$app/paths";
11
- import { CONSTANTS } from "$lib";
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: "Privacy Policy",
41
+ text: 'Privacy Policy',
42
42
  },
43
43
  {
44
44
  href: pdashLink,
45
- text: "Privacy Dashboard",
45
+ text: 'Privacy Dashboard',
46
46
  },
47
47
  ],
48
48
  [
49
49
  {
50
50
  href: termsLink,
51
- text: "Terms of Use",
51
+ text: 'Terms of Use',
52
52
  },
53
53
  {
54
54
  href: licenseLink,
55
- text: "Legal",
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 "$lib";
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 = "sync";
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 = "eager";
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 = "logo";
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 = "Network Pro Strategies";
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 = "Locking Down Networks";
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 = "Unlocking Confidence™";
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 = "high";
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 = "Security | Networking | Privacy";
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 "$lib";
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 = "/img/banner-og-1200x630.png";
21
+ const ogImg = '/img/banner-og-1200x630.png';
22
22
  const companyName = COMPANY_INFO.NAME;
23
- const twitterAct = "@NetEng_Pro";
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 "svelte";
11
- import { fade } from "svelte/transition";
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("pwa-install-available", handleInstallPrompt);
29
+ window.addEventListener('pwa-install-available', handleInstallPrompt);
30
30
 
31
31
  return () => {
32
- window.removeEventListener("pwa-install-available", handleInstallPrompt);
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 "svelte";
11
- import FullWidthSection from "$lib/components/FullWidthSection.svelte";
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("⛔ No redirect target provided");
18
+ console.warn('⛔ No redirect target provided');
19
19
  return;
20
20
  }
21
21
 
22
- console.log("✅ Starting redirect to:", to);
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: "https://instagram.com/netwk_pro",
26
- label: "Instagram",
27
- iconClass: "fab fa-square-instagram fa-2x",
25
+ href: 'https://instagram.com/netwk_pro',
26
+ label: 'Instagram',
27
+ iconClass: 'fab fa-square-instagram fa-2x',
28
28
  },
29
29
  {
30
- href: "https://facebook.com/neteng.pro",
31
- label: "Facebook",
32
- iconClass: "fab fa-square-facebook fa-2x",
30
+ href: 'https://facebook.com/neteng.pro',
31
+ label: 'Facebook',
32
+ iconClass: 'fab fa-square-facebook fa-2x',
33
33
  },
34
34
  {
35
- href: "https://linkedin.com/company/netwk-pro",
36
- label: "LinkedIn",
37
- iconClass: "fab fa-linkedin fa-2x",
35
+ href: 'https://linkedin.com/company/netwk-pro',
36
+ label: 'LinkedIn',
37
+ iconClass: 'fab fa-linkedin fa-2x',
38
38
  },
39
39
  {
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",
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: "https://github.com/netwk-pro/",
47
- label: "GitHub",
48
- iconClass: "fab fa-square-github fa-2x",
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 { onMount } from "svelte";
14
- import { sanitizeHtml } from "$lib/utils/purify.js";
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
- console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
16
+ import { onMount } from 'svelte';
17
+ import { sanitizeHtml } from '$lib/utils/purify.js';
18
+ import { obtainiumPng, obtainiumWbp } from '$lib';
21
19
 
22
- const { PAGE, NAV } = CONSTANTS;
20
+ import { CONSTANTS } from '$lib';
21
+
22
+ //console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
23
23
 
24
- /** @type {string} */
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 = "async";
27
+ const decoding = 'async';
30
28
 
31
29
  /** @type {"lazy"} */
32
- const loading = "lazy";
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 ? "sync" : decoding}
70
- loading={isFirst ? "eager" : loading}
71
- fetchpriority={isFirst ? "high" : "auto"}
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
- style="width: 50px; height: 50px" />
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
  &nbsp;
107
105
 
108
- <div class="linksheet">
106
+ <div class="obtainium">
109
107
  <!-- Special handling for LinkSheet's Obtainium link -->
110
- {#if fossItem.id === "linksheet"}
111
- <div class="linksheet-entry">
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, hideLabels }, i}
142
- <!-- Skip the first link for LinkSheet since we already handled it separately -->
143
- {#if !(fossItem.id === "linksheet" && i === 0)}
144
- <div class="linksheet-entry">
145
- {#if !hideLabels && label && href}
146
- <strong>{label}:</strong>
147
- <a rel={PAGE.REL} {href} target={PAGE.BLANK}>{href}</a>
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 "$app/paths";
12
+ import { base } from '$app/paths';
13
13
  // Import icons for licenses
14
- import { bySvg, ccSvg } from "$lib";
15
- import { CONSTANTS } from "$lib";
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 = "https://netwk.pro";
30
+ const creatorUrl = 'https://netwk.pro';
31
31
 
32
32
  /** @type {string} */
33
- const creatorSlogan = "Locking Down Networks...";
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: "CC BY 4.0",
54
+ type: 'CC BY 4.0',
55
55
  url: ccbyLink,
56
- externalUrl: "https://creativecommons.org/licenses/by/4.0/",
56
+ externalUrl: 'https://creativecommons.org/licenses/by/4.0/',
57
57
  icons: [
58
58
  {
59
59
  src: ccSvg,
60
- alt: "Creative Commons BY",
60
+ alt: 'Creative Commons BY',
61
61
  },
62
62
  {
63
63
  src: bySvg,
64
- alt: "Creative Commons BY",
64
+ alt: 'Creative Commons BY',
65
65
  },
66
66
  ],
67
67
  },
68
68
  {
69
- type: "GNU GPL",
69
+ type: 'GNU GPL',
70
70
  url: gnugplLink,
71
- externalUrl: "https://fsf.org",
72
- description: "Free Software Foundation",
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
- "xmlns:cc": "http://creativecommons.org/ns#",
82
- "xmlns:dct": "http://purl.org/dc/terms/",
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 = "license noopener noreferrer";
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 === "CC BY 4.0"}
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 ? " and the " : ""}
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 "$app/paths";
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 = "https://blog.netwk.pro";
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: "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 },
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: "blog",
38
+ label: 'blog',
39
39
  href: blogLink,
40
- target: "_self",
40
+ target: '_self',
41
41
  external: false,
42
42
  },
43
43
  {
44
- label: "discussions",
45
- href: "https://github.com/netwk-pro/netwk-pro.github.io/discussions",
46
- target: "_blank",
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: "link hub",
51
- href: "https://linktr.ee/neteng_pro",
52
- target: "_blank",
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 = "noopener noreferrer";
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 === "blog"}
79
+ {#if label === 'blog'}
80
80
  <br />
81
81
  {:else}
82
82
  <span class="goldseparator">|</span>