If you’re looking for a dessert that bursts with flavor and feels like a warm hug, this Blueberry–Lemon Curd Tart Recipe is just the ticket! With every bite, you get the perfect balance of zesty lemon curd and sweet, juicy blueberries layered atop a buttery crust. It’s an absolute crowd-pleaser that works wonders for any occasion—be it a sunny picnic, a cozy family gathering, or simply a treat to brighten your day. Trust me, once you’ve made this tart, you’ll want it in your rotation!

The best part? It’s not only delicious but also surprisingly easy to whip up. Whether you’re baking for yourself or impressing guests, this tart has you covered.


Why You’ll Love This Recipe
- Deliciously balanced flavors: The tartness of lemon paired with the sweetness of blueberries creates a harmonious taste that’s hard to resist.
- Simple preparation: With straightforward steps, even novice bakers can create this stunning dessert without stress.
- Make-ahead friendly: You can prepare the crust and curd in advance, making it perfect for busy days when you still want to serve something special.
- Family-approved: Kids and adults alike will love this delightful treat, making it ideal for gatherings or just a sweet family dessert night.
- Versatile serving options: Serve it chill or at room temperature; either way, it’s sure to be a hit!
Ingredients You’ll Need
To make this scrumptious Blueberry–Lemon Curd Tart, gather some simple and wholesome ingredients that are likely already in your kitchen. Here’s what you’ll need:
For the Classic Tart Crust
- 1 large egg yolk
- 1 tablespoon heavy cream
- ½ teaspoon pure vanilla extract
- 1 ¼ cups (158g) all-purpose flour
- ⅓ cup (38g) confectioners’ sugar
- ¼ teaspoon kosher salt
- 8 tablespoons unsalted butter, cut into cubes and chilled
For the Lemon Curd
- ¼ cup lemon zest + ½ cup lemon juice (from about 4 lemons)
- 1 large egg + 5 large egg yolks
- ⅓ cup honey
- Pinch of kosher salt
- 4 tablespoons unsalted butter, chilled and cut into pieces
- 2 tablespoons heavy cream
For the Blueberry Layer
- 10 ounces (2 cups) fresh blueberries
- 2 tablespoons cornstarch
- ¼ cup honey
- 1 tablespoon reserved lemon juice from the curd preparation
Variations
This Blueberry–Lemon Curd Tart is wonderfully flexible! Feel free to get creative with these variations:
- Switch up the fruit: Substitute blueberries with raspberries or strawberries for a different fruity twist.
- Make it vegan: Use flaxseed meal mixed with water as an egg substitute and opt for plant-based butter in the crust.
- Add some spice: Mix in some grated ginger or a sprinkle of cinnamon to the blueberry layer for an extra depth of flavor.
- Try other citrus fruits: Experiment by using lime or orange juice instead of lemon for different tangy notes.
How to Make Blueberry–Lemon Curd Tart Recipe
Step 1: Prepare the Tart Crust
Start by making the crust because it’ll need some time to chill. In a mixing bowl, combine the flour, confectioners’ sugar, and kosher salt. Add in the chilled butter, using your fingers or a pastry cutter until it resembles coarse crumbs. Then mix in the egg yolk, heavy cream, and vanilla extract. Form into a disc, wrap it in plastic wrap, and refrigerate for about 30 minutes. Chilling helps achieve that flaky texture we all love!
Step 2: Make the Lemon Curd
While your crust chills, it’s time to whip up that luscious lemon curd. In a medium saucepan over low heat, whisk together the lemon juice, lemon zest, and eggs. Stir constantly until slightly thickened—this should take about 10 minutes. Remove from heat and mix in the honey and cold butter pieces until smooth. Finally, add in the heavy cream. Let it cool before spreading over your baked tart crust.
Step 3: Prepare the Blueberry Layer
In another saucepan over medium heat, combine your fresh blueberries with cornstarch, honey, and reserved lemon juice. Cook gently until everything is warmed through and slightly thickened—about 5-7 minutes. This step really brings out those beautiful berry flavors!
Step 4: Assemble Your Tart
Once your tart crust has cooled completely and your lemon curd is set, spread that velvety curd evenly across your crust. Top with warm blueberry mixture allowing those juicy berries to shine bright!
Step 5: Chill & Serve
Let your assembled tart chill in the fridge for at least an hour before slicing. This allows all those wonderful flavors to meld together beautifully while ensuring clean slices when serving. Enjoy every delicious bite!
Pro Tips for Making Blueberry–Lemon Curd Tart Recipe
Creating the perfect Blueberry–Lemon Curd Tart can be a delightful journey, and these tips will help ensure your success!
- Chill the Dough: Allowing the tart dough to chill for at least 30 minutes prevents shrinking during baking, ensuring a beautifully shaped crust.
- Use Fresh Ingredients: Fresh blueberries and lemons enhance the flavor of your tart, making it bright and vibrant. Avoid frozen fruits for the best texture.
- Check for Doneness: Keep an eye on the lemon curd while cooking. It’s ready when it thickens and coats the back of a spoon, ensuring a luscious filling.
- Let it Cool Completely: Allow the tart to cool fully before slicing. This helps the layers set properly, making for cleaner slices and better presentation.
- Experiment with Sweetness: Taste the lemon curd before pouring it into the crust. Adjust sweetness based on your preference by adding more or less honey.
How to Serve Blueberry–Lemon Curd Tart Recipe
Presenting your Blueberry–Lemon Curd Tart can elevate its appeal and make it even more enjoyable. Here are some ideas to enhance your serving experience.
Garnishes
- Fresh Mint Leaves: A few sprigs of mint add a pop of color and freshness, complementing the flavors beautifully.
- Whipped Coconut Cream: For a dairy-free option, top with whipped coconut cream to add richness without overpowering the tart.
Side Dishes
- Vanilla Ice Cream: A scoop of vanilla ice cream adds creaminess that contrasts nicely with the tartness of the lemon curd.
- Greek Yogurt Parfait: Layer Greek yogurt with honey and additional blueberries for a healthy side that balances out dessert flavors.
- Fruit Salad: A simple mix of seasonal fruits provides a refreshing contrast that enhances the overall meal experience.
- Herbed Salad: A light salad with mixed greens, cucumbers, and a citrus vinaigrette adds brightness and helps cleanse the palate between bites.
Make Ahead and Storage
This Blueberry–Lemon Curd Tart is a fantastic choice for meal prep, allowing you to enjoy a delicious dessert any day of the week without the last-minute fuss.
Storing Leftovers
- Wrap individual slices in plastic wrap or store them in an airtight container.
- Keep in the refrigerator for up to 3 days for the best flavor and freshness.
Freezing
- Freeze whole tart or individual slices by wrapping them tightly in plastic wrap followed by aluminum foil.
- Store in the freezer for up to 2 months. Thaw in the refrigerator overnight before serving.
Reheating
- For best results, reheat individual slices in a microwave for about 15-20 seconds or until warm.
- Alternatively, warm slices in an oven at 350°F (175°C) for 5-10 minutes until heated through.
FAQs
Can I make this Blueberry–Lemon Curd Tart recipe ahead of time?
Absolutely! You can prepare the tart crust and lemon curd a day in advance. Just assemble with the blueberry topping right before serving for optimal freshness.
What should I do if I have leftover blueberry topping from my Blueberry–Lemon Curd Tart recipe?
You can store leftover blueberry topping separately in an airtight container in the refrigerator for up to 3 days. It’s perfect on pancakes, yogurt, or as a topping for other desserts!
Can I use frozen blueberries for this tart?
Yes, you can use frozen blueberries! Just make sure to thaw and drain excess liquid before using them to prevent sogginess.
Final Thoughts
This Blueberry–Lemon Curd Tart is not just a treat; it’s a celebration of flavors that brightens any occasion. I hope you enjoy making this delightful dessert as much as I do. It’s perfect for sharing with friends or savoring all by yourself. Happy baking!
Blueberry–Lemon Curd Tart
Indulge in the delightful experience of making a Blueberry–Lemon Curd Tart, a dessert that beautifully balances zesty lemon curd and sweet blueberries atop a buttery crust. This tart is not only visually stunning but also offers an explosion of fresh flavors that will make it the star of any gathering or a cozy night in. The combination of citrusy brightness and juicy berries creates an irresistible treat that is perfect for any occasion. Plus, it’s surprisingly easy to prepare, making it ideal for both novice bakers and seasoned pros alike.
- Prep Time: 30 minutes
- Cook Time: 20 minutes
- Total Time: 50 minutes
- Yield: Serves 8
- Category: Dessert
- Method: Baking
- Cuisine: American
Ingredients
Scale
- 1 ¼ cups all-purpose flour
- ⅓ cup confectioners' sugar
- ¼ teaspoon kosher salt
- 8 tablespoons unsalted butter, cut into cubes and chilled
- 1 large egg yolk
- 1 tablespoon heavy cream
- ½ teaspoon pure vanilla extract
- ¼ cup lemon zest
- ½ cup lemon juice (from about 4 lemons)
- 1 large egg
- 5 large egg yolks
- ⅓ cup honey
- Pinch of kosher salt
- 4 tablespoons unsalted butter, chilled and cut into pieces
- 2 tablespoons heavy cream
- 10 ounces fresh blueberries
- 2 tablespoons cornstarch
- ¼ cup honey
- 1 tablespoon reserved lemon juice from the curd preparation
Instructions
- Prepare the tart crust by mixing flour, sugar, and salt. Add chilled butter and mix until crumbly. Incorporate egg yolk, cream, and vanilla; chill the dough.
- Make lemon curd by whisking lemon juice and eggs over low heat until thickened. Stir in honey and cold butter until smooth.
- Combine blueberries with cornstarch and honey in a saucepan; cook until warmed through.
- Assemble the tart by spreading lemon curd on the cooled crust and topping with blueberry mixture.
- Chill before serving to meld flavors.
Nutrition
- Serving Size: 1 serving
- Calories: 280
- Sugar: 18g
- Sodium: 150mg
- Fat: 15g
- Saturated Fat: 9g
- Unsaturated Fat: 6g
- Trans Fat: 0g
- Carbohydrates: 38g
- Fiber: 2g
- Protein: 3g
- Cholesterol: 60mg
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.weekmealideas.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”44372f5414″,”postId”:6474};
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