If you’re looking for a dessert that combines elegance and comfort, you’ve come to the right place! These Delicious Vanilla Bean Crème Brûlée Cheesecake Cupcakes are a delightful treat that will impress your friends and family. Imagine sinking your teeth into a creamy cheesecake nestled in a soft cupcake, topped with that irresistible crispy sugar layer. It’s like having crème brûlée and cheesecake all in one bite!
Perfect for any occasion—whether it’s a birthday party, holiday gathering, or just a cozy night at home—these cupcakes bring a touch of sophistication to the table. Plus, they’re surprisingly easy to make, even on busy weeknights when you want something special.

Why You’ll Love This Recipe
- Irresistibly delicious: The combination of creamy cheesecake and crispy sugar creates an unforgettable flavor experience.
- Easy preparation: You can whip these up in no time, making them perfect for unexpected guests or last-minute celebrations.
- Family-friendly appeal: Kids and adults alike will love these sweet treats, making them a hit at family gatherings.
- Make-ahead convenience: Prepare these cupcakes in advance and enjoy the joy of dessert without the stress.
- Perfectly portioned: Each cupcake is just the right size for indulging without overdoing it!

Ingredients You’ll Need
These cupcakes are made with simple, wholesome ingredients that you probably already have in your kitchen. Gathering these items will set you up for success!
For the Cupcake Batter
- ½ cup coarse sugar (such as raw, turbinado or sanding sugar)
- 6 tablespoons unsalted butter (softened)
- ¾ cup granulated sugar
- 1 ½ teaspoons pure vanilla extract
- 2 large eggs
- 1 ¼ cups all-purpose flour
- 1 teaspoon cornstarch
- 1 ¼ teaspoons baking powder
- ¼ teaspoon salt
- ⅓ cup plus 1 tablespoon whole milk
- 1 tablespoon sunflower oil (can also use canola oil or vegetable oil)
For the Vanilla Pastry Cream
- 1 recipe Easy One Pot Vanilla Pastry Cream
Variations
This recipe is wonderfully flexible! You can customize it to suit your taste or dietary preferences with just a few tweaks.
- Add some fruit: Toss in some fresh berries or sliced bananas for a fruity twist that pairs beautifully with the vanilla flavors.
- Change the topping: Instead of coarse sugar, try using crushed nuts or coconut flakes for an added crunch.
- Make it chocolatey: Swirl in some cocoa powder into the batter for a delightful chocolate version of this classic dessert.
- Go dairy-free: Substitute non-dairy milk and plant-based butter to create a vegan-friendly version that everyone can enjoy.
How to Make Delicious Vanilla Bean Crème Brûlée Cheesecake Cupcakes Recipe
Step 1: Prepare the Vanilla Pastry Cream
Start by making your Easy One Pot Vanilla Pastry Cream. This step is crucial because it’s what makes these cupcakes so decadent! Allow it to cool completely before combining it with the other cupcake ingredients.
Step 2: Cream Butter and Sugars
In a mixing bowl, combine softened unsalted butter, granulated sugar, and coarse sugar. Cream them together until light and fluffy. This process aerates the mixture, giving your cupcakes their delightful texture.
Step 3: Add Eggs and Vanilla
Next, add in the eggs one at a time along with pure vanilla extract. Mix until well combined. This adds richness and depth of flavor to your cupcakes.
Step 4: Combine Dry Ingredients
In another bowl, whisk together all-purpose flour, cornstarch, baking powder, and salt. Gradually add this dry mixture to your wet ingredients while alternating with whole milk and sunflower oil. Mixing just until combined keeps your batter light!
Step 5: Fill the Cupcake Liners
Preheat your oven to 350°F (175°C). Line your muffin tin with cupcake liners and fill each one about two-thirds full with batter. This allows room for rising without overflowing.
Step 6: Bake
Bake in your preheated oven for about 30 minutes or until golden brown and a toothpick inserted comes out clean. The smell while they bake will be heavenly!
Step 7: Top with Sugar
Once cooled, generously sprinkle coarse sugar on top of each cupcake. Using a kitchen torch (or broiler), carefully caramelize the sugar until it forms that signature crispy top layer—be sure not to burn it!
Step 8: Serve and Enjoy!
Let them cool slightly before serving. These cupcakes are best enjoyed fresh but can be stored in an airtight container for later indulgence!
Enjoy crafting these charming little delights; they’re sure to become a favorite in no time!
Pro Tips for Making Delicious Vanilla Bean Crème Brûlée Cheesecake Cupcakes Recipe
Getting the perfect Vanilla Bean Crème Brûlée Cheesecake Cupcakes takes a little finesse, but these tips will guide you to success!
Use room temperature ingredients: Ensuring your butter, eggs, and milk are at room temperature helps them blend more easily, creating a smoother batter and a fluffier cupcake.
Don’t overmix the batter: Mixing just until combined prevents gluten formation, which can lead to dense cupcakes. Aim for a light and airy texture!
Cool thoroughly before topping: Letting your cupcakes cool completely ensures that the sugar topping doesn’t melt into the cheesecake filling, maintaining that delightful crunch.
Practice caramelizing sugar carefully: When you torch the sugar on top, keep the flame moving to avoid burning. This creates an even crust and enhances that signature crème brûlée flavor.
Store properly: If you have leftovers, store them in an airtight container in the fridge. Just remember to add the sugar topping before serving for that perfect crispy finish!
How to Serve Delicious Vanilla Bean Crème Brûlée Cheesecake Cupcakes Recipe
Serving these cupcakes is a delightful experience! Here are some ideas to make your dessert presentation stand out.
Garnishes
- Fresh berries: A handful of raspberries or strawberries adds a pop of color and a refreshing contrast to the rich cheesecake flavor.
- Mint leaves: A sprig of fresh mint not only enhances the visual appeal but also adds a hint of freshness that complements the sweetness of the cupcakes.
Side Dishes
- Whipped coconut cream: Light and fluffy, this dairy-free whipped cream provides a subtle sweetness that pairs perfectly with the richness of the cheesecake cupcakes.
- Chocolate ganache: A drizzle of rich chocolate ganache can add depth and indulgence to each bite, making it an irresistible combination.
- Fruit salad: A vibrant mix of seasonal fruits brings brightness and acidity, balancing out the decadent flavors of your cupcakes.
- Coffee or tea: Offering a warm beverage alongside these sweet treats creates a comforting pairing, enhancing the overall dessert experience.

Make Ahead and Storage
These Delicious Vanilla Bean Crème Brûlée Cheesecake Cupcakes are perfect for meal prep, making them an excellent choice for gatherings or sweet treats throughout the week.
Storing Leftovers
- Store any leftover cupcakes in an airtight container at room temperature for up to 2 days.
- For longer freshness, refrigerate them for up to a week.
Freezing
- To freeze, place the cooled cupcakes in a single layer on a baking sheet and flash freeze until solid.
- Once frozen, transfer them to a freezer-safe bag or container. They can be frozen for up to 3 months.
Reheating
- To reheat, place the cupcakes in a microwave-safe dish and warm them in short intervals (about 10-15 seconds) until just heated through.
- Alternatively, you can thaw frozen cupcakes overnight in the refrigerator before enjoying them at room temperature.
FAQs
Can I use a different type of extract instead of vanilla?
Absolutely! While this recipe highlights the delicious flavor of vanilla bean, you can experiment with almond extract or lemon extract for a unique twist.
What makes these Delicious Vanilla Bean Crème Brûlée Cheesecake Cupcakes special?
The combination of creamy cheesecake filling with a crispy sugar topping creates an indulgent dessert experience that’s both visually stunning and delightful to eat!
How do I know when my cupcakes are done baking?
Insert a toothpick into the center of one cupcake; if it comes out clean or with only a few crumbs attached, they are ready to be taken out of the oven.
Final Thoughts
I hope you enjoy making these Delicious Vanilla Bean Crème Brûlée Cheesecake Cupcakes as much as I do! They truly bring together the best elements of cheesecake and cupcakes, making every bite feel like a special occasion. Don’t hesitate to share your creations and enjoy these delightful treats with friends and family!
Delicious Vanilla Bean Crème Brûlée Cheesecake Cupcakes
Indulge in the exquisite delight of Delicious Vanilla Bean Crème Brûlée Cheesecake Cupcakes! These charming treats combine the rich, creamy essence of cheesecake with a luscious vanilla pastry cream, all encased in a soft cupcake and topped with a perfectly caramelized sugar crust. Ideal for any festive occasion or simply as a sweet escape at home, these cupcakes are not only visually stunning but also surprisingly easy to prepare. With every bite, you’ll experience the comforting flavors of classic desserts merged into one delightful package. Surprise your friends and family with these elegant cupcakes that will surely impress!
- Prep Time: 20 minutes
- Cook Time: 25 minutes
- Total Time: 45 minutes
- Yield: Makes approximately 12 servings 1x
- Category: Dessert
- Method: Baking
- Cuisine: N/A
Ingredients
Scale
- ½ cup coarse sugar (such as raw or turbinado)
- 6 tablespoons unsalted butter (softened)
- ¾ cup granulated sugar
- 1 ½ teaspoons pure vanilla extract
- 2 large eggs
- 1 ¼ cups all-purpose flour
- 1 teaspoon cornstarch
- 1 ¼ teaspoons baking powder
- ¼ teaspoon salt
- ⅓ cup plus 1 tablespoon whole milk
- 1 tablespoon sunflower oil
Instructions
- Preheat your oven to 350°F (175°C) and line a cupcake pan with liners.
- In a mixing bowl, cream together softened butter and granulated sugar until light and fluffy.
- Add eggs one at a time, mixing well after each addition, then stir in the vanilla extract.
- In another bowl, whisk together flour, cornstarch, baking powder, and salt.
- Gradually add the dry ingredients alternately with milk and oil to the wet mixture until just combined.
- Fill cupcake liners about two-thirds full with batter and bake for 20-25 minutes or until a toothpick comes out clean. Cool completely.
- Once cooled, fill each cupcake with Easy One Pot Vanilla Pastry Cream.
- Sprinkle coarse sugar on top and use a kitchen torch to caramelize until golden.
Nutrition
- Serving Size: 1 serving
- Calories: 250
- Sugar: 18g
- Sodium: 150mg
- Fat: 10g
- Saturated Fat: 6g
- Unsaturated Fat: 3g
- Trans Fat: 0g
- Carbohydrates: 37g
- Fiber: <1g
- Protein: 4g
- Cholesterol: 60mg
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.weekmealideas.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”732a71e4a4″,”postId”:5349};
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