Home Blog Page 241

Peep-a-tini Cocktail

0
blue pink and yellow peeps with jolly rancher colored martini

Use two childhood favorites, Jolly Ranchers and Marshmallow Peeps, to create a colorful variety of simple, vibrant adult beverages we call the Peep-a-tini. The jury is still out with the TABLE team when it comes to eating peeps, but this is undeniably a great way to utilize the nostalgic, sugar-coated, polarizing, marshmallow peep.

The History of Peeps 

For a deep dive on the history of peeps, you can read Rest in Peeps! But, the brief version is this. Peeps come from Pennsylvania’s Lehigh Valley, where Ira Born was developed machinery to automate the making of shaped marshmallows. From there, he created Peeps, little chicks with smiling faces. Who could hate that? But according to a FinanceBuzz study, Americans disagree on Peeps marshmallow candies: 25% love them and 16% hate them. Our Peep-a-tini celebrates their colorful quirkiness and unique (if polarizing) flavor. 

Recipe by Keith Recker
Photography by Laura Petrilla

Subscribe to TABLE Magazine‘s print edition.

Sunday Bolognese Sauce

0
A meaty pasta dish in a black bowl

Sundays are the moments for loved ones, cherishing quality time and indulging in meals that may require some extra effort to prepare. This Bolognese recipe for Sunday dinner will remind you that despite the abundance of modern kitchen gadgets and appliances, nothing can replace the satisfaction of tending to a pot of simmering Sunday gravy. It’s a simple pleasure that money can’t buy and a great way to appreciate the traditional slow-cooking methods passed down through generations.

What is Bolognese Sauce?

You’ll sometimes hear Bolognese sauce referred to as ragù alla bolognese, its proper name in Italian. Everyone claims they have the “most authentic” or “the best” bolognese sauce, but ours focuses on how this dish brings people together through food. This is part of the beauty of Italian cuisine. It focuses on share-ability and heartiness. Bolognese sauce originates in the town of Bologna, but people all around the world now make it. (Ask any of your Italian friends, and you’ll probably hear a recipe with personal and regional tweaks). But it’s been around for a long, long time. The first Bolognese sauce came from Alberto Alvisi, the cook for the Cardinal of the region in the 18th century.

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

A meaty pasta dish in a black bowl

Sunday Bolognese


5 Stars 4 Stars 3 Stars 2 Stars 1 Star


  • Author:
    Gabe Gomez

Description

This sauce could feed an army.


Ingredients


Scale

  • 2 tbsp extra virgin olive oil
  • 1 large carrot, chopped
  • 1 medium onion, chopped
  • 2 celery stalks, chopped
  • 1 lb ground beef
  • 1 lb ground pork
  • 1/2 cup Sangiovese Wine
  • 2 tbsp tomato paste
  • 2 cups canned plum tomatoes
  • 1/2 cup whole milk cup
  • Pinch of Salt to taste
  • Pinch of pepper to taste
  • 2 bay leaves
  • pounds dry pasta (Your choice, bucatini or tagliatelle will do nicely)


Instructions

  1. In a dutch oven over medium-high heat, add oil and onions. Cook for five minutes, then  add carrots and celery. Cook until tender. Move the vegetables to the side of the dutch oven. Add the tomato paste to a cleared section of the dutch oven and cook the paste for one minute. Integrate the vegetables when the tomato paste changes consistency and darkens the color.
  2. Add ground beef and add pork to the vegetables. Add a pinch of salt and pepper. Cook until meat is brown and well incorporated with vegetables-five to seven minutes.
  3. Add wine to the meat and vegetable mixture. Deglaze the bottom of the dutch oven, stir, and let simmer uncovered for two minutes.
  4. Add canned tomatoes, and stir gently to incorporate all ingredients. Gently add milk after two minutes, stir, and incorporate all ingredients. Add bay leaf. Pinch of salt to preference. Cover the dutch oven, lower the temperature, and cook for two hours. Stir occasionally
  5. Boil the pasta to an al dente finish. Toss and incorporate with plenty of sauce until well coated. Add a small amount of starchy pasta water. Serve on a family-style platter with freshly grated parmesan on the side.

window.trCommon={“minRating”:6,”ajaxurl”:”https://www.tablemagazine.com/wp-admin/admin-ajax.php”,”ratingNonce”:”d2ca297453″,”postId”:2391};
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 by Gabe Gomez
Photography by Emanuel Ekstrom

Subscribe to TABLE Magazine’s print edition.

Compound Butters

0
Compound butter makes for endless flavor profiles.
Compound butter makes for endless flavor profiles.

Compound butter makes for endless flavor profiles. Discover the basics of homemade butter here.

Pumpkin Caramel Browned Butter

Ingredients:
2 sticks of unsalted butter
¼ tsp cardamom seeds, powdered
2 pinches powdered mace (less than 1/16th tsp)
3 tbsp dark brown sugar
1 tbsp water
2 tbsp pumpkin purée

Instructions:
Place sticks of butter in a small saucepan on medium-low heat and melt. Once the butter is melted, stay close, stirring often until the butter changes color to a light golden brown.

You will first see the butter beginning to foam as the milk solids rise to the top. Keep stirring, watching for the butter to change color. Once you notice the color becoming more golden, you may want to remove it from the heat so it doesn’t burn. This whole process should take about 8-10 minutes. Let cool slightly, then pour the browned butter into a container.

To make the caramel, melt the brown sugar and water on medium-low heat. Stir until bubbles begin to form. Continue stirring so the sugar doesn’t burn. Once it tastes like caramel, in about 1-2 minutes, pour into the melted browned butter.

Add the 2 tbsp of pumpkin purée, the powdered cardamom, and mace and stir everything together. Refrigerate for 35-40 minutes or until the butter solidifies. Remove from the fridge and use an immersion blender to whip the butter. Then place it back in the fridge until it solidifies enough to roll in wax paper.

Form the butter into 2 logs and place each on top of a piece of wax paper. Roll the paper around the butter logs and twist the ends. Place in the freezer until ready to use.

Maple Ginger Bourbon Butter

Ingredients:
2 sticks softened unsalted butter
4 tsp pure maple syrup
2 tsp bourbon
1 ½ tsp ginger, grated on a microplane
pinch of salt

Instructions:
Stir together all the ingredients until well incorporated.
Shape into two logs and place each onto a piece of wax paper.

Roll the paper around the butter and twist the ends. Place in the freezer until ready to use.

Anchovy Chive Butter

Ingredients:
2 sticks softened butter
3 anchovy fillets (in hot oil) crushed to a paste
¾ tsp gochugaru
2 tbsp finely chopped chives
juice of ¼ lemon
sprinkle of salt

Instructions:
Stir together all the ingredients until well incorporated.

Shape into two logs and place each onto a piece of wax paper.

Roll the paper around the butter and twist the ends. Place in the freezer until ready to use.

Recipes by Veda Sankaran / Photography by Dave Bryce / Styling by Keith Recker / Bread by Crustworthy / Textile by Kendra Russo / Ceramics by Frank DeFabo and Billy Ritter / With Support from Buy Fresh, Buy Local of Western Pennsylvania and PA Preferred

New Possibilities at The Landing Hotel Next to Rivers Casino

0
a sunset view from the river of the outside of a large hotel
The Landing Hotel

Sponsored Content

Spring is full of new possibilities with overnight stays and weekend escapes as The Landing Hotel recently opened next to Rivers Casino Pittsburgh. Guests will enjoy 24/7 casino gaming with stellar live entertainment offerings you won’t find anywhere else.

 

a hotel room with a large window and bed with white bedding and a colorful large framed geometric piece above the bed
The Landing Hotel

The Landing Hotel

The Landing Hotel Pittsburgh is centrally located along Pittsburgh’s North Shore, down the street from Acrisure Stadium and PNC Park, and just steps away from the North Shore T-station.

The casino’s much anticipated, seven-story hotel addition includes 210 guest rooms and attaches to the existing casino on the east façade, facing Carnegie Science Center and overlooking the Ohio River—with access to the Monongahela Walking Trail.

Making optimal use of its riverfront location, The Landing Hotel features expansive windows on every level with panoramic views of the riverfront, Mt. Washington and Pittsburgh’s famous skyline. Included among the guest rooms are 10 luxury terrace suites, each with private first-floor patios. A contemporary interior and exterior design, consistent with Rivers Casino’s upscale urban aesthetic, integrates beautifully with other North Shore venues.

Having a hotel fulfills the promise of an integrated destination-style casino, making Rivers Casino and The Landing Hotel an ideal choice for weekend getaways, business travelers, wedding parties, conventions and expos, concert goers and sports fans alike.

Live Entertainment

In addition to live bands and DJs every week in Drum Bar, the BetRivers Sportsbook, and Martorano’s Prime, Rivers Casino is welcoming two top-notch acts in April and May.

Skid Row and Warrant

Skid Row and Warrant, best known for their respective hits “Youth Gone Wild” and “Cherry Pie” are teaming up to bring their joint upbeat rock-n-roll show “The Gang’s All Here” to Rivers Casino Pittsburgh on Friday, April 14, 2023, at 7 p.m. Tickets start at $29 and are on sale now.

New Jersey based rockers Skid Row arrived on the scene in the late-1980s during the hard rock craze and quickly became a predominant force in the genre. Their youth, ambition, and knack for writing catchy songs helped attract a worldwide following. Since their debut album, Skid Row has generated multi-platinum success and massive radio hits including “18 and Life,” “Monkey Business,” “I Remember You,” and “Youth Gone Wild.” Skid Row’s career has taken them from their humble beginnings to selling millions of tickets and headlining festivals all over the world.

At its core, Warrant is an American rock band through and through. Hitting it big in 1989, the Hollywood, CA based band rose through the ranks of the local Sunset Strip scene to the level of multi platinum selling, chart-topping success. The band first came into the national spotlight with their debut album Dirty Rotten Filthy Stinking Rich. This album produced radio and MTV chart toppers “Down Boys,” “Sometimes She Cries,” and the massive hit “Heaven” which reached #1 in Rolling Stone and #2 on the Billboard Hot 100 for two weeks in a row.

 

a sunset view from the river of the outside of a large hotel
The Landing Hotel

Australia’s Thunder From Down Under

The sizzling male revue named “Best Male Strip Show” by the Las Vegas Review Journal brings their world-class show to Rivers Casino Pittsburgh on Friday, May 5, and Saturday, May 6. Showtime for both performances is 7 p.m., and tickets start at $20.

The internationally acclaimed show that has appeared on the famed Las Vegas Strip for the past 20 years, takes male revues to a new level of excitement and is “eye candy” for women of all ages who can transform fantasy into reality with the blink of an eye or unbuttoning of a shirt! Dynamic dance routines, gymnastics, break dancing, colorful costumes, humor and hard bodies all add up to Thunder From Down Under being a fun, unique experience.

For tickets and more information, please visit RiversCasino.com/Pittsburgh.

Spicy Sausage and Greens Soup

0
Two bowls filled with a dark reddish brown broth with spicy sausage and greens as butter sits to the left and two spoons sit in the top right.

Spicy Sausage and Greens soup is a tantalizing, nutritious soup perfect for any time of year. Don’t let the short list of ingredients fool you. This delicious recipe is packed full of flavor.

Spicy Sausage and Greens Soup Recipe

INGREDIENTS

1 lb. Parma brand loose hot sausage
1 jar Labriola’s tomato sauce
1 small head escarole, chopped
6 cups fresh spinach, chopped
4-5 medium gold potatoes, peeled and diced
4 cloves garlic, minced
3 quarts mushroom broth
Salt and pepper to taste

INSTRUCTIONS

  1. In a large stock pot, brown sausage until there is no pink left.
  2. Add onion, and garlic and cook until tender
  3. Add tomato sauce, mushroom stock, greens and potatoes. Simmer until potatoes are tender and the leaves are wilted
  4. Serve with shredded cheese sausage until there is no pink left.
  5. Add onion, and garlic and cook until tender
  6. Add tomato sauce, mushroom stock, greens and potatoes. Simmer until potatoes are tender and the leaves are wilted
  7. Serve with shredded cheese

Recipe and Styling by Anna Franklin / Photography by Dave Bryce

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

Quick Cured Egg Yolks

0
bright orange cured egg yolk on toast

Curing food with salt is as old a technique as cooking itself and actually ends up making egg yolks even more delicious. By drawing out moisture, these quick cured egg yolks become dense and firm. The result is almost like a jelly and enhances the complex flavor of egg yolks. Try spreading them over toast with butter and some jam for a sweet kick. Or, you can even eat these yolks on their own with a side of fresh greens, or as a topping to avocado toast. Make starting off your morning a little easier by doing the hard work the night before.

How Does Sea Salt Cure Egg Yolks?

Curing egg yolks in salt is a technique that involves drawing out the moisture from the yolks, resulting in a concentrated, umami-strong product. The salt acts as a natural preservative, inhibiting the growth of bacteria while the egg yolks sit in it. As the yolks cure, they develop a firm, almost rubbery texture and a salty, savory flavor. This process is similar to salting fish or meat, and the resulting cured egg yolks can be used in a variety of dishes, from pasta to even just on their own.

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

bright orange cured egg yolk on toast

Quick Cured Egg Yolks


5 Stars 4 Stars 3 Stars 2 Stars 1 Star


  • Author:
    Anna Franklin

Description

Try these rich egg yolks on a slice of toast for breakfast.


Ingredients


Scale

  • 1 cup sea salt
  • 6 egg yolks with whites separated


Instructions

  1. Place sea salt in a shallow container.
  2. Using a spoon, make 6 little dips in the salt so the yolks will fit inside them. Gently push salt around each yolk making sure to cover each yolk completely with salt. Cover with lid or plastic wrap and keep in the fridge for 24 hours.
  3. After 24 hours, remove the yolks from the salt. They should be dark in color and have a jammy texture. Rinse with water to get the excess salt off the surfaces of the egg yolk.
  4. Spread the quick cured egg yolk on toast with butter, or use on pasta for a salty, rich flavor.

window.trCommon={“minRating”:6,”ajaxurl”:”https://www.tablemagazine.com/wp-admin/admin-ajax.php”,”ratingNonce”:”619ecb690e”,”postId”:2128};
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 Styling by Anna Franklin
Photography by Dave Bryce

Subscribe to TABLE Magazine’s print edition.

Tyler Lewis shaking mocktails for TABLE.

0
Our Lavender Kombucha Mystic Mocktail

Tyler Lewis shaking mocktails for TABLE.

 

 

Buttermilk Irish Soda Bread with Fennel Pollen

0
Buttermilk Soda Bread with Fennel Pollen in a frying pan placed on a napkin, which is placed on a dark black surface with sprinkled flour on it

TABLE Magazine loves Irish Soda Bread. Not only is it easy to make, but it’s great with just about any meal for St. Patrick’s Day or really any time of year. We recommend that you enjoy our Buttermilk Irish Soda Bread with Fennel Pollen over breakfast or brunch with butter, preserves, and coffee, or invite it to dinner with lamb stew or your favorite braised meat.

What is Irish Soda Bread?

St. Patrick’s Day is an Irish-American holiday much more than an Irish holiday, but people enjoy it all over the world and is a great way to learn more about Irish culinary traditions. With flour, salt, baking soda, buttermilk, and a hot oven as the only ingredients you need, this is a simple recipe made of things you probably already have in your kitchen. It doesn’t even require any yeast! Many Irish families have their own tips and tricks for making it, so ask a friend or call up your Auntie Bridget if you happen to be Irish yourself. 

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
Buttermilk Soda Bread with Fennel Pollen in a frying pan placed on a napkin, which is placed on a dark black surface with sprinkled flour on it

Buttermilk Irish Soda Bread with Fennel Pollen


  • Author: Stephanie Sullivan

Description

Get the luck of the Irish from this bread!


Ingredients

Scale
  • 4+ cups flour (add more if needed)
  • 1 tbsp sugar
  • 1 tsp salt
  • 1 tsp baking soda
  • 4 tbsp butter
  • 1 large egg, lightly beaten
  • 1¾ cups buttermilk
  • ¼ tsp fennel pollen


Instructions

  1. Preheat oven to 425°F. Whisk together 4 cups of flour, sugar, salt, and baking soda in a food processor.
  2. Cut the butter into pieces and add to the processor. Pulse 10-12 times to incorporate into the flour.
  3. Mix buttermilk and egg; add to processor along with fennel and process until dough comes together and pulls away from sides.
  4. Turn dough onto well-floured and form a dough mound. Dust hands with a little flour, then gently knead the dough just long enough to form a round loaf. If the dough is too sticky to work with, add a little more flour. Do not over-flour or over-knead!
  5. Transfer dough to a medium, lightly greased cast-iron skillet. Using a serrated knife, score top of dough about 1½“ deep in an “X” shape.
  6. Transfer to oven and bake at 425°F until bread is golden and the bottom sounds hollow when tapped about 35-45 minutes. You can check for doneness by listening to the loaf or by inserting a skewer into the center. Best when eaten warm and just baked.

Recipe by Stephanie Sullivan 
Photography by Heather Mull

Subscribe to TABLE Magazine’s print edition.

Going Green

0
From a ‘no fun” kitchen to a lovely place to linger, this space was transformed by A. Shapiro Design and Marino Kitchen & Bath. | Photography by Erin Kelly.

“It was a no-fun kitchen.”

That’s how the owners of this Highland Park home described their space before the team of Alison Shapiro, owner of A. Shapiro Design, and Amanda Johnson, general contractor and project manager with Marino Kitchen & Bath, got their hands on it.

No longer. This renovation is effortlessly unique, joyful, and welcoming.

Shapiro, an interior design and remodeling specialist, recalls, “[The homeowners] had a very clear vision of what they wanted.” They brought her images of bespoke French kitchens and farmhouse-style cottages to the table. “They wanted my help to educate them on how to accomplish that visual. It was a creative problem-solving process for all of us.”

Step one: removing the wall between the kitchen and dining room. This freed up the previously cramped area and invited flow. To create a transitional moment, Shapiro inserted a walnut-topped bar. Complete with three J.L. Møllers stools, it is now the homeowners’ favorite place in the house.

The kitchen’s U-shape means “it’s really tight in the two corners,” say Shapiro. Working with custom cabinetry allowed the team to get it just right, with much fine-tuning in the process. In the end, some spaces were simply too small for cabinets and doors. Instead, the designer created “little custom moments that are utilitarian but also look good and are personal,” like mini shelves displaying the spines of colorful cookbooks, and an easily accessible nook used for storing cutting boards.

Thoughtful details continue in the antique brass hardware and reeded glass on select cabinets. The original exposed brick chimney pairs perfectly with the intentionally simple backsplash. “I treated it as a way to smooth out the horizon line in the kitchen and create a moment of rest for your eyes,” says Shapiro.

The cabinets feature a custom paint color, the appropriately named Sherwin-Williams Vogue Green. “This project was so fun because they were willing to take a risk, and this color was special,” says Johnson. “Green is everywhere in nature, so it’s one of the few colors that stays classic.” And, it beautifully complements the plant collection throughout.

Some might also consider bold wallpaper a risk, but — as one of the homeowners’ main sources of inspiration—it majorly paid off. The print chosen for the kitchen “is not a William Morris wallpaper, but it’s very much in the style,” says Shapiro. (British Victorian-era Morris designed over 50 papers and was known for exacting patterns drawn from nature.) She notes that the large repeat and the color density “take you back to these different eras and moments that are appropriate to the architecture in this turn-of-the-century home.”

Shapiro’s biggest aha moment was finding a way to blend existing hardwood with a new floor. While the team was able to source the same species of white oak, it would be impossible to create a perfectly seamless match. The solution? Laying the floor in a herringbone pattern.

The resulting room, from top to bottom, is perfection.

 


 

Appliance list by DON’S APPLIANCES 

Bosch 800 Series Dishwasher

Faber Inca Lux Custom Insert Range Hood

Maytag Fingerprint Resistant Stainless Steel French Door Refrigerator

Samsung Smart Slide-In Gas Range with Smart Dial & Air Fry

Soul Searching

0
Photo by Dave Bryce. Styling by Keith Recker and Charlie Marshall.

“I just fell in love with the textures, the food, the colors, the people,” says Bass & Bennett Trading Co. owner Matt Bass. “And I wanted to figure out a way to share it with people here. Bass & Bennett is the embodiment of that vision.”

It started out as an idea to pick a few favorite pieces and bring them home. Over time and multiple return trips, a few pieces became one fully loaded shipping container after another, which then evolved into a sprawling shop at Rosela Farm in Coraopolis, meticulously curated with authentic, handcrafted home furnishings and décor, all thoughtfully repurposed and reclaimed.

“You feel connected to the people that preserve these items,” says his wife and business partner, Michele. “There’s a history. There’s a story behind every piece and there’s a sense of warmth that you don’t get from manufactured things. There’s a soul to it. The wear, the patina… it all tells a story.”

That story has also been unfolding in their contemporary Sewickley Heights home. Natural light from floor to ceiling windows dances across the open space, where earthy metals and naturally weathered wood is spiked with punchy, hand-embroidered silk and cotton Kantha textiles that were once worn as saris and have been repurposed into throws, table coverings, and cushions.

“It’s really about having these pieces complement what you already own. Most people don’t have households of globally purchased items,” says Michele. “We can work with what you already have and add that special piece to give your space a hit of extra interest. We love to do that. Even in this house. It has a modern aesthetic, but we’ve added warmth. It just shows that you can have a linear space and add things that bring color, life, depth, and texture. What you see here is a living diary of our lives.”

It’s also a testimony to the hunt. “You pull that thread and try to trace each piece back to the origins,” says Matt.  It’s finding intricate, hand-carved blocks used for printing textiles, identifying the village they originated from, and paying a visit on the next trip. It’s repurposing bamboo into decorative ladders, intricately carved grinder tables into ottomans, and treating centuries-old, 20-foot tall solid teakwood doors that were salvaged from sprawling havelis as art. Because they deserve it.

“None of these pieces are manufactured,” he adds. “All are made by hand from wood that can be over 100 years old. You can see the wear marks from people having used each piece for specific purposes. They have incredible value, history, and culture. We are preserving all of that, giving them new life in a new form in a new way.”

bassbennett.com