If you’re looking for a dish that combines comfort, flavor, and ease, this Creamy Pesto Chicken Recipe is just what you need! It’s one of those recipes that warms your heart and delights your taste buds. The tender chicken breast, smothered in a creamy pesto sauce with juicy cherry tomatoes, is perfect for busy weeknights or family gatherings. It’s quick to whip up, yet feels like a special treat!

This recipe has become a staple in my kitchen because it checks all the boxes: it’s simple to prepare, bursting with flavor, and absolutely satisfying. Plus, it can easily be adapted to suit different tastes, making it an ideal choice for everyone around the table.


Why You’ll Love This Recipe
- Quick and Easy: This dish comes together in just 25 minutes! Perfect for those hectic evenings when time is tight.
- Family Favorite: Kids and adults alike will love the creamy sauce and vibrant cherry tomatoes—it’s a hit at any meal!
- Make Ahead: You can marinate the chicken ahead of time for an even quicker dinner on busy nights.
- Deliciously Versatile: Enjoy it over pasta, rice, or even on its own as a low-carb option!
- Fresh Ingredients: Packed with wholesome ingredients like basil pesto and cherry tomatoes, this dish is not only tasty but nutritious too.
Ingredients You’ll Need
To create this delicious Creamy Pesto Chicken Recipe, you’ll need some simple and wholesome ingredients. Gather these items from your pantry or local grocery store, and you’re ready to go!
For the Chicken Marinade
- 1 pound chicken breasts (boneless and skinless)
- Kosher salt and fresh ground pepper (to taste)
- 2 tablespoons basil pesto (or homemade)
For the Sauce
- 1 tablespoon extra virgin olive oil
- 2 cups cherry tomatoes
- 1 tablespoon gluten-free flour
- 2 garlic cloves (minced)
- 1 tablespoon basil pesto (or homemade)
- 1 cup almond milk (or any other milk)
- Kosher salt and fresh ground pepper (to taste)
For Garnish
- Freshly shaved parmesan (for garnish)
- Fresh basil leaves
Variations
One of the best things about this Creamy Pesto Chicken Recipe is its flexibility! Feel free to mix things up based on what you have on hand or your personal preferences.
- Swap the protein: Use turkey cutlets or even tofu for a delicious vegetarian option.
- Change up the veggies: Toss in some spinach or bell peppers along with the cherry tomatoes for added nutrition.
- Try different sauces: Experiment with sun-dried tomato pesto or arugula pesto for a unique twist!
- Add some heat: Sprinkle in some red pepper flakes if you like a little kick in your creamy sauce.
How to Make Creamy Pesto Chicken Recipe
Step 1: Marinate the Chicken
Place 1 pound of chicken breasts in a Ziploc bag. Add in 2 tablespoons of basil pesto along with Kosher salt and fresh ground pepper. Seal the bag tightly and gently massage it to ensure all pieces are nicely coated. Marinating for at least 1 hour allows those flavors to really soak into the chicken.
Step 2: Prepare the Sauce
Once you’re ready to cook, grab a small bowl and whisk together 1 tablespoon of gluten-free flour, 2 minced garlic cloves, another tablespoon of basil pesto, 1 cup of almond milk, and season with Kosher salt and fresh ground pepper. This mixture creates that rich creamy texture we love in this dish!
Step 3: Cook the Chicken
Heat 1 tablespoon of extra virgin olive oil in a large nonstick skillet over medium heat. Add your marinated chicken breasts and cook them for about 5 minutes on each side until they are no longer pink inside. This step is crucial as it locks in moisture while adding that lovely golden color.
Step 4: Combine Chicken and Sauce
Pour your prepared sauce over the cooked chicken directly in the skillet. Then add in those beautiful cherry tomatoes! Simmer everything together for about 5-6 minutes over medium-low heat until the sauce thickens slightly and those tomatoes burst open—this adds such wonderful flavor!
Step 5: Serve It Up!
Finally, garnish your Creamy Pesto Chicken with freshly shaved parmesan cheese and some lovely fresh basil leaves if desired. Serve it hot over pasta or rice—or enjoy it on its own! Each bite will remind you why this recipe has earned a special place in your heart. Enjoy!
Pro Tips for Making Creamy Pesto Chicken Recipe
Cooking is all about enjoying the process and making it your own, so here are some tips to elevate your creamy pesto chicken!
- Marinate Longer for Flavor: Allowing the chicken to marinate overnight deepens the flavor, making every bite taste more delicious and savory.
- Use Fresh Ingredients: Whenever possible, opt for fresh basil and ripe cherry tomatoes. They add vibrant flavor and freshness that enhances the overall dish.
- Adjust the Consistency: If you prefer a thinner sauce, simply add a splash more almond milk until you reach your desired consistency. This way, you can customize the dish to your liking!
- Cook on Medium Heat: Keeping the heat at medium ensures that the chicken cooks evenly without burning while still allowing the sauce to thicken nicely.
- Experiment with Seasonings: Feel free to add a pinch of red pepper flakes or Italian herbs to give the dish an extra kick and depth of flavor.
How to Serve Creamy Pesto Chicken Recipe
Presenting your creamy pesto chicken can be as creative as it is delicious! Here are some ideas for serving this delightful dish that will surely impress your family or guests.
Garnishes
- Freshly Shaved Parmesan: A light sprinkle of freshly shaved parmesan adds a rich and salty note that complements the creaminess of the sauce beautifully.
- Extra Basil Leaves: Garnishing with additional fresh basil leaves not only elevates the visual appeal but also enhances the aromatic experience of each bite.
Side Dishes
- Quinoa Salad: A light quinoa salad mixed with cucumbers, bell peppers, and a squeeze of lemon offers a refreshing balance to the rich flavors of the chicken.
- Garlic Bread: Crispy garlic bread is perfect for scooping up any leftover sauce on your plate, making it a satisfying accompaniment.
- Steamed Broccoli: The slight bitterness of steamed broccoli contrasts nicely with the creamy sauce and adds a nutritious touch to your meal.
- Zucchini Noodles: For a low-carb option, serve your creamy pesto chicken over zucchini noodles. They soak up the sauce wonderfully while providing a lovely texture.
With these tips and serving suggestions, you’re ready to enjoy a delightful meal that’s not just tasty but heartwarming too! Happy cooking!
Make Ahead and Storage
This Creamy Pesto Chicken Recipe is fantastic for meal prep, allowing you to enjoy delicious, home-cooked meals throughout the week without the hassle of cooking every day.
Storing Leftovers
- Store any leftover chicken in an airtight container.
- Refrigerate for up to 3 days.
- Make sure to keep the sauce separate if you prefer it fresh.
Freezing
- Allow the chicken to cool completely before freezing.
- Place in a freezer-safe container or Ziploc bag.
- Freeze for up to 3 months. To prevent freezer burn, remove as much air as possible.
Reheating
- Thaw overnight in the refrigerator if frozen.
- Reheat in a nonstick skillet over low heat until heated through.
- You can also microwave it in short intervals, stirring occasionally.
FAQs
Here are some common questions you might have about this delicious dish!
Can I use different types of chicken in the Creamy Pesto Chicken Recipe?
Absolutely! While boneless, skinless chicken breasts are perfect for this recipe, you can also use thighs or even chicken tenders. Just adjust the cooking time accordingly until they are fully cooked.
How long does it take to make the Creamy Pesto Chicken Recipe?
The total time for this recipe is around 85 minutes, which includes marinating the chicken. However, prep and cook time combined is only about 25 minutes.
Can I substitute almond milk in the Creamy Pesto Chicken Recipe?
Yes! Feel free to use any plant-based milk or dairy milk that you prefer. Just keep in mind that it might slightly alter the flavor and creaminess of the sauce.
Final Thoughts
I hope you enjoy making this Creamy Pesto Chicken Recipe as much as I do! It’s not just a delightful dish; it’s also a wonderful way to bring family and friends together around the table. Don’t hesitate to make it your own by adding favorite veggies or spices. Happy cooking, and may your kitchen always be filled with love and laughter!
Creamy Pesto Chicken Recipe
Indulge in the ultimate comfort food with this Creamy Pesto Chicken Recipe that blends tenderness and flavor in every bite. Juicy chicken breasts are marinated in a rich basil pesto, then sautéed to perfection and coated in a creamy sauce adorned with fresh cherry tomatoes. This dish is not only quick to prepare—ready in just 25 minutes—but it’s also versatile enough to suit any palate, making it a fantastic choice for busy weeknights or special gatherings. Serve it over pasta, rice, or enjoy it solo for a satisfying low-carb meal. With its simple ingredients and delightful taste, this recipe will quickly become a household favorite!
- Prep Time: 10 minutes
- Cook Time: 25 minutes
- Total Time: 35 minutes
- Yield: Serves 4
- Category: Main Course
- Method: Sautéing
- Cuisine: Italian
Ingredients
Scale
- 1 pound boneless, skinless chicken breasts
- 2 tablespoons basil pesto (store-bought or homemade)
- 1 tablespoon extra virgin olive oil
- 2 cups cherry tomatoes
- 1 tablespoon gluten-free flour
- 2 garlic cloves (minced)
- 1 cup almond milk
- Kosher salt and fresh ground pepper (to taste)
Instructions
- Marinate the chicken: In a Ziploc bag, combine chicken breasts, basil pesto, salt, and pepper. Seal and massage until coated; marinate for at least 1 hour.
- Prepare the sauce: Whisk together gluten-free flour, minced garlic, additional basil pesto, almond milk, salt, and pepper in a bowl until smooth.
- Cook the chicken: Heat olive oil in a large skillet over medium heat. Add marinated chicken and cook for about 5 minutes on each side until fully cooked.
- Combine: Pour the prepared sauce over the chicken and add cherry tomatoes. Simmer over medium-low heat for about 5-6 minutes until sauce thickens slightly.
- Serve: Garnish with freshly shaved parmesan and basil leaves if desired, then serve hot.
Nutrition
- Serving Size: 1 serving
- Calories: 350
- Sugar: 4g
- Sodium: 520mg
- Fat: 20g
- Saturated Fat: 3g
- Unsaturated Fat: 15g
- Trans Fat: 0g
- Carbohydrates: 10g
- Fiber: 2g
- Protein: 30g
- Cholesterol: 90mg
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/simplyhomecooking.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”f2e51e9277″,”postId”:1875};
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