1(function ($, wpzoomRecipeCard) { 2 "use scrict"; 3 4 function wpzoom_set_correct_ids_to_recipe_shortcode() { 5 $('.wpzoom-rcb-post-shortcode').each(function( index ) { 6 var parent_id = $(this).data('parent-id'); 7 8 $(this).find('.btn-print-link').attr( 'data-recipe-id', parent_id ); 9 $(this).find('.wpzoom-rating-stars-container').attr( 'data-recipe-id', parent_id ); 10 11 }); 12 13 $('.wpzoom-custom-recipe-card-post').each(function( index ) { 14 var recipe_id = $(this).data('recipe-post'); 15 $('.wpzoom-recipe-snippet-button.wp-block-wpzoom-recipe-card-block-print-recipe').attr( 'data-recipe-id', recipe_id ); 16 $(this).find('.btn-print-link').attr( 'data-recipe-id', recipe_id ); 17 }); 18 19 } 20 21 function wpzoom_set_servings_size_to_print_button() { 22 const servings_size = $(document) 23 .find(".wpzoom-recipe-card-print-link .btn-print-link") 24 .data("servings-size"); 25 26 if (servings_size) { 27 $(document) 28 .find(".wp-block-wpzoom-recipe-card-block-print-recipe") 29 .data("servings-size", servings_size); 30 } 31 } 32 33 function wpzoom_print_recipe(atts) { 34 const defaults = { 35 servings: 0, 36 "reusable-block-id": 0, 37 "recipe-id": 0, 38 "block-type": "recipe-card", 39 "block-id": "wpzoom-recipe-card", 40 }; 41 42 atts = { 43 ...defaults, 44 ...atts, 45 }; 46 47 const urlParts = wpzoomRecipeCard.homeURL.split(/\?(.+)/); 48 let printUrl = wpzoom_print_add_url_args(atts, urlParts[0], urlParts); 49 50 const print_window = window.open(printUrl, "_blank"); 51 print_window.wpzoomRecipeCard = wpzoomRecipeCard; 52 print_window.onload = function () { 53 print_window.focus(); 54 print_window.document.title = document.title; 55 print_window.history.pushState( 56 "", 57 "Print Recipe", 58 location.href.replace(location.hash, "") 59 ); 60 61 setTimeout(function () { 62 print_window.print(); 63 }, 500); 64 65 print_window.onfocus = function () { 66 setTimeout(function () { 67 print_window.close(); 68 }, 500); 69 }; 70 }; 71 } 72 73 function wpzoom_print_add_url_args(atts, url, urlParts) { 74 if (!atts["recipe-id"]) { 75 return url; 76 } 77 if (wpzoomRecipeCard.permalinks) { 78 url += `wpzoom_rcb_print/${atts["recipe-id"]}/`; 79 80 if (urlParts[1]) { 81 url += `?${urlParts[1]}`; 82 for (const property in atts) { 83 url += `&${property}=${atts[property]}`; 84 } 85 } else { 86 for (const property in atts) { 87 if (!url.match(/\?./)) { 88 url += `?${property}=${atts[property]}`; 89 } else { 90 url += `&${property}=${atts[property]}`; 91 } 92 } 93 } 94 } else { 95 url += `?wpzoom_rcb_print=${atts["recipe-id"]}`; 96 for (const property in atts) { 97 if (!url.match(/\?./)) { 98 url += `?${property}=${atts[property]}`; 99 } else { 100 url += `&${property}=${atts[property]}`; 101 } 102 } 103 if (urlParts[1]) { 104 url += `&${urlParts[1]}`; 105 } 106 } 107 108 return url; 109 } 110 111 $(document).ready(function () { 112 wpzoom_set_servings_size_to_print_button(); 113 114 $( 115 ".wp-block-wpzoom-recipe-card-block-ingredients .ingredients-list li, .
115wp-block-wpzoom-recipe-card-block-recipe-card .ingredients-list li" 116 ).click(function (e) { 117 // Don't do any actions if clicked on link 118 if (e.target.nodeName === "A") { 119 return; 120 } 121 $(this).toggleClass("ticked"); 122 }); 123 124 let instances = 0; 125 126 $( 127 ".wp-block-wpzoom-recipe-card-block-ingredients .ingredients-list li, .wp-block-wpzoom-recipe-card-block-recipe-card .ingredients-list li" 128 ).on("mouseover", function (e) { 129 const $ingredientName = $(this).find(".ingredient-item-name"); 130 const hasStrikeThrough = $ingredientName.hasClass( 131 "is-strikethrough-active" 132 ); 133 134 // Check if strikethrough is disabled 135 if (instances === 0 && !hasStrikeThrough) { 136 instances = 0; 137 return; 138 } 139 140 // Remove strike through if hover on link 141 if (e.target.nodeName === "A") { 142 $ingredientName.removeClass("is-strikethrough-active"); 143 } else { 144 if (!hasStrikeThrough) { 145 $ingredientName.addClass("is-strikethrough-active"); 146 } 147 } 148 149 instances++; 150 }); 151 152 $( 153 ".wpzoom-recipe-card-print-link .btn-print-link, .wp-block-wpzoom-recipe-card-block-print-recipe" 154 ).each(function () { 155 const $printBtn = $(this); 156 157 $printBtn.on("click", function (e) { 158 const $this = $(this); 159 const recipeID = $this.data("recipe-id"); 160 const servings = $this.data("servings-size"); 161 const reusableBlockID = $this.data("reusable-block-id"); 162 163 const isRecipeCardBlock = $this.parents( 164 ".wp-block-wpzoom-recipe-card-block-recipe-card" 165 ).length; 166 const isIngredientsBlock = $this.parents( 167 ".wp-block-wpzoom-recipe-card-block-ingredients" 168 ).length; 169 const isDirectionsBlock = $this.parents( 170 ".wp-block-wpzoom-recipe-card-block-directions" 171 ).length; 172 const isSnippetButton = $this.hasClass( 173 "wp-block-wpzoom-recipe-card-block-print-recipe" 174 ); 175 176 let blockType; 177 let blockId; 178 179 if (isRecipeCardBlock) { 180 blockType = "recipe-card"; 181 blockId = $this 182 .parents( 183 ".wp-block-wpzoom-recipe-card-block-recipe-card" 184 ) 185 .attr("id"); 186 } else if (isIngredientsBlock) { 187 blockType = "ingredients-block"; 188 blockId = $this 189 .parents( 190 ".wp-block-wpzoom-recipe-card-block-ingredients" 191 ) 192 .attr("id"); 193 } else if (isDirectionsBlock) { 194 blockType = "directions-block"; 195 blockId = $this 196 .parents( 197 ".wp-block-wpzoom-recipe-card-block-directions" 198 ) 199 .attr("id"); 200 } else if (isSnippetButton) { 201 blockType = "recipe-card"; 202 blockId = $this 203 .attr("href") 204 .substr(1, $this.attr("href").length); 205 } 206 207 // Print attributes. 208 const atts = {}; 209 if (recipeID) { 210 atts["recipe-id"] = recipeID; 211 } 212 if (reusableBlockID) { 213 atts["reusable-block-id"] = reusableBlockID; 214 } 215 if (servings) { 216 atts["servings"] = servings; 217 } 218 if (blockType) { 219 atts["block-type"] = blockType; 220 } 221 if (blockId) { 222 atts["block-id"] = blockId; 223 } 224 225 if (recipeID) { 226 e.preventDefault(); 227 wpzoom_print_recipe(atts); 228 } 229 }); 230 }); 231 wpzoom_set_correct_ids_to_recipe_shortcode(); 232 233 // Cook Mode - keep the screen awake while cooking (NoSleep.js). 234 if (typeof NoSleep === "function") { 235 var noSleep = new NoSleep(); 236 var $toggleEl = $("#toggle_button"); 237 var wakeLockEnabled = false; 238 239 $toggleEl.on("click", function () { 240 if (!wakeLockEnabled && $toggleEl.is(":checked")) { 241 noSleep.enable(); 242 wakeLockEnabled = true; 243 } else { 244 noSleep.disable(); 245 wakeLockEnabled = false; 246 } 247 }); 248 249 if ("1" == wpzoomRecipeCard.defaultCookMode) { 250 $toggleEl.trigger("click"); 251 } 252 } 253 254 // Move auto-inserted rating stars into the theme's post meta area. 255 var $elementToMove = $("[data-js-move=true]:first-child"); 256 var elementTarget = $elementToMove.data("js-selector"); 257 if ($elementToMove.length && elementTarget) { 258 $elementToMove.appendTo(elementTarget); 259 } 260 }); 261})(jQuery, wpzoomRecipeCard); 262 263/** 264 * Make embeds responsive so they don't overflow their container. 265 * Add max-width & max-height to <iframe> elements, depending on their width & height props. 266 * 267 * @see Twenty Twenty-One file responsive-embeds.js. 268 * @since 2.7.8 269 * 270 * @return {void} 271 */ 272function recipeCardResponsiveEmbeds() { 273 let proportion, parentWidth; 274 275 // Loop iframe elements. 276 document.querySelectorAll("iframe").forEach(function (iframe) { 277 // Only continue if the iframe has a width & height defined. 278 if (iframe.width && iframe.height) { 279 // Calculate the proportion/ratio based on the width & height. 280 proportion = parseFloat(iframe.width) / parseFloat(iframe.height); 281 // Get the parent element's width. 282 parentWidth = parseFloat( 283 window 284 .getComputedStyle(iframe.parentElement, null) 285 .width.replace("px", "") 286 ); 287 // Set the max-width & height. 288 iframe.style.maxWidth = "100%"; 289 iframe.style.maxHeight = 290 Math.round(parentWidth / proportion).toString() + "px"; 291 } 292 }); 293} 294 295// Run on initial load. 296recipeCardResponsiveEmbeds(); 297 298// Run on resize. 299window.onresize = recipeCardResponsiveEmbeds;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.