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

Sweet Family Table

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

Sweet Family Table

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

Mediterranean Celery Salad

Jump to Recipe·Print Recipe

If you’re looking for a refreshing and vibrant dish, the Mediterranean Celery Salad is just what you need! This salad is a delightful mix of crunchy organic celery, juicy cherry tomatoes, and a burst of fresh herbs. It’s not only quick to whip up but also versatile enough to serve as a light lunch or a colorful side at your next family gathering. The tangy kalamata dressing ties everything together beautifully, making it a favorite in our home for busy weekdays and leisurely weekends alike.

Mediterranean Celery Salad image 2

What I love most about this recipe is how it celebrates simple ingredients while delivering big flavors. Whether you’re enjoying it on its own or pairing it with grilled chicken or fish, this salad is sure to brighten your meal!

Mediterranean Celery Salad image 3
Mediterranean Celery Salad image 4

Why You’ll Love This Recipe

  • Super quick prep: With just 15 minutes to make, it’s the perfect last-minute addition to any meal.
  • Fresh and flavorful: Bursting with herbs and veggies, every bite is packed with taste.
  • Family-friendly appeal: Kids love the bright colors and crunch, making it a hit at the dinner table.
  • Make-ahead convenience: Prepare it in advance for easy lunches throughout the week.
  • Customizable: Add your favorite toppings or swap ingredients based on what you have on hand!

Ingredients You’ll Need

This Mediterranean Celery Salad calls for simple, wholesome ingredients that you can easily find at your local grocery store. Each component contributes to the salad’s flavor and texture, creating a dish that’s not only healthy but also incredibly satisfying.

For the Salad

  • 8 cups organic celery (about 8 large celery stalks), peeled, sliced thin on a diagonal
  • 1 cup cherry tomatoes, sliced in half
  • 1/2 cup fresh parsley, chopped
  • 1/2 cup fresh basil, chopped
  • 2-4 tablespoons celery leaves, chopped
  • 1/3 cup red onion, peeled and sliced thin
  • Kalamata olives (extra for garnish)
  • Feta cheese (extra for garnish)

For the Dressing

  • 1/2 cup extra-virgin olive oil
  • 1/4 cup lemon juice
  • 1/2 teaspoon grated lemon zest
  • 1 tablespoon Dijon mustard
  • 1-1/2 teaspoons dried oregano
  • 3 tablespoons kalamata olives, pitted and chopped
  • 3 tablespoons feta cheese
  • 1 clove garlic, grated on small hole grater

Variations

One of the best things about Mediterranean Celery Salad is its flexibility! You can easily adapt this recipe to suit your tastes or dietary preferences. Here are some fun ideas to switch things up:

  • Add some protein: Toss in grilled chicken or chickpeas for an extra boost of nourishment.
  • Go vegan: Omit the feta cheese and use avocado for creaminess instead!
  • Spice it up: Add crushed red pepper flakes for a kick of heat that complements the sweet-tart dressing.
  • Make it grainy: Serve over cooked quinoa or couscous for a heartier salad option.

How to Make Mediterranean Celery Salad

Step 1: Prepare Your Veggies

Start by rinsing all your vegetables under cold water, then pat them dry or use a salad spinner. This step ensures they’re crisp and clean. Slice those celery stalks on a diagonal—this not only looks pretty but also gives you more surface area for dressing!

Step 2: Chop Fresh Herbs and Onions

Next up, chop your fresh herbs and slice your red onion thinly. The fresh parsley and basil add brightness, while the onion brings just the right amount of zing. Don’t forget to reserve some celery leaves for an extra touch of flavor!

Step 3: Combine Ingredients

In a large bowl, combine all of your salad ingredients—the sliced celery, tomatoes, herbs, onions, kalamata olives, and feta cheese. It’s okay if you want to add more olives or feta; I often do!

Step 4: Whisk Together the Dressing

In a separate bowl, whisk together all the dressing ingredients: olive oil, lemon juice, zest, Dijon mustard, oregano, chopped olives, feta cheese, and grated garlic. This dressing is where all that delicious flavor comes from!

Step 5: Toss Everything Together

Drizzle the dressing over your salad mixture and toss everything well until all ingredients are coated. Season with freshly ground black pepper to taste—this final touch really elevates the flavors.

Enjoy this Mediterranean Celery Salad as part of your next meal; it’s bound to become a staple in your kitchen!

Pro Tips for Making Mediterranean Celery Salad

To elevate your Mediterranean Celery Salad experience, here are some handy tips to keep in mind!

  • Use Fresh Ingredients: Opt for organic and fresh vegetables whenever possible; they enhance the flavor and nutritional value of your salad.
  • Chill Your Ingredients: Refrigerate your salad bowl and ingredients beforehand to ensure a refreshing and crisp salad on serving.
  • Adjust Seasoning to Taste: Taste your dressing before adding it to the salad; this allows you to customize the flavors to your preference, ensuring every bite is perfect.
  • Let It Marinate: If you have time, let the salad sit for 15-30 minutes after tossing; this allows the flavors to meld beautifully for an even tastier dish.
  • Experiment with Herbs: Don’t hesitate to try different herbs like mint or dill alongside parsley and basil; these can provide a unique twist that enhances the Mediterranean flavor profile.

How to Serve Mediterranean Celery Salad

Serving your Mediterranean Celery Salad can be as delightful as making it! Here are some fun ideas on how to present this vibrant dish.

Garnishes

  • Extra Kalamata Olives: Scatter a few more kalamata olives on top for added color and briny goodness.
  • Crumbled Feta Cheese: A sprinkle of feta adds creaminess and complements the salad’s zesty dressing beautifully.

Side Dishes

  • Grilled Chicken: Juicy grilled chicken breasts seasoned with lemon and herbs make a perfect protein addition that pairs well with the crisp salad.
  • Quinoa Tabbouleh: This refreshing grain salad brings additional nutrients and a lovely texture that complements the celery salad perfectly.
  • Hummus with Pita Chips: Creamy hummus served with crunchy pita chips provides a satisfying crunch that balances out the freshness of the salad.
  • Roasted Vegetables: Colorful roasted veggies seasoned with olive oil and herbs add depth in flavor, making for a hearty side option alongside your salad.

Make Ahead and Storage

Mediterranean Celery Salad is perfect for meal prep, allowing you to enjoy fresh flavors throughout the week. Here’s how to store it properly:

Storing Leftovers

  • Store leftover salad in an airtight container in the refrigerator.
  • It will stay fresh for up to 3 days, but it’s best enjoyed within the first couple of days.
  • If possible, keep the dressing separate until you’re ready to serve to maintain crispness.

Freezing

  • It’s not recommended to freeze this salad due to the texture of fresh vegetables after thawing.
  • Instead, prepare ingredients separately and freeze them for future salads.

Reheating

  • There’s no need to reheat this salad; it’s best served cold.
  • If you prefer a warm dish, consider serving it alongside grilled proteins instead.

FAQs

Can I make Mediterranean Celery Salad in advance?

Absolutely! This salad is ideal for making ahead of time. Just prepare all the ingredients and combine them right before serving for maximum freshness.

What are some variations of Mediterranean Celery Salad?

You can customize Mediterranean Celery Salad by adding ingredients like chickpeas, avocado, or different types of olives. Feel free to experiment with your favorite textures and flavors!

How long does Mediterranean Celery Salad last in the fridge?

This delicious salad can last up to 3 days when stored in an airtight container. However, it’s best enjoyed within the first couple of days for optimal flavor and crunch.

Can I substitute other greens in Mediterranean Celery Salad?

Yes! While celery is the star of this salad, you can incorporate other greens like arugula or spinach for added nutrition and flavor.

Final Thoughts

Mediterranean Celery Salad is not only refreshing but also incredibly versatile, making it a delightful addition to any meal. I hope you enjoy creating this vibrant dish as much as I do! Feel free to add your personal touch and share it with friends and family. Happy cooking!

Print

Mediterranean Celery Salad

Print Recipe

5 Stars 4 Stars 3 Stars 2 Stars 1 Star

No reviews

Mediterranean Celery Salad is a refreshing and vibrant dish that brings together the crispness of organic celery, the sweetness of cherry tomatoes, and the aromatic flavors of fresh herbs. Perfect for a light lunch or as a colorful side at gatherings, this salad is quick to prepare in just 15 minutes. The tangy dressing made with extra-virgin olive oil and lemon juice enhances the natural flavors, making every bite delightful. Whether enjoyed on its own or paired with grilled chicken or fish, this salad is sure to brighten your meal.

  • Author: Mennana
  • Prep Time: 15 minutes
  • Cook Time: 0 minutes
  • Total Time: 15 minutes
  • Yield: Serves approximately 4
  • Category: Salad
  • Method: No-Cook
  • Cuisine: Mediterranean

Ingredients


Scale

  • 8 cups organic celery, sliced
  • 1 cup cherry tomatoes, halved
  • 1/2 cup fresh parsley, chopped
  • 1/2 cup fresh basil, chopped
  • 1/3 cup red onion, thinly sliced
  • Kalamata olives (for garnish)
  • Feta cheese (for garnish)
  • 1/2 cup extra-virgin olive oil
  • 1/4 cup lemon juice
  • 1 tablespoon Dijon mustard
  • 1 clove garlic, grated

Instructions

  1. Rinse and dry all vegetables; slice celery on a diagonal.
  2. Chop fresh herbs and thinly slice red onion.
  3. In a large bowl, combine celery, tomatoes, herbs, onions, olives, and feta.
  4. In a separate bowl, whisk together olive oil, lemon juice, mustard, garlic until blended.
  5. Drizzle dressing over salad; toss well to combine.

Nutrition

  • Serving Size: 1 cup (150g)
  • Calories: 140
  • Sugar: 3g
  • Sodium: 200mg
  • Fat: 12g
  • Saturated Fat: 2g
  • Unsaturated Fat: 10g
  • Trans Fat: 0g
  • Carbohydrates: 10g
  • Fiber: 4g
  • Protein: 2g
  • Cholesterol: 5mg

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.sweetfamilytable.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”d6ce51a79d”,”postId”:4233};
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
My Secret Jalapeno Cream Cheese Dip
Next Post »
Spicy Korean Ramen with Grilled Beef & Creamy Sauce

If you enjoyed this…

Low-Carb Buffalo Chicken Cottage Cheese Dip

Low-Carb Buffalo Chicken Cottage Cheese Dip

Easy No Bake Peanut Butter Oat Cups

Easy No Bake Peanut Butter Oat Cups

Peanut Butter Easter Eggs

Peanut Butter Easter Eggs

Primary Sidebar

Browse by Diet

HealthyBudgetKetoQuickVeganCheat Meal
Street Corn Chicken Rice Bowl

Street Corn Chicken Rice Bowl

Grilled Veggie & Mozzarella Sandwiches

Grilled Veggie & Mozzarella Sandwiches

Pumpkin Protein Balls (No-Bake)

Pumpkin Protein Balls (No-Bake)

  • About
  • Contact
  • Disclaimer
  • Homepage
  • PRIVACY POLICY
  • Recipe Index
  • TERMS AND CONDITIONS

© 2026 Sweet Family Table · All Rights Reserved · Created with love by Lalla Mennana · About · Privacy Policy · Terms & Conditions · Disclaimer · Affiliate Disclosure · Contact