• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

Quick Daily Dish

  • Home
  • Recipe Index
  • Budget
  • Cheat Meal
  • Healthy
  • Keto
  • Quick
  • Vegan
  • About
  • Contact

Quick Daily Dish

  • Home
  • Recipe Index
  • Budget
  • Cheat Meal
  • Healthy
  • Keto
  • Quick
  • Vegan
  • About
  • Contact

Taste Air Fryer Rice Paper Noodle Rolls: A Crispy, Healthy Appetizer You’ll Love

Jump to Recipe·Print Recipe

If you’re looking for a delicious and healthy appetizer, then you’ve come to the right place! These crispy air fryer rice paper noodle rolls are not only packed with vibrant veggies and tofu (or shrimp), but they also come together in no time. They make a fantastic snack for busy weeknights, family gatherings, or even a cozy movie night at home. I promise you, once you taste these delightful rolls, they’ll become a staple in your kitchen.

Taste Air Fryer Rice Paper Noodle Rolls: A Crispy, Healthy Appetizer You’ll Love image 2

What makes this recipe truly special is its versatility. You can customize it with your favorite fillings, and it’s gluten-free too! Plus, the air fryer gives them that perfect crispiness without needing tons of oil. Trust me, you’ll love making (and eating!) these Taste Air Fryer Rice Paper Noodle Rolls: A Crispy, Healthy Appetizer You’ll Love.

Taste Air Fryer Rice Paper Noodle Rolls: A Crispy, Healthy Appetizer You’ll Love image 3
Taste Air Fryer Rice Paper Noodle Rolls: A Crispy, Healthy Appetizer You’ll Love image 4

Why You’ll Love This Recipe

  • Quick and easy: With just 30 minutes from start to finish, these rolls are perfect for when you’re short on time.
  • Healthy and wholesome: Packed with fresh veggies and tofu or shrimp, they’re a nutritious choice that doesn’t skimp on flavor.
  • Family-friendly: Everyone can join in on the fun of rolling their own noodles—it’s a great way to get kids involved in cooking!
  • Customizable filling options: Swap out ingredients based on what you have on hand or your personal preferences for endless variations.
  • Perfect for meal prep: Make a batch ahead of time and enjoy them throughout the week as a quick snack or appetizer.

Ingredients You’ll Need

These are simple, wholesome ingredients that you probably have in your pantry already. Each component brings its own flavor and texture to the rolls, making them utterly delicious!

  • 8 rice paper sheets
  • 1 cup cooked vermicelli noodles
  • 1/2 cup shredded carrots
  • 1 cup finely chopped cabbage
  • 1 block of firm tofu (or 8 cooked shrimp)
  • 2 tablespoons green onion, sliced
  • 2 teaspoons grated ginger
  • 1 tablespoon minced garlic
  • 1 tablespoon soy sauce
  • 1 tablespoon Shaoxing apple vinegar (or rice vinegar)
  • 1 tablespoon sesame oil
  • 1/2 teaspoon sugar
  • Oil spray for air frying
  • Optional dipping sauce: sweet chili, peanut, or soy-ginger

Variations

The beauty of these rice paper noodle rolls is how flexible they are! You can easily adapt them to suit your taste buds or dietary needs.

  • Swap the protein: Try using tempeh or chickpeas instead of tofu for a different protein boost.
  • Add more crunch: Incorporate sliced bell peppers or cucumbers for extra freshness and texture.
  • Make it spicy: Add some chili flakes or sriracha into the filling for those who enjoy a little heat!
  • Go vegan: Simply stick with tofu and omit any seafood for a fully plant-based option.

How to Make Taste Air Fryer Rice Paper Noodle Rolls: A Crispy, Healthy Appetizer You’ll Love

Step 1: Soak the Rice Paper

Start by soaking one rice paper sheet in warm water for about 10–15 seconds until it’s soft and pliable. This step is crucial because it makes the rice paper easier to roll without tearing.

Step 2: Prepare Your Rolling Station

Transfer the softened sheet onto a damp surface like a wooden board or clean towel. Having everything ready will help you assemble each roll quickly!

Step 3: Fill It Up

In the center of the rice paper sheet, add a small layer of cooked vermicelli noodles followed by shredded veggies and either diced tofu or shrimp. Don’t overfill; you want to be able to roll it up tightly without spilling!

Step 4: Roll It Up

Fold in both sides of the rice paper and then roll from the bottom up like you would with a burrito. The key here is to keep it snug so everything stays inside during cooking.

Step 5: Prepare for Air Frying

Lightly brush each roll with sesame oil or use an oil spray. This helps achieve that golden brown color while keeping them crispy without too much added fat.

Step 6: Preheat Your Air Fryer

Preheat your air fryer to 375°F (190°C) for about 2–3 minutes. This ensures that your rolls will start cooking evenly as soon as they go in.

Step 7: Arrange Them in the Basket

Place your rolls seam-side down into the air fryer basket in a single layer. Avoid overcrowding so that they cook evenly and get nice and crispy all around.

Step 8: Air Fry Until Golden

Air fry them for about 8–10 minutes, flipping halfway through until they’re golden brown and crispy on both sides. Keep an eye on them towards the end—everyone’s air fryer can be slightly different!

Step 9: Serve Warm

Serve your crispy rice paper noodle rolls hot with your favorite dipping sauce like sweet chili, peanut sauce, or soy garlic. Enjoy every bite!

Pro Tips for Making Taste Air Fryer Rice Paper Noodle Rolls: A Crispy, Healthy Appetizer You’ll Love

Making these rice paper noodle rolls can be a fun and rewarding experience! Here are some pro tips to ensure you achieve the best results:

  • Use warm water for soaking: Soaking rice paper sheets in warm water makes them more pliable and easier to handle, preventing tearing during the rolling process.

  • Don’t overfill your rolls: Adding too much filling can make it difficult to roll them tightly and may cause them to burst in the air fryer. Aim for a modest amount of filling for perfect rolls.

  • Preheat your air fryer: Preheating your air fryer ensures that the rolls cook evenly and become crispy all around, giving you that delightful crunch.

  • Experiment with dipping sauces: While sweet chili, peanut, or soy-ginger sauces are great options, don’t hesitate to try different combinations or even make your own sauce to add a personal touch.

  • Store leftovers properly: If you have any leftover rolls, store them in an airtight container in the fridge. Reheat them briefly in the air fryer for a quick snack later on!

How to Serve Taste Air Fryer Rice Paper Noodle Rolls: A Crispy, Healthy Appetizer You’ll Love

Presenting your rice paper noodle rolls can enhance their appeal and encourage everyone to dig in. Here’s how you can serve them up beautifully:

Garnishes

  • Fresh herbs: Sprinkle chopped cilantro or basil on top for a pop of color and added freshness.
  • Sesame seeds: Toasted sesame seeds add a nutty flavor and crunchy texture that complement the rolls perfectly.

Side Dishes

  • Asian slaw: A crunchy slaw made with cabbage, carrots, and a tangy dressing pairs well with the rolls and adds extra veggies to your meal.
  • Miso soup: This warm soup is comforting and balances out the crispy texture of the noodle rolls while providing umami flavor.
  • Steamed edamame: Lightly salted edamame makes for a nutritious side that’s easy to prepare and adds protein.
  • Cucumber salad: A refreshing cucumber salad drizzled with rice vinegar offers a light contrast to the richness of the rolls.

Make Ahead and Storage

These Taste Air Fryer Rice Paper Noodle Rolls are fantastic for meal prep! You can make them ahead of time, store them properly, and enjoy a healthy snack or appetizer whenever you like.

Storing Leftovers

  • Store any leftover rolls in an airtight container in the refrigerator.
  • They will stay fresh for up to 3 days.
  • Place parchment paper between layers to prevent them from sticking together.

Freezing

  • To freeze, place the cooked rolls on a baking sheet in a single layer until solid.
  • Transfer them to a freezer-safe bag or container and label it with the date.
  • They can be frozen for up to 2 months.

Reheating

  • To reheat, preheat your air fryer to 375°F (190°C).
  • Place the frozen rolls in the air fryer basket and heat for about 10-12 minutes until crispy.
  • For refrigerated rolls, reheat them for about 5-7 minutes.

FAQs

Here are some common questions you might have about this recipe!

Can I use different fillings for Taste Air Fryer Rice Paper Noodle Rolls?

Absolutely! Feel free to customize your filling with your favorite vegetables, proteins, or even herbs. It’s all about what you enjoy!

How do I make sure my Taste Air Fryer Rice Paper Noodle Rolls are crispy?

To achieve that perfect crispiness, make sure to lightly brush or spray the rolls with oil before air frying. Also, avoid overcrowding the air fryer basket.

Can I prepare Taste Air Fryer Rice Paper Noodle Rolls ahead of time?

Yes! You can prepare these rolls in advance and store them in the fridge or freezer. Just follow the storage tips above for optimal freshness.

Final Thoughts

I hope you find joy in making these delightful Taste Air Fryer Rice Paper Noodle Rolls! They’re not just a treat for your taste buds but also a fun way to get creative in the kitchen. Enjoy every crispy bite and feel free to share your variations — happy cooking!

Print

clock clock iconcutlery cutlery iconflag flag iconfolder folder iconinstagram instagram iconpinterest pinterest iconfacebook facebook iconprint print iconsquares squares iconheart heart iconheart solid heart solid icon

Taste Air Fryer Rice Paper Noodle Rolls: A Crispy, Healthy Appetizer You’ll Love

5 Stars 4 Stars 3 Stars 2 Stars 1 Star

No reviews

Print Recipe

If you’re in search of a delicious and healthy appetizer, look no further than these crispy air fryer rice paper noodle rolls! Bursting with vibrant vegetables and your choice of tofu, these delightful rolls come together in just 30 minutes, making them perfect for busy weeknights or family gatherings. With their gluten-free nature and customizable fillings, they are sure to become a staple in your kitchen. The air fryer provides that perfect crispiness without the excess oil, ensuring you can enjoy every bite guilt-free. Whether served as snacks or appetizers, these rice paper noodle rolls will impress everyone at the table.

  • Total Time:

    25 minutes
  • Yield:

    Serves 4 (8 rolls) 1x

Ingredients


Scale
  • 8 rice paper sheets
  • 1 cup cooked vermicelli noodles
  • 1/2 cup shredded carrots
  • 1 cup finely chopped cabbage
  • 1 block of firm tofu
  • 2 tablespoons green onion, sliced
  • 2 teaspoons grated ginger
  • 1 tablespoon minced garlic
  • 1 tablespoon soy sauce
  • 1 tablespoon apple vinegar
  • 1 tablespoon sesame oil
  • 1/2 teaspoon sugar
  • Oil spray for air frying
  • Optional dipping sauce: sweet chili, peanut, or soy-ginger


Instructions

  1. Soak rice paper sheets in warm water for 10–15 seconds until soft.
  2. Transfer softened sheets to a damp surface.
  3. In the center of each sheet, place a layer of vermicelli noodles, followed by veggies and tofu.
  4. Roll tightly from the bottom up, folding in the sides.
  5. Brush each roll with sesame oil or use an oil spray.
  6. Preheat air fryer to 375°F (190°C).
  7. Arrange rolls seam-side down in the basket without overcrowding.
  8. Air fry for 8–10 minutes until golden brown and crispy.
  9. Serve warm with your choice of dipping sauce.
  • Author: Nova
  • Prep Time: 15 minutes
  • Cook Time: 10 minutes
  • Category: Appetizer
  • Method: Air Frying
  • Cuisine: Asian

Nutrition

  • Serving Size: 2 rolls (150g)
  • Calories: 220
  • Sugar: 3g
  • Sodium: 450mg
  • Fat: 7g
  • Saturated Fat: 1g
  • Unsaturated Fat: 5g
  • Trans Fat: 0g
  • Carbohydrates: 33g
  • Fiber: 2g
  • Protein: 8g
  • Cholesterol: 0mg

Did you make this recipe?

Share a photo and tag us — we can’t wait to see what you’ve made!

window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.quickdailydish.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”ee983ce99b”,”postId”:3619};
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 );
});

REMEMBER

WANT TO SAVE THIS RECIPE? CLICK BELOW AND PIN IT

PIN
« Previous Post
Best Buffalo Chicken Cheesesteak Recipe
Next Post »
Philly Cheesesteak Bowls – Easy Low-Carb Dinner Idea

If you enjoyed this…

Homemade Strawberry Banana Dog Treats

Homemade Strawberry Banana Dog Treats

Maple Brown Sugar Oatmeal Muffins

Maple Brown Sugar Oatmeal Muffins

Apple Cabbage Coleslaw Recipe

Apple Cabbage Coleslaw Recipe

Primary Sidebar

Browse by Diet

HealthyBudgetKetoQuickVeganCheat Meal
Banana Foster Chex Mix

Banana Foster Chex Mix

Steak and Egg Breakfast Burrito

Steak and Egg Breakfast Burrito

20-Minute Chili Lime Flank Steak That Melts Hearts

20-Minute Chili Lime Flank Steak That Melts Hearts

  • Home
  • Recipe Index
  • Budget
  • Cheat Meal
  • Healthy
  • Keto
  • Quick
  • Vegan
  • About
  • Contact

© 2026 Quick Daily Dish · All Rights Reserved · Created by Chef Nova Blake · About · Privacy Policy · Terms & Conditions · Disclaimer · Contact