coap-february-2025/_extensions/shafayetShafee/metropolis-beamer/resources/js/add_header.js
2025-02-11 10:16:26 +01:00

109 lines
3.2 KiB
JavaScript

/**
* reveal-header
* A filter that adds header text and logo.
*
* MIT License
* Copyright (c) 2023-2024 Shafayet Khan Shafee.
*/
function header() {
// add the header structure as the firstChild of div.reveal-header
function add_header() {
let header = document.querySelector("div.reveal-header");
let reveal = document.querySelector(".reveal");
reveal.insertBefore(header, reveal.firstChild);
let header_title_p_placeholder = document.querySelector('div.header-title > p');
let header_title_h2_placeholder = document.createElement('h2');
header_title_p_placeholder.replaceWith(header_title_h2_placeholder);
logo_img = document.querySelector('.header-logo > img');
if (logo_img?.getAttribute('src') == null) {
if (logo_img?.getAttribute('data-src') != null) {
logo_img.src = logo_img?.getAttribute('data-src') || "";
logo_img.removeAttribute('data-src');
};
};
};
function make_h2_title() {
let h2_text = Reveal.getCurrentSlide().getAttribute('data-h2-text');
let header_title_placeholder = document.querySelector('div.header-title > h2');
header_title_placeholder.innerText = h2_text;
let header_div = document.querySelector('div.reveal-header');
if(Reveal.getCurrentSlide().id == 'title-slide' ||
Reveal.getCurrentSlide().classList.contains('title-slide') || h2_text == ''
) {
header_div.style.visibility = 'hidden';
} else {
header_div.style.visibility = 'visible';
header_title_placeholder.style.color = 'white';
};
};
function linkify_logo(logo, href) {
const logo_cloned = logo.cloneNode(true);
const link = document.createElement('a');
link.href = href;
link.target = '_blank';
link.appendChild(logo_cloned);
logo.replaceWith(link);
};
function get_clean_attrs(elem, attrName) {
let attrVal = elem.getAttribute(attrName);
if (attrVal != null) {
elem.removeAttribute(attrName);
}
return attrVal;
};
if (Reveal.isReady()) {
add_header();
const slides = Reveal.getSlides();
slides.forEach(slide => {
const h2Element = slide.querySelector('h2');
if (h2Element) {
h2Element.style.display = 'none';
const h2Text = h2Element.textContent;
slide.setAttribute('data-h2-text', h2Text);
} else {
slide.setAttribute('data-h2-text', '');
};
});
make_h2_title();
/*************** linkifying the header and footer logo ********************/
const header_logo = document.querySelector('div.header-logo');
if (header_logo != null) {
const header_logo_link = get_clean_attrs(header_logo, 'data-header-logo-link');
const footer_logo_link = get_clean_attrs(header_logo, 'data-footer-logo-link');
if (header_logo_link != null) {
const header_logo_img = document.querySelector('div.header-logo').firstElementChild;
linkify_logo(header_logo_img, header_logo_link);
};
};
/****************************** END ***************************************/
Reveal.on( 'slidechanged', event => {
make_h2_title();
});
};
};
window.addEventListener("load", (event) => {
header();
});