• 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

Cherry Cinnamon Rolls with Homemade Filling

Jump to Recipe·Print Recipe

If you’re looking for a delightful treat that brings warmth and joy to any occasion, these Cherry Cinnamon Rolls with Homemade Filling are just the answer! Imagine waking up to the sweet aroma of cinnamon and cherries wafting through your kitchen, or surprising your family with a special dessert after dinner. This recipe has been a cherished favorite in my home, perfect for everything from cozy weekend brunches to festive gatherings. The combination of fluffy dough and tart cherry filling is simply irresistible!

Cherry Cinnamon Rolls with Homemade Filling image 2
Cherry Cinnamon Rolls with Homemade Filling image 3

Why You’ll Love This Recipe

  • Easy to Make: With straightforward steps, this recipe is perfect for bakers of all levels.
  • Family-Friendly Delight: Everyone loves the sweet cherry flavor combined with warm cinnamon; it’s a sure hit with both kids and adults!
  • Make-Ahead Option: You can prep these rolls in advance and bake them fresh when you need them, making mornings a breeze.
  • Decadent Flavor: The homemade cherry filling paired with creamy frosting creates a delicious treat that feels like a warm hug.
  • Versatile Treat: Perfect for breakfast, dessert, or even a snack; they fit any occasion beautifully.
Cherry Cinnamon Rolls with Homemade Filling image 4

Ingredients You’ll Need

These cherry cinnamon rolls are made with simple, wholesome ingredients that you probably already have in your pantry. Let’s gather everything we need to create this scrumptious treat!

For the Cherry Filling

  • 3 1/2 cups frozen cherries (454g)
  • 1/3 cup granulated sugar (67g)
  • 1/4 cup cold water (60g)
  • 2 tbs corn starch (20g)

For the Dough

  • 1/4 cup warm water (60g)
  • 1 tsp active dry yeast (6g)
  • 3/4 cup whole milk (180g)
  • 1/3 cup granulated sugar (67g)
  • 2 large eggs
  • 4 1/2 cups bread flour (540g)
  • 1/2 tsp salt (3g)

For the Frosting

  • 6 tbs unsalted butter, room temperature
  • 3 oz cream cheese, room temperature (85g)
  • 2 cups powdered sugar (260g)
  • 2 tsp vanilla extract
  • 1-3 tbs whole milk (20-60g)

Variations

This recipe is wonderfully flexible! Here are some fun variations you can try:

  • Add Spices: Enhance the flavor by adding nutmeg or cardamom to the dough for an extra layer of warmth.
  • Fruit Swap: Substitute cherries with other fruits like blueberries or raspberries for a different twist on flavor.
  • Vegan Option: Use almond milk instead of whole milk and replace eggs with flax eggs for a plant-based version.
  • Gluten-Free Flour: Try using a gluten-free flour blend if you’re looking for a lighter option without compromising taste.

How to Make Cherry Cinnamon Rolls with Homemade Filling

Step 1: Prepare the Cherry Filling

Start by cooking the frozen cherries in a saucepan over medium heat. Combine them with sugar, cold water, and cornstarch. This step is essential as it thickens the filling and intensifies the cherry flavor. Stir until bubbly and thickened before removing from heat. Let it cool while you work on the dough.

Step 2: Make the Dough

In a small bowl, combine warm water and yeast. Let it sit until foamy—this means your yeast is alive and kicking! In a big mixing bowl, whisk together milk, sugar, eggs, flour, and salt. Slowly incorporate your yeast mixture into this blend. Kneading will develop the gluten needed for that lovely fluffy texture everyone loves.

Step 3: Let It Rise

Once kneaded well, place your dough in a greased bowl and cover it with a towel. Let it rise in a warm spot until doubled in size—about an hour. This resting time is crucial as it allows air pockets to form, resulting in soft rolls.

Step 4: Assemble Your Rolls

After rising, roll out your dough into a rectangle shape on a floured surface. Spread softened butter over the surface before adding your cooled cherry filling evenly across. Roll tightly into logs and cut into pieces—this is where those beautiful spirals form!

Step 5: Second Rise & Baking

Place your rolled pieces into a greased baking dish, cover again, and let rise once more until puffy—about 30 minutes. Preheat your oven during this time so they can go straight into hot air once ready! Bake until golden brown; you’ll know they’re done when they’re beautifully puffed up.

Step 6: Frosting Finish

While they cool slightly, whip together your frosting ingredients until smooth. Drizzle generously over your warm rolls for that creamy finish that makes every bite heavenly.

Enjoy sharing these delightful Cherry Cinnamon Rolls with Homemade Filling at your next gathering or simply indulge yourself—because you deserve it!

Pro Tips for Making Cherry Cinnamon Rolls with Homemade Filling

With just a little extra care, your cherry cinnamon rolls can turn out even more delicious!

  • Use fresh ingredients: Ensure that your yeast and dairy products are fresh for the best rise and flavor in your dough.
  • Knead well: Proper kneading helps develop gluten, resulting in a soft and fluffy texture. Aim for about 8-10 minutes of kneading.
  • Let it rise in a warm place: Finding a cozy spot for the dough to rise will encourage it to double in size. A warm oven (turned off) or a sunny window works great!
  • Avoid overfilling: When adding the cherry filling, don’t overload the dough; too much filling can make rolling difficult and cause leaks during baking.
  • Cool before frosting: Allow the rolls to cool slightly before adding the cream cheese frosting. This prevents melting and helps the frosting maintain its shape.

How to Serve Cherry Cinnamon Rolls with Homemade Filling

These cherry cinnamon rolls are perfect for sharing at any gathering or enjoying on a cozy morning at home.

Garnishes

  • Chopped nuts: Sprinkle some chopped walnuts or pecans on top for added crunch and flavor.
  • Fresh cherries: Garnish with whole or halved fresh cherries to enhance the fruity appeal and give a pop of color.

Side Dishes

  • Coffee or tea: A warm cup of coffee or herbal tea complements the sweetness of the rolls beautifully, making them perfect for brunch.
  • Yogurt parfait: Pairing with a yogurt parfait adds creaminess and balance to the meal, along with extra fruit and granola.
  • Fruit salad: A refreshing fruit salad provides a light contrast to the richness of the cinnamon rolls, enhancing your breakfast experience.
  • Scrambled eggs: For a more substantial meal, serve alongside fluffy scrambled eggs to create a delightful sweet-and-savory combination.

Make Ahead and Storage

These Cherry Cinnamon Rolls with Homemade Filling are perfect for meal prep, allowing you to enjoy this delightful treat any time you wish. With a few simple steps, you can make them ahead of time and store them for later enjoyment.

Storing Leftovers

  • Allow the rolls to cool completely before storing.
  • Place them in an airtight container at room temperature for up to 2 days.
  • If you prefer, refrigerate them for an extended freshness, lasting up to a week.

Freezing

  • After baking and cooling, wrap each roll tightly in plastic wrap.
  • Place the wrapped rolls in a freezer-safe bag or container.
  • They can be frozen for up to 3 months.

Reheating

  • To reheat from frozen, let the rolls thaw in the refrigerator overnight.
  • Warm them in a preheated oven at 350°F (175°C) for about 10-15 minutes or until heated through.
  • For microwave reheating, heat individual rolls on medium power for about 20-30 seconds.

FAQs

Here are some common questions readers may have about this recipe.

Can I use fresh cherries instead of frozen in Cherry Cinnamon Rolls with Homemade Filling?

Yes, you can use fresh cherries! Just ensure they are pitted and chopped. You may need to adjust the sugar slightly based on the sweetness of the fresh cherries.

How do I make Cherry Cinnamon Rolls with Homemade Filling vegan?

To make these rolls vegan, substitute dairy milk with a plant-based alternative and use flax eggs instead of regular eggs. You can also replace butter with vegan butter or coconut oil.

Can I add nuts to my Cherry Cinnamon Rolls with Homemade Filling?

Absolutely! Chopped nuts like pecans or walnuts can add a lovely crunch. Just sprinkle them over the filling before rolling up the dough.

How long do Cherry Cinnamon Rolls with Homemade Filling last?

When stored properly, these rolls will last up to 2 days at room temperature or up to a week in the refrigerator.

Final Thoughts

I hope you enjoy making these delightful Cherry Cinnamon Rolls with Homemade Filling as much as I do! They’re not just a treat; they embody warm memories and sweet moments spent with loved ones. Don’t hesitate to try this recipe—your taste buds will thank you!

Print

Cherry Cinnamon Rolls with Homemade Filling

Print Recipe

5 Stars 4 Stars 3 Stars 2 Stars 1 Star

No reviews

Cherry Cinnamon Rolls with Homemade Filling are a delightful treat that brings warmth and joy to any occasion. Imagine waking up to the sweet aroma of cinnamon and cherries wafting through your kitchen, or surprising your family with a special dessert after dinner. This recipe features fluffy dough filled with tart cherry goodness, complemented by creamy frosting, making it an irresistible choice for breakfast, brunch, or dessert. Whether you’re sharing them at a gathering or indulging yourself at home, these rolls are sure to become a cherished favorite.

  • Author: Mennana
  • Prep Time: 30 minutes
  • Cook Time: 25 minutes
  • Total Time: 55 minutes
  • Yield: Approximately 12 servings 1x
  • Category: Dessert
  • Method: Baking
  • Cuisine: American

Ingredients


Scale

  • 3 1/2 cups frozen cherries
  • 1/3 cup granulated sugar
  • 1/4 cup cold water
  • 2 tbs corn starch
  • 1/4 cup warm water
  • 1 tsp active dry yeast
  • 3/4 cup whole milk
  • 1/3 cup granulated sugar
  • 2 large eggs
  • 4 1/2 cups bread flour
  • 1/2 tsp salt
  • 6 tbs unsalted butter, room temperature
  • 3 oz cream cheese, room temperature
  • 2 cups powdered sugar
  • 2 tsp vanilla extract
  • 1–3 tbs whole milk

Instructions

  1. Prepare the cherry filling by cooking frozen cherries with sugar, cold water, and cornstarch in a saucepan until thickened. Let cool.
  2. In a small bowl, mix warm water and yeast. In a large bowl, whisk together milk, sugar, eggs, flour, and salt; add yeast mixture. Knead for about 8-10 minutes.
  3. Allow the dough to rise in a greased bowl until doubled in size (about 1 hour).
  4. Roll out the dough into a rectangle, spread softened butter, and evenly distribute cooled cherry filling before rolling tightly and cutting into pieces.
  5. Place pieces in a greased dish; let rise for another 30 minutes before baking in a preheated oven at 350°F (175°C) until golden brown.
  6. Prepare frosting by mixing softened butter, cream cheese, powdered sugar, vanilla extract, and enough milk for desired consistency; drizzle over warm rolls.

Nutrition

  • Serving Size: 1 roll (85g)
  • Calories: 265
  • Sugar: 16g
  • Sodium: 150mg
  • Fat: 8g
  • Saturated Fat: 5g
  • Unsaturated Fat: 3g
  • Trans Fat: 0g
  • Carbohydrates: 43g
  • Fiber: 2g
  • Protein: 5g
  • Cholesterol: 35mg

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”:”5721ee2834″,”postId”:1752};
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
Peach Lemonade
Next Post »
Watermelon Salad With Strawberries & Honey Lime Dressing

If you enjoyed this…

Oatmeal Cream Pie Cupcakes Recipe

Oatmeal Cream Pie Cupcakes Recipe

Iced Oatmeal Cookie Bars Recipe

Iced Oatmeal Cookie Bars Recipe

Festive Cranberry Turkey Stuffing Balls

Festive Cranberry Turkey Stuffing Balls

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