Skip to content

Commit 921d319

Browse files
committed
feature: add persistence to the ad banner with localStorage
1 parent 59f098d commit 921d319

File tree

2 files changed

+101
-8
lines changed

2 files changed

+101
-8
lines changed

src/website/top-banner.js

Lines changed: 97 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,105 @@
1+
const MESSAGE_BAR_STATE = {
2+
CLOSED: "CLOSED",
3+
OPEN: "OPEN",
4+
};
5+
6+
const MESSAGE_BAR_STATUS = {
7+
ACTIVE: "ACTIVE",
8+
INACTIVE: "INACTIVE",
9+
};
10+
11+
const messageBar = {
12+
status: MESSAGE_BAR_STATUS.ACTIVE,
13+
cta: {
14+
message: "Missed DevDay24? Register for the Best of DevDay",
15+
url: "https://pages.okta.com/2024-11-WBN-Best-of-Dev-Day_LP/",
16+
},
17+
id: {
18+
key: "messageBar_id",
19+
value: "BEST_OF_DEVDAY_2024",
20+
},
21+
state: {
22+
key: "messageBar_state",
23+
},
24+
};
25+
26+
const closeMessageBar = () => {
27+
const isMessageBarActive = messageBar.status === MESSAGE_BAR_STATUS.ACTIVE;
28+
29+
if (!isMessageBarActive) {
30+
return;
31+
}
32+
33+
window.localStorage.setItem(messageBar.state.key, MESSAGE_BAR_STATE.CLOSED);
34+
35+
document.querySelector(".top-banner-bg").classList.add("closed");
36+
document.querySelector(".top-banner").classList.add("closed");
37+
document.querySelector(".top-banner-spacer").classList.add("hide");
38+
document.querySelector(".navbar").classList.remove("top-banner-open");
39+
};
40+
41+
const renderTopBanner = () => {
42+
document.querySelector(".top-banner-bg").classList.remove("closed");
43+
document.querySelector(".top-banner").classList.remove("closed");
44+
document.querySelector(".top-banner-spacer").classList.remove("hide");
45+
document.querySelector(".navbar").classList.add("top-banner-open");
46+
};
47+
48+
const loadBannerStateFromLocalStorage = () => {
49+
let messageBarId = window.localStorage.getItem(messageBar.id.key);
50+
let messageBarState = window.localStorage.getItem(messageBar.state.key);
51+
52+
if (!messageBarId) {
53+
window.localStorage.setItem(messageBar.id.key, messageBar.id.value);
54+
messageBarId = window.localStorage.getItem(messageBar.id.key);
55+
}
56+
57+
if (!messageBarState) {
58+
window.localStorage.setItem(messageBar.state.key, MESSAGE_BAR_STATE.OPEN);
59+
messageBarState = window.localStorage.getItem(messageBar.state.key);
60+
}
61+
62+
switch (messageBar.status) {
63+
case MESSAGE_BAR_STATUS.ACTIVE: {
64+
const isExistingCta = messageBarId === messageBar.id.value;
65+
66+
if (!isExistingCta) {
67+
window.localStorage.setItem(messageBar.id.key, messageBar.id.value);
68+
window.localStorage.setItem(
69+
messageBar.state.key,
70+
MESSAGE_BAR_STATE.OPEN
71+
);
72+
73+
renderTopBanner();
74+
75+
return;
76+
}
77+
78+
switch (messageBarState) {
79+
case MESSAGE_BAR_STATE.OPEN: {
80+
renderTopBanner();
81+
82+
return;
83+
}
84+
default: {
85+
return;
86+
}
87+
}
88+
}
89+
default: {
90+
return;
91+
}
92+
}
93+
};
94+
195
export function TopBanner() {
296
document.addEventListener("DOMContentLoaded", function () {
97+
loadBannerStateFromLocalStorage();
98+
399
document
4100
.querySelector(".close-top-banner")
5101
.addEventListener("click", () => {
6-
document.querySelector(".top-banner-bg").classList.add("closed");
7-
document.querySelector(".top-banner").classList.add("closed");
8-
document.querySelector(".top-banner-spacer").classList.add("hide");
9-
document.querySelector(".navbar").classList.remove("top-banner-open");
102+
closeMessageBar();
10103
});
11104
});
12105
}

views/website/navigation.pug

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
.top-banner-bg
2-
.top-banner
1+
.top-banner-bg.closed
2+
.top-banner.closed
33
.top-banner-container
44
a(href="https://a0.to/jwt-io-feedback" target="_blank") Learn about the upcoming changes to jwt.io and share your feedback
55
span(aria-hiden="true")
66
button.close-top-banner +
77

8-
.top-banner-spacer
8+
.top-banner-spacer.hide
99

10-
nav.navbar.closed.top-banner-open
10+
nav.navbar.closed
1111
.container
1212
.top-mobile
1313
.menu-trigger

0 commit comments

Comments
 (0)