/** * jQuery plugin. */ export function jQueryPDFEmbedder( cmapURL ) { this.each( function( index, rawAContainer ) { var divContainer; var aContainer = jQuery( rawAContainer ); if ( aContainer.is( 'a' ) ) { // Copy 'a' to a 'div' version var adata = aContainer.data(); divContainer = jQuery( '
', { 'class': aContainer.attr( 'class' ), 'style': aContainer.attr( 'style' ), } ); divContainer.data( jQuery.extend( { 'pdf-url': aContainer.attr( 'href' ) }, adata ), ); aContainer.replaceWith( divContainer ); } else { // It was a div all along. divContainer = aContainer; } divContainer.append( jQuery( '
', { 'class': 'pdfemb-loadingmsg' } ).append( document.createTextNode( pdfemb_trans.objectL10n.loading ) ) ); // Disable right click? if ( divContainer.data( 'disablerightclick' ) === 'on' || divContainer.data( 'disablerightclick' ) === '1' ) { divContainer.bind( 'contextmenu', function( e ) { e.preventDefault(); } ); } // Load PDF. var initPdfDoc = function( pdfDoc, showIsSecure ) { var pagesViewer = new window.PDFEMB_NS.pdfembPagesViewerUsable( pdfDoc, divContainer, showIsSecure ); pagesViewer.setup(); }; var callback = function( pdf, showIsSecure ) { /** * Asynchronously downloads PDF. */ if ( pdf === null ) { divContainer .empty() .append( jQuery( '
', { 'class': 'pdfemb-errormsg' } ) .append( jQuery( '' ).append( document.createTextNode( 'Failed to load and decrypt PDF' ), ), ), ); return; } let params = {}; params.url = pdf; params.cMapUrl = cmapURL; // Do not allow scripts execution in FontMatrix used for rendering glyphs. params.isEvalSupported = false; var loadingTask = pdfjsLib.getDocument( params, cmapURL ); loadingTask.promise.then( function( pdfDoc_ ) { // you can now use *pdf* here initPdfDoc( pdfDoc_, showIsSecure ); }, function( e ) { var msgnode = document.createTextNode( e.message ); if ( e.name === 'UnknownErrorException' && e.message === 'Failed to fetch' ) { // "Failed to fetch" - probably cross-domain issue msgnode = jQuery( '' ) .append( document.createTextNode( e.message + ' ' + pdfemb_trans.objectL10n.domainerror + ' ' ) ) .append( // TODO: this should come straight from PHP. jQuery( '' + pdfemb_trans.objectL10n.clickhereinfo + '' ) ); } divContainer.empty().append( jQuery( '
', { 'class': 'pdfemb-errormsg' } ).append( msgnode ) ); }, ); }; if ( divContainer.data( 'pdfDoc' ) ) { initPdfDoc( divContainer.data( 'pdfDoc' ), divContainer.data( 'showIsSecure' ) ); } else { var url = divContainer.data( 'pdf-url' ); window.PDFEMB_NS.pdfembGetPDF( url, callback ); } } ); return this; }