some more flexibility for pdf export sizes
This commit is contained in:
		
							
								
								
									
										78
									
								
								js/reveal.js
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								js/reveal.js
									
									
									
									
									
								
							| @@ -417,13 +417,15 @@ var Reveal = (function(){ | |||||||
| 		// size of our pages | 		// size of our pages | ||||||
| 		var pageAspectRatio = 1.295; | 		var pageAspectRatio = 1.295; | ||||||
|  |  | ||||||
|  | 		var slideSize = getComputedSlideSize( window.innerWidth, window.innerHeight ); | ||||||
|  |  | ||||||
| 		// Dimensions of the PDF pages | 		// Dimensions of the PDF pages | ||||||
| 		var pageWidth = config.width * 1.3, | 		var pageWidth = Math.round( slideSize.width * ( 1 + config.margin ) ), | ||||||
| 			pageHeight = Math.round( pageWidth / pageAspectRatio ); | 			pageHeight = Math.round( pageWidth / pageAspectRatio ); | ||||||
|  |  | ||||||
| 		// Dimensions of slides within the pages | 		// Dimensions of slides within the pages | ||||||
| 		var slideWidth = config.width, | 		var slideWidth = slideSize.width, | ||||||
| 			slideHeight = config.height; | 			slideHeight = slideSize.height; | ||||||
|  |  | ||||||
| 		document.body.classList.add( 'print-pdf' ); | 		document.body.classList.add( 'print-pdf' ); | ||||||
| 		document.body.style.width = pageWidth + 'px'; | 		document.body.style.width = pageWidth + 'px'; | ||||||
| @@ -440,7 +442,7 @@ var Reveal = (function(){ | |||||||
| 					top = ( pageHeight - slideHeight ) / 2; | 					top = ( pageHeight - slideHeight ) / 2; | ||||||
|  |  | ||||||
| 				var contentHeight = getAbsoluteHeight( slide ); | 				var contentHeight = getAbsoluteHeight( slide ); | ||||||
| 				var numberOfPages = Math.ceil( contentHeight / slideHeight ); | 				var numberOfPages = Math.ceil( contentHeight / pageHeight ); | ||||||
|  |  | ||||||
| 				// Top align when we're taller than a single page | 				// Top align when we're taller than a single page | ||||||
| 				if( numberOfPages > 1 ) { | 				if( numberOfPages > 1 ) { | ||||||
| @@ -462,7 +464,7 @@ var Reveal = (function(){ | |||||||
| 				var background = slide.querySelector( '.slide-background' ); | 				var background = slide.querySelector( '.slide-background' ); | ||||||
| 				if( background ) { | 				if( background ) { | ||||||
| 					background.style.width = pageWidth + 'px'; | 					background.style.width = pageWidth + 'px'; | ||||||
| 					background.style.height = pageHeight + 'px'; | 					background.style.height = ( pageHeight * numberOfPages ) + 'px'; | ||||||
| 					background.style.top = -top + 'px'; | 					background.style.top = -top + 'px'; | ||||||
| 					background.style.left = -left + 'px'; | 					background.style.left = -left + 'px'; | ||||||
| 				} | 				} | ||||||
| @@ -1198,37 +1200,18 @@ var Reveal = (function(){ | |||||||
|  |  | ||||||
| 		if( dom.wrapper && !isPrintingPDF() ) { | 		if( dom.wrapper && !isPrintingPDF() ) { | ||||||
|  |  | ||||||
| 			// Available space to scale within | 			var size = getComputedSlideSize(); | ||||||
| 			var availableWidth = dom.wrapper.offsetWidth, |  | ||||||
| 				availableHeight = dom.wrapper.offsetHeight; |  | ||||||
|  |  | ||||||
| 			// Reduce available space by margin | 			var slidePadding = 20; // TODO Dig this out of DOM | ||||||
| 			availableWidth -= ( availableHeight * config.margin ); |  | ||||||
| 			availableHeight -= ( availableHeight * config.margin ); |  | ||||||
|  |  | ||||||
| 			// Dimensions of the content |  | ||||||
| 			var slideWidth = config.width, |  | ||||||
| 				slideHeight = config.height, |  | ||||||
| 				slidePadding = 20; // TODO Dig this out of DOM |  | ||||||
|  |  | ||||||
| 			// Layout the contents of the slides | 			// Layout the contents of the slides | ||||||
| 			layoutSlideContents( config.width, config.height, slidePadding ); | 			layoutSlideContents( config.width, config.height, slidePadding ); | ||||||
|  |  | ||||||
| 			// Slide width may be a percentage of available width | 			dom.slides.style.width = size.width + 'px'; | ||||||
| 			if( typeof slideWidth === 'string' && /%$/.test( slideWidth ) ) { | 			dom.slides.style.height = size.height + 'px'; | ||||||
| 				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; |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			dom.slides.style.width = slideWidth + 'px'; |  | ||||||
| 			dom.slides.style.height = slideHeight + 'px'; |  | ||||||
|  |  | ||||||
| 			// Determine scale of content to fit within available space | 			// Determine scale of content to fit within available space | ||||||
| 			scale = Math.min( availableWidth / slideWidth, availableHeight / slideHeight ); | 			scale = Math.min( size.presentationWidth / size.width, size.presentationHeight / size.height ); | ||||||
|  |  | ||||||
| 			// Respect max/min scale settings | 			// Respect max/min scale settings | ||||||
| 			scale = Math.max( scale, config.minScale ); | 			scale = Math.max( scale, config.minScale ); | ||||||
| @@ -1265,7 +1248,7 @@ var Reveal = (function(){ | |||||||
| 						slide.style.top = 0; | 						slide.style.top = 0; | ||||||
| 					} | 					} | ||||||
| 					else { | 					else { | ||||||
| 						slide.style.top = Math.max( ( ( slideHeight - getAbsoluteHeight( slide ) ) / 2 ) - slidePadding, 0 ) + 'px'; | 						slide.style.top = Math.max( ( ( size.height - getAbsoluteHeight( slide ) ) / 2 ) - slidePadding, 0 ) + 'px'; | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 				else { | 				else { | ||||||
| @@ -1313,6 +1296,41 @@ var Reveal = (function(){ | |||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Calculates the computed pixel size of our slides. These | ||||||
|  | 	 * values are based on the width and height configuration | ||||||
|  | 	 * options. | ||||||
|  | 	 */ | ||||||
|  | 	function getComputedSlideSize( presentationWidth, presentationHeight ) { | ||||||
|  |  | ||||||
|  | 		var size = { | ||||||
|  | 			// Slide size | ||||||
|  | 			width: config.width, | ||||||
|  | 			height: config.height, | ||||||
|  |  | ||||||
|  | 			// Presentation size | ||||||
|  | 			presentationWidth: presentationWidth || dom.wrapper.offsetWidth, | ||||||
|  | 			presentationHeight: presentationHeight || dom.wrapper.offsetHeight | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		// Reduce available space by margin | ||||||
|  | 		size.presentationWidth -= ( size.presentationHeight * config.margin ); | ||||||
|  | 		size.presentationHeight -= ( size.presentationHeight * config.margin ); | ||||||
|  |  | ||||||
|  | 		// Slide width may be a percentage of available width | ||||||
|  | 		if( typeof size.width === 'string' && /%$/.test( size.width ) ) { | ||||||
|  | 			size.width = parseInt( size.width, 10 ) / 100 * size.presentationWidth; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Slide height may be a percentage of available height | ||||||
|  | 		if( typeof size.height === 'string' && /%$/.test( size.height ) ) { | ||||||
|  | 			size.height = parseInt( size.height, 10 ) / 100 * size.presentationHeight; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		return size; | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| 	 * Stores the vertical index of a stack so that the same | 	 * Stores the vertical index of a stack so that the same | ||||||
| 	 * vertical slide can be selected when navigating to and | 	 * vertical slide can be selected when navigating to and | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user