If you’re looking for a meal that’s not only delicious but also quick and healthy, then this Healthy Mediterranean Hummus Bowl is just what you need. It’s my go-to recipe when I want something nutritious without spending hours in the kitchen. The combination of creamy hummus, fresh veggies, and protein makes it satisfying and vibrant. Plus, it’s perfect for busy weeknights or laid-back family gatherings where everyone can customize their bowls just the way they like!

This recipe is special to me because it embodies the flavors of the Mediterranean while being incredibly easy to whip up. Whether you’re serving it for lunch or dinner, each bite is a burst of freshness that delights your taste buds.

Why You’ll Love This Recipe
- Quick and easy: With just 30 minutes from start to finish, you can have a wholesome meal ready in no time.
- Customizable: Each person can add their favorite toppings, making it a fun option for everyone at the table.
- Packed with nutrients: Fresh vegetables, whole grains, and protein come together to create a balanced meal that fuels your day.
- Make-ahead friendly: Prepare ingredients in advance so you can assemble your bowl whenever hunger strikes.
- Flavorful and satisfying: The mix of spices and textures ensures every bite is delicious and fulfilling.
Ingredients You’ll Need
Let’s dive into the world of fresh ingredients! The great thing about this Healthy Mediterranean Hummus Bowl is that it uses simple, wholesome ingredients that are easy to find. You might even have some of these staples in your pantry already!

For the Base
- 1 ½ cups hummus (homemade or store-bought)
- 1 cup quinoa or couscous (cooked)
Fresh Vegetables
- 1 cup cherry tomatoes (halved)
- 1 cucumber (diced)
- 1 red bell pepper (diced)
- ¼ red onion (thinly sliced)
Toppings
- ¼ cup Kalamata olives (pitted and halved)
- ¼ cup feta cheese (crumbled; optional)
- 1 cup protein of choice (falafel, grilled chicken, or tofu)
- ½ cup roasted chickpeas (optional, for crunch)
- Fresh parsley or mint (chopped; about ¼ cup)
For the Lemony Tahini Dressing
- 1 tbsp olive oil
- 1 tbsp lemon juice
- 1 tsp za’atar or paprika
- ¼ cup tahini
- 2 tbsp lemon juice
- 2 tbsp water (or more for desired consistency)
- 1 garlic clove (minced)
- Salt and pepper to taste
Variations
One of the best parts about this recipe is its flexibility! Feel free to mix things up based on what you have on hand or what flavors you’re craving.
- Swap the protein: If falafel isn’t your thing, try grilled chicken or marinated tofu for a different twist.
- Change up the grains: Quinoa isn’t your only option—couscous works wonderfully too!
- Add seasonal vegetables: Swap out cherry tomatoes for roasted bell peppers or add zucchini during summer months.
- Explore different dressings: Try using a yogurt-based dressing for a tangy alternative to tahini.
How to Make Healthy Mediterranean Hummus Bowl
Step 1: Prepare Your Base
Start by cooking your quinoa or couscous according to package instructions. This step is essential as it provides a hearty base for your bowl. Once cooked, let it cool slightly while you prep your other ingredients.
Step 2: Chop Fresh Vegetables
Next, chop all those vibrant veggies! Dice cucumbers, halve cherry tomatoes, and slice red onions. This step adds color and crunch to your bowl—trust me; it makes all the difference!
Step 3: Mix Up Your Dressing
In a small bowl, whisk together olive oil, lemon juice, tahini, minced garlic, and your choice of za’atar or paprika. Adding water bit by bit until you reach your desired consistency creates a creamy dressing that ties everything together beautifully.
Step 4: Assemble Your Bowls
Now comes the fun part! In large bowls or plates, start layering with hummus as your base. Follow with quinoa or couscous before adding chopped vegetables and protein on top. Don’t forget those Kalamata olives!
Step 5: Drizzle with Dressing
Finally, drizzle your homemade tahini dressing over everything. Sprinkle with fresh herbs like parsley or mint for an extra touch. Enjoy immediately while everything is fresh!
This Healthy Mediterranean Hummus Bowl is sure to become one of your favorites too! Whether you’re enjoying it solo or sharing with friends and family, each scoop will make you smile.
Pro Tips for Making Healthy Mediterranean Hummus Bowl
Creating your own Mediterranean hummus bowl is both fun and rewarding! Here are some tips to enhance your dish and ensure it’s a hit every time.
-
Choose Quality Hummus: Whether you make it at home or buy it, opt for high-quality hummus. This will serve as the flavorful base of your bowl, making a significant difference in taste.
-
Cook Grains Ahead of Time: Prepare your quinoa or couscous in advance and store it in the fridge. This saves time on busy days and ensures a quick assembly when you’re ready to eat.
-
Customize Your Protein: Feel free to mix up the protein options based on your preferences. Falafel gives a great crunch, grilled chicken adds heartiness, while tofu provides plant-based goodness—each brings its own unique flavor!
-
Pack in the Veggies: Don’t be shy about adding more vegetables! Spinach, arugula, or roasted zucchini can add even more nutrients and flavor, making this bowl a powerhouse meal.
-
Adjust the Dressing Consistency: If you prefer a thicker or thinner tahini dressing, adjust the water accordingly. This way, you’ll have the perfect drizzle that enhances each bite!
How to Serve Healthy Mediterranean Hummus Bowl
Presenting your Mediterranean hummus bowl can turn an ordinary meal into an extraordinary experience. Here are some ideas to make it visually appealing and appetizing.
Garnishes
- Chopped Fresh Herbs: Sprinkle fresh parsley or mint over the top for added color and freshness.
- Lemon Wedges: Serve with lemon wedges on the side for an extra zing that guests can squeeze over their portions.
Side Dishes
- Cucumber Yogurt Dip: A refreshing dip made from yogurt and cucumber pairs beautifully with the flavors of the hummus bowl. It adds creaminess and coolness.
- Pita Bread: Warm pita bread slices are perfect for scooping up all the delicious ingredients in your bowl. They also make for a satisfying addition.
- Tabbouleh Salad: This bright salad made with bulgur wheat, parsley, tomatoes, and lemon juice complements the flavors of your dish perfectly while adding extra fiber.
- Roasted Vegetable Medley: A mix of seasonal roasted vegetables like bell peppers, zucchini, and eggplant can bring warmth and depth to your meal.
With these serving suggestions and pro tips, you’re all set to create a delightful Healthy Mediterranean Hummus Bowl that’s sure to impress! Enjoy every vibrant bite!
Make Ahead and Storage
This Healthy Mediterranean Hummus Bowl is perfect for meal prep! You can prepare the components ahead of time, making it easy to assemble a nutritious meal when you need it. Here’s how to store and preserve your delicious bowl.
Storing Leftovers
- Store leftovers in an airtight container in the refrigerator.
- Keep the dressing separate until ready to serve to maintain freshness.
- Leftovers can last up to 3 days in the fridge.
Freezing
- While it’s best enjoyed fresh, you can freeze individual portions of hummus and grains.
- Place them in freezer-safe containers or bags, removing as much air as possible.
- Use frozen items within 1-2 months for optimal flavor.
Reheating
- If using quinoa or couscous, reheat in a microwave-safe dish with a splash of water to prevent drying out.
- Heat hummus gently on the stove over low heat or in the microwave until warmed through (avoid overheating).
- Assemble your bowl fresh after reheating for the best texture and flavor!
FAQs
Here are some common questions about the Healthy Mediterranean Hummus Bowl:
Can I make this Healthy Mediterranean Hummus Bowl vegan?
Absolutely! Just make sure to skip any optional feta cheese and choose plant-based protein options like falafel or tofu.
How can I customize my Healthy Mediterranean Hummus Bowl?
You can add or substitute any toppings you love, such as avocado, roasted vegetables, or different herbs. The possibilities are endless!
What grains can I use for this recipe?
Quinoa and couscous work wonderfully, but feel free to use brown rice, farro, or any grain that you prefer.
Final Thoughts
I hope you enjoy making this Healthy Mediterranean Hummus Bowl as much as I do! It’s not only vibrant and delicious but also filled with nutritious ingredients that will keep you satisfied. Whether you’re planning a quick lunch or a light dinner, this recipe is sure to become a favorite. Happy cooking!
Healthy Mediterranean Hummus Bowl
Enjoy a delicious Healthy Mediterranean Hummus Bowl packed with veggies and flavors. Perfect for meal prep—try it today!
- Prep Time: 15 minutes
- Cook Time: 15 minutes
- Total Time: 30 minutes
- Yield: Serves 4
- Category: Main
- Method: No cooking method specified
- Cuisine: Mediterranean
Ingredients
Scale
- 1 ½ cups hummus (homemade or store-bought)
- 1 cup quinoa or couscous (cooked)
- 1 cup cherry tomatoes (halved)
- 1 cucumber (diced)
- 1 red bell pepper (diced)
- ¼ red onion (thinly sliced)
- ¼ cup Kalamata olives (pitted and halved)
- 1 cup protein of choice (falafel, grilled chicken, or tofu)
- ½ cup roasted chickpeas (optional, for crunch)
- Fresh parsley or mint (chopped; about ¼ cup)
- 1 tbsp olive oil
- 1 tbsp lemon juice
- 1 tsp za’atar or paprika
- ¼ cup tahini
- 2 tbsp lemon juice
- 2 tbsp water (or more for desired consistency)
- 1 garlic clove (minced)
- Salt and pepper to taste
Instructions
- Prepare quinoa or couscous according to package instructions and set aside to cool.
- Chop cherry tomatoes, cucumber, red bell pepper, and red onion.
- In a small bowl, whisk together olive oil, lemon juice, tahini, minced garlic, and za’atar or paprika until smooth.
- In serving bowls, layer hummus as the base followed by quinoa/couscous, chopped veggies, and your chosen protein.
- Drizzle with dressing and top with Kalamata olives and fresh herbs.
Nutrition
- Serving Size: 1 bowl (400g)
- Calories: 550
- Sugar: 6g
- Sodium: 600mg
- Fat: 23g
- Saturated Fat: 3g
- Unsaturated Fat: 20g
- Trans Fat: 0g
- Carbohydrates: 66g
- Fiber: 15g
- Protein: 18g
- Cholesterol: 10mg
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.fullrecipeshub.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”a20791664b”,”postId”:1008};
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.smoothScroll = {
init() {
document.addEventListener( ‘click’, ( e ) => {
let anchor = e.target;
if ( anchor.tagName !== ‘A’ ) {
anchor = anchor.closest( ‘a.tasty-recipes-scrollto’ );
}
if ( ! anchor || ! anchor.classList.contains( ‘tasty-recipes-scrollto’ ) ) {
return;
}
const elementHref = anchor.getAttribute( ‘href’ );
if ( ! elementHref ) {
return;
}
e.preventDefault();
this.goToSelector( elementHref );
});
},
goToSelector( selector ) {
const element = document.querySelector( selector );
if ( ! element ) {
return;
}
element.scrollIntoView( { behavior: ‘smooth’ } );
}
};
document.addEventListener(
‘DOMContentLoaded’,
() => window.TastyRecipes.smoothScroll.init()
);
(function(){
var bothEquals = function( d1, d2, D ) {
var ret = 0;
if (d1<=D) {
ret++;
}
if (d2<=D) {
ret++;
}
return ret === 2;
};
var frac =function frac(x,D,mixed){var n1=Math.floor(x),d1=1;var n2=n1+1,d2=1;if(x!==n1){while(bothEquals(d1,d2,D)){var m=(n1+n2)/(d1+d2);if(x===m){if(d1+d2d2){d2=D+1;}else {d1=D+1;}break}else if(xD){d1=d2;n1=n2}if(!mixed){return[0,n1,d1];}var q=Math.floor(n1/d1);return[q,n1-q*d1,d1]};frac.cont=function cont(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1<D){A=Math.floor(B);P=A*P_1+P_2;Q=A*Q_1+Q_2;if(B-AD){if(Q_1>D){Q=Q_2;P=P_2}else{Q=Q_1;P=P_1}}if(!mixed){return[0,sgn*P,Q];}var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]};
window.tastyRecipesVulgarFractions = JSON.parse(decodeURIComponent(“%7B%22%C2%BC%22%3A%221%2F4%22%2C%22%C2%BD%22%3A%221%2F2%22%2C%22%C2%BE%22%3A%223%2F4%22%2C%22%E2%85%93%22%3A%221%2F3%22%2C%22%E2%85%94%22%3A%222%2F3%22%2C%22%E2%85%95%22%3A%221%2F5%22%2C%22%E2%85%96%22%3A%222%2F5%22%2C%22%E2%85%97%22%3A%223%2F5%22%2C%22%E2%85%98%22%3A%224%2F5%22%2C%22%E2%85%99%22%3A%221%2F6%22%2C%22%E2%85%9A%22%3A%225%2F6%22%2C%22%E2%85%9B%22%3A%221%2F8%22%2C%22%E2%85%9C%22%3A%223%2F8%22%2C%22%E2%85%9D%22%3A%225%2F8%22%2C%22%E2%85%9E%22%3A%227%2F8%22%7D”));
window.tastyRecipesFormatAmount = function(amount, el) {
if ( parseFloat( amount ) === parseInt( amount ) ) {
return amount;
}
var roundType = ‘frac’;
if (typeof el.dataset.amountShouldRound !== ‘undefined’) {
if (‘false’ !== el.dataset.amountShouldRound) {
if ( ‘number’ === el.dataset.amountShouldRound ) {
roundType = ‘number’;
} else if (‘frac’ === el.dataset.amountShouldRound) {
roundType = ‘frac’;
} else if (‘vulgar’ === el.dataset.amountShouldRound) {
roundType = ‘vulgar’;
} else {
roundType = ‘integer’;
}
}
}
if (‘number’ === roundType) {
amount = Number.parseFloat(amount).toPrecision(2);
} else if (‘integer’ === roundType) {
amount = Math.round(amount);
} else if (‘frac’ === roundType || ‘vulgar’ === roundType) {
var denom = 8;
if (typeof el.dataset.unit !== ‘undefined’) {
var unit = el.dataset.unit;
if ([‘cups’,’cup’,’c’].includes(unit)) {
denom = 4;
if (0.125 === amount) {
denom = 8;
}
if (“0.1667″ === Number.parseFloat( amount ).toPrecision(4)) {
denom = 6;
}
}
if ([‘tablespoons’,’tablespoon’,’tbsp’].includes(unit)) {
denom = 2;
}
if ([‘teaspoons’,’teaspoon’,’tsp’].includes(unit)) {
denom = 8;
}
}
var amountArray = frac.cont( amount, denom, true );
var newAmount = ”;
if ( amountArray[1] !== 0 ) {
newAmount = amountArray[1] + ‘/’ + amountArray[2];
if (‘vulgar’ === roundType) {
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (newAmount === window.tastyRecipesVulgarFractions[vulgar]) {
newAmount = vulgar;
}
});
}
}
if ( newAmount ) {
newAmount = ‘ ‘ + newAmount;
}
if ( amountArray[0] ) {
newAmount = amountArray[0] + newAmount;
}
amount = newAmount;
}
return amount;
};
window.tastyRecipesUpdatePrintLink = () => {
const printButton = document.querySelector( ‘.tasty-recipes-print-button’ );
if ( ! printButton ) {
return;
}
const printURL = new URL( printButton.href );
const searchParams = new URLSearchParams( printURL.search );
const unitButton = document.querySelector( ‘.tasty-recipes-convert-button-active’ );
const scaleButton = document.querySelector( ‘.tasty-recipes-scale-button-active’ );
let unit = ”;
let scale = ”;
if ( unitButton ) {
unit = unitButton.dataset.unitType;
searchParams.delete(‘unit’);
searchParams.set( ‘unit’, unit );
}
if ( scaleButton ) {
scale = scaleButton.dataset.amount;
searchParams.set( ‘scale’, scale );
}
const paramString = searchParams.toString();
const newURL = ” === paramString ? printURL.href : printURL.origin + printURL.pathname + ‘?’ + paramString;
const printLinks = document.querySelectorAll( ‘.tasty-recipes-print-link’ );
printLinks.forEach( ( el ) => {
el.href = newURL;
});
const printButtons = document.querySelectorAll( ‘.tasty-recipes-print-button’ );
printButtons.forEach( ( el ) => {
el.href = newURL;
});
};
document.addEventListener( ‘DOMContentLoaded’, () => {
if ( ! window.location.href.includes( ‘/print/’ ) ) {
return;
}
const searchParams = new URLSearchParams( window.location.search );
const unit = searchParams.get( ‘unit’ );
const scale = searchParams.get( ‘scale’ );
if ( unit && ( ‘metric’ === unit || ‘usc’ === unit ) ) {
document.querySelector( ‘.tasty-recipes-convert-button[data-unit-type=”‘ + unit + ‘”]’ ).click();
}
if ( scale && Number(scale) > 0 ) {
document.querySelector( ‘.tasty-recipes-scale-button[data-amount=”‘ + Number(scale) + ‘”]’ ).click();
}
});
}());
(function(){
var buttonClass = ‘tasty-recipes-scale-button’,
buttonActiveClass = ‘tasty-recipes-scale-button-active’,
buttons = document.querySelectorAll(‘.tasty-recipes-scale-button’);
if ( ! buttons ) {
return;
}
buttons.forEach(function(button){
button.addEventListener(‘click’, function(event){
event.preventDefault();
var recipe = event.target.closest(‘.tasty-recipes’);
if ( ! recipe ) {
return;
}
var otherButtons = recipe.querySelectorAll(‘.’ + buttonClass);
otherButtons.forEach(function(bt){
bt.classList.remove(buttonActiveClass);
});
button.classList.add(buttonActiveClass);
var scalables = recipe.querySelectorAll(‘span[data-amount]’);
var buttonAmount = parseFloat( button.dataset.amount );
scalables.forEach(function(scalable){
if (typeof scalable.dataset.amountOriginalType === ‘undefined’
&& typeof scalable.dataset.nfOriginal === ‘undefined’) {
if (-1 !== scalable.innerText.indexOf(‘/’)) {
scalable.dataset.amountOriginalType = ‘frac’;
}
if (-1 !== scalable.innerText.indexOf(‘.’)) {
scalable.dataset.amountOriginalType = ‘number’;
}
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (-1 !== scalable.innerText.indexOf(vulgar)) {
scalable.dataset.amountOriginalType = ‘vulgar’;
}
});
if (typeof scalable.dataset.amountOriginalType !== ‘undefined’) {
scalable.dataset.amountShouldRound = scalable.dataset.amountOriginalType;
}
}
var amount = parseFloat( scalable.dataset.amount ) * buttonAmount;
amount = window.tastyRecipesFormatAmount(amount, scalable);
if ( typeof scalable.dataset.unit !== ‘undefined’ ) {
if ( ! scalable.classList.contains(‘nutrifox-quantity’) ) {
if ( ! scalable.classList.contains(‘nutrifox-second-quantity’) ) {
amount += ‘ ‘ + scalable.dataset.unit;
}
}
}
scalable.innerText = amount;
});
var nonNumerics = recipe.querySelectorAll(‘[data-has-non-numeric-amount]’);
nonNumerics.forEach(function(nonNumeric){
var indicator = nonNumeric.querySelector(‘span[data-non-numeric-label]’);
if ( indicator ) {
nonNumeric.removeChild(indicator);
}
if ( 1 !== buttonAmount ) {
indicator = document.createElement(‘span’);
indicator.setAttribute(‘data-non-numeric-label’, true);
var text = document.createTextNode(‘ (x’ + buttonAmount + ‘)’);
indicator.appendChild(text);
nonNumeric.appendChild(indicator);
}
});
window.tastyRecipesUpdatePrintLink();
});
});
}());
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.cookMode = {
wakeLockApi: false,
wakeLock: false,
cookModeSelector: ‘.tasty-recipes-cook-mode’,
init() {
if (“wakeLock” in navigator && “request” in navigator.wakeLock) {
this.wakeLockApi = navigator.wakeLock;
}
const cookModes = document.querySelectorAll(this.cookModeSelector);
if (cookModes.length > 0) {
for (const cookMode of cookModes) {
if (this.wakeLockApi) {
cookMode.querySelector(‘input[type=”checkbox”]’).addEventListener(“change”, event => {
this.checkboxChange(event.target);
}, false);
} else {
cookMode.style.display = “none”;
}
}
}
},
checkboxChange(checkbox) {
if (checkbox.checked) {
this.lock();
} else {
this.unlock();
}
},
setCheckboxesState(state) {
const checkboxes = document.querySelectorAll(this.cookModeSelector + ‘ input[type=”checkbox”]’);
for (const checkbox of checkboxes) {
checkbox.checked = state;
}
},
async lock() {
try {
this.wakeLock = await this.wakeLockApi.request(“screen”);
this.wakeLock.addEventListener(“release”, () => {
this.wakeLock = false;
this.setCheckboxesState(false);
});
this.setCheckboxesState(true);
} catch (error) {
this.setCheckboxesState(false);
}
},
unlock() {
if (this.wakeLock) {
this.wakeLock.release();
this.wakeLock = false;
}
this.setCheckboxesState(false);
}
};
(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
document.addEventListener(“DOMContentLoaded”, callback);
}
})(() => {
window.TastyRecipes.cookMode.init();
});
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.staticTooltip = {
element: null,
tooltipElement: null,
deleting: false,
init( element ) {
if ( this.deleting ) {
return;
}
this.element = element;
this.buildElements();
},
destroy() {
if ( ! this.tooltipElement || this.deleting ) {
return;
}
this.deleting = true;
this.tooltipElement.classList.remove( ‘opened’ );
setTimeout( () => {
this.tooltipElement.remove();
this.deleting = false;
}, 500 );
},
buildElements() {
const tooltipElement = document.createElement( ‘div’ );
tooltipElement.classList.add( ‘tasty-recipes-static-tooltip’);
tooltipElement.setAttribute( ‘id’, ‘tasty-recipes-tooltip’ );
const currentTooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
if ( currentTooltipElement ) {
document.body.replaceChild( tooltipElement, currentTooltipElement );
} else {
document.body.appendChild( tooltipElement );
}
this.tooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
},
show() {
if ( ! this.tooltipElement ) {
return;
}
const tooltipTop = this.element.getBoundingClientRect().top
+ window.scrollY
– 10 // 10px offset.
– this.tooltipElement.getBoundingClientRect().height;
const tooltipLeft = this.element.getBoundingClientRect().left
– ( this.tooltipElement.getBoundingClientRect().width / 2 )
+ ( this.element.getBoundingClientRect().width / 2 ) – 1;
const posLeft = Math.max( 10, tooltipLeft );
this.maybeRemoveTail( posLeft !== tooltipLeft );
this.tooltipElement.setAttribute( ‘style’, ‘top:’ + tooltipTop + ‘px;left:’ + posLeft + ‘px;’ );
this.tooltipElement.classList.add( ‘opened’ );
},
maybeRemoveTail( removeTail ) {
if ( removeTail ) {
this.tooltipElement.classList.add( ‘tr-hide-tail’ );
} else {
this.tooltipElement.classList.remove( ‘tr-hide-tail’ );
}
},
changeMessage( message ) {
if ( ! this.tooltipElement ) {
return;
}
this.tooltipElement.innerHTML = message;
}
};
window.TastyRecipes.ajax = {
sendPostRequest( url, data, success, failure ) {
const xhr = new XMLHttpRequest();
xhr.open( ‘POST’, url, true );
xhr.send( this.preparePostData( data ) );
xhr.onreadystatechange = () => {
if ( 4 !== xhr.readyState ) {
return;
}
if ( xhr.status === 200 ) {
success( JSON.parse( xhr.responseText ) );
return;
}
failure( xhr );
};
xhr.onerror = () => {
failure( xhr );
};
},
preparePostData( data ) {
const formData = new FormData();
for ( const key in data ) {
formData.append( key, data[key] );
}
return formData;
},
};
window.TastyRecipes.ratings = {
defaultRating: 0,
currentRatingPercentage: 100,
savingRating: false,
init( minRating ) {
this.minRating = minRating;
this.formWatchRating();
this.closeTooltipWhenClickOutside();
this.addBodyClassBasedOnSelectedRating();
this.backwardCompFormRatingPosition();
},
formWatchRating() {
const ratings = document.querySelectorAll(‘.tasty-recipes-no-ratings-buttons [data-rating]’);
if ( ratings.length {
event.preventDefault();
this.defaultRating = event.target.closest( ‘.checked’ ).dataset.rating;
this.setCheckedStar( event.target );
this.maybeSendRating( this.defaultRating, event.target );
this.setRatingInForm( this.defaultRating );
} );
}
},
closeTooltipWhenClickOutside() {
window.addEventListener( ‘click’, e => {
// Bailout (don’t remove the tooltip) when the clicked element is a rating star, or it’s the tooltip itself.
if ( e.target.closest( ‘.tasty-recipes-rating’ ) || e.target.classList.contains( ‘tasty-recipes-static-tooltip’ ) ) {
return;
}
window.TastyRecipes.staticTooltip.destroy();
} );
},
setRatingInForm( rating ) {
const ratingInput = document.querySelector( ‘#respond .tasty-recipes-rating[value=”‘ + rating + ‘”]’ );
if ( ! ratingInput ) {
return;
}
ratingInput.click();
},
addBodyClassBasedOnSelectedRating() {
const ratingInputs = document.querySelectorAll( ‘input.tasty-recipes-rating’ );
if ( ! ratingInputs ) {
return;
}
for ( const ratingInput of ratingInputs ) {
ratingInput.addEventListener( ‘click’, currentEvent => {
const selectedRating = currentEvent.target.getAttribute( ‘value’ );
this.handleBodyClassByRating( selectedRating );
this.toggleCommentTextareaRequired( selectedRating );
} );
}
},
handleBodyClassByRating( rating ) {
if ( rating < this.minRating ) {
document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );
return;
}
document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );
},
toggleCommentTextareaRequired( rating ) {
const commentTextarea = document.getElementById( 'comment' );
if ( ! commentTextarea ) {
return;
}
if ( rating {
window.TastyRecipes.staticTooltip.changeMessage( response.data.message );
window.TastyRecipes.staticTooltip.show();
this.updateAverageText( response.data, recipeCardElement );
this.maybeFillCommentForm( response.data );
// Hide the tooltip after 5 seconds.
setTimeout( () => {
this.maybeResetTooltip( recipeCardElement, response.data, rating );
}, 5000 );
},
() => {
this.resetTooltip( recipeCardElement );
}
);
},
updateAverageText( data, recipeCardElement ) {
if ( ! data.average ) {
return;
}
this.setRatingPercent( data );
if ( ! data.count ) {
return;
}
const quickLink = document.querySelector( ‘.tasty-recipes-rating-link’ );
if ( quickLink ) {
this.setTextInContainer( quickLink, data );
this.setPartialStar( quickLink );
}
const cardStars = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
cardStars.dataset.trDefaultRating = data.average;
this.setTextInContainer( recipeCardElement.querySelector( ‘.tasty-recipes-rating’ ), data );
},
setTextInContainer( container, data ) {
if ( ! container ) {
return;
}
if ( data.label ) {
const ratingLabelElement = container.querySelector( ‘.rating-label’ );
if ( ratingLabelElement ) {
ratingLabelElement.innerHTML = data.label;
}
return;
}
const averageElement = container.querySelector( ‘.average’ );
if ( averageElement ) {
averageElement.textContent = data.average;
}
const countElement = container.querySelector( ‘.count’ );
if ( countElement ) {
countElement.textContent = data.count;
}
},
setPartialStar( container ) {
const highestStar = container.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( highestStar ) {
highestStar.dataset.trClip = this.currentRatingPercentage;
}
},
setRatingPercent( data ) {
this.defaultRating = data.average.toFixed( 1 );
const parts = data.average.toFixed( 2 ).toString().split( ‘.’ );
this.currentRatingPercentage = parts[1] ? parts[1] : 100;
if ( this.currentRatingPercentage === ’00’ ) {
this.currentRatingPercentage = 100;
}
},
setCheckedStar( target ) {
const cardRatingContainer = target.closest( ‘.tasty-recipes-ratings-buttons’ );
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( selectedRatingElement ) {
delete selectedRatingElement.dataset.trChecked;
}
const thisStar = target.closest( ‘.tasty-recipes-rating’ );
thisStar.dataset.trChecked = 1;
thisStar.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = 100;
},
maybeFillCommentForm( data ) {
if ( ! data.comment || ! data.comment.content ) {
return;
}
const commentForm = document.querySelector( ‘#commentform’ );
if ( ! commentForm ) {
return;
}
const commentBox = commentForm.querySelector( ‘[name=comment]’ );
if ( ! commentBox || commentBox.value ) {
return;
}
// Add comment details for editing.
commentBox.innerHTML = data.comment.content;
if ( data.comment.name ) {
commentForm.querySelector( ‘[name=author]’ ).value = data.comment.name;
commentForm.querySelector( ‘[name=email]’ ).value = data.comment.email;
}
},
maybeResetTooltip( recipeCardElement, data, rating ) {
if ( this.savingRating === rating ) {
this.resetTooltip( recipeCardElement, data );
}
},
resetTooltip( recipeCardElement, data ) {
window.TastyRecipes.staticTooltip.destroy();
this.savingRating = false;
// Reset the default rating.
const cardRatingContainer = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
if ( cardRatingContainer ) {
this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;
cardRatingContainer.dataset.trDefaultRating = this.defaultRating;
this.resetSelectedStar( cardRatingContainer, data );
}
},
resetSelectedStar( cardRatingContainer ) {
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( selectedRatingElement ) {
selectedRatingElement.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = this.currentRatingPercentage;
selectedRatingElement.parentNode.dataset.trChecked = 1;
}
const previousSelectedElement= cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( previousSelectedElement ) {
const currentSelectedRating = previousSelectedElement.querySelector(‘[data-rating]’);
if ( currentSelectedRating !== selectedRatingElement ) {
delete previousSelectedElement.dataset.trChecked;
}
}
},
backwardCompFormRatingPosition() {
const ratingsButtons = document.querySelector( ‘#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons’ );
if ( ! ratingsButtons ) {
return;
}
const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);
if ( ! ratingsButtonsStyles.display.includes( ‘flex’ ) ) {
ratingsButtons.style.direction = ‘rtl’;
}
if ( typeof tastyRecipesRating !== ‘undefined’ ) {
// Select the rating that was previously selected in admin.
ratingsButtons.querySelector( ‘.tasty-recipes-rating[value=”‘ + tastyRecipesRating + ‘”]’ ).checked = true;
}
const ratingSpans = ratingsButtons.querySelectorAll( ‘.tasty-recipes-rating’ );
for (const ratingSpan of ratingSpans) {
ratingSpan.addEventListener( ‘click’, event => {
if ( ratingSpan === event.target ) {
return;
}
ratingSpan.previousElementSibling.click();
} );
}
}
};
(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );
});



Leave a Comment