76 lines
2.3 KiB
JavaScript
76 lines
2.3 KiB
JavaScript
|
/*****************************************************************
|
||
|
** Author: Roland Schmehl, r.schmehl@tudelft.nl
|
||
|
**
|
||
|
** A plugin for displaying attribution texts sideways along the right
|
||
|
** edge of the viewport. When resizing the viewport or toggling full
|
||
|
** screen mode, the attribution text sticks persistently to the right
|
||
|
** edge of the viewport.
|
||
|
**
|
||
|
** The dynamic scaling of the attribution text via CSS transform
|
||
|
** is adopted from the fullscreen plugin.
|
||
|
**
|
||
|
** Version: 1.0
|
||
|
**
|
||
|
** License: MIT license (see file LICENSE)
|
||
|
**
|
||
|
******************************************************************/
|
||
|
|
||
|
window.RevealAttribution = window.RevealAttribution || {
|
||
|
id: 'RevealAttribution',
|
||
|
init: function(deck) {
|
||
|
initAttribution(deck);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
const initAttribution = function(Reveal){
|
||
|
|
||
|
var ready = false;
|
||
|
var resize = false;
|
||
|
var scale = 1;
|
||
|
|
||
|
window.addEventListener( 'ready', function( event ) {
|
||
|
|
||
|
var content;
|
||
|
|
||
|
// Remove configured margin of the presentation
|
||
|
var attribution = document.getElementsByClassName("attribution");
|
||
|
var width = window.innerWidth;
|
||
|
var configuredWidth = Reveal.getConfig().width;
|
||
|
var configuredHeight = Reveal.getConfig().height;
|
||
|
|
||
|
scale = 1/(1-Reveal.getConfig().margin);
|
||
|
|
||
|
for (var i = 0; i < attribution.length; i++) {
|
||
|
content = attribution[i].innerHTML;
|
||
|
attribution[i].style.width = configuredWidth + "px";
|
||
|
attribution[i].style.height = configuredHeight + "px";
|
||
|
attribution[i].innerHTML = "<span class='content'>" + content + "</span>";
|
||
|
attribution[i].style.transform = 'translate( -50%, -50% ) scale( ' + scale*100 + '% ) rotate(-180deg)';
|
||
|
}
|
||
|
|
||
|
// Scale with cover class to mimic backgroundSize cover
|
||
|
resizeCover();
|
||
|
|
||
|
});
|
||
|
|
||
|
window.addEventListener( 'resize', resizeCover );
|
||
|
|
||
|
function resizeCover() {
|
||
|
|
||
|
// Scale to mimic backgroundSize cover
|
||
|
var attribution = document.getElementsByClassName("attribution");
|
||
|
var xScale = window.innerWidth / Reveal.getConfig().width;
|
||
|
var yScale = window.innerHeight / Reveal.getConfig().height;
|
||
|
var s = 1;
|
||
|
|
||
|
if (xScale > yScale) {
|
||
|
// The div fits perfectly in x axis, stretched in y
|
||
|
s = xScale/yScale;
|
||
|
}
|
||
|
for (var i = 0; i < attribution.length; i++) {
|
||
|
attribution[i].style.transform = 'translate( -50%, -50% ) scale( ' + s*scale*100 + '% ) rotate(-180deg)';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|