{"id":160941,"date":"2025-08-27T11:42:56","date_gmt":"2025-08-27T10:42:56","guid":{"rendered":"https:\/\/sunsweeteurdev.wpenginepowered.com\/recipes\/r370-panforte-2\/"},"modified":"2026-01-29T17:37:58","modified_gmt":"2026-01-29T17:37:58","slug":"r370-panforte","status":"publish","type":"recipes","link":"https:\/\/sunsweet.eu\/no\/sviske-oppskrifter\/r370-panforte\/","title":{"rendered":"Panforte"},"content":{"rendered":"<svg aria-hidden=\"true\" style=\"position: absolute;width: 0;height: 0;overflow: hidden\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<defs>\n<symbol viewbox=\"9 9 46 42\" id=\"wpt-star-full\">\n\t<path d=\"m46.3 52-14.4-9.5-14.4 9.4L22 35.3 8.7 24.5l17.1-.9 6.2-16 6 16 17.2 1-13.4 10.7z\" \/>\n<\/symbol>\n<\/defs>\n<\/svg>\n<a class=\"button tasty-recipes-print-button tasty-recipes-no-print tasty-recipes-print-above-card\" href=\"https:\/\/sunsweet.eu\/no\/sviske-oppskrifter\/r370-panforte\/print\/986660\/\">Print<\/a><span class=\"tasty-recipes-jump-target\" id=\"tasty-recipes-986660-jump-target\" style=\"display:block;padding-top:2px;margin-top:-2px;\"><\/span><div id=\"tasty-recipes-986660\" data-tr-id=\"986660\" class=\"tasty-recipes tasty-recipes-986660 tasty-recipes-display tasty-recipes-has-image\" data-tasty-recipes-customization=\"primary-color.background-color secondary-color.border-color\">\n\n\n<div class=\"tasty-recipes-header\">\n\t\n\t<h2 class=\"tasty-recipes-title\" data-tasty-recipes-customization=\"h2-color.color h2-transform.text-transform\">Panforte<\/h2>\n\t<div class=\"tasty-recipes-image-button-container\">\n\t\t\t\t\t<div class=\"tasty-recipes-image\">\n\t\t\t\t<img decoding=\"async\" width=\"150\" height=\"113\" src=\"https:\/\/sunsweet.eu\/wp-content\/uploads\/2025\/08\/R370-scaled-1.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" data-pin-nopin=\"true\" \/>\t\t\t<\/div>\n\t\t\t\t<div class=\"tasty-recipes-buttons\">\n\t\t\t\t\t\t<div class=\"tasty-recipes-button-wrap\">\n\t\t\t\t\n<a class=\"button tasty-recipes-print-button tasty-recipes-no-print\" href=\"https:\/\/sunsweet.eu\/no\/sviske-oppskrifter\/r370-panforte\/print\/986660\/\" target=\"_blank\" data-tasty-recipes-customization=\"\">\n\t\t\t<svg viewBox=\"0 0 24 24\" class=\"svg-print\" aria-hidden=\"true\"><use xlink:href=\"#tasty-recipes-icon-print\"><\/use><\/svg>\n\t\tSkriv ut oppskrift<\/a>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t<\/div>\n\t\t\t<div class=\"tasty-recipes-rating\">\n\t\t\t\t\t\t\t\t\t\t<p><span data-tasty-recipes-customization=\"detail-label-color.color\" class=\"rating-label\"><\/span><\/p>\n\t\t\t\t\t<\/div>\n\t\n\t\t\t<div class=\"tasty-recipes-description\" data-tasty-recipes-customization=\"body-color.color\">\n\t\t\t<p>Denne luksuri\u00f8se toskanske kaken er full av frukt og n\u00f8tter og gir italiensk eleganse til baksten din. Perfekt til kaffe \u2013 eller som julegave.<\/p>\n\t\t<\/div>\n\t\n\t\t\t<div class=\"tasty-recipes-details\">\n\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li class=\"prep-time\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Tilberedningstid:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-prep-time\">60<\/span><\/li>\n\t\t\t\t\t\t\t\t\t<li class=\"total-time\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Total Time:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-total-time\">1 hour<\/span><\/li>\n\t\t\t\t\t\t\t\t\t<li class=\"yield\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Gir:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-yield\"><span data-amount=\"1\">1<\/span> <span class=\"tasty-recipes-yield-scale\"><span data-amount=\"1\">1<\/span>x<\/span><\/span><\/li>\n\t\t\t\t\t\t\t\t\t<li class=\"method\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Method:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-method\">import-no-post-live-01-dev<\/span><\/li>\n\t\t\t\t\t\t\t\t\t<li class=\"cuisine\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Cuisine:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-cuisine\">R370<\/span><\/li>\n\t\t\t\t\t\t\t<\/ul>\n\t\t<\/div>\n\t<\/div>\n\n<div class=\"tasty-recipes-content tasty-recipes-modern-compact-content\">\n\t\t\t<div class=\"tasty-recipe-ingredients\" data-tasty-recipes-customization=\"secondary-color.border-color\">\n\t\t\t<div class=\"tasty-recipes-ingredients-clipboard-container\" data-tasty-recipes-customization=\"secondary-color.background-color\">\n\t\t\t\t<h3 data-tasty-recipes-customization=\"secondary-color.background-color h3-color.color h3-transform.text-transform\">Ingredienser<\/h3>\n\t\t\t\t\t\t\t\t\t<button aria-label=\"Copy ingredients to clipboard\" class=\"tasty-recipes-copy-button\" data-text=\"Ingredienser\" data-success=\"Copied!\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-labelledby=\"copyIconTitle copyIconDesc\">\n\t<title id=\"copyIconTitle\">Copy to clipboard<\/title>\n\t<desc id=\"copyIconDesc\">Copy to clipboard<\/desc>\n  \t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 7v8a2 2 0 002 2h6M8 7V5a2 2 0 012-2h4.586a1 1 0 01.707.293l4.414 4.414a1 1 0 01.293.707V15a2 2 0 01-2 2h-2M8 7H6a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2v-2\"\/>\n<\/svg>\n<\/button>\t\t\t\t\t\t\t<\/div>\n\t\t\t<div class=\"tasty-recipes-units-scale-container\">\n\t\t\t\t\t\t\t\t\t<span class=\"tasty-recipes-convert-container\">\n\t\t\t\t\t\t<span class=\"tasty-recipes-convert-label\">Enheter<\/span>\n\t\t\t\t\t\t<button class=\"tasty-recipes-convert-button tasty-recipes-convert-button-active\" data-unit-type=\"metric\" type=\"button\">M<\/button><button class=\"tasty-recipes-convert-button\" data-unit-type=\"usc\" type=\"button\">US<\/button>\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"tasty-recipes-scale-container\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"tasty-recipes-scale-label\">Skaler<\/span>\n\t\t\t\t\t\t<button class=\"tasty-recipes-scale-button tasty-recipes-scale-button-active\" data-amount=\"1\" type=\"button\">1x<\/button><button class=\"tasty-recipes-scale-button\" data-amount=\"2\" type=\"button\">2x<\/button><button class=\"tasty-recipes-scale-button\" data-amount=\"3\" type=\"button\">3x<\/button>\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t<div class=\"tasty-recipes-ingredients-body\" data-tasty-recipes-customization=\"body-color.color\">\n\t\t\t\t<p><span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260cda\" id=\"ingredient_checkbox_69f1de0260cda\" aria-label=\"75 g ristede, hakkede hasseln\u00f8tter\"><label for=\"ingredient_checkbox_69f1de0260cda\"><\/label><\/span><span class=\"nutrifox-quantity\" data-amount=\"75\">75<\/span> <span class=\"nutrifox-unit\">g<\/span> ristede, hakkede hasseln\u00f8tter<\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260ce9\" id=\"ingredient_checkbox_69f1de0260ce9\" aria-label=\"75 g hakkede valn\u00f8tter\"><label for=\"ingredient_checkbox_69f1de0260ce9\"><\/label><\/span><span class=\"nutrifox-quantity\" data-amount=\"75\">75<\/span> <span class=\"nutrifox-unit\">g<\/span> hakkede valn\u00f8tter<\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260cf3\" id=\"ingredient_checkbox_69f1de0260cf3\" aria-label=\"50 g fullkornsmel\"><label for=\"ingredient_checkbox_69f1de0260cf3\"><\/label><\/span><span class=\"nutrifox-quantity\" data-amount=\"50\">50<\/span> <span class=\"nutrifox-unit\">g<\/span> fullkornsmel<\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d01\" id=\"ingredient_checkbox_69f1de0260d01\" aria-label=\"75 g kandisert appelsinskall i terninger\"><label for=\"ingredient_checkbox_69f1de0260d01\"><\/label><\/span><span class=\"nutrifox-quantity\" data-nf-original=\"metric\" data-nf-metric=\"75\" data-nf-usc=\"0.33\" data-unit=\"g\" data-nf-metric-unit=\"g\" data-nf-usc-unit=\"cup\" data-nf-food-id=\"17901\" data-nf-food-description=\"I Can't Believe It's Not Butter! Spread\" data-amount=\"75\">75<\/span> <span class=\"nutrifox-unit\" data-nf-original=\"metric\" data-nf-metric=\"g\" data-nf-usc=\"c\" data-nf-food-id=\"17901\" data-nf-food-description=\"I Can't Believe It's Not Butter! Spread\">g<\/span> kandisert appelsinskall i terninger<\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d0f\" id=\"ingredient_checkbox_69f1de0260d0f\" aria-label=\"120 g SUNSWEET-svisker\"><label for=\"ingredient_checkbox_69f1de0260d0f\"><\/label><\/span><span class=\"nutrifox-quantity\" data-nf-original=\"metric\" data-nf-metric=\"120\" data-nf-usc=\"0.51\" data-unit=\"g\" data-nf-metric-unit=\"g\" data-nf-usc-unit=\"cup\" data-nf-food-id=\"4188\" data-nf-food-description=\"Beverages, almond milk, unsweetened, shelf stable\" data-amount=\"120\">120<\/span> <span class=\"nutrifox-unit\" data-nf-original=\"metric\" data-nf-metric=\"g\" data-nf-usc=\"c\" data-nf-food-id=\"4188\" data-nf-food-description=\"Beverages, almond milk, unsweetened, shelf stable\">g<\/span> SUNSWEET-svisker<\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d19\" id=\"ingredient_checkbox_69f1de0260d19\" aria-label=\"50 g myk kandisert ingef\u00e6r (alternativt: kandisert sitronskall)\"><label for=\"ingredient_checkbox_69f1de0260d19\"><\/label><\/span><span class=\"nutrifox-quantity\" data-amount=\"50\">50<\/span> <span class=\"nutrifox-unit\">g<\/span> myk kandisert ingef\u00e6r (alternativt: kandisert sitronskall)<\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d22\" id=\"ingredient_checkbox_69f1de0260d22\" aria-label=\"75 g mild, kremet blomsterhonning\"><label for=\"ingredient_checkbox_69f1de0260d22\"><\/label><\/span><span class=\"nutrifox-quantity\" data-amount=\"75\">75<\/span> <span class=\"nutrifox-unit\">g<\/span> mild, kremet blomsterhonning<\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d29\" id=\"ingredient_checkbox_69f1de0260d29\" aria-label=\"2 ss vann\"><label for=\"ingredient_checkbox_69f1de0260d29\"><\/label><\/span><span data-amount=\"2\">2<\/span> ss vann <\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d31\" id=\"ingredient_checkbox_69f1de0260d31\" aria-label=\"60 g demerarasukker\"><label for=\"ingredient_checkbox_69f1de0260d31\"><\/label><\/span><span class=\"nutrifox-quantity\" data-amount=\"60\">60<\/span> <span class=\"nutrifox-unit\">g<\/span> demerarasukker<\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d37\" id=\"ingredient_checkbox_69f1de0260d37\" aria-label=\"En klype salt\"><label for=\"ingredient_checkbox_69f1de0260d37\"><\/label><\/span>En klype salt <\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d3e\" id=\"ingredient_checkbox_69f1de0260d3e\" aria-label=\"1 ts malt Ceylon-kanel\"><label for=\"ingredient_checkbox_69f1de0260d3e\"><\/label><\/span><span data-amount=\"1\">1<\/span> ts malt Ceylon-kanel <\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d44\" id=\"ingredient_checkbox_69f1de0260d44\" aria-label=\"2 ss melis\"><label for=\"ingredient_checkbox_69f1de0260d44\"><\/label><\/span><span data-amount=\"2\">2<\/span> ss melis <\/span><\/p>\n<p><strong>Ogs\u00e5:<\/strong><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d4d\" id=\"ingredient_checkbox_69f1de0260d4d\" aria-label=\"1 springform (16 cm)\"><label for=\"ingredient_checkbox_69f1de0260d4d\"><\/label><\/span><span data-amount=\"1\">1<\/span> springform (16 cm) <\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d53\" id=\"ingredient_checkbox_69f1de0260d53\" aria-label=\"1 ark bakepapir\"><label for=\"ingredient_checkbox_69f1de0260d53\"><\/label><\/span><span data-amount=\"1\">1<\/span> ark bakepapir <\/span><br \/>\n<span data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_69f1de0260d59\" id=\"ingredient_checkbox_69f1de0260d59\" aria-label=\"Fett til \u00e5 sm\u00f8re formen\"><label for=\"ingredient_checkbox_69f1de0260d59\"><\/label><\/span>Fett til \u00e5 sm\u00f8re formen<\/span><\/p>\n<!--INSIDE_INGREDIENTS-->\t\t\t<\/div>\n\t\t\t<div class=\"tasty-recipes-cook-mode\">\n\t<div class=\"tasty-recipes-cook-mode__container\">\n\t\t<label class=\"tasty-recipes-cook-mode__switch\">\n\t\t\t<input type=\"checkbox\" id=\"tasty_recipes_69f1de0261ec2_cookmode\">\n\t\t\t<span class=\"tasty-recipes-cook-mode__switch-slider tasty-recipes-cook-mode__switch-round\"\n\t\t\t\tdata-tasty-recipes-customization=\"button-color.background button-text-color.color\"><\/span>\n\t\t<\/label>\n\t\t<label for=\"tasty_recipes_69f1de0261ec2_cookmode\">\n\t\t\t<span class=\"tasty-recipes-cook-mode__label\">Matlagingsmodus<\/span>\n\t\t\t<span class=\"tasty-recipes-cook-mode__helper\">\n\t\t\t\tPrevent your screen from going dark\t\t\t<\/span>\n\t\t<\/label>\n\t<\/div>\n<\/div>\n\t\t<\/div>\n\t\n\t\t\t<div class=\"tasty-recipe-instructions\" data-tasty-recipes-customization=\"secondary-color.border-color\">\n\t\t\t<h3 data-tasty-recipes-customization=\"secondary-color.background-color h3-color.color h3-transform.text-transform\" \t\t\t\tdata-copyable=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\tFremgangsm\u00e5te\t\t\t<\/h3>\n\t\t\t\t\t\t<div class=\"tasty-recipes-instructions-body\" data-tasty-recipes-customization=\"body-color.color\">\n\t\t\t\t<ol>\n<li id=\"instruction-step-1\">Forvarm ovnen til 150 \u00b0C (varmluft 130 \u00b0C). Legg bakepapiret i bunnen av springformen, plasser ringen over bunnen og stram den til. Klipp av overlappende bakepapir hele veien rundt. Sm\u00f8r ca. 3 cm opp langs sidene av formen.<\/li>\n<li id=\"instruction-step-2\">Bland hasseln\u00f8tter, valn\u00f8tter, fullkornsmel og kandisert appelsinskall i en bolle. Hakk svisker og ingef\u00e6r og r\u00f8r det inn i blandingen.<\/li>\n<li id=\"instruction-step-3\">Varm honning, vann, demerarasukker, salt og kanel sammen i en kjele. R\u00f8r om og la det sm\u00e5koke i ca. 1 minutt til sukkeret er oppl\u00f8st. La det avkj\u00f8les og ha det i sviske- og n\u00f8tteblandingen. Bland sammen med en solid tresleiv, og bruk deretter hendene, om n\u00f8dvendig fuktet med litt vann, til du f\u00e5r en veldig fast og klissete deig.<\/li>\n<li id=\"instruction-step-4\">Ha deigen i den forberedte springformen, trykk godt ned med h\u00e5nden og glatt toppen. Stek panforten midt i ovnen i 40\u201345 minutter. Ta den ut av ovnen og legg den p\u00e5 en rist for avkj\u00f8ling i 45 minutter. Sikt et tykt lag med melis utover en tallerken. L\u00f8sne panforten fra kanten av formen med en kniv og vend den opp\u00e5 melisen. Fjern bakepapiret og sikt melis p\u00e5 denne siden ogs\u00e5. Skj\u00e6r panforten i 16\u201320 biter eller skiver f\u00f8r servering.<\/li>\n<\/ol>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\n\n\t<div class=\"tasty-recipes-notes\" data-tasty-recipes-customization=\"secondary-color.border-color\">\n\t\t<h3 data-tasty-recipes-customization=\"h3-color.color h3-transform.text-transform\">Notes<\/h3>\n\t\t<div class=\"tasty-recipes-notes-body\" data-tasty-recipes-customization=\"body-color.color\">\n\t\t\t<p>MK2<\/p>\n\t\t<\/div>\n\t<\/div>\n\n\n\n\t<div class=\"tasty-recipes-nutrition\" data-tasty-recipes-customization=\"secondary-color.border-color\">\n\t\t<h3 data-tasty-recipes-customization=\"h3-color.color h3-transform.text-transform\">Nutrition<\/h3>\n\t\t<ul>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">kalorier:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-calories\">117<\/span><\/li>\n\t\t\t\t\t<\/ul>\n\t<\/div>\n\n\n\n\n\n\n<script>\nwindow.trCommon={\"minRating\":6,\"ajaxurl\":\"https:\\\/\\\/sunsweet.eu\\\/wp-admin\\\/admin-ajax.php\",\"ratingNonce\":\"\",\"postId\":160941};\nwindow.TastyRecipes = window.TastyRecipes || {};\n\nwindow.TastyRecipes.smoothScroll = {\ninit() {\ndocument.addEventListener( 'click', ( e ) => {\nlet anchor = e.target;\nif ( anchor.tagName !== 'A' ) {\nanchor = anchor.closest( 'a.tasty-recipes-scrollto' );\n}\n\nif ( ! anchor || ! anchor.classList.contains( 'tasty-recipes-scrollto' ) ) {\nreturn;\n}\n\nconst elementHref = anchor.getAttribute( 'href' );\nif ( ! elementHref ) {\nreturn;\n}\n\ne.preventDefault();\nthis.goToSelector( elementHref );\n});\n},\ngoToSelector( selector ) {\nconst element = document.querySelector( selector );\nif ( ! element ) {\nreturn;\n}\nelement.scrollIntoView( { behavior: 'smooth' } );\n}\n};\n\ndocument.addEventListener(\n'DOMContentLoaded',\n() => window.TastyRecipes.smoothScroll.init()\n);\n\n(function(){\n\n\nvar bothEquals = function( d1, d2, D ) {\nvar ret = 0;\nif (d1<=D) {\nret++;\n}\nif (d2<=D) {\nret++;\n}\nreturn ret === 2;\n};\n\nvar frac =function frac(x,D,mixed){var n1=Math.floor(x),d1=1;var n2=n1+1,d2=1;if(x!==n1){while(bothEquals(d1,d2,D)){var m=(n1+n2)\/(d1+d2);if(x===m){if(d1+d2<=D){d1+=d2;n1+=n2;d2=D+1}else if(d1>d2){d2=D+1;}else {d1=D+1;}break}else if(x<m){n2=n1+n2;d2=d1+d2}else{n1=n1+n2;d1=d1+d2}}}if(d1>D){d1=d2;n1=n2}if(!mixed){return[0,n1,d1];}var q=Math.floor(n1\/d1);return[q,n1-q*d1,d1]};frac.cont=function cont(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1<D){A=Math.floor(B);P=A*P_1+P_2;Q=A*Q_1+Q_2;if(B-A<5e-8){break;}B=1\/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){if(Q_1>D){Q=Q_2;P=P_2}else{Q=Q_1;P=P_1}}if(!mixed){return[0,sgn*P,Q];}var q=Math.floor(sgn*P\/Q);return[q,sgn*P-q*Q,Q]};\n\n\nwindow.tastyRecipesVulgarFractions = JSON.parse(decodeURIComponent(\"%7B%22%C2%BC%22%3A%221%2F4%22%2C%22%C2%BD%22%3A%221%2F2%22%2C%22%C2%BE%22%3A%223%2F4%22%2C%22%E2%85%93%22%3A%221%2F3%22%2C%22%E2%85%94%22%3A%222%2F3%22%2C%22%E2%85%95%22%3A%221%2F5%22%2C%22%E2%85%96%22%3A%222%2F5%22%2C%22%E2%85%97%22%3A%223%2F5%22%2C%22%E2%85%98%22%3A%224%2F5%22%2C%22%E2%85%99%22%3A%221%2F6%22%2C%22%E2%85%9A%22%3A%225%2F6%22%2C%22%E2%85%9B%22%3A%221%2F8%22%2C%22%E2%85%9C%22%3A%223%2F8%22%2C%22%E2%85%9D%22%3A%225%2F8%22%2C%22%E2%85%9E%22%3A%227%2F8%22%7D\"));\n\nwindow.tastyRecipesFormatAmount = function(amount, el) {\nif ( parseFloat( amount ) === parseInt( amount ) ) {\nreturn amount;\n}\nvar roundType = 'frac';\nif (typeof el.dataset.amountShouldRound !== 'undefined') {\nif ('false' !== el.dataset.amountShouldRound) {\nif ( 'number' === el.dataset.amountShouldRound ) {\nroundType = 'number';\n} else if ('frac' === el.dataset.amountShouldRound) {\nroundType = 'frac';\n} else if ('vulgar' === el.dataset.amountShouldRound) {\nroundType = 'vulgar';\n} else {\nroundType = 'integer';\n}\n}\n}\nif ('number' === roundType) {\namount = Number.parseFloat(amount).toPrecision(2);\n} else if ('integer' === roundType) {\namount = Math.round(amount);\n} else if ('frac' === roundType || 'vulgar' === roundType) {\nvar denom = 8;\nif (typeof el.dataset.unit !== 'undefined') {\nvar unit = el.dataset.unit;\nif (['cups','cup','c'].includes(unit)) {\ndenom = 4;\nif (0.125 === amount) {\ndenom = 8;\n}\nif (\"0.1667\" === Number.parseFloat( amount ).toPrecision(4)) {\ndenom = 6;\n}\n}\nif (['tablespoons','tablespoon','tbsp'].includes(unit)) {\ndenom = 2;\n}\nif (['teaspoons','teaspoon','tsp'].includes(unit)) {\ndenom = 8;\n}\n}\nvar amountArray = frac.cont( amount, denom, true );\nvar newAmount = '';\nif ( amountArray[1] !== 0 ) {\nnewAmount = amountArray[1] + '\/' + amountArray[2];\nif ('vulgar' === roundType) {\nObject.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {\nif (newAmount === window.tastyRecipesVulgarFractions[vulgar]) {\nnewAmount = vulgar;\n}\n});\n}\n}\nif ( newAmount ) {\nnewAmount = ' ' + newAmount;\n}\nif ( amountArray[0] ) {\nnewAmount = amountArray[0] + newAmount;\n}\namount = newAmount;\n}\nreturn amount;\n};\n\n\nwindow.tastyRecipesUpdatePrintLink = () => {\n\nconst printButton = document.querySelector( '.tasty-recipes-print-button' );\n\n\nif ( ! printButton ) {\nreturn;\n}\n\nconst printURL = new URL( printButton.href );\nconst searchParams = new URLSearchParams( printURL.search );\n\nconst unitButton = document.querySelector( '.tasty-recipes-convert-button-active' );\nconst scaleButton = document.querySelector( '.tasty-recipes-scale-button-active' );\n\nlet unit = '';\nlet scale = '';\n\nif ( unitButton ) {\nunit = unitButton.dataset.unitType;\nsearchParams.delete('unit');\nsearchParams.set( 'unit', unit );\n}\n\nif ( scaleButton ) {\nscale = scaleButton.dataset.amount;\nsearchParams.set( 'scale', scale );\n}\n\nconst paramString = searchParams.toString();\nconst newURL = '' === paramString ? printURL.href : printURL.origin + printURL.pathname + '?' + paramString;\nconst printLinks = document.querySelectorAll( '.tasty-recipes-print-link' );\n\nprintLinks.forEach( ( el ) => {\nel.href = newURL;\n});\n\nconst printButtons = document.querySelectorAll( '.tasty-recipes-print-button' );\nprintButtons.forEach( ( el ) => {\nel.href = newURL;\n});\n};\n\n\ndocument.addEventListener( 'DOMContentLoaded', () => {\n\n\nif ( ! window.location.href.includes( '\/print\/' ) ) {\nreturn;\n}\n\nconst searchParams = new URLSearchParams( window.location.search );\n\nconst unit = searchParams.get( 'unit' );\nconst scale = searchParams.get( 'scale' );\n\nif ( unit && ( 'metric' === unit || 'usc' === unit ) ) {\ndocument.querySelector( '.tasty-recipes-convert-button[data-unit-type=\"' + unit + '\"]' ).click();\n}\n\nif ( scale && Number(scale) > 0 ) {\ndocument.querySelector( '.tasty-recipes-scale-button[data-amount=\"' + Number(scale) + '\"]' ).click();\n}\n});\n}());\n\n(function(){\nvar buttonClass = 'tasty-recipes-convert-button',\nbuttonActiveClass = 'tasty-recipes-convert-button-active',\nbuttons = document.querySelectorAll('.tasty-recipes-convert-button');\nif ( ! buttons ) {\nreturn;\n}\nbuttons.forEach(function(button){\nbutton.addEventListener('click', function(event){\nevent.preventDefault();\nvar recipe = event.target.closest('.tasty-recipes');\nif ( ! recipe ) {\nreturn;\n}\nvar otherButtons = recipe.querySelectorAll('.' + buttonClass);\notherButtons.forEach(function(bt){\nbt.classList.remove(buttonActiveClass);\n});\nbutton.classList.add(buttonActiveClass);\nvar unitType = button.dataset.unitType;\nvar dataset = 'nf' + unitType.charAt(0).toUpperCase() + unitType.slice(1);\nvar convertables = recipe.querySelectorAll('span[data-nf-original]');\nconvertables.forEach(function(convertable){\nif (typeof convertable.dataset.amountOriginalType === 'undefined'\n&& 'usc' === convertable.dataset.nfOriginal) {\nif (-1 !== convertable.innerText.indexOf('\/')) {\nconvertable.dataset.amountOriginalType = 'frac';\n}\nif (-1 !== convertable.innerText.indexOf('.')) {\nconvertable.dataset.amountOriginalType = 'number';\n}\nObject.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {\nif (-1 !== convertable.innerText.indexOf(vulgar)) {\nconvertable.dataset.amountOriginalType = 'vulgar';\n}\n});\n}\nconvertable.innerText = convertable.dataset[dataset];\nif (typeof convertable.dataset.unit !== 'undefined') {\nconvertable.dataset.unit = convertable.dataset[dataset + 'Unit'];\n}\nif (typeof convertable.dataset.amount !== 'undefined') {\nconvertable.dataset.amount = convertable.dataset[dataset];\nif ('metric' === unitType) {\nconvertable.dataset.amountShouldRound = parseInt(convertable.dataset.amount) >= 10 ? 'integer' : 'number';\n} else if (typeof convertable.dataset.amountOriginalType !== 'undefined') {\nconvertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType;\n} else {\nconvertable.dataset.amountShouldRound = false;\n}\nconvertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable);\n}\nif (convertable.classList.contains('nutrifox-unit')) {\nif ('gram' === convertable.dataset[dataset]) {\nconvertable.innerText = 'grams';\n}\n}\n});\n\ndocument.querySelectorAll('.tasty-recipes-scale-button-active').forEach(function(scaleButton){\nscaleButton.click();\n});\n\nwindow.tastyRecipesUpdatePrintLink();\n});\n});\n}());\n\n(function(){\nvar buttonClass = 'tasty-recipes-scale-button',\nbuttonActiveClass = 'tasty-recipes-scale-button-active',\nbuttons = document.querySelectorAll('.tasty-recipes-scale-button');\nif ( ! buttons ) {\nreturn;\n}\n\nbuttons.forEach(function(button){\nbutton.addEventListener('click', function(event){\nevent.preventDefault();\nvar recipe = event.target.closest('.tasty-recipes');\nif ( ! recipe ) {\nreturn;\n}\nvar otherButtons = recipe.querySelectorAll('.' + buttonClass);\notherButtons.forEach(function(bt){\nbt.classList.remove(buttonActiveClass);\n});\nbutton.classList.add(buttonActiveClass);\n\n\nvar scalables = recipe.querySelectorAll('span[data-amount]');\nvar buttonAmount = parseFloat( button.dataset.amount );\nscalables.forEach(function(scalable){\nif (typeof scalable.dataset.amountOriginalType === 'undefined'\n&& typeof scalable.dataset.nfOriginal === 'undefined') {\nif (-1 !== scalable.innerText.indexOf('\/')) {\nscalable.dataset.amountOriginalType = 'frac';\n}\nif (-1 !== scalable.innerText.indexOf('.')) {\nscalable.dataset.amountOriginalType = 'number';\n}\nObject.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {\nif (-1 !== scalable.innerText.indexOf(vulgar)) {\nscalable.dataset.amountOriginalType = 'vulgar';\n}\n});\nif (typeof scalable.dataset.amountOriginalType !== 'undefined') {\nscalable.dataset.amountShouldRound = scalable.dataset.amountOriginalType;\n}\n}\nvar amount = parseFloat( scalable.dataset.amount ) * buttonAmount;\namount = window.tastyRecipesFormatAmount(amount, scalable);\nif ( typeof scalable.dataset.unit !== 'undefined' ) {\nif ( ! scalable.classList.contains('nutrifox-quantity') ) {\nif ( ! scalable.classList.contains('nutrifox-second-quantity') ) {\namount += ' ' + scalable.dataset.unit;\n}\n}\n}\nscalable.innerText = amount;\n});\n\nvar nonNumerics = recipe.querySelectorAll('[data-has-non-numeric-amount]');\nnonNumerics.forEach(function(nonNumeric){\nvar indicator = nonNumeric.querySelector('span[data-non-numeric-label]');\nif ( indicator ) {\nnonNumeric.removeChild(indicator);\n}\nif ( 1 !== buttonAmount ) {\nindicator = document.createElement('span');\nindicator.setAttribute('data-non-numeric-label', true);\nvar text = document.createTextNode(' (x' + buttonAmount + ')');\nindicator.appendChild(text);\nnonNumeric.appendChild(indicator);\n}\n});\n\nwindow.tastyRecipesUpdatePrintLink();\n});\n});\n}());\n\n(function() {\n\ndocument.querySelectorAll('.tasty-recipes-copy-button').forEach(function(copyButton) {\nif (copyButton.getAttribute('data-tasty-recipes-click-event')) {\nreturn;\n}\ncopyButton.setAttribute('data-tasty-recipes-click-event', true);\n\ncopyButton.addEventListener('click', function(event) {\nevent.preventDefault();\nvar copyContainer = copyButton.closest('.tasty-recipes-ingredients-clipboard-container');\n\nvar messageText = copyButton.attributes.getNamedItem('data-success').nodeValue;\nvar copySuccessMessage = document.createElement('div');\nvar copySuccessParagraph = document.createElement('p');\ncopySuccessParagraph.innerText = messageText;\ncopySuccessMessage.appendChild(copySuccessParagraph);\ncopySuccessMessage.classList.add('tasty-recipes-flash-message');\nvar messageDuration = 3000;\n\nvar ingredients = [];\nvar ingredientsContainer = copyButton.closest('.tasty-recipes-ingredients') || copyButton.closest('.tasty-recipe-ingredients');\nvar foundIngredients = false;\nvar findIngredients = function(div) {\nif ( div.querySelectorAll('li').length ) {\ndiv.querySelectorAll('li').forEach(function(li) {\ningredients.push(li.innerText);\n});\nfoundIngredients = true;\n} else if ( div.querySelectorAll('p').length ) {\ndiv.querySelectorAll('p').forEach(function(p) {\ningredients.push(p.innerText);\n});\nfoundIngredients = true;\n}\n};\nif (ingredientsContainer.querySelector('.tasty-recipes-ingredients-body')) {\nfindIngredients(ingredientsContainer.querySelector('.tasty-recipes-ingredients-body'));\n} else {\ningredientsContainer.querySelectorAll('div').forEach(function(div) {\nif ( foundIngredients ) {\nreturn;\n}\nif ( div.classList.contains('tasty-recipes-ingredients-header')\n|| div.parentElement.classList.contains('tasty-recipes-ingredients-header')\n|| div.classList.contains('tasty-recipes-ingredients-header') ) {\nreturn;\n}\nfindIngredients(div);\n});\n}\n\nvar readableIngredients = '';\ningredients.forEach(function(ingredient) {\nreadableIngredients += ingredient + '\\n';\n});\nreadableIngredients = readableIngredients.trim();\n\nvar fakeElem = document.createElement(\"textarea\");\nfakeElem.style.fontSize = \"12pt\";\nfakeElem.style.border = \"0\";\nfakeElem.style.padding = \"0\";\nfakeElem.style.margin = \"0\";\nfakeElem.style.position = \"absolute\";\nfakeElem.style.left = \"-9999px\";\n\nvar yPosition = window.pageYOffset || document.documentElement.scrollTop;\nfakeElem.style.top = yPosition + 'px';\n\nfakeElem.setAttribute(\"readonly\", \"\");\nfakeElem.value = readableIngredients;\n\ndocument.body.appendChild(fakeElem);\n\nif (navigator.userAgent.match(\/ipad|iphone\/i)) {\nvar range = document.createRange();\n\nvar selection = window.getSelection();\nrange.selectNodeContents(fakeElem);\nselection.removeAllRanges();\nselection.addRange(range);\nfakeElem.setSelectionRange(0, 999999);\n} else {\nfakeElem.select();\n}\n\ndocument.execCommand(\"copy\");\n\ndocument.body.removeChild(fakeElem);\nfakeElem = null;\n\ncopyContainer.appendChild(copySuccessMessage);\n\nsetTimeout(function() {\ncopyContainer.removeChild(copySuccessMessage);\n}, messageDuration);\n});\n});\n\n}());\n\n(function(){\ndocument.querySelectorAll('[data-tr-ingredient-checkbox]').forEach(function(el) {\nvar input = el.querySelector('.tr-ingredient-checkbox-container input[type=\"checkbox\"]');\nif ( ! input ) {\nreturn;\n}\nif (input.checked) {\nel.dataset.trIngredientCheckbox = 'checked';\n}\nel.addEventListener('click', function(event) {\nif ( 'A' === event.target.nodeName\n|| 'INPUT' === event.target.nodeName\n|| 'LABEL' === event.target.nodeName ) {\nreturn;\n}\ninput.click();\n});\ninput.addEventListener('change', function() {\nel.dataset.trIngredientCheckbox = input.checked ? 'checked' : '';\n});\n});\n}());\n\nwindow.TastyRecipes = window.TastyRecipes || {};\nwindow.TastyRecipes.cookMode = {\nwakeLockApi: false,\nwakeLock: false,\ncookModeSelector: '.tasty-recipes-cook-mode',\ninit() {\nif (\"wakeLock\" in navigator && \"request\" in navigator.wakeLock) {\nthis.wakeLockApi = navigator.wakeLock;\n}\n\nconst cookModes = document.querySelectorAll(this.cookModeSelector);\n\nif (cookModes.length > 0) {\nfor (const cookMode of cookModes) {\nif (this.wakeLockApi) {\ncookMode.querySelector('input[type=\"checkbox\"]').addEventListener(\"change\", event => {\nthis.checkboxChange(event.target);\n}, false);\n} else {\ncookMode.style.display = \"none\";\n}\n}\n}\n},\ncheckboxChange(checkbox) {\nif (checkbox.checked) {\nthis.lock();\n} else {\nthis.unlock();\n}\n},\nsetCheckboxesState(state) {\nconst checkboxes = document.querySelectorAll(this.cookModeSelector + ' input[type=\"checkbox\"]');\nfor (const checkbox of checkboxes) {\ncheckbox.checked = state;\n}\n},\nasync lock() {\ntry {\nthis.wakeLock = await this.wakeLockApi.request(\"screen\");\nthis.wakeLock.addEventListener(\"release\", () => {\nthis.wakeLock = false;\nthis.setCheckboxesState(false);\n});\nthis.setCheckboxesState(true);\n} catch (error) {\nthis.setCheckboxesState(false);\n}\n},\nunlock() {\nif (this.wakeLock) {\nthis.wakeLock.release();\nthis.wakeLock = false;\n}\nthis.setCheckboxesState(false);\n}\n};\n\n(function(callback) {\nif (document.readyState !== \"loading\") {\ncallback();\n} else {\ndocument.addEventListener(\"DOMContentLoaded\", callback);\n}\n})(() => {\nwindow.TastyRecipes.cookMode.init();\n});\n\n\n\nwindow.TastyRecipes = window.TastyRecipes || {};\n\nwindow.TastyRecipes.staticTooltip = {\nelement: null,\ntooltipElement: null,\ndeleting: false,\ninit( element ) {\nif ( this.deleting ) {\nreturn;\n}\nthis.element = element;\nthis.buildElements();\n},\ndestroy() {\nif ( ! this.tooltipElement || this.deleting ) {\nreturn;\n}\n\nthis.deleting = true;\nthis.tooltipElement.classList.remove( 'opened' );\n\nsetTimeout( () => {\nthis.tooltipElement.remove();\nthis.deleting = false;\n}, 500 );\n},\nbuildElements() {\nconst tooltipElement = document.createElement( 'div' );\ntooltipElement.classList.add( 'tasty-recipes-static-tooltip');\ntooltipElement.setAttribute( 'id', 'tasty-recipes-tooltip' );\n\nconst currentTooltipElement = document.getElementById( 'tasty-recipes-tooltip' );\nif ( currentTooltipElement ) {\ndocument.body.replaceChild( tooltipElement, currentTooltipElement );\n} else {\ndocument.body.appendChild( tooltipElement );\n}\n\nthis.tooltipElement = document.getElementById( 'tasty-recipes-tooltip' );\n},\nshow() {\nif ( ! this.tooltipElement ) {\nreturn;\n}\n\nconst tooltipTop = this.element.getBoundingClientRect().top\n+ window.scrollY\n- 10 \/\/ 10px offset.\n- this.tooltipElement.getBoundingClientRect().height;\nconst tooltipLeft = this.element.getBoundingClientRect().left\n- ( this.tooltipElement.getBoundingClientRect().width \/ 2 )\n+ ( this.element.getBoundingClientRect().width \/ 2 ) - 1;\nconst posLeft = Math.max( 10, tooltipLeft );\nthis.maybeRemoveTail( posLeft !== tooltipLeft );\n\nthis.tooltipElement.setAttribute( 'style', 'top:' + tooltipTop + 'px;left:' + posLeft + 'px;' );\nthis.tooltipElement.classList.add( 'opened' );\n\n},\nmaybeRemoveTail( removeTail ) {\nif ( removeTail ) {\nthis.tooltipElement.classList.add( 'tr-hide-tail' );\n} else {\nthis.tooltipElement.classList.remove( 'tr-hide-tail' );\n}\n},\nchangeMessage( message ) {\nif ( ! this.tooltipElement ) {\nreturn;\n}\nthis.tooltipElement.innerHTML = message;\n}\n};\n\nwindow.TastyRecipes.ajax = {\nsendPostRequest( url, data, success, failure ) {\nconst xhr = new XMLHttpRequest();\nxhr.open( 'POST', url, true );\nxhr.send( this.preparePostData( data ) );\n\nxhr.onreadystatechange = () => {\nif ( 4 !== xhr.readyState ) {\nreturn;\n}\nif ( xhr.status === 200 ) {\nsuccess( JSON.parse( xhr.responseText ) );\nreturn;\n}\n\nfailure( xhr );\n};\n\nxhr.onerror = () => {\nfailure( xhr );\n};\n},\npreparePostData( data ) {\nconst formData = new FormData();\n\nfor ( const key in data ) {\nformData.append( key, data[key] );\n}\nreturn formData;\n},\n};\n\nwindow.TastyRecipes.ratings = {\ndefaultRating: 0,\ncurrentRatingPercentage: 100,\nsavingRating: false,\ninit( minRating ) {\nthis.minRating = minRating;\n\nthis.formWatchRating();\nthis.closeTooltipWhenClickOutside();\nthis.addBodyClassBasedOnSelectedRating();\nthis.backwardCompFormRatingPosition();\n},\nformWatchRating() {\nconst ratings = document.querySelectorAll('.tasty-recipes-no-ratings-buttons [data-rating]');\nif ( ratings.length <= 0 ) {\nreturn;\n}\nfor ( const rating of ratings ) {\nrating.addEventListener( 'click', event => {\nevent.preventDefault();\nthis.defaultRating = event.target.closest( '.checked' ).dataset.rating;\nthis.setCheckedStar( event.target );\nthis.maybeSendRating( this.defaultRating, event.target );\nthis.setRatingInForm( this.defaultRating );\n} );\n}\n},\ncloseTooltipWhenClickOutside() {\nwindow.addEventListener( 'click', e => {\n\/\/ Bailout (don't remove the tooltip) when the clicked element is a rating star, or it's the tooltip itself.\nif ( e.target.closest( '.tasty-recipes-rating' ) || e.target.classList.contains( 'tasty-recipes-static-tooltip' ) ) {\nreturn;\n}\n\nwindow.TastyRecipes.staticTooltip.destroy();\n} );\n},\n setRatingInForm( rating ) {\nconst ratingInput = document.querySelector( '#respond .tasty-recipes-rating[value=\"' + rating + '\"]' );\nif ( ! ratingInput ) {\nreturn;\n}\nratingInput.click();\n},\naddBodyClassBasedOnSelectedRating() {\nconst ratingInputs = document.querySelectorAll( 'input.tasty-recipes-rating' );\nif ( ! ratingInputs ) {\nreturn;\n}\nfor ( const ratingInput of ratingInputs ) {\nratingInput.addEventListener( 'click', currentEvent => {\nconst selectedRating = currentEvent.target.getAttribute( 'value' );\nthis.handleBodyClassByRating( selectedRating );\nthis.toggleCommentTextareaRequired( selectedRating );\n} );\n}\n},\nhandleBodyClassByRating( rating ) {\nif ( rating < this.minRating ) {\ndocument.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );\nreturn;\n}\ndocument.body.classList.add( 'tasty-recipes-selected-minimum-rating' );\n},\ntoggleCommentTextareaRequired( rating ) {\nconst commentTextarea = document.getElementById( 'comment' );\nif ( ! commentTextarea ) {\nreturn;\n}\n\nif ( rating < this.minRating ) {\ncommentTextarea.setAttribute( 'required', '' );\nreturn;\n}\n\ncommentTextarea.removeAttribute( 'required' );\n},\nmaybeSendRating( rating, element ) {\nif ( this.savingRating === rating ) {\nreturn;\n}\n\nthis.savingRating = rating;\nwindow.TastyRecipes.staticTooltip.init( element );\n\nconst recipeCardElement = element.closest( '.tasty-recipes' );\nif ( ! recipeCardElement ) {\nwindow.TastyRecipes.staticTooltip.destroy();\nreturn;\n}\n\nwindow.TastyRecipes.ajax.sendPostRequest(\nwindow.trCommon.ajaxurl,\n{\naction: 'tasty_recipes_save_rating',\nrating,\nnonce: window.trCommon.ratingNonce,\npost_id: window.trCommon.postId,\nrecipe_id: recipeCardElement.dataset.trId,\n},\n( response ) => {\nwindow.TastyRecipes.staticTooltip.changeMessage( response.data.message );\nwindow.TastyRecipes.staticTooltip.show();\nthis.updateAverageText( response.data, recipeCardElement );\nthis.maybeFillCommentForm( response.data );\n\n\/\/ Hide the tooltip after 5 seconds.\nsetTimeout( () => {\nthis.maybeResetTooltip( recipeCardElement, response.data, rating );\n}, 5000 );\n},\n() => {\nthis.resetTooltip( recipeCardElement );\n}\n);\n},\nupdateAverageText( data, recipeCardElement ) {\nif ( ! data.average ) {\nreturn;\n}\nthis.setRatingPercent( data );\n\nif ( ! data.count ) {\nreturn;\n}\n\nconst quickLink = document.querySelector( '.tasty-recipes-rating-link' );\nif ( quickLink ) {\nthis.setTextInContainer( quickLink, data );\nthis.setPartialStar( quickLink );\n}\n\nconst cardStars = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );\ncardStars.dataset.trDefaultRating = data.average;\nthis.setTextInContainer( recipeCardElement.querySelector( '.tasty-recipes-rating' ), data );\n},\nsetTextInContainer( container, data ) {\nif ( ! container ) {\nreturn;\n}\n\nif ( data.label ) {\nconst ratingLabelElement = container.querySelector( '.rating-label' );\nif ( ratingLabelElement ) {\nratingLabelElement.innerHTML = data.label;\n}\nreturn;\n}\n\nconst averageElement = container.querySelector( '.average' );\nif ( averageElement ) {\naverageElement.textContent = data.average;\n}\n\nconst countElement = container.querySelector( '.count' );\nif ( countElement ) {\ncountElement.textContent = data.count;\n}\n},\nsetPartialStar( container ) {\nconst highestStar = container.querySelector( '[data-rating=\"' + Math.ceil( this.defaultRating ) + '\"]' );\nif ( highestStar ) {\nhighestStar.dataset.trClip = this.currentRatingPercentage;\n}\n},\nsetRatingPercent( data ) {\nthis.defaultRating = data.average.toFixed( 1 );\nconst parts = data.average.toFixed( 2 ).toString().split( '.' );\nthis.currentRatingPercentage = parts[1] ? parts[1] : 100;\nif ( this.currentRatingPercentage === '00' ) {\nthis.currentRatingPercentage = 100;\n}\n},\nsetCheckedStar( target ) {\nconst cardRatingContainer = target.closest( '.tasty-recipes-ratings-buttons' );\nconst selectedRatingElement = cardRatingContainer.querySelector( '[data-tr-checked]' );\nif ( selectedRatingElement ) {\ndelete selectedRatingElement.dataset.trChecked;\n}\n\nconst thisStar = target.closest( '.tasty-recipes-rating' );\nthisStar.dataset.trChecked = 1;\nthisStar.querySelector( '[data-tr-clip]' ).dataset.trClip = 100;\n},\nmaybeFillCommentForm( data ) {\nif ( ! data.comment || ! data.comment.content ) {\nreturn;\n}\n\nconst commentForm = document.querySelector( '#commentform' );\nif ( ! commentForm ) {\nreturn;\n}\n\nconst commentBox = commentForm.querySelector( '[name=comment]' );\nif ( ! commentBox || commentBox.value ) {\nreturn;\n}\n\n\/\/ Add comment details for editing.\ncommentBox.innerHTML = data.comment.content;\nif ( data.comment.name ) {\ncommentForm.querySelector( '[name=author]' ).value = data.comment.name;\ncommentForm.querySelector( '[name=email]' ).value = data.comment.email;\n}\n},\nmaybeResetTooltip( recipeCardElement, data, rating ) {\nif ( this.savingRating === rating ) {\nthis.resetTooltip( recipeCardElement, data );\n}\n},\nresetTooltip( recipeCardElement, data ) {\nwindow.TastyRecipes.staticTooltip.destroy();\nthis.savingRating = false;\n\n\/\/ Reset the default rating.\nconst cardRatingContainer = recipeCardElement.querySelector( '.tasty-recipes-ratings-buttons' );\nif ( cardRatingContainer ) {\nthis.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;\ncardRatingContainer.dataset.trDefaultRating = this.defaultRating;\n\nthis.resetSelectedStar( cardRatingContainer, data );\n}\n},\nresetSelectedStar( cardRatingContainer ) {\nconst selectedRatingElement = cardRatingContainer.querySelector( '[data-rating=\"' + Math.ceil( this.defaultRating ) + '\"]' );\nif ( selectedRatingElement ) {\nselectedRatingElement.querySelector( '[data-tr-clip]' ).dataset.trClip = this.currentRatingPercentage;\nselectedRatingElement.parentNode.dataset.trChecked = 1;\n}\n\nconst previousSelectedElement= cardRatingContainer.querySelector( '[data-tr-checked]' );\nif ( previousSelectedElement ) {\nconst currentSelectedRating = previousSelectedElement.querySelector('[data-rating]');\nif ( currentSelectedRating !== selectedRatingElement ) {\ndelete previousSelectedElement.dataset.trChecked;\n}\n}\n},\nbackwardCompFormRatingPosition() {\nconst ratingsButtons = document.querySelector( '#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons' );\nif ( ! ratingsButtons ) {\nreturn;\n}\nconst ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);\nif ( ! ratingsButtonsStyles.display.includes( 'flex' ) ) {\nratingsButtons.style.direction = 'rtl';\n}\n\nif ( typeof tastyRecipesRating !== 'undefined' ) {\n\/\/ Select the rating that was previously selected in admin.\nratingsButtons.querySelector( '.tasty-recipes-rating[value=\"' + tastyRecipesRating + '\"]' ).checked = true;\n}\n\nconst ratingSpans = ratingsButtons.querySelectorAll( '.tasty-recipes-rating' );\nfor (const ratingSpan of ratingSpans) {\nratingSpan.addEventListener( 'click', event => {\nif ( ratingSpan === event.target ) {\nreturn;\n}\nratingSpan.previousElementSibling.click();\n} );\n}\n}\n};\n\n(function(callback) {\nif (document.readyState !== \"loading\") {\ncallback();\n} else {\nwindow.addEventListener( 'load', callback );\n}\n})(() => {\nwindow.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );\n});\n<\/script><\/div>\n","protected":false},"featured_media":149148,"menu_order":0,"template":"","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[135],"tags":[374,364],"by-meal":[212,211],"by_dietary_preference":[],"by_cooking_time":[],"by_product":[332],"class_list":["post-160941","recipes","type-recipes","status-publish","has-post-thumbnail","hentry","category-oppskrifter","tag-under-500-kalorier","tag-vegetarisk-kjottfri","by-meal-desserter-og-sote-fristelser","by-meal-jul","by_product-svisker"],"acf":[],"_links":{"self":[{"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/recipes\/160941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/recipes"}],"about":[{"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/types\/recipes"}],"version-history":[{"count":0,"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/recipes\/160941\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/media\/149148"}],"wp:attachment":[{"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/media?parent=160941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/categories?post=160941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/tags?post=160941"},{"taxonomy":"by-meal","embeddable":true,"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/by-meal?post=160941"},{"taxonomy":"by_dietary_preference","embeddable":true,"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/by_dietary_preference?post=160941"},{"taxonomy":"by_cooking_time","embeddable":true,"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/by_cooking_time?post=160941"},{"taxonomy":"by_product","embeddable":true,"href":"https:\/\/sunsweet.eu\/no\/wp-json\/wp\/v2\/by_product?post=160941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}