Home Blog Page 224

Thai Pork Meatball Skewers

0
A flat-lay image of Thai Pork Meatball Skewers with limes for garnish and topping.

For these Thai Pork Meatball Skewers: Start with pasture-raised meat from Blackberry Meadows Farm (available through their online store). Add Asian fish sauce, lime juice, herbs, and green onions. Sauté until crispy and brown. Dip in a fiery sauce. Sip a cool beer. This dinner-table voyage will satisfy your wanderlust.

Thai Pork Meatball Skewers Recipe

Ingredients for the pork meatballs:

1 lb ground pork from Blackberry Meadows Farm
1 tsp fish sauce
1 tbsp lime juice
1 tsp red pepper flakes
1 shallot, finely minced
1 tbsp mint, chopped
1/4 cup cilantro, chopped
1/4 cup green onion, chopped
1 tsp sesame oil
1 garlic clove, finely minced
Salt and pepper to taste
3 cups oil for deep frying
8 cane sugar sticks or metal skewers

Instructions for the pork meatballs:

  1. Add all ingredients to a bowl and mix until everything is evenly incorporated with the ground pork.
  2. Form 1- to 2-inch balls with the pork and place onto the skewers.
  3. In a cast-iron skillet, add oil and bring to 350 degrees. Fry each pork skewer until the internal temperature of the meatballs reaches 165 degrees and the outsides are brown and crispy.
  4. Place on a paper towel to absorb any excess oil. Serve with dipping sauce and smashed cucumbers.

Ingredients for the dipping sauce:

1/4 cup chili crunch oil
2 tbsp rice wine vinegar
1 tbsp soy sauce
1 tsp fish sauce

Instructions for the dipping sauce:

Mix all ingredients in a bowl.

Ingredients for the smashed cucumbers:

3-5 mini cucumbers
1/4 cup chopped green onion
1 tbsp sesame seeds
1 tsp sesame oil
Salt to taste

Instructions for the smashed cucumbers:

  1. Smash cucumber with a mallet or heavy pot.
  2. Place in a bowl and add green onion, sesame seeds, sesame oil, and salt.
  3. Gently toss together and serve.

Recipes and Styling by Anna Calabrese / Photography by Dave Bryce

TABLE Magazine is proud to partner with Farm to Table and Buy Fresh Buy Local Western PA.

Subscribe to TABLE Magazine‘s print edition. 

Find Your Perfect Summer Rosé Pairing

0
A hand in the top left of the frame pours a glass of pink rosé wine into a big wine glass. The glass is about halfway full. National rosé Day
Photo by Kevin Kelly

Introducing a crisp, refreshing rosé at your summer soirées can be the best thing to beat the heat. Whether it’s a Catawba, a White Zinfandel, or a Cabernet Franc, there’s no going wrong with this varied family of delicious wines. Pour a glass (or two) this season with friends, and don’t forget about National Rosé Day, falling on the second Saturday of June.

Pink Catawba and Charcuterie

Pink Catawba is on the sweeter side with a medium body and moderate acidity. It’s grown across Pennsylvania (primarily in the northwest region) and comes from a varietal native to the Americas.

Though Pink Catawbas tend to have less overall tannins and light coloring, they still have fresh mild berry flavor and fresh fruit notes, with a bright, smooth finish and floral aromas.

Pair Pink Catawba with fresh melon and salty, savory meats for a perfect picnic. Semi-sweet and off-dry, Catawba wines also strike a lovely harmony with the earthiness of aged cheeses like a sheep’s milk Manchego.

White Zinfandel and Salmon

Sometimes referred to as a blush wine, White Zinfandel is a cool, crisp option with sweet and fruity notes. It tends toward light, citrusy flavors and, like classic rosés, is a great companion for grilled meats and other classic picnic foods.

The fruity aromas and sweetness of a well-built strawberry-toned White Zinfandel can live beside a wide variety of salmon dishes, from poached salmon to a salmon pâté crostini.

Look to sparkling rosé to elevate an outdoor barbeque to new heights. These wines range from light-bodied to full-bodied, dry to fruity, and the bubbles deliver a fun, summery, complexity perfect for a celebratory feast or a Sunday brunch.

Sparkling Rosé and Oysters

Dry sparkling rosés pair well with a wide range of foods, but we recommend letting them live beside an iced platter of oysters. The understated notes of fruit will bring out the sensational salinity of the shellfish, and the bubbles will contrast beautifully with the oysters’ velvety texture. Look for sparkling rosés with fine bubbles and a fresh finish.

Cabernet Franc Rosé and Roasted Chicken

Cabernet Franc is a dark-skinned grape with origins in Spain. It is often mixed with other grapes like Merlot and Cabernet Sauvignon to make deeper, earthier red blends, but it also is the basis for a delicious rosé all on its own. Dry and aromatic, it features an enchanting balance between zesty acidity and a deeply layered texture.

Try a Cabernet Franc Rosé with the tender white meat of poultry. Its medium body and minerality make it a terrific companion because it avoids oaky interference, with the smoky, herby taste of grilled or roasted chicken.

Written in partnership with Pennsylvania Wines.

Ginger Mama Cake

0
Strawberries, berries, and flowers adorn a ginger cake with the sides non-iced, blue, pink, and purples color the cake.

Get the kids in the kitchen to make a sweet treat. This ginger mama cake recipe is perfect fun for little hands: it’s not supposed to be perfect, so all the glitches and random things that happen when you put it together are part of the picture!

Wishing to feast on other ginger-packed desserts? Try our recipes for Gingered Peach and Blackberry Pie and Gingerbread Cookies for that kick of spice you love.

Story, Recipe, and Styling by Keith Recker

Subscribe to TABLE Magazine’s print edition.

Vegetarian Ramen Bowl Recipe

0
A flay-lay image of vegetarian ramen bowls with various vegetables and garnishes. Vegetarian meal.

Healthy doesn’t have to mean sacrificing flavor with this vegetarian ramen bowl recipe. The dish is packed with flavor and perfect for Meatless Mondays. We used mushrooms from Real Fungi and veggies from Tiny Seed Farm.

Where Does Ramen Come From? 

The very first ramen has its roots in Chinese cooking, not Japanese. The name comes from lamian, meaning “pulled noodles.” The very first instance of it appeared in Yokohama’s Chinatown in the 1920s, and now these delicious noodles have captured people across nations, including in this vegetarian ramen bowl recipe.

Vegetarian Ramen Bowl Recipe

Ingredients for the Ramen

  • 2 cups mushrooms from Real Fungi, LLC
  • 1 small onion, chopped
  • 1/2 cup carrots, chopped
  • 3 garlic cloves from Tiny Seed Farm
  • 2-inch ginger piece
  • 1/4 cup miso
  • 1 tbsp soy sauce
  • 1 tbsp mirin
  • 1 tbsp rice wine vinegar
  • 1 tbsp vegetable bullion
  • 1 tsp sesame oil
  • 1 tsp sriracha
  • 3 qt water
  • 2 packs of your preferred instant ramen noodles or rice noodles

Instructions for Vegetarian Ramen Bowl 

  1. In a large stock pot add all broth ingredients. Simmer on low for 1-2 hours.
  2. Strain and season with additional soy sauce to taste.
  3. After straining the broth, add in noodles and cook according to package directions.
  4. Top with local veggies (roasted carrots, roasted radishes, sautéed spinach, roasted mushrooms, chopped green onions, pickled Swiss chard stems).

Quick-Pickled Swiss Chard Stems Recipe 

Ingredients

  • 2 cups chopped Swiss chard stems from Marshall’s Heritage Farm
  • 1/2 cup apple cider vinegar
  • 1/2 cup water
  • 1 tbsp sugar
  • 1 tsp salt
  • 1 tsp black peppercorns
  • 1 star anise

Instructions 

  1. Place chopped stems into a Mason jar and set aside.
  2. Add vinegar, water, sugar, salt, and spices to a sauce pot and bring to a simmer.
  3. Pour over stems and cover with a lid. Let sit for at least 1 hour or up to 2 weeks.

Recipes and Styling by Anna Calabrese / Photography by Dave Bryce

TABLE Magazine is proud to partner with Farm to Table and Buy Fresh Buy Local Western PA.

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

Conroy Foods Shares Pittsburgh Music Through QR codes

0
4 cocktails on a green tray with a plant behind them sitting on a white table
Photo Courtesy of Square Cafe

Jim Conroy, one of the owners of Conroy Foods — makers of Beano’s Deli Condiments — is sharing Pittsburgh music on a national stage with a scannable QR code on 2.5 million bottles of their Beano’s Original Submarine Dressing linking people across North America to bands and musicians from their hometown.

On the page, you can find a curated playlist featuring several local bands, such as The Clarks, Gene the Werewolf, The Living Street, and more. Below the playlist, visitors can access links to band websites with show schedules and additional information on how to support them.

“After many months of planning and preparation, The Clarks are excited to LIVE, LOVE and GET SAUCED with Beano’s music streaming promotion,”  says Greg Joseph, a member of The Clarks who played a large role in curating the list of bands.

In addition to showcasing the immense talent of these local musicians, the landing page will also include an entry form to win swag from several of the bands to kick off the promotion.

“I came up with the Pittsburgh Music Promotion idea while attending a Clarks show in 2022 at the Oaks Theater in Oakmont, PA,” Conroy says on how the idea for this promotion came about. “The Clarks are so good — I thought that there must be a way to let more people know how good they are, when it hit me. What if we could place a QR code link to a band playlist on every bottle of our Beano’s Original Submarine Dressing. I took the idea to Jen Gregg, our Director of Marketing & Communications. Jen and her team brought the idea to life.”

“Pittsburgh Original Music paired with Beano’s Original Submarine Dressing: A feast for your senses,” says Conroy.

About Conroy Foods, Inc. – Makers of Beano’s Deli Condiments

Conroy Foods grew out of a restaurant called “Beano’s” Pizza & Suds, located just outside of Pittsburgh, Pennsylvania, in Blawnox. After graduating from college, Jim and his brother Bill founded the restaurant, and after several years of long nights and weekends, together with Jim’s wife, Leslee, they started bottling their signature submarine dressing and formed Conroy Foods, Inc. Their first customer was the regional grocery chain, Giant Eagle.

They grew the business from a single flagship product, submarine dressing, to a full line of deli condiments. Today, Conroy Foods, Inc. produces 2.5 million bottles of Beano’s Original Submarine Dressing annually. They have expanded their reach from regional to national and beyond, including markets from Canada to Dubai. You can find Beano’s Deli Condiments in your local grocery store deli department and in deli departments throughout the United States.

Your New Go-to Homemade BBQ Sauce Recipe

0
10 grilled wings with even charring sit on a white marble cutting board alongside two beers and a bowl of homemade bbq sauce.
When TABLE contributor Jasmine “Frankie” Zavala was asked to describe a favorite food memory, she wrote about the unforgettable sauce of an Atlanta BBQ joint, Mustard Seed. She attempts (successfully) to recreate the recipe.

Her flight from Bermuda was set to arrive any minute now. I bobbed and weaved my sedan through the thick Atlanta traffic, six lanes full of cars, yet still moving as if through the water. Did I have enough time? Would she forgive my tardiness if satiated with a free barbecue? My car screeched into the Mustard Seed parking lot right as I answered her call. Frankieeee, I’m here. Where you? I doused my greeting with preemptive apologies, yet one mention of my BBQ intentions was enough to salve over my lack of punctuality.

The intoxicating scent of time and swine promptly swept over me before I stepped into the restaurant. The scent and the sign-out front were the only indications of this place being a dining space. It looked like a former auto-body shop, with a counter that lifted so workers could pass through for oil changes. As soon as I stepped into the makeshift vestibule, the owner exasperatedly greeted me with an apologetic proclamation: “I’m so sorry, but we are all out of free pulled pork sandwiches.” I could not hide my disappointment. My fast and furious efforts had been in vain. I was going to show up at the airport late and empty-handed to collect my friend who traveled across the ocean to see me.

“But I have some ribs. Would you like those?” It was as if the owner saw my silent spiral into the pits of barbecue despair and elected to throw me a lifeline. A breathless YES! was my only reply. Who was I to deserve this blessed upgrade? I felt the weight of the ribs in their Styrofoam cradle nestled against my open palm. Rushing out of the restaurant in equal parts, hurrying to pick up my friend, and fearing that the owner would change his mind, I carefully walked to my car.

As soon as Chantelle opened the overly stuffed takeout box, the energy in the car shifted to delight. FRANKIE! We had yet to acquire some ribs but a whole rack of them. Fuck waiting until we got home. I needed those ribs now. And I took them like a lover in the night. As Chantelle called home to inform her family of her safe arrival, her mother overheard me praising the Lord above for the bounty that he saw fit to bestow upon a poor weary soul like me. A good barbecue will do that to a person. One minute you’re swearing, thinking of all the ways that you will undoubtedly defile what is slathered in front of you, and the next, you’re praising and thanking the Lord that it happened.

The ribs were true to their name. The hint of mustard added to the sauce was subtle enough to let you know that it decided to show up to the pig pickin’, but it did not need to be the center of attention. One lift of a rib resulted in the meat almost not making it to my mouth, barely clinging to the bone as if holding on desperately for dear life. Licking my fingers between changing gears and making turns, we finally made it home. We immediately wished that there was more BBQ to be had.

Faith in Barbecue (Homemade BBQ Sauce Recipe)

The following recipe is an amalgamation of memories, internet searches, and on-hand pantry staples. Please feel free to revise as your desire and your palate see fit.

INGREDIENTS

1 cup yellow mustard
1/2 cup honey
1/4 cup brown sugar
1/2 cup apple cider vinegar
4 tbsp ketchup
2 tbsp chipotle pepper in adobo, minced
2 tsp Worcestershire sauce
1 tsp garlic powder
1 tsp onion powder
1 tsp smoked paprika
Ground black pepper to taste. However much cayenne pepper feels suitable for you and your household.

INSTRUCTIONS

  1. Add all ingredients in a medium-sized mixing bowl and whisk together.
    While whisking, allow yourself to visualize all of the new, delicious memories you’ll create at the grill with this recipe.
  2. Add ingredients into a small pot over low heat and allow to simmer for 20 minutes, stirring occasionally.
  3. Remove the pot from the heat and let it cool for 10 minutes.
  4. Transfer the homemade barbecue sauce to a jar with a lid.

It’s best to leave the sauce in the refrigerator for one day to let the flavors become more acquainted with one another, but no one will blame you if you want to slather it on your favorite cut of meat immediately. Happy grilling!

Story and Recipe by Jasmine Zavala / Photography by Dave Bryce

Don’t miss a single delicious thing:

Subscribe to TABLE Magazine’s print edition.

Berry Tahini Crumble

0
A flat-lay view of a Berry Tahini Crumble with Leona's Honey Lavender ice cream. A yummy berry dessert.

The year is just long enough that we forget the uniquely fragrant, sweet-yet-tart burst of flavor that comes from farm-fresh strawberries and foraged blackberries. When that moment arrives, the abundance is just about as impressive as the taste. Channel some of that bounty into this berry crumble, where tahini enriches the butter, burnishing and deepening its nuttiness. Sources of berries are many in Western PA, but we like Triple B Farms, where opportunities for family fun sit right alongside the growing fields.

Berry Tahini Crumble Recipe

Ingredients for the filling:

4 cups fresh strawberries from Triple B Farms
1 cup blackberries
1/2 tbsp cornstarch
1 tbsp brown sugar
1 tsp lemon juice

Ingredients for the crumble:

1/2 cup flour
1/2 cup old-fashioned rolled oats
1/4 cup brown sugar, packed
1 tsp vanilla
1/4 tsp cinnamon
6 tbsp butter, melted
1/4 cup tahini

Instructions

  1. Preheat oven to 350 degrees.
  2. Cut stems of strawberries. Place the strawberries and blackberries into a large mixing bowl with cornstarch, sugar, and lemon juice, and stir to coat.
  3. Spread evenly into the baking dish. Set aside.
  4. In another mixing bowl, mix flour, rolled oats, sugar, vanilla, and cinnamon. Add melted butter and tahini and mix until small crumbles start to form. Sprinkle evenly over berries.
  5. Bake for 25-30 minutes or until the fruits are cooked, bubbly, and the top is cooked and crispy.
  6. Serve your berry crumble with a scoop of Leona’s Honeycomb Lavender Ice Cream.

Recipes and Styling by Anna Calabrese / Photography by Dave Bryce

TABLE Magazine is proud to partner with Farm to Table and Buy Fresh Buy Local Western PA.

Subscribe to TABLE Magazine’s print edition.

Healthy Mocktail Shots

0
4 glasses of different sizes almost filled with green, red, and orange-colored healthy shots. Best Mocktail Recipes

Ah, mocktail shots, the alternative to their spirited counterparts without an ounce of regret or debaucherous proof on Instagram, all while keeping your well-being intact. These concoctions are a masterful blend of nature’s finest gifts — succulent fruits, fragrant herbs, and sweetness. With each sip, your senses are transported to a world where vibrant flavors linger harmoniously. So raise your glasses to these health-conscious mocktail shots, a toast to savoring life’s pleasures without compromise, all in the name of wellness and happiness. Chin-chin!

What’s In Our Round of Mocktail Shots

Make each one on their own, or serve as a round of shots together for a glass-clinking that won’t leave you felling less than your best. We’re serving up a Green Juice Mocktail shot, a Turmeric Ginger Health Shot, a Bloody Mary mix (to ration out into shots), and a Green Smoothie shot. They’re as multi-colored as they are delicious! If you find yourself hooked on wellness shots, there are also many options out there to try.

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

4 glasses of different sizes almost filled with green, red, and orange-colored healthy shots. Best Mocktail Recipes

Healthy Shots: Mocktail Recipes


5 Stars 4 Stars 3 Stars 2 Stars 1 Star


  • Author:
    Reid Putlitz

Description

A lineup of shots with more nutritional value than your average vodka shot.


Ingredients


Scale

For the Green Juice Mocktail Shot

  • 1 cup of fresh spinach
  • 8 kale leaves (stalks included)
  • 4 fresh basil leaves
  • 1 cucumber
  • 1 lime
  • 1-inch piece of fresh ginger
  • 2 pears
  • 4 oz fresh pineapple
  • 1 can of pineapple or grapefruit Spindrift
  • Mint for garnish

For the Bloody Mary Shot

  • 3 cups Muir Glen fire-roasted tomatoes, drained
  • 3 tbsp lemon juice
  • 1 tbsp grated horseradish
  • 2 tbsp vegan Worcestershire
  • 1 tbsp fresh grated garlic
  • 2 tbsp Tabasco sauce
  • 1 ½ tsp celery salt
  • 1 tbsp Old Bay seasoning
  • 1 tsp coarse ground black pepper
  • ½ cup pickle brine

For the Turmeric Ginger Health Shot

  • 6 oz fresh Ginger root
  • 6 oz fresh turmeric root
  • 3 oz fresh squeezed lemon juice
  • Pinch of Cayenne

For the Green Smoothie Shot

  • 1.5 oz kale
  • 1.5 oz spinach
  • 3.6 oz banana
  • 2 pitted dates
  • 10 oz coconut water
  • A handful of ice

 


Instructions

For the Green Juice Mocktail Shot

  1. Juice all veggies, fruit, and greens together using the cucumber to push through the basil, spinach, and kale.
  2. Freeze juice in a round ice cube mold.
  3. Place the ice cube in a low ball cocktail glass and fill the glass up half full of Spindrift.
    Garnish with fresh mint. Serves 1.

For the Bloody Mary Shot

  1. Drain the tomatoes and puree in a blender.
  2. Mix in all other ingredients.
  3. Use Old Bay seasoning on the rim.
  4. Garnish with reckless abandon. Serves 6.

For The Turmeric Ginger Shot 

  1. Juice the ginger and turmeric together.
  2. Add lemon juice and cayenne to the ginger and turmeric juice.
  3. Add one drop of oil of oregano oil. (Makes 10 oz; suggested serving size is 2 oz)

For the Green Smoothie Shot

  1. Freeze contents of smoothie kit (kale, spinach, banana, and dates).
  2. Combine contents with ice and coconut water into a blender and blend until smooth. Serves 1.

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

Recipes by Reid Putlitz
Photography by Josiah Hull
Styling by Laura Goble

Subscribe to TABLE Magazine’s print edition.

Killers of the Flower Moon Cocktail

0
Moon Rising - Killers of the Flower Moon Cocktail. Two sit in martini glasses, garnished with a lemon peel. Bright red in color

Is there anything more relaxing than enjoying a new read, cocktail in hand? Well, maybe if that book and drink are in your hand on a beach… Either way, as you dive into David Grann’s Killers of the Flower Moon: The Osage Murders and the Birth of the FBI in preparation for the movie debut this fall, might we suggest enhancing the experience by sipping on our Moon Rising cocktail? (It’ll make a great addition to any viewing parties too!)

About Killers of the Flower Moon

This hit novel is the stranger-than-fiction true story of the beginnings of the FBI at the turn of the twentieth century. It’s a gripping tale of how the indigenous Osage people built wealth under their land, only to begin being killed off by nefarious forces. Martin Scorcese’s film adaptation clocks in at two and a half hours, so if you’re making this cocktail, make a batch and have a few, you’re in it for the long haul!

Killers of the Flower Moon Cocktail Recipe

Ingredients

  • 1 oz Raspberry simple syrup (See below)
  • 2 oz vodka
  • 1 oz lemonade
  • 1 oz fresh squeezed lemon

Instructions

  1. Shake ingredients over ice and serve up in a couple of martini glasses.
  2. Garnish with a lemon twist.

Raspberry Simple Syrup Recipe

Ingredients

  • Fresh raspberries
  • 1 cup of water
  • 1 cup of sugar

Instructions

  1. Crush 1 small clamshell of fresh raspberries in a saucepan.
  2. Add 1 cup of water and 1 cup of sugar.
  3. Cook on high until reduced, about 15 minutes. Let cool and strain out seeds from the simple using a sieve.

Share your Killers of a Flower Moon cocktail and reading experience with us on Instagram: @tablemagazine_westernpa.

Recipe by Justin Matase / Photography by Dave Bryce

A footer photo with a black background and subscribe info and button

Subscribe to TABLE Magazine‘s print edition.

Cauliflower Steaks with Curry Oil & Cherry Sauce

0
Cauliflower Steaks with Curry Leaf Oil and Red Wine Cherry Sauce sit on a blue plate to the left of the frame.

Cauliflower Steaks: a vegetarian delight that challenges the norms of flavor. Thickly sliced cauliflower steaks are roasted to golden perfection and then drizzled with a fragrant curry leaf oil. The rich and savory red wine cherry sauce adds a touch of sweetness and complexity to this elegant and flavorful vegetarian dish. For this recipe we use safeyyas.com to order the Yaji spice. This is the brand we prefer, but you can purchase Yaji spice at Amazon or, visit your local global foods store.

What are Curry Leaves?

Curry leaves, which of course derive from the curry leaf tree, are aromatic leaves. Their unique flavor profile adds depth and complexity to South Indian, Sri Lankan, and Southeast Asian cuisines but can be added to just about any dish. On their own, the leaves are citrusy, slightly bitter, and almost like lemongrass. To take advantage of this flavor, we use them in a curry leaf oil. The curry leaves soak in hot oil until the oil absorbs the leaves’ distinct aroma and flavor. This cooking oil can then be used to enhance various dishes, like on our Cauliflower Steaks.

Recipe by Veda Sankaran ⁠
Photography by Dave Bryce

Subscribe to TABLE Magazine’s print edition.