109 lines
3.2 KiB
JavaScript
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();
|
|
});
|