• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

Simple Daily Eats

  • Home
  • Recipe Index
  • Budget
  • Cheat Meal
  • Healthy
  • Keto
  • Quick
  • Vegan
  • About
  • Contact

Simple Daily Eats

  • Home
  • Recipe Index
  • Budget
  • Cheat Meal
  • Healthy
  • Keto
  • Quick
  • Vegan
  • About
  • Contact

Moist Carrot Bundt Cake

Jump to Recipe·Print Recipe

If you’re looking for a delightful treat that feels both comforting and special, this Moist Carrot Bundt Cake is just the thing! It’s perfect for any occasion—whether you’re hosting an afternoon tea, celebrating a birthday, or simply enjoying a cozy evening at home. The combination of tender carrots and warm spices creates a cake that’s not only delicious but also visually stunning when served from a Bundt pan. And let’s not forget about that luscious cream cheese glaze that takes it over the top!

Moist Carrot Bundt Cake image 2

This recipe has quickly become one of my favorites because it balances indulgence with wholesome ingredients. Every bite is packed with flavor and just the right amount of sweetness, making it a hit with family and friends alike.

Moist Carrot Bundt Cake image 3
Moist Carrot Bundt Cake image 4

Why You’ll Love This Recipe

  • Deliciously Moist: Each slice is soft and tender, thanks to the grated carrots and pineapple.
  • Easy to Make: With simple steps and straightforward ingredients, even novice bakers can whip this up!
  • Perfect for Sharing: This cake serves 12, making it ideal for gatherings or potlucks.
  • Make Ahead Friendly: Bake it in advance and enjoy it later. It stays moist for days!
  • Customizable Toppings: The cream cheese glaze can be swapped or adjusted to your liking.

Ingredients You’ll Need

You’ll love how simple and wholesome these ingredients are! They come together beautifully to create a cake that’s not only delicious but also nourishing.

For the Cake

  • 2 cups finely grated carrots (about 3 medium-sized carrots)
  • 1 cup canned pineapple
  • 2¼ cups all-purpose flour (plain flour in the UK)
  • ¼ cup cornstarch
  • 2 tsps baking powder
  • ½ tsp baking soda
  • ½ tsp salt
  • 2½ tsps cinnamon (ground)
  • 1¾ tsps ginger (ground/powdered)
  • ¼ tsp cloves (ground)
  • ½ tsp nutmeg (ground)
  • 1½ cups soft brown sugar (firmly packed)
  • 3 large eggs (room temperature)
  • 1 cup unflavoured vegetable oil (I use canola)
  • 3 tsps vanilla essence/extract
  • ½ cup yoghurt (unsweetened, regular not Greek; low fat Greek yoghurt is okay; room temperature)
  • 1 cup pecans or walnuts (coarsely chopped; I like to use both so I use ½ a cup of each.)

For the Cream Cheese Glaze

  • 2 cups powdered sugar (also known as icing/confectioners’ sugar)
  • 2 tsps unsalted butter (melted)
  • ½ tsp vanilla extract/essence
  • ¾ cup cream cheese (room temperature)

Variations

One of the best parts about this Moist Carrot Bundt Cake is its flexibility! You can easily switch things up based on what you have on hand or your personal preferences.

  • Add some zest: Incorporate the zest of one orange or lemon for a bright citrus flavor.
  • Make it nut-free: Omit the nuts altogether or replace them with sunflower seeds for crunch without allergens.
  • Spice it up: Add some ground cardamom or allspice for an exotic twist!
  • Go vegan: Substitute eggs with flax eggs and swap yogurt for plant-based yogurt.

How to Make Moist Carrot Bundt Cake

Step 1: Prepare Your Oven and Pan

Preheat your oven to 350°F (175°C). Grease your Bundt pan generously with oil or baking spray to ensure an easy release after baking. A well-prepared pan means your beautiful cake will come out intact!

Step 2: Mix Dry Ingredients

In a large bowl, whisk together all-purpose flour, cornstarch, baking powder, baking soda, salt, cinnamon, ginger, cloves, and nutmeg. This step blends the dry ingredients evenly so that every bite of your cake is perfectly spiced!

Step 3: Combine Wet Ingredients

In another bowl, mix together brown sugar, eggs, vegetable oil, vanilla extract, yoghurt, and pineapple until smooth. This mixture adds moisture and sweetness to your cake while breaking down any lumps in the sugar.

Step 4: Fold in Carrots and Nuts

Gently fold in the grated carrots and chopped nuts into your wet mixture. This helps keep everything light while ensuring every slice has those delightful bits of carrot and nutty flavor throughout.

Step 5: Combine Mixtures

Pour the dry ingredient blend into the wet mixture gradually while stirring until just combined. Don’t overmix; you want your batter to remain fluffy for that moist texture we’re after!

Step 6: Bake Your Cake

Pour the batter into your prepared Bundt pan. Bake in the preheated oven for about 45 minutes or until a toothpick comes out clean when inserted into the center. The aroma will fill your kitchen—trust me; you won’t be able to wait!

Step 7: Cool and Glaze

Once baked, let your cake cool in the pan for about 10 minutes before transferring it to a wire rack. While it’s cooling down completely, prepare your cream cheese glaze by mixing powdered sugar, melted butter, vanilla extract, and cream cheese until smooth. Once cooled completely, drizzle this luscious glaze over your beautiful cake.

And there you have it—a stunning Moist Carrot Bundt Cake that’s sure to impress everyone at your next gathering! Enjoy each delicious bite!

Pro Tips for Making Moist Carrot Bundt Cake

Baking a perfect Moist Carrot Bundt Cake is all about the details! Here are some tips to ensure your cake turns out deliciously every time.

  • Use fresh carrots: Freshly grated carrots provide more moisture and sweetness compared to pre-packaged versions, enhancing the cake’s flavor and texture.

  • Don’t skip the cornstarch: Adding cornstarch helps to create a lighter texture in your cake, making it extra fluffy while still retaining moisture.

  • Room temperature ingredients: Make sure your eggs, yogurt, and cream cheese are at room temperature; this allows for better mixing and creates a smoother batter that bakes evenly.

  • Check for doneness: Insert a toothpick into the center of the cake; if it comes out clean or with a few crumbs, it’s ready. Keep an eye on it towards the end of baking to prevent overcooking.

  • Cool in the pan: Letting the cake cool in the bundt pan for 10-15 minutes before transferring it to a wire rack can help prevent sticking and maintain its shape.

How to Serve Moist Carrot Bundt Cake

Presenting your Moist Carrot Bundt Cake beautifully can make all the difference in impressing your guests! Here are some ideas on how to serve this delightful dessert.

Garnishes

  • Chopped nuts: Sprinkling some additional chopped pecans or walnuts on top adds texture and a lovely nutty flavor.
  • Fresh herbs: A few sprigs of mint or edible flowers can add a pop of color and freshness that complements the cake beautifully.

Side Dishes

  • Whipped coconut cream: This dairy-free alternative adds a light, airy richness that pairs perfectly with the spices in the cake.
  • Fruit salad: A simple mix of seasonal fruits provides a refreshing contrast to the sweet, spiced flavors of the bundt cake.
  • Vanilla ice cream: The creamy texture of vanilla ice cream offers a delightful balance to the moistness of the cake, making for an indulgent treat.
  • Coffee or chai tea: A warm beverage like coffee or spiced chai enhances the flavors of the carrot bundt cake, making it a cozy afternoon delight.

Make Ahead and Storage

This Moist Carrot Bundt Cake is perfect for meal prep, allowing you to enjoy its delightful flavors throughout the week!

Storing Leftovers

  • Store the cake in an airtight container at room temperature for up to 3 days.
  • For longer freshness, keep it in the fridge, where it can last up to a week.

Freezing

  • Wrap slices tightly in plastic wrap, followed by aluminum foil to prevent freezer burn.
  • The cake can be frozen for up to three months. Thaw it in the fridge overnight before serving.

Reheating

  • To reheat individual slices, microwave on low power for about 10-15 seconds until warmed through.
  • For larger portions, preheat your oven to 350°F (175°C) and warm the cake for about 10 minutes.

FAQs

Can I make this Moist Carrot Bundt Cake ahead of time?

Absolutely! This cake tastes even better after a day as the flavors develop. You can store it as mentioned above or freeze it if you want to prepare it well in advance.

What makes this Moist Carrot Bundt Cake so special?

The combination of finely grated carrots, warm spices, and a luscious cream cheese glaze sets this Moist Carrot Bundt Cake apart. It’s not only moist but also incredibly flavorful and visually appealing.

Can I substitute ingredients in this recipe?

Yes! You can substitute the brown sugar with coconut sugar or use applesauce instead of oil for a lighter version. Just ensure that any substitutions maintain moisture and flavor.

Final Thoughts

I hope you enjoy baking this Moist Carrot Bundt Cake as much as I do! It’s a delightful treat that brings joy and warmth to any gathering or quiet afternoon. Don’t hesitate to try different variations and make it your own—happy baking!

Print

Moist Carrot Bundt Cake

Print Recipe

5 Stars 4 Stars 3 Stars 2 Stars 1 Star

No reviews

Moist Carrot Bundt Cake is a deliciously comforting dessert that combines tender grated carrots with warm spices, creating an irresistible treat that’s perfect for any occasion. This cake, with its stunning Bundt shape, is not only visually appealing but also bursting with flavor. Topped with a luscious cream cheese glaze, every slice offers a delightful balance of sweetness and spice. Whether you’re sharing it at a family gathering, enjoying it during an afternoon tea, or simply treating yourself at home, this cake is sure to impress.

  • Author: Sarah Mitchell
  • Prep Time: 20 minutes
  • Cook Time: 45 minutes
  • Total Time: 1 hour 5 minutes
  • Yield: Serves approximately 12 slices 1x
  • Category: Dessert
  • Method: Baking
  • Cuisine: American

Ingredients


Scale

  • 2 cups finely grated carrots
  • 1 cup canned pineapple
  • 2¼ cups all-purpose flour
  • ¼ cup cornstarch
  • 2 tsps baking powder
  • ½ tsp baking soda
  • ½ tsp salt
  • 2½ tsps cinnamon (ground)
  • 1¾ tsps ginger (ground/powdered)
  • ¼ tsp cloves (ground)
  • ½ tsp nutmeg (ground)
  • 1½ cups soft brown sugar
  • 3 large eggs
  • 1 cup unflavoured vegetable oil
  • 3 tsps vanilla essence/extract
  • ½ cup yoghurt
  • 1 cup pecans or walnuts (coarsely chopped)
  • 2 cups powdered sugar
  • 2 tsps unsalted butter
  • ½ tsp vanilla extract/essence
  • ¾ cup cream cheese (room temperature)

Instructions

  1. Preheat your oven to 350°F (175°C) and grease your Bundt pan.
  2. In a bowl, whisk together the flour, cornstarch, baking powder, baking soda, salt, and spices.
  3. In another bowl, mix brown sugar, eggs, vegetable oil, vanilla extract, yogurt, and pineapple until smooth.
  4. Fold in the grated carrots and chopped nuts.
  5. Gradually add the dry ingredients to the wet mixture until just combined.
  6. Pour the batter into the Bundt pan and bake for about 45 minutes or until a toothpick comes out clean.
  7. Allow cooling in the pan for 10 minutes before transferring to a wire rack. Glaze with cream cheese mixture once cooled.

Nutrition

  • Serving Size: 1 slice
  • Calories: 340
  • Sugar: 28g
  • Sodium: 190mg
  • Fat: 18g
  • Saturated Fat: 2g
  • Unsaturated Fat: 14g
  • Trans Fat: 0g
  • Carbohydrates: 43g
  • Fiber: 2g
  • Protein: 4g
  • Cholesterol: 45mg

Did you make this recipe?

Share a photo and tag us — we can’t wait to see what you’ve made!

window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.simpledailyeats.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”7fb51600c8″,”postId”:1544};
window.TastyRecipes = window.TastyRecipes || {};

window.TastyRecipes.smoothScroll = {
init() {
document.addEventListener( ‘click’, ( e ) => {
let anchor = e.target;
if ( anchor.tagName !== ‘A’ ) {
anchor = anchor.closest( ‘a.tasty-recipes-scrollto’ );
}

if ( ! anchor || ! anchor.classList.contains( ‘tasty-recipes-scrollto’ ) ) {
return;
}

const elementHref = anchor.getAttribute( ‘href’ );
if ( ! elementHref ) {
return;
}

e.preventDefault();
this.goToSelector( elementHref );
});
},
goToSelector( selector ) {
const element = document.querySelector( selector );
if ( ! element ) {
return;
}
element.scrollIntoView( { behavior: ‘smooth’ } );
}
};

document.addEventListener(
‘DOMContentLoaded’,
() => window.TastyRecipes.smoothScroll.init()
);

(function(){

var bothEquals = function( d1, d2, D ) {
var ret = 0;
if (d1<=D) {
ret++;
}
if (d2<=D) {
ret++;
}
return ret === 2;
};

var 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+d2d2){d2=D+1;}else {d1=D+1;}break}else if(xD){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-AD){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]};

window.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”));

window.tastyRecipesFormatAmount = function(amount, el) {
if ( parseFloat( amount ) === parseInt( amount ) ) {
return amount;
}
var roundType = ‘frac’;
if (typeof el.dataset.amountShouldRound !== ‘undefined’) {
if (‘false’ !== el.dataset.amountShouldRound) {
if ( ‘number’ === el.dataset.amountShouldRound ) {
roundType = ‘number’;
} else if (‘frac’ === el.dataset.amountShouldRound) {
roundType = ‘frac’;
} else if (‘vulgar’ === el.dataset.amountShouldRound) {
roundType = ‘vulgar’;
} else {
roundType = ‘integer’;
}
}
}
if (‘number’ === roundType) {
amount = Number.parseFloat(amount).toPrecision(2);
} else if (‘integer’ === roundType) {
amount = Math.round(amount);
} else if (‘frac’ === roundType || ‘vulgar’ === roundType) {
var denom = 8;
if (typeof el.dataset.unit !== ‘undefined’) {
var unit = el.dataset.unit;
if ([‘cups’,’cup’,’c’].includes(unit)) {
denom = 4;
if (0.125 === amount) {
denom = 8;
}
if (“0.1667″ === Number.parseFloat( amount ).toPrecision(4)) {
denom = 6;
}
}
if ([‘tablespoons’,’tablespoon’,’tbsp’].includes(unit)) {
denom = 2;
}
if ([‘teaspoons’,’teaspoon’,’tsp’].includes(unit)) {
denom = 8;
}
}
var amountArray = frac.cont( amount, denom, true );
var newAmount = ”;
if ( amountArray[1] !== 0 ) {
newAmount = amountArray[1] + ‘/’ + amountArray[2];
if (‘vulgar’ === roundType) {
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (newAmount === window.tastyRecipesVulgarFractions[vulgar]) {
newAmount = vulgar;
}
});
}
}
if ( newAmount ) {
newAmount = ‘ ‘ + newAmount;
}
if ( amountArray[0] ) {
newAmount = amountArray[0] + newAmount;
}
amount = newAmount;
}
return amount;
};

window.tastyRecipesUpdatePrintLink = () => {

const printButton = document.querySelector( ‘.tasty-recipes-print-button’ );

if ( ! printButton ) {
return;
}

const printURL = new URL( printButton.href );
const searchParams = new URLSearchParams( printURL.search );

const unitButton = document.querySelector( ‘.tasty-recipes-convert-button-active’ );
const scaleButton = document.querySelector( ‘.tasty-recipes-scale-button-active’ );

let unit = ”;
let scale = ”;

if ( unitButton ) {
unit = unitButton.dataset.unitType;
searchParams.delete(‘unit’);
searchParams.set( ‘unit’, unit );
}

if ( scaleButton ) {
scale = scaleButton.dataset.amount;
searchParams.set( ‘scale’, scale );
}

const paramString = searchParams.toString();
const newURL = ” === paramString ? printURL.href : printURL.origin + printURL.pathname + ‘?’ + paramString;
const printLinks = document.querySelectorAll( ‘.tasty-recipes-print-link’ );

printLinks.forEach( ( el ) => {
el.href = newURL;
});

const printButtons = document.querySelectorAll( ‘.tasty-recipes-print-button’ );
printButtons.forEach( ( el ) => {
el.href = newURL;
});
};

document.addEventListener( ‘DOMContentLoaded’, () => {

if ( ! window.location.href.includes( ‘/print/’ ) ) {
return;
}

const searchParams = new URLSearchParams( window.location.search );

const unit = searchParams.get( ‘unit’ );
const scale = searchParams.get( ‘scale’ );

if ( unit && ( ‘metric’ === unit || ‘usc’ === unit ) ) {
document.querySelector( ‘.tasty-recipes-convert-button[data-unit-type=”‘ + unit + ‘”]’ ).click();
}

if ( scale && Number(scale) > 0 ) {
document.querySelector( ‘.tasty-recipes-scale-button[data-amount=”‘ + Number(scale) + ‘”]’ ).click();
}
});
}());

(function(){
var buttonClass = ‘tasty-recipes-scale-button’,
buttonActiveClass = ‘tasty-recipes-scale-button-active’,
buttons = document.querySelectorAll(‘.tasty-recipes-scale-button’);
if ( ! buttons ) {
return;
}

buttons.forEach(function(button){
button.addEventListener(‘click’, function(event){
event.preventDefault();
var recipe = event.target.closest(‘.tasty-recipes’);
if ( ! recipe ) {
return;
}
var otherButtons = recipe.querySelectorAll(‘.’ + buttonClass);
otherButtons.forEach(function(bt){
bt.classList.remove(buttonActiveClass);
});
button.classList.add(buttonActiveClass);

var scalables = recipe.querySelectorAll(‘span[data-amount]’);
var buttonAmount = parseFloat( button.dataset.amount );
scalables.forEach(function(scalable){
if (typeof scalable.dataset.amountOriginalType === ‘undefined’
&& typeof scalable.dataset.nfOriginal === ‘undefined’) {
if (-1 !== scalable.innerText.indexOf(‘/’)) {
scalable.dataset.amountOriginalType = ‘frac’;
}
if (-1 !== scalable.innerText.indexOf(‘.’)) {
scalable.dataset.amountOriginalType = ‘number’;
}
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (-1 !== scalable.innerText.indexOf(vulgar)) {
scalable.dataset.amountOriginalType = ‘vulgar’;
}
});
if (typeof scalable.dataset.amountOriginalType !== ‘undefined’) {
scalable.dataset.amountShouldRound = scalable.dataset.amountOriginalType;
}
}
var amount = parseFloat( scalable.dataset.amount ) * buttonAmount;
amount = window.tastyRecipesFormatAmount(amount, scalable);
if ( typeof scalable.dataset.unit !== ‘undefined’ ) {
if ( ! scalable.classList.contains(‘nutrifox-quantity’) ) {
if ( ! scalable.classList.contains(‘nutrifox-second-quantity’) ) {
amount += ‘ ‘ + scalable.dataset.unit;
}
}
}
scalable.innerText = amount;
});

var nonNumerics = recipe.querySelectorAll(‘[data-has-non-numeric-amount]’);
nonNumerics.forEach(function(nonNumeric){
var indicator = nonNumeric.querySelector(‘span[data-non-numeric-label]’);
if ( indicator ) {
nonNumeric.removeChild(indicator);
}
if ( 1 !== buttonAmount ) {
indicator = document.createElement(‘span’);
indicator.setAttribute(‘data-non-numeric-label’, true);
var text = document.createTextNode(‘ (x’ + buttonAmount + ‘)’);
indicator.appendChild(text);
nonNumeric.appendChild(indicator);
}
});

window.tastyRecipesUpdatePrintLink();
});
});
}());

window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.cookMode = {
wakeLockApi: false,
wakeLock: false,
cookModeSelector: ‘.tasty-recipes-cook-mode’,
init() {
if (“wakeLock” in navigator && “request” in navigator.wakeLock) {
this.wakeLockApi = navigator.wakeLock;
}

const cookModes = document.querySelectorAll(this.cookModeSelector);

if (cookModes.length > 0) {
for (const cookMode of cookModes) {
if (this.wakeLockApi) {
cookMode.querySelector(‘input[type=”checkbox”]’).addEventListener(“change”, event => {
this.checkboxChange(event.target);
}, false);
} else {
cookMode.style.display = “none”;
}
}
}
},
checkboxChange(checkbox) {
if (checkbox.checked) {
this.lock();
} else {
this.unlock();
}
},
setCheckboxesState(state) {
const checkboxes = document.querySelectorAll(this.cookModeSelector + ‘ input[type=”checkbox”]’);
for (const checkbox of checkboxes) {
checkbox.checked = state;
}
},
async lock() {
try {
this.wakeLock = await this.wakeLockApi.request(“screen”);
this.wakeLock.addEventListener(“release”, () => {
this.wakeLock = false;
this.setCheckboxesState(false);
});
this.setCheckboxesState(true);
} catch (error) {
this.setCheckboxesState(false);
}
},
unlock() {
if (this.wakeLock) {
this.wakeLock.release();
this.wakeLock = false;
}
this.setCheckboxesState(false);
}
};

(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
document.addEventListener(“DOMContentLoaded”, callback);
}
})(() => {
window.TastyRecipes.cookMode.init();
});

window.TastyRecipes = window.TastyRecipes || {};

window.TastyRecipes.staticTooltip = {
element: null,
tooltipElement: null,
deleting: false,
init( element ) {
if ( this.deleting ) {
return;
}
this.element = element;
this.buildElements();
},
destroy() {
if ( ! this.tooltipElement || this.deleting ) {
return;
}

this.deleting = true;
this.tooltipElement.classList.remove( ‘opened’ );

setTimeout( () => {
this.tooltipElement.remove();
this.deleting = false;
}, 500 );
},
buildElements() {
const tooltipElement = document.createElement( ‘div’ );
tooltipElement.classList.add( ‘tasty-recipes-static-tooltip’);
tooltipElement.setAttribute( ‘id’, ‘tasty-recipes-tooltip’ );

const currentTooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
if ( currentTooltipElement ) {
document.body.replaceChild( tooltipElement, currentTooltipElement );
} else {
document.body.appendChild( tooltipElement );
}

this.tooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
},
show() {
if ( ! this.tooltipElement ) {
return;
}

const tooltipTop = this.element.getBoundingClientRect().top
+ window.scrollY
– 10 // 10px offset.
– this.tooltipElement.getBoundingClientRect().height;
const tooltipLeft = this.element.getBoundingClientRect().left
– ( this.tooltipElement.getBoundingClientRect().width / 2 )
+ ( this.element.getBoundingClientRect().width / 2 ) – 1;
const posLeft = Math.max( 10, tooltipLeft );
this.maybeRemoveTail( posLeft !== tooltipLeft );

this.tooltipElement.setAttribute( ‘style’, ‘top:’ + tooltipTop + ‘px;left:’ + posLeft + ‘px;’ );
this.tooltipElement.classList.add( ‘opened’ );

},
maybeRemoveTail( removeTail ) {
if ( removeTail ) {
this.tooltipElement.classList.add( ‘tr-hide-tail’ );
} else {
this.tooltipElement.classList.remove( ‘tr-hide-tail’ );
}
},
changeMessage( message ) {
if ( ! this.tooltipElement ) {
return;
}
this.tooltipElement.innerHTML = message;
}
};

window.TastyRecipes.ajax = {
sendPostRequest( url, data, success, failure ) {
const xhr = new XMLHttpRequest();
xhr.open( ‘POST’, url, true );
xhr.send( this.preparePostData( data ) );

xhr.onreadystatechange = () => {
if ( 4 !== xhr.readyState ) {
return;
}
if ( xhr.status === 200 ) {
success( JSON.parse( xhr.responseText ) );
return;
}

failure( xhr );
};

xhr.onerror = () => {
failure( xhr );
};
},
preparePostData( data ) {
const formData = new FormData();

for ( const key in data ) {
formData.append( key, data[key] );
}
return formData;
},
};

window.TastyRecipes.ratings = {
defaultRating: 0,
currentRatingPercentage: 100,
savingRating: false,
init( minRating ) {
this.minRating = minRating;

this.formWatchRating();
this.closeTooltipWhenClickOutside();
this.addBodyClassBasedOnSelectedRating();
this.backwardCompFormRatingPosition();
},
formWatchRating() {
const ratings = document.querySelectorAll(‘.tasty-recipes-no-ratings-buttons [data-rating]’);
if ( ratings.length {
event.preventDefault();
this.defaultRating = event.target.closest( ‘.checked’ ).dataset.rating;
this.setCheckedStar( event.target );
this.maybeSendRating( this.defaultRating, event.target );
this.setRatingInForm( this.defaultRating );
} );
}
},
closeTooltipWhenClickOutside() {
window.addEventListener( ‘click’, e => {
// Bailout (don’t remove the tooltip) when the clicked element is a rating star, or it’s the tooltip itself.
if ( e.target.closest( ‘.tasty-recipes-rating’ ) || e.target.classList.contains( ‘tasty-recipes-static-tooltip’ ) ) {
return;
}

window.TastyRecipes.staticTooltip.destroy();
} );
},
setRatingInForm( rating ) {
const ratingInput = document.querySelector( ‘#respond .tasty-recipes-rating[value=”‘ + rating + ‘”]’ );
if ( ! ratingInput ) {
return;
}
ratingInput.click();
},
addBodyClassBasedOnSelectedRating() {
const ratingInputs = document.querySelectorAll( ‘input.tasty-recipes-rating’ );
if ( ! ratingInputs ) {
return;
}
for ( const ratingInput of ratingInputs ) {
ratingInput.addEventListener( ‘click’, currentEvent => {
const selectedRating = currentEvent.target.getAttribute( ‘value’ );
this.handleBodyClassByRating( selectedRating );
this.toggleCommentTextareaRequired( selectedRating );
} );
}
},
handleBodyClassByRating( rating ) {
if ( rating < this.minRating ) {
document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );
return;
}
document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );
},
toggleCommentTextareaRequired( rating ) {
const commentTextarea = document.getElementById( 'comment' );
if ( ! commentTextarea ) {
return;
}

if ( rating {
window.TastyRecipes.staticTooltip.changeMessage( response.data.message );
window.TastyRecipes.staticTooltip.show();
this.updateAverageText( response.data, recipeCardElement );
this.maybeFillCommentForm( response.data );

// Hide the tooltip after 5 seconds.
setTimeout( () => {
this.maybeResetTooltip( recipeCardElement, response.data, rating );
}, 5000 );
},
() => {
this.resetTooltip( recipeCardElement );
}
);
},
updateAverageText( data, recipeCardElement ) {
if ( ! data.average ) {
return;
}
this.setRatingPercent( data );

if ( ! data.count ) {
return;
}

const quickLink = document.querySelector( ‘.tasty-recipes-rating-link’ );
if ( quickLink ) {
this.setTextInContainer( quickLink, data );
this.setPartialStar( quickLink );
}

const cardStars = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
cardStars.dataset.trDefaultRating = data.average;
this.setTextInContainer( recipeCardElement.querySelector( ‘.tasty-recipes-rating’ ), data );
},
setTextInContainer( container, data ) {
if ( ! container ) {
return;
}

if ( data.label ) {
const ratingLabelElement = container.querySelector( ‘.rating-label’ );
if ( ratingLabelElement ) {
ratingLabelElement.innerHTML = data.label;
}
return;
}

const averageElement = container.querySelector( ‘.average’ );
if ( averageElement ) {
averageElement.textContent = data.average;
}

const countElement = container.querySelector( ‘.count’ );
if ( countElement ) {
countElement.textContent = data.count;
}
},
setPartialStar( container ) {
const highestStar = container.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( highestStar ) {
highestStar.dataset.trClip = this.currentRatingPercentage;
}
},
setRatingPercent( data ) {
this.defaultRating = data.average.toFixed( 1 );
const parts = data.average.toFixed( 2 ).toString().split( ‘.’ );
this.currentRatingPercentage = parts[1] ? parts[1] : 100;
if ( this.currentRatingPercentage === ’00’ ) {
this.currentRatingPercentage = 100;
}
},
setCheckedStar( target ) {
const cardRatingContainer = target.closest( ‘.tasty-recipes-ratings-buttons’ );
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( selectedRatingElement ) {
delete selectedRatingElement.dataset.trChecked;
}

const thisStar = target.closest( ‘.tasty-recipes-rating’ );
thisStar.dataset.trChecked = 1;
thisStar.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = 100;
},
maybeFillCommentForm( data ) {
if ( ! data.comment || ! data.comment.content ) {
return;
}

const commentForm = document.querySelector( ‘#commentform’ );
if ( ! commentForm ) {
return;
}

const commentBox = commentForm.querySelector( ‘[name=comment]’ );
if ( ! commentBox || commentBox.value ) {
return;
}

// Add comment details for editing.
commentBox.innerHTML = data.comment.content;
if ( data.comment.name ) {
commentForm.querySelector( ‘[name=author]’ ).value = data.comment.name;
commentForm.querySelector( ‘[name=email]’ ).value = data.comment.email;
}
},
maybeResetTooltip( recipeCardElement, data, rating ) {
if ( this.savingRating === rating ) {
this.resetTooltip( recipeCardElement, data );
}
},
resetTooltip( recipeCardElement, data ) {
window.TastyRecipes.staticTooltip.destroy();
this.savingRating = false;

// Reset the default rating.
const cardRatingContainer = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
if ( cardRatingContainer ) {
this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;
cardRatingContainer.dataset.trDefaultRating = this.defaultRating;

this.resetSelectedStar( cardRatingContainer, data );
}
},
resetSelectedStar( cardRatingContainer ) {
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( selectedRatingElement ) {
selectedRatingElement.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = this.currentRatingPercentage;
selectedRatingElement.parentNode.dataset.trChecked = 1;
}

const previousSelectedElement= cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( previousSelectedElement ) {
const currentSelectedRating = previousSelectedElement.querySelector(‘[data-rating]’);
if ( currentSelectedRating !== selectedRatingElement ) {
delete previousSelectedElement.dataset.trChecked;
}
}
},
backwardCompFormRatingPosition() {
const ratingsButtons = document.querySelector( ‘#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons’ );
if ( ! ratingsButtons ) {
return;
}
const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);
if ( ! ratingsButtonsStyles.display.includes( ‘flex’ ) ) {
ratingsButtons.style.direction = ‘rtl’;
}

if ( typeof tastyRecipesRating !== ‘undefined’ ) {
// Select the rating that was previously selected in admin.
ratingsButtons.querySelector( ‘.tasty-recipes-rating[value=”‘ + tastyRecipesRating + ‘”]’ ).checked = true;
}

const ratingSpans = ratingsButtons.querySelectorAll( ‘.tasty-recipes-rating’ );
for (const ratingSpan of ratingSpans) {
ratingSpan.addEventListener( ‘click’, event => {
if ( ratingSpan === event.target ) {
return;
}
ratingSpan.previousElementSibling.click();
} );
}
}
};

(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );
});

« Previous Post
Blueberry Oatmeal Bars
Next Post »
Sugar Free Blueberry Italian Cream Soda

If you enjoyed this…

Raspberry Cupcakes with Raspberry Filling and Russian Buttercream

Raspberry Cupcakes with Raspberry Filling and Russian Buttercream

Spanish Churro-Inspired Pancakes: A Breakfast Delight!

Spanish Churro-Inspired Pancakes: A Breakfast Delight!

Orange Cranberry Shortbread Cookies

Orange Cranberry Shortbread Cookies

Primary Sidebar

Browse by Diet

HealthyBudgetKetoQuickVeganCheat Meal
Chili-Lime Quinoa Black Bean Salad with Corn

Chili-Lime Quinoa Black Bean Salad with Corn

Garlic Butter Beef Bites with Potatoes

Garlic Butter Beef Bites with Potatoes

Mediterranean Bean Salad

Mediterranean Bean Salad

  • Home
  • Recipe Index
  • Budget
  • Cheat Meal
  • Healthy
  • Keto
  • Quick
  • Vegan
  • About
  • Contact

© 2026 Simple Daily Eats · All Rights Reserved · Created with heart by Sarah Mitchell · About · Privacy Policy · Terms & Conditions · Disclaimer · Affiliate Disclosure · Contact