aboutsummaryrefslogtreecommitdiff
path: root/js/reveal.js
diff options
context:
space:
mode:
authorhakimel <hakim.elhattab@gmail.com>2013-01-28 18:58:32 -0500
committerhakimel <hakim.elhattab@gmail.com>2013-01-28 18:58:32 -0500
commit312eafe2e0d31bea49cfb7e0f8eb4b54c45c2b71 (patch)
tree518c4e2b2dfdb0c5f52f85c58469c2224e96f79f /js/reveal.js
parentd1c74523a4ab741d52ce0e647fe9c166383797ca (diff)
downloadperl-software-in-gnu-guix-312eafe2e0d31bea49cfb7e0f8eb4b54c45c2b71.tar
perl-software-in-gnu-guix-312eafe2e0d31bea49cfb7e0f8eb4b54c45c2b71.tar.gz
feature detect zoom with fallback on transform, allow percent units for deck width/height (#310)
Diffstat (limited to 'js/reveal.js')
-rw-r--r--js/reveal.js52
1 files changed, 44 insertions, 8 deletions
diff --git a/js/reveal.js b/js/reveal.js
index 9984ce6..2819608 100644
--- a/js/reveal.js
+++ b/js/reveal.js
@@ -17,8 +17,11 @@ var Reveal = (function(){
// Configurations defaults, can be overridden at initialization time
config = {
+ // The "normal" size of the presentation, aspect ratio will be preserved
+ // when the presentation is scaled to fit different resolutions
width: 1024,
height: 768,
+
padding: 0.1,
// Display controls in the bottom right corner
@@ -552,16 +555,49 @@ var Reveal = (function(){
*/
function layout() {
- dom.slides.style.width = config.width + 'px';
- dom.slides.style.height = config.height + 'px';
+ // Available space to scale within
+ var availableWidth = dom.wrapper.offsetWidth,
+ availableHeight = dom.wrapper.offsetHeight;
+
+ // Dimensions of the content
+ var slideWidth = config.width,
+ slideHeight = config.height;
+
+ // Slide width may be a percentage of available width
+ if( typeof slideWidth === 'string' && /%$/.test( slideWidth ) ) {
+ slideWidth = parseInt( slideWidth, 10 ) / 100 * availableWidth;
+ }
+
+ // Slide height may be a percentage of available height
+ if( typeof slideHeight === 'string' && /%$/.test( slideHeight ) ) {
+ slideHeight = parseInt( slideHeight, 10 ) / 100 * availableHeight;
+ }
- var availableWidth = window.innerWidth - ( window.innerWidth * config.padding * 2 ),
- availableHeight = window.innerHeight - ( window.innerHeight * config.padding * 2 );
+ dom.slides.style.width = slideWidth + 'px';
+ dom.slides.style.height = slideHeight + 'px';
- var scale = Math.min( availableWidth / config.width, availableHeight / config.height );
+ // Reduce availabe space by padding
+ availableWidth = availableWidth - ( availableHeight * config.padding * 2 );
+ availableHeight = availableHeight - ( availableHeight * config.padding * 2 );
- // dom.slides.style.WebkitTransform = 'translate(-50%, -50%) scale('+ scale +') translate(50%, 50%)';
- dom.slides.style.zoom = scale;
+ // Determine scale of content to fit within available space
+ var scale = Math.min( availableWidth / slideWidth, availableHeight / slideHeight );
+
+ // Prefer applying scale via zoom since Chrome blurs scaled content
+ // with nested transforms
+ if( typeof dom.slides.style.zoom !== 'undefined' ) {
+ dom.slides.style.zoom = scale;
+ }
+ // Apply scale transform as a fallback
+ else {
+ var transform = 'translate(-50%, -50%) scale('+ scale +') translate(50%, 50%)';
+
+ dom.slides.style.WebkitTransform = transform;
+ dom.slides.style.MozTransform = transform;
+ dom.slides.style.msTransform = transform;
+ dom.slides.style.OTransform = transform;
+ dom.slides.style.transform = transform;
+ }
if( config.center ) {
@@ -569,7 +605,7 @@ var Reveal = (function(){
var slides = toArray( document.querySelectorAll( SLIDES_SELECTOR ) );
// Determine the minimum top offset for slides
- var minTop = -dom.wrapper.offsetHeight / 2;
+ var minTop = -slideHeight / 2;
for( var i = 0, len = slides.length; i < len; i++ ) {
var slide = slides[ i ];