doc/dev/plugins/presentation/js/presentation.js

129 lines
3.1 KiB
JavaScript

/**
* Display visual error-indication.
* @param {string} message Message to prompt user to reload.
*/
function showError(message) {
document.getElementById("snackbar-message").innerHTML = message;
document.getElementById("snackbar").classList.add("visible");
}
/**
* Hide visual error-indication.
*/
function hideError() {
if (document.getElementById("snackbar").classList.contains("visible")) {
document.getElementById("snackbar").classList.remove("visible");
}
}
/**
* Get value from GET-parameter.
* @param {string} parameterName GET-query parameter name.
*/
function findGetParameter(parameterName) {
var result = null,
tmp = [];
location.search
.substr(1)
.split("&")
.forEach(function(item) {
tmp = item.split("=");
if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
});
return result;
}
/**
* Start a visual clock indicator.
*/
function initClock() {
var d = new Date();
var nhour = d.getHours();
var nmin = d.getMinutes();
var nsec = d.getSeconds();
if (nmin <= 9) {
nmin = "0" + nmin;
}
if (nsec <= 9) {
nsec = "0" + nsec;
}
var clocktext = "" + nhour + ":" + nmin + ":" + nsec + "";
document.getElementById("clockbox").innerHTML = clocktext;
}
/**
* Format a date in ISO-format
* @param {Date} d Date-instance
*
* @see https://stackoverflow.com/a/12550320/603387
*/
function ISODateString(d) {
function pad(n) {
return n < 10 ? "0" + n : n;
}
return (
pad(d.getHours()) + ":" + pad(d.getMinutes()) + ":" + pad(d.getSeconds())
);
}
/**
* Find closest number
* @param {float} number Number to search for
* @param {array} array Numbers to search in
*
* @see https://jsfiddle.net/jaggedsoftware/g40krr4n/
*/
function getClosest(number, array) {
var current = array[0];
var difference = Math.abs(number - current);
var index = array.length;
while (index--) {
var newDifference = Math.abs(number - array[index]);
if (newDifference < difference) {
difference = newDifference;
current = array[index];
}
}
return current;
}
/**
* Get Slides
*/
function getSlides(target = ".slides section section") {
return document.querySelectorAll(target);
}
function elevateIframe(event) {
if (
"backgroundIframe" in event.currentSlide.dataset &&
"backgroundInteractive" in event.currentSlide.dataset &&
event.currentSlide.dataset.backgroundIframe.length > 0
) {
document
.querySelector(".reveal .backgrounds")
.style.setProperty("z-index", "2");
document
.querySelector(".reveal .controls")
.style.setProperty("z-index", "3");
} else {
document
.querySelector(".reveal .backgrounds")
.style.removeProperty("z-index");
document.querySelector(".reveal .controls").style.removeProperty("z-index");
}
}
/* If printing, clear color and background*/
window.addEventListener(
"load",
function(event) {
if (findGetParameter("print-pdf")) {
Array.prototype.forEach.call(getSlides(), function(element) {
element.style.setProperty("color", "unset", "important");
element.style.setProperty("background", "unset", "important");
});
}
},
false
);