Home Blog Page 61

Orange Olive Oil Cake

0
An aerial view of just the left side of a rectangular an Orange Olive Oil Cake
The beauty of baking with olive oil is that it enhances and elevates flavors and allows for the nuance of ingredients to spring forward.

The beauty of baking with olive oil is that it enhances and elevates flavors and allows for the nuance of ingredients to spring forward. And you would be right to imagine that the taste and fragrance of orange take center stage in this impossibly moist and scrumptious cake.

Orange Olive Oil Cake Recipe

INGREDIENTS

1 1/3 cups Liokareas Orange Olive Oil
3 eggs
1 1/4 cups whole milk
1 1/2 tablespoons grated orange zest
1 finely sliced orange
1/4 cup orange freshly squeezed juice
1 tsp lemon or orange extract
2 tsp ground cardamom
1/4 tsp poppy seeds (optional)
1 3/4 cups granulated sugar
1 1/2 cups all-purpose flour
1/2 cup cake flour
1 1/2 teaspoons kosher salt, or to taste
1/2 teaspoon baking powder
1/2 teaspoon baking soda
1 1/2 cup lemon curd

INSTRUCTIONS

  1. Preheat oven to 325F. Grease a loaf pan and line it with parchment paper. Brush the paper with butter. Arrange thin orange slices on the bottom of the paper-lined pan. If desired, sprinkle some poppy seeds into the spaces in between the slices. Set aside.
  2. In a mixing bowl, beat olive oil and eggs together. Add milk, orange zest, orange juice, orange extract, and cardamom, and beat together. Once well combined, add sugar and beat for a minute more.
  3. Now add flour, salt, baking powder, and baking soda and beat on low just long enough to blend.
  4. Pour batter gently into the pan so that you don’t disturb the orange slices. Bake for 60 minutes. Test with a wooden skewer and continue to bake until the skewer emerges clean from the loaf.
  5. Remove from oven. Gently insert a spatula between the paper and the pan to loosen. Let cool to room temperature before lifting the loaf out of the pan. Gently and slowly remove the parchment paper. Flip over onto a platter so that the orange slices are on top.
  6. Warm the lemon over a low flame, stirring until it is loose and glaze-like. Spoon over the top of the loaf, letting the lemon curd drip generously down the sides.
  7. Serve with a dollop of whipped cream. Garnish with edible flowers or fresh citrus zest.

RECIPE AND STYLING BY KEITH RECKER / PHOTOGRAPHY BY DAVE BRYCE

Subscribe to TABLE Magazine‘s print edition.

Niçoise Salad with Creamy Avocado‑Dill Dressing

0
Nicoise Salad with Creamy Avocado Dill dressing in a greenish ceramic plate with a fork, a half avocado, and a steel fork on the sides. A glass of water at the top right.

It’s impossible to be in a bad mood while eating a Niçoise salad, especially one with an avocado dressing. The flavors and textures (briny, salty, creamy) fly off the plate with this recipe and will assuredly keep you happy.

What is a Nicoise Salad?

A Niçoise Salad (pronounced “nee-SWAHZ”) is a classic French salad originating from the city of Nice. It’s renowned for its vibrant presentation and fresh, Mediterranean flavors. While variations exist, a traditional salad typically features a bed of crisp greens (often lettuce), topped with a colorful array of fresh or lightly cooked vegetables like ripe tomatoes, blanched green beans, boiled potatoes, and sometimes bell peppers. The key protein components usually include oil-packed tuna (canned or jarred, not fresh seared tuna in the classic version) and hard-boiled eggs. The salad is often finished with briny Niçoise olives, capers, and dressed simply with a vinaigrette.

Recipe by Anna Franklin
Photography by Dave Bryce

Subscribe to TABLE Magazine’s print edition.

Pain Perdu

0
Our pain perdu recipe is a sweet and smoky surprise.

TABLE Magazine takes comfort food seriously. Well, the truth is that we take all food seriously, but it’s especially true when we can take ingredients past their prime and transform them into something delicious. Our riff on the classic Pain Perdu or French Toast comes with a little boozy kiss of both comfort and joy, and it’s not even the holiday season!

PAIN PERDU RECIPE

Ingredients
4 eggs
3 tbsp granulated sugar
1 tsp vanilla extract
1 tsp ground cinnamon
1 tsp nutmeg
1 tsp grated orange zest
2 tsp kosher salt
1/4 cup half heavy cream
3/4 ounces aged bourbon
Day-old bread loaf, challah, or french bread
Unsalted butter
1/2 pint fresh blueberries
2 ripe bananas
Maple Syrup
Powdered Sugar

Directions

  • In a large bowl, whisk together the eggs, sugar, vanilla extract, heavy cream, cinnamon, nutmeg, orange zest, bourbon, and salt.
    Slice the bread into thick slices.

  • Pour the egg mixture into a large baking pan and soak a few slices of bread for 4 minutes, turning once.

  • Heat saute pan over medium heat. Add butter. Take each slice of bread and place it in the saute pan. Cook for three minutes on each side until browned.

  • Add butter into the pan as needed and continue to cook the remaining slices.

  • Sprinkle with powdered sugar, and a touch of syrup. Serve hot with blueberries and bananas.

Story and Recipe by Gabe Gomez

Chilaquiles Verdes

0
Chilaquiles Verdes will add a delicious option to your menu items at home.

Recipes for chilaquiles originated in the regional kitchens of Mexico as a way of combining two ubiquitous staple food items: corn tortillas and salsa. As a way to resuscitate day-old corn tortillas by lightly frying them in oil and smothering them in red or green salsa, its simplicity opened the door to countless interpretations. Recipes for chilaquiles first appeared in cookbooks in the 1800’s, and can be found on breakfast and brunch menus just about anywhere. Once you get your bearings on the basics below, we want to encourage you to play with your food!

Chilaquiles Verdes Recipe

Ingredients
2 pounds fresh tomatillos, husked and rinsed
2 large jalapeño chiles
1 medium white onion, quartered
2 large garlic cloves
1 large lime
1 bunch cilantro
1 bay leaf
1 tbs dried Mexican oregano
2 tablespoons olive oil
2 cups chicken or vegetable broth
Pinch of Salt
4 large eggs
12 thick corn tortillas
2 cups vegetable oil

For Serving (optional)

Chopped cilantro
Crumbled queso fresco
Red onion, sliced
Avocado, sliced
Mexican Crema

Instructions

  1. Place tomatillos, jalapenos, garlic, and onion in a cast iron skillet. Roast on high heat for five minutes until the vegetables blister and soften evenly. Remove from heat and let cool.

  2. Once the vegetables are cool, add tomatillos, jalapenos, garlic, onion, cilantro, salt, and cumin into a blender. Squeeze entire lime over vegetables and blend.

  3. In a heated saucepan, add the olive oil, broth, blended vegetable purée, oregano, and bay leaf. Stir in low to medium heat for 15 minutes.

  4. While the salsa cooks, add vegetable oil to a fresh saucepan. Heat to 350 degrees. Cut tortillas into wedges and fry in oil in batches for two minutes. Be careful not to let the wedges stick. Remove from oil and rest on paper towel

  5. Beat eggs in a bowl and add a pinch of salt. Gently fold eggs into the salsa and cook until the eggs are set into a creamy consistency.

  6. Slowly stir in tortilla chips and completely coat each chip. Remove from heat.

  7. Plate chips and add queso fresco, cilantro, red onion, creama, and avocado. Serve immediately.

Story and Recipe by Gabe Gomez

Don’t miss a single delicious thing: Subscribe to TABLE Magazine here!

Chocolate Martini

0
chocolate martini on the edge of a table dressed in a red tablecloth

As the weekend approaches (or really anytime), you need a velvety elixir infused with the seductive charm of rich chocolate, mingling harmoniously with the tantalizing notes of premium vodka. This, my friends, is the Chocolate Martini — a cocktail that transcends ordinary boundaries and is fantastically easy to make. Whether shared amongst friends or savored in solitude, this promises to enchant your taste buds. Cheers to the seductive power of chocolate and you!

Chocolate Martini vs. Brandy Alexander

This Chocolate Martini takes some inspiration from the Brandy Alexander, an after-dinner dessert cocktail with cognac and créme de cacao. What makes this a martini vs. an Alexander is the presence of vodka, rather than cognac. Brandy cocktails are typically dessert cocktails, whereas a martini can be sipped more comfortably alongside food. If you want another take on this, try our Chocolate Espresso Martini.

Print

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

chocolate martini on the edge of a table dressed in a red tablecloth

Chocolate Martini


5 Stars 4 Stars 3 Stars 2 Stars 1 Star


  • Author:
    Gabe Gomez

Description

A cocktail to delight the senses.


Ingredients


Scale


window.trCommon={“minRating”:6,”ajaxurl”:”https://www.tablemagazine.com/wp-admin/admin-ajax.php”,”ratingNonce”:”9092ca9546″,”postId”:4269};
window.TastyRecipes = window.TastyRecipes || {};

window.TastyRecipes.smoothScroll = {
init() {
document.addEventListener( ‘click’, ( e ) => {
let anchor = e.target;
if ( anchor.tagName !== ‘A’ ) {
anchor = anchor.closest( ‘a.tasty-recipes-scrollto’ );
}

if ( ! anchor || ! anchor.classList.contains( ‘tasty-recipes-scrollto’ ) ) {
return;
}

const elementHref = anchor.getAttribute( ‘href’ );
if ( ! elementHref ) {
return;
}

e.preventDefault();
this.goToSelector( elementHref );
});
},
goToSelector( selector ) {
const element = document.querySelector( selector );
if ( ! element ) {
return;
}
element.scrollIntoView( { behavior: ‘smooth’ } );
}
};

document.addEventListener(
‘DOMContentLoaded’,
() => window.TastyRecipes.smoothScroll.init()
);

(function(){

var bothEquals = function( d1, d2, D ) {
var ret = 0;
if (d1<=D) {
ret++;
}
if (d2<=D) {
ret++;
}
return ret === 2;
};

var frac =function frac(x,D,mixed){var n1=Math.floor(x),d1=1;var n2=n1+1,d2=1;if(x!==n1){while(bothEquals(d1,d2,D)){var m=(n1+n2)/(d1+d2);if(x===m){if(d1+d2d2){d2=D+1;}else {d1=D+1;}break}else if(xD){d1=d2;n1=n2}if(!mixed){return[0,n1,d1];}var q=Math.floor(n1/d1);return[q,n1-q*d1,d1]};frac.cont=function cont(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1<D){A=Math.floor(B);P=A*P_1+P_2;Q=A*Q_1+Q_2;if(B-AD){if(Q_1>D){Q=Q_2;P=P_2}else{Q=Q_1;P=P_1}}if(!mixed){return[0,sgn*P,Q];}var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]};

window.tastyRecipesVulgarFractions = JSON.parse(decodeURIComponent(“%7B%22%C2%BC%22%3A%221%2F4%22%2C%22%C2%BD%22%3A%221%2F2%22%2C%22%C2%BE%22%3A%223%2F4%22%2C%22%E2%85%93%22%3A%221%2F3%22%2C%22%E2%85%94%22%3A%222%2F3%22%2C%22%E2%85%95%22%3A%221%2F5%22%2C%22%E2%85%96%22%3A%222%2F5%22%2C%22%E2%85%97%22%3A%223%2F5%22%2C%22%E2%85%98%22%3A%224%2F5%22%2C%22%E2%85%99%22%3A%221%2F6%22%2C%22%E2%85%9A%22%3A%225%2F6%22%2C%22%E2%85%9B%22%3A%221%2F8%22%2C%22%E2%85%9C%22%3A%223%2F8%22%2C%22%E2%85%9D%22%3A%225%2F8%22%2C%22%E2%85%9E%22%3A%227%2F8%22%7D”));

window.tastyRecipesFormatAmount = function(amount, el) {
if ( parseFloat( amount ) === parseInt( amount ) ) {
return amount;
}
var roundType = ‘frac’;
if (typeof el.dataset.amountShouldRound !== ‘undefined’) {
if (‘false’ !== el.dataset.amountShouldRound) {
if ( ‘number’ === el.dataset.amountShouldRound ) {
roundType = ‘number’;
} else if (‘frac’ === el.dataset.amountShouldRound) {
roundType = ‘frac’;
} else if (‘vulgar’ === el.dataset.amountShouldRound) {
roundType = ‘vulgar’;
} else {
roundType = ‘integer’;
}
}
}
if (‘number’ === roundType) {
amount = Number.parseFloat(amount).toPrecision(2);
} else if (‘integer’ === roundType) {
amount = Math.round(amount);
} else if (‘frac’ === roundType || ‘vulgar’ === roundType) {
var denom = 8;
if (typeof el.dataset.unit !== ‘undefined’) {
var unit = el.dataset.unit;
if ([‘cups’,’cup’,’c’].includes(unit)) {
denom = 4;
if (0.125 === amount) {
denom = 8;
}
if (“0.1667″ === Number.parseFloat( amount ).toPrecision(4)) {
denom = 6;
}
}
if ([‘tablespoons’,’tablespoon’,’tbsp’].includes(unit)) {
denom = 2;
}
if ([‘teaspoons’,’teaspoon’,’tsp’].includes(unit)) {
denom = 8;
}
}
var amountArray = frac.cont( amount, denom, true );
var newAmount = ”;
if ( amountArray[1] !== 0 ) {
newAmount = amountArray[1] + ‘/’ + amountArray[2];
if (‘vulgar’ === roundType) {
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (newAmount === window.tastyRecipesVulgarFractions[vulgar]) {
newAmount = vulgar;
}
});
}
}
if ( newAmount ) {
newAmount = ‘ ‘ + newAmount;
}
if ( amountArray[0] ) {
newAmount = amountArray[0] + newAmount;
}
amount = newAmount;
}
return amount;
};

window.tastyRecipesUpdatePrintLink = () => {

const printButton = document.querySelector( ‘.tasty-recipes-print-button’ );

if ( ! printButton ) {
return;
}

const printURL = new URL( printButton.href );
const searchParams = new URLSearchParams( printURL.search );

const unitButton = document.querySelector( ‘.tasty-recipes-convert-button-active’ );
const scaleButton = document.querySelector( ‘.tasty-recipes-scale-button-active’ );

let unit = ”;
let scale = ”;

if ( unitButton ) {
unit = unitButton.dataset.unitType;
searchParams.delete(‘unit’);
searchParams.set( ‘unit’, unit );
}

if ( scaleButton ) {
scale = scaleButton.dataset.amount;
searchParams.set( ‘scale’, scale );
}

const paramString = searchParams.toString();
const newURL = ” === paramString ? printURL.href : printURL.origin + printURL.pathname + ‘?’ + paramString;
const printLinks = document.querySelectorAll( ‘.tasty-recipes-print-link’ );

printLinks.forEach( ( el ) => {
el.href = newURL;
});

const printButtons = document.querySelectorAll( ‘.tasty-recipes-print-button’ );
printButtons.forEach( ( el ) => {
el.href = newURL;
});
};

document.addEventListener( ‘DOMContentLoaded’, () => {

if ( ! window.location.href.includes( ‘/print/’ ) ) {
return;
}

const searchParams = new URLSearchParams( window.location.search );

const unit = searchParams.get( ‘unit’ );
const scale = searchParams.get( ‘scale’ );

if ( unit && ( ‘metric’ === unit || ‘usc’ === unit ) ) {
document.querySelector( ‘.tasty-recipes-convert-button[data-unit-type=”‘ + unit + ‘”]’ ).click();
}

if ( scale && Number(scale) > 0 ) {
document.querySelector( ‘.tasty-recipes-scale-button[data-amount=”‘ + Number(scale) + ‘”]’ ).click();
}
});
}());

(function(){
var buttonClass = ‘tasty-recipes-scale-button’,
buttonActiveClass = ‘tasty-recipes-scale-button-active’,
buttons = document.querySelectorAll(‘.tasty-recipes-scale-button’);
if ( ! buttons ) {
return;
}

buttons.forEach(function(button){
button.addEventListener(‘click’, function(event){
event.preventDefault();
var recipe = event.target.closest(‘.tasty-recipes’);
if ( ! recipe ) {
return;
}
var otherButtons = recipe.querySelectorAll(‘.’ + buttonClass);
otherButtons.forEach(function(bt){
bt.classList.remove(buttonActiveClass);
});
button.classList.add(buttonActiveClass);

var scalables = recipe.querySelectorAll(‘span[data-amount]’);
var buttonAmount = parseFloat( button.dataset.amount );
scalables.forEach(function(scalable){
if (typeof scalable.dataset.amountOriginalType === ‘undefined’
&& typeof scalable.dataset.nfOriginal === ‘undefined’) {
if (-1 !== scalable.innerText.indexOf(‘/’)) {
scalable.dataset.amountOriginalType = ‘frac’;
}
if (-1 !== scalable.innerText.indexOf(‘.’)) {
scalable.dataset.amountOriginalType = ‘number’;
}
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (-1 !== scalable.innerText.indexOf(vulgar)) {
scalable.dataset.amountOriginalType = ‘vulgar’;
}
});
if (typeof scalable.dataset.amountOriginalType !== ‘undefined’) {
scalable.dataset.amountShouldRound = scalable.dataset.amountOriginalType;
}
}
var amount = parseFloat( scalable.dataset.amount ) * buttonAmount;
amount = window.tastyRecipesFormatAmount(amount, scalable);
if ( typeof scalable.dataset.unit !== ‘undefined’ ) {
if ( ! scalable.classList.contains(‘nutrifox-quantity’) ) {
if ( ! scalable.classList.contains(‘nutrifox-second-quantity’) ) {
amount += ‘ ‘ + scalable.dataset.unit;
}
}
}
scalable.innerText = amount;
});

var nonNumerics = recipe.querySelectorAll(‘[data-has-non-numeric-amount]’);
nonNumerics.forEach(function(nonNumeric){
var indicator = nonNumeric.querySelector(‘span[data-non-numeric-label]’);
if ( indicator ) {
nonNumeric.removeChild(indicator);
}
if ( 1 !== buttonAmount ) {
indicator = document.createElement(‘span’);
indicator.setAttribute(‘data-non-numeric-label’, true);
var text = document.createTextNode(‘ (x’ + buttonAmount + ‘)’);
indicator.appendChild(text);
nonNumeric.appendChild(indicator);
}
});

window.tastyRecipesUpdatePrintLink();
});
});
}());

window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.cookMode = {
wakeLockApi: false,
wakeLock: false,
cookModeSelector: ‘.tasty-recipes-cook-mode’,
init() {
if (“wakeLock” in navigator && “request” in navigator.wakeLock) {
this.wakeLockApi = navigator.wakeLock;
}

const cookModes = document.querySelectorAll(this.cookModeSelector);

if (cookModes.length > 0) {
for (const cookMode of cookModes) {
if (this.wakeLockApi) {
cookMode.querySelector(‘input[type=”checkbox”]’).addEventListener(“change”, event => {
this.checkboxChange(event.target);
}, false);
} else {
cookMode.style.display = “none”;
}
}
}
},
checkboxChange(checkbox) {
if (checkbox.checked) {
this.lock();
} else {
this.unlock();
}
},
setCheckboxesState(state) {
const checkboxes = document.querySelectorAll(this.cookModeSelector + ‘ input[type=”checkbox”]’);
for (const checkbox of checkboxes) {
checkbox.checked = state;
}
},
async lock() {
try {
this.wakeLock = await this.wakeLockApi.request(“screen”);
this.wakeLock.addEventListener(“release”, () => {
this.wakeLock = false;
this.setCheckboxesState(false);
});
this.setCheckboxesState(true);
} catch (error) {
this.setCheckboxesState(false);
}
},
unlock() {
if (this.wakeLock) {
this.wakeLock.release();
this.wakeLock = false;
}
this.setCheckboxesState(false);
}
};

(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
document.addEventListener(“DOMContentLoaded”, callback);
}
})(() => {
window.TastyRecipes.cookMode.init();
});

window.TastyRecipes = window.TastyRecipes || {};

window.TastyRecipes.staticTooltip = {
element: null,
tooltipElement: null,
deleting: false,
init( element ) {
if ( this.deleting ) {
return;
}
this.element = element;
this.buildElements();
},
destroy() {
if ( ! this.tooltipElement || this.deleting ) {
return;
}

this.deleting = true;
this.tooltipElement.classList.remove( ‘opened’ );

setTimeout( () => {
this.tooltipElement.remove();
this.deleting = false;
}, 500 );
},
buildElements() {
const tooltipElement = document.createElement( ‘div’ );
tooltipElement.classList.add( ‘tasty-recipes-static-tooltip’);
tooltipElement.setAttribute( ‘id’, ‘tasty-recipes-tooltip’ );

const currentTooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
if ( currentTooltipElement ) {
document.body.replaceChild( tooltipElement, currentTooltipElement );
} else {
document.body.appendChild( tooltipElement );
}

this.tooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
},
show() {
if ( ! this.tooltipElement ) {
return;
}

const tooltipTop = this.element.getBoundingClientRect().top
+ window.scrollY
– 10 // 10px offset.
– this.tooltipElement.getBoundingClientRect().height;
const tooltipLeft = this.element.getBoundingClientRect().left
– ( this.tooltipElement.getBoundingClientRect().width / 2 )
+ ( this.element.getBoundingClientRect().width / 2 ) – 1;
const posLeft = Math.max( 10, tooltipLeft );
this.maybeRemoveTail( posLeft !== tooltipLeft );

this.tooltipElement.setAttribute( ‘style’, ‘top:’ + tooltipTop + ‘px;left:’ + posLeft + ‘px;’ );
this.tooltipElement.classList.add( ‘opened’ );

},
maybeRemoveTail( removeTail ) {
if ( removeTail ) {
this.tooltipElement.classList.add( ‘tr-hide-tail’ );
} else {
this.tooltipElement.classList.remove( ‘tr-hide-tail’ );
}
},
changeMessage( message ) {
if ( ! this.tooltipElement ) {
return;
}
this.tooltipElement.innerHTML = message;
}
};

window.TastyRecipes.ajax = {
sendPostRequest( url, data, success, failure ) {
const xhr = new XMLHttpRequest();
xhr.open( ‘POST’, url, true );
xhr.send( this.preparePostData( data ) );

xhr.onreadystatechange = () => {
if ( 4 !== xhr.readyState ) {
return;
}
if ( xhr.status === 200 ) {
success( JSON.parse( xhr.responseText ) );
return;
}

failure( xhr );
};

xhr.onerror = () => {
failure( xhr );
};
},
preparePostData( data ) {
const formData = new FormData();

for ( const key in data ) {
formData.append( key, data[key] );
}
return formData;
},
};

window.TastyRecipes.ratings = {
defaultRating: 0,
currentRatingPercentage: 100,
savingRating: false,
init( minRating ) {
this.minRating = minRating;

this.formWatchRating();
this.closeTooltipWhenClickOutside();
this.addBodyClassBasedOnSelectedRating();
this.backwardCompFormRatingPosition();
},
formWatchRating() {
const ratings = document.querySelectorAll(‘.tasty-recipes-no-ratings-buttons [data-rating]’);
if ( ratings.length {
event.preventDefault();
this.defaultRating = event.target.closest( ‘.checked’ ).dataset.rating;
this.setCheckedStar( event.target );
this.maybeSendRating( this.defaultRating, event.target );
this.setRatingInForm( this.defaultRating );
} );
}
},
closeTooltipWhenClickOutside() {
window.addEventListener( ‘click’, e => {
// Bailout (don’t remove the tooltip) when the clicked element is a rating star, or it’s the tooltip itself.
if ( e.target.closest( ‘.tasty-recipes-rating’ ) || e.target.classList.contains( ‘tasty-recipes-static-tooltip’ ) ) {
return;
}

window.TastyRecipes.staticTooltip.destroy();
} );
},
setRatingInForm( rating ) {
const ratingInput = document.querySelector( ‘#respond .tasty-recipes-rating[value=”‘ + rating + ‘”]’ );
if ( ! ratingInput ) {
return;
}
ratingInput.click();
},
addBodyClassBasedOnSelectedRating() {
const ratingInputs = document.querySelectorAll( ‘input.tasty-recipes-rating’ );
if ( ! ratingInputs ) {
return;
}
for ( const ratingInput of ratingInputs ) {
ratingInput.addEventListener( ‘click’, currentEvent => {
const selectedRating = currentEvent.target.getAttribute( ‘value’ );
this.handleBodyClassByRating( selectedRating );
this.toggleCommentTextareaRequired( selectedRating );
} );
}
},
handleBodyClassByRating( rating ) {
if ( rating < this.minRating ) {
document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );
return;
}
document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );
},
toggleCommentTextareaRequired( rating ) {
const commentTextarea = document.getElementById( 'comment' );
if ( ! commentTextarea ) {
return;
}

if ( rating {
window.TastyRecipes.staticTooltip.changeMessage( response.data.message );
window.TastyRecipes.staticTooltip.show();
this.updateAverageText( response.data, recipeCardElement );
this.maybeFillCommentForm( response.data );

// Hide the tooltip after 5 seconds.
setTimeout( () => {
this.maybeResetTooltip( recipeCardElement, response.data, rating );
}, 5000 );
},
() => {
this.resetTooltip( recipeCardElement );
}
);
},
updateAverageText( data, recipeCardElement ) {
if ( ! data.average ) {
return;
}
this.setRatingPercent( data );

if ( ! data.count ) {
return;
}

const quickLink = document.querySelector( ‘.tasty-recipes-rating-link’ );
if ( quickLink ) {
this.setTextInContainer( quickLink, data );
this.setPartialStar( quickLink );
}

const cardStars = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
cardStars.dataset.trDefaultRating = data.average;
this.setTextInContainer( recipeCardElement.querySelector( ‘.tasty-recipes-rating’ ), data );
},
setTextInContainer( container, data ) {
if ( ! container ) {
return;
}

if ( data.label ) {
const ratingLabelElement = container.querySelector( ‘.rating-label’ );
if ( ratingLabelElement ) {
ratingLabelElement.innerHTML = data.label;
}
return;
}

const averageElement = container.querySelector( ‘.average’ );
if ( averageElement ) {
averageElement.textContent = data.average;
}

const countElement = container.querySelector( ‘.count’ );
if ( countElement ) {
countElement.textContent = data.count;
}
},
setPartialStar( container ) {
const highestStar = container.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( highestStar ) {
highestStar.dataset.trClip = this.currentRatingPercentage;
}
},
setRatingPercent( data ) {
this.defaultRating = data.average.toFixed( 1 );
const parts = data.average.toFixed( 2 ).toString().split( ‘.’ );
this.currentRatingPercentage = parts[1] ? parts[1] : 100;
if ( this.currentRatingPercentage === ’00’ ) {
this.currentRatingPercentage = 100;
}
},
setCheckedStar( target ) {
const cardRatingContainer = target.closest( ‘.tasty-recipes-ratings-buttons’ );
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( selectedRatingElement ) {
delete selectedRatingElement.dataset.trChecked;
}

const thisStar = target.closest( ‘.tasty-recipes-rating’ );
thisStar.dataset.trChecked = 1;
thisStar.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = 100;
},
maybeFillCommentForm( data ) {
if ( ! data.comment || ! data.comment.content ) {
return;
}

const commentForm = document.querySelector( ‘#commentform’ );
if ( ! commentForm ) {
return;
}

const commentBox = commentForm.querySelector( ‘[name=comment]’ );
if ( ! commentBox || commentBox.value ) {
return;
}

// Add comment details for editing.
commentBox.innerHTML = data.comment.content;
if ( data.comment.name ) {
commentForm.querySelector( ‘[name=author]’ ).value = data.comment.name;
commentForm.querySelector( ‘[name=email]’ ).value = data.comment.email;
}
},
maybeResetTooltip( recipeCardElement, data, rating ) {
if ( this.savingRating === rating ) {
this.resetTooltip( recipeCardElement, data );
}
},
resetTooltip( recipeCardElement, data ) {
window.TastyRecipes.staticTooltip.destroy();
this.savingRating = false;

// Reset the default rating.
const cardRatingContainer = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
if ( cardRatingContainer ) {
this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;
cardRatingContainer.dataset.trDefaultRating = this.defaultRating;

this.resetSelectedStar( cardRatingContainer, data );
}
},
resetSelectedStar( cardRatingContainer ) {
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( selectedRatingElement ) {
selectedRatingElement.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = this.currentRatingPercentage;
selectedRatingElement.parentNode.dataset.trChecked = 1;
}

const previousSelectedElement= cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( previousSelectedElement ) {
const currentSelectedRating = previousSelectedElement.querySelector(‘[data-rating]’);
if ( currentSelectedRating !== selectedRatingElement ) {
delete previousSelectedElement.dataset.trChecked;
}
}
},
backwardCompFormRatingPosition() {
const ratingsButtons = document.querySelector( ‘#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons’ );
if ( ! ratingsButtons ) {
return;
}
const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);
if ( ! ratingsButtonsStyles.display.includes( ‘flex’ ) ) {
ratingsButtons.style.direction = ‘rtl’;
}

if ( typeof tastyRecipesRating !== ‘undefined’ ) {
// Select the rating that was previously selected in admin.
ratingsButtons.querySelector( ‘.tasty-recipes-rating[value=”‘ + tastyRecipesRating + ‘”]’ ).checked = true;
}

const ratingSpans = ratingsButtons.querySelectorAll( ‘.tasty-recipes-rating’ );
for (const ratingSpan of ratingSpans) {
ratingSpan.addEventListener( ‘click’, event => {
if ( ratingSpan === event.target ) {
return;
}
ratingSpan.previousElementSibling.click();
} );
}
}
};

(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );
});

Directions

  1. Chill a martini glass in the freezer for a few minutes.
  2. In a cocktail shaker, combine the vodka, chocolate liqueur, and cream.
  3. Add a handful of ice cubes to the shaker and close it tightly.
  4. Shake vigorously for 15-20 seconds to thoroughly mix and chill the ingredients.
  5. Take the martini glass out of the freezer and strain the cocktail into the glass.
  6. Garnish with shavings or powder.

Recipe by Gabe Gomez
Photo by Maurese 

Subscribe to TABLE Magazine’s print edition.

Vegan Mexican Chocolate Tart

0
Vegan Mexican Chocolate Tart served on a brown plate, which is placed on two partially-burnt papers Three small glasses, a knife, and a small bowl of sugar on the sides

This dairy-free, gluten-free, and high-protein Mexican chili-chocolate tart uses plant-based ingredients like walnut butter and healthier takes like rich dark chocolate. Spiced with cayenne pepper and cinnamon and topped with toasted meringue, it’s the perfect sweet and spicy treat. This exquisite dessert also features a velvety chocolate ganache made with smooth coconut cream and dark chocolate, artfully layered atop a crisp and crumbly crust. Whether enjoyed as a special occasion dessert or a decadent treat for yourself, this Vegan Mexican Chocolate Tart is sure to impress.

When Did Spice Start Being Added to Chocolate?

The use of spices in chocolate has a long and rich history, predating the arrival of Europeans in the Americas. Pre-Columbia, the ancient Mayans and Aztecs, who cultivated and consumed chocolate centuries before the arrival of Europeans, incorporated spices like chili peppers, vanilla, and achiote seeds into their chocolate beverages. After years and years of innovation, it has led us to use some of the same practices in our spicy Vegan Mexican Chocolate Tart.

Print

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

Vegan Mexican Chocolate Tart served on a brown plate, which is placed on two partially-burnt papers Three small glasses, a knife, and a small bowl of sugar on the sides

Vegan Mexican Chocolate Tart


5 Stars 4 Stars 3 Stars 2 Stars 1 Star


  • Author:
    Mikyla Meckelson

Description

With a bit of a spicy kick, you might just crave two slices of this vegan dessert.


Ingredients


Scale

For the crust:

  • 1 1/4 cup graham crackers
  • 1/2 cup Mexican Hot Cocoa Cracklins
  • 3 tbsp organic cane sugar
  • 6 tbsp vegan butter, melted
  • 1/4 tsp ground cayenne pepper

For the dark chocolate chili tart:

  • 3/4 cup coconut cream
  • 1/4 tsp vanilla
  • 1/4 tsp salt
  • 1/4 cup walnut butter*
  • 1/4 tsp ground cayenne pepper
  • 3 1/2 oz dark chocolate
  • 1/4 tsp ground cinnamon
  • 1/8 tsp ground chili powder
  • 1 cup powdered sugar

For the toasted meringue topping:

  • 1 can of chickpeas-drained and reserve the liquid for the aquafaba
  • 3 tbsp of cane sugar
  • 1/4 tsp cream of tartar


Instructions

  1. Preheat the oven to 350 degrees and then blend together the graham crackers and cracklins until a fine sand-like powder. Or simply add more graham crackers if omitting cracklins.
  2. Next, melt the vegan butter. In a small bowl combine the crushed graham crackers, cracklins (optional), cayenne, and melted butter and stir.
  3. Grease a 9″ tart dish and then transfer the crust mixture to the dish. Press the crumbs down firmly until the entire base is coated evenly with the crust mixture.
  4. Bake the crust for 10 minutes and then remove it from the oven to allow it to cool completely before filling it with the chocolate.
  5. While the crust is baking begin making the chocolate filling. Using a double boiler to avoid burning the chocolate, slowly melt the dark chocolate.
  6. In a large bowl, combine the coconut cream, walnut butter, cayenne, chili, and cinnamon. Stir well and then sift the powdered sugar into the bowl and stir again.
  7. When the chocolate is glossy and smooth transfer the chocolate to the coconut cream slowly stirring continuously until fully incorporated. Make sure to whisk out any powdered sugar clumps!
  8. Then pour the chocolate mixture into the cooled crust and transfer to the fridge for about an hour or until the chocolate is set and solid.
  9. Keep the tart in a cool place or in the fridge while you make the vegan meringue.
  10. Pour the entire liquid from one can of chickpeas or known as aquafaba (see post for more details on aquafaba) into a large bowl or mixing bowl. Whip the aquafaba on low-medium speed for 1 minute.
  11. Then increase the speed to medium for about 3 minutes and then slightly increase the speed for the last 2 minutes. Really you can’t overbeat aquafaba so don’t worry! You want it to turn into a fluffy white texture that stands up on its own when you stick a spoon into it and pull it out.
  12. Next, add in the cream of tartar and the sugar and stir once more.
  13. Then scoop the meringue onto the tart and spread evenly. Use the back of your spoon to lift up pieces of the meringue into peaks that you will toast.
  14. Using a small kitchen hand torch, scorch the top of the meringue until brown and toasty!

window.trCommon={“minRating”:6,”ajaxurl”:”https://www.tablemagazine.com/wp-admin/admin-ajax.php”,”ratingNonce”:”e2d1901e73″,”postId”:3486};
window.TastyRecipes = window.TastyRecipes || {};

window.TastyRecipes.smoothScroll = {
init() {
document.addEventListener( ‘click’, ( e ) => {
let anchor = e.target;
if ( anchor.tagName !== ‘A’ ) {
anchor = anchor.closest( ‘a.tasty-recipes-scrollto’ );
}

if ( ! anchor || ! anchor.classList.contains( ‘tasty-recipes-scrollto’ ) ) {
return;
}

const elementHref = anchor.getAttribute( ‘href’ );
if ( ! elementHref ) {
return;
}

e.preventDefault();
this.goToSelector( elementHref );
});
},
goToSelector( selector ) {
const element = document.querySelector( selector );
if ( ! element ) {
return;
}
element.scrollIntoView( { behavior: ‘smooth’ } );
}
};

document.addEventListener(
‘DOMContentLoaded’,
() => window.TastyRecipes.smoothScroll.init()
);

(function(){

var bothEquals = function( d1, d2, D ) {
var ret = 0;
if (d1<=D) {
ret++;
}
if (d2<=D) {
ret++;
}
return ret === 2;
};

var frac =function frac(x,D,mixed){var n1=Math.floor(x),d1=1;var n2=n1+1,d2=1;if(x!==n1)while(bothEquals(d1,d2,D)){var m=(n1+n2)/(d1+d2);if(x===m){if(d1+d2d2)d2=D+1;else d1=D+1;break}else if(xD){d1=d2;n1=n2}if(!mixed)return[0,n1,d1];var q=Math.floor(n1/d1);return[q,n1-q*d1,d1]};frac.cont=function cont(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1<D){A=Math.floor(B);P=A*P_1+P_2;Q=A*Q_1+Q_2;if(B-AD){if(Q_1>D){Q=Q_2;P=P_2}else{Q=Q_1;P=P_1}}if(!mixed)return[0,sgn*P,Q];var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]};

window.tastyRecipesVulgarFractions = JSON.parse(decodeURIComponent(“%7B%22%C2%BC%22%3A%221%2F4%22%2C%22%C2%BD%22%3A%221%2F2%22%2C%22%C2%BE%22%3A%223%2F4%22%2C%22%E2%85%93%22%3A%221%2F3%22%2C%22%E2%85%94%22%3A%222%2F3%22%2C%22%E2%85%95%22%3A%221%2F5%22%2C%22%E2%85%96%22%3A%222%2F5%22%2C%22%E2%85%97%22%3A%223%2F5%22%2C%22%E2%85%98%22%3A%224%2F5%22%2C%22%E2%85%99%22%3A%221%2F6%22%2C%22%E2%85%9A%22%3A%225%2F6%22%2C%22%E2%85%9B%22%3A%221%2F8%22%2C%22%E2%85%9C%22%3A%223%2F8%22%2C%22%E2%85%9D%22%3A%225%2F8%22%2C%22%E2%85%9E%22%3A%227%2F8%22%7D”));

window.tastyRecipesFormatAmount = function(amount, el) {
if ( parseFloat( amount ) === parseInt( amount ) ) {
return amount;
}
var roundType = ‘frac’;
if (typeof el.dataset.amountShouldRound !== ‘undefined’) {
if (‘false’ !== el.dataset.amountShouldRound) {
if ( ‘number’ === el.dataset.amountShouldRound ) {
roundType = ‘number’;
} else if (‘frac’ === el.dataset.amountShouldRound) {
roundType = ‘frac’;
} else if (‘vulgar’ === el.dataset.amountShouldRound) {
roundType = ‘vulgar’;
} else {
roundType = ‘integer’;
}
}
}
if (‘number’ === roundType) {
amount = Number.parseFloat(amount).toPrecision(2);
} else if (‘integer’ === roundType) {
amount = Math.round(amount);
} else if (‘frac’ === roundType || ‘vulgar’ === roundType) {
var denom = 8;
if (typeof el.dataset.unit !== ‘undefined’) {
var unit = el.dataset.unit;
if ([‘cups’,’cup’,’c’].includes(unit)) {
denom = 4;
if (0.125 === amount) {
denom = 8;
}
if (“0.1667″ === Number.parseFloat( amount ).toPrecision(4)) {
denom = 6;
}
}
if ([‘tablespoons’,’tablespoon’,’tbsp’].includes(unit)) {
denom = 2;
}
if ([‘teaspoons’,’teaspoon’,’tsp’].includes(unit)) {
denom = 8;
}
}
var amountArray = frac.cont( amount, denom, true );
var newAmount = ”;
if ( amountArray[1] !== 0 ) {
newAmount = amountArray[1] + ‘/’ + amountArray[2];
if (‘vulgar’ === roundType) {
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (newAmount === window.tastyRecipesVulgarFractions[vulgar]) {
newAmount = vulgar;
}
});
}
}
if ( newAmount ) {
newAmount = ‘ ‘ + newAmount;
}
if ( amountArray[0] ) {
newAmount = amountArray[0] + newAmount;
}
amount = newAmount;
}
return amount;
};

window.tastyRecipesUpdatePrintLink = () => {

const printButton = document.querySelector( ‘.tasty-recipes-print-button’ );

if ( ! printButton ) {
return;
}

const printURL = new URL( printButton.href );
const searchParams = new URLSearchParams( printURL.search );

const unitButton = document.querySelector( ‘.tasty-recipes-convert-button-active’ );
const scaleButton = document.querySelector( ‘.tasty-recipes-scale-button-active’ );

let unit = ”;
let scale = ”;

if ( unitButton ) {
unit = unitButton.dataset.unitType;
searchParams.delete(‘unit’);
searchParams.set( ‘unit’, unit );
}

if ( scaleButton ) {
scale = scaleButton.dataset.amount;
searchParams.set( ‘scale’, scale );
}

const paramString = searchParams.toString();
const newURL = ” === paramString ? printURL.href : printURL.origin + printURL.pathname + ‘?’ + paramString;
const printLinks = document.querySelectorAll( ‘.tasty-recipes-print-link’ );

printLinks.forEach( ( el ) => {
el.href = newURL;
});

const printButtons = document.querySelectorAll( ‘.tasty-recipes-print-button’ );
printButtons.forEach( ( el ) => {
el.href = newURL;
});
};

document.addEventListener( ‘DOMContentLoaded’, () => {

if ( ! window.location.href.includes( ‘/print/’ ) ) {
return;
}

const searchParams = new URLSearchParams( window.location.search );

const unit = searchParams.get( ‘unit’ );
const scale = searchParams.get( ‘scale’ );

if ( unit && ( ‘metric’ === unit || ‘usc’ === unit ) ) {
document.querySelector( ‘.tasty-recipes-convert-button[data-unit-type=”‘ + unit + ‘”]’ ).click();
}

if ( scale && Number(scale) > 0 ) {
document.querySelector( ‘.tasty-recipes-scale-button[data-amount=”‘ + Number(scale) + ‘”]’ ).click();
}
});
}());

(function(){
var buttonClass = ‘tasty-recipes-scale-button’,
buttonActiveClass = ‘tasty-recipes-scale-button-active’,
buttons = document.querySelectorAll(‘.tasty-recipes-scale-button’);
if ( ! buttons ) {
return;
}

buttons.forEach(function(button){
button.addEventListener(‘click’, function(event){
event.preventDefault();
var recipe = event.target.closest(‘.tasty-recipes’);
if ( ! recipe ) {
return;
}
var otherButtons = recipe.querySelectorAll(‘.’ + buttonClass);
otherButtons.forEach(function(bt){
bt.classList.remove(buttonActiveClass);
});
button.classList.add(buttonActiveClass);

var scalables = recipe.querySelectorAll(‘span[data-amount]’);
var buttonAmount = parseFloat( button.dataset.amount );
scalables.forEach(function(scalable){
if (typeof scalable.dataset.amountOriginalType === ‘undefined’
&& typeof scalable.dataset.nfOriginal === ‘undefined’) {
if (-1 !== scalable.innerText.indexOf(‘/’)) {
scalable.dataset.amountOriginalType = ‘frac’;
}
if (-1 !== scalable.innerText.indexOf(‘.’)) {
scalable.dataset.amountOriginalType = ‘number’;
}
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (-1 !== scalable.innerText.indexOf(vulgar)) {
scalable.dataset.amountOriginalType = ‘vulgar’;
}
});
if (typeof scalable.dataset.amountOriginalType !== ‘undefined’) {
scalable.dataset.amountShouldRound = scalable.dataset.amountOriginalType;
}
}
var amount = parseFloat( scalable.dataset.amount ) * buttonAmount;
amount = window.tastyRecipesFormatAmount(amount, scalable);
if ( typeof scalable.dataset.unit !== ‘undefined’ ) {
if ( ! scalable.classList.contains(‘nutrifox-quantity’) ) {
if ( ! scalable.classList.contains(‘nutrifox-second-quantity’) ) {
amount += ‘ ‘ + scalable.dataset.unit;
}
}
}
scalable.innerText = amount;
});

var nonNumerics = recipe.querySelectorAll(‘[data-has-non-numeric-amount]’);
nonNumerics.forEach(function(nonNumeric){
var indicator = nonNumeric.querySelector(‘span[data-non-numeric-label]’);
if ( indicator ) {
nonNumeric.removeChild(indicator);
}
if ( 1 !== buttonAmount ) {
indicator = document.createElement(‘span’);
indicator.setAttribute(‘data-non-numeric-label’, true);
var text = document.createTextNode(‘ (x’ + buttonAmount + ‘)’);
indicator.appendChild(text);
nonNumeric.appendChild(indicator);
}
});

window.tastyRecipesUpdatePrintLink();
});
});
}());

window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.cookMode = {
wakeLockApi: false,
wakeLock: false,
cookModeSelector: ‘.tasty-recipes-cook-mode’,
init() {
if (“wakeLock” in navigator && “request” in navigator.wakeLock) {
this.wakeLockApi = navigator.wakeLock;
}

const cookModes = document.querySelectorAll(this.cookModeSelector);

if (cookModes.length > 0) {
for (const cookMode of cookModes) {
if (this.wakeLockApi) {
cookMode.querySelector(‘input[type=”checkbox”]’).addEventListener(“change”, event => {
this.checkboxChange(event.target);
}, false);
} else {
cookMode.style.display = “none”;
}
}
}
},
checkboxChange(checkbox) {
if (checkbox.checked) {
this.lock();
} else {
this.unlock();
}
},
setCheckboxesState(state) {
const checkboxes = document.querySelectorAll(this.cookModeSelector + ‘ input[type=”checkbox”]’);
for (const checkbox of checkboxes) {
checkbox.checked = state;
}
},
async lock() {
try {
this.wakeLock = await this.wakeLockApi.request(“screen”);
this.wakeLock.addEventListener(“release”, () => {
this.wakeLock = false;
this.setCheckboxesState(false);
});
this.setCheckboxesState(true);
} catch (error) {
this.setCheckboxesState(false);
}
},
unlock() {
if (this.wakeLock) {
this.wakeLock.release();
this.wakeLock = false;
}
this.setCheckboxesState(false);
}
};

(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
document.addEventListener(“DOMContentLoaded”, callback);
}
})(() => {
window.TastyRecipes.cookMode.init();
});

window.TastyRecipes = window.TastyRecipes || {};

window.TastyRecipes.staticTooltip = {
element: null,
tooltipElement: null,
deleting: false,
init( element ) {
if ( this.deleting ) {
return;
}
this.element = element;
this.buildElements();
},
destroy() {
if ( ! this.tooltipElement || this.deleting ) {
return;
}

this.deleting = true;
this.tooltipElement.classList.remove( ‘opened’ );

setTimeout( () => {
this.tooltipElement.remove();
this.deleting = false;
}, 500 );
},
buildElements() {
const tooltipElement = document.createElement( ‘div’ );
tooltipElement.classList.add( ‘tasty-recipes-static-tooltip’);
tooltipElement.setAttribute( ‘id’, ‘tasty-recipes-tooltip’ );

const currentTooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
if ( currentTooltipElement ) {
document.body.replaceChild( tooltipElement, currentTooltipElement );
} else {
document.body.appendChild( tooltipElement );
}

this.tooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
},
show() {
if ( ! this.tooltipElement ) {
return;
}

const tooltipTop = this.element.getBoundingClientRect().top
+ window.scrollY
– 10 // 10px offset.
– this.tooltipElement.getBoundingClientRect().height;
const tooltipLeft = this.element.getBoundingClientRect().left
– ( this.tooltipElement.getBoundingClientRect().width / 2 )
+ ( this.element.getBoundingClientRect().width / 2 ) – 1;
const posLeft = Math.max( 10, tooltipLeft );
this.maybeRemoveTail( posLeft !== tooltipLeft );

this.tooltipElement.setAttribute( ‘style’, ‘top:’ + tooltipTop + ‘px;left:’ + posLeft + ‘px;’ );
this.tooltipElement.classList.add( ‘opened’ );

},
maybeRemoveTail( removeTail ) {
if ( removeTail ) {
this.tooltipElement.classList.add( ‘tr-hide-tail’ );
} else {
this.tooltipElement.classList.remove( ‘tr-hide-tail’ );
}
},
changeMessage( message ) {
if ( ! this.tooltipElement ) {
return;
}
this.tooltipElement.innerHTML = message;
}
};

window.TastyRecipes.ajax = {
sendPostRequest( url, data, success, failure ) {
const xhr = new XMLHttpRequest();
xhr.open( ‘POST’, url, true );
xhr.send( this.preparePostData( data ) );

xhr.onreadystatechange = () => {
if ( 4 !== xhr.readyState ) {
return;
}
if ( xhr.status === 200 ) {
success( JSON.parse( xhr.responseText ) );
return;
}

failure( xhr );
};

xhr.onerror = () => {
failure( xhr );
};
},
preparePostData( data ) {
const formData = new FormData();

for ( const key in data ) {
formData.append( key, data[key] );
}
return formData;
},
};

window.TastyRecipes.ratings = {
defaultRating: 0,
currentRatingPercentage: 100,
savingRating: false,
init( minRating ) {
this.minRating = minRating;

this.formWatchRating();
this.closeTooltipWhenClickOutside();
this.addBodyClassBasedOnSelectedRating();
this.backwardCompFormRatingPosition();
},
formWatchRating() {
const ratings = document.querySelectorAll(‘.tasty-recipes-no-ratings-buttons [data-rating]’);
if ( ratings.length {
event.preventDefault();
this.defaultRating = event.target.closest( ‘.checked’ ).dataset.rating;
this.setCheckedStar( event.target );
this.maybeSendRating( this.defaultRating, event.target );
this.setRatingInForm( this.defaultRating );
} );
}
},
closeTooltipWhenClickOutside() {
window.addEventListener( ‘click’, e => {
// Bailout (don’t remove the tooltip) when the clicked element is a rating star, or it’s the tooltip itself.
if ( e.target.closest( ‘.tasty-recipes-rating’ ) || e.target.classList.contains( ‘tasty-recipes-static-tooltip’ ) ) {
return;
}

window.TastyRecipes.staticTooltip.destroy();
} );
},
setRatingInForm( rating ) {
const ratingInput = document.querySelector( ‘#respond .tasty-recipes-rating[value=”‘ + rating + ‘”]’ );
if ( ! ratingInput ) {
return;
}
ratingInput.click();
},
addBodyClassBasedOnSelectedRating() {
const ratingInputs = document.querySelectorAll( ‘input.tasty-recipes-rating’ );
if ( ! ratingInputs ) {
return;
}
for ( const ratingInput of ratingInputs ) {
ratingInput.addEventListener( ‘click’, currentEvent => {
const selectedRating = currentEvent.target.getAttribute( ‘value’ );
this.handleBodyClassByRating( selectedRating );
this.toggleCommentTextareaRequired( selectedRating );
} );
}
},
handleBodyClassByRating( rating ) {
if ( rating < this.minRating ) {
document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );
return;
}
document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );
},
toggleCommentTextareaRequired( rating ) {
const commentTextarea = document.getElementById( 'comment' );
if ( ! commentTextarea ) {
return;
}

if ( rating {
window.TastyRecipes.staticTooltip.changeMessage( response.data.message );
window.TastyRecipes.staticTooltip.show();
this.updateAverageText( response.data, recipeCardElement );
this.maybeFillCommentForm( response.data );

// Hide the tooltip after 5 seconds.
setTimeout( () => {
this.maybeResetTooltip( recipeCardElement, response.data, rating );
}, 5000 );
},
() => {
this.resetTooltip( recipeCardElement );
}
);
},
updateAverageText( data, recipeCardElement ) {
if ( ! data.average ) {
return;
}
this.setRatingPercent( data );

if ( ! data.count ) {
return;
}

const quickLink = document.querySelector( ‘.tasty-recipes-rating-link’ );
if ( quickLink ) {
this.setTextInContainer( quickLink, data );
this.setPartialStar( quickLink );
}

const cardStars = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
cardStars.dataset.trDefaultRating = data.average;
this.setTextInContainer( recipeCardElement.querySelector( ‘.tasty-recipes-rating’ ), data );
},
setTextInContainer( container, data ) {
if ( ! container ) {
return;
}

if ( data.label ) {
const ratingLabelElement = container.querySelector( ‘.rating-label’ );
if ( ratingLabelElement ) {
ratingLabelElement.innerHTML = data.label;
}
return;
}

const averageElement = container.querySelector( ‘.average’ );
if ( averageElement ) {
averageElement.textContent = data.average;
}

const countElement = container.querySelector( ‘.count’ );
if ( countElement ) {
countElement.textContent = data.count;
}
},
setPartialStar( container ) {
const highestStar = container.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( highestStar ) {
highestStar.dataset.trClip = this.currentRatingPercentage;
}
},
setRatingPercent( data ) {
this.defaultRating = data.average.toFixed( 1 );
const parts = data.average.toFixed( 2 ).toString().split( ‘.’ );
this.currentRatingPercentage = parts[1] ? parts[1] : 100;
if ( this.currentRatingPercentage === ’00’ ) {
this.currentRatingPercentage = 100;
}
},
setCheckedStar( target ) {
const cardRatingContainer = target.closest( ‘.tasty-recipes-ratings-buttons’ );
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( selectedRatingElement ) {
delete selectedRatingElement.dataset.trChecked;
}

const thisStar = target.closest( ‘.tasty-recipes-rating’ );
thisStar.dataset.trChecked = 1;
thisStar.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = 100;
},
maybeFillCommentForm( data ) {
if ( ! data.comment || ! data.comment.content ) {
return;
}

const commentForm = document.querySelector( ‘#commentform’ );
if ( ! commentForm ) {
return;
}

const commentBox = commentForm.querySelector( ‘[name=comment]’ );
if ( ! commentBox || commentBox.value ) {
return;
}

// Add comment details for editing.
commentBox.innerHTML = data.comment.content;
if ( data.comment.name ) {
commentForm.querySelector( ‘[name=author]’ ).value = data.comment.name;
commentForm.querySelector( ‘[name=email]’ ).value = data.comment.email;
}
},
maybeResetTooltip( recipeCardElement, data, rating ) {
if ( this.savingRating === rating ) {
this.resetTooltip( recipeCardElement, data );
}
},
resetTooltip( recipeCardElement, data ) {
window.TastyRecipes.staticTooltip.destroy();
this.savingRating = false;

// Reset the default rating.
const cardRatingContainer = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
if ( cardRatingContainer ) {
this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;
cardRatingContainer.dataset.trDefaultRating = this.defaultRating;

this.resetSelectedStar( cardRatingContainer, data );
}
},
resetSelectedStar( cardRatingContainer ) {
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( selectedRatingElement ) {
selectedRatingElement.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = this.currentRatingPercentage;
selectedRatingElement.parentNode.dataset.trChecked = 1;
}

const previousSelectedElement= cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( previousSelectedElement ) {
const currentSelectedRating = previousSelectedElement.querySelector(‘[data-rating]’);
if ( currentSelectedRating !== selectedRatingElement ) {
delete previousSelectedElement.dataset.trChecked;
}
}
},
backwardCompFormRatingPosition() {
const ratingsButtons = document.querySelector( ‘#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons’ );
if ( ! ratingsButtons ) {
return;
}
const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);
if ( ! ratingsButtonsStyles.display.includes( ‘flex’ ) ) {
ratingsButtons.style.direction = ‘rtl’;
}

if ( typeof tastyRecipesRating !== ‘undefined’ ) {
// Select the rating that was previously selected in admin.
ratingsButtons.querySelector( ‘.tasty-recipes-rating[value=”‘ + tastyRecipesRating + ‘”]’ ).checked = true;
}

const ratingSpans = ratingsButtons.querySelectorAll( ‘.tasty-recipes-rating’ );
for (const ratingSpan of ratingSpans) {
ratingSpan.addEventListener( ‘click’, event => {
if ( ratingSpan === event.target ) {
return;
}
ratingSpan.previousElementSibling.click();
} );
}
}
};

(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );
});

Recipe and Photography by Mikyla Meckelson

Subscribe to TABLE Magazine‘s print edition.

How Lisa Fontanarosa Built a Life Filled with Flowers

0
Seated woman with flowers, crafts, and dried lavender, Lisa Fontanarosa

An international design business, a lavender farm, an apple orchard, and flower gardens. These define the life that entrepreneur Lisa Fontanarosa has built in an old adobe compound on Rio Grande Boulevard in Albuquerque.

Fontanarosa and JJ Ornelas bought the 1900s adobe in 2017. Since then, she has been reimagining the home and erstwhile mini donkey farm. The spot includes a casita, a wooden A-frame, a lavender and dried flower studio, a lavender field, and a chicken coop near the old stables. Flower beds containing dahlias and cosmos fill one section of the property. An apple orchard fronts Rio Grande Boulevard. At the time of this writing, a greenhouse is under construction.

Finding Inspiration

The compound reflects Fontanarosa’s eclectic array of business and personal interests. A trip to Naples as a young girl, where Fontanarosa experienced long lunches served outside with flower centerpieces and elegant table settings, sparked a love of international travel, design, and fashion.

She spent her early career revolving around the New York fashion scene, working at Conde Nast magazines such as Vogue and Architectural Digest. It was a window dressing job for the Henri Bendel store’s “Street of Shops” that solidified her love of interior design. This led, ultimately, to an international design career and the founding of Lisa Fontanarosa Collections in 1997. “I traveled the globe looking for handmade pieces that speak to my heart: lighting, textiles, and objects that are as visceral as works of art and that, like all of us, are beautiful in their imperfection,” she says.

In 2000, the New York Times featured her collection, and more international press followed. Since then, she has worked with artists and designers on custom pieces for Bergdorf Goodman, Barneys, and hotels and hospitality projects around the world.

One-of-a-Kind Creations

The business revolves around providing one-of-a-kind commissions from artists Fontanarosa represents, products showcased in the renovated, light-filled casita. Items range from delicate and sparkly sculptural lamps to textiles to rustic yet elegant handmade ceramics. Some of the items are one-of-a-kinds, now out of production, and all are handmade: Poetic wire chandeliers, sculptures from Marie Christophe France. Hand-dyed velvet and linen pillows from Adam & Victoria Sweden. Handwoven textiles of Bonita Ahuja, London. “And, of course, all of my artisan lavender products that I made from the lavender in my field,” she says.

Lisa Fontanarosa Collections’ success means she has one foot in France, whose culture and lifestyle for which she has a particular fondness. Her discovery of Marie Christophe while wandering the streets of Paris led to a favorite point in her career. In 2009, the Paris boutique Colette asked her to style an exhibition based on upcycled materials. “I conceived three pieces from three different artists, but the showstopper was the bicycle in wire I asked Marie Christophe France to create.”

Over 25 years, her career has taken her all over the world, working with A-List designers and style makers. “I style products and delve into the DNA of a brand, always imagining a fairytale, curating a world of beauty filled with poetic pieces,” she says. “I love unexpected details, overlooked materials, color, and elements of surprise.”

Falling in Love with New Mexico

While she moved to Albuquerque in 1992, Jo’s Farm — named after her mother Josephine — has influenced new creative, floral projects. “The property inspired us to add lavender, cosmo, and dahlia fields, garden patios, and fruit trees,” she says. Last summer, Jo’s Farm hosted a U-Pick event in the lavender field, and will be repeated again this summer. Community vendors will be inited to sell homemade wares. “I am playing around with … dried floral sculptures and embellishing my vintage dress forms (a few sourced from Paris) with flowers from my garden.”

As it evolves, Fontanarosa envisions Jo’s Farm as the palette for her creations: a living example of her deep and worldly mix of passions where people can discover unique décor, as well as lavender, vegetables, and flowers—a  celebration of home in color, texture, and style.

Story by Emily Esterson / Photography by Tira Howard / Styling by Keith Recker

Subscribe to TABLE Magazine’s print edition.

Buttermilk Pancakes

0
a stack of pancakes on a plate with berries
Photo courtesy of Jaqueline Pelzer

Pancakes may seem like a humble breakfast staple, but they can be an absolute game-changer when done right. Imagine a plate piled high with golden-brown pancakes that are so fluffy they practically float off the plate. Buttermilk, that tangy elixir of the dairy world, is the secret weapon that takes these pancakes from ordinary to extraordinary. That lactic acid works its magic, tenderizing the batter and adding a subtle tang that cuts through the sweetness. Raspberries and blueberries add a little flavor and bring freshness and brightness to the party. And let’s not forget the finishing touch – a light dusting of confectioners sugar. It’s like a whisper of sweetness that blankets the pancakes, adding a touch of elegance and that little extra something.

Buttermilk Pancakes Recipe

Ingredients

2 cups all-purpose flour
3 tablespoons sugar
2 teaspoons baking powder
½ teaspoon baking soda
½ teaspoon salt
2 ¼ cups buttermilk
2 large eggs, lightly beaten
1 teaspoon vanilla extract
4 tablespoons unsalted butter, melted
1/2 cup raspberries
1/2 cup blueberries
Pinch of confectioners sugar

Directions

  1. Combine the all-purpose flour, sugar, baking powder, baking soda, and salt in a large bowl. Whisk them together until well combined.
  2. In a separate medium-sized bowl, whisk together the buttermilk, eggs, and vanilla extract.
  3. Gradually pour the melted butter into the wet ingredients while whisking, and continue stirring until well combined.
  4. Pour the wet ingredients into the bowl with the dry ingredients. Use a wooden spoon to gently stir the mixture until just combined. Avoid overmixing. Let the batter rest for a moment.
  5. Heat a cast iron pan over medium-low heat and butter it.
  6. Once the skillet is heated, pour half a cup of batter onto the pan.
  7. Cook the pancake until the edges appear cooked, and bubbles form on the surface of the batter. Flip the pancake and continue cooking until it turns golden brown.
  8. Repeat the process, adding butter to the pan between each batch of pancakes.
  9. Serve the pancakes warm, topped with raspberries, blueberries, and a sprinkle of confectioners sugar. Feel free to get creative with your toppings by adding your favorite fruits, maple syrup, or any other desired variations.

Recipe by Gabe Gomez

A footer photo with a black background and subscribe info and button
Subscribe to TABLE Magazine‘s print edition.

Breakfast Strata

0
Off to the right side of the frame sits breakfast strata, green, brown, and red in color, in a white casserole dish. three gold forks sits to the left.

For those who prefer a savory breakfast to sweet, or those looking for an easy, filling meal to start the day with, look no further than this light and fluffy, simple egg casserole. Made with roasted grape tomatoes, our luxurious breakfast strata recipe will be a family meal request every weekend.

Breakfast Strata Recipe

INGREDIENTS

FOR THE STRATA

6-7 cups of crusty Italian bread cut into 2” cubes
12 eggs
3 cups whole milk
½ tsp salt
¾ tsp garlic powder
¾ tsp onion powder
1 tsp poultry seasoning
1 ½ tsp spicy brown mustard
Roasted grape tomatoes*
2 cups chopped kale
2 cups baby spinach
3 cups grated cheese (I used Swiss & Gruyere)

*FOR THE ROASTED TOMATOES

3 ½ cups grape tomatoes
¼ cup olive oil
5 cloves of peeled garlic
¼ tsp salt
Cracked black pepper to taste

INSTRUCTIONS

FOR THE ROASTED TOMATOES

  1. Preheat the oven to 400 degrees and place tomatoes and garlic in a bowl.
  2. Pour the olive oil over tomatoes and sprinkle with salt and pepper. Stir to coat evenly and then place on a baking sheet.
  3. Roast for 10 minutes, stir the tomatoes, and roast for an additional 10-15 minutes. You want the tomatoes to burst and get slightly caramelized and charred. As oven temperatures vary, keep your eyes on them so as not to burn the tomatoes.
  4. Use as many tomatoes as you’d like for the strata. Store the remaining in an airtight container in the fridge.

FOR THE STRATA

  1. Lightly grease a large casserole pan.
  2. In a large bowl, beat the eggs with the milk and seasonings and set aside.
  3. Begin layering the strata by placing a layer of the bread cubes, followed by kale, spinach, and tomatoes, tucked between the cubes. Sprinkle a light layer of cheese and then repeat with more of the bread, kale, spinach, and tomatoes.
  4. Continue doing this until you’ve nearly reached the top of the casserole dish. Pour the egg and milk mixture, making sure the bread gets adequately soaked. Top with more cheese, tucking in the final pieces of kale, spinach, and tomatoes.
  5. Cover loosely with foil and bake for 20 minutes. Uncover and bake for an additional 25-30 minutes or until baked through, and the edges are lightly browned.

Recipe and Styling by Veda Sankaran / Photography by Dave Bryce

A footer photo with a black background and subscribe info and button
Subscribe to TABLE Magazine‘s print edition.

The Love of The Love Apple’s Family Meal

0
staff gathered around the table enjoying dinner
Love Apple family meal. Taos NM. Food served, bison fajitas with calabacitas.

The mission at The Love Apple in Taos has always been to serve guests the finest seasonal local foods, organically grown by farmers and other friends, and intended to elevate good cheer and well-being. The same is true of the family meal, served before every dinner shift to the team that joyfully runs this revered restaurant, a group of employees who consider each other as family.

“One of the reasons that we initially decided on a family meal is that we wanted to create a restaurant that people wanted to work at, and we wanted to create a family,” says The Love Apple founder and owner Jennifer Hart. “Most of us have worked together for over five years. We share our lives together.”

Family Meal at The Love Apple

With the family meal, the staff also gets to share The Love Apple’s divine made-from-scratch regional home cooking. The dinner menu changes seasonally with nightly specials and might include such creative fare as Buttermilk Yellow & Blue Cornbread; Three Mushroom Walnut Pâté; Grilled Trout Wrapped in Corn Husks; and House-Made Potato Gnocchi—ethereal dishes that nurture and delight. (The food, along with the flawless service and rustic, romantic ambiance, is why many people consider The Love Apple to be one of the best restaurants in New Mexico.) The family meal, prepared by Chef Jenni Ford, is of the same caliber, equally delectable and nurturing, as well as diverse.

“Jenni’s family meals are amazing,” Hart says. “She always has a salad and a main, and she’s always trying to do something amazing, like steak and fajitas, tacos, and delicious gluten-free vegetable lasagna because so many people are gluten-free. It is challenging for Jenni because everyone has a different thing they cannot eat. One person doesn’t eat dairy, and another doesn’t eat meat.”

An Historic Location

This intimate restaurant, housed in the former Placitas Chapel built in the 1800s, is steeped in atmosphere and charm, with just 13 tables (plus patio seating in the summer), hand-hewn vigas, distressed wood floors, elegant chandeliers, candlelight, fresh flowers, and other inviting details. Before the dinner guests arrive, a last-minute flurry of activity unfolds in the serene space, often as the family meal takes place.

“The Love Apple’s staff meal looks different depending on the day,” says Manager Cheri Keil. “Most evenings, we are running around to put the finishing touches on the dining room or throwing another log on the fire for our guests to walk into a cozy and welcoming space. Jenni takes care of us. She feeds us whole and hearty meals to get us through a shift … It’s not always glamorous, but as we wait for our guests to arrive, you will find us chatting about specials or a fun and funky new wine.”

A Time to Learn about the Menu and Wine Pairings

Often the team sits down together to catch up on what’s happening at the restaurant. “It’s the time when we talk about what’s new on the menu, what’s going on in the restaurant,” Hart says. “We’ll open a bottle of wine and analyze it.”

The Love Apple’s family meal also provides a place for the chef to innovate, creating new dishes that might be added to the menu. “It’s a good way to try out ideas without any judgment,” Hart says. “We encourage the chef to try different things and see what comes out of it, maybe a new sauce or something else.”

Manager Cheri Keil enjoys the chance to sample those innovations. “It’s the time for our kitchen to get creative and try new ideas,” she says. But, she adds, it’s always a treat when Ford makes chicken enchiladas for everyone.

The family meal, served in restaurants around the world, gives employees sustenance as well as a sense of solidarity as they bond over food before a busy dinner shift. With a sense of family already firmly in place at The Love Apple, the family meal just might resemble your meals at home—filled with laughter, stories, and delicious food, all of which deeply warm the heart.

Sit Down and Enjoy!

“It’s just nice to sit down and enjoy a meal,” says Hart. “I mean, we work in the restaurant business. We should also enjoy wine and food. It’s nice to connect with everybody and be together. Everyone has kids, and we’re running around all day, so it’s nice to come in, sit down and relax, and enjoy a meal together.”

Story by Lynn Cline/ Photography by Doug Merriam

Don’t miss a single delicious thing:

Subscribe to TABLE Magazine’s print edition.