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

Tasty Daily Home

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

Tasty Daily Home

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

Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing

Jump to Recipe·Print Recipe

If you’re looking for a fresh and vibrant meal that celebrates the flavors of summer, then the Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing is just what you need! This delightful salad combines juicy grilled chicken with an explosion of berries, creating a dish that’s not only beautiful but also bursting with taste. It’s the perfect choice for busy weeknights or family gatherings when you want something special without spending hours in the kitchen.

Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing image 2

The combination of sweet and spicy elements elevates this salad to a new level, making it a standout at any table. Whether you’re enjoying it as a light lunch or serving it at a summer barbecue, it’s sure to impress everyone who takes a bite!

Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing image 3
Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing image 4

Why You’ll Love This Recipe

  • Bursting with Flavor: The sweet chipotle dressing paired with fresh berries makes each bite a delightful experience.
  • Quick and Easy: Ready in just 40 minutes, this recipe is perfect for those busy days when time is short but flavor is essential.
  • Family-Friendly: With its colorful presentation and delicious taste, this salad is sure to please both kids and adults alike.
  • Healthy Ingredients: Packed with protein and antioxidants from the berries, it’s a nutritious choice that doesn’t compromise on taste.
  • Make-Ahead Option: Prep the components ahead of time for even easier assembly during mealtime!

Ingredients You’ll Need

This Grilled Berry Feta Chicken Salad features simple, wholesome ingredients that you can easily find at your local grocery store. Each element plays an important role in building layers of flavor and texture.

For the Dressing:

  • ½ tablespoon olive oil
  • ¼ cup finely diced onion
  • 1 teaspoon minced garlic
  • 1 teaspoon finely chopped chipotle chiles in adobo
  • 2 cups fresh raspberries
  • ¼ cup raspberry vinegar
  • ⅓ cup white sugar
  • ¼ teaspoon salt

For the Salad:

  • 1½ pounds boneless skinless chicken breasts
  • 1 tablespoon McCormick Bacon Chipotle Seasoning Mix
  • 6 cups mixed greens lettuce
  • 2 cups sliced strawberries
  • 1 cup fresh raspberries
  • ½ cup blueberries
  • ½ cup blackberries
  • 10 slices cooked and crumbled center cut bacon (substitute with crispy chickpeas for a vegetarian option)
  • 4 ounces crumbled feta cheese

Variations

One of the best parts about this recipe is its flexibility! You can easily customize it to fit your dietary preferences or what’s available in your pantry.

  • Swap the protein: Use grilled tofu or chickpeas instead of chicken for a tasty vegetarian option that’s still high in protein.
  • Change up the greens: Experiment with different leafy greens like spinach or arugula to give your salad a unique twist.
  • Add nuts or seeds: Toss in some toasted walnuts or sunflower seeds for an extra crunch and healthy fats.
  • Mix berry varieties: Feel free to substitute any seasonal berries you have on hand—blackberries, blueberries, and strawberries all work beautifully!

How to Make Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing

Step 1: Prepare the Dressing

Start by whisking together the olive oil, diced onion, minced garlic, chipotle chiles, raspberries, raspberry vinegar, white sugar, and salt. This dressing brings together heat from the chipotle and sweetness from the berries—perfect for drizzling over your salad!

Step 2: Grill the Chicken

Season your boneless skinless chicken breasts with McCormick Bacon Chipotle Seasoning Mix. Preheat your grill (or grill pan) over medium-high heat and cook each side for about 6-7 minutes until fully cooked through. Grilling gives the chicken wonderful charred flavor while keeping it juicy.

Step 3: Assemble the Salad

In a large bowl, lay down your mixed greens as the base. Top them generously with sliced strawberries, blueberries, blackberries, raspberries, and crumbled feta cheese. Once your chicken has rested for a few minutes after grilling, slice it into strips and add on top.

Step 4: Drizzle with Dressing

Finish off by drizzling that luscious sweet chipotle dressing all over your assembled salad. Toss gently if desired to combine all those incredible flavors before serving. Enjoy this refreshing dish that’s truly perfect for any occasion!

Pro Tips for Making Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing

To elevate your Grilled Berry Feta Chicken Salad, here are some helpful tips to ensure it’s a hit!

  • Marinate the Chicken: Letting the chicken marinate for at least an hour in the chipotle seasoning enhances the flavor, making each bite more delicious.

  • Use Fresh Ingredients: Opt for organic berries and fresh greens if possible. Fresh produce not only tastes better but also adds vibrant colors to your salad.

  • Adjust the Sweetness: Taste your dressing before serving and adjust the sweetness by adding more or less sugar according to your preference. This ensures that it perfectly complements the tanginess of the berries.

  • Grill with Care: Make sure your grill is preheated to medium-high heat before placing the chicken on it. This will help achieve those beautiful grill marks and lock in moisture.

  • Chill Before Serving: For an extra refreshing experience, chill your salad for about 10 minutes after assembling. This helps meld the flavors together and makes it even more enjoyable on a warm day.

How to Serve Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing

Presentation can make all the difference when serving this delightful salad! Here are some ideas to showcase your creation beautifully.

Garnishes

  • Fresh Mint Leaves: Sprinkling a few mint leaves on top adds a pop of color and a refreshing aroma that complements the sweetness of the berries.
  • Lemon Zest: A light dusting of lemon zest over the salad brightens up the flavors and provides an appealing visual contrast.

Side Dishes

  • Quinoa Pilaf: This nutty side dish is rich in protein and pairs well with the sweet flavors of the salad, making it a hearty addition.
  • Garlic Bread: Warm, crusty garlic bread offers a satisfying crunch that balances out the freshness of the salad.
  • Cucumber Salad: A simple cucumber salad dressed in vinegar provides a cool, crisp contrast that keeps things light and refreshing.
  • Roasted Vegetables: Seasonal roasted vegetables bring depth and earthiness to your meal, perfectly complementing the vibrant flavors of your main dish.

Make Ahead and Storage

This Grilled Berry Feta Chicken Salad is perfect for meal prep! You can make it ahead of time, store it properly, and enjoy delicious salads throughout the week.

Storing Leftovers

  • Allow the salad to cool completely before storing.
  • Place any leftovers in an airtight container in the refrigerator.
  • Consume within 3-4 days for the best freshness.

Freezing

  • It is not recommended to freeze this salad as the ingredients, especially the greens, do not thaw well.
  • If you must freeze, consider freezing only the grilled chicken separately.

Reheating

  • If you have leftover grilled chicken, reheat it in a microwave or on a stovetop until warmed through.
  • Avoid reheating mixed greens to preserve their texture and flavor.

FAQs

Can I make Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing ahead of time?

Yes! You can prepare the grilled chicken and dressing in advance. Just assemble everything shortly before serving to keep the greens fresh.

What should I pair with Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing?

This salad pairs beautifully with crusty bread or a light soup. It’s a complete meal on its own but can be complemented by sides that enhance its flavors.

Can I substitute ingredients in Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing?

Absolutely! Feel free to swap berries based on what’s in season or what you prefer. Additionally, you can use goat cheese instead of feta for a different taste.

Final Thoughts

I hope you enjoy making this delightful Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing as much as I do! It’s not just a meal; it’s a celebration of summer flavors that will brighten your day. Don’t hesitate to experiment with your favorite ingredients and share this recipe with friends and family. Happy cooking!

Print

Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing

Print Recipe

5 Stars 4 Stars 3 Stars 2 Stars 1 Star

No reviews

Grilled Berry Feta Chicken Salad with a Sweet Chipotle Dressing is the ultimate summer dish that combines juicy grilled chicken, vibrant berries, and creamy feta, all drizzled with a uniquely sweet and spicy dressing. This salad is perfect for family gatherings or busy weeknights; it brings together fresh flavors that are both satisfying and nutritious.

  • Author: Chef Adrian Vale
  • Prep Time: 15 minutes
  • Cook Time: 25 minutes
  • Total Time: 40 minutes
  • Yield: Serves 4
  • Category: Salad
  • Method: Grilling
  • Cuisine: American

Ingredients


Scale
  • 1½ pounds boneless skinless chicken breasts
  • ½ tablespoon olive oil
  • ¼ cup finely diced onion
  • 1 teaspoon minced garlic
  • 1 teaspoon finely chopped chipotle chiles in adobo
  • 2 cups fresh raspberries
  • ¼ cup raspberry vinegar
  • ⅓ cup white sugar
  • ¼ teaspoon salt
  • 6 cups mixed greens lettuce
  • 2 cups sliced strawberries
  • ½ cup blueberries
  • ½ cup blackberries
  • 4 ounces crumbled feta cheese


Instructions

  1. Prepare the Dressing: Whisk together olive oil, diced onion, minced garlic, chipotle chiles, raspberries, raspberry vinegar, white sugar, and salt.
  2. Grill the Chicken: Season chicken breasts with seasoning mix and grill over medium-high heat for 6-7 minutes on each side until cooked through.
  3. Assemble the Salad: Lay mixed greens as the base; top with sliced strawberries, blueberries, blackberries, raspberries, crumbled feta, and sliced grilled chicken.
  4. Drizzle with Dressing: Pour the sweet chipotle dressing over your salad and toss gently before serving.

Nutrition

  • Serving Size: 1 salad (approximately 350g)
  • Calories: 450
  • Sugar: 20g
  • Sodium: 650mg
  • Fat: 18g
  • Saturated Fat: 5g
  • Unsaturated Fat: 13g
  • Trans Fat: 0g
  • Carbohydrates: 38g
  • Fiber: 8g
  • Protein: 36g
  • 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.tastydailyhome.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”498b6236f3″,”postId”:4414};
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 );
});

REMEMBER

WANT TO SAVE THIS RECIPE? CLICK BELOW AND PIN IT

PIN

« Previous Post
Simple Peach Feta Salad
Next Post »
Queso Spinach Dip

If you enjoyed this…

Potato Salad Recipe

Potato Salad Recipe

Brussels Sprout, Kale + Apple Salad with Sharp Cheddar + Bacon

Brussels Sprout, Kale + Apple Salad with Sharp Cheddar + Bacon

Grilled Chicken Burrito Bowl

Grilled Chicken Burrito Bowl

Primary Sidebar

Browse by Diet

HealthyBudgetKetoQuickVeganCheat Meal
  • About
  • Contact
  • DISCLAIMER
  • Homepage
  • PRIVACY POLICY
  • Recipe Index
  • TERMS AND CONDITIONS

© 2026 Tasty Daily Home · All Rights Reserved · Created by Chef Adrian Vale · About · Privacy Policy · Terms & Conditions · Disclaimer · Contact