• 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 / Grilled Chicken Cobb Salad with Honey Dijon {Paleo, Whole30 Option}

Grilled Chicken Cobb Salad with Honey Dijon {Paleo, Whole30 Option}

April 29, 2026 by JenniferHayes

Jump to Recipe·Print Recipe

If you’re looking for a fresh and satisfying meal that brings everyone to the table, the Grilled Chicken Cobb Salad with Honey Dijon {Paleo, Whole30 Option} is just what you need! This vibrant salad is not only a feast for the eyes but also packed with flavors and textures that will leave you craving more. Perfect for busy weeknights or family gatherings, it’s a simple way to enjoy wholesome ingredients without sacrificing taste.

Grilled Chicken Cobb Salad with Honey Dijon {Paleo, Whole30 Option} image 2

What makes this Cobb salad truly special is its versatility. You can whip it up in under 30 minutes, making it an ideal choice for lunch or dinner. Plus, with options to customize based on your dietary needs, it’s a recipe that everyone can enjoy!

Grilled Chicken Cobb Salad with Honey Dijon {Paleo, Whole30 Option} image 3
Grilled Chicken Cobb Salad with Honey Dijon {Paleo, Whole30 Option} image 4

Why You’ll Love This Recipe

  • Quick and Easy: With just a little prep, you’ll have a delicious meal ready in no time!
  • Packed with Flavor: The honey dijon dressing adds a delightful tangy-sweet kick that brings all the ingredients together.
  • Family-Friendly: Everyone loves a good salad, especially when it’s loaded with chicken, avocado, and crispy bacon!
  • Meal Prep Friendly: Make it ahead of time for an effortless lunch throughout the week.
  • Nutrient-Rich: This salad is gluten-free and full of healthy fats and proteins to keep you satisfied.

Ingredients You’ll Need

For this delightful grilled chicken Cobb salad, you’ll need some simple yet wholesome ingredients. Each one plays a role in creating layers of flavor, ensuring every bite is just as satisfying as the last.

For the Dressing

  • 3 Tbsp raw honey (melted if solid)
  • 1/4 cup dijon mustard
  • 2 Tbsp fresh lemon juice or white vinegar
  • 1/4 cup avocado oil
  • 1/4 tsp sea salt

For the Salad

  • 3-4 boneless skinless chicken breasts (about 1 1/2 lbs)
  • 1 tsp sea salt
  • 1/2 tsp black pepper
  • 1/2 tsp garlic powder
  • 1/2 tsp onion powder
  • 1 Tbsp avocado oil (for grilling)
  • 8 cups chopped romaine (or kale, or other greens)
  • 3/4 cup cherry tomatoes (halved)
  • 1/2 red onion (thinly sliced)
  • 1 medium cucumber (peeled and sliced)
  • 1 large avocado (thinly sliced)
  • 8 slices bacon (cooked until crisp and chopped or crumbled)
  • 6 hard-boiled eggs (sliced)

Variations

One of the best things about this recipe is its flexibility! You can easily adjust it to suit your tastes or dietary needs. Here are some fun variations you might enjoy:

  • Swap the protein: Try using grilled shrimp or tofu instead of chicken for a different twist!
  • Add extra crunch: Toss in some nuts like walnuts or pecans for added texture and flavor.
  • Make it vegan: Omit the eggs and bacon, and add roasted chickpeas for protein.
  • Seasonal twists: Use seasonal vegetables like bell peppers or asparagus to switch things up based on what’s fresh.

How to Make Grilled Chicken Cobb Salad with Honey Dijon {Paleo, Whole30 Option}

Step 1: Prepare the Dressing

In a small bowl, whisk together melted honey, dijon mustard, lemon juice (or vinegar), avocado oil, and sea salt until smooth. This quick dressing adds a touch of sweetness that complements the savory ingredients beautifully.

Step 2: Season the Chicken

Pat your chicken breasts dry and season them generously with sea salt, black pepper, garlic powder, and onion powder. This step ensures that each bite of chicken is flavorful and juicy once grilled.

Step 3: Grill the Chicken

Heat your grill or pan over medium-high heat and add a tablespoon of avocado oil. Cook the seasoned chicken breasts for about 5-7 minutes per side until they are perfectly cooked through. Letting them rest after grilling helps retain their juices!

Step 4: Assemble Your Salad

In a large bowl, combine chopped greens with halved cherry tomatoes, sliced cucumbers, red onion, avocado slices, crumbled bacon, and hard-boiled eggs. Toss gently so everything mixes well without bruising the delicate greens.

Step 5: Add Chicken & Dressing

Slice your grilled chicken into strips and place them on top of your beautiful salad. Drizzle with your homemade honey dijon dressing just before serving to keep everything fresh and vibrant!

Enjoy this delicious Grilled Chicken Cobb Salad with Honey Dijon {Paleo, Whole30 Option} — it’s sure to become a cherished favorite at your table!

Pro Tips for Making Grilled Chicken Cobb Salad with Honey Dijon {Paleo, Whole30 Option}

Creating the perfect Grilled Chicken Cobb Salad is all about attention to detail and a little bit of love!

  • Marinate the chicken: Allowing the chicken to marinate for at least 30 minutes enhances the flavor and tenderness, making every bite deliciously juicy.
  • Use a meat thermometer: Cooking the chicken until it reaches an internal temperature of 165°F ensures that it is safe to eat while remaining moist and flavorful.
  • Opt for fresh ingredients: Using fresh vegetables and herbs not only boosts the nutritional value but also elevates the overall taste of your salad.
  • Customize your toppings: Feel free to mix in your favorite veggies or swap out ingredients based on what’s in season. This flexibility keeps each salad unique and exciting!
  • Make extra dressing: Preparing a bit more honey Dijon dressing allows you to enjoy it as a dip for other salads or veggies throughout the week, maximizing its use.

How to Serve Grilled Chicken Cobb Salad with Honey Dijon {Paleo, Whole30 Option}

Presenting your Grilled Chicken Cobb Salad beautifully can make all the difference at meal time! Here are some tips for serving this vibrant dish.

Garnishes

  • Fresh herbs: A sprinkle of chopped parsley or cilantro adds a burst of color and freshness that complements the flavors beautifully.
  • Cracked black pepper: A light dusting of freshly cracked black pepper right before serving enhances the flavor profile and adds a touch of sophistication.

Side Dishes

  • Garlic Roasted Brussels Sprouts: These crispy sprouts provide a delightful crunch and earthy flavor that pairs excellently with the salad.
  • Zucchini Noodles: Light and refreshing, zucchini noodles offer a low-carb option that balances well with the richness of the salad’s toppings.
  • Quinoa Salad: A side of quinoa salad mixed with cucumbers, tomatoes, and lemon juice adds texture and makes for a hearty complement to your meal.
  • Fruit Salad: A sweet fruit salad with berries, melon, and mint offers a refreshing contrast to the savory elements of the Cobb salad.

Make Ahead and Storage

This Grilled Chicken Cobb Salad with Honey Dijon is perfect for meal prep! Not only does it come together quickly, but it also stores well, making it an excellent choice for busy weeknights or packed lunches.

Storing Leftovers

  • Store any leftovers in an airtight container in the refrigerator.
  • Keep the dressing separate to maintain the freshness of the salad.
  • Consume within 3-4 days for optimal taste and texture.

Freezing

  • This salad is not recommended for freezing due to the nature of the ingredients, particularly the fresh greens and avocado.
  • If you wish to freeze chicken, do so before assembling the salad. Cooked chicken can be frozen for up to 3 months.

Reheating

  • If you have leftover grilled chicken, reheat it in a microwave or on a skillet over low heat until warmed through.
  • Avoid reheating the salad as greens and other fresh ingredients will wilt.

FAQs

Have questions about this delicious recipe? Here are some common inquiries!

Can I use different greens in my Grilled Chicken Cobb Salad with Honey Dijon?

Absolutely! While romaine is traditional, feel free to mix in kale, spinach, or even arugula for a different flavor profile and texture.

What can I substitute for honey in the Honey Dijon dressing?

If you’re looking for a lower-sugar option, try using maple syrup or coconut nectar as a substitute for honey while maintaining that sweet flavor.

How long does the Grilled Chicken Cobb Salad with Honey Dijon last in the fridge?

When stored properly in an airtight container, this salad will stay fresh for 3-4 days. Just remember to keep the dressing separate until you’re ready to serve!

Is this recipe suitable for meal prepping?

Yes! This salad is perfect for meal prepping. Just prepare all ingredients ahead of time and store them separately until you’re ready to enjoy your meal.

Final Thoughts

I hope you find joy in making this Grilled Chicken Cobb Salad with Honey Dijon! It’s not just a meal; it’s an experience filled with vibrant flavors and fresh ingredients that your family will love. Enjoy every bite, and don’t hesitate to share your creations!

Print

Grilled Chicken Cobb Salad with Honey Dijon

Print Recipe

5 Stars 4 Stars 3 Stars 2 Stars 1 Star

No reviews

Grilled Chicken Cobb Salad with Honey Dijon {Paleo, Whole30 Option} is a vibrant and satisfying meal that brings together fresh ingredients in a beautiful way. This colorful salad is packed with juicy grilled chicken, creamy avocado, and a delightful honey dijon dressing that adds the perfect tangy-sweet flavor. It’s quick to prepare in under 30 minutes, making it ideal for busy weeknights or family gatherings. Plus, its versatility allows for easy customization based on your dietary preferences, ensuring everyone at the table can enjoy this nutritious dish.

  • Author: JenniferHayes
  • Prep Time: 15 minutes
  • Cook Time: 15 minutes
  • Total Time: 30 minutes
  • Yield: Serves 4
  • Category: Salad
  • Method: Grilling
  • Cuisine: American

Ingredients


Scale

  • 3–4 boneless skinless chicken breasts
  • 8 cups chopped romaine lettuce
  • 1 large avocado
  • 3/4 cup cherry tomatoes
  • 6 hard-boiled eggs
  • 3 Tbsp raw honey (melted if solid)
  • 1/4 cup dijon mustard
  • 2 Tbsp fresh lemon juice or white vinegar
  • 1/4 cup avocado oil
  • 1/4 tsp sea salt
  • 1 tsp sea salt
  • 1/2 tsp black pepper
  • 1/2 tsp garlic powder
  • 1/2 tsp onion powder
  • 1 Tbsp avocado oil (for grilling)
  • 1/2 red onion (thinly sliced)
  • 1 medium cucumber (peeled and sliced)

Instructions

  1. Prepare the dressing by whisking together melted honey, dijon mustard, lemon juice, avocado oil, and sea salt until smooth.
  2. Season chicken breasts with sea salt, black pepper, garlic powder, and onion powder.
  3. Grill seasoned chicken over medium-high heat for about 5-7 minutes per side until cooked through (internal temperature of 165°F). Let rest before slicing.
  4. In a large bowl, combine chopped greens with cherry tomatoes, sliced cucumbers, red onion, avocado slices, and sliced hard-boiled eggs.
  5. Top the salad with sliced grilled chicken and drizzle with honey dijon dressing just before serving.

Nutrition

  • Serving Size: 1 salad (approximately 300g)
  • Calories: 480
  • Sugar: 13g
  • Sodium: 900mg
  • Fat: 28g
  • Saturated Fat: 4g
  • Unsaturated Fat: 24g
  • Trans Fat: 0g
  • Carbohydrates: 20g
  • Fiber: 9g
  • Protein: 36g
  • Cholesterol: 210mg

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”:”0c3a1576d4″,”postId”:2265};
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
Starbucks Copycat Birthday Cake Pops
Next Post »
Watermelon Feta Salad

If you enjoyed this…

Delicious 8-Ingredient Bakery-Style Pumpkin Muffins You’ll Crave

Delicious 8-Ingredient Bakery-Style Pumpkin Muffins You’ll Crave

Feta & Cranberry Chickpeas with Lemon Vinaigrette

Feta & Cranberry Chickpeas with Lemon Vinaigrette

Cranberry Orange Muffins with Streusel

Cranberry Orange Muffins with Streusel

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

Powered by
►
Necessary cookies enable essential site features like secure log-ins and consent preference adjustments. They do not store personal data.
None
►
Functional cookies support features like content sharing on social media, collecting feedback, and enabling third-party tools.
None
►
Analytical cookies track visitor interactions, providing insights on metrics like visitor count, bounce rate, and traffic sources.
None
►
Advertisement cookies deliver personalized ads based on your previous visits and analyze the effectiveness of ad campaigns.
None
►
Unclassified cookies are cookies that we are in the process of classifying, together with the providers of individual cookies.
None
Powered by