If you’re looking for a cozy treat that’s perfect for fall, you’ve stumbled upon the right recipe! These Chocolate Pumpkin Muffins are a delightful blend of rich chocolate and warm pumpkin flavors. They’re not just delicious; they’re also incredibly easy to whip up, making them a go-to choice for busy weeknights or family gatherings. Trust me, once you make these muffins, they’ll become a beloved staple in your home.

What makes this recipe truly special is how it captures the essence of autumn. The combination of chocolate and pumpkin creates a warm hug in muffin form. Whether you’re serving them at a brunch or enjoying one with your afternoon coffee, these Chocolate Pumpkin Muffins are sure to impress!


Why You’ll Love This Recipe
- Quick and Easy: You can have these muffins ready in just about an hour, making them perfect for last-minute baking.
- Family-Friendly: Kids and adults alike will love the sweet taste and moist texture. They won’t even know there’s pumpkin in there!
- Make-Ahead Convenience: These muffins store well, so you can bake them in advance and enjoy them throughout the week.
- Rich Flavor: The deep chocolate flavor paired with pumpkin creates a unique and satisfying treat that stands out from regular muffins.
Ingredients You’ll Need
These Chocolate Pumpkin Muffins use simple, wholesome ingredients that you might already have in your pantry. Let’s gather what we need:
For the Muffin Batter:
- 1.5 cups canned pumpkin puree
- 113 grams unsalted butter (1 stick)
- 0.5 cups light brown sugar (100 grams)
- 0.5 cups granulated sugar (100 grams)
- 0.5 cups sour cream (124 grams)
- 2 large eggs
- 2 tsp pure vanilla extract
For the Dry Ingredients:
- 1.75 cups unbleached all purpose flour (210 grams)
- 0.5 cups unsweetened special dark dutch-processed cocoa powder (42 grams)
- 1 tsp baking soda
- 0.5 tsp baking powder
- 0.5 tsp fine sea salt
For Extra Chocolatey Goodness:
- 1 cup semi-sweet mini chocolate chips
Variations
One of the best things about this recipe is its flexibility! Here are some fun variations to customize your muffins:
- Add Nuts: Toss in some chopped walnuts or pecans for an extra crunch.
- Pumpkin Spice Twist: Incorporate some pumpkin pie spice to enhance the fall flavors.
- Swap the Sweetener: Try using maple syrup instead of granulated sugar for a unique sweetness.
- Make Them Mini: Use a mini muffin tin for bite-sized treats that are perfect for snacking.
How to Make Chocolate Pumpkin Muffins
Step 1: Preheat Your Oven
Start by preheating your oven to 350°F (175°C). This step is essential because it ensures that your muffins bake evenly and rise perfectly.
Step 2: Prepare Your Muffin Pan
Grease a standard muffin tin or line it with paper liners to prevent sticking. This little detail makes cleanup much easier!
Step 3: Cream Butter and Sugars
In a large mixing bowl, beat together the unsalted butter, light brown sugar, and granulated sugar until creamy. This process introduces air into the batter, giving your muffins a light texture.
Step 4: Add Wet Ingredients
Next, mix in the canned pumpkin puree, sour cream, eggs, and vanilla extract until everything is well combined. This adds moisture and richness to our muffins.
Step 5: Combine Dry Ingredients
In another bowl, whisk together the flour, cocoa powder, baking soda, baking powder, and sea salt. This step helps distribute the leavening agents evenly throughout the batter.
Step 6: Mix Wet and Dry Ingredients
Gradually add the dry mixture to the wet ingredients while stirring gently until just combined. Be careful not to overmix; we want tender muffins!
Step 7: Fold in Chocolate Chips
Gently fold in those mini chocolate chips that will melt slightly during baking, creating pockets of gooey goodness.
Step 8: Fill Muffin Tins
Scoop the batter into your prepared muffin pan, filling each cup about two-thirds full. This allows room for rising without overflowing.
Step 9: Bake!
Place your muffin tin in the preheated oven and bake for about 25 minutes or until a toothpick inserted into the center comes out clean. The aroma will be simply irresistible!
Step 10: Cool and Enjoy
Once baked, let them cool in the pan for about five minutes before transferring them to a wire rack to cool completely—if they last that long! Enjoy these delightful Chocolate Pumpkin Muffins fresh out of the oven or stored for later indulgence!
Pro Tips for Making Chocolate Pumpkin Muffins
Baking can be a delightful experience, and with these pro tips, you’ll create the most scrumptious Chocolate Pumpkin Muffins ever!
-
Use room temperature ingredients: Bringing your butter, eggs, and sour cream to room temperature helps them mix together more easily, resulting in a smoother batter and fluffier muffins.
-
Don’t overmix the batter: Stir just until combined. Overmixing can lead to dense muffins. You want that light, airy texture that makes every bite a joy!
-
Check for doneness: Insert a toothpick into the center of a muffin; it should come out with a few moist crumbs. This ensures they’re perfectly baked without being dry.
-
Cool before serving: Letting your muffins cool on a wire rack not only improves their texture but also enhances their flavor. Warm muffins are delicious, but cooling allows the flavors to settle beautifully.
-
Experiment with add-ins: Consider adding nuts or dried fruit for an extra twist! Walnuts or cranberries can complement the chocolate and pumpkin flavors wonderfully.
How to Serve Chocolate Pumpkin Muffins
Serving your Chocolate Pumpkin Muffins is all about presentation and pairing them with complimentary flavors. Here are some ideas to impress your family and friends!
Garnishes
- Powdered sugar dusting: A light sprinkle of powdered sugar on top adds a touch of elegance and sweetness without overpowering the rich chocolate flavor.
- Chocolate drizzle: Melt some semi-sweet chocolate chips and drizzle over the top for an indulgent finish that looks as good as it tastes.
Side Dishes
- Fresh fruit salad: A mix of seasonal fruits like apples, pears, or pomegranate seeds provides a refreshing contrast to the rich muffins while adding brightness to your plate.
- Yogurt parfait: Layer creamy yogurt with granola and berries for a delightful side that balances the sweetness of the muffins while adding creaminess.
- Spiced chai tea: The warm spices in chai tea complement the pumpkin perfectly, making it an ideal beverage pairing that enhances the cozy fall vibes.
- Maple syrup drizzle: For those who enjoy an extra touch of sweetness, serve some maple syrup on the side for dipping or drizzling over each muffin.
With these serving suggestions and pro tips in hand, you’re ready to bake up a storm! Enjoy each bite of your delicious Chocolate Pumpkin Muffins this fall season.
Make Ahead and Storage
These Chocolate Pumpkin Muffins are perfect for meal prep! You can bake them ahead of time, store them properly, and enjoy their deliciousness throughout the week.
Storing Leftovers
- Allow muffins to cool completely before storing.
- Place muffins in an airtight container at room temperature for up to 3 days.
- For longer freshness, store them in the refrigerator for up to a week.
Freezing
- Wrap each muffin individually in plastic wrap to prevent freezer burn.
- Place wrapped muffins in a freezer-safe bag or container.
- Freeze for up to 3 months. Label with the date for easy tracking.
Reheating
- To reheat from frozen, remove the plastic wrap and microwave on high for 30-60 seconds until warm.
- For refrigerated muffins, microwave for about 20-30 seconds.
- Alternatively, you can warm them in a preheated oven at 350°F (175°C) for about 10 minutes.
FAQs
Here are some common questions you might have about making Chocolate Pumpkin Muffins!
Can I use fresh pumpkin instead of canned pumpkin puree?
Yes, you can! Just make sure to cook and puree fresh pumpkin until it’s smooth. Canned pumpkin is convenient and saves time, but fresh adds a lovely flavor too!
How do I know when my Chocolate Pumpkin Muffins are done baking?
Insert a toothpick into the center of a muffin; it should come out clean or with just a few crumbs attached. Keep an eye on them toward the end of the cooking time.
Can I make these Chocolate Pumpkin Muffins gluten-free?
Absolutely! Substitute the all-purpose flour with a gluten-free flour blend that measures cup-for-cup. The muffins will still be delicious!
Final Thoughts
I hope you enjoy making these delightful Chocolate Pumpkin Muffins as much as I do! They combine rich flavors and comforting warmth, making them perfect for any fall occasion. Whether you’re sharing them with friends or savoring them alone with a cozy drink, they’re sure to bring joy. Happy baking!
CRITICAL: SEO Information Block
(YOU MUST include the entire SEO block below, precisely as formatted. Fill in the bracketed placeholders with ACTUAL content.)
Chocolate Pumpkin Muffins
If you’re in search of a comforting treat that perfectly embodies the flavors of fall, look no further than these Chocolate Pumpkin Muffins. This delightful recipe combines the rich taste of chocolate with the warm essence of pumpkin, creating a mouthwatering experience that will please both kids and adults alike. Ideal for busy weeknights or special family gatherings, these muffins are quick to prepare and easy to store for later enjoyment. With each bite, you’ll savor a moist texture and unique flavor profile that makes them a standout choice among traditional muffins. Serve them at brunch, as an afternoon snack, or even for dessert – they’re sure to become a beloved favorite in your home.
- Prep Time: 15 minutes
- Cook Time: 25 minutes
- Total Time: 40 minutes
- Yield: Makes approximately 12 servings 1x
- Category: Dessert
- Method: Baking
- Cuisine: American
Ingredients
Scale
- 1.5 cups canned pumpkin puree
- 113 grams unsalted butter
- 0.5 cups light brown sugar
- 0.5 cups granulated sugar
- 0.5 cups sour cream
- 2 large eggs
- 1.75 cups unbleached all-purpose flour
- 0.5 cups unsweetened cocoa powder
- 1 tsp baking soda
- 0.5 tsp baking powder
- 0.5 tsp fine sea salt
- 1 cup semi-sweet mini chocolate chips
Instructions
- Preheat oven to 350°F (175°C) and grease or line a muffin tin.
- In a large bowl, cream together unsalted butter with light brown and granulated sugars until fluffy.
- Mix in canned pumpkin puree, sour cream, eggs, and vanilla until well combined.
- In a separate bowl, whisk together flour, cocoa powder, baking soda, baking powder, and sea salt.
- Gradually add dry ingredients to the wet mixture and stir gently until just combined.
- Fold in mini chocolate chips.
- Fill muffin tins about two-thirds full and bake for 25 minutes or until a toothpick comes out clean.
- Cool in the pan for five minutes before transferring to a wire rack.
Nutrition
- Serving Size: 1 muffin (70g)
- Calories: 210
- Sugar: 17g
- Sodium: 200mg
- Fat: 10g
- Saturated Fat: 6g
- Unsaturated Fat: 3g
- Trans Fat: 0g
- Carbohydrates: 28g
- Fiber: 2g
- Protein: 3g
- Cholesterol: 35mg
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.fullrecipeshub.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”e3af28e2cd”,”postId”:1972};
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