If you’re looking for a deliciously satisfying meal that combines flavor and nutrition, this Steak Salad is just the ticket. It’s a perfect choice for busy weeknights when you want something hearty yet healthy, or for family gatherings where everyone can dig in and enjoy. The blend of marinated flat iron steak, roasted potatoes, fresh baby greens, and zesty ranch dressing makes this dish a true crowd-pleaser. Plus, it’s a great way to elevate your dinner game without spending hours in the kitchen!

This recipe holds a special place in my heart because it’s so versatile and adaptable. Whether you’re feeding a hungry family or entertaining friends, this Steak Salad is sure to impress!


Why You’ll Love This Recipe
- Quick and Easy: With simple steps and minimal prep time, you’ll have dinner on the table in no time!
- Flavor-Packed: The marinated steak combined with roasted potatoes and fresh veggies creates a delightful explosion of flavors.
- Health-Conscious: Packed with protein and nutrients from wholesome ingredients, this salad is as good for you as it is tasty.
- Family-Friendly: Kids love it too! The mix of textures and flavors will have everyone coming back for seconds.
- Make-Ahead Friendly: You can prepare the marinade and roast the potatoes ahead of time for an even quicker assembly at mealtime.
Ingredients You’ll Need
You’ll be pleased to know that this Steak Salad comes together with simple, wholesome ingredients that are easy to find at your local grocery store. Let’s gather what we need to create this vibrant dish!
For the Marinade
- 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)
For the Roasted Potatoes
- 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
For the Salad
- 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 Steak Salad is its flexibility. You can easily swap out ingredients to suit your taste or dietary needs while still keeping it delicious!
- Swap the protein: Try grilled chicken or tofu instead of steak for a lighter option.
- Add more veggies: Toss in some bell peppers or cucumbers for extra crunch.
- Go vegan: Use chickpeas or lentils instead of meat and opt for a vegan ranch dressing.
- Experiment with grains: Serve it over quinoa or farro for added texture and nutrition.
How to Make Steak Salad
Step 1: Marinate the Steak
To start off, combine all marinade ingredients—olive oil, apple cider vinegar, kosher salt, and minced garlic—in a large resealable plastic bag. Add the flat iron steak to the bag, squeeze out all the air before sealing it up tightly. This step is crucial as marinating allows all those wonderful flavors to penetrate the meat. Pop it into the fridge for at least two hours; overnight works even better!
Step 2: Prepare the Roasted Potatoes
While your steak marinates, let’s make those delicious roasted potatoes! In a bowl, mix together the cut red potatoes with olive oil, dill, parsley, chives, kosher salt, and freshly ground pepper. Toss them well to ensure they are evenly coated. Spread them out on a parchment-lined baking sheet and bake them in a preheated oven at 400°F for about an hour. Stir occasionally to get that golden-brown perfection on every side.
Step 3: Roast the Corn
Next up is roasting the corn! Heat up your griddle or grill over high heat. Place the ears of corn directly on it, turning occasionally so they get evenly charred but not burnt. Once they’re cooked through and slightly charred all around, remove them from heat and carefully cut off the kernels from the cob.
Step 4: Grill the Steak
Now it’s time to grill that steak! Heat your grill or griddle until it’s hot—this helps achieve those beautiful grill marks. Sear each side of your marinated steak until it reaches an internal temperature of about 130°F for medium doneness; turn it only once to keep those juices locked in. Letting it rest on a cutting board afterward will allow those flavors to settle nicely.
Step 5: Assemble Your Salad
Finally comes assembling this amazing Steak Salad! You can either toss all salad ingredients—baby greens, cherry tomatoes, green onions—and ranch dressing together in a large bowl or arrange them beautifully on a platter if you’re feeling fancy! This vibrant dish pairs perfectly with some garlic bread on the side.
And there you have it—your very own homemade Steak Salad ready to be enjoyed!
Pro Tips for Making Steak Salad
Creating a delicious steak salad is all about the details, and these tips will help you elevate your dish to perfection!
Choose the Right Cut: Opting for flat iron or flank steak ensures tenderness and flavor. These cuts are ideal for quick cooking and pair beautifully with fresh salad ingredients.
Marinate Longer for Flavor: If time allows, marinate the steak overnight. This enhances the flavors and makes the meat more tender, resulting in a juicier bite.
Let It Rest: After grilling, let the steak rest for 10-15 minutes before slicing. This allows juices to redistribute, keeping your steak moist and flavorful.
Use Fresh Herbs: Incorporating fresh herbs in your salad not only adds flavor but also brightens up the presentation. They can transform a simple salad into an aromatic experience.
Balance Textures: Combine crunchy elements (like roasted potatoes and corn) with soft greens to create an enjoyable mouthfeel. A variety of textures makes each bite exciting!
How to Serve Steak Salad
Presenting your steak salad beautifully can turn a simple meal into a stunning dish that impresses family and friends. Here are some ways to serve it up!
Garnishes
- Fresh Herbs: Sprinkle chopped fresh parsley or cilantro on top for a burst of color and flavor.
- Lemon Zest: Add a touch of lemon zest just before serving to brighten up the flavors of the dish.
Side Dishes
- Garlic Bread: Perfectly toasted garlic bread complements the richness of the steak salad while adding a satisfying crunch.
- Grilled Asparagus: Lightly seasoned grilled asparagus brings a lovely green touch that pairs well with both steak and salad.
- Quinoa Salad: A light quinoa salad with cucumbers, tomatoes, and lemon vinaigrette offers a refreshing contrast to the hearty steak.
- Roasted Vegetables: Seasonal roasted vegetables add depth and sweetness, enhancing the overall flavor profile of your meal.
Make Ahead and Storage
This Steak Salad is perfect for meal prep, allowing you to enjoy delicious, healthy meals throughout the week while saving time in the kitchen.
Storing Leftovers
- Store leftovers in an airtight container in the refrigerator.
- Consume within 3-4 days for the best taste and freshness.
- Keep dressing separate until ready to serve to maintain the salad’s crunch.
Freezing
- It’s best to avoid freezing the entire salad, as fresh vegetables can become limp.
- However, you can freeze cooked steak and roasted potatoes separately.
- Place them in airtight containers or freezer bags, and consume within 2-3 months for optimal flavor.
Reheating
- For reheating steak and potatoes, use a microwave or oven.
- Heat steak gently to prevent drying out; aim for just warming it through.
- Roasted potatoes can be reheated on a baking sheet at 350°F until warmed.
FAQs
Can I make Steak Salad without meat?
Absolutely! You can substitute the steak with grilled vegetables or tofu for a vegetarian option that maintains delicious flavors.
How do I make a quick Steak Salad?
To make a quick Steak Salad, use pre-cooked steak or leftover steak from another meal. Toss with greens, cherry tomatoes, and your favorite dressing for a speedy meal!
What should I serve with Steak Salad?
Steak Salad pairs wonderfully with garlic bread or a light soup. It’s a versatile dish that complements various sides beautifully!
Final Thoughts
This Steak Salad is not just a meal; it’s an experience that brings together bold flavors and fresh ingredients. I hope you enjoy making this dish as much as I do! It’s perfect for gatherings or cozy dinners at home. Happy cooking!
Steak Salad
If you’re in search of a delightful meal that balances flavor and nutrition, this Steak Salad is your answer. It features marinated flat iron steak, roasted potatoes, fresh baby greens, and a zesty homemade ranch dressing. Perfect for busy weeknights or family gatherings, this hearty yet healthy dish will impress anyone at your table. With its vibrant ingredients and satisfying textures, you’ll elevate your dinner game without spending hours in the kitchen.
- Prep Time: 15 minutes
- Cook Time: 75 minutes
- Total Time: 1 hour 30 minutes
- Yield: Serves 4
- Category: Main
- Method: Grilling/Baking
- Cuisine: American
Ingredients
Scale
- 1 lb flat iron steak (or flank steak)
- 1/2 cup olive oil
- 1/4 cup apple cider vinegar
- 1 tablespoon kosher salt
- 5 cloves garlic (minced)
- 1 lb 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 oz baby greens
- 2 ears corn
- 8 oz cherry tomatoes (quartered or halved)
- 1/2 cup green onions (thinly sliced)
- 1/2 cup ranch dressing
Instructions
- Marinate the steak by mixing olive oil, apple cider vinegar, salt, and minced garlic in a resealable bag. Add the steak, seal tightly, and refrigerate for at least 2 hours.
- For the roasted potatoes, toss cut red potatoes with olive oil and herbs. Bake at 400°F for about an hour.
- Grill the corn until charred and cut off the kernels.
- Grill or sear the marinated steak until it reaches an internal temperature of 130°F for medium doneness. Let it rest before slicing.
- Assemble the salad by combining baby greens, cherry tomatoes, corn kernels, and ranch dressing.
Nutrition
- Serving Size: 1 plate (300g)
- Calories: 500
- Sugar: 4g
- Sodium: 800mg
- Fat: 25g
- Saturated Fat: 5g
- Unsaturated Fat: 18g
- Trans Fat: 0g
- Carbohydrates: 40g
- Fiber: 6g
- Protein: 35g
- Cholesterol: 100mg
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.weekmealideas.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”6a8e4c71b2″,”postId”:7851};
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 );
});



Leave a Comment