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

Family Table Ideas

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

Family Table Ideas

  • Home
  • Recipe Index
  • Budget
  • Cheat Meal
  • Healthy
  • Keto
  • Quick
  • Vegan
  • About
  • Contact
Vegan / Dessert / Steak Salad

Steak Salad

May 15, 2026 by JenniferHayes

Jump to Recipe·Print Recipe

If you’re looking for a meal that’s both satisfying and incredibly flavorful, this Steak Salad is just the ticket! Perfect for busy weeknights or laid-back family gatherings, it combines tender marinated steak with roasted potatoes, fresh greens, and a homemade ranch dressing that ties everything together beautifully. This dish makes for an impressive dinner without requiring hours in the kitchen.

Steak Salad image 2

What I love most about this recipe is how it balances hearty ingredients with bright flavors, making it a favorite across homes in the US and UK. Plus, it’s a wonderful way to enjoy all the goodness of a salad while still feeling full and satisfied!

Steak Salad image 3
Steak Salad image 4

Why You’ll Love This Recipe

  • Easy to Prepare: With just a few simple steps, you’ll have a delicious meal ready to impress in no time.
  • Family-Friendly Appeal: Kids and adults alike will love the combination of flavors and textures—everyone can create their perfect bite!
  • Make-Ahead Convenience: Marinate the steak ahead of time for an even deeper flavor; it’s perfect for meal prep!
  • Delicious Flavor Combination: The mix of roasted potatoes, sweet corn, and fresh greens makes each bite delightful.
  • Customizable Ingredients: Feel free to swap in your favorite veggies or dressings to make it your own!

Ingredients You’ll Need

Gathering these ingredients is easy! You’ll find them all at your local grocery store. Each one adds its own special touch to this delicious Steak Salad.

For the Marinade

  • 1/2 cup olive oil
  • 1/4 cup apple cider vinegar
  • 1 tablespoon kosher salt
  • 5 cloves garlic (minced)

For the Salad

  • 1 pound flat iron steak (or flank steak)
  • 1 pound red potatoes (cut into small wedges)
  • 2 tablespoons olive oil
  • 1 teaspoon dill (fresh, freeze dried, or dried)
  • 1 teaspoon parsley (fresh, freeze dried, or dried)
  • 1 teaspoon chives (fresh, freeze dried, or dried)
  • 1/2 teaspoon kosher salt
  • 1/2 teaspoon freshly ground pepper
  • 8 ounces baby greens
  • 2 ears corn
  • 8 ounces cherry tomatoes (quartered or halved)
  • 1/2 cup green onions (thinly sliced)
  • 1/2 cup ranch dressing

Variations

One of the best things about this recipe is its flexibility! Here are some fun variations to keep things interesting:

  • Swap the protein: Use grilled chicken or chickpeas for a vegetarian option instead of steak.
  • Add more veggies: Toss in bell peppers or avocado for extra color and nutrition.
  • Experiment with dressings: Try a zesty vinaigrette or tahini dressing if ranch isn’t your style.
  • Make it spicy: Drizzle some hot honey over the finished salad for a sweet and spicy kick.

How to Make Steak Salad

Step 1: Marinate the Steak

To start off this amazing Steak Salad, combine your marinade ingredients—olive oil, apple cider vinegar, kosher salt, and minced garlic—in a large resealable plastic bag. Add in your flat iron steak, squeeze out all the air, seal it up tight, and pop it in the fridge. This marinade will infuse the meat with flavor as it sits; aim for at least two hours but overnight works wonders too!

Step 2: Roast the Potatoes

While your steak is marinating away, let’s focus on those delicious roasted potatoes. In a mixing bowl, toss together the red potato wedges with olive oil, dill, parsley, chives, kosher salt, and pepper until they’re well-coated. Spread them out on a parchment-lined baking sheet in a single layer. Roasting at 400°F allows them to become perfectly crispy on the outside while staying fluffy inside—just stir them occasionally during cooking!

Step 3: Grill the Corn

Next up is grilling your corn! Place two ears on a griddle or grill over high heat. Turn them occasionally so they get that lovely char without burning. Once they’re done cooking (you’ll know by their golden color), cut off those sweet kernels from the cob. They’ll add fantastic sweetness to your salad!

Step 4: Grill the Steak

Now onto grilling that marinated steak! Heat up your grill or griddle until it’s nice and hot. Sear each side until you reach an internal temperature of about 130°F for medium doneness—don’t flip it too much; let those beautiful grill marks develop! Once done cooking, allow it to rest on a cutting board for at least 10-15 minutes before slicing against the grain; this keeps each bite tender.

Step 5: Assemble Your Salad

Finally! It’s time to bring everything together. In a large bowl or platter, combine baby greens with cherry tomatoes and green onions. Drizzle on ranch dressing to taste—or toss everything together if you prefer an even coating. Top with those sliced steaks and roasted potatoes along with your grilled corn for an eye-catching presentation that’s sure to impress! Enjoy every delicious bite!

Pro Tips for Making Steak Salad

Making the perfect steak salad is a breeze with a few handy tips to elevate your dish!

  • Choose the right cut of steak: Using flat iron or flank steak ensures tenderness and flavor, making each bite satisfying.
  • Don’t skip the marination: Allowing the steak to marinate enhances its flavor and helps tenderize the meat, resulting in a juicier finished product.
  • Let it rest: After grilling, resting the steak for 10-15 minutes allows the juices to redistribute, preventing dryness when sliced.
  • Mix your greens: Combining different types of baby greens adds texture and a variety of nutrients, making your salad visually appealing and healthy.
  • Get creative with dressing: While ranch dressing is delicious, feel free to experiment with other dressings like balsamic vinaigrette for a different flavor profile.

How to Serve Steak Salad

Presenting your steak salad beautifully can make it even more enjoyable. Here are some ideas!

Garnishes

  • Fresh herbs: A sprinkle of chopped parsley or cilantro adds a burst of color and freshness that enhances presentation.
  • Crumbled feta or goat cheese: Adding a bit of cheese brings creaminess and tanginess that complements the flavors of the salad.

Side Dishes

  • Garlic Bread: Warm, buttery garlic bread pairs perfectly with steak salad and is great for soaking up any leftover dressing.
  • Grilled Vegetables: Seasonal grilled veggies like zucchini and bell peppers add color and nutrition while complementing the hearty main dish.
  • Quinoa Salad: A light quinoa salad with cucumbers, tomatoes, and lemon dressing offers a refreshing contrast to the richness of the steak salad.
  • Roasted Asparagus: Lightly seasoned roasted asparagus adds crunch and a vibrant green element that balances out the meal.

Make Ahead and Storage

This Steak Salad is perfect for meal prep! You can easily prepare various components in advance, making it a convenient option for busy weeknights or lunches.

Storing Leftovers

  • Store any leftover steak salad in an airtight container.
  • Keep the salad dressing separate to prevent sogginess.
  • Consume within 3 days for the best taste and freshness.

Freezing

  • It is not recommended to freeze the assembled salad, as the greens and dressing do not thaw well.
  • However, you can freeze the marinated steak before cooking. Just ensure it’s in a sealed bag and use it within 3 months.

Reheating

  • Reheat the steak gently in a skillet over medium-low heat until warmed through.
  • Avoid microwaving the assembled salad, as it will wilt the greens.

FAQs

Can I make Steak Salad ahead of time?

Absolutely! You can marinate the steak and roast the potatoes a day in advance. Just assemble the salad right before serving for maximum freshness.

What goes well with Steak Salad?

Steak Salad pairs wonderfully with garlic bread or a crusty baguette. The hearty flavors of the steak complement these sides perfectly!

How should I store leftover Steak Salad?

Store leftovers in an airtight container in the refrigerator, keeping the dressing separate to maintain freshness. Enjoy within three days!

Can I customize my Steak Salad?

Yes! Feel free to add your favorite vegetables or swap out ingredients based on your preferences. This recipe is versatile and adaptable!

Final Thoughts

This Steak Salad is truly special because it combines robust flavors with fresh ingredients, creating a satisfying meal that’s perfect for any occasion. I hope you enjoy making this delightful dish as much as I do! Don’t hesitate to share your experiences or variations—your culinary creations inspire others!

Print

Steak Salad

Print Recipe

5 Stars 4 Stars 3 Stars 2 Stars 1 Star

No reviews

Steak Salad is a vibrant, nourishing dish that effortlessly combines tender marinated steak with crispy roasted potatoes and fresh greens. This delightful meal is perfect for busy weeknights or family get-togethers, allowing you to enjoy a satisfying main course without spending hours in the kitchen. The homemade ranch dressing adds a creamy touch that complements the dish beautifully. Ideal for meal prep, this Steak Salad can be customized with your favorite ingredients, ensuring everyone at the table finds something to love.

  • Author: JenniferHayes
  • Prep Time: 15 minutes
  • Cook Time: 40 minutes
  • Total Time: 55 minutes
  • Yield: Serves 4
  • Category: Main
  • Method: Grilling/Roasting
  • Cuisine: American

Ingredients


Scale

  • 1/2 cup olive oil
  • 1/4 cup apple cider vinegar
  • 1 tablespoon kosher salt
  • 5 cloves garlic (minced)
  • 1 pound flat iron steak (or flank steak)
  • 1 pound red potatoes (cut into small wedges)
  • 2 tablespoons olive oil
  • 1 teaspoon dill (fresh, freeze dried, or dried)
  • 1 teaspoon parsley (fresh, freeze dried, or dried)
  • 1 teaspoon chives (fresh, freeze dried, or dried)
  • 1/2 teaspoon kosher salt
  • 1/2 teaspoon freshly ground pepper
  • 8 ounces baby greens
  • 2 ears corn
  • 8 ounces cherry tomatoes (quartered or halved)
  • 1/2 cup green onions (thinly sliced)
  • 1/2 cup ranch dressing

Instructions

  1. Marinate the Steak: In a resealable bag, combine olive oil, apple cider vinegar, salt, and minced garlic. Add the steak, seal the bag, and refrigerate for at least 2 hours.
  2. Roast the Potatoes: Toss potato wedges in olive oil and herbs; spread on a baking sheet and roast at 400°F for about 25–30 minutes until crispy.
  3. Grill the Corn: Grill corn over high heat until charred; cut kernels off the cob.
  4. Grill the Steak: Heat grill to high; cook steak until it reaches an internal temperature of 130°F for medium doneness. Let rest before slicing.
  5. Assemble Salad: Combine baby greens, cherry tomatoes, and green onions in a bowl. Top with sliced steak, roasted potatoes, and corn. Drizzle with ranch dressing.

Nutrition

  • Serving Size: 1 salad (450g)
  • Calories: 550
  • Sugar: 3g
  • Sodium: 850mg
  • Fat: 32g
  • Saturated Fat: 6g
  • Unsaturated Fat: 24g
  • Trans Fat: 0g
  • Carbohydrates: 38g
  • Fiber: 6g
  • Protein: 32g
  • Cholesterol: 85mg

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.familytableideas.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”758fcb0a43″,”postId”:2880};
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
Whole30 Steak Bites with Sweet Potatoes and Peppers
Next Post »
Grilled Skirt Steak with Lemon Herb Couscous Salad

If you enjoyed this…

Grilled Nectarine Burrata Prosciutto Salad

Grilled Nectarine Burrata turkey slices Salad

Black Velvet Cupcakes

Black Velvet Cupcakes

Buffalo Chicken Mac and Cheese

Buffalo Chicken Mac and Cheese

Reader Interactions

Leave a Comment Cancel reply

Helpful comments include feedback on the post or changes you made.

Recipe rating 5 Stars 4 Stars 3 Stars 2 Stars 1 Star

Primary Sidebar

Browse by Diet

HealthyBudgetKetoQuickVeganCheat Meal
  • About
  • Contact
  • Disclaimer
  • Homepage
  • Privacy Policy
  • Recipe Index
  • Terms and Conditions

© 2026 Family Table Ideas · All Rights Reserved · Created with heart by Jennifer Hayes · About · Privacy Policy · Terms & Conditions · Disclaimer · Affiliate Disclosure · Contact