If you’re looking for a delicious and stress-free dinner option, this Sheet Pan Greek Chicken and Veggies (Easy One-Pan Meal) is just what you need. It’s the kind of recipe that makes weeknight cooking feel like a breeze while delivering big on flavor. The blend of juicy marinated chicken and vibrant roasted vegetables brings those sunny Mediterranean vibes right to your kitchen. Whether it’s a busy Tuesday or a special family gathering, this dish fits perfectly into any occasion.
What I love most about this recipe is how simple it is to prepare. You can throw everything on a single tray, let the oven do its magic, and enjoy an impressive meal without the fuss!

Why You’ll Love This Recipe
- Super easy to make: With just a few steps and minimal cleanup, dinner is ready in no time!
- Packed with flavor: Bold Mediterranean spices and fresh ingredients ensure every bite is bursting with taste.
- Family-friendly: Everyone from kids to adults loves the colorful veggies and tender chicken.
- Healthy & satisfying: A balanced meal full of protein and nutrients that keeps you feeling good.
- Perfect for meal prep: Make it ahead of time for quick lunches or dinners throughout the week.

Ingredients You’ll Need
You’ll find that these ingredients are not only simple but also wholesome—perfect for creating a vibrant dish that everyone will love! Let’s gather what you need for this delightful Sheet Pan Greek Chicken and Veggies.
For the Chicken Marinade
- 1.5 lbs boneless (skinless chicken breasts or thighs)
- 3 tbsp olive oil
- 2 tbsp lemon juice (freshly squeezed)
- 1 tsp lemon zest
- 3 garlic cloves (minced)
- 1 tbsp Greek seasoning (oregano, thyme, salt, pepper)
- 1 tbsp apple cider vinegar
For the Veggies
- 1 red bell pepper (sliced)
- 1 yellow bell pepper (sliced)
- 1 zucchini (sliced)
- 1 small red onion (sliced)
- 1 cup cherry tomatoes
- ½ cup Kalamata olives
Seasoning
- 2 tbsp olive oil
- 1 tsp dried oregano
- ½ tsp salt
- ¼ tsp black pepper
For Serving
- ½ cup crumbled feta cheese (for serving)
- Fresh parsley (optional garnish)
Variations
One of the best things about this recipe is its flexibility! You can easily swap out ingredients based on your preferences or what you have on hand. Here are some fun ideas:
- Swap the protein: Use boneless turkey or chicken thighs for a different flavor profile.
- Add more veggies: Toss in your favorites like asparagus, broccoli, or sweet potatoes for added nutrition.
- Go vegan: Substitute chicken with chickpeas or tofu for a delightful plant-based version.
- Spice it up: Add chili flakes or drizzle hot honey over before serving for an extra kick!
How to Make Sheet Pan Greek Chicken and Veggies (Easy One-Pan Meal)
Step 1: Marinate the Chicken
Start by marinating your chicken. In a large bowl, combine olive oil, lemon juice, lemon zest, minced garlic, Greek seasoning, and apple cider vinegar. This marinade infuses the chicken with zesty flavors that will keep it juicy during roasting. Add your chicken pieces to the bowl, ensuring they’re well coated. Cover and let it marinate in the fridge for at least 30 minutes if you can—this step really enhances the flavor!
Step 2: Prepare the Vegetables
While your chicken is soaking up those delicious flavors, it’s time to prepare your veggies! Slice up your bell peppers, zucchini, red onion, and cherry tomatoes into bite-sized pieces. Mixing these colorful veggies not only makes your dish visually appealing but also adds various nutrients that complement the protein beautifully.
Step 3: Assemble Everything on a Sheet Pan
Preheat your oven to 400°F (200°C). On a large sheet pan, arrange the marinated chicken pieces in the center and scatter the prepared vegetables around them. Drizzle additional olive oil over everything along with dried oregano, salt, and black pepper. This ensures that all components roast evenly while developing incredible flavors.
Step 4: Roast to Perfection
Place your sheet pan in the preheated oven and roast for about 20 minutes until the chicken is cooked through and reaches an internal temperature of 165°F (75°C). The vegetables should be tender with crispy edges—a perfect contrast to the juicy chicken! If you like them extra crispy, feel free to broil them for an additional couple of minutes at the end.
Step 5: Serve & Enjoy!
Once everything is cooked to perfection, remove it from the oven. Sprinkle crumbled feta cheese over your dish for that classic Greek touch and garnish with fresh parsley if desired. Serve it warm straight from the pan—enjoy every bite of this delightful Sheet Pan Greek Chicken and Veggies!
Pro Tips for Making Sheet Pan Greek Chicken and Veggies (Easy One-Pan Meal)
To ensure your Sheet Pan Greek Chicken and Veggies turns out perfectly every time, here are some helpful tips!
- Marinate longer for flavor: Allow the chicken to marinate for at least 30 minutes or overnight. This enhances the flavors and makes the chicken juicier.
- Use even-sized veggies: Cut your vegetables into uniform pieces to ensure they cook evenly. This way, everything will be tender and ready to enjoy at the same time.
- Don’t overcrowd the pan: Give each ingredient space on the sheet pan. Overcrowding can lead to steaming instead of roasting, which affects texture and flavor.
- Check doneness with a thermometer: Use a meat thermometer to check that chicken reaches an internal temperature of 165°F. This ensures it’s safe to eat while remaining juicy.
- Feel free to customize: Experiment with different vegetables or seasonings based on what you have on hand or your personal preferences. This recipe is versatile and can be tailored to suit your taste.
How to Serve Sheet Pan Greek Chicken and Veggies (Easy One-Pan Meal)
Serving this delightful dish is as easy as it is delicious! Here are some ideas to present it beautifully.
Garnishes
- Fresh parsley: Sprinkle chopped fresh parsley over the top for a pop of color and freshness.
- Lemon wedges: Serve with lemon wedges on the side for an extra burst of citrus flavor.
Side Dishes
- Quinoa salad: A light quinoa salad with cucumber, tomatoes, and a lemon vinaigrette complements the Mediterranean flavors perfectly.
- Pita bread: Warm pita bread is great for scooping up chicken and veggies or enjoying with some hummus on the side.
- Greek yogurt dip: A tangy Greek yogurt dip mixed with garlic and herbs can serve as a refreshing accompaniment.
- Roasted potatoes: Crispy roasted potatoes seasoned with olive oil and herbs make a hearty side that pairs well with your meal.

Make Ahead and Storage
This Sheet Pan Greek Chicken and Veggies recipe is perfect for meal prep, allowing you to enjoy healthy, flavorful meals throughout the week with minimal fuss.
Storing Leftovers
- Allow the dish to cool completely before storing.
- Transfer leftovers to an airtight container.
- Store in the refrigerator for up to 3-4 days.
Freezing
- Portion out the chicken and veggies into freezer-safe containers or bags.
- Remove as much air as possible before sealing.
- Freeze for up to 2 months for best quality.
Reheating
- Thaw frozen portions in the refrigerator overnight before reheating.
- Reheat in a microwave until heated through, or place in an oven at 350°F (175°C) for about 15-20 minutes.
FAQs
Can I use other vegetables in Sheet Pan Greek Chicken and Veggies?
Absolutely! Feel free to swap in your favorite seasonal vegetables or whatever you have on hand. Just ensure they have similar cooking times for even roasting.
How can I make Sheet Pan Greek Chicken and Veggies ahead of time?
You can marinate the chicken and chop the vegetables a day in advance. Store them separately in the fridge until you’re ready to roast them.
Is this recipe suitable for meal prep?
Yes! This Sheet Pan Greek Chicken and Veggies is great for meal prep, as it stores well and reheats beautifully.
What should I serve with Sheet Pan Greek Chicken and Veggies?
This dish is complete on its own but pairs wonderfully with whole grains like quinoa or brown rice, or a fresh salad for extra crunch.
Final Thoughts
I hope you enjoy making this Sheet Pan Greek Chicken and Veggies as much as I do! It’s a delightful way to bring bold Mediterranean flavors into your home while keeping things simple and healthy. Don’t hesitate to share your experiences or variations; I’d love to hear how you made this dish your own!
Sheet Pan Greek Chicken and Veggies
Looking for a vibrant and easy dinner option that delights the taste buds? This Sheet Pan Greek Chicken and Veggies is the answer! Bursting with Mediterranean flavors, this one-pan meal features marinated chicken paired with colorful roasted vegetables, making it a feast for both the eyes and palate. Perfect for busy weeknights, family gatherings, or meal prep, this dish is not only simple to make but also healthy and satisfying. With minimal cleanup required, you can focus more on enjoying your delicious meal and less on the hassle of cooking.
- Prep Time: 15 minutes
- Cook Time: 25 minutes
- Total Time: 40 minutes
- Yield: Serves approximately four people 1x
- Category: Main
- Method: Baking
- Cuisine: Mediterranean
Ingredients
Scale
- 1.5 lbs boneless skinless chicken breasts or thighs
- 3 tbsp olive oil
- 2 tbsp lemon juice (freshly squeezed)
- 1 tsp lemon zest
- 3 garlic cloves (minced)
- 1 tbsp Greek seasoning (oregano, thyme, salt, pepper)
- 1 red bell pepper (sliced)
- 1 yellow bell pepper (sliced)
- 1 zucchini (sliced)
- 1 small red onion (sliced)
- 1 cup cherry tomatoes
- ½ cup Kalamata olives
- Fresh parsley (optional garnish)
Instructions
- Marinate the Chicken: In a bowl, whisk together olive oil, lemon juice, lemon zest, minced garlic, Greek seasoning. Add chicken and coat well. Let marinate in the fridge for at least 30 minutes.
- Prepare the Veggies: Preheat oven to 400°F (200°C). On a large sheet pan, toss bell peppers, zucchini, red onion, cherry tomatoes, and olives with olive oil and seasonings.
- Combine and Bake: Nestle marinated chicken among veggies on the sheet pan. Bake for 20-25 minutes or until the chicken reaches an internal temperature of 165°F.
- Serve: Remove from oven and sprinkle with crumbled feta cheese and parsley before serving.
Nutrition
- Serving Size: 1 plate (approximately 300g)
- Calories: 420
- Sugar: 5g
- Sodium: 750mg
- Fat: 22g
- Saturated Fat: 4g
- Unsaturated Fat: 16g
- Trans Fat: 0g
- Carbohydrates: 22g
- Fiber: 6g
- Protein: 38g
- Cholesterol: 110mg
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.weekmealideas.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”732a71e4a4″,”postId”:5363};
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