Skip to content

Commit c4ba804

Browse files
DOC-1069 Adds the ability to set announcements on the pages too (#249)
* Adds the ability to set announcements on the pages too * adds the ability to create announcements domain-wide * modify to work with page components * remove domain-wide implementation * enable page/product/site announcements * gets key from the data attribute * Allow users to close site-wide, product-wide, and page-level announcements separately --------- Co-authored-by: JakeSCahill <[email protected]>
1 parent 32c0f64 commit c4ba804

5 files changed

+51
-47
lines changed

src/css/bloblang-playground.css

+6-4
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,19 @@
4242
}
4343

4444
.bloblang-playground .banner-container {
45-
display: flex;
45+
display: none;
4646
position: relative;
4747
flex-wrap: wrap;
4848
gap: 10px;
4949
align-items: center;
5050
}
5151

52-
.bloblang-playground .banner-container .close-button {
52+
.bloblang-playground .banner-container .close {
5353
position: absolute;
5454
top: 10px;
5555
right: 10px;
56+
margin-top: 0;
57+
padding: 0;
5658
background: transparent;
5759
border: none;
5860
font-size: 20px;
@@ -61,7 +63,7 @@
6163
transition: color 0.3s, transform 0.2s;
6264
}
6365

64-
.bloblang-playground .banner-container .close-button:hover {
66+
.bloblang-playground .banner-container .close:hover {
6567
color: #000000;
6668
transform: scale(1.2);
6769
}
@@ -345,7 +347,7 @@ html[data-theme=dark] .bloblang-playground .button:hover {
345347
}
346348

347349
@media (max-width: 600px) {
348-
.bloblang-playground .banner-container .close-button {
350+
.bloblang-playground .banner-container .close {
349351
top: 5px;
350352
right: 5px;
351353
font-size: 18px;

src/partials/announcement-bar.hbs

+20-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,20 @@
1-
{{#if (and site.keys.announcement (ne page.component.name 'api'))}}
2-
<div class="announcement-bar" role="banner" id="announcement"><div class="announcement-content"> {{site.keys.announcementText}} <a href="{{{site.keys.announcementLink}}}">{{site.keys.announcementLinkText}}</a>
3-
</div><button id="close-announcement" type="button" aria-label="close" class="close"><svg viewBox="0 0 15 15" width="14" height="14"><g stroke="currentColor" stroke-width="3.1"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></button></div>
4-
{{/if}}
1+
{{#if (and (ne page.component.name 'api') (or page.attributes.announcement page.component.latest.asciidoc.attributes.announcement site.keys.announcement))}}
2+
<div class="announcement-bar" role="banner" id="announcement"
3+
data-announcement-key="{{#if page.attributes.announcement}}page-{{page.component.name}}-{{page.relativeSrcPath}}{{else if page.component.latest.asciidoc.attributes.announcement}}component-{{page.component.name}}{{else if site.keys.announcement}}site-global{{/if}}">
4+
<div class="announcement-content">
5+
{{#if page.attributes.announcement}}
6+
{{page.attributes.announcement-text}}
7+
<a href="{{{page.attributes.announcement-link}}}">{{page.attributes.announcement-link-text}}</a>
8+
{{else if page.component.latest.asciidoc.attributes.announcement}}
9+
{{page.component.latest.asciidoc.attributes.announcement-text}}
10+
<a href="{{{page.component.latest.asciidoc.attributes.announcement-link}}}">{{page.component.latest.asciidoc.attributes.announcement-link-text}}</a>
11+
{{else if site.keys.announcement}}
12+
{{site.keys.announcementText}}
13+
<a href="{{{site.keys.announcementLink}}}">{{site.keys.announcementLinkText}}</a>
14+
{{/if}}
15+
</div>
16+
<button id="close-announcement" type="button" aria-label="close" class="close">
17+
<svg viewBox="0 0 15 15" width="14" height="14"><g stroke="currentColor" stroke-width="3.1"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg>
18+
</button>
19+
</div>
20+
{{/if}}

src/partials/bloblang-playground.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ function initializeAceEditor(editorId, mode, readOnly = false, initialValue = ''
100100
editor.setTheme('ace/theme/github');
101101
editor.session.setMode(mode);
102102
editor.setReadOnly(readOnly);
103-
editor.setValue(prettifyJSON(initialValue), 1);
103+
editor.setValue(initialValue, 1);
104104
editor.session.setTabSize(TAB_SIZE);
105105
editor.session.setUseSoftTabs(true);
106106
editor.setOptions({

src/partials/bloblang-signup-form.hbs

+1-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<div class="banner-container" id="bloblang-banner">
2-
<button class="close-button" id="dismiss-banner" aria-label="Dismiss">&times;</button>
2+
<button class="close" id="dismiss-banner" aria-label="Dismiss">&times;</button>
33
<p>Sign up for updates about new features in the playground:</p>
44
<form data-netlify="true" name="bloblang-emails" method="POST" netlify-honeypot="bot-field" id="bloblang-form" class="banner-form">
55
<input type="email" name="email" id="bloblang-email" placeholder="Enter your email..." required />
@@ -10,16 +10,6 @@
1010
document.addEventListener("DOMContentLoaded", () => {
1111
const banner = document.getElementById("bloblang-banner");
1212
const form = document.getElementById("bloblang-form");
13-
const dismissButton = document.getElementById("dismiss-banner");
14-
if (sessionStorage.getItem("bloblangBannerDismissed") === "true" && banner) {
15-
banner.style.display = "none";
16-
}
17-
if (dismissButton) {
18-
dismissButton.addEventListener("click", () => {
19-
banner.style.display = "none";
20-
sessionStorage.setItem("bloblangBannerDismissed", "true");
21-
});
22-
}
2313
if (form) {
2414
form.addEventListener("submit", (event) => {
2515
event.preventDefault();

src/partials/head.hbs

+23-27
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,40 @@
1-
<!-- Inline CSS to Hide Announcement Bar Initially -->
21
<style>
32
.announcement-bar {
43
display: none;
54
height: 0;
65
}
6+
.bloblang-playground .banner-container {
7+
display: none;
8+
}
79
</style>
810
<script>
911
(function() {
1012
'use strict';
11-
function handleBanner(bannerId, sessionKey) {
13+
function handleBanner(bannerId, sessionKey, announcementType) {
1214
const banner = document.getElementById(bannerId);
1315
if (!banner) return;
1416
15-
const hasSeenBanner = window.sessionStorage.getItem(sessionKey) || false;
17+
const storageKey = `${sessionKey}-${announcementType}`; // Use the announcement type to differentiate between different banners
18+
const hasSeenBanner = window.sessionStorage.getItem(storageKey) || false;
1619
if (hasSeenBanner) {
20+
if (announcementType !== 'bloblang') {
21+
document.documentElement.style.setProperty('--announcement-bar-height', '0px');
22+
document.documentElement.style.setProperty('--announcement-bar-height--desktop', '0px');
23+
}
1724
banner.remove();
1825
} else {
26+
if (announcementType !== 'bloblang') {
27+
document.documentElement.style.setProperty('--announcement-bar-height', '50px');
28+
document.documentElement.style.setProperty('--announcement-bar-height--desktop', '30px');
29+
}
1930
banner.style.display = 'flex';
20-
const closeButton = banner.querySelector('.close-button');
31+
const closeButton = banner.querySelector('.close');
2132
if (closeButton) {
2233
closeButton.addEventListener('click', function () {
34+
document.documentElement.style.setProperty('--announcement-bar-height', '0px');
35+
document.documentElement.style.setProperty('--announcement-bar-height--desktop', '0px');
2336
banner.remove();
24-
window.sessionStorage.setItem(sessionKey, 'true');
37+
window.sessionStorage.setItem(storageKey, 'true');
2538
});
2639
}
2740
}
@@ -32,15 +45,11 @@
3245
(window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
3346
3447
document.documentElement.setAttribute('data-theme', initialTheme);
35-
36-
document.addEventListener('DOMContentLoaded', function() {
37-
handleBanner('announcement', 'announcementClosed');
38-
handleBanner('bloblang-banner', 'bloblangBannerDismissed');
39-
});
4048
// This script and the styles must be in the head to avoid flashing when the default white background changes to dark https://github.com/redpanda-data/docs-ui/pull/174
4149
window.addEventListener('DOMContentLoaded', function() {
4250
const switchButton = document.getElementById('switch-theme');
4351
const announcementBar = document.getElementById('announcement');
52+
let announcementLevel = '';
4453
if (switchButton) {
4554
setTheme(initialTheme); // Apply initial theme on load
4655
switchButton.addEventListener('click', function() {
@@ -51,24 +60,11 @@
5160
setTheme(newTheme);
5261
});
5362
}
54-
if (!announcementBar) return;
55-
const hasSeenAnnouncement = window.sessionStorage.getItem('announcementClosed') || window.localStorage.getItem('announcementClosed') || false;
56-
if (!hasSeenAnnouncement) {
57-
document.documentElement.style.setProperty('--announcement-bar-height', '50px');
58-
document.documentElement.style.setProperty('--announcement-bar-height--desktop', '30px');
59-
announcementBar.style.display = 'flex';
60-
} else {
61-
document.documentElement.style.setProperty('--announcement-bar-height', '0px');
62-
document.documentElement.style.setProperty('--announcement-bar-height--desktop', '0px');
63+
if (announcementBar) {
64+
announcementLevel = announcementBar.getAttribute('data-announcement-key');
65+
handleBanner('announcement', 'announcementClosed', announcementLevel);
6366
}
64-
var closeButton = document.getElementById('close-announcement');
65-
if (!closeButton) return;
66-
closeButton.addEventListener('click', function () {
67-
document.documentElement.style.setProperty('--announcement-bar-height', '0px');
68-
document.documentElement.style.setProperty('--announcement-bar-height--desktop', '0px');
69-
announcementBar.remove();
70-
window.sessionStorage.setItem('announcementClosed', 'true');
71-
});
67+
handleBanner('bloblang-banner', 'bloblangBannerDismissed', 'bloblang');
7268
});
7369
function setTheme(theme) {
7470
const rapidocEl = document.getElementById('api');

0 commit comments

Comments
 (0)