File: /var/www/html/wp-content/plugins/wp-recipe-maker/assets/js/public/print.js
window.WPRecipeMaker = typeof window.WPRecipeMaker === "undefined" ? {} : window.WPRecipeMaker;
window.WPRecipeMaker.print = {
init: () => {
document.addEventListener( 'click', function(e) {
for ( var target = e.target; target && target != this; target = target.parentNode ) {
if ( target.matches( '.wprm-recipe-print, .wprm-print-recipe-shortcode' ) ) {
WPRecipeMaker.print.onClick( target, e );
break;
}
}
}, false );
},
onClick: ( el, e ) => {
let recipeId = el.dataset.recipeId;
// Backwards compatibility.
if ( !recipeId ) {
const container = el.closest( '.wprm-recipe-container' );
if ( container ) {
recipeId = container.dataset.recipeId;
}
}
// Still no recipe ID? Just follow the link. Override otherwise.
if ( recipeId ) {
e.preventDefault();
recipeId = parseInt( recipeId );
// Optional template to print.
const template = el.dataset.hasOwnProperty( 'template' ) ? el.dataset.template : '';
// Analytics.
let location = 'other';
const parent = el.closest( '.wprm-recipe' );
if ( parent ) {
if ( parent.classList.contains( 'wprm-recipe-snippet' ) ) {
location = 'snippet';
} else if ( parent.classList.contains( 'wprm-recipe-roundup-item' ) ) {
location = 'roundup';
} else {
location = 'recipe';
}
}
window.WPRecipeMaker.analytics.registerAction( recipeId, wprm_public.post_id, 'print', {
location,
});
// Actually print.
WPRecipeMaker.print.recipeAsIs( recipeId, template );
}
},
recipeAsIs: ( id, template = '' ) => {
let servings = false,
system = 1,
advancedServings = false;
window.WPRecipeMaker.manager.getRecipe( id ).then( ( recipe ) => {
if ( recipe ) {
// Unit System.
if ( recipe.data.hasOwnProperty( 'currentSystem' ) ) {
system = recipe.data.currentSystem;
}
// Only if servings changed.
if ( recipe.data.currentServingsParsed !== recipe.data.originalServingsParsed ) {
servings = recipe.data.currentServingsParsed;
}
// Advanced Servings.
advancedServings = recipe.data.currentAdvancedServings;
}
WPRecipeMaker.print.recipe( id, servings, system, advancedServings, template );
} );
},
recipe: ( id, servings = false, system = 1, advancedServings = false, template = '' ) => {
let slug = false;
if ( 'slug' === wprm_public.settings.print_recipe_identifier ) {
const recipe = window.WPRecipeMaker.manager.getRecipeImmediately( id );
if ( recipe && recipe.data.slug ) {
slug = recipe.data.slug;
// Remove optional wprm- prefix.
if ( slug.startsWith( 'wprm-' ) ) {
slug = slug.substring( 5 );
}
}
}
// Use slug in print URL if set.
let urlArgs = slug ? slug : id;
if ( template ) {
urlArgs += `/${template}`;
}
const url = WPRecipeMaker.print.getUrl( urlArgs );
const target = wprm_public.settings.print_new_tab ? '_blank' : '_self';
// Pass along data to print window before opening it.
const printArgs = {
id,
system,
servings,
advancedServings,
};
localStorage.setItem( 'wprmPrintArgs', JSON.stringify( printArgs ) );
// Open print window.
const printWindow = window.open( url, target );
// Focus on print window when opening in new tab.
if ( '_blank' === target ) {
printWindow.onload = () => {
printWindow.focus();
if ( printWindow.hasOwnProperty( 'WPRMPrint' ) ) {
printWindow.WPRMPrint.setArgs( printArgs );
}
};
}
},
getUrl: ( args ) => {
const urlParts = wprm_public.home_url.split(/\?(.+)/);
// Ensure base URL always has a trailing slash before appending the slug.
let printUrl = urlParts[0];
if ( !printUrl.endsWith( '/' ) ) {
printUrl += '/';
}
if ( wprm_public.permalinks ) {
printUrl += wprm_public.print_slug + '/' + args;
if ( urlParts[1] ) {
printUrl += '?' + urlParts[1];
}
} else {
printUrl += '?' + wprm_public.print_slug + '=' + args;
if ( urlParts[1] ) {
printUrl += '&' + urlParts[1];
}
}
return printUrl;
},
};
ready(() => {
window.WPRecipeMaker.print.init();
});
function ready( fn ) {
if (document.readyState != 'loading'){
fn();
} else {
document.addEventListener('DOMContentLoaded', fn);
}
}