{"id":291,"date":"2025-06-30T22:36:29","date_gmt":"2025-06-30T22:36:29","guid":{"rendered":"https:\/\/learnenglish100.com\/cooking\/?p=291"},"modified":"2025-06-30T22:34:04","modified_gmt":"2025-06-30T22:34:04","slug":"sourdough-discard-cinnamon-rolls-recipe","status":"publish","type":"post","link":"https:\/\/learnenglish100.com\/cooking\/sourdough-discard-cinnamon-rolls-recipe\/","title":{"rendered":"Sourdough Discard Cinnamon Rolls Recipe"},"content":{"rendered":"\n<p>Every now and then, a recipe rolls into your life and sticks around like an old friend who knows exactly when to show up. For me, these sourdough discard cinnamon rolls are that kind of treat. They take me back to early mornings in South Philly, where the smell of something warm and buttery meant you were gonna be late for whatever you had planned. Because who in their right mind leaves the house when there's cinnamon in the oven?<\/p>\n\n\n\n<p>And hey, if you're into cozy, comfort-style recipes, you might also get a kick outta my <a href=\"https:\/\/learnenglish100.com\/cooking\/lemon-ginger-cinnamon-water-tea\/\">lemon ginger cinnamon water tea<\/a> or that spicy little <a href=\"https:\/\/learnenglish100.com\/cooking\/turmeric-trick-recipe\/\">turmeric trick recipe<\/a> I swear by on chilly mornings.<\/p>\n\n\n\n<p>Growing up, my Nonna never wasted anything. Leftover scraps of dough became fried zeppole, bits of cheese went into next-day frittata, and that sourdough starter? She didn\u2019t call it \"discard\" \u2014 she called it \"dough gold.\" And lemme tell ya, she was onto something. Nowadays, when I see folks tossing their discard, I get the urge to tap 'em on the shoulder and say, \"Hey, you're throwin' away the flavor, paisan.\"<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"832\" height=\"443\" fetchpriority=\"high\" src=\"https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/slicing-sourdough-discard-cinnamon-rolls.jpg\" alt=\"slicing sourdough discard cinnamon roll dough on floured counter\" class=\"wp-image-295\" srcset=\"https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/slicing-sourdough-discard-cinnamon-rolls.jpg 832w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/slicing-sourdough-discard-cinnamon-rolls-300x160.jpg 300w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/slicing-sourdough-discard-cinnamon-rolls-768x409.jpg 768w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/slicing-sourdough-discard-cinnamon-rolls-720x383.jpg 720w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/slicing-sourdough-discard-cinnamon-rolls-360x192.jpg 360w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/slicing-sourdough-discard-cinnamon-rolls-180x96.jpg 180w\" sizes=\"(max-width: 832px) 100vw, 832px\" \/><figcaption class=\"wp-element-caption\">Morning light on fresh cinnamon roll prep<\/figcaption><\/figure>\n\n\n\n<p>This recipe? It's built for mornings when you don't wanna wait for dough to rise like it\u2019s auditioning for Broadway. No, sir. This one's quick. We use that beautiful, tangy sourdough discard, throw in a little help from baking soda and powder, and boom \u2014 fluffy, gooey cinnamon rolls in about the time it takes to watch half an episode of your favorite show.<\/p>\n\n\n\n<p>They're rich. They're soft. They're full of that buttery, brown sugar cinnamon kinda love that just settles into your bones. But what's real slick here is how the discard plays into it. It adds this depth, almost like a whisper of tangy sour cream, tucked behind all that sweet, sticky goodness. Not too sour, not too sweet. Just right.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"806\" height=\"459\" src=\"https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/baked-sourdough-discard-cinnamon-rolls.jpg\" alt=\"baked sourdough discard cinnamon rolls in skillet with icing\" class=\"wp-image-296\" srcset=\"https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/baked-sourdough-discard-cinnamon-rolls.jpg 806w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/baked-sourdough-discard-cinnamon-rolls-300x171.jpg 300w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/baked-sourdough-discard-cinnamon-rolls-768x437.jpg 768w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/baked-sourdough-discard-cinnamon-rolls-720x410.jpg 720w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/baked-sourdough-discard-cinnamon-rolls-360x205.jpg 360w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/baked-sourdough-discard-cinnamon-rolls-180x103.jpg 180w\" sizes=\"auto, (max-width: 806px) 100vw, 806px\" \/><figcaption class=\"wp-element-caption\">Golden rolls fresh from the oven<\/figcaption><\/figure>\n\n\n\n<p>And look, we all got those mornings where you wanna treat the crew, but you didn\u2019t plan ahead. No worries. You can whip these up fast, but if you do have the time? Let that dough rest overnight without the leavening, then add the magic powder and soda the next day. It\u2019ll give you a roll that\u2019s got a little more chew and a little more wow.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"794\" height=\"455\" src=\"https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/cooling-cinnamon-rolls-icing.jpg\" alt=\"cooling cinnamon rolls with cream cheese drizzle\" class=\"wp-image-297\" srcset=\"https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/cooling-cinnamon-rolls-icing.jpg 794w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/cooling-cinnamon-rolls-icing-300x172.jpg 300w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/cooling-cinnamon-rolls-icing-768x440.jpg 768w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/cooling-cinnamon-rolls-icing-720x413.jpg 720w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/cooling-cinnamon-rolls-icing-360x206.jpg 360w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/cooling-cinnamon-rolls-icing-180x103.jpg 180w\" sizes=\"auto, (max-width: 794px) 100vw, 794px\" \/><figcaption class=\"wp-element-caption\">Adding the final touch of icing<\/figcaption><\/figure>\n\n\n\n<p>And let\u2019s not forget the cream cheese topping. Mine gets a little maple syrup mixed in, just like Nonna used to do with her cannoli cream on Sundays. It\u2019s smooth, rich, and just sweet enough to make you close your eyes after the first bite.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"444\" src=\"https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/plated-sourdough-discard-roll.jpg\" alt=\"plated sourdough discard cinnamon roll with fork marks\" class=\"wp-image-298\" style=\"width:720px;height:auto\" srcset=\"https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/plated-sourdough-discard-roll.jpg 624w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/plated-sourdough-discard-roll-300x213.jpg 300w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/plated-sourdough-discard-roll-360x256.jpg 360w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/plated-sourdough-discard-roll-180x128.jpg 180w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><figcaption class=\"wp-element-caption\">Ready to eat, and impossible to resist<\/figcaption><\/figure>\n\n\n\n<p>These rolls are everything I want in a weekend bake: comforting, no-fuss, and full of flavor. So next time you're staring down that jar of discard wondering what to do with it, trust me \u2014 these cinnamon rolls are the move.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQs<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Can I use sourdough discard for cinnamon rolls?<\/h3>\n\n\n\n<p>Absolutely. Discard adds moisture and flavor, and with the right leavening, you still get that lovely fluffy texture.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Is sourdough good for cinnamon rolls?<\/h3>\n\n\n\n<p>Heck yeah! It brings a whole extra layer of flavor. That little tang sets the sweetness off just right.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I use sourdough discard in any recipe?<\/h3>\n\n\n\n<p>Almost any! Just remember: discard has no rising power unless it's still active. But flavor-wise? It goes great in pancakes, waffles, crackers, cookies, you name it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I just bake my sourdough discard?<\/h3>\n\n\n\n<p>Well, you could, but I wouldn\u2019t. It needs a little help (think flour, eggs, leavening) to shine. Plain baked discard might be, uh, not exactly delicious.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"808\" height=\"451\" src=\"https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/finished-sourdough-discard-cinnamon-rolls.jpg\" alt=\"finished sourdough discard cinnamon rolls in pan\" class=\"wp-image-299\" srcset=\"https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/finished-sourdough-discard-cinnamon-rolls.jpg 808w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/finished-sourdough-discard-cinnamon-rolls-300x167.jpg 300w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/finished-sourdough-discard-cinnamon-rolls-768x429.jpg 768w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/finished-sourdough-discard-cinnamon-rolls-720x402.jpg 720w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/finished-sourdough-discard-cinnamon-rolls-360x201.jpg 360w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/finished-sourdough-discard-cinnamon-rolls-180x100.jpg 180w, https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/finished-sourdough-discard-cinnamon-rolls-320x180.jpg 320w\" sizes=\"auto, (max-width: 808px) 100vw, 808px\" \/><figcaption class=\"wp-element-caption\">The perfect cozy bake<\/figcaption><\/figure>\n\n\n<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:\/\/learnenglish100.com\/cooking\/sourdough-discard-cinnamon-rolls-recipe\/print\/300\/\">Print<\/a><span class=\"tasty-recipes-jump-target\" id=\"tasty-recipes-300-jump-target\" style=\"display:block;padding-top:2px;margin-top:-2px;\"><\/span><div id=\"tasty-recipes-300\" data-tr-id=\"300\" class=\"tasty-recipes tasty-recipes-300 tasty-recipes-display tasty-recipes-has-image\">\n\n\n<h2 class=\"tasty-recipes-title\" data-tasty-recipes-customization=\"h2-color.color h2-transform.text-transform\">Sourdough Discard Cinnamon Rolls Recipe<\/h2>\n<div class=\"tasty-recipes-image-button-container\">\n\t\t\t<div class=\"tasty-recipes-image\">\n\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/learnenglish100.com\/cooking\/wp-content\/uploads\/2025\/06\/finished-sourdough-discard-cinnamon-rolls-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"finished sourdough discard cinnamon rolls in pan\" data-pin-nopin=\"true\" \/>\t\t<\/div>\n\t\t<div class=\"tasty-recipes-buttons\">\n\t\t\t\t<div class=\"tasty-recipes-button-wrap\">\n\t\t\t\n<a class=\"button tasty-recipes-print-button tasty-recipes-no-print\" href=\"https:\/\/learnenglish100.com\/cooking\/sourdough-discard-cinnamon-rolls-recipe\/print\/300\/\" 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\tPrint Recipe<\/a>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n<\/div>\n\t<div class=\"tasty-recipes-rating\" data-tasty-recipes-customization=\"body-color.color\">\n\t\t\t\t\t<p><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<span class=\"tasty-recipes-ratings-buttons tasty-recipes-no-ratings-buttons\"\tdata-tr-default-rating=\"0\"\t>\t\t<span class=\"tasty-recipes-rating\" >\t\t<i class=\"checked\" data-rating=\"5\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t<svg class=\"tasty-recipes-svg\" width=\"18\" height=\"17\"><use href=\"#wpt-star-full\" \/><\/svg>\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t5 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\" >\t\t<i class=\"checked\" data-rating=\"4\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t<svg class=\"tasty-recipes-svg\" width=\"18\" height=\"17\"><use href=\"#wpt-star-full\" \/><\/svg>\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t4 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\" >\t\t<i class=\"checked\" data-rating=\"3\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t<svg class=\"tasty-recipes-svg\" width=\"18\" height=\"17\"><use href=\"#wpt-star-full\" \/><\/svg>\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t3 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\" >\t\t<i class=\"checked\" data-rating=\"2\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t<svg class=\"tasty-recipes-svg\" width=\"18\" height=\"17\"><use href=\"#wpt-star-full\" \/><\/svg>\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t2 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\" >\t\t<i class=\"checked\" data-rating=\"1\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t<svg class=\"tasty-recipes-svg\" width=\"18\" height=\"17\"><use href=\"#wpt-star-full\" \/><\/svg>\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t1 Star\t\t\t<\/span>\t\t<\/i>\t<\/span><\/span><\/p>\n\t\t\t\t\t\t\t<p><span data-tasty-recipes-customization=\"detail-label-color.color\" class=\"rating-label\">No reviews<\/span><\/p>\n\t\t\t<\/div>\n\n\n\t<div class=\"tasty-recipes-description\" data-tasty-recipes-customization=\"body-color.color\">\n\t\t<p>Soft, rich, buttery cinnamon rolls made with sourdough discard for extra flavor and tenderness. Quick to make, comforting to eat, and the perfect way to use that discard.<\/p>\n\t<\/div>\n\n\t<div class=\"tasty-recipes-details\" data-tasty-recipes-customization=\"body-color.color\">\n\t\t<ul>\n\t\t\t\t\t\t\t<li class=\"author\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Author:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-author-name\">Frankie<\/span><\/li>\n\t\t\t\t\t\t\t<li class=\"prep-time\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Prep Time:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-prep-time\">15 minutes<\/span><\/li>\n\t\t\t\t\t\t\t<li class=\"cook-time\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Cook Time:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-cook-time\">35 minutes<\/span><\/li>\n\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\">50 minutes<\/span><\/li>\n\t\t\t\t\t\t\t<li class=\"yield\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Yield:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-yield\"><span data-amount=\"12\">12<\/span> rolls <span class=\"tasty-recipes-yield-scale\"><span data-amount=\"1\">1<\/span>x<\/span><\/span><\/li>\n\t\t\t\t\t\t\t<li class=\"category\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Category:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-category\">Breakfast, Brunch<\/span><\/li>\n\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\">Baked<\/span><\/li>\n\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\">American<\/span><\/li>\n\t\t\t\t\t\t\t<li class=\"diet\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Diet:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-diet\">Vegetarian<\/span><\/li>\n\t\t\t\t\t<\/ul>\n\t<\/div>\n\n\t<div class=\"tasty-recipes-ingredients\">\n\t\t<div class=\"tasty-recipes-ingredients-header\">\n\t\t\t<div class=\"tasty-recipes-ingredients-clipboard-container\">\n\t\t\t\t<h3 data-tasty-recipes-customization=\"h3-color.color h3-transform.text-transform\">Ingredients<\/h3>\n\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\t\t\t\t<span class=\"tasty-recipes-scale-container\">\n\t\t\t\t\t\t<span class=\"tasty-recipes-scale-label\">Scale<\/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<\/div>\n\t\t<div class=\"tasty-recipes-ingredients-body\" data-tasty-recipes-customization=\"body-color.color\">\n\t\t\t<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9c7e\" id=\"ingredient_checkbox_6a38f097c9c7e\" aria-label=\"4 cups all-purpose flour\"><label for=\"ingredient_checkbox_6a38f097c9c7e\"><\/label><\/span><span data-amount=\"4\" data-unit=\"cup\">4 cups<\/span> all-purpose flour<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9c9a\" id=\"ingredient_checkbox_6a38f097c9c9a\" aria-label=\"1 teaspoon baking soda\"><label for=\"ingredient_checkbox_6a38f097c9c9a\"><\/label><\/span><span data-amount=\"1\" data-unit=\"tsp\">1 tsp<\/span> baking soda<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9caa\" id=\"ingredient_checkbox_6a38f097c9caa\" aria-label=\"2 teaspoon baking powder\"><label for=\"ingredient_checkbox_6a38f097c9caa\"><\/label><\/span><span data-amount=\"2\" data-unit=\"tsp\">2 tsp<\/span> baking powder<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9cb8\" id=\"ingredient_checkbox_6a38f097c9cb8\" aria-label=\"1 teaspoon salt\"><label for=\"ingredient_checkbox_6a38f097c9cb8\"><\/label><\/span><span data-amount=\"1\" data-unit=\"tsp\">1 tsp<\/span> salt<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9cc6\" id=\"ingredient_checkbox_6a38f097c9cc6\" aria-label=\"1 cup sourdough discard (unfed starter)\"><label for=\"ingredient_checkbox_6a38f097c9cc6\"><\/label><\/span><span data-amount=\"1\" data-unit=\"cup\">1 cup<\/span> sourdough discard (unfed starter)<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9cd3\" id=\"ingredient_checkbox_6a38f097c9cd3\" aria-label=\"1 cup water\"><label for=\"ingredient_checkbox_6a38f097c9cd3\"><\/label><\/span><span data-amount=\"1\" data-unit=\"cup\">1 cup<\/span> water<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9ce1\" id=\"ingredient_checkbox_6a38f097c9ce1\" aria-label=\"\u00bd cup butter, melted and cooled\"><label for=\"ingredient_checkbox_6a38f097c9ce1\"><\/label><\/span><span data-amount=\"0.5\" data-unit=\"cup\">\u00bd cup<\/span> butter, melted and cooled<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9cee\" id=\"ingredient_checkbox_6a38f097c9cee\" aria-label=\"\u00bc cup honey\"><label for=\"ingredient_checkbox_6a38f097c9cee\"><\/label><\/span><span data-amount=\"0.25\" data-unit=\"cup\">\u00bc cup<\/span> honey<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9cfa\" id=\"ingredient_checkbox_6a38f097c9cfa\" aria-label=\"\u00bd cup butter, softened\"><label for=\"ingredient_checkbox_6a38f097c9cfa\"><\/label><\/span><span data-amount=\"0.5\" data-unit=\"cup\">\u00bd cup<\/span> butter, softened<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9d07\" id=\"ingredient_checkbox_6a38f097c9d07\" aria-label=\"1 cup brown sugar\"><label for=\"ingredient_checkbox_6a38f097c9d07\"><\/label><\/span><span data-amount=\"1\" data-unit=\"cup\">1 cup<\/span> brown sugar<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9d13\" id=\"ingredient_checkbox_6a38f097c9d13\" aria-label=\"2 tablespoon cinnamon\"><label for=\"ingredient_checkbox_6a38f097c9d13\"><\/label><\/span><span data-amount=\"2\" data-unit=\"tbsp\">2 tbsp<\/span> cinnamon<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9d20\" id=\"ingredient_checkbox_6a38f097c9d20\" aria-label=\"6 oz cream cheese\"><label for=\"ingredient_checkbox_6a38f097c9d20\"><\/label><\/span><span data-amount=\"6\" data-unit=\"oz\">6 oz<\/span> cream cheese<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9d2c\" id=\"ingredient_checkbox_6a38f097c9d2c\" aria-label=\"\u00bd cup heavy cream\"><label for=\"ingredient_checkbox_6a38f097c9d2c\"><\/label><\/span><span data-amount=\"0.5\" data-unit=\"cup\">\u00bd cup<\/span> heavy cream<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9d39\" id=\"ingredient_checkbox_6a38f097c9d39\" aria-label=\"\u00bd cup maple syrup or honey\"><label for=\"ingredient_checkbox_6a38f097c9d39\"><\/label><\/span><span data-amount=\"0.5\" data-unit=\"cup\">\u00bd cup<\/span> maple syrup or honey<\/p>\n<p data-tr-ingredient-checkbox=\"\"><span class=\"tr-ingredient-checkbox-container\"><input type=\"checkbox\" name=\"ingredient_checkbox_6a38f097c9d46\" id=\"ingredient_checkbox_6a38f097c9d46\" aria-label=\"2 teaspoon vanilla extract\"><label for=\"ingredient_checkbox_6a38f097c9d46\"><\/label><\/span><span data-amount=\"2\" data-unit=\"tsp\">2 tsp<\/span> vanilla extract<\/p>\n<!--INSIDE_INGREDIENTS-->\t\t<\/div>\n\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_6a38f097cc4a5_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_6a38f097cc4a5_cookmode\">\n\t\t\t<span class=\"tasty-recipes-cook-mode__label\">Cook Mode<\/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<\/div>\n\n\t<div class=\"tasty-recipe-instructions\">\n\t\t<div class=\"tasty-recipes-instructions-header\">\n\t\t\t<h3 data-tasty-recipes-customization=\"h3-color.color h3-transform.text-transform\">Instructions<\/h3>\n\t\t\t\t\t<\/div>\n\t\t<div class=\"tasty-recipes-instructions-body\" data-tasty-recipes-customization=\"body-color.color\">\n\t\t\t<ol>\n<li id=\"instruction-step-1\">Preheat oven to 375\u00b0F. Grease a 14\" cast iron skillet or 9x13 baking dish.<\/li>\n<li id=\"instruction-step-2\">In a large bowl, whisk together flour, baking soda, baking powder, and salt.<\/li>\n<li id=\"instruction-step-3\">Add in sourdough discard, water, cooled melted butter, and honey. Mix until a dough forms.<\/li>\n<li id=\"instruction-step-4\">Roll the dough onto a floured surface into a rectangle about \u00bc\" thick.<\/li>\n<li id=\"instruction-step-5\">In a small bowl, mix softened butter, brown sugar, and cinnamon.<\/li>\n<li id=\"instruction-step-6\">Spread the filling evenly over the dough.<\/li>\n<li id=\"instruction-step-7\">Roll the dough tightly from the long side. Pinch the seam to close.<\/li>\n<li id=\"instruction-step-8\">Slice into 12 even rolls using floss, thread, or a sharp knife.<\/li>\n<li id=\"instruction-step-9\">Arrange rolls in the prepared skillet or pan, slightly spaced.<\/li>\n<li id=\"instruction-step-10\">Bake 25-35 minutes until golden brown.<\/li>\n<li id=\"instruction-step-11\">While baking, heat cream cheese, heavy cream, maple syrup, and vanilla in a saucepan. Stir until smooth. Optional: blend for extra smoothness.<\/li>\n<li id=\"instruction-step-12\">Let baked rolls cool slightly, then pour icing over the top and serve warm.<\/li>\n<\/ol>\n\t\t<\/div>\n\t<\/div>\n\n\n\n\t<div class=\"tasty-recipes-notes\">\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<ul>\n<li>Want a deeper sour flavor? Let the dough rest overnight without the leavening, then add it in the morning.<\/li>\n<li>Rolls placed close together stay soft and gooey. Spread apart = firmer, more defined rolls.<\/li>\n<li>Try freezing unfrosted rolls for later. Just reheat, ice, and you're golden.<\/li>\n<li>Dental floss is a great trick for slicing clean rolls without smushing them.<\/li>\n<\/ul>\n\t\t<\/div>\n\t<\/div>\n\n\n\n\t<div class=\"tasty-recipes-nutrition\">\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\">Serving Size:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-serving-size\">1 roll<\/span><\/li>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">Calories:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-calories\">523Kcal<\/span><\/li>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">Sugar:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-sugar\">33g<\/span><\/li>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">Sodium:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-sodium\">533mg<\/span><\/li>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">Fat:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-fat\">24g<\/span><\/li>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">Saturated Fat:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-saturated-fat\">15g<\/span><\/li>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">Unsaturated Fat:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-unsaturated-fat\">7g<\/span><\/li>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">Trans Fat:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-trans-fat\">1g<\/span><\/li>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">Carbohydrates:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-carbohydrates\">71g<\/span><\/li>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">Fiber:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-fiber\">2g<\/span><\/li>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">Protein:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-protein\">6g<\/span><\/li>\n\t\t\t\t\t\t\t<li><strong class=\"tasty-recipes-label\" data-tasty-recipes-customization=\"body-color.color\">Cholesterol:<\/strong> <span data-tasty-recipes-customization=\"body-color.color\" class=\"tasty-recipes-cholesterol\">66mg<\/span><\/li>\n\t\t\t\t\t<\/ul>\n\t<\/div>\n\n\n<footer class=\"tasty-recipes-entry-footer\">\n\t<h3 data-tasty-recipes-customization=\"footer-heading-color.color h3-transform.text-transform footer-heading.innerText\">Did you make this recipe?<\/h3>\n\t<div data-tasty-recipes-customization=\"footer-description-color.color footer-description.innerHTML\"><p>Share a photo and tag us \u2014 we can't wait to see what you've made!<\/p><\/div>\n<\/footer>\n\n\n\n<script>\nwindow.trCommon={\"minRating\":6,\"ajaxurl\":\"https:\\\/\\\/learnenglish100.com\\\/cooking\\\/wp-admin\\\/admin-ajax.php\",\"ratingNonce\":\"\",\"postId\":291};\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-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(){\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>","protected":false},"excerpt":{"rendered":"<p>Every now and then, a recipe rolls into your life and sticks around like an old friend who knows exactly when to show up. For me, these sourdough discard cinnamon rolls are that kind of treat. They take me back to early mornings in South Philly, where the smell of something warm and buttery meant...<\/p>\n<p><a class=\"more-link\" href=\"https:\/\/learnenglish100.com\/cooking\/sourdough-discard-cinnamon-rolls-recipe\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":295,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[1],"class_list":{"0":"post-291","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-tricks","8":"entry"},"_links":{"self":[{"href":"https:\/\/learnenglish100.com\/cooking\/wp-json\/wp\/v2\/posts\/291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/learnenglish100.com\/cooking\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/learnenglish100.com\/cooking\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/learnenglish100.com\/cooking\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/learnenglish100.com\/cooking\/wp-json\/wp\/v2\/comments?post=291"}],"version-history":[{"count":4,"href":"https:\/\/learnenglish100.com\/cooking\/wp-json\/wp\/v2\/posts\/291\/revisions"}],"predecessor-version":[{"id":302,"href":"https:\/\/learnenglish100.com\/cooking\/wp-json\/wp\/v2\/posts\/291\/revisions\/302"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/learnenglish100.com\/cooking\/wp-json\/wp\/v2\/media\/295"}],"wp:attachment":[{"href":"https:\/\/learnenglish100.com\/cooking\/wp-json\/wp\/v2\/media?parent=291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learnenglish100.com\/cooking\/wp-json\/wp\/v2\/categories?post=291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}