If you’re looking for a dinner that’s fresh, flavorful, and oh-so-satisfying, you’re in for a treat with this Grilled Chicken and Cilantro-Lime Rice Bowl! This dish has become a favorite in my home because it blends zesty flavors with comforting textures. Perfect for those busy weeknights or casual family gatherings, it’s a delightful way to bring everyone together for a nourishing meal.

The best part? You can whip this up in just 45 minutes! Whether you’re cooking for yourself or sharing with loved ones, this bowl is sure to brighten your evening.


Why You’ll Love This Recipe
- Quick and Easy: With just 15 minutes of prep time, you can have a delicious meal ready in no time!
- Flavorful: The combination of grilled chicken infused with lime and spices pairs wonderfully with the cilantro-lime rice.
- Customizable: Make it your own by adding your favorite toppings or adjusting the spice levels.
- Healthy Ingredients: Packed with wholesome ingredients like fresh cilantro and avocado, it’s as nutritious as it is tasty.
- Great Leftovers: This bowl stays fresh in the fridge and makes for an easy lunch the next day!
Ingredients You’ll Need
These ingredients are simple and wholesome, making it easy to create a delicious meal. Gather these items before you start cooking!
For the Chicken Marinade
- 1½ lbs boneless (skinless chicken thighs)
- 2 tbsp olive oil or avocado oil
- 2 tbsp fresh lime juice
- 1 tsp garlic powder
- 1 tsp onion powder
- 1 tsp smoked paprika
- ½ tsp ground cumin
- 1 tsp salt
- Optional: ½ tsp chili powder or cayenne
For the Cilantro-Lime Rice
- 1 cup long-grain white rice or jasmine rice (rinsed)
- 2 cups water
- ¼ cup fresh cilantro (chopped)
- 2 tbsp fresh lime juice
- 1 tsp lime zest
- 1 tbsp olive oil or avocado oil (optional)
- ½ tsp salt
Toppings
- 1 avocado (diced)
- ½ cup quick pickled onions
- 1 jalapeño (sliced)
- 1 cup shredded lettuce
- Salsa or hot sauce (optional)
- Lime wedges for serving
Variations
This recipe is wonderfully flexible! Feel free to play around with the ingredients based on your preferences. Here are some fun ideas:
- Swap the protein: If chicken isn’t your thing, try using grilled shrimp or marinated tofu for a different spin!
- Change the grain: Substitute brown rice or quinoa for a nuttier flavor and extra fiber.
- Add more veggies: Toss in some grilled bell peppers or corn for added sweetness and color.
- Make it spicy: Include diced jalapeños or a drizzle of hot sauce to kick up the heat!
How to Make Grilled Chicken and Cilantro-Lime Rice Bowl
Step 1: Prep Your Ingredients
Start by rinsing your rice until the water runs mostly clear. This step is key because it removes excess starch, helping your rice turn out fluffy rather than sticky. While you’re at it, chop your cilantro and juice those limes.
Step 2: Marinate the Chicken
In a bowl, toss together your chicken thighs with olive oil, lime juice, garlic powder, onion powder, smoked paprika, cumin, salt, and optional chili powder. Letting the chicken marinate while you cook the rice allows all those flavors to soak in deeply—trust me; it’s worth it!
Step 3: Cook the Rice
In a saucepan over medium heat, bring water along with olive oil or avocado oil and salt to a boil. Once boiling, add your rinsed rice. Cooking uncovered for 2–3 minutes allows steam to escape; then cover it up and let it simmer on low for about 5–7 minutes until fluffy. Don’t forget to let it rest afterward—this helps achieve that perfect texture!
Step 4: Grill the Chicken
Heat up your grill or grill pan over medium-high heat. Grill each chicken thigh for about 5–6 minutes per side until those beautiful grill marks appear and its internal temperature reaches 165°F. Letting them rest before slicing keeps all those juicy flavors locked inside.
Step 5: Assemble Your Bowl
Spoon generous amounts of cilantro-lime rice into bowls as your base. Top with sliced grilled chicken along with diced avocado, quick pickled onions, jalapeños, shredded lettuce—all those colorful toppings make this dish pop! And if you love salsa or hot sauce, feel free to add that too.
Step 6: Serve It Up!
Finish off your masterpiece with lime wedges on the side for an extra zing whenever you need it. Enjoy every bite of this vibrant Grilled Chicken and Cilantro-Lime Rice Bowl—it’s sure to become a family favorite!
Pro Tips for Making Grilled Chicken and Cilantro-Lime Rice Bowl
Cooking this vibrant dish is not just about following the recipe; it’s about making it your own! Here are some tips to elevate your grilled chicken and cilantro-lime rice bowl experience.
Marinate Longer: If time allows, marinate the chicken for at least 30 minutes or even overnight. This enhances the flavors and tenderness of the chicken, making each bite more delicious.
Use a Meat Thermometer: To ensure perfectly cooked chicken, use a meat thermometer to check that it reaches an internal temperature of 165°F. This prevents overcooking and keeps the chicken juicy.
Customize Your Heat: Adjust the spice level by varying the amount of chili powder or cayenne. This way, you can create a dish that suits your taste buds, whether you prefer mild or spicy.
Add Seasonal Vegetables: Feel free to toss in seasonal veggies like bell peppers or zucchini on the grill. They add color, flavor, and extra nutrients to your meal!
Experiment with Toppings: Don’t hesitate to get creative with toppings! Try adding black beans for protein or corn for sweetness—this makes each bowl unique and delightful.
How to Serve Grilled Chicken and Cilantro-Lime Rice Bowl
Presenting your grilled chicken and cilantro-lime rice bowl can be just as enjoyable as making it! With a little thought into how you serve it, you’ll impress family and friends alike.
Garnishes
- Chopped Green Onions: These add a fresh crunch and vibrant color to your dish.
- Cilantro Leaves: A few extra sprigs of cilantro on top enhance both flavor and presentation.
- Lime Slices: Place lime slices around the bowl for an inviting look while giving guests easy access to squeeze more lime juice if desired.
Side Dishes
- Grilled Corn on the Cob: Sweet, smoky grilled corn adds a wonderful contrast to the savory chicken bowl. It’s simple to make alongside your main dish!
- Black Bean Salad: A refreshing mix of black beans, corn, diced tomatoes, and avocado creates a hearty side that complements the flavors of your rice bowl perfectly.
- Roasted Vegetables: Toss seasonal vegetables in olive oil and seasoning before roasting them until tender. They add a nutritious element while enhancing the meal’s overall appeal.
- Watermelon Feta Salad: This sweet-and-salty salad with juicy watermelon chunks contrasted with creamy feta (or dairy-free alternatives) offers a refreshing side that balances out the richness of the chicken.
Enjoy crafting this delightful meal, filled with fresh ingredients and bursting with flavor! Whether you’re serving it up for dinner or packing it for lunch, this grilled chicken and cilantro-lime rice bowl is sure to become a favorite in your culinary repertoire.
Make Ahead and Storage
This Grilled Chicken and Cilantro-Lime Rice Bowl is perfect for meal prep, allowing you to enjoy delicious, fresh meals throughout the week. You can prepare components in advance, making it easy to assemble a wholesome bowl whenever you’re hungry.
Storing Leftovers
- Store leftover grilled chicken and cilantro-lime rice in airtight containers in the refrigerator.
- Enjoy stored leftovers within 3-4 days for the best flavor and quality.
- Keep toppings like avocado and pickled onions separate until serving to maintain freshness.
Freezing
- To freeze, place cooked chicken and rice in freezer-safe containers or bags.
- Remove as much air as possible before sealing to prevent freezer burn.
- Use within 2-3 months for optimal taste; label containers with the date.
Reheating
- Thaw frozen chicken and rice overnight in the refrigerator before reheating.
- Reheat in the microwave or on the stovetop until heated through (165°F).
- Add a splash of water or broth while reheating to keep the rice moist.
FAQs
Here are some common questions about making this delicious dish!
Can I use chicken breasts instead of thighs for the Grilled Chicken and Cilantro-Lime Rice Bowl?
Absolutely! Chicken breasts work perfectly in this recipe. Just be mindful that they may cook faster than thighs, so adjust your grilling time accordingly.
How can I customize my Grilled Chicken and Cilantro-Lime Rice Bowl?
Feel free to add your favorite toppings such as corn, black beans, or different vegetables. You can also swap out cilantro for parsley if you prefer a different herb.
Can I make this recipe without a grill?
Yes! You can cook the chicken in a grill pan on the stove or even bake it in the oven at 400°F for about 20-25 minutes. Just make sure it reaches an internal temperature of 165°F.
Final Thoughts
I hope you enjoy crafting this vibrant Grilled Chicken and Cilantro-Lime Rice Bowl as much as I do! It’s not just a meal; it’s a celebration of fresh flavors that come together beautifully. Whether it’s for dinner tonight or meal prep for the week, this recipe offers something special for everyone. Happy cooking, and I can’t wait for you to try it!
American Main Course
nnn
Why You’ll Love This Recipe
This Grilled Chicken and Cilantro-Lime Rice Bowl is a delightful blend of flavors and textures, making it a perfect meal for any day of the week. The juicy grilled chicken, paired with zesty cilantro-lime rice, offers a refreshing taste that’s both satisfying and healthy. Plus, it’s quick to prepare, making it ideal for busy weeknights or a leisurely weekend lunch!
Ingredients You’ll Need
- For the Chicken:
- 1½ lbs boneless (skinless chicken thighs)
- 2 tbsp olive oil or avocado oil
- 2 tbsp fresh lime juice
- 1 tsp garlic powder
- 1 tsp onion powder
- 1 tsp smoked paprika
- ½ tsp ground cumin
- 1 tsp salt
Optional: ½ tsp chili powder or cayenne
For the Rice:
- 1 cup long-grain white rice or jasmine rice (rinsed)
- 2 cups water
- ¼ cup fresh cilantro (chopped)
- 2 tbsp fresh lime juice
- 1 tsp lime zest
- 1 tbsp olive oil or avocado oil (optional)
½ tsp salt
Toppings:
- 1 avocado (diced)
- ½ cup quick pickled onions
- 1 jalapeño (sliced)
- 1 cup shredded lettuce
- Salsa or hot sauce (optional)
- Lime wedges for serving
Variations
- Protein Swap: Substitute the chicken with shrimp, tofu, or beef for a different protein option.
- Spice It Up: Add more chili powder or a dash of hot sauce to kick up the heat.
- Vegetable Boost: Toss in grilled vegetables like bell peppers or zucchini for added nutrition and flavor.
How to Make
- Prep: Rinse the rice until the water runs mostly clear, chop the cilantro, and juice the limes.
- Marinate Chicken: In a bowl, toss the chicken thighs with olive oil, lime juice, garlic powder, onion powder, smoked paprika, cumin, salt, and optional chili powder; let marinate while the rice cooks.
- Cook Rice: In a saucepan, bring water, olive oil or avocado oil, and salt to a boil over medium heat; add the rinsed rice and let it cook until the water starts to evaporate and small bubbles form.
- Simmer Rice: Reduce heat to low and leave the rice uncovered for 2–3 minutes; then cover and cook on low for 5–7 minutes until fluffy; remove from heat and let sit covered for a few minutes.
- Fluff Rice: Fluff the rice with a fork, then stir in chopped cilantro, fresh lime juice, and lime zest.
- Grill Chicken: Heat a grill or grill pan over medium-high heat. Grill chicken thighs for about 5–6 minutes per side until grill marks appear and the internal temperature reaches 165°F; let rest before slicing.
- Assemble Bowls: Spoon cilantro-lime rice into bowls, top with sliced grilled chicken, and add diced avocado, pickled onions, jalapeños, shredded lettuce, and salsa if using.
- Serve: Serve with lime wedges on the side.
Pro Tips
- Marinate Longer: For deeper flavor, marinate the chicken for at least 30 minutes or up to overnight in the fridge.
- Rice Cooking: Ensure you don’t lift the lid while the rice is cooking; this helps it steam properly.
- Temperature Check: Use a meat thermometer to ensure the chicken is perfectly cooked and juicy.
How to Serve
Serve the rice bowl warm, topped with the grilled chicken and your choice of toppings. A drizzle of salsa or hot sauce adds a nice kick, while lime wedges provide an extra burst of freshness.
Make Ahead and Storage
- Make Ahead: You can marinate the chicken and prepare the rice a day in advance. Store them separately in the fridge.
- Storage: Leftovers can be stored in an airtight container in the fridge for up to 3 days. Reheat the chicken and rice together for a quick meal.
FAQs
- Can I use brown rice? Yes, but cooking time will be longer; follow the package instructions for best results.
- Is this recipe gluten-free? Yes, all ingredients are naturally gluten-free, but check labels to be sure.
- Can I freeze leftovers? Yes, you can freeze the cooked chicken and rice in separate containers for up to 3 months.
Final Thoughts
This Grilled Chicken and Cilantro-Lime Rice Bowl is not only delicious but also versatile and easy to make. Whether you’re feeding a crowd or enjoying a meal solo, it’s a fantastic choice that brings a burst of flavor to your table. Enjoy every bite!
Grilled Chicken and Cilantro-Lime Rice Bowl
Grilled Chicken and Cilantro-Lime Rice Bowl is a fresh, vibrant dish that’s perfect for busy weeknights or family gatherings. This delightful bowl combines juicy, grilled chicken marinated in zesty lime and spices with fluffy cilantro-lime rice, resulting in a meal that is both satisfying and nutritious. Topped with creamy avocado, crunchy pickled onions, and fresh jalapeños, this dish bursts with flavor in every bite. Whether you’re cooking for yourself or sharing with loved ones, this quick and easy recipe can be prepared in just 45 minutes. Enjoy the harmony of flavors as you gather around the table for a nourishing meal that everyone will love.
- Prep Time: 15 minutes
- Cook Time: 30 minutes
- Total Time: 45 minutes
- Yield: Serves 4
- Category: Main
- Method: Grilling
- Cuisine: American
Ingredients
Scale
- 1½ lbs boneless (skinless chicken thighs)
- 2 tbsp olive oil or avocado oil
- 2 tbsp fresh lime juice
- 1 tsp garlic powder
- 1 tsp onion powder
- 1 tsp smoked paprika
- ½ tsp ground cumin
- 1 tsp salt
- Optional: ½ tsp chili powder or cayenne
- 1 cup long-grain white rice or jasmine rice (rinsed)
- 2 cups water
- ¼ cup fresh cilantro (chopped)
- 2 tbsp fresh lime juice
- 1 tsp lime zest
- 1 tbsp olive oil or avocado oil (optional)
- ½ tsp salt
- 1 avocado (diced)
- ½ cup quick pickled onions
- 1 jalapeño (sliced)
- 1 cup shredded lettuce
- Salsa or hot sauce (optional)
- Lime wedges for serving
Instructions
- Rinse the rice until the water runs mostly clear, chop the cilantro, and juice the limes.
- In a bowl, toss the chicken thighs with olive oil, lime juice, garlic powder, onion powder, smoked paprika, cumin, salt, and optional chili powder; let marinate while the rice cooks.
- In a saucepan over medium heat, bring water along with olive oil or avocado oil and salt to a boil; add rinsed rice and let it cook uncovered for about 2–3 minutes.
- Cover and reduce heat to low; simmer for about 5–7 minutes until fluffy; let rest covered.
- Fluff the rice with a fork, then stir in chopped cilantro, fresh lime juice, and lime zest.
- Heat a grill or grill pan over medium-high heat. Grill chicken thighs for about 5–6 minutes per side until grill marks appear and the internal temperature reaches 165°F; let rest before slicing.
- Spoon cilantro-lime rice into bowls, top with sliced grilled chicken, and add diced avocado, quick pickled onions, jalapeños, shredded lettuce, and salsa if using.
- Serve with lime wedges on the side.
Nutrition
- Serving Size: 1 bowl (approx. 400g)
- Calories: 550
- Sugar: 2g
- Sodium: 800mg
- Fat: 20g
- Saturated Fat: 3g
- Unsaturated Fat: 15g
- Trans Fat: 0g
- Carbohydrates: 54g
- Fiber: 4g
- Protein: 38g
- Cholesterol: 120mg
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/simplyhomecooking.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”b72a65a5a7″,”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 );
});



Leave a Comment