If you’re looking for a dish that wraps you in warmth and comfort, let me introduce you to my beloved Cheesy Ground Beef and Potato Bake. This recipe has been a family favorite for years, and it never fails to bring smiles around the dinner table. With its layers of seasoned ground beef, tender potatoes, and gooey cheese, it’s perfect for busy weeknights or cozy family gatherings. Just thinking about that golden, crispy top makes my heart sing!

What I love most about this bake is how simple it is to prepare yet so satisfying. You can easily whip it up ahead of time and pop it in the oven when you’re ready. Trust me, after one bite, you’ll understand why this dish has earned a special place in our hearts.


Why You’ll Love This Recipe
- Easy to make: This recipe requires just a few simple steps, making it perfect for cooks of all skill levels.
- Family-friendly: Kids and adults alike will adore the cheesy goodness, ensuring everyone leaves the table happy.
- Make-ahead convenience: Prep it in advance and bake it straight from the fridge when you’re ready to eat!
- Delicious flavor: The combination of ground beef, creamy cheese, and tender potatoes creates a mouthwatering experience with every bite.
Ingredients You’ll Need
Let’s gather some wholesome ingredients for this delightful bake! You’ll find that they are all easy to find in your local grocery store. Here’s what you need:
- 1½ lbs ground beef (85/15 or 90/10)
- 1 small yellow onion (diced)
- 2 cloves garlic (minced)
- 3 medium Yukon Gold potatoes (thinly sliced)
- 1 cup shredded mild cheddar cheese
- 1 cup shredded sharp cheddar cheese
- 1½ tsp salt
- Optional: ½ tsp black pepper, paprika, or cayenne
- Optional: 4 slices cooked bacon (crumbled)
Variations
One of the best things about this cheesy ground beef and potato bake is its flexibility! Feel free to get creative with different ingredients based on what you have on hand or your personal taste preferences. Here are some fun variations:
- Swap the protein: Try using ground turkey or chicken instead of beef for a lighter option.
- Add some veggies: Sneak in some spinach or kale for added nutrition and color.
- Change up the cheese: Experiment with your favorite cheeses like mozzarella or pepper jack for a unique twist.
- Make it spicy: Add diced jalapeños or chili flakes if you enjoy a bit of heat!
How to Make Cheesy Ground Beef and Potato Bake
Step 1: Prep Your Ingredients
Start by preheating your oven to 375°F. While that warms up, thinly slice your Yukon Gold potatoes—this helps them cook evenly—and dice the onion and garlic. Shredding both types of cheese now will save you time later!
Step 2: Cook the Ground Beef
In a large skillet over medium heat, brown the ground beef until it’s no longer pink. This step adds flavor as the beef caramelizes. Once browned, toss in the diced onion and minced garlic. Cook until they’re soft—this brings out their natural sweetness!
Step 3: Season Your Mixture
Stir in the salt along with any optional seasonings you’d like to use. Give everything a good mix before removing it from heat. This is where all those flavors start coming together!
Step 4: Assemble Your Bake
Spread that delicious beef mixture evenly into a baking dish—you want every bite to have that hearty goodness! Next, sprinkle half of your shredded cheddar over the beef, setting up a cheesy base for those lovely potato layers.
Step 5: Layer the Potatoes
Arrange your thin potato slices over the cheese in slightly overlapping rows. This not only looks pretty but also ensures even cooking throughout.
Step 6: Top It Off with Cheese
Finish off by sprinkling the remaining cheddar cheese over those beautiful potatoes. Who can resist more cheese? It creates that irresistible gooey topping we all love.
Step 7: Bake It Perfectly
Cover your dish tightly with foil and pop it in the oven for about 45 minutes. After that time, uncover it and let it bake for an additional 10–15 minutes until those potatoes are tender. If you want an extra crispy top, broil for just another couple of minutes—watching closely so it doesn’t burn!
Step 8: Serve and Enjoy!
After pulling your cheesy ground beef and potato bake from the oven, let it rest for about 10 minutes before serving. If you’re using crumbled bacon as an optional topping, sprinkle that on right before serving for an added crunch.
And there you have it—a comforting dish that’s sure to bring joy to any gathering! Enjoy every cheesy bite!
Pro Tips for Making Cheesy Ground Beef and Potato Bake
Whether you’re a seasoned cook or trying this for the first time, these tips will help you create a delicious cheesy ground beef and potato bake that everyone will love!
-
Use Fresh Ingredients: Fresh potatoes and onions not only add better flavor but also improve the texture of the dish. Fresh produce can make a noticeable difference in taste.
-
Layer for Flavor: When layering the potatoes and cheese, try to alternate them for even flavor distribution. This ensures every bite has that perfect cheesy goodness mixed with tender potatoes.
-
Adjust Seasonings to Taste: Feel free to play with spices! If you enjoy a bit of heat, adding cayenne pepper or paprika can enhance the dish without overwhelming it.
-
Let It Rest Before Serving: Allowing your bake to rest for 10 minutes after removing it from the oven helps the layers set and makes serving easier. It also allows flavors to meld beautifully!
-
Experiment with Cheeses: While cheddar is classic, mixing in other types of cheese like Monterey Jack or pepper jack can introduce new flavors and textures to your bake.
How to Serve Cheesy Ground Beef and Potato Bake
This cheesy ground beef and potato bake is not only hearty but also visually appealing, making it perfect for family dinners or casual gatherings. Here are some ideas on how to present this comforting dish.
Garnishes
- Fresh Herbs: Sprinkle freshly chopped parsley or chives on top just before serving for a burst of color and freshness.
- Sour Cream or Greek Yogurt: A dollop on top adds creaminess and balances out the richness of the cheese.
Side Dishes
- Steamed Broccoli: Lightly steamed broccoli adds a nutritious crunch that complements the creamy bake perfectly.
- Garden Salad: A simple garden salad with mixed greens, cherry tomatoes, and cucumbers dressed in vinaigrette adds freshness and lightness to your meal.
- Garlic Bread: Crispy garlic bread is always a hit! It’s great for mopping up any cheesy goodness left on your plate.
- Roasted Vegetables: Seasonal roasted vegetables bring color and additional nutrients to your meal while enhancing its flavor profile.
Enjoy your comforting, homemade cheesy ground beef and potato bake with these easy serving suggestions! It’s sure to be a hit at your dinner table.
Make Ahead and Storage
This Cheesy Ground Beef and Potato Bake is a fantastic option for meal prep! It can be made ahead of time and stored for easy weeknight dinners or family gatherings. Here’s how to keep it fresh and delicious.
Storing Leftovers
- Allow the bake to cool completely before storing.
- Transfer leftovers to an airtight container.
- Store in the refrigerator for up to 3-4 days.
Freezing
- Let the dish cool completely before freezing.
- Wrap tightly in plastic wrap, then cover with aluminum foil to prevent freezer burn.
- Freeze for up to 3 months.
- To reheat, thaw in the refrigerator overnight before baking.
Reheating
- Preheat your oven to 350°F.
- Place the baked dish in the oven for about 20-25 minutes or until heated through.
- For individual portions, you can use a microwave; heat on high for 1-2 minutes or until warm.
FAQs
Here are some common questions you might have about this delicious recipe!
Can I use different types of cheese in the Cheesy Ground Beef and Potato Bake?
Absolutely! Feel free to experiment with different cheeses like Monterey Jack, Gouda, or even pepper jack for a spicy kick. Just ensure they melt well.
How do I make the Cheesy Ground Beef and Potato Bake healthier?
You can lighten this dish by using leaner ground beef or substituting half of the potatoes with cauliflower for a low-carb version. Adding more vegetables like spinach or bell peppers can also boost its nutritional value!
Can I prepare the Cheesy Ground Beef and Potato Bake in advance?
Yes! This recipe is perfect for meal prep. You can assemble it ahead of time and store it in the fridge until you’re ready to bake it.
What sides go well with Cheesy Ground Beef and Potato Bake?
This hearty bake pairs wonderfully with a simple green salad or steamed vegetables. You might also enjoy it with a side of garlic bread!
Final Thoughts
I hope you enjoy making this Cheesy Ground Beef and Potato Bake as much as I do! It’s not just a comforting dish but also a wonderful way to bring friends and family together around the table. Whether it’s for a cozy dinner at home or meal prepping for busy weekdays, this recipe is sure to please. Happy cooking, and don’t hesitate to share your experience!
Dinner Casserole
nnn
Why You’ll Love This Recipe
This Cheesy Ground Beef and Potato Bake is the ultimate comfort food that combines the rich flavors of seasoned ground beef with creamy, melted cheese and tender potatoes. It’s a hearty dish that is not only satisfying but also incredibly easy to prepare. Perfect for busy weeknights or cozy family gatherings, this bake will quickly become a favorite in your household!
Ingredients You’ll Need
- 1½ lbs ground beef (85/15 or 90/10)
- 1 small yellow onion (diced)
- 2 cloves garlic (minced)
- 3 medium Yukon Gold potatoes (thinly sliced)
- 1 cup shredded mild cheddar cheese
- 1 cup shredded sharp cheddar cheese
- 1½ tsp salt
- Optional: ½ tsp black pepper (paprika, or cayenne)
- Optional: 4 slices cooked bacon (crumbled)
Variations
- Vegetarian Option: Substitute the ground beef with lentils or a meat alternative for a delicious vegetarian version.
- Cheese Lovers: Add different types of cheese like mozzarella or pepper jack for added flavor.
- Spicy Twist: Incorporate diced jalapeños or use spicy sausage instead of beef for a kick.
- Herb Infusion: Mix in fresh herbs like thyme or rosemary for an aromatic touch.
How to Make
- Prep: Preheat the oven to 375°F. Thinly slice the potatoes, dice the onion and garlic, and shred both cheeses.
- Cook the Beef: In a skillet over medium heat, cook the ground beef until browned. Add the onion and garlic, cooking until softened.
- Season: Stir in salt and any optional seasonings, then remove from heat.
- Layer Ingredients: Spread the beef mixture evenly in a baking dish. Sprinkle half of the shredded cheddar over the beef, then layer the sliced potatoes on top in slightly overlapping rows. Finish with the remaining cheddar cheese.
- Bake: Cover tightly with foil and bake for 45 minutes. Uncover and bake for an additional 10–15 minutes until the potatoes are fully tender.
- Broil: If desired, broil for 2–3 minutes to brown the cheese.
- Rest: Let rest for 10 minutes before serving. Top with crumbled bacon if using.
Pro Tips
- Uniform Slices: For even cooking, ensure your potato slices are uniform in thickness.
- Resting Time: Allowing the dish to rest after baking helps the layers set, making it easier to serve.
- Leftover Love: This dish freezes well, so consider making a double batch for easy meals later!
How to Serve
Serve this Cheesy Ground Beef and Potato Bake hot from the oven, garnished with fresh herbs or crumbled bacon. Pair it with a simple green salad or steamed vegetables for a complete meal. It’s great as leftovers too!
Make Ahead and Storage
You can prepare this dish a day in advance. Assemble the ingredients in the baking dish, cover tightly, and refrigerate. When ready to bake, add an extra 10-15 minutes to the cooking time. Leftovers can be stored in an airtight container in the refrigerator for up to 3 days or frozen for up to 2 months.
FAQs
- Can I use different types of meat? Absolutely! Ground turkey or chicken works well as alternatives.
- What can I do if my potatoes aren’t tender after baking? If the potatoes are still firm, cover the dish and bake for an additional 10-15 minutes.
- Can I make this dish gluten-free? Yes, all the ingredients listed are naturally gluten-free, just ensure any optional seasonings are also gluten-free.
Final Thoughts
This Cheesy Ground Beef and Potato Bake is a delightful blend of flavors and textures that will warm your heart and satisfy your hunger. Easy to make and full of cheesy goodness, it’s a recipe that brings everyone together around the dinner table. Enjoy every bite!
Cheesy Ground Beef and Potato Bake
-
Prep Time:
20 minutes -
Cook Time:
60 minutes -
Total Time:
1 hour 20 minutes -
Yield:
Serves 8 -
Category:
Main -
Method:
Baking -
Cuisine:
American
Description
Indulge in the comforting flavors of this Cheesy Ground Beef and Potato Bake. It combines layers of seasoned ground beef, tender Yukon Gold potatoes, and a generous amount of gooey cheddar cheese, creating a dish that is both hearty and satisfying. This bake is perfect for busy weeknights or cozy family dinners, as it can easily be prepared ahead of time and baked when you’re ready to eat. The crispy cheesy topping adds an irresistible crunch that will have everyone coming back for seconds. With its simple preparation steps and delightful aroma wafting through your kitchen, this dish promises to bring joy to your table with every bite.
Ingredients
Scale
- 1½ lbs ground beef (85/15 or 90/10)
- 1 small yellow onion (diced)
- 2 cloves garlic (minced)
- 3 medium Yukon Gold potatoes (thinly sliced)
- 1 cup shredded mild cheddar cheese
- 1 cup shredded sharp cheddar cheese
- 1½ tsp salt
- Optional: black pepper, paprika, or cayenne
Instructions
- Preheat your oven to 375°F. Thinly slice the Yukon Gold potatoes, dice the onion and garlic, and shred both types of cheese.
- In a large skillet over medium heat, brown the ground beef until no longer pink. Add diced onion and minced garlic; cook until softened.
- Stir in salt and any optional seasonings before removing from heat.
- Spread the beef mixture evenly in a baking dish. Sprinkle half of the shredded cheddar over the beef, then layer the potato slices on top in overlapping rows. Finish with the remaining cheese.
- Cover with foil and bake for 45 minutes. Uncover and bake an additional 10–15 minutes until potatoes are tender.
- For extra crispiness, broil for 2–3 minutes while watching closely.
- Let rest for 10 minutes before serving.
Nutrition
- Serving Size: 1/8 of recipe (approx. 200g)
- Calories: 358
- Sugar: 2g
- Sodium: 725mg
- Fat: 23g
- Saturated Fat: 11g
- Unsaturated Fat: 9g
- Trans Fat: 0g
- Carbohydrates: 20g
- Fiber: 2g
- Protein: 24g
- Cholesterol: 75mg
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]};
}
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;
};
{
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.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.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 );
});



Leave a Comment