Player FM - Internet Radio Done Right
Checked 13d ago
Vor sieben Jahren hinzugefügt
Inhalt bereitgestellt von Chef Sandra Lewis, Life At The Table, Chef Sandra Lewis, and Life At The Table. Alle Podcast-Inhalte, einschließlich Episoden, Grafiken und Podcast-Beschreibungen, werden direkt von Chef Sandra Lewis, Life At The Table, Chef Sandra Lewis, and Life At The Table oder seinem Podcast-Plattformpartner hochgeladen und bereitgestellt. Wenn Sie glauben, dass jemand Ihr urheberrechtlich geschütztes Werk ohne Ihre Erlaubnis nutzt, können Sie dem hier beschriebenen Verfahren folgen https://de.player.fm/legal.
Player FM - Podcast-App
Gehen Sie mit der App Player FM offline!
Gehen Sie mit der App Player FM offline!
Podcasts, die es wert sind, gehört zu werden
GESPONSERT
A secret field that summons lightning. A massive spiral that disappears into a salt lake. A celestial observatory carved into a volcano. Meet the wild—and sometimes explosive—world of land art, where artists craft masterpieces with dynamite and bulldozers. In our Season 2 premiere, guest Dylan Thuras, cofounder of Atlas Obscura, takes us off road and into the minds of the artists who literally reshaped parts of the Southwest. These works aren’t meant to be easy to reach—or to explain—but they just might change how you see the world. Land art you’ll visit in this episode: - Double Negative and City by Michael Heizer (Garden Valley, Nevada) - Spiral Jetty by Robert Smithson (Great Salt Lake, Utah) - Sun Tunnels by Nancy Holt (Great Basin Desert, Utah) - Lightning Field by Walter De Maria (Catron County, New Mexico) - Roden Crater by James Turrell (Painted Desert, Arizona) Via Podcast is a production of AAA Mountain West Group.…
A Savory Moment by Life At The Table
Alle als (un)gespielt markieren ...
Manage series 2300596
Inhalt bereitgestellt von Chef Sandra Lewis, Life At The Table, Chef Sandra Lewis, and Life At The Table. Alle Podcast-Inhalte, einschließlich Episoden, Grafiken und Podcast-Beschreibungen, werden direkt von Chef Sandra Lewis, Life At The Table, Chef Sandra Lewis, and Life At The Table oder seinem Podcast-Plattformpartner hochgeladen und bereitgestellt. Wenn Sie glauben, dass jemand Ihr urheberrechtlich geschütztes Werk ohne Ihre Erlaubnis nutzt, können Sie dem hier beschriebenen Verfahren folgen https://de.player.fm/legal.
Tips, fun facts, and recipes from Chef Sandra Lewis of Life At The Table to help you answer the most important question of the day, “What’s for dinner?”.
…
continue reading
235 Episoden
Alle als (un)gespielt markieren ...
Manage series 2300596
Inhalt bereitgestellt von Chef Sandra Lewis, Life At The Table, Chef Sandra Lewis, and Life At The Table. Alle Podcast-Inhalte, einschließlich Episoden, Grafiken und Podcast-Beschreibungen, werden direkt von Chef Sandra Lewis, Life At The Table, Chef Sandra Lewis, and Life At The Table oder seinem Podcast-Plattformpartner hochgeladen und bereitgestellt. Wenn Sie glauben, dass jemand Ihr urheberrechtlich geschütztes Werk ohne Ihre Erlaubnis nutzt, können Sie dem hier beschriebenen Verfahren folgen https://de.player.fm/legal.
Tips, fun facts, and recipes from Chef Sandra Lewis of Life At The Table to help you answer the most important question of the day, “What’s for dinner?”.
…
continue reading
235 Episoden
Alle Folgen
×Turkey is a tale of two meats, dark and white. And when you’re cooking a whole bird, ending up with both equally as juicy and tasty is a challenge. But one that you can handle like a pro in the kitchen with a turkey brine. Why a Brine is Beneficial The challenge is this. Meat is muscle and the color of the meat reflects how those muscles are used . More active muscles use more myoglobin, an oxygen-binding protein. Large, flightless birds, like turkeys, are constantly moving their legs and thighs, which means more myoglobin is in those muscles, hence darker meat. The breast muscle is not as active, so that means less myoglobin and whiter meat. The myoglobin-rich, darker muscles take longer to cook. So cooking the dark meat thoroughly while not overcooking and drying out the white meat is the challenge. To tackle this, consider brining your turkey. Why a Turkey Brine Means Moist Meat For centuries salt has been used as a preservative and a part of food preparation. Brining, or soaking the bird overnight in a salt solution, ensures moist results. The salt solution uncoils the tightly wound meat proteins and the meat absorbs some of the liquid. The end result is a tasty, tender, and juicy turkey. My brine recipe is super simple and with the addition of bay leaves, allspice, and pepper it’s an aromatic precursor of what’s to come. Give it a try this holiday season. In addition, here are some tips on how to brine your Thanksgiving turkey. Tips on How to Brine Your Thanksgiving Turkey 1. Most brines require heating to dissolve the salt. Make sure the brine is completely cool before immersing your turkey. 2. Place the turkey breast side down in the brine solution. The white meat is the most likely to dry out. You want to make sure this part of the turkey is submerged securely in the brine. 3. You’ll need a container large enough to hold the brine and the turkey. I use double layers of unscented trash bags for this purpose. Place the turkey in the trash bags, pour in the brine, and then placed the trash bagged turkey into a large bowl or other container for added security. 4. Refrigerate the turkey during brining. When brining is complete, pull the bird out, dry the surface and prepare it for oven cooking. That’s it! While a moist bird is the centerpiece of this holiday’s meal the best part of Thanksgiving is the shared time together at the table. Looking for some sides to go with that beautiful turkey? Try these: Cornbread Dressing Sweet and Sour Green Beans Garlic and Sage Gravy Print How to Brine Your Thanksgiving Turkey Print Recipe Pin Recipe const share_pin_buttons = document.getElementsByClassName( 'share-pin button' ); if ( share_pin_buttons ) { for ( let share_key = 0; share_key < share_pin_buttons.length; share_key++ ) { share_pin_buttons[share_key].addEventListener( 'click', (e) => { e.stopPropagation(); window.open(e.target.dataset.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=500'); return false; } ); } } Use this turkey brine recipe for the best bird you’ve ever cooked and for a sensory experience that begins long before the meal. Author: Chef Sandra Lewis Prep Time: 30 minutes Cook Time: 18-20 hours Total Time: 0 hours Yield: 8 quarts of brining liquid Ingredients Units USM 8 quarts of cold water 2 cups kosher salt 8 large fresh or dried bay leaves 2 tablespoons allspice 2 tablespoons black peppercorns 1 – 16 -17 lb turkey, giblets and neck removed Cook Mode Prevent your screen from going dark Instructions Line an extra-large pot or bowl with two plastic bags large enough for your turkey and the brining liquid. Or use a bucket or other large container that will fit in your refrigerator. Mix together 4 quarts of water, the salt, bay leaves, allspice, and peppercorns in a large stockpot. Heat the salt mixture over medium-high heat until the salt dissolves. Remove from the heat and add the remaining 4 quarts of water to the brine. Place your turkey inside the plastic bags (or bucket) and add the brine. If using plastic bags, press out as much air as possible from the bags and tie them up tight. Refrigerate the turkey in its brine for 18-20 hours. Remove the bird from the brine. Pat it dry and prepare the turkey using your favorite recipe. Did you make this recipe? Tag @lifeatthetable on Instagram and hashtag it #whatsfordinner window.trCommon={"minRating":6,"ajaxurl":"https:\/\/lifeatthetable.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":175412314}; 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+d2<=D){d1+=d2;n1+=n2;d2=D+1}else if(d1>d2){d2=D+1;}else {d1=D+1;}break}else if(x<m){n2=n1+n2;d2=d1+d2}else{n1=n1+n2;d1=d1+d2}}}if(d1>D){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-A<5e-8){break;}B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){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-convert-button', buttonActiveClass = 'tasty-recipes-convert-button-active', buttons = document.querySelectorAll('.tasty-recipes-convert-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 unitType = button.dataset.unitType; var dataset = 'nf' + unitType.charAt(0).toUpperCase() + unitType.slice(1); var convertables = recipe.querySelectorAll('span[data-nf-original]'); convertables.forEach(function(convertable){ if (typeof convertable.dataset.amountOriginalType === 'undefined' && 'usc' === convertable.dataset.nfOriginal) { if (-1 !== convertable.innerText.indexOf('/')) { convertable.dataset.amountOriginalType = 'frac'; } if (-1 !== convertable.innerText.indexOf('.')) { convertable.dataset.amountOriginalType = 'number'; } Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) { if (-1 !== convertable.innerText.indexOf(vulgar)) { convertable.dataset.amountOriginalType = 'vulgar'; } }); } convertable.innerText = convertable.dataset[dataset]; if (typeof convertable.dataset.unit !== 'undefined') { convertable.dataset.unit = convertable.dataset[dataset + 'Unit']; } if (typeof convertable.dataset.amount !== 'undefined') { convertable.dataset.amount = convertable.dataset[dataset]; if ('metric' === unitType) { convertable.dataset.amountShouldRound = parseInt(convertable.dataset.amount) >= 10 ? 'integer' : 'number'; } else if (typeof convertable.dataset.amountOriginalType !== 'undefined') { convertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType; } else { convertable.dataset.amountShouldRound = false; } convertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable); } if (convertable.classList.contains('nutrifox-unit')) { if ('gram' === convertable.dataset[dataset]) { convertable.innerText = 'grams'; } } }); document.querySelectorAll('.tasty-recipes-scale-button-active').forEach(function(scaleButton){ scaleButton.click(); }); window.tastyRecipesUpdatePrintLink(); }); }); }()); (function(){ document.querySelectorAll('[data-tr-ingredient-checkbox]').forEach(function(el) { var input = el.querySelector('.tr-ingredient-checkbox-container input[type="checkbox"]'); if ( ! input ) { return; } if (input.checked) { el.dataset.trIngredientCheckbox = 'checked'; } el.addEventListener('click', function(event) { if ( 'A' === event.target.nodeName || 'INPUT' === event.target.nodeName || 'LABEL' === event.target.nodeName ) { return; } input.click(); }); input.addEventListener('change', function() { el.dataset.trIngredientCheckbox = input.checked ? 'checked' : ''; }); }); }()); 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 <= 0 ) { return; } for ( const rating of ratings ) { rating.addEventListener( 'click', event => { 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 < this.minRating ) { commentTextarea.setAttribute( 'required', '' ); return; } commentTextarea.removeAttribute( 'required' ); }, maybeSendRating( rating, element ) { if ( this.savingRating === rating ) { return; } this.savingRating = rating; window.TastyRecipes.staticTooltip.init( element ); const recipeCardElement = element.closest( '.tasty-recipes' ); if ( ! recipeCardElement ) { window.TastyRecipes.staticTooltip.destroy(); return; } window.TastyRecipes.ajax.sendPostRequest( window.trCommon.ajaxurl, { action: 'tasty_recipes_save_rating', rating, nonce: window.trCommon.ratingNonce, post_id: window.trCommon.postId, recipe_id: recipeCardElement.dataset.trId, }, ( response ) => { 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 ); }); The post How to Brine Your Thanksgiving Turkey appeared first on Life At The Table .…
Grilled Branzino: A Dance of Mediterranean Flavors Imagine a balmy evening with the gentle roll of sea waves in the background and the air is filled with the enticing aroma of fresh fish grilling over a hot flame. You may not live seaside but you’ll feel like you’re there with this recipe – Grilled Branzino. What’s branzino you ask? It’s a Mediterranean seabass that’s about to take your taste buds on a vibrant journey. It’s a recipe so delightful that you’ll want to cook and share it with every one you know. The Star of the Show: Branzino Branzino, also known as European seabass, is a gem from the deep blue. This fish has been swimming through the culinary traditions of the Mediterranean for centuries. And this dish embodies the simplicity and elegance of coastal cuisine. Branzino’s flesh is white, delicate, and flaky with a mildly sweet flavor that makes it highly versatile in the culinary world. And, because of it’s mild taste branzino is an excellent pairing with bold seasonings and sauces. The benefit of grilling a whole branzino (or any whole fish) is that the juices and fats released from the head, skin, and bones into the flesh of the fish ensures a tasty and succulent fish. You’ll need to navigate the branzino’s delicate bone structure when consuming the fish whole, but this does not detract from the overall pleasure of this meal. And it’s simple to prepare. Prepping and Grilling Your Branzino Start by salting the cavity of your Branzino after you’ve rinsed it and patted it dry. Oil the fish well to protect the skin as it grills. Then stuff it with lemon slices, parsley, and smashed garlic cloves to permeate the flesh of the fish with flavor. Grill your fish for seven minutes per side between 500-550˚F. This temperature ensures a crispy skin and some attractive grill marks. Mediterranean Gremolata for Grilled Branzino The garnish for this dish is a flavor explosion and perfect companion to branzino’s mild flavor: kalamata olives, capers, lemon zest, chopped parsley, a generous drizzle of olive oil, and a splash of lemon juice. Blister a handful of grape tomatoes in a skillet for a final dash of color on the plate. It’s quintessential Mediterranean and an addiction of flavors. Whole grilled branzino is a visually striking presentation with a rustic and elegant charm that will engage the diners at your table. Add a Mediterranean soundtrack to your gathering and you will find that with your family and friends and satisfying food, there’s no better place than the home table. Serve this fish over a Mediterranean Quinoa Salad . Give this fish marinade a try sometime. Cowlitz River Salmon Marinade Print Grilled Branzino Print Recipe Pin Recipe const share_pin_buttons = document.getElementsByClassName( 'share-pin button' ); if ( share_pin_buttons ) { for ( let share_key = 0; share_key < share_pin_buttons.length; share_key++ ) { share_pin_buttons[share_key].addEventListener( 'click', (e) => { e.stopPropagation(); window.open(e.target.dataset.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=500'); return false; } ); } } Grilled branzino is easy, beautiful, and delicious topped with a vibrant Mediterranean gremolata of kalamata olives, capers, and lemon zest. Author: Chef Sandra Lewis Prep Time: 20 Cook Time: 14 Total Time: 34 minutes Yield: 1 serving Ingredients 1 whole branzino per person, gutted, scaled with fins removed 4 (or more) parsley sprigs 3 – 4 garlic cloves, smashed 3 – 4 lemon slices kosher salt olive oil Gremolata (per fish) 3 tablespoons kalamata olives, chopped 1 teaspoon capers zest from 1 lemon olive oil Garnish (per fish) 3 grape tomatoes, blistered in a dry cast iron skillet 1 tablespoon parsley, chopped fresh lemon juice olive oil Cook Mode Prevent your screen from going dark Instructions Grilled Branzino Rinse the branzino under cold water and pat dry with paper towels. Drizzle the branzino with olive oil and use your hands to distribute it evenly over the skin of the fish. Season the inside of the fish’s cavity with kosher salt. Stuff the cavity with the parsley, smashed garlic, and lemon slices. Place the branzino on a grill preheated to 500˚F-550˚F. Grill for about 7 minutes on each side. Gremolata Mix together the chopped olives, capers, and lemon zest. Drizzle in some olive oil to give the mixture some moisture. Assembly Remove the branzino from the grill to a plate. Pour the gremolata over the top of the fish. Scatter the blistered tomatoes around the fish. Top with the chopped parsley, an additional drizzle of of olive oil, and a squeeze of fresh lemon juice. Notes Other whole fish options instead of branzino: trout, ruby red trout, snapper, and salmon. Did you make this recipe? Tag @lifeatthetable on Instagram and hashtag it #whatsfordinner window.trCommon={"minRating":6,"ajaxurl":"https:\/\/lifeatthetable.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":175419186}; 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(){ document.querySelectorAll('[data-tr-ingredient-checkbox]').forEach(function(el) { var input = el.querySelector('.tr-ingredient-checkbox-container input[type="checkbox"]'); if ( ! input ) { return; } if (input.checked) { el.dataset.trIngredientCheckbox = 'checked'; } el.addEventListener('click', function(event) { if ( 'A' === event.target.nodeName || 'INPUT' === event.target.nodeName || 'LABEL' === event.target.nodeName ) { return; } input.click(); }); input.addEventListener('change', function() { el.dataset.trIngredientCheckbox = input.checked ? 'checked' : ''; }); }); }()); 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 <= 0 ) { return; } for ( const rating of ratings ) { rating.addEventListener( 'click', event => { 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 < this.minRating ) { commentTextarea.setAttribute( 'required', '' ); return; } commentTextarea.removeAttribute( 'required' ); }, maybeSendRating( rating, element ) { if ( this.savingRating === rating ) { return; } this.savingRating = rating; window.TastyRecipes.staticTooltip.init( element ); const recipeCardElement = element.closest( '.tasty-recipes' ); if ( ! recipeCardElement ) { window.TastyRecipes.staticTooltip.destroy(); return; } window.TastyRecipes.ajax.sendPostRequest( window.trCommon.ajaxurl, { action: 'tasty_recipes_save_rating', rating, nonce: window.trCommon.ratingNonce, post_id: window.trCommon.postId, recipe_id: recipeCardElement.dataset.trId, }, ( response ) => { 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 ); }); The post Grilled Branzino with Mediterranean Gremolata appeared first on Life At The Table .…
A
A Savory Moment by Life At The Table

What’s the green, herbaceous sauce that hails from Argentina and Uruguay that will elevate your meals from mundane to magnificent? It’s chimichurri sauce. Traditionally made with fresh parsley, garlic, red wine vinegar, olive oil, and red pepper flakes, this sauce is the perfect blend of savory, tangy, and slightly spicy. It is indeed the perfect blend of flavors that will elevate your meals from mundane to magnificent. A Dash of Chimichurri History No one knows for sure who can rightly claim the bragging rights for the invention of this delicious sauce. Some give credit to an Irishman living in Argentina named Jimmy McCurry who concocted the sauce using local ingredients because he longed for a replacement of his beloved Worcestershire sauce. Another story suggests Basque immigrants invented and named the sauce with a word that means “hodgepodge” and sounds very similar to chimichurri. Regardless of its etymology, this sauce is a beloved companion to the Argentine asado (or barbecue) for generations. Picture gauchos, Argentine cowboys, grilling meats over an open flame, basting them with chimichurri to keep them juicy and packed with flavor and serving a bit of chimichurri on the side as a condiment. Versatility Beyond the Grill Chimichurri is best known as a go-to sauce for grilled meats. But this magical green sauce is like a culinary fairy godmother that turns everyday ingredients into a feast fit for royalty. Here are some creative ways to add the zing of this addicting sauce to your weeknight dinners. 1. Dipping Delight . Serve chimichurri as a dip for roasted vegetables, or even as a fresh alternative to salsa with your favorite chips. 2. Salad Superstar . Drizzle chimichurri over a simple salad for an instant flavor boost. It pairs beautifully with fresh greens, tomatoes, and avocados. 3. Flavor Booster . Add a dollop of chimichurri to your burgers, sandwiches, eggs cooked in any way for a zesty, herbaceous kick. Make It Your Own With minimal prep time and no cooking required, chimichurri is a breeze to whip up. Just chop, mix, and you’re ready to go. It’s a fantastic option for busy weeknights and delivers maximum flavor with minimum fuss. One of chimichurri’s best characteristics is its adaptability. Put it on anything and don’t be afraid to experiment with the basic recipe to suit your tastes. Add a squeeze of lemon or lime, or toss in some cilantro to add a distinct, bright flavor. So what are you waiting for? Dive into the world of chimichurri and let this magical sauce make your tastebuds dance. Whether you’re hosting a barbecue, looking to jazz up a weeknight dinner or simply explore something new, chimichurri is your go-to sauce for adding excitement to any meal. Ready to grill? Check out this article on how to know when your grilled meat is done. How To Know When Grilled Meat Is Done Looking for more ways to use fresh parsley? Make tabbouleh . Print Chimichurri Print Recipe Pin Recipe const share_pin_buttons = document.getElementsByClassName( 'share-pin button' ); if ( share_pin_buttons ) { for ( let share_key = 0; share_key < share_pin_buttons.length; share_key++ ) { share_pin_buttons[share_key].addEventListener( 'click', (e) => { e.stopPropagation(); window.open(e.target.dataset.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=500'); return false; } ); } } Make chimichurri to add a punch of flavor to any dish, grilled meats, eggs, or vegetables. It’s super easy to make even on a weeknight. Author: Chef Sandra Lewis Prep Time: 10 Cook Time: 5 Total Time: 15 minutes Yield: 1/2 cup Ingredients Units USM 2 cups packed fresh parsley leaves (or cilantro, or a mix of both) 2 smashed garlic cloves 2 teaspoons dried oregano 1/2 teaspoon red pepper flakes 3 tablespoons olive oil kosher salt 2 tablespoons red wine vinegar Cook Mode Prevent your screen from going dark Instructions Place the parsley, garlic, oregano, and red pepper flakes in blender or a food processor with the red wine vinegar and 1 tablespoon of the olive oil. Blend and drizzle in the remaining olive oil, stopping to scrape down the sides as needed. Add a bit of water or more olive oil to create your desired consistency. Taste and adjust the seasoning with kosher salt as needed. Notes Parsley is traditionally used in chimichurri. If you’re a cilantro lover, use cilantro instead or mix it in. The cilantro makes the sauce even more refreshing and lively. Did you make this recipe? Tag @lifeatthetable on Instagram and hashtag it #whatsfordinner window.trCommon={"minRating":6,"ajaxurl":"https:\/\/lifeatthetable.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":175419123}; 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+d2<=D){d1+=d2;n1+=n2;d2=D+1}else if(d1>d2){d2=D+1;}else {d1=D+1;}break}else if(x<m){n2=n1+n2;d2=d1+d2}else{n1=n1+n2;d1=d1+d2}}}if(d1>D){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-A<5e-8){break;}B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){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-convert-button', buttonActiveClass = 'tasty-recipes-convert-button-active', buttons = document.querySelectorAll('.tasty-recipes-convert-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 unitType = button.dataset.unitType; var dataset = 'nf' + unitType.charAt(0).toUpperCase() + unitType.slice(1); var convertables = recipe.querySelectorAll('span[data-nf-original]'); convertables.forEach(function(convertable){ if (typeof convertable.dataset.amountOriginalType === 'undefined' && 'usc' === convertable.dataset.nfOriginal) { if (-1 !== convertable.innerText.indexOf('/')) { convertable.dataset.amountOriginalType = 'frac'; } if (-1 !== convertable.innerText.indexOf('.')) { convertable.dataset.amountOriginalType = 'number'; } Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) { if (-1 !== convertable.innerText.indexOf(vulgar)) { convertable.dataset.amountOriginalType = 'vulgar'; } }); } convertable.innerText = convertable.dataset[dataset]; if (typeof convertable.dataset.unit !== 'undefined') { convertable.dataset.unit = convertable.dataset[dataset + 'Unit']; } if (typeof convertable.dataset.amount !== 'undefined') { convertable.dataset.amount = convertable.dataset[dataset]; if ('metric' === unitType) { convertable.dataset.amountShouldRound = parseInt(convertable.dataset.amount) >= 10 ? 'integer' : 'number'; } else if (typeof convertable.dataset.amountOriginalType !== 'undefined') { convertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType; } else { convertable.dataset.amountShouldRound = false; } convertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable); } if (convertable.classList.contains('nutrifox-unit')) { if ('gram' === convertable.dataset[dataset]) { convertable.innerText = 'grams'; } } }); document.querySelectorAll('.tasty-recipes-scale-button-active').forEach(function(scaleButton){ scaleButton.click(); }); window.tastyRecipesUpdatePrintLink(); }); }); }()); (function(){ document.querySelectorAll('[data-tr-ingredient-checkbox]').forEach(function(el) { var input = el.querySelector('.tr-ingredient-checkbox-container input[type="checkbox"]'); if ( ! input ) { return; } if (input.checked) { el.dataset.trIngredientCheckbox = 'checked'; } el.addEventListener('click', function(event) { if ( 'A' === event.target.nodeName || 'INPUT' === event.target.nodeName || 'LABEL' === event.target.nodeName ) { return; } input.click(); }); input.addEventListener('change', function() { el.dataset.trIngredientCheckbox = input.checked ? 'checked' : ''; }); }); }()); 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 <= 0 ) { return; } for ( const rating of ratings ) { rating.addEventListener( 'click', event => { 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 < this.minRating ) { commentTextarea.setAttribute( 'required', '' ); return; } commentTextarea.removeAttribute( 'required' ); }, maybeSendRating( rating, element ) { if ( this.savingRating === rating ) { return; } this.savingRating = rating; window.TastyRecipes.staticTooltip.init( element ); const recipeCardElement = element.closest( '.tasty-recipes' ); if ( ! recipeCardElement ) { window.TastyRecipes.staticTooltip.destroy(); return; } window.TastyRecipes.ajax.sendPostRequest( window.trCommon.ajaxurl, { action: 'tasty_recipes_save_rating', rating, nonce: window.trCommon.ratingNonce, post_id: window.trCommon.postId, recipe_id: recipeCardElement.dataset.trId, }, ( response ) => { 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 ); }); The post Chimichurri appeared first on Life At The Table .…
A
A Savory Moment by Life At The Table

Discover the Delicious World of Kofta: A Flavorful Journey Have you ever wondered what makes a simple dish of meatballs explode with flavor? While you may be thinking that we are going to take a turn here to Italy. We’re not. Instead our journey will take us across the Mediterranean Sea and through the aromatic streets of the Middle East with a beloved dish. Kofta. Sometimes spelled kafta or kufta, this delicious dish has a lineage that stretches back to ancient Persia where the term “kūfta” meant to grind or pound. From Persia, kofta traveled through the bustling markets of the medieval Arab world making notable appearances in historical 10 th and 13 th century cookbooks. Talk about a recipe with staying power. The Magic Spice Mix What makes kofta so irresistible? It’s the harmonious blend of spices and herbs that elevate humble ground beef (or traditionally lamb) with a tantalizing blend of spices and herbs. My recipe includes a blend of diced onions, fresh parsley, mint, coriander, cumin, paprika, cinnamon, ground ginger, granulated garlic, allspice, and my first love, red pepper flakes. Kofta is a burst of flavor in every bite. Crafting the Perfect Kofta The secret to tender and juicy kofta lies in how you handle the meat. Here are my top tips: 1. Keep it chilled . Work with cold meat to maintain its texture. Warm meat can become mushy and hard to manage. 2. Give it a gentle mix . Mix the ingredients just until combined. Overworking the meat can break down proteins and make your kofta tough. Think of it like a light massage and not a wrestling match. 3. Flavor fusion . During that gentle mix, ensure an even distribution of spices and herbs. Every bite should be a burst of balanced flavor. 4. Shape with care . Shape your kofta with a light hand to avoid overworking the meat. I use two scoops of a tablespoon to create the perfect size and shape without a lot of fuss. A 1-inch or less diameter is perfect with a weight of a little less than two ounces. Cooking Kofta You have choices when it comes to cooking the perfect kofta. Shape it into a log around a skewer and grill, or you can pan fry. My preferred method is baking. Place your beautifully formed meatballs on a parchment lined sheet tray and bake at 350˚F for 15-20 minutes. The internal temp of the meatballs should register 165˚F. Kofta meatballs make a delicious sandwich made with pita bread, hummus, tabbouleh, topped with a tahini sauce. Whether your hosting a festive gathering or enjoying a cozy dinner at home, kofta is your ticket to a flavorful and unforgettable culinary adventure. Tabbouleh is the perfect accompaniment. Ditch the store-bought hummus. My hummus recipe is delicious and easy Hummus Print Kofta (Lebanese Meatballs) Print Recipe Pin Recipe const share_pin_buttons = document.getElementsByClassName( 'share-pin button' ); if ( share_pin_buttons ) { for ( let share_key = 0; share_key < share_pin_buttons.length; share_key++ ) { share_pin_buttons[share_key].addEventListener( 'click', (e) => { e.stopPropagation(); window.open(e.target.dataset.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=500'); return false; } ); } } Author: Chef Sandra Lewis Prep Time: 20 Cook Time: 20 Total Time: 40 minutes Yield: 4-6 servings Ingredients Units USM 1 teaspoon kosher salt 1 teaspoon coriander 1 teaspoon cumin 1/2 teaspoon paprika 1/2 teaspoon cinnamon 1/4 teaspoon ginger 1/4 teaspoon granulated garlic 1/4 teaspoon allspice pinch of red pepper flakes 1 lb ground beef 1/2 cup white onion, finely chopped 1/4 cup parsley, chopped 1/4 cup mint, chopped 1 egg, whisked Tahini Sauce 1/2 cup Greek yogurt 1/4 cup tahini 3 tablespoons olive oil 1 lemon, juiced 1 garlic clove, minced (or more to taste) kosher salt Optional Pita bread to make sandwiches Cook Mode Prevent your screen from going dark Instructions Heat your oven to 350˚F. Mix together the kosher salt, coriander, cumin, paprika, cinnamon, ginger, granulated garlic, allspice, and red pepper flakes in a medium bowl. Add the onion, parsley, mint, ground beef and whisked egg to the seasonings bowl and gently mix just until combined. Form the meatballs by scooping out 2 tablespoons of the meat mixture and gently form a ball. Balls should weigh about 1.75 oz. Place the meatballs on a parchment-lined sheet tray. Bake for 15-20 minutes or until the internal temperature reaches 165˚F. Remove the meatballs from the parchment-lined sheet tray to a paper-towel lined sheet tray to cool. Tahini Sauce Stir together the yogurt, tahini, olive oil, lemon juice, and garlic until combined. Taste and adjust the seasoning with kosher salt. Kofta Pita Sandwich Spread hummus on a pita bread. Top the hummus with tabbouleh. Top the hummus and tabbouleh with three meatballs. Garnish with the tahini sauce. Fold up the pita bread around the meatballs. Enjoy! Notes Use 80/20 ground beef for the kofta. The higher fat content will help keep the meatballs moist. Use ground lamb (traditionally used in kofta) or any other ground protein, turkey, chicken, pork. Did you make this recipe? Tag @lifeatthetable on Instagram and hashtag it #whatsfordinner window.trCommon={"minRating":6,"ajaxurl":"https:\/\/lifeatthetable.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":175419097}; 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+d2<=D){d1+=d2;n1+=n2;d2=D+1}else if(d1>d2){d2=D+1;}else {d1=D+1;}break}else if(x<m){n2=n1+n2;d2=d1+d2}else{n1=n1+n2;d1=d1+d2}}}if(d1>D){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-A<5e-8){break;}B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){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-convert-button', buttonActiveClass = 'tasty-recipes-convert-button-active', buttons = document.querySelectorAll('.tasty-recipes-convert-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 unitType = button.dataset.unitType; var dataset = 'nf' + unitType.charAt(0).toUpperCase() + unitType.slice(1); var convertables = recipe.querySelectorAll('span[data-nf-original]'); convertables.forEach(function(convertable){ if (typeof convertable.dataset.amountOriginalType === 'undefined' && 'usc' === convertable.dataset.nfOriginal) { if (-1 !== convertable.innerText.indexOf('/')) { convertable.dataset.amountOriginalType = 'frac'; } if (-1 !== convertable.innerText.indexOf('.')) { convertable.dataset.amountOriginalType = 'number'; } Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) { if (-1 !== convertable.innerText.indexOf(vulgar)) { convertable.dataset.amountOriginalType = 'vulgar'; } }); } convertable.innerText = convertable.dataset[dataset]; if (typeof convertable.dataset.unit !== 'undefined') { convertable.dataset.unit = convertable.dataset[dataset + 'Unit']; } if (typeof convertable.dataset.amount !== 'undefined') { convertable.dataset.amount = convertable.dataset[dataset]; if ('metric' === unitType) { convertable.dataset.amountShouldRound = parseInt(convertable.dataset.amount) >= 10 ? 'integer' : 'number'; } else if (typeof convertable.dataset.amountOriginalType !== 'undefined') { convertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType; } else { convertable.dataset.amountShouldRound = false; } convertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable); } if (convertable.classList.contains('nutrifox-unit')) { if ('gram' === convertable.dataset[dataset]) { convertable.innerText = 'grams'; } } }); document.querySelectorAll('.tasty-recipes-scale-button-active').forEach(function(scaleButton){ scaleButton.click(); }); window.tastyRecipesUpdatePrintLink(); }); }); }()); (function(){ document.querySelectorAll('[data-tr-ingredient-checkbox]').forEach(function(el) { var input = el.querySelector('.tr-ingredient-checkbox-container input[type="checkbox"]'); if ( ! input ) { return; } if (input.checked) { el.dataset.trIngredientCheckbox = 'checked'; } el.addEventListener('click', function(event) { if ( 'A' === event.target.nodeName || 'INPUT' === event.target.nodeName || 'LABEL' === event.target.nodeName ) { return; } input.click(); }); input.addEventListener('change', function() { el.dataset.trIngredientCheckbox = input.checked ? 'checked' : ''; }); }); }()); 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 <= 0 ) { return; } for ( const rating of ratings ) { rating.addEventListener( 'click', event => { 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 < this.minRating ) { commentTextarea.setAttribute( 'required', '' ); return; } commentTextarea.removeAttribute( 'required' ); }, maybeSendRating( rating, element ) { if ( this.savingRating === rating ) { return; } this.savingRating = rating; window.TastyRecipes.staticTooltip.init( element ); const recipeCardElement = element.closest( '.tasty-recipes' ); if ( ! recipeCardElement ) { window.TastyRecipes.staticTooltip.destroy(); return; } window.TastyRecipes.ajax.sendPostRequest( window.trCommon.ajaxurl, { action: 'tasty_recipes_save_rating', rating, nonce: window.trCommon.ratingNonce, post_id: window.trCommon.postId, recipe_id: recipeCardElement.dataset.trId, }, ( response ) => { 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 ); }); The post Kofta (Lebanese Meatballs) appeared first on Life At The Table .…
A
A Savory Moment by Life At The Table

Tabbouleh: A Fresh Salad Feast Which ancient salad, whose primary ingredient is parsley, has captured the taste buds of people around the world? It’s tabbouleh. This zesty, herb-packed dish is a celebration of fresh flavors, vibrant colors, and healthy eating. It’s a superstar standout in the Middle Eastern culinary lineup. And it’s time to add this ancient salad to your weekly rotation as well. A Salad With History Tabbouleh is a simple salad with a long history. Its roots stretch back to the fertile lands of a region that includes modern-day Lebanon, Syria, Jordan, and Palestine. In ancient times families gathered fresh parsley, mint, tomatoes , and lemons, and wheat from their gardens to create this refreshing dish. Tabbouleh is a reminder of a simpler time where cuisine was a product of what the land produced. Tabbouleh’s Star Ingredient – Bulgur Wheat Traditionally, tabbouleh features bulgur wheat, a staple ingredient in Middle Eastern and Mediterranean dishes. It’s prized for its nutty flavor, chewy texture, and nutritional benefits. The word “bulgur” means bruised grain in Turkish. This refers to the three-step process of making bulgur wheat. First the grains are boiled to partially cook them which helps to soften the wheat. The parboiled wheat is dried and then cracked into smaller pieces. Why bother you may ask? This process gives bulgur wheat its unique texture and quick-cooking properties that make it a convenient and nutritious ingredient in many dishes. But don’t shy away from from this dish if you are gluten-sensitive, substitute quinoa, cauliflower rice, or even millet for the bulgur wheat. Tips for Making Tabbouleh 1. Use fresh, high-quality parsley . Fresh ingredients are key to a creating a vibrant and tasty tabbouleh. Parsley should be a vibrant green free of wilting or yellowing. Traditionally, tabbouleh is made with flat-leaf parsley. However, I prefer curly parsley in my tabbouleh simply for its texture. It’s flavor is not as robust as flat-leaf parsley, but its fibrous leaves provide structure and it holds up well to the weight of the other ingredients. 2. Finely chop the herbs and vegetables . This creates a harmonious blend of flavors and textures. Use a sharp knife; a dull knife requires more effort to chop and it bruises the vegetables and herbs. 3. Let it rest before serving . Rest the salad to meld the flavors and give the bulgur wheat an opportunity to absorb the dressing and the juices from the tomatoes. A simple, tangy, lemon dressing ties everything together in this fresh, vibrant salad. Tabbouleh is the perfect companion to Kofta pita sandwiches , or grilled and roasted meats. Pair your tabbouleh salad with Lebanese Kofta Meatballs. It’s a match made in heaven. Kofta (Lebanese Meatballs) Print Tabbouleh Print Recipe Pin Recipe const share_pin_buttons = document.getElementsByClassName( 'share-pin button' ); if ( share_pin_buttons ) { for ( let share_key = 0; share_key < share_pin_buttons.length; share_key++ ) { share_pin_buttons[share_key].addEventListener( 'click', (e) => { e.stopPropagation(); window.open(e.target.dataset.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=500'); return false; } ); } } This zesty, herb-packed salad is as easy as it is versatile. Serve it with kofta, or grilled and roasted meats. Author: Chef Sandra Lewis Prep Time: 30 minutes Total Time: 30 minutes Yield: 6-8 servings Ingredients Units USM 3 cups parsley, chopped (curly or flat-leaf) 1 cup bulgur wheat, cooked 1/4 cup mint, chopped 2 large Roma tomatoes, chopped 1/2 cup green onions, finely chopped 2 small garlic cloves (or more to taste) 1/4 cup olive oil Juice of 2 lemons (or more to taste) kosher salt to taste Cook Mode Prevent your screen from going dark Instructions Add the cooked bulgur wheat to a large bowl and add the olive oil, lemon juice and kosher salt to taste. Stir in the parsley, mint, tomatoes, green onion, and garlic. Taste and adjust seasoning with kosher salt as needed. Allow the salad to rest for 1/2 hour or more to allow the flavors to meld. Notes Gluten-free? Substitute quinoa, cauliflower rice, millet, or your favorite grain for the bulgur wheat. Did you make this recipe? Tag @lifeatthetable on Instagram and hashtag it #whatsfordinner window.trCommon={"minRating":6,"ajaxurl":"https:\/\/lifeatthetable.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":175419102}; 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+d2<=D){d1+=d2;n1+=n2;d2=D+1}else if(d1>d2){d2=D+1;}else {d1=D+1;}break}else if(x<m){n2=n1+n2;d2=d1+d2}else{n1=n1+n2;d1=d1+d2}}}if(d1>D){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-A<5e-8){break;}B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){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-convert-button', buttonActiveClass = 'tasty-recipes-convert-button-active', buttons = document.querySelectorAll('.tasty-recipes-convert-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 unitType = button.dataset.unitType; var dataset = 'nf' + unitType.charAt(0).toUpperCase() + unitType.slice(1); var convertables = recipe.querySelectorAll('span[data-nf-original]'); convertables.forEach(function(convertable){ if (typeof convertable.dataset.amountOriginalType === 'undefined' && 'usc' === convertable.dataset.nfOriginal) { if (-1 !== convertable.innerText.indexOf('/')) { convertable.dataset.amountOriginalType = 'frac'; } if (-1 !== convertable.innerText.indexOf('.')) { convertable.dataset.amountOriginalType = 'number'; } Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) { if (-1 !== convertable.innerText.indexOf(vulgar)) { convertable.dataset.amountOriginalType = 'vulgar'; } }); } convertable.innerText = convertable.dataset[dataset]; if (typeof convertable.dataset.unit !== 'undefined') { convertable.dataset.unit = convertable.dataset[dataset + 'Unit']; } if (typeof convertable.dataset.amount !== 'undefined') { convertable.dataset.amount = convertable.dataset[dataset]; if ('metric' === unitType) { convertable.dataset.amountShouldRound = parseInt(convertable.dataset.amount) >= 10 ? 'integer' : 'number'; } else if (typeof convertable.dataset.amountOriginalType !== 'undefined') { convertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType; } else { convertable.dataset.amountShouldRound = false; } convertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable); } if (convertable.classList.contains('nutrifox-unit')) { if ('gram' === convertable.dataset[dataset]) { convertable.innerText = 'grams'; } } }); document.querySelectorAll('.tasty-recipes-scale-button-active').forEach(function(scaleButton){ scaleButton.click(); }); window.tastyRecipesUpdatePrintLink(); }); }); }()); (function(){ document.querySelectorAll('[data-tr-ingredient-checkbox]').forEach(function(el) { var input = el.querySelector('.tr-ingredient-checkbox-container input[type="checkbox"]'); if ( ! input ) { return; } if (input.checked) { el.dataset.trIngredientCheckbox = 'checked'; } el.addEventListener('click', function(event) { if ( 'A' === event.target.nodeName || 'INPUT' === event.target.nodeName || 'LABEL' === event.target.nodeName ) { return; } input.click(); }); input.addEventListener('change', function() { el.dataset.trIngredientCheckbox = input.checked ? 'checked' : ''; }); }); }()); 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 <= 0 ) { return; } for ( const rating of ratings ) { rating.addEventListener( 'click', event => { 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 < this.minRating ) { commentTextarea.setAttribute( 'required', '' ); return; } commentTextarea.removeAttribute( 'required' ); }, maybeSendRating( rating, element ) { if ( this.savingRating === rating ) { return; } this.savingRating = rating; window.TastyRecipes.staticTooltip.init( element ); const recipeCardElement = element.closest( '.tasty-recipes' ); if ( ! recipeCardElement ) { window.TastyRecipes.staticTooltip.destroy(); return; } window.TastyRecipes.ajax.sendPostRequest( window.trCommon.ajaxurl, { action: 'tasty_recipes_save_rating', rating, nonce: window.trCommon.ratingNonce, post_id: window.trCommon.postId, recipe_id: recipeCardElement.dataset.trId, }, ( response ) => { 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 ); }); The post Tabbouleh appeared first on Life At The Table .…
Spice Up Your Life: Nashville Hot Chicken Do you love fiery flavors that make your taste buds dance? Buckle up. Because I’ve got a tantalizing food adventure for you. It’s a Southern celebration of heat, history, and happiness. It’s Nashville Hot Chicken. A Fiery Beginning: The Birth of Nashville Hot Chicken The legend of Nashville hot chicken begins with a story as spicy as the dish itself. At the center of this story is Thornton Prince, a charming and somewhat mischievous Nashville native. After a particularly late night out Thornton’s girlfriend decided to teach him a lesson. She whipped up a batch of his favorite fried chicken, but added an extraordinary amount of fiery spice hoping to burn a little sense into him through his tastebuds. To her surprise, Thornton loved it. He refined the recipe and soon this creation became a sensation. Thornton Prince opened Prince’s Hot Chicken Shack, and the rest, as they say, is history. The Heat is On: What Makes This Chicken so Hot? What sets Nashville hot chicken apart from other fried chicken? It’s all in the sauce. After frying the chicken is coated with a fiery paste made from cayenne, paprika, and granulated garlic. And it’s balanced with a bit of brown sugar. Traditionally the paste is made with a bit of the frying oil. My updated version uses avocado oil instead. Tips for Making the Perfect Nashville Hot Chicken Ready to try your hand at making this delicious chicken dish? Here are my top four tips for making this iconic dish. 1. Thin Cut Chicken. Most chicken breasts are extraordinarily large and thick. Cut your chicken breasts in half horizontally for the perfect size. 2. Maintain Oil Temperature . Fry your chicken at a steady 350˚F. Adjust your burner up and down as needed to maintain a steady heat. A digital thermometer comes in handy for checking the temperature. 3. Garnish with Cooling Flavors. Pickles, butter lettuce, and a garlic sauce made with mayo and sour cream are the perfect way to balance the heat in this sandwich. 4. Use a Sturdy Bun . A kaiser roll is the perfect choice to hold this man-sized sandwich together. And here’s one final tip, especially for those whose tastebuds are a bit more delicate and shy away from heat. Make this sandwich and leave off the additional spices brushed on after frying. You’ll have all the fun and flavor without needing a fire extinguisher for your tastebuds. Whether you’re a spice lover or just looking to cook something new for dinner, Nashville hot chicken is a must-try. What are you waiting for? Get cooking and let the good times (and spicy chicken) roll! Learn to make a fabulous sandwich. Read my sandwich making tips. Sandwich Making Tips *As an Amazon Associate I earn from qualifying purchases.* Print Nashville Hot Chicken Print Recipe Pin Recipe const share_pin_buttons = document.getElementsByClassName( 'share-pin button' ); if ( share_pin_buttons ) { for ( let share_key = 0; share_key < share_pin_buttons.length; share_key++ ) { share_pin_buttons[share_key].addEventListener( 'click', (e) => { e.stopPropagation(); window.open(e.target.dataset.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=500'); return false; } ); } } Master the art of making Nashville Hot Chicken Sandwich with its crispy coating and fiery, flavorful kick. Super easy and delicious! Author: Chef Sandra Lewis Ingredients Units USM Chicken 4 5 – oz skinless, boneless chicken breasts 1 cup flour 1/2 cup cornstarch 1 teaspoon cayenne 1 teaspoon granulated garlic 1 teaspoon paprika 1 teaspoon granulated onion 1 teaspoon kosher salt 1 teaspoon black pepper 2 eggs 4 kaiser rolls, toasted peanut oil for frying Hot Sauce 6 tablespoons avocado oil 2 tablespoons brown sugar 1 tablespoon cayenne 1 teaspoon paprika 1/2 teaspoon granulated garlic Garlic Sauce 1/2 cup mayonnaise 1/2 cup sour cream 2 tablespoons lemon juice 1 tablespoon garlic paste 1 tablespoon white wine vinegar kosher salt Garnish 4 butter lettuce leaves 4 tomato slices 4 red onion slices pickles Cook Mode Prevent your screen from going dark Instructions Garlic Sauce Stir together the ingredients for the garlic sauce in a small bowl. Taste and adjust the seasoning as needed. Set aside. Hot Sauce Stir together the ingredients for the hot sauce in a small bowl and set aside. Chicken Whisk together the flour, cornstarch, cayenne, granulated garlic, paprika, granulated onion, kosher salt, and black pepper in a medium bowl. Divide this mixture between two small sheet trays. Beat the two eggs; pour the beaten eggs onto a third small sheet tray. Arrange the sheet trays with the flour mixture on either side of the beaten eggs. Breading Process: Coat a chicken breast with the flour from the first tray. Dip the flour-coated chicken breast into the beaten eggs in the second tray. Coat the chicken with the flour from the third tray. Repeat until each chicken breast has been coated. Heat a high-smoke point oil in a cast iron skillet to 325˚ F – 350˚F. Fry the chicken breasts until the coating is browned and the chicken is cooked. Remove the chicken breast from the skillet to wire rack. Brush the top side of the chicken with the hot sauce. Sandwich Assembly Brush the tops and bottoms of the kaiser rolls with the garlic sauce. Lay a leaf of butter lettuce on the bottom bun. Lay the tomato and red onion slices on top of the butter lettuce. Lay the chicken breast on top of the tomato and red onion slices. Lay the pickles on top of the chicken. Enjoy! Notes If you like tons of spice, brush both sides of your chicken breast with the hot sauce mixture. If you don’t like tons of spice, forego the hot sauce. This sandwich is delicious without it. Did you make this recipe? Tag @lifeatthetable on Instagram and hashtag it #whatsfordinner window.trCommon={"minRating":6,"ajaxurl":"https:\/\/lifeatthetable.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":175419081}; 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+d2<=D){d1+=d2;n1+=n2;d2=D+1}else if(d1>d2){d2=D+1;}else {d1=D+1;}break}else if(x<m){n2=n1+n2;d2=d1+d2}else{n1=n1+n2;d1=d1+d2}}}if(d1>D){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-A<5e-8){break;}B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){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-convert-button', buttonActiveClass = 'tasty-recipes-convert-button-active', buttons = document.querySelectorAll('.tasty-recipes-convert-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 unitType = button.dataset.unitType; var dataset = 'nf' + unitType.charAt(0).toUpperCase() + unitType.slice(1); var convertables = recipe.querySelectorAll('span[data-nf-original]'); convertables.forEach(function(convertable){ if (typeof convertable.dataset.amountOriginalType === 'undefined' && 'usc' === convertable.dataset.nfOriginal) { if (-1 !== convertable.innerText.indexOf('/')) { convertable.dataset.amountOriginalType = 'frac'; } if (-1 !== convertable.innerText.indexOf('.')) { convertable.dataset.amountOriginalType = 'number'; } Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) { if (-1 !== convertable.innerText.indexOf(vulgar)) { convertable.dataset.amountOriginalType = 'vulgar'; } }); } convertable.innerText = convertable.dataset[dataset]; if (typeof convertable.dataset.unit !== 'undefined') { convertable.dataset.unit = convertable.dataset[dataset + 'Unit']; } if (typeof convertable.dataset.amount !== 'undefined') { convertable.dataset.amount = convertable.dataset[dataset]; if ('metric' === unitType) { convertable.dataset.amountShouldRound = parseInt(convertable.dataset.amount) >= 10 ? 'integer' : 'number'; } else if (typeof convertable.dataset.amountOriginalType !== 'undefined') { convertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType; } else { convertable.dataset.amountShouldRound = false; } convertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable); } if (convertable.classList.contains('nutrifox-unit')) { if ('gram' === convertable.dataset[dataset]) { convertable.innerText = 'grams'; } } }); document.querySelectorAll('.tasty-recipes-scale-button-active').forEach(function(scaleButton){ scaleButton.click(); }); window.tastyRecipesUpdatePrintLink(); }); }); }()); (function(){ document.querySelectorAll('[data-tr-ingredient-checkbox]').forEach(function(el) { var input = el.querySelector('.tr-ingredient-checkbox-container input[type="checkbox"]'); if ( ! input ) { return; } if (input.checked) { el.dataset.trIngredientCheckbox = 'checked'; } el.addEventListener('click', function(event) { if ( 'A' === event.target.nodeName || 'INPUT' === event.target.nodeName || 'LABEL' === event.target.nodeName ) { return; } input.click(); }); input.addEventListener('change', function() { el.dataset.trIngredientCheckbox = input.checked ? 'checked' : ''; }); }); }()); 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 <= 0 ) { return; } for ( const rating of ratings ) { rating.addEventListener( 'click', event => { 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 < this.minRating ) { commentTextarea.setAttribute( 'required', '' ); return; } commentTextarea.removeAttribute( 'required' ); }, maybeSendRating( rating, element ) { if ( this.savingRating === rating ) { return; } this.savingRating = rating; window.TastyRecipes.staticTooltip.init( element ); const recipeCardElement = element.closest( '.tasty-recipes' ); if ( ! recipeCardElement ) { window.TastyRecipes.staticTooltip.destroy(); return; } window.TastyRecipes.ajax.sendPostRequest( window.trCommon.ajaxurl, { action: 'tasty_recipes_save_rating', rating, nonce: window.trCommon.ratingNonce, post_id: window.trCommon.postId, recipe_id: recipeCardElement.dataset.trId, }, ( response ) => { 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 ); }); The post Nashville Hot Chicken Sandwich appeared first on Life At The Table .…
A
A Savory Moment by Life At The Table

Dive Into Flavor with the Vibrant Tuna Niçoise Salad What salad from the sun-kissed city of Nice, France, should you add to your evening meal repertoire? It’s Tuna Niçoise Salad. It is a celebration of simplicity and flavors. The original version of Niçoise salad was even more simple: salted tomatoes, hard boiled eggs, anchovies, and olive oil. It was considered a much beloved poor man’s meal. Then August Escoffier , a French chef who is known as the king of chefs and the chefs to kings and whose work spanned the 18 th and 19 th centuries, added boiled potatoes and green beans to the salad. And there’s been controversy ever since from the purists who say that’s not traditional. But it stuck and most often today you will see boiled potatoes and green beans in a Niçoise salad along with capers, olives, and canned tuna. Cooking Up Fun: Pan-Searing Tuna There is no shame in using canned tuna in this salad. It’s quick, easy, and tuna packed in oil is delish and one of my weeknight go-tos. Elevate your Tuna Niçoise Salad experience with pan-seared tuna. It’s simple and fast. Heat a pan over medium-high heat and add a splash of olive oil, just enough to coat the bottom of the skillet. Season the tuna on both sides, lay it in the skillet for not more than 1-2 minutes on each side. You’re aiming for a beautifully browned crust with a rare to medium-rare center. Fresh, Flavorful Ingredients in Tuna Niçoise Salad But before the fun of pan-searing, make the dressing for your salad and prep your veggies. 1. The Dressing. Whisk together olive oil, white wine vinegar, lemon juice, lemon zest, minced shallots and Dijon mustard. Set that aside for the flavors to meld. 2. Red Potatoes. Cut the red potatoes into wedges and simmer in salted water for 8 minutes, or just until perfectly tender. Drain the potatoes and toss them in a bit of dressing as soon as they are done so they absorb the flavors of the dressing. 3. Green Beans. Cut green beans into 2-inch lengths and pan-steam them in salted water for two minutes. Shock them in an ice bath to stop the cooking. This cooking process ensures bright-colored green beans. Toss these veggies together with dressing and plate them. Garnish with Niçoise olives, capers and a perfectly boiled egg cut into quarters. Lay your seared tuna on top. Take a step back, admire your creation, give thanks, and dig into your Tuna Niçoise Salad. Make it today and enjoy it at the table with your friends and family. Learn how to perfectly boil and egg. How To Perfectly Boil An Egg *As an Amazon Associate I earn from qualifying purchases.* Print Tuna Niçoise Salad Print Recipe Pin Recipe const share_pin_buttons = document.getElementsByClassName( 'share-pin button' ); if ( share_pin_buttons ) { for ( let share_key = 0; share_key < share_pin_buttons.length; share_key++ ) { share_pin_buttons[share_key].addEventListener( 'click', (e) => { e.stopPropagation(); window.open(e.target.dataset.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=500'); return false; } ); } } Tuna Niçoise Salad is the perfect salad when you want a ray of sunshine in your life and on your plate. And it’s easy to make on a weeknight. Author: Chef Sandra Lewis Prep Time: 30 Cook Time: 10 minutes Total Time: 40 minutes Yield: 4 servings Ingredients Units USM Salad 4 6 – oz tuna filets 1 lb small red potatoes, quartered 8 oz green beans, trim and sliced into 2-inch pieces 16 grape tomatoes, quartered 4 boiled eggs, quartered 1/4 cup Niçoise or kalamata olives 4 teaspoons capers kosher salt red pepper flakes, optional chopped parsley, optional Dressing 1 tablespoon Dijon mustard 1 tablespoon white wine vinegar 1 tablespoon lemon juice 1 tablespoon lemon zest 4.5 tablespoons shallots, minced 3/4 cup olive oil kosher salt Cook Mode Prevent your screen from going dark Instructions Salad Dressing. Whisk together all the ingredients for the dressing except the olive oil. Whisk the olive oil into the vinegar mixture in a steady stream until combined. Taste the dressing and season with kosher salt as needed. Set the dressing aside. Potatoes. Place the quartered potatoes in a pot large enough to cover the potatoes by 1-2 inches of water. Season the water with kosher salt. Bring to a boil, then reduce to a simmer. Cook just until tender, about 8 minutes. Drain the potatoes and toss with 1/4 cup of the dressing in a large bowl while they are still warm. Green Beans. Prepare an ice water bath for the green beans: a bowl of cold water with ice. Add the green beans to a large skillet, ideally so they lay in the skillet in one layer. Add just a bit of cold water to the skillet to cover at least half the surface of the skillet. Season the green beans with kosher salt. Heat the green beans until the water boils. Cook the green beans until they are crisp tender, 2-3 minutes. Once cooked, submerge the green beans in the ice water bath to stop the cooking process. Drain the green beans and lay on paper towels to dry. Tuna. Heat a skillet over medium-high heat. Add just enough oil to coat the bottom of the skillet. Give it a swirl to evenly distribute the oil. Season the tuna filets and add them to the hot skillet. Sear 1-2 minutes on each side. Remove from the heat and set aside. Assemble the Salad Toss the potatoes, green beans, and grape tomatoes with a good portion of the dressing, reserving some of the dressing to spoon over the top of the pan-seared tuna. Divide the salad onto four plates. Top each salad with a seared tuna filet. Garnish each salad with 1 teaspoon of capers, 1 tablespoon of Niçoise olives, and 4 boiled egg quarters. Spoon a bit of the remaining dressing over each tuna filet. Notes The potatoes and green beans can be cooked in advanced and stored in the refrigerator. If you like a lot of dressing on your salad or want to use this dressing on another salad, make more salad dressing. The dressing can also be made in advance and stored in the refrigerator. Let it come to room temperature before using. Follow these instructions for a perfect boiled egg. Optional: Some versions of this salad replace the tuna with anchovies. Other versions include a slice or two of anchovies as a garnish. Follow your heart on this one. Did you make this recipe? Tag @lifeatthetable on Instagram and hashtag it #whatsfordinner window.trCommon={"minRating":6,"ajaxurl":"https:\/\/lifeatthetable.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":175419067}; 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+d2<=D){d1+=d2;n1+=n2;d2=D+1}else if(d1>d2){d2=D+1;}else {d1=D+1;}break}else if(x<m){n2=n1+n2;d2=d1+d2}else{n1=n1+n2;d1=d1+d2}}}if(d1>D){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-A<5e-8){break;}B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){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-convert-button', buttonActiveClass = 'tasty-recipes-convert-button-active', buttons = document.querySelectorAll('.tasty-recipes-convert-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 unitType = button.dataset.unitType; var dataset = 'nf' + unitType.charAt(0).toUpperCase() + unitType.slice(1); var convertables = recipe.querySelectorAll('span[data-nf-original]'); convertables.forEach(function(convertable){ if (typeof convertable.dataset.amountOriginalType === 'undefined' && 'usc' === convertable.dataset.nfOriginal) { if (-1 !== convertable.innerText.indexOf('/')) { convertable.dataset.amountOriginalType = 'frac'; } if (-1 !== convertable.innerText.indexOf('.')) { convertable.dataset.amountOriginalType = 'number'; } Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) { if (-1 !== convertable.innerText.indexOf(vulgar)) { convertable.dataset.amountOriginalType = 'vulgar'; } }); } convertable.innerText = convertable.dataset[dataset]; if (typeof convertable.dataset.unit !== 'undefined') { convertable.dataset.unit = convertable.dataset[dataset + 'Unit']; } if (typeof convertable.dataset.amount !== 'undefined') { convertable.dataset.amount = convertable.dataset[dataset]; if ('metric' === unitType) { convertable.dataset.amountShouldRound = parseInt(convertable.dataset.amount) >= 10 ? 'integer' : 'number'; } else if (typeof convertable.dataset.amountOriginalType !== 'undefined') { convertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType; } else { convertable.dataset.amountShouldRound = false; } convertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable); } if (convertable.classList.contains('nutrifox-unit')) { if ('gram' === convertable.dataset[dataset]) { convertable.innerText = 'grams'; } } }); document.querySelectorAll('.tasty-recipes-scale-button-active').forEach(function(scaleButton){ scaleButton.click(); }); window.tastyRecipesUpdatePrintLink(); }); }); }()); (function(){ document.querySelectorAll('[data-tr-ingredient-checkbox]').forEach(function(el) { var input = el.querySelector('.tr-ingredient-checkbox-container input[type="checkbox"]'); if ( ! input ) { return; } if (input.checked) { el.dataset.trIngredientCheckbox = 'checked'; } el.addEventListener('click', function(event) { if ( 'A' === event.target.nodeName || 'INPUT' === event.target.nodeName || 'LABEL' === event.target.nodeName ) { return; } input.click(); }); input.addEventListener('change', function() { el.dataset.trIngredientCheckbox = input.checked ? 'checked' : ''; }); }); }()); 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 <= 0 ) { return; } for ( const rating of ratings ) { rating.addEventListener( 'click', event => { 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 < this.minRating ) { commentTextarea.setAttribute( 'required', '' ); return; } commentTextarea.removeAttribute( 'required' ); }, maybeSendRating( rating, element ) { if ( this.savingRating === rating ) { return; } this.savingRating = rating; window.TastyRecipes.staticTooltip.init( element ); const recipeCardElement = element.closest( '.tasty-recipes' ); if ( ! recipeCardElement ) { window.TastyRecipes.staticTooltip.destroy(); return; } window.TastyRecipes.ajax.sendPostRequest( window.trCommon.ajaxurl, { action: 'tasty_recipes_save_rating', rating, nonce: window.trCommon.ratingNonce, post_id: window.trCommon.postId, recipe_id: recipeCardElement.dataset.trId, }, ( response ) => { 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 ); }); The post Tuna Nicoise Salad appeared first on Life At The Table .…
Discover the Delight of Orzo Salad with Basil Vinaigrette and Poached Shrimp Which quick-cooking pasta is shaped like a rice grain and means “barley” in Italian? It’s orzo. And you need to get to know this delicious, quick-cooking pasta. You’re going to love orzo’s versatility. It’s used in soups, stews, salads, and can be used as a substitute for a grain in all kinds of dishes, like paella and risotto. My favorite way to use this beloved pasta is in a salad: Orzo Salad with Basil Vinaigrette with Olive Oil Poached Shrimp. Is your mouth watering yet? The Freshness of Basil Vinaigrette The beauty of orzo is its ability to absorb flavors; and there’s no better flavor to pair orzo with than my basil vinaigrette. It’s the star of this salad show. It’s fresh, zesty, and packed with the aromatic punch of basil. Basil has been cultivated for more than 5,000 years and was once considered a symbol of love in Italy. Basil is rich in antioxidants and has anti-inflammatory properties. This vinaigrette is not only over-the-top delicious, it’s good for you too. But isn’t that just the base definition of what food should be? It tastes good and is good for you. Yes! Perfectly Poached Shrimp for Orzo Salad with Basil Vinaigrette Poaching shrimp might sound fancy, smancy, but it’s an incredibly simple cooking technique. There are two keys to success with poaching shrimp. 1. Infuse the poaching liquid with lots of flavor. In this case the poaching liquid is olive oil, and you’ll infuse it with bay leaf, peppercorns, lemon, and a bay leaf for starters. add any additional aromatics and seasonings to the liquid to customize it for your tastebuds. 2. Control the poaching temperature. Shrimp are delicate and can easily become tough and rubbery. To achieve the perfect poach, the poaching liquid should be kept at a gentle simmer, around 170˚F. This ensures that the shrimp cook evenly and stay tender. Poach only until the shrimp turn opaque and pinken. This color change is one of the most reliable indicators that your shrimp are done. The best of cooking is taking simple, fresh ingredients and transforming them into something delicious to eat. Get to know orzo, make this basil vinaigrette, poach those shrimp and savor every bite of this delightful salad. Make it today and enjoy it at the table with your friends and family. Ready to make basil pesto? This is a tried and true recipe . Here’s another recipe that features shrimp and is super easy. Shrimp al Ajillo Print Orzo Salad with Basil Vinaigrette and Poached Shrimp Print Recipe Pin Recipe const share_pin_buttons = document.getElementsByClassName( 'share-pin button' ); if ( share_pin_buttons ) { for ( let share_key = 0; share_key < share_pin_buttons.length; share_key++ ) { share_pin_buttons[share_key].addEventListener( 'click', (e) => { e.stopPropagation(); window.open(e.target.dataset.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=500'); return false; } ); } } Dive into the flavors of the Mediterranean with this Orzo Salad with Basil Vinaigrette and Poached Shrimp. Delish and easy to make on a weeknight! Author: Chef Sandra Lewis Prep Time: 30 Cook Time: 10 Total Time: 40 minutes Yield: 4-6 servings Ingredients Units USM 2 cups orzo 16 grape tomatoes, sliced 2 shallots, julienne 1/2 cup chopped parsley 1 lemon Basil Vinaigrette 2 cups basil leaves 1 tablespoon roughly chopped garlic 2 tablespoons Champagne vinegar 1 teaspoon Dijon mustard 1/2 cup olive oil kosher salt Poached Shrimp 12 16/20 -shrimp, peeled and deveined 1 1/2 cups olive oil 2 lemon slices 2 bay leaves 2 teaspoons black peppercorns 2 smashed garlic cloves Optional Garnish Red pepper flakes Cook Mode Prevent your screen from going dark Instructions Prepare orzo according to package directions. Drain and spread onto a sheet tray to cool. Basil Vinaigrette In the bowl of a food processor, combine the basil, garlic, Champagne vinegar, and Dijon mustard. Process until the basil is finely chopped. Add the olive oil to the basil mixture with the processor running. Once combined, taste and adjust the seasoning as needed. Poached Shrimp Combine the olive oil, lemon slices, bay leaves, black peppercorns and smashed garlic in a saucepan. Bring the poaching liquid to a simmer. Remove the liquid from the heat and allow the liquid to steep for 15 minutes. When you’re ready to poach the shrimp, reheat the poaching liquid to 170˚F. Add the shrimp to the poaching liquid and poach just until shrimp turn opaque and pinken. Remove the shrimp from the poaching liquid to a parchment lined sheet tray. Assemble the Salad Combine the cooked orzo, sliced tomatoes, shallots, parsley, and basil vinaigrette in a large bowl. Stir to combine well. Scoop the orzo mixture onto a plate or into a bowl and add the poached shrimp on top. Garnish with a splash of fresh lemon juice and red pepper flakes, if desired. Notes Depending on how large your shrimp are you may need to do two rounds of poaching so that you don’t overcrowd the saucepan. Remove the shrimp from the first round to a sheet tray and repeat the process until all shrimp are cooked. If you buy shrimp with the shell on, poach them first, then peel and devein them. The shells will enhance the flavor of your shrimp. Did you make this recipe? Tag @lifeatthetable on Instagram and hashtag it #whatsfordinner window.trCommon={"minRating":6,"ajaxurl":"https:\/\/lifeatthetable.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":175419049}; 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+d2<=D){d1+=d2;n1+=n2;d2=D+1}else if(d1>d2){d2=D+1;}else {d1=D+1;}break}else if(x<m){n2=n1+n2;d2=d1+d2}else{n1=n1+n2;d1=d1+d2}}}if(d1>D){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-A<5e-8){break;}B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){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-convert-button', buttonActiveClass = 'tasty-recipes-convert-button-active', buttons = document.querySelectorAll('.tasty-recipes-convert-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 unitType = button.dataset.unitType; var dataset = 'nf' + unitType.charAt(0).toUpperCase() + unitType.slice(1); var convertables = recipe.querySelectorAll('span[data-nf-original]'); convertables.forEach(function(convertable){ if (typeof convertable.dataset.amountOriginalType === 'undefined' && 'usc' === convertable.dataset.nfOriginal) { if (-1 !== convertable.innerText.indexOf('/')) { convertable.dataset.amountOriginalType = 'frac'; } if (-1 !== convertable.innerText.indexOf('.')) { convertable.dataset.amountOriginalType = 'number'; } Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) { if (-1 !== convertable.innerText.indexOf(vulgar)) { convertable.dataset.amountOriginalType = 'vulgar'; } }); } convertable.innerText = convertable.dataset[dataset]; if (typeof convertable.dataset.unit !== 'undefined') { convertable.dataset.unit = convertable.dataset[dataset + 'Unit']; } if (typeof convertable.dataset.amount !== 'undefined') { convertable.dataset.amount = convertable.dataset[dataset]; if ('metric' === unitType) { convertable.dataset.amountShouldRound = parseInt(convertable.dataset.amount) >= 10 ? 'integer' : 'number'; } else if (typeof convertable.dataset.amountOriginalType !== 'undefined') { convertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType; } else { convertable.dataset.amountShouldRound = false; } convertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable); } if (convertable.classList.contains('nutrifox-unit')) { if ('gram' === convertable.dataset[dataset]) { convertable.innerText = 'grams'; } } }); document.querySelectorAll('.tasty-recipes-scale-button-active').forEach(function(scaleButton){ scaleButton.click(); }); window.tastyRecipesUpdatePrintLink(); }); }); }()); (function(){ document.querySelectorAll('[data-tr-ingredient-checkbox]').forEach(function(el) { var input = el.querySelector('.tr-ingredient-checkbox-container input[type="checkbox"]'); if ( ! input ) { return; } if (input.checked) { el.dataset.trIngredientCheckbox = 'checked'; } el.addEventListener('click', function(event) { if ( 'A' === event.target.nodeName || 'INPUT' === event.target.nodeName || 'LABEL' === event.target.nodeName ) { return; } input.click(); }); input.addEventListener('change', function() { el.dataset.trIngredientCheckbox = input.checked ? 'checked' : ''; }); }); }()); 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 <= 0 ) { return; } for ( const rating of ratings ) { rating.addEventListener( 'click', event => { 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 < this.minRating ) { commentTextarea.setAttribute( 'required', '' ); return; } commentTextarea.removeAttribute( 'required' ); }, maybeSendRating( rating, element ) { if ( this.savingRating === rating ) { return; } this.savingRating = rating; window.TastyRecipes.staticTooltip.init( element ); const recipeCardElement = element.closest( '.tasty-recipes' ); if ( ! recipeCardElement ) { window.TastyRecipes.staticTooltip.destroy(); return; } window.TastyRecipes.ajax.sendPostRequest( window.trCommon.ajaxurl, { action: 'tasty_recipes_save_rating', rating, nonce: window.trCommon.ratingNonce, post_id: window.trCommon.postId, recipe_id: recipeCardElement.dataset.trId, }, ( response ) => { 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 ); }); The post Orzo Salad with Basil Vinaigrette and Poached Shrimp appeared first on Life At The Table .…
A
A Savory Moment by Life At The Table

It’s time to ditch store-bought hummus and make your own. Making this super simple dish at home means experiencing vibrant flavor unmatched by store-bought versions. Honestly, what dish doesn’t taste better when it’s homemade? A Rich History: Hummus Through the Ages Hummus is a simple dish with a rich history. Hummus, which means “chickpea” in Arabic, originated in the Middle East, and has been a dietary staple in countries like Lebanon, Israel, and Syria for generations. The first recorded recipe dates back to the 13 th century in Cairo, Egypt, in a cookbook whose title translates to “The Description of Familiar Food”. The original recipe featured mashed chickpeas and tahini, a sesame seed paste, and pickled lemons. Unlike our modern recipe, it didn’t use garlic or olive oil. Overtime, garlic and olive oil were introduced into the recipe. These two ingredients are now considered essential in modern hummus. Today, this beloved dish is celebrated worldwide with unique and delicious adaptations: beet, roasted red pepper, sun-dried tomato, pumpkin, and even roasted carrot hummus. Health Benefits of Hummus Homemade hummus is packed with nutrients. Chickpeas are rich in protein, fiber, and essential vitamins and minerals. Tahini provides healthy fats along with anti-microbial and anti-inflammatory properties. Garlic, my favorite vegetable, is also naturally anti-microbial, is an anti-inflammatory, has antioxidant properties, and can boost your digestive health with its healthy gut microbes. Together with lemon juice, and olive oil, these ingredients create a nutrient dense, delicious dip that is super easy to make. Tips for the Perfect Hummus 1. Start with dried chick peas. The ultimate secret to achieving a smooth and creamy hummus is to soak dried chick peas and cook them until they easily crush. Yes, you can use canned chick peas, but they don’t crush easily and the resulting texture will be grainy. 2. Use baking soda in the soaking and cooking water. Baking soda increases the pH of the soaking and cooking water, making it more alkaline. This in turn breaks down the pectin and other polysaccharides which leads to softer chickpeas. 3. Blend the chickpeas with ice water. The addition of ice water emulsifies the hummus. Sure, sure. You can buy hummus at the store. But nothing compares to the flavor and texture of homemade free from preservatives and unnecessary additives. Plus the satisfaction of crafting something so simple and delicious from scratch is unmatched. Make it today and enjoy it at the table with your friends and family. Looking for another chickpea recipe. Try this one. Fried Chickpeas with Turmeric To make pita chips with your hummus follow the instructions in this Greek Nachos recipe. Print Hummus Print Recipe Pin Recipe const share_pin_buttons = document.getElementsByClassName( 'share-pin button' ); if ( share_pin_buttons ) { for ( let share_key = 0; share_key < share_pin_buttons.length; share_key++ ) { share_pin_buttons[share_key].addEventListener( 'click', (e) => { e.stopPropagation(); window.open(e.target.dataset.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=500'); return false; } ); } } Make the ultimate creamy hummus with this recipe and cooking tips. It’s an easy homemade dip perfect for any occasion. Author: Chef Sandra Lewis Prep Time: 40 Cook Time: 10 Total Time: 50 minutes Yield: 8-10 servings Ingredients Units USM 1 1/4 cup dried chick peas 1 1/2 teaspoons baking soda, divided 1/2 cup tahini 2 tablespoons rough chopped garlic 1/4 cup lemon juice + plus more as needed 1/2 teaspoon kosher salt + more as needed 2 tablespoons ice water + more as needed Optional Garnishes olive oil chopped parsley Niçoise olives extra cooked chick peas red pepper flakes Cook Mode Prevent your screen from going dark Instructions Place dried chickpeas and 1 teaspoon of baking soda in a large bowl. Fill the bowl with enough water to cover the chickpeas by 2-3 inches and soak overnight. Rinse the soaked chickpeas. Place the chickpeas and the remaining 1/2 teaspoon baking soda in a large pot and cover with enough water to cover by 2-3 inches. Bring the chickpeas to a boil, then reduce the heat to a gentle simmer. Cover and cook for 30-45 minutes or until chickpeas smash easily. As the chickpeas cook, skim the surface of the water. Drain the chickpeas and measure out 3 cups. Combine 3 cups of chickpeas, tahini, garlic cloves, lemon juice, and 1/2 teaspoon kosher salt in a food processor. Blend this mixture for 3 minutes. With the machine running, slowly drizzle in the ice water until the hummus is smooth. Taste and adjust the seasoning as needed with additional lemon juice and kosher salt. Notes Check the chickpeas at the 30 minute mark. If they smash easily they are done. Use canned chickpeas, if desired, as a garnish; or remove some of the chickpeas from the pot when cooking prior to the chickpeas reaching the smash easily point. Cook the chickpeas ahead of time and store them in the fridge. They will keep for 3-5 days after cooking. Freezing cooked chickpeas is another option. Drain off the liquid, lay the chickpeas in a single layer on a sheet tray and freeze. Once frozen, transfer to a container. Frozen chickpeas will keep well for 3 months. Did you make this recipe? Tag @lifeatthetable on Instagram and hashtag it #whatsfordinner window.trCommon={"minRating":6,"ajaxurl":"https:\/\/lifeatthetable.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":175419026}; 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+d2<=D){d1+=d2;n1+=n2;d2=D+1}else if(d1>d2){d2=D+1;}else {d1=D+1;}break}else if(x<m){n2=n1+n2;d2=d1+d2}else{n1=n1+n2;d1=d1+d2}}}if(d1>D){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-A<5e-8){break;}B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){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-convert-button', buttonActiveClass = 'tasty-recipes-convert-button-active', buttons = document.querySelectorAll('.tasty-recipes-convert-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 unitType = button.dataset.unitType; var dataset = 'nf' + unitType.charAt(0).toUpperCase() + unitType.slice(1); var convertables = recipe.querySelectorAll('span[data-nf-original]'); convertables.forEach(function(convertable){ if (typeof convertable.dataset.amountOriginalType === 'undefined' && 'usc' === convertable.dataset.nfOriginal) { if (-1 !== convertable.innerText.indexOf('/')) { convertable.dataset.amountOriginalType = 'frac'; } if (-1 !== convertable.innerText.indexOf('.')) { convertable.dataset.amountOriginalType = 'number'; } Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) { if (-1 !== convertable.innerText.indexOf(vulgar)) { convertable.dataset.amountOriginalType = 'vulgar'; } }); } convertable.innerText = convertable.dataset[dataset]; if (typeof convertable.dataset.unit !== 'undefined') { convertable.dataset.unit = convertable.dataset[dataset + 'Unit']; } if (typeof convertable.dataset.amount !== 'undefined') { convertable.dataset.amount = convertable.dataset[dataset]; if ('metric' === unitType) { convertable.dataset.amountShouldRound = parseInt(convertable.dataset.amount) >= 10 ? 'integer' : 'number'; } else if (typeof convertable.dataset.amountOriginalType !== 'undefined') { convertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType; } else { convertable.dataset.amountShouldRound = false; } convertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable); } if (convertable.classList.contains('nutrifox-unit')) { if ('gram' === convertable.dataset[dataset]) { convertable.innerText = 'grams'; } } }); document.querySelectorAll('.tasty-recipes-scale-button-active').forEach(function(scaleButton){ scaleButton.click(); }); window.tastyRecipesUpdatePrintLink(); }); }); }()); (function(){ document.querySelectorAll('[data-tr-ingredient-checkbox]').forEach(function(el) { var input = el.querySelector('.tr-ingredient-checkbox-container input[type="checkbox"]'); if ( ! input ) { return; } if (input.checked) { el.dataset.trIngredientCheckbox = 'checked'; } el.addEventListener('click', function(event) { if ( 'A' === event.target.nodeName || 'INPUT' === event.target.nodeName || 'LABEL' === event.target.nodeName ) { return; } input.click(); }); input.addEventListener('change', function() { el.dataset.trIngredientCheckbox = input.checked ? 'checked' : ''; }); }); }()); 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 <= 0 ) { return; } for ( const rating of ratings ) { rating.addEventListener( 'click', event => { 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 < this.minRating ) { commentTextarea.setAttribute( 'required', '' ); return; } commentTextarea.removeAttribute( 'required' ); }, maybeSendRating( rating, element ) { if ( this.savingRating === rating ) { return; } this.savingRating = rating; window.TastyRecipes.staticTooltip.init( element ); const recipeCardElement = element.closest( '.tasty-recipes' ); if ( ! recipeCardElement ) { window.TastyRecipes.staticTooltip.destroy(); return; } window.TastyRecipes.ajax.sendPostRequest( window.trCommon.ajaxurl, { action: 'tasty_recipes_save_rating', rating, nonce: window.trCommon.ratingNonce, post_id: window.trCommon.postId, recipe_id: recipeCardElement.dataset.trId, }, ( response ) => { 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 ); }); The post Hummus appeared first on Life At The Table .…
A
A Savory Moment by Life At The Table

Dive Into The World of Shrimp al Ajillo Would you like to add the power of the Mediterranean diet to your cooking repertoire that is quick and easy? Of course you do. And I have the perfect recipe. Shrimp al Ajillo. It’s a dish that has charmed palates around the world with its simplicity and robust flavor. This classic Spanish tapa, one of my favorites, features succulent shrimp cooked in olive oil, garlic, and chili peppers. Did I mention garlic, my favorite allium vegetable? Oh yes, I did. The Tapas Tradition Tapas, small plates of food served with drinks, are a beloved Spanish tradition. The word “tapas” is a derivative of the the Spanish verb “taper” meaning “to cover”. Historically, plates with slices of bread or ham were used to cover drinks in Spanish bars preventing flies from getting in. Over time these dishes, or “covers”, evolved into small, flavorful shareable plates we now know as tapas. The Garlic Factor Shrimp al Ajillo is one of my favorite tapas. Why? Because of my favorite vegetable of all time – garlic. The name “al ajillo” translates to “with garlic” and garlic is indeed the co-star of this dish, so don’t skimp on it. Garlic is a medicinal wonder that has been used for years and it’s beloved for its culinary versatility. Garlic imparts a distinctive, robust flavor, pungent when raw, sweet when cooked, that transforms any dish graced with its presence. And I love it. Shrimp al Ajillo: A Flavorful Spanish Delight Shrimp and garlic are the perfect pair in this easy to make dish. Use 16/20 shrimp for this dish; the numbers simply mean there are 16-20 shrimp in a pound. This large size is substantial enough to stand up to the bold flavors of garlic without being overwhelmed. And there’s less risk for overcooking large shrimp because of their size. The delightful kick of garlic is the perfect pairing for the natural sweetness of the shrimp. Add to this olive oil, a bit of white wine, fresh parsley, and a bit of heat from red pepper flakes. Can you say, “Tastebuds happy dance!”? Once prepped this dish takes less than 10 minutes to cook. How to Tell When You’re Shrimp are Perfectly Cooked Shrimp are quick-cooking seafood delights. Here are four indicators that your shrimp are perfectly cooked: The shrimp are firm to the touch, but still springy, not mushy. The shrimp are opaque in color with a pink or orange tint, depending on the variety of the shrimp. Once cooked, shrimp should be juicy and succulent, not dry or rubbery. Grab your apron and bring the Mediterranean to your table. Other shrimp dishes you may be interested in trying: Cajun Shrimp and Grits Shrimp Creole You can book a Shrimp al Ajillo happy hour class. More details here: Shrimp al Ajillo and Sangria Virtual Cooking Class Print Shrimp al Ajillo Print Recipe Pin Recipe const share_pin_buttons = document.getElementsByClassName( 'share-pin button' ); if ( share_pin_buttons ) { for ( let share_key = 0; share_key < share_pin_buttons.length; share_key++ ) { share_pin_buttons[share_key].addEventListener( 'click', (e) => { e.stopPropagation(); window.open(e.target.dataset.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=500'); return false; } ); } } This simple Spanish tapa packs a ton of flavor with the oh, so tasty, humble star of the garden, garlic, paired with sweet, succulent shrimp. Author: Chef Sandra Lewis Prep Time: 10 minutes Cook Time: 10 minutes Total Time: 20 minutes Yield: 4-6 servings Ingredients Units USM 1 lb 16/20 shrimp, peeled and deveined 1/2 cup extra virgin olive oil 10 cloves of garlic, sliced thin 3 tablespoons white wine 1 lemon for juicing 1/2 teaspoon red pepper flakes fresh parsley or cilantro, chopped kosher salt Cook Mode Prevent your screen from going dark Instructions Heat a skillet large enough to hold the shrimp in one layer over medium-high heat. When the skillet is hot, add the olive oil and sliced garlic. Season with a pinch of kosher salt. Reduce the heat and gently sauté the garlic for about a minute. Add the shrimp to the skillet in one layer; season the shrimp with kosher salt. Add the white wine. As the shrimp begin to pink up on the bottom side (about 1 1/2 – 2 minutes), flip to the other side and cook just until the shrimp are cooked through. Transfer the shrimp to a plate and pour the olive oil and white wine mixture over the top. Squeeze fresh lemon juice over the top of the shrimp. Garnish with the garlic, red pepper flakes, and parsley or cilantro. Notes You’re going to want to have some hot, crusty bread on hand to soak up all the deliciousness from the olive oil, garlic, white wine, and lemon juice. If you have more shrimp than will fit in a single layer, cook the shrimp in batches adding the white wine in with the last batch of shrimp. Did you make this recipe? Tag @lifeatthetable on Instagram and hashtag it #whatsfordinner window.trCommon={"minRating":6,"ajaxurl":"https:\/\/lifeatthetable.com\/wp-admin\/admin-ajax.php","ratingNonce":"","postId":175419003}; 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+d2<=D){d1+=d2;n1+=n2;d2=D+1}else if(d1>d2){d2=D+1;}else {d1=D+1;}break}else if(x<m){n2=n1+n2;d2=d1+d2}else{n1=n1+n2;d1=d1+d2}}}if(d1>D){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-A<5e-8){break;}B=1/(B-A);P_2=P_1;P_1=P;Q_2=Q_1;Q_1=Q}if(Q>D){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-convert-button', buttonActiveClass = 'tasty-recipes-convert-button-active', buttons = document.querySelectorAll('.tasty-recipes-convert-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 unitType = button.dataset.unitType; var dataset = 'nf' + unitType.charAt(0).toUpperCase() + unitType.slice(1); var convertables = recipe.querySelectorAll('span[data-nf-original]'); convertables.forEach(function(convertable){ if (typeof convertable.dataset.amountOriginalType === 'undefined' && 'usc' === convertable.dataset.nfOriginal) { if (-1 !== convertable.innerText.indexOf('/')) { convertable.dataset.amountOriginalType = 'frac'; } if (-1 !== convertable.innerText.indexOf('.')) { convertable.dataset.amountOriginalType = 'number'; } Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) { if (-1 !== convertable.innerText.indexOf(vulgar)) { convertable.dataset.amountOriginalType = 'vulgar'; } }); } convertable.innerText = convertable.dataset[dataset]; if (typeof convertable.dataset.unit !== 'undefined') { convertable.dataset.unit = convertable.dataset[dataset + 'Unit']; } if (typeof convertable.dataset.amount !== 'undefined') { convertable.dataset.amount = convertable.dataset[dataset]; if ('metric' === unitType) { convertable.dataset.amountShouldRound = parseInt(convertable.dataset.amount) >= 10 ? 'integer' : 'number'; } else if (typeof convertable.dataset.amountOriginalType !== 'undefined') { convertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType; } else { convertable.dataset.amountShouldRound = false; } convertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable); } if (convertable.classList.contains('nutrifox-unit')) { if ('gram' === convertable.dataset[dataset]) { convertable.innerText = 'grams'; } } }); document.querySelectorAll('.tasty-recipes-scale-button-active').forEach(function(scaleButton){ scaleButton.click(); }); window.tastyRecipesUpdatePrintLink(); }); }); }()); (function(){ document.querySelectorAll('[data-tr-ingredient-checkbox]').forEach(function(el) { var input = el.querySelector('.tr-ingredient-checkbox-container input[type="checkbox"]'); if ( ! input ) { return; } if (input.checked) { el.dataset.trIngredientCheckbox = 'checked'; } el.addEventListener('click', function(event) { if ( 'A' === event.target.nodeName || 'INPUT' === event.target.nodeName || 'LABEL' === event.target.nodeName ) { return; } input.click(); }); input.addEventListener('change', function() { el.dataset.trIngredientCheckbox = input.checked ? 'checked' : ''; }); }); }()); 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 <= 0 ) { return; } for ( const rating of ratings ) { rating.addEventListener( 'click', event => { 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 < this.minRating ) { commentTextarea.setAttribute( 'required', '' ); return; } commentTextarea.removeAttribute( 'required' ); }, maybeSendRating( rating, element ) { if ( this.savingRating === rating ) { return; } this.savingRating = rating; window.TastyRecipes.staticTooltip.init( element ); const recipeCardElement = element.closest( '.tasty-recipes' ); if ( ! recipeCardElement ) { window.TastyRecipes.staticTooltip.destroy(); return; } window.TastyRecipes.ajax.sendPostRequest( window.trCommon.ajaxurl, { action: 'tasty_recipes_save_rating', rating, nonce: window.trCommon.ratingNonce, post_id: window.trCommon.postId, recipe_id: recipeCardElement.dataset.trId, }, ( response ) => { 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 ); }); The post Shrimp al Ajillo appeared first on Life At The Table .…
A
A Savory Moment by Life At The Table

Break out of your boring dinner time routine and make this simple and flavor-filled Fiji Chicken Curry. Your tastebuds are going to love it. The post Fiji Chicken Curry appeared first on Life At The Table .
This spectacular and easy-to-make lentil salad with a Greek ladolemono dressing will make your tastebuds dance. The post Lentil Salad with Ladolemono appeared first on Life At The Table .
This Smash Burger Slider with Bacon and Avocado will knock your socks off with taste and how easy they are to pull together on a weeknight. The post Smash Burger Sliders With Bacon and Avocado appeared first on Life At The Table .
A
A Savory Moment by Life At The Table

Roasted broccolini has a sweet, mild flavor, and crisp texture that makes it a beautiful side dish to any protein or as the star of the show. The post Roasted Broccolini appeared first on Life At The Table .
A
A Savory Moment by Life At The Table

This simple salsa fresca with lime and cilantro is refreshing and easy to make. Serve it on tacos, grilled meats, or as a dip with chips. The post Salsa Fresca appeared first on Life At The Table .
Willkommen auf Player FM!
Player FM scannt gerade das Web nach Podcasts mit hoher Qualität, die du genießen kannst. Es ist die beste Podcast-App und funktioniert auf Android, iPhone und im Web. Melde dich an, um Abos geräteübergreifend zu synchronisieren.