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

Sweet Family Table

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

Sweet Family Table

  • 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 dessert that impresses without the fuss, you’ve struck gold with this Moist Carrot Bundt Cake! This recipe has been a staple in my kitchen for years, and it never fails to bring smiles around the table. With its soft texture and warm spices, this cake is perfect for everything from cozy family gatherings to festive celebrations. Plus, who can resist that beautiful glaze draping over the top? It’s truly a showstopper!

Moist Carrot Bundt Cake image 2

This cake is not only delicious but also incredibly easy to whip up, making it an excellent choice for both novice bakers and seasoned pros alike. Trust me, once you try it, you’ll be sharing slices with friends and family in no time!

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

Why You’ll Love This Recipe

  • Deliciously Moist: Each bite of this cake is packed with flavor and moisture, thanks to the grated carrots and pineapple.
  • Easy to Make: With simple ingredients and straightforward steps, you’ll have a stunning cake ready in no time!
  • Perfect for Any Occasion: Whether it’s afternoon tea or a special celebration, this cake fits right in.
  • Make-Ahead Friendly: Bake it the day before your event; it tastes even better after resting overnight!
  • Family Favorite: Kids and adults alike will fall in love with this sweet treat.

Ingredients You’ll Need

This Moist Carrot Bundt Cake uses simple, wholesome ingredients that are likely already in your pantry. Get ready to enjoy a delightful mix of flavors!

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)
  • 1 cup pecans or walnuts (coarsely chopped; I like to use both so I use ½ a cup of each.)

For the Glaze

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

Variations

This Moist Carrot Bundt Cake is wonderfully flexible, allowing you to get creative based on what you have on hand or your personal preferences.

  • Add some fruit: Throw in some raisins or chopped apples for extra sweetness and texture.
  • Nut-free option: Skip the nuts entirely or replace them with sunflower seeds for a delightful crunch.
  • Spice it up: If you’re feeling adventurous, add some cardamom or allspice alongside the other spices for an exciting twist.
  • Gluten-free alternative: Substitute the flour with a gluten-free blend to make it suitable for those avoiding gluten.

How to Make Moist Carrot Bundt Cake

Step 1: Prepare Your Ingredients

Start by gathering all your ingredients on the counter. This simple step makes the process smoother and ensures you don’t forget anything essential. Preheat your oven to 350°F (175°C) so it’s hot and ready when your batter is mixed!

Step 2: Mix Dry Ingredients

In a large bowl, sift together the flour, cornstarch, baking powder, baking soda, salt, cinnamon, ginger, cloves, and nutmeg. Mixing these dry ingredients first helps ensure an even distribution of leavening agents throughout the batter. Plus, those warm spices will create an enticing aroma!

Step 3: Combine Wet Ingredients

In another bowl, whisk together the brown sugar and eggs until well combined. Then stir in the vegetable oil, vanilla essence/extract, yoghurt, grated carrots, and canned pineapple. This mixture brings all those delicious flavors together while keeping your cake moist.

Step 4: Bring It All Together

Gradually add your dry ingredient mixture into the wet ingredients. Mix just until combined—overmixing can lead to a tough cake! Gently fold in your chopped nuts at this point if you’re using them.

Step 5: Bake Your Cake

Pour the batter into a greased Bundt pan and smooth out the top. Bake for about 45 minutes or until a toothpick inserted into the center comes out clean. The golden-brown top will be hard to resist as it bakes!

Step 6: Cool and Glaze

Once baked, let your cake cool in the pan for about 10-15 minutes before transferring it to a wire rack. While it’s cooling down completely, prepare your glaze by mixing together powdered sugar, melted butter, vanilla extract/essence, and cream cheese until smooth. Drizzle this luscious glaze over your cooled cake for that perfect finish!

Enjoy every slice of this Moist Carrot Bundt Cake—the perfect way to celebrate any occasion!

Pro Tips for Making Moist Carrot Bundt Cake

Baking the perfect Moist Carrot Bundt Cake is all about attention to detail. Here are some tips to ensure your cake turns out beautifully every time:

  • Use fresh ingredients: Fresh carrots and spices enhance flavor and moisture, making your cake even more delicious.
  • Don’t overmix the batter: Gently combining the ingredients helps keep the cake tender. Overmixing can lead to a dense texture.
  • Check for doneness properly: Insert a toothpick into the center of the cake; it should come out clean or with a few moist crumbs. This prevents overbaking, which can dry out your cake.
  • Cool before glazing: Allow your cake to cool completely in the pan before removing it. This helps prevent breakage and ensures a smooth glaze application.
  • Experiment with add-ins: Feel free to incorporate raisins or shredded coconut for added texture and flavor variety!

How to Serve Moist Carrot Bundt Cake

Presenting your Moist Carrot Bundt Cake in an inviting way can elevate any occasion, whether it’s a cozy afternoon tea or a festive gathering.

Garnishes

  • Chopped nuts: Sprinkle some toasted pecans or walnuts on top for added crunch and flavor.
  • Fresh herbs: A few sprigs of mint can add a refreshing touch that contrasts nicely with the sweetness of the cake.
  • Zest: Grating some orange or lemon zest over the glaze adds color and a citrusy aroma that enhances the overall experience.

Side Dishes

  • Classic cream cheese frosting: Serve alongside extra cream cheese frosting for those who want an indulgent treat!
  • Fruit salad: A light fruit salad balances the richness of the cake, offering refreshing flavors that complement it well.
  • Vanilla ice cream: Pairing with vanilla ice cream creates a delightful contrast in temperature and texture, perfect for dessert lovers.
  • Herbal tea: A warm cup of herbal tea makes for a comforting beverage choice that complements the spices in the carrot cake beautifully.

Make Ahead and Storage

This Moist Carrot Bundt Cake is perfect for meal prep and can easily be made ahead of time for gatherings or to enjoy throughout the week.

Storing Leftovers

  • Allow the cake to cool completely before storing.
  • Wrap the cake tightly in plastic wrap or aluminum foil to keep it fresh.
  • Store in an airtight container at room temperature for up to 3 days.

Freezing

  • Wrap individual slices or the whole cake in plastic wrap.
  • Place the wrapped cake in a freezer-safe container or bag.
  • Freeze for up to 3 months. To enjoy, simply thaw in the refrigerator overnight.

Reheating

  • To reheat individual slices, microwave for 10-15 seconds until warm.
  • For the whole cake, preheat your oven to 350°F (175°C) and warm it for about 10-15 minutes.
  • Always add a bit of moisture (like a damp paper towel) when microwaving to prevent drying out.

FAQs

Here are some common questions you might have:

Can I make this Moist Carrot Bundt Cake gluten-free?

Yes! You can substitute all-purpose flour with a gluten-free flour blend designed for baking. The texture may vary slightly but should still be delicious.

How long does the Moist Carrot Bundt Cake last?

When stored properly, this cake lasts for about 3 days at room temperature and can be frozen for up to 3 months, making it a great option for meal prep.

What can I use instead of eggs in this recipe?

You can replace each egg with a flaxseed meal (1 tablespoon of flaxseed mixed with 2.5 tablespoons of water) or unsweetened applesauce (1/4 cup per egg) as effective substitutes.

Final Thoughts

I hope you enjoy making this Moist Carrot Bundt Cake as much as I do! It’s not only a delightful treat but also a wonderful way to bring warmth and joy to any gathering. Don’t hesitate to share it with loved ones; it’s bound to become a favorite in your home!

Print

Moist Carrot Bundt Cake

Print Recipe

5 Stars 4 Stars 3 Stars 2 Stars 1 Star

No reviews

Indulge in the delightful flavors of this Moist Carrot Bundt Cake, a perfect treat that marries tender grated carrots with warm spices and a luscious cream cheese glaze. This easy-to-make cake is a crowd-pleaser for any occasion, from casual afternoon teas to festive celebrations. With its inviting aroma and moist texture, every slice promises to bring joy to your table. Plus, it’s simple enough for novice bakers yet impressive enough to satisfy seasoned pros. Enjoy the pleasure of sharing this sweet treat with family and friends—it’s sure to become a beloved favorite!

  • Author: Mennana
  • 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 (firmly packed)
  • 3 large eggs (room temperature)
  • 1 cup unflavoured vegetable oil
  • 3 tsps vanilla essence/extract
  • ½ cup yoghurt (unsweetened, regular not Greek)
  • 1 cup pecans or walnuts (coarsely chopped)
  • 2 cups powdered sugar
  • 2 tsps unsalted butter (melted)
  • ½ tsp vanilla extract/essence
  • ¾ cup cream cheese (room temp)

Instructions

  1. Preheat your oven to 350°F (175°C) and grease a Bundt pan.
  2. In a bowl, sift together flour, cornstarch, baking powder, baking soda, salt, and spices.
  3. In another bowl, whisk brown sugar and eggs until blended; stir in oil, vanilla, yogurt, carrots, and pineapple.
  4. Gradually mix dry ingredients into wet ingredients until just combined; fold in nuts if desired.
  5. Pour batter into the prepared pan and bake for about 45 minutes or until a toothpick comes out clean.
  6. Cool in the pan before transferring to a wire rack; prepare the glaze by mixing powdered sugar with melted butter, vanilla extract, and cream cheese until smooth. Drizzle over the cooled cake.

Nutrition

  • Serving Size: 1 slice (100g)
  • Calories: 290
  • Sugar: 22g
  • Sodium: 150mg
  • Fat: 12g
  • Saturated Fat: 2g
  • Unsaturated Fat: 8g
  • Trans Fat: 0g
  • Carbohydrates: 40g
  • Fiber: 2g
  • Protein: 4g
  • Cholesterol: 30mg

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.sweetfamilytable.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”1fb5a26b00″,”postId”:977};
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
Lemon Cream Snowball Cookies – Melt-in-Your-Mouth Holiday Magic
Next Post »
Maple roasted carrots with cranberries

If you enjoyed this…

Delicious Snap Pea Salad with Lemon Parmesan Vinaigrette Recipe

Delicious Snap Pea Salad with Lemon Parmesan Vinaigrette Recipe

Steak Salad

Cheesy Beef Enchiladas Tortellini: A Delicious Twist on Classic Comfort Food

Cheesy Beef Enchiladas Tortellini: A Delicious Twist on Classic Comfort Food

Primary Sidebar

Browse by Diet

HealthyBudgetKetoQuickVeganCheat Meal
Steak Avocado Corn Bowl: A Delicious and Nutritious Recipe for Any Meal

Steak Avocado Corn Bowl: A Delicious and Nutritious Recipe for Any Meal

Steak Bites and Shell Pasta in Garlic Butter Alfredo Sauce

Steak Bites and Shell Pasta in Garlic Butter Alfredo Sauce

Sizzling Bacon Cheeseburger Queso Dip

Sizzling Bacon Cheeseburger Queso Dip

  • About
  • Contact
  • Disclaimer
  • Homepage
  • PRIVACY POLICY
  • Recipe Index
  • TERMS AND CONDITIONS

© 2026 Sweet Family Table · All Rights Reserved · Created with love by Lalla Mennana · About · Privacy Policy · Terms & Conditions · Disclaimer · Affiliate Disclosure · Contact