Presentations-revealjs/custom_plugins/pdfexport/pdfexport.js

109 lines
2.9 KiB
JavaScript
Raw Permalink Normal View History

2023-02-23 17:11:38 +01:00
var PdfExport = ( function( _Reveal ){
var Reveal = _Reveal;
var setStylesheet = null;
var installAltKeyBindings = null;
function getRevealJsPath(){
var regex = /\b[^/]+\/reveal.css$/i;
var script = Array.from( document.querySelectorAll( 'link' ) ).find( function( e ){
return e.attributes.href && e.attributes.href.value.search( regex ) >= 0;
});
if( !script ){
console.error( 'reveal.css could not be found in included <link> elements. Did you rename this file?' );
return '';
}
return script.attributes.href.value.replace( regex, '' );
}
function setStylesheet3( pdfExport ){
var link = document.querySelector( '#print' );
if( !link ){
link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.id = 'print';
document.querySelector( 'head' ).appendChild( link );
}
var style = 'paper';
if( pdfExport ){
style = 'pdf';
}
link.href = getRevealJsPath() + 'css/print/' + style + '.css';
}
function setStylesheet4( pdfExport ){
}
function installAltKeyBindings3(){
}
function installAltKeyBindings4(){
if( isPrintingPDF() ){
var config = Reveal.getConfig();
var shortcut = config.pdfExportShortcut || 'E';
window.addEventListener( 'keydown', function( e ){
if( e.target.nodeName.toUpperCase() == 'BODY'
&& ( e.key.toUpperCase() == shortcut.toUpperCase() || e.keyCode == shortcut.toUpperCase().charCodeAt( 0 ) ) ){
e.preventDefault();
togglePdfExport();
return false;
}
}, true );
}
}
function isPrintingPDF(){
return ( /print-pdf/gi ).test( window.location.search );
}
function togglePdfExport(){
var url_doc = new URL( document.URL );
var query_doc = new URLSearchParams( url_doc.searchParams );
if( isPrintingPDF() ){
query_doc.delete( 'print-pdf' );
}else{
query_doc.set( 'print-pdf', '' );
}
url_doc.search = ( query_doc.toString() ? '?' + query_doc.toString() : '' );
window.location.href = url_doc.toString();
}
function installKeyBindings(){
var config = Reveal.getConfig();
var shortcut = config.pdfExportShortcut || 'E';
Reveal.addKeyBinding({
keyCode: shortcut.toUpperCase().charCodeAt( 0 ),
key: shortcut.toUpperCase(),
description: 'PDF export mode'
}, togglePdfExport );
installAltKeyBindings();
}
function install(){
installKeyBindings();
setStylesheet( isPrintingPDF() );
}
var Plugin = {
}
if( Reveal && Reveal.VERSION && Reveal.VERSION.length && Reveal.VERSION[ 0 ] == '3' ){
// reveal 3.x
setStylesheet = setStylesheet3;
installAltKeyBindings = installAltKeyBindings3;
install();
}else{
// must be reveal 4.x
setStylesheet = setStylesheet4;
installAltKeyBindings = installAltKeyBindings4;
Plugin.id = 'pdf-export';
Plugin.init = function( _Reveal ){
Reveal = _Reveal;
install();
};
}
return Plugin;
})( Reveal );