generated from nhcarrigan/template
Compare commits
27 Commits
Author | SHA1 | Date | |
---|---|---|---|
58773fc193
|
|||
5d0660c003 | |||
ab663e9f4b | |||
2bd410631b
|
|||
25ec9f8e2a | |||
1f450156c8
|
|||
5e9d0dd11e
|
|||
4f05dbafbb
|
|||
934de19c1e
|
|||
4a76b22119
|
|||
542aef157a
|
|||
2e72c34c2d
|
|||
c9ae8804eb
|
|||
a5f17bb2eb
|
|||
06e58752b9
|
|||
db4dcc3090
|
|||
53aa95c9c2
|
|||
93a2339c92
|
|||
3e3213c554
|
|||
2e7d5d26e4
|
|||
52a7b5b812
|
|||
6be8026024
|
|||
c10089c351
|
|||
5b8b597d7d
|
|||
dd7d4042ea
|
|||
bf87dc345f
|
|||
017261c80b
|
34
.gitea/workflows/sonar.yml
Normal file
34
.gitea/workflows/sonar.yml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
name: Code Analysis
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sonar:
|
||||||
|
name: SonarQube
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Source Files
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: SonarCube Scan
|
||||||
|
uses: SonarSource/sonarqube-scan-action@v4
|
||||||
|
timeout-minutes: 10
|
||||||
|
env:
|
||||||
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||||
|
SONAR_HOST_URL: "https://quality.nhcarrigan.com"
|
||||||
|
with:
|
||||||
|
args: >
|
||||||
|
-Dsonar.sources=.
|
||||||
|
-Dsonar.projectKey=website-headers
|
||||||
|
|
||||||
|
- name: SonarQube Quality Gate check
|
||||||
|
uses: sonarsource/sonarqube-quality-gate-action@v1
|
||||||
|
with:
|
||||||
|
pollingTimeoutSec: 600
|
||||||
|
env:
|
||||||
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||||
|
SONAR_HOST_URL: "https://quality.nhcarrigan.com"
|
7
.vscode/settings.json
vendored
7
.vscode/settings.json
vendored
@ -8,5 +8,10 @@
|
|||||||
"sonarlint.connectedMode.project": {
|
"sonarlint.connectedMode.project": {
|
||||||
"connectionId": "nhcarrigan",
|
"connectionId": "nhcarrigan",
|
||||||
"projectKey": "nhcarrigan_website-headers"
|
"projectKey": "nhcarrigan_website-headers"
|
||||||
}
|
},
|
||||||
|
"cSpell.words": [
|
||||||
|
"Adsense",
|
||||||
|
"nhcarrigan",
|
||||||
|
"noreferrer"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
19
index.html
19
index.html
@ -5,6 +5,25 @@
|
|||||||
<main>
|
<main>
|
||||||
<h1>Test</h1>
|
<h1>Test</h1>
|
||||||
<p>Just a demo page.</p>
|
<p>Just a demo page.</p>
|
||||||
|
<div>
|
||||||
|
Pokem ipsum dolor sit amet Red Natu Misdreavus Marowak Kyogre Deoxys. Glitch City Rampardos Giovanni Heatran Turtwig Scratch Lileep. Sunt in culpa Regirock Deerling Togekiss Shaymin Serperior Reshiram. Normal Gurdurr Probopass Ampharos The Power Of One Vigoroth Pichu. Mirror Move Delibird Slowking Nurse Joy Cherrim Vanillish Hippowdon.
|
||||||
|
|
||||||
|
Gold Maractus Feebas Thunder Badge blast off at the speed of light Mareep Ice. Rock Ditto Pachirisu Glaceon Vulpix Teleport Qwilfish. Fuchsia City Pidgeot Leaf Green Stantler Electric Hidden Machine Goldeen. Bulbasaur Swadloon Sandslash Beldum Serperior Burmy Deoxys. Charmander Pokemon The Movie 2000 excepteur sint occaecat cupidatat non proident Pokemon The Movie 2000 Cubchoo Magnemite Pansage.
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet S.S. Anne Haxorus Lapras Dark Baltoy Kingler. Fog Badge Jolteon Accelgor Purugly Chikorita Probopass Glalie. Poison Sting Braviary Alakazam Darkrai Kricketune Toxicroak Cofagrigus. Razor Leaf Mew Pokemon 4Ever a wild Pokemon appeared Staravia Timburr Beheeyem. Teleport Dusclops Timburr Houndour Nidorino Haxorus Pignite.
|
||||||
|
|
||||||
|
Thundershock Porygon lorem ipsum dolor sit amet Roserade Wobbuffet Moltres Venonat. Splash Parasect Piplup Rotom Razor Leaf Rotom Persian. Viridian City Ghost Tail Whip Smoochum Gurdurr Giratina Tyranitar. Misty Slowking Cubchoo Ciccino Flaaffy Crustle Dratini. Celadon Department Store Purugly Clamperl Kricketot Lanturn Wurmple Cyndaquil.
|
||||||
|
|
||||||
|
Glacier Badge Magikarp used Splash Nidoran Smoochum Bidoof Regirock Mewtwo. Sed do eiusmod tempor incididunt Volcarona Yanmega Probopass Weepinbell Marowak Hitmonchan. Charmeleon Johto Garbodor Octillery Soda Pop Liepard Mantine. Plain Badge Watchog Baltoy Zephyr Badge Cleffa Pokemon The Movie 2000 Whiscash. Mewtwo Strikes Back Ice Virizion prepare for trouble Azumarill Darumaka Snorlax.
|
||||||
|
|
||||||
|
Electric Golurk Alakazam lorem ipsum dolor sit amet Plain Badge Lotad Poliwhirl. Dragon Rage Kabuto Rotom Ponyta Golurk Vigoroth Seadra. Mewtwo Strikes Back Braviary Patrat Poison Kakuna Tropius Technical Machine. Thundershock Jigglypuff Pikachu Ampharos Ambipom Ditto Elgyem. Fire Red Lillipup Breloom Cranidos Squirtle Skiploom I wanna be the very best.
|
||||||
|
|
||||||
|
Vermilion City Minccino Prinplup Gothitelle Thundurus searching far and wide Golbat. Blue Magcargo Honchkrow Delcatty Mawile Gigalith Nidorina. Fuchsia City Youngster wants to fight Patrat Pidgeot Conkeldurr Pokemon Fan Club Chairman Magneton. Teleport Ditto Woobat Mandibuzz Eelektross Burnt Berry Rhydon. Dark Ash Mr. Mime Musharna Mew Bidoof Volcano Badge.
|
||||||
|
|
||||||
|
Brock Ash's mother Kricketot Hariyama Metagross Crawdaunt Marshtomp. Charizard Breloom Maractus Servine Burnt Berry Gothita Treecko. Leaf Green Squirtle Drilbur Tynamo Remoraid Trapinch Scolipede. Team Rocket Leech Seed Torchic Foongus Mirror Move Grovyle Clefable. Velit esse cillum dolore eu fugiat nulla pariatur Cloyster Feebas Carvanha Leech Life Pidgeot Venomoth.
|
||||||
|
|
||||||
|
Yellow Purrloin Nurse Joy Voltorb Mienfoo Voltorb Tail Whip. Sed do eiusmod tempor incididunt Bidoof Oddish Spheal Jirachi Garchomp Liepard. Storm Badge Shelgon Musharna Flareon Terrakion Shedinja Marowak. Charmeleon Bonsly Wigglytuff Regice Mantyke Ash Ketchum Marsh Badge. Silver Forretress Tynamo Masquerain Tangrowth Igglybuff Clamperl.
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
<script src="./prod/index.js"></script>
|
<script src="./prod/index.js"></script>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "website-headers",
|
"name": "website-headers",
|
||||||
"version": "1.2.0",
|
"version": "3.0.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
604
src/index.ts
604
src/index.ts
@ -5,10 +5,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// #region Version
|
// #region Version
|
||||||
const version = "{{ version }}";
|
const nhcarriganHeadersVersion = "{{ version }}";
|
||||||
console.log(`
|
console.log(`
|
||||||
========================================
|
========================================
|
||||||
Loading NHCarrigan library v${version}.
|
Loading NHCarrigan library v${nhcarriganHeadersVersion}.
|
||||||
Copyright (c) ${new Date().getFullYear().
|
Copyright (c) ${new Date().getFullYear().
|
||||||
toString()} NHCarrigan
|
toString()} NHCarrigan
|
||||||
Changelog: https://codeberg.org/nhcarrigan/website-headers/releases
|
Changelog: https://codeberg.org/nhcarrigan/website-headers/releases
|
||||||
@ -19,12 +19,18 @@ Questions? Contact us at https://docs.nhcarrigan.com/about/contact
|
|||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region Query Selectors
|
// #region Query Selectors
|
||||||
const head = document.querySelector("head");
|
const nhcarriganHeadersHead = document.querySelector("head");
|
||||||
const body = document.querySelector("body");
|
const nhcarriganHeadersBody = document.querySelector("body");
|
||||||
const title = document.querySelector("title");
|
const nhcarriganHeadersTitle = document.querySelector("title");
|
||||||
const description = document.querySelector(`meta[name="description"]`);
|
const nhcarriganHeadersDescription = document.querySelector(
|
||||||
|
`meta[name="description"]`,
|
||||||
|
);
|
||||||
|
|
||||||
const { href: url, hostname } = window.location;
|
const {
|
||||||
|
href: nhcarriganHeadersUrl,
|
||||||
|
hostname: nhcarriganHeadersHostname,
|
||||||
|
pathname: nhcarriganHeadersPathname,
|
||||||
|
} = window.location;
|
||||||
|
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
@ -34,86 +40,104 @@ const { href: url, hostname } = window.location;
|
|||||||
* The title and description are set by each website. This should
|
* The title and description are set by each website. This should
|
||||||
* only load things like open graph data and favicons.
|
* only load things like open graph data and favicons.
|
||||||
*/
|
*/
|
||||||
const openGraphTitle = document.createElement("meta");
|
const nhcarriganHeadersOpenGraphTitle = document.createElement("meta");
|
||||||
openGraphTitle.setAttribute("property", "og:title");
|
nhcarriganHeadersOpenGraphTitle.setAttribute("property", "og:title");
|
||||||
openGraphTitle.setAttribute("content", title?.innerText ?? "NHCarrigan");
|
nhcarriganHeadersOpenGraphTitle.setAttribute(
|
||||||
const openGraphDescription = document.createElement("meta");
|
|
||||||
openGraphDescription.setAttribute("property", "og:description");
|
|
||||||
openGraphDescription.setAttribute(
|
|
||||||
"content",
|
"content",
|
||||||
description?.getAttribute("content")
|
nhcarriganHeadersTitle?.innerText ?? "NHCarrigan",
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
?? "We are a software engineering and community management consulting firm.",
|
|
||||||
);
|
);
|
||||||
const openGraphImage = document.createElement("meta");
|
const nhcarriganHeadersOpenGraphDescription = document.createElement("meta");
|
||||||
openGraphImage.setAttribute("property", "og:image");
|
nhcarriganHeadersOpenGraphDescription.setAttribute(
|
||||||
openGraphImage.setAttribute(
|
"property",
|
||||||
|
"og:description",
|
||||||
|
);
|
||||||
|
nhcarriganHeadersOpenGraphDescription.setAttribute(
|
||||||
|
"content",
|
||||||
|
nhcarriganHeadersDescription?.getAttribute("content")
|
||||||
|
?? "We are a software engineering and community management consulting firm.",
|
||||||
|
);
|
||||||
|
const nhcarriganHeadersOpenGraphImage = document.createElement("meta");
|
||||||
|
nhcarriganHeadersOpenGraphImage.setAttribute("property", "og:image");
|
||||||
|
nhcarriganHeadersOpenGraphImage.setAttribute(
|
||||||
"content",
|
"content",
|
||||||
"https://cdn.nhcarrigan.com/og-image.png",
|
"https://cdn.nhcarrigan.com/og-image.png",
|
||||||
);
|
);
|
||||||
const openGraphUrl = document.createElement("meta");
|
const nhcarriganHeadersOpenGraphUrl = document.createElement("meta");
|
||||||
openGraphUrl.setAttribute("property", "og:url");
|
nhcarriganHeadersOpenGraphUrl.setAttribute("property", "og:url");
|
||||||
openGraphUrl.setAttribute("content", url);
|
nhcarriganHeadersOpenGraphUrl.setAttribute("content", nhcarriganHeadersUrl);
|
||||||
const openGraphType = document.createElement("meta");
|
const nhcarriganHeadersOpenGraphType = document.createElement("meta");
|
||||||
openGraphType.setAttribute("property", "og:type");
|
nhcarriganHeadersOpenGraphType.setAttribute("property", "og:type");
|
||||||
openGraphType.setAttribute("content", "website");
|
nhcarriganHeadersOpenGraphType.setAttribute("content", "website");
|
||||||
|
|
||||||
const twitterCard = document.createElement("meta");
|
const nhcarriganHeadersTwitterCard = document.createElement("meta");
|
||||||
twitterCard.setAttribute("name", "twitter:card");
|
nhcarriganHeadersTwitterCard.setAttribute("name", "twitter:card");
|
||||||
twitterCard.setAttribute("content", "summary_large_image");
|
nhcarriganHeadersTwitterCard.setAttribute("content", "summary_large_image");
|
||||||
const twitterDomain = document.createElement("meta");
|
const nhcarriganHeadersTwitterDomain = document.createElement("meta");
|
||||||
twitterDomain.setAttribute("name", "twitter:domain");
|
nhcarriganHeadersTwitterDomain.setAttribute("name", "twitter:domain");
|
||||||
twitterDomain.setAttribute("content", hostname);
|
nhcarriganHeadersTwitterDomain.setAttribute(
|
||||||
const twitterUrl = document.createElement("meta");
|
|
||||||
twitterUrl.setAttribute("name", "twitter:url");
|
|
||||||
twitterUrl.setAttribute("content", url);
|
|
||||||
const twitterTitle = document.createElement("meta");
|
|
||||||
twitterTitle.setAttribute("name", "twitter:title");
|
|
||||||
twitterTitle.setAttribute("content", title?.innerText ?? "NHCarrigan");
|
|
||||||
const twitterDescription = document.createElement("meta");
|
|
||||||
twitterDescription.setAttribute("name", "twitter:description");
|
|
||||||
twitterDescription.setAttribute(
|
|
||||||
"content",
|
"content",
|
||||||
description?.getAttribute("content")
|
nhcarriganHeadersHostname,
|
||||||
// eslint-disable-next-line stylistic/max-len
|
);
|
||||||
?? "We are a software engineering and community management consulting firm.",
|
const nhcarriganHeadersTwitterUrl = document.createElement("meta");
|
||||||
|
nhcarriganHeadersTwitterUrl.setAttribute("name", "twitter:url");
|
||||||
|
nhcarriganHeadersTwitterUrl.setAttribute("content", nhcarriganHeadersUrl);
|
||||||
|
const nhcarriganHeadersTwitterTitle = document.createElement("meta");
|
||||||
|
nhcarriganHeadersTwitterTitle.setAttribute("name", "twitter:title");
|
||||||
|
nhcarriganHeadersTwitterTitle.setAttribute(
|
||||||
|
"content",
|
||||||
|
nhcarriganHeadersTitle?.innerText ?? "NHCarrigan",
|
||||||
|
);
|
||||||
|
const nhcarriganHeadersTwitterDescription = document.createElement("meta");
|
||||||
|
nhcarriganHeadersTwitterDescription.setAttribute("name", "twitter:description");
|
||||||
|
nhcarriganHeadersTwitterDescription.setAttribute(
|
||||||
|
"content",
|
||||||
|
nhcarriganHeadersDescription?.getAttribute("content")
|
||||||
|
?? "We are a software engineering and community management consulting firm.",
|
||||||
|
);
|
||||||
|
const nhcarriganHeadersTwitterImage = document.createElement("meta");
|
||||||
|
nhcarriganHeadersTwitterImage.setAttribute("name", "twitter:image");
|
||||||
|
nhcarriganHeadersTwitterImage.setAttribute(
|
||||||
|
"content",
|
||||||
|
"https://cdn.nhcarrigan.com/og-image.png",
|
||||||
);
|
);
|
||||||
const twitterImage = document.createElement("meta");
|
|
||||||
twitterImage.setAttribute("name", "twitter:image");
|
|
||||||
twitterImage.setAttribute("content", "https://cdn.nhcarrigan.com/og-image.png");
|
|
||||||
|
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region Favicon
|
// #region Favicon
|
||||||
|
|
||||||
const favicon = document.createElement("link");
|
const nhcarriganHeadersFavicon = document.createElement("link");
|
||||||
favicon.rel = "icon";
|
nhcarriganHeadersFavicon.rel = "icon";
|
||||||
favicon.type = "image/x-icon";
|
nhcarriganHeadersFavicon.type = "image/x-icon";
|
||||||
favicon.href = "https://cdn.nhcarrigan.com/favicon/favicon.ico";
|
nhcarriganHeadersFavicon.href
|
||||||
const appleTouchIcon = document.createElement("link");
|
= "https://cdn.nhcarrigan.com/favicon/favicon.ico";
|
||||||
appleTouchIcon.rel = "apple-touch-icon";
|
const nhcarriganHeadersAppleTouchIcon = document.createElement("link");
|
||||||
appleTouchIcon.href = "https://cdn.nhcarrigan.com/favicon/apple-touch-icon.png";
|
nhcarriganHeadersAppleTouchIcon.rel = "apple-touch-icon";
|
||||||
const smallIcon = document.createElement("link");
|
nhcarriganHeadersAppleTouchIcon.href
|
||||||
smallIcon.rel = "icon";
|
= "https://cdn.nhcarrigan.com/favicon/apple-touch-icon.png";
|
||||||
smallIcon.href = "https://cdn.nhcarrigan.com/favicon/favicon-16x16.png";
|
const nhcarriganHeadersSmallIcon = document.createElement("link");
|
||||||
const largeIcon = document.createElement("link");
|
nhcarriganHeadersSmallIcon.rel = "icon";
|
||||||
largeIcon.rel = "icon";
|
nhcarriganHeadersSmallIcon.href
|
||||||
largeIcon.href = "https://cdn.nhcarrigan.com/favicon/favicon-32x32.png";
|
= "https://cdn.nhcarrigan.com/favicon/favicon-16x16.png";
|
||||||
|
const nhcarriganHeadersLargeIcon = document.createElement("link");
|
||||||
|
nhcarriganHeadersLargeIcon.rel = "icon";
|
||||||
|
nhcarriganHeadersLargeIcon.href
|
||||||
|
= "https://cdn.nhcarrigan.com/favicon/favicon-32x32.png";
|
||||||
|
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region Styles
|
// #region Styles
|
||||||
|
|
||||||
const styles = document.createElement("style");
|
const nhcarriganHeadersStyles = document.createElement("style");
|
||||||
styles.innerHTML = `
|
nhcarriganHeadersStyles.id = "nhcarrigan-global-styles";
|
||||||
|
nhcarriganHeadersStyles.innerHTML = `
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'OpenDyslexic';
|
font-family: 'OpenDyslexic';
|
||||||
src: url('https://cdn.nhcarrigan.com/fonts/OpenDyslexicMono-Regular.otf') format('opentype');
|
src: url('https://cdn.nhcarrigan.com/fonts/OpenDyslexicMono-Regular.otf') format('opentype');
|
||||||
}
|
}
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--foreground: #04624f;
|
--foreground: #2a0a18;
|
||||||
--background: #abfcecdd;
|
--background: #ffb6c1bb;
|
||||||
}
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
@ -152,14 +176,11 @@ main {
|
|||||||
width: 95%;
|
width: 95%;
|
||||||
max-width: 1080px;
|
max-width: 1080px;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
margin-bottom: 100px;
|
margin-bottom: 85px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
footer {
|
footer {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
color: var(--foreground);
|
color: var(--foreground);
|
||||||
background-color: var(--background);
|
background-color: var(--background);
|
||||||
position: fixed;
|
position: fixed;
|
||||||
@ -167,6 +188,29 @@ footer {
|
|||||||
height: 75px;
|
height: 75px;
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
}
|
}
|
||||||
|
#footer-inner-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 75px;
|
||||||
|
}
|
||||||
|
#footer-badge-container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(8, 1fr);
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-around;
|
||||||
|
}
|
||||||
|
#show-socials-button, #theme-select-button {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
cursor: url('https://cdn.nhcarrigan.com/cursors/pointer.cur'), pointer;
|
||||||
|
color: var(--foreground);
|
||||||
|
font-size: 1rem;
|
||||||
|
font-family: 'OpenDyslexic', monospace;
|
||||||
|
}
|
||||||
|
#show-socials-button > i, #theme-select-button > i {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
a {
|
a {
|
||||||
color: unset;
|
color: unset;
|
||||||
cursor: url('https://cdn.nhcarrigan.com/cursors/pointer.cur'), pointer;
|
cursor: url('https://cdn.nhcarrigan.com/cursors/pointer.cur'), pointer;
|
||||||
@ -175,16 +219,52 @@ a {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
#audio-theme-button {
|
#social-list {
|
||||||
background: none;
|
position: absolute;
|
||||||
border: none;
|
bottom: 75px;
|
||||||
cursor: url('https://cdn.nhcarrigan.com/cursors/pointer.cur'), pointer;
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100vw;
|
||||||
|
max-width: 400px;
|
||||||
|
padding: 10px;
|
||||||
|
background-color: var(--background);
|
||||||
color: var(--foreground);
|
color: var(--foreground);
|
||||||
|
border-radius: 10px;
|
||||||
|
border: 1px solid var(--foreground);
|
||||||
|
display: none;
|
||||||
|
z-index: 1000;
|
||||||
}
|
}
|
||||||
@media screen and (max-width: 600px) {
|
.social-list-item {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
.social-list-item > a {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.social-list-divider {
|
||||||
|
border: 0.5px solid var(--foreground);
|
||||||
|
}
|
||||||
|
.social-list-item:hover {
|
||||||
|
background-color: var(--foreground);
|
||||||
|
color: var(--background);
|
||||||
|
}
|
||||||
|
.is-dark {
|
||||||
|
--foreground: #ffb6c1;
|
||||||
|
--background: #2a0a18bb;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 625px) {
|
||||||
#tree-nation-offset-website {
|
#tree-nation-offset-website {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
footer, #footer-inner-container {
|
||||||
|
height: 50px;
|
||||||
|
justify-content: space-around;
|
||||||
|
}
|
||||||
|
main {
|
||||||
|
margin-bottom: 60px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
@ -192,45 +272,86 @@ a {
|
|||||||
|
|
||||||
// #region Components
|
// #region Components
|
||||||
|
|
||||||
const footer = document.createElement("footer");
|
const nhcarriganHeadersFooter = document.createElement("footer");
|
||||||
footer.innerHTML = `
|
nhcarriganHeadersFooter.innerHTML = `
|
||||||
<p>© Naomi Carrigan</p>
|
<div id="footer-inner-container">
|
||||||
<a href="https://chat.nhcarrigan.com" target="_blank" rel="noreferrer">
|
<p>© <a href="https://nhcarrigan.com" target="_blank">Naomi Carrigan</a></p>
|
||||||
<i class="fa-solid fa-comments"></i>
|
<button id="show-socials-button" type="button">
|
||||||
</a>
|
<i class="fa-solid fa-share-nodes"></i> Connect with Us
|
||||||
<button id="audio-theme-button" type="button">
|
|
||||||
<i class="fa-solid fa-play"></i>
|
|
||||||
</button>
|
</button>
|
||||||
|
<button id="theme-select-button" type="button">
|
||||||
|
<i id="theme-select-icon" class="fa-solid fa-moon"></i> Toggle Theme
|
||||||
|
</button>
|
||||||
|
<a href="https://buy.stripe.com/cN24iTfqu1j6b3afZ2" target="_blank" rel="noreferrer">
|
||||||
|
<img src="https://cdn.nhcarrigan.com/donate.png" alt="Donate" style="width: 70px; height: 70px;">
|
||||||
|
</a>
|
||||||
<div id="tree-nation-offset-website"></div>
|
<div id="tree-nation-offset-website"></div>
|
||||||
|
</div>
|
||||||
|
<div id="social-list">
|
||||||
|
<div class="social-list-item">
|
||||||
|
<a href="https://chat.nhcarrigan.com" target="_blank" rel="noreferrer">
|
||||||
|
<i class="fa-brands fa-discord"></i><span>Join our Discord~!</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr class="social-list-divider" />
|
||||||
|
<div class="social-list-item">
|
||||||
|
<a href="https://forum.nhcarrigan.com" target="_blank" rel="noreferrer">
|
||||||
|
<i class="fa-brands fa-discourse"></i><span>Sign up for our forum~!</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr class="social-list-divider" />
|
||||||
|
<div class="social-list-item">
|
||||||
|
<a href="https://git.nhcarrigan.com" target="_blank" rel="noreferrer">
|
||||||
|
<i class="fa-brands fa-git-alt"></i><span>Check out our source code~!</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr class="social-list-divider" />
|
||||||
|
<div class="social-list-item">
|
||||||
|
<a href="https://bsky.app/profile/nhcarrigan.com" target="_blank" rel="noreferrer">
|
||||||
|
<i class="fa-brands fa-bluesky"></i><span>Follow us on Bluesky~!</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr class="social-list-divider" />
|
||||||
|
<div class="social-list-item">
|
||||||
|
<a href="https://www.linkedin.com/company/nhcarrigan" target="_blank" rel="noreferrer">
|
||||||
|
<i class="fa-brands fa-linkedin"></i><span>Connect with us on LinkedIn~!</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr class="social-list-divider" />
|
||||||
|
<div class="social-list-item">
|
||||||
|
<a href="https://www.reddit.com/r/nhcarrigan/" target="_blank" rel="noreferrer">
|
||||||
|
<i class="fa-brands fa-reddit"></i><span>Join our subreddit~!</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr class="social-list-divider" />
|
||||||
|
<div class="social-list-item">
|
||||||
|
<a href="https://www.youtube.com/@naomilgbt" target="_blank" rel="noreferrer">
|
||||||
|
<i class="fa-brands fa-youtube"></i><span>Subscribe to our YouTube~!</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr class="social-list-divider" />
|
||||||
|
<div class="social-list-item">
|
||||||
|
<a href="https://twitch.tv/naomilgbt" target="_blank" rel="noreferrer">
|
||||||
|
<i class="fa-brands fa-twitch"></i><span>Subscribe to our Twitch~!</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr class="social-list-divider" />
|
||||||
|
<div class="social-list-item">
|
||||||
|
<a href="https://x.com/nhcarrigan1" target="_blank" rel="noreferrer">
|
||||||
|
<i class="fa-brands fa-twitter"></i><span>We are even on Twitter~!</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const videoOverlay = document.createElement("video");
|
|
||||||
videoOverlay.autoplay = true;
|
|
||||||
videoOverlay.loop = true;
|
|
||||||
videoOverlay.muted = true;
|
|
||||||
videoOverlay.playsInline = true;
|
|
||||||
videoOverlay.src = "https://cdn.nhcarrigan.com/overlay.webm";
|
|
||||||
videoOverlay.style.pointerEvents = "none";
|
|
||||||
videoOverlay.style.position = "fixed";
|
|
||||||
videoOverlay.style.top = "0";
|
|
||||||
videoOverlay.style.left = "0";
|
|
||||||
videoOverlay.style.opacity = "0.25";
|
|
||||||
videoOverlay.style.width = "100vw";
|
|
||||||
videoOverlay.style.height = "100vh";
|
|
||||||
videoOverlay.style.objectFit = "cover";
|
|
||||||
videoOverlay.style.zIndex = "10000";
|
|
||||||
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region Scripts
|
// #region Scripts
|
||||||
|
|
||||||
const treeNation = document.createElement("script");
|
const nhcarriganHeadersTreeNation = document.createElement("script");
|
||||||
treeNation.src
|
nhcarriganHeadersTreeNation.src
|
||||||
= "https://widgets.tree-nation.com/js/widgets/v1/widgets.min.js?v=1.0";
|
= "https://widgets.tree-nation.com/js/widgets/v1/widgets.min.js?v=1.0";
|
||||||
const treeNationBottom = document.createElement("script");
|
const nhcarriganHeadersTreeNationBottom = document.createElement("script");
|
||||||
treeNationBottom.defer = true;
|
nhcarriganHeadersTreeNationBottom.defer = true;
|
||||||
treeNationBottom.async = true;
|
nhcarriganHeadersTreeNationBottom.async = true;
|
||||||
treeNationBottom.innerHTML = `
|
nhcarriganHeadersTreeNationBottom.innerHTML = `
|
||||||
const interval = setInterval(() => {
|
const interval = setInterval(() => {
|
||||||
const tree = document.querySelector("#tree-nation-offset-website");
|
const tree = document.querySelector("#tree-nation-offset-website");
|
||||||
if (!tree) {
|
if (!tree) {
|
||||||
@ -245,93 +366,167 @@ const interval = setInterval(() => {
|
|||||||
clearInterval(interval);
|
clearInterval(interval);
|
||||||
}, 1000);
|
}, 1000);
|
||||||
`;
|
`;
|
||||||
const fontAwesome = document.createElement("script");
|
const nhcarriganHeadersFontAwesome = document.createElement("script");
|
||||||
fontAwesome.src = "https://kit.fontawesome.com/f949111719.js";
|
nhcarriganHeadersFontAwesome.src = "https://kit.fontawesome.com/f949111719.js";
|
||||||
const analytics = document.createElement("script");
|
const nhcarriganHeadersAnalytics = document.createElement("script");
|
||||||
analytics.defer = true;
|
nhcarriganHeadersAnalytics.defer = true;
|
||||||
analytics.setAttribute("domain", "nhcarrigan.com");
|
nhcarriganHeadersAnalytics.setAttribute("domain", "nhcarrigan.com");
|
||||||
analytics.src
|
nhcarriganHeadersAnalytics.src
|
||||||
// eslint-disable-next-line stylistic/max-len
|
// eslint-disable-next-line stylistic/max-len
|
||||||
= "https://analytics.nhcarrigan.com/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js";
|
= "https://analytics.nhcarrigan.com/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js";
|
||||||
const analytics2 = document.createElement("script");
|
nhcarriganHeadersAnalytics.setAttribute(
|
||||||
analytics2.innerHTML = `
|
"event-domain",
|
||||||
|
nhcarriganHeadersHostname,
|
||||||
|
);
|
||||||
|
nhcarriganHeadersAnalytics.setAttribute("data-domain", "nhcarrigan.com");
|
||||||
|
nhcarriganHeadersAnalytics.setAttribute(
|
||||||
|
"event-page",
|
||||||
|
nhcarriganHeadersTitle?.innerText ?? "Unknown Page",
|
||||||
|
);
|
||||||
|
nhcarriganHeadersAnalytics.setAttribute(
|
||||||
|
"event-path",
|
||||||
|
nhcarriganHeadersPathname,
|
||||||
|
);
|
||||||
|
const nhcarriganHeadersAnalytics2 = document.createElement("script");
|
||||||
|
nhcarriganHeadersAnalytics2.innerHTML = `
|
||||||
window.plausible = window.plausible ??
|
window.plausible = window.plausible ??
|
||||||
function() {
|
function() {
|
||||||
(window.plausible.q = window.plausible.q ?? []).push(arguments)
|
(window.plausible.q = window.plausible.q ?? []).push(arguments)
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
const nhcarriganHeadersGoogleAdsense = document.createElement("script");
|
||||||
|
nhcarriganHeadersGoogleAdsense.async = true;
|
||||||
|
nhcarriganHeadersGoogleAdsense.src
|
||||||
|
// eslint-disable-next-line stylistic/max-len -- big boi string
|
||||||
|
= "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3569924701890974";
|
||||||
|
nhcarriganHeadersGoogleAdsense.setAttribute("crossorigin", "anonymous");
|
||||||
|
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region Inject Elements
|
// #region Inject Elements
|
||||||
|
|
||||||
head?.appendChild(openGraphTitle);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersOpenGraphTitle);
|
||||||
head?.appendChild(openGraphDescription);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersOpenGraphDescription);
|
||||||
head?.appendChild(openGraphImage);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersOpenGraphImage);
|
||||||
head?.appendChild(openGraphUrl);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersOpenGraphUrl);
|
||||||
head?.appendChild(openGraphType);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersOpenGraphType);
|
||||||
head?.appendChild(twitterCard);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersTwitterCard);
|
||||||
head?.appendChild(twitterDomain);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersTwitterDomain);
|
||||||
head?.appendChild(twitterUrl);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersTwitterUrl);
|
||||||
head?.appendChild(twitterTitle);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersTwitterTitle);
|
||||||
head?.appendChild(twitterDescription);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersTwitterDescription);
|
||||||
head?.appendChild(twitterImage);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersTwitterImage);
|
||||||
|
|
||||||
head?.appendChild(favicon);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersFavicon);
|
||||||
head?.appendChild(appleTouchIcon);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersAppleTouchIcon);
|
||||||
head?.appendChild(smallIcon);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersSmallIcon);
|
||||||
head?.appendChild(largeIcon);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersLargeIcon);
|
||||||
|
|
||||||
head?.appendChild(styles);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersStyles);
|
||||||
|
|
||||||
head?.appendChild(treeNation);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersTreeNation);
|
||||||
head?.appendChild(fontAwesome);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersFontAwesome);
|
||||||
head?.appendChild(analytics);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersAnalytics);
|
||||||
head?.appendChild(analytics2);
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersAnalytics2);
|
||||||
|
nhcarriganHeadersHead?.appendChild(nhcarriganHeadersGoogleAdsense);
|
||||||
|
|
||||||
body?.appendChild(footer);
|
nhcarriganHeadersBody?.appendChild(nhcarriganHeadersFooter);
|
||||||
body?.appendChild(videoOverlay);
|
nhcarriganHeadersBody?.appendChild(nhcarriganHeadersTreeNationBottom);
|
||||||
body?.appendChild(treeNationBottom);
|
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region Audio
|
// #region Theme
|
||||||
|
|
||||||
const playButton = document.querySelector("#audio-theme-button");
|
const nhcarriganHeadersThemeButton = document.querySelector(
|
||||||
const audio = new Audio("https://cdn.nhcarrigan.com/theme.mp3");
|
"#theme-select-button",
|
||||||
let playing = false;
|
);
|
||||||
playButton?.addEventListener("click", () => {
|
const nhcarriganHeadersThemeIcon = document.querySelector("#theme-select-icon");
|
||||||
if (playing) {
|
if (localStorage.getItem("theme") === "dark") {
|
||||||
audio.pause();
|
nhcarriganHeadersThemeIcon?.classList.remove("fa-moon");
|
||||||
playing = false;
|
nhcarriganHeadersThemeIcon?.classList.add("fa-sun");
|
||||||
playButton.innerHTML = "<i class=\"fa-solid fa-play\"></i>";
|
document.querySelector("html")?.classList.add("is-dark");
|
||||||
} else {
|
}
|
||||||
void audio.play();
|
const nhcarriganHeadersToggleTheme = (): void => {
|
||||||
playing = true;
|
const nhcarriganHeadersCurrentTheme = localStorage.getItem("theme");
|
||||||
playButton.innerHTML = "<i class=\"fa-solid fa-pause\"></i>";
|
if (nhcarriganHeadersCurrentTheme === "dark") {
|
||||||
|
localStorage.setItem("theme", "light");
|
||||||
|
nhcarriganHeadersThemeIcon?.classList.remove("fa-sun");
|
||||||
|
nhcarriganHeadersThemeIcon?.classList.add("fa-moon");
|
||||||
|
document.querySelector("html")?.classList.remove("is-dark");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
});
|
localStorage.setItem("theme", "dark");
|
||||||
|
nhcarriganHeadersThemeIcon?.classList.remove("fa-moon");
|
||||||
|
nhcarriganHeadersThemeIcon?.classList.add("fa-sun");
|
||||||
|
document.querySelector("html")?.classList.add("is-dark");
|
||||||
|
};
|
||||||
|
nhcarriganHeadersThemeButton?.addEventListener(
|
||||||
|
"click",
|
||||||
|
nhcarriganHeadersToggleTheme,
|
||||||
|
);
|
||||||
|
const nhcarriganHeadersPrefersDark = window.matchMedia(
|
||||||
|
"(prefers-color-scheme: dark)",
|
||||||
|
);
|
||||||
|
if (
|
||||||
|
nhcarriganHeadersPrefersDark.matches
|
||||||
|
&& localStorage.getItem("theme") !== null
|
||||||
|
) {
|
||||||
|
localStorage.setItem("theme", "dark");
|
||||||
|
nhcarriganHeadersThemeIcon?.classList.remove("fa-moon");
|
||||||
|
nhcarriganHeadersThemeIcon?.classList.add("fa-sun");
|
||||||
|
document.querySelector("html")?.classList.add("is-dark");
|
||||||
|
}
|
||||||
|
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
|
// #region Social Toggle
|
||||||
|
const nhcarriganHeadersShowSocialsButton
|
||||||
|
= document.querySelector<HTMLButtonElement>("#show-socials-button");
|
||||||
|
const nhcarriganHeadersSocialList
|
||||||
|
= document.querySelector<HTMLDivElement>("#social-list");
|
||||||
|
const nhcarriganHeadersToggleSocials = (): void => {
|
||||||
|
if (!nhcarriganHeadersSocialList) {
|
||||||
|
throw new Error("Social list element not found.");
|
||||||
|
}
|
||||||
|
if (nhcarriganHeadersSocialList.style.display === "block") {
|
||||||
|
nhcarriganHeadersSocialList.style.display = "none";
|
||||||
|
nhcarriganHeadersShowSocialsButton?.setAttribute("aria-expanded", "false");
|
||||||
|
nhcarriganHeadersShowSocialsButton?.setAttribute(
|
||||||
|
"aria-label",
|
||||||
|
"Show Socials",
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
nhcarriganHeadersSocialList.style.display = "block";
|
||||||
|
nhcarriganHeadersShowSocialsButton?.setAttribute("aria-expanded", "true");
|
||||||
|
nhcarriganHeadersShowSocialsButton?.setAttribute(
|
||||||
|
"aria-label",
|
||||||
|
"Hide Socials",
|
||||||
|
);
|
||||||
|
};
|
||||||
|
nhcarriganHeadersShowSocialsButton?.addEventListener(
|
||||||
|
"click",
|
||||||
|
nhcarriganHeadersToggleSocials,
|
||||||
|
);
|
||||||
|
|
||||||
// #region CTA
|
// #region CTA
|
||||||
|
|
||||||
const cta = document.createElement("dialog");
|
const nhcarriganHeadersCta = document.createElement("dialog");
|
||||||
cta.style.position = "fixed";
|
nhcarriganHeadersCta.style.position = "fixed";
|
||||||
cta.style.top = "50%";
|
nhcarriganHeadersCta.style.top = "50%";
|
||||||
cta.style.left = "50%";
|
nhcarriganHeadersCta.style.left = "50%";
|
||||||
cta.style.transform = "translate(-50%, -50%)";
|
nhcarriganHeadersCta.style.transform = "translate(-50%, -50%)";
|
||||||
cta.style.padding = "10px";
|
nhcarriganHeadersCta.style.padding = "10px";
|
||||||
cta.style.borderRadius = "10px";
|
nhcarriganHeadersCta.style.borderRadius = "10px";
|
||||||
cta.style.backgroundColor = "var(--background)";
|
nhcarriganHeadersCta.style.backgroundColor = "var(--background)";
|
||||||
cta.style.color = "var(--foreground)";
|
nhcarriganHeadersCta.style.color = "var(--foreground)";
|
||||||
cta.style.textAlign = "center";
|
nhcarriganHeadersCta.style.textAlign = "center";
|
||||||
cta.style.width = "95%";
|
nhcarriganHeadersCta.style.width = "95%";
|
||||||
cta.style.maxWidth = "400px";
|
nhcarriganHeadersCta.style.maxWidth = "400px";
|
||||||
cta.id = "community-cta";
|
nhcarriganHeadersCta.id = "community-cta";
|
||||||
cta.innerHTML = `
|
nhcarriganHeadersCta.innerHTML = `
|
||||||
<h1 autofocus>Hello~!</h1>
|
<h1 autofocus>Hello~!</h1>
|
||||||
<div style="display: flex; justify-content: space-around; margin-bottom: 10px;">
|
<div style="display: flex; justify-content: space-around; margin-bottom: 10px;">
|
||||||
<img src="https://cdn.nhcarrigan.com/profile.png" alt="Naomi Carrigan" style="width: 100px; height: 100px; border-radius: 50%;">
|
<img src="https://cdn.nhcarrigan.com/logo.png" alt="NHCarrigan Logo" style="width: 100px; height: 100px;">
|
||||||
<p>
|
<p>
|
||||||
Consider joining our community so you can keep up to date on all of our latest activities!
|
Consider joining our community so you can keep up to date on all of our latest activities!
|
||||||
</p>
|
</p>
|
||||||
@ -339,35 +534,62 @@ cta.innerHTML = `
|
|||||||
<a href="https://chat.nhcarrigan.com" target="_blank" rel="noreferrer" style="padding: 10px; background: var(--foreground); color: var(--background); outline: none">Okay, take me there~!</a>
|
<a href="https://chat.nhcarrigan.com" target="_blank" rel="noreferrer" style="padding: 10px; background: var(--foreground); color: var(--background); outline: none">Okay, take me there~!</a>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const modalBg = document.createElement("div");
|
const nhcarriganHeadersModalBg = document.createElement("div");
|
||||||
modalBg.style.zIndex = "4999";
|
nhcarriganHeadersModalBg.style.zIndex = "4999";
|
||||||
modalBg.style.position = "fixed";
|
nhcarriganHeadersModalBg.style.position = "fixed";
|
||||||
modalBg.style.top = "0";
|
nhcarriganHeadersModalBg.style.top = "0";
|
||||||
modalBg.style.left = "0";
|
nhcarriganHeadersModalBg.style.left = "0";
|
||||||
modalBg.style.width = "100vw";
|
nhcarriganHeadersModalBg.style.width = "100vw";
|
||||||
modalBg.style.height = "100vh";
|
nhcarriganHeadersModalBg.style.height = "100vh";
|
||||||
modalBg.style.backgroundColor = "rgba(0, 0, 0, 0.5)";
|
nhcarriganHeadersModalBg.style.backgroundColor = "rgba(0, 0, 0, 0.5)";
|
||||||
modalBg.style.display = "none";
|
nhcarriganHeadersModalBg.style.display = "none";
|
||||||
modalBg.id = "modal-bg";
|
nhcarriganHeadersModalBg.id = "modal-bg";
|
||||||
const closeModal = (): void => {
|
const nhcarriganHeadersCloseModal = (): void => {
|
||||||
cta.close();
|
nhcarriganHeadersCta.close();
|
||||||
modalBg.style.display = "none";
|
nhcarriganHeadersModalBg.style.display = "none";
|
||||||
};
|
};
|
||||||
const handleModalClick = (event: MouseEvent): void => {
|
const nhcarriganHeadersHandleModalClick = (event: MouseEvent): void => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
if (event.target === cta) {
|
if (event.target === nhcarriganHeadersCta) {
|
||||||
closeModal();
|
nhcarriganHeadersCloseModal();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const showModal = (): void => {
|
const nhcarriganHeadersShowModal = (): void => {
|
||||||
cta.showModal();
|
const nhcarriganHeadersLastShown = Number.parseInt(
|
||||||
modalBg.style.display = "block";
|
localStorage.getItem("naomi-community-cta") ?? "0",
|
||||||
modalBg.addEventListener("click", closeModal);
|
10,
|
||||||
const closeButton = cta.querySelector("button");
|
);
|
||||||
closeButton?.addEventListener("click", closeModal);
|
const nhcarriganHeadersLastShownDate = new Date(nhcarriganHeadersLastShown);
|
||||||
cta.addEventListener("click", handleModalClick);
|
const nhcarriganHeadersDiff
|
||||||
|
= Date.now() - nhcarriganHeadersLastShownDate.getTime();
|
||||||
|
console.table({
|
||||||
|
diff: nhcarriganHeadersDiff,
|
||||||
|
lastShown: nhcarriganHeadersLastShown,
|
||||||
|
lastShownDate: nhcarriganHeadersLastShownDate,
|
||||||
|
});
|
||||||
|
// We only want to show this once a week.
|
||||||
|
if (nhcarriganHeadersDiff < 1000 * 60 * 60 * 24 * 7) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
nhcarriganHeadersCta.showModal();
|
||||||
|
nhcarriganHeadersModalBg.style.display = "block";
|
||||||
|
nhcarriganHeadersModalBg.addEventListener(
|
||||||
|
"click",
|
||||||
|
nhcarriganHeadersCloseModal,
|
||||||
|
);
|
||||||
|
const nhcarriganHeadersCloseButton
|
||||||
|
= nhcarriganHeadersCta.querySelector("button");
|
||||||
|
nhcarriganHeadersCloseButton?.addEventListener(
|
||||||
|
"click",
|
||||||
|
nhcarriganHeadersCloseModal,
|
||||||
|
);
|
||||||
|
nhcarriganHeadersCta.addEventListener(
|
||||||
|
"click",
|
||||||
|
nhcarriganHeadersHandleModalClick,
|
||||||
|
);
|
||||||
|
localStorage.setItem("naomi-community-cta", Date.now().toString());
|
||||||
};
|
};
|
||||||
|
|
||||||
body?.appendChild(cta);
|
nhcarriganHeadersBody?.appendChild(nhcarriganHeadersCta);
|
||||||
body?.appendChild(modalBg);
|
nhcarriganHeadersBody?.appendChild(nhcarriganHeadersModalBg);
|
||||||
showModal();
|
nhcarriganHeadersShowModal();
|
||||||
|
Reference in New Issue
Block a user