Cowboy Kent Rollins Chocolate Gravy & Biscuits

Chocolate Gravy and Biscuits


So many Christmas mornings in my house were spent with chocolate syrup on biscuits. I've seen some families use chocolate gravy with their biscuits, as well. I'm going to fix them both this year, using our 2-ingredient biscuits. Chocolate on biscuits has always been a huge treat for me, and I know you'll enjoy them, too!

Chocolate Syrup vs. Chocolate Gravy

The difference between chocolate syrup and chocolate gravy is whether it's water based or milk based. For the chocolate gravy, we'll use evaporated milk and some flour to thicken it up so it'll stick to the biscuits better. The chocolate syrup will have the almost the same ingredients, but will be made with warm water.

2 Ingredient Biscuits

The full recipe for the 2-ingredient biscuits is at the bottom of this post. How is it possible to make biscuits with two ingredients? It's simple - buy self rising flour and whipping cream. Mix together until you have a soft dough that doesn't stick to your hands. Roll it out, and cut out your biscuits. Bake 'em, and while they're baking, make the chocolate sauce. The original 2 ingredient biscuit recipe post is here.

We appreciate you sharing our recipes with your friends and family!

Tip: Don't preheat cast iron if you're making biscuits, because they'll burn.

If you're cooking inside, bake at 350 for about 20 minutes or until they're golden brown on top.

Chocolate Gravy

Start by adding the cocoa powder, sugar, and flour to a saucepan. Mix it up really well. You don't want any cocoa to stick together in clumps - sift if you need to. Add a little cinnamon, and stir well.


Next, mix in your canned milk. You can use any milk or cream you have around the house, but I find that condensed milk makes a thicker gravy. Add the butter in, and stir constantly. Add a little Mexican vanilla and keep stirring. You don't want to scorch the milk or sugar by leaving it too long.

Chocolate Syrup

Start again by mixing up the cocoa powder and sugar until they're combined and smooth with no lumps. Add warm water and stir well. Add the butter and cook until the butter is melted. Add the vanilla in when the butter melts. It's as simple as that, y'all.

Two blue plates side by side; the left has two biscuits covered in chocolate gravy and the right has two open biscuits covered in chocolate syrup.

As always, Shannon and I thank you for visiting our website and subscribing to our videos. Please follow us on Facebook and Instagram! We’ll see you down the chocolate & biscuits trail!


Chocolate Gravy – Cowboy Kent Rollins

Servings 2 cups
Prep Time 5 Minutes
Total Time 10 Minutes
Author Cowboy Kent Rollins

Ingredients

  • 3/4 cup sugar

  • 3 tablespoons cocoa

  • 1/4 cup all-purpose flour

  • 1 1/2 cups evaporated milk

  • 1/2 teaspoon cinnamon

    optional

  • 1/4 teaspoon salt

  • 1 teaspoon vanilla

  • 2 tablespoons butter

Instructions

  1. In a saucepan add the sugar, cocoa, and flour and mix well. Whisk in the milk, cinnamon, salt, vanilla and butter. Place over medium heat and bring to a simmer, stirring occasionally.
  2. When it thickens to the consistency you like, remove from the heat and spoon over biscuits.

Chocolate Syrup – Cowboy Kent Rollins

Servings 2 cups
Total Time 10 Minutes
Author Cowboy Kent Rollins

Ingredients

  • 1 cup white sugar

  • 2 ½ tablespoons Cocoa

  • ¾ cup warm water

  • 3 teaspoons vanilla

  • 1 stick butter

Instructions

  1. In a saucepan, mix together the white sugar, cocoa. Whisk in the warm water.
  2. Place the saucepan over medium heat and bring to a boil. Whisk in the vanilla and butter. Reduce the heat to low, and simmer for about 10, stirring constantly, until it slightly thickens. Serve warm over biscuits.

2 Ingredient Biscuits – Cowboy Kent Rollins

Servings 8 to 10 2 1/2 inch biscuits
Prep Time 5 Minutes
Total Time 25 Minutes
Author Cowboy Kent Rollins

Ingredients

  • 2 cups self-rising flour

  • 1 ½ cups heavy cream

Instructions

  1. Preheat the oven to 400 degrees F. Butter a cast iron skillet or baking dish. We also prefer to use bacon grease for better crush and flavor.
  2. Sift the flour into a medium bowl. Stir in the heavy cream, until combined.
  3. Turn the dough out onto a floured surface. Flour your hands, and knead the dough a few times. The outside of the dough shouldn’t be sticky, but the inside should still have some moisture.
  4. Roll the dough out to about ½-inch thick. Using a biscuit cutter, cut the biscuits out and place in the skillet or dish. Brush with a little additional whipping cream.
  5. Bake for about 12 to 15 minutes, or until a light golden brown. Brush a little melted better on top (optional) and serve.

Notes

  • You can make the dough ahead of time, cut the biscuits out and freeze. Bake them frozen, but your bake time may increase.
window._ABConfig.getProductDiscountedPricing = ({ variantId, amount, quantity, sellingPlanId }) => { const disableAppFunctionality = window?._ABConfig?.['disableAppFunctionality'] || false; if (!variantId || disableAppFunctionality) { console.error('Please provide a current variant id'); return []; } //helper functions const isDiscountUsageLimitExceed = (customerDiscountUsage, bundle) => { if (customerDiscountUsage && customerDiscountUsage.length) { const targetDiscountUsage = customerDiscountUsage.find( (discountUsage) => discountUsage?.uniqueRef === bundle?.uniqueRef ); return targetDiscountUsage && targetDiscountUsage?.usageCount >= bundle?.limitToUsePerCustomer; } return false; }; const isBundleRestrictedCustomerByTagsByDiscount = (item, customerTags) => { if (!item?.restrictTags) return false; const restrictTags = item?.restrictTags?.split(','); return customerTags && customerTags.length > 0 && customerTags.some((tag) => restrictTags?.includes(tag)); }; const isBundleAllowedByCustomersTagByDiscount = (item, customerTags) => { if (!item?.allowedTags) return true; const allowedCustomersOnly = item?.allowedTags?.split(','); return ( customerTags && customerTags.length > 0 && customerTags.some((tag) => allowedCustomersOnly?.includes(tag)) ); }; const isBundleRestrictedByDiscount = (item, customerTags) => { return isBundleRestrictedCustomerByTagsByDiscount(item, customerTags) || !isBundleAllowedByCustomersTagByDiscount(item, customerTags); }; const processBundleRules = (bundles, type, fields) => bundles .filter((bundle) => bundle?.bundleType === type) .map((rule) => { const parsedRule = { ...rule }; fields.forEach((field) => { try { parsedRule[field] = JSON.parse(rule[field] || '[]'); } catch (e) { console.error('Failed to parse field:', field, e); parsedRule[field] = []; } }); return parsedRule; }); const getBestDiscount = (applicableDiscounts, lineItem, discountKey = 'discount') => { return applicableDiscounts.reduce((greater, current) => { const greaterDiscount = greater?.[discountKey]; const currentDiscount = current?.[discountKey]; if ((greater?.discountType === "PERCENTAGE" && current?.discountType === "PERCENTAGE") || (greater?.discountType === "FIXED_AMOUNT" && current?.discountType === "FIXED_AMOUNT")) { return currentDiscount > greaterDiscount ? current : greater; } else if (current?.discountType === "FIXED_AMOUNT" && greater?.discountType === "PERCENTAGE") { return currentDiscount > ((greaterDiscount / 100) * lineItem?.totalAmount) ? current : greater; } else if (current?.discountType === "PERCENTAGE" && greater?.discountType === "FIXED_AMOUNT") { return ((currentDiscount / 100) * lineItem?.totalAmount) > greaterDiscount ? current : greater; } return currentDiscount > greaterDiscount ? current : greater; }); }; const getApplicableTieredDiscount = (volumeDiscountBundles, lineItem) => { let applicableDiscount = null; const updatedVolumeDiscountBundles = volumeDiscountBundles.map(bundle => { const updatedTieredDiscount = bundle?.tieredDiscount.map(discount => { return { ...discount, appliesOn: bundle?.appliesOn }; }) return { ...bundle, tieredDiscount: updatedTieredDiscount } }); const volumeDiscountBundlesTieredDiscount = updatedVolumeDiscountBundles.reduce((acc, item) => { return acc.concat(item?.tieredDiscount); }, []); let applicableQuantityBasedDiscount = volumeDiscountBundlesTieredDiscount .filter(tieredDiscount => tieredDiscount?.discountBasedOn === "QUANTITY") .filter(tieredDiscount => lineItem?.quantity >= tieredDiscount?.value); applicableQuantityBasedDiscount = applicableQuantityBasedDiscount.length > 0 ? getBestDiscount(applicableQuantityBasedDiscount, lineItem) : null; let applicableSpendAmountBasedDiscount = volumeDiscountBundlesTieredDiscount .filter(tieredDiscount => tieredDiscount?.discountBasedOn === "AMOUNT") .filter(tieredDiscount => lineItem?.totalAmount >= tieredDiscount?.value); applicableSpendAmountBasedDiscount = applicableSpendAmountBasedDiscount.length > 0 ? getBestDiscount(applicableSpendAmountBasedDiscount, lineItem, ) : null; if (applicableQuantityBasedDiscount && applicableSpendAmountBasedDiscount) { if ((applicableQuantityBasedDiscount?.discountType === "PERCENTAGE" && applicableSpendAmountBasedDiscount?.discountType === "PERCENTAGE") || (applicableQuantityBasedDiscount?.discountType === "FIXED_AMOUNT" && applicableSpendAmountBasedDiscount?.discountType === "FIXED_AMOUNT")) { if (applicableQuantityBasedDiscount?.discount > applicableSpendAmountBasedDiscount?.discount) { applicableDiscount = applicableQuantityBasedDiscount; } else { applicableDiscount = applicableSpendAmountBasedDiscount; } }else if(applicableQuantityBasedDiscount?.discountType === "PERCENTAGE" && applicableSpendAmountBasedDiscount?.discountType === "FIXED_AMOUNT"){ if (((applicableQuantityBasedDiscount?.discount / 100) * lineItem?.totalAmount) > applicableSpendAmountBasedDiscount?.discount) { applicableDiscount = applicableQuantityBasedDiscount; } else { applicableDiscount = applicableSpendAmountBasedDiscount; } }else if(applicableQuantityBasedDiscount?.discountType === "FIXED_AMOUNT" && applicableSpendAmountBasedDiscount?.discountType === "PERCENTAGE"){ if (applicableQuantityBasedDiscount?.discount > ((applicableSpendAmountBasedDiscount?.discount / 100) * lineItem?.totalAmount)) { applicableDiscount = applicableQuantityBasedDiscount; } else { applicableDiscount = applicableSpendAmountBasedDiscount; } } } else if (applicableQuantityBasedDiscount) { applicableDiscount = applicableQuantityBasedDiscount; } else if (applicableSpendAmountBasedDiscount) { applicableDiscount = applicableSpendAmountBasedDiscount; } return applicableDiscount; } const getApplicablePercentOrFixedDiscount = (discountedPricingBundles, lineItem) => { let applicableDiscount = null; let applicableQuantityBasedDiscount = discountedPricingBundles .map(bundle => { return { ...bundle, minProductCount: bundle?.minProductCount || 0, maxProductCount: bundle?.maxProductCount || 0, minOrderAmount: bundle?.minOrderAmount || 0 }; }) .filter(bundle => { const minCount = bundle.minProductCount; const maxCount = bundle.maxProductCount; const minAmount = bundle.minOrderAmount; if (minCount > 0 && lineItem.quantity < minCount) return false; if (maxCount > 0 && lineItem.quantity > maxCount) return false; if (minAmount > 0 && lineItem.amount < minAmount) return false; return true; }); applicableDiscount = applicableQuantityBasedDiscount.length > 0 ? getBestDiscount(applicableQuantityBasedDiscount, lineItem, 'discountValue') : null; if(applicableDiscount){ applicableDiscount = { discountBasedOn: applicableDiscount?.minOrderAmount > 0 && applicableDiscount?.minProductCount === 0 ? "AMOUNT" : "QUANTITY", value: applicableDiscount?.minOrderAmount > 0 && applicableDiscount?.minProductCount === 0 ? lineItem?.totalAmount : lineItem?.quantity, discount: applicableDiscount?.discountValue, discountType: applicableDiscount?.discountType, appliesOn: applicableDiscount?.appliesOn } } return applicableDiscount; } const collections = _ABConfig?.product?.collections || []; const discountBundles = [{"id":39019,"shop":"kent-rollins-store.myshopify.com","name":"Buy Any 3, Save 12%! Buy 5+, Save 15%!","description":"Buy any combination of 3 eligible spices & seasonings, save 12%. Buy 5 or more, and save 15%","status":"ACTIVE","customerIncludeTags":null,"discountType":"TIERED_DISCOUNT","discountValue":null,"products":null,"variants":"null","sequenceNo":null,"bundleType":"CLASSIC_BUILD_A_BOX","settings":"{\"cardGap\":16,\"sequentialProductsPerBatch\":50,\"showUnitPrice\":false,\"showPricesWithoutDecimal\":false,\"disableProductDescription\":false,\"bundleProductNameSortOrder\":\"DEFAULT\",\"includedSubscriptionPlans\":\"\",\"excludeSubscriptionPlans\":\"\",\"perRowItem\":\"THREE\",\"enableAnnouncementBar\":true,\"borderRadius\":8,\"showClassicBundleWidgetInChildProduct\":false,\"enableSequentialProductLoading\":false,\"disableScrollingToBundle\":false,\"showPriceWithSubscriptionPrice\":true,\"showComboBundleWidgetInComboProduct\":false,\"showPriceOfChosenProductsOnly\":false,\"hideQuantitySelector\":false}","bundleProductId":null,"bundleVariantId":null,"productHandle":null,"discountId":null,"price":null,"numberOfProducts":0,"subscriptionBundlingEnabled":false,"subscriptionId":null,"minProductCount":3,"maxProductCount":10,"uniqueRef":"hqblara0d3","bundleRedirect":"CART","customRedirectURL":null,"minOrderAmount":null,"tieredDiscount":"[{\"discountBasedOn\":\"QUANTITY\",\"value\":5,\"discount\":15,\"discountType\":\"PERCENTAGE\",\"discountAllowedTags\":null}]","productViewStyle":"QUICK_ADD","singleProductSettings":null,"trackInventory":false,"sellingPlanType":"BUNDLE_LEVEL","clearCart":"DISABLED","minPrice":null,"maxPrice":null,"externalBuildABoxId":null,"variantVisibilityType":"SHOW_VARIANTS_AS_OPTIONS","subTitle":"Mix and Match any combination of spices and seasonings to save!","freeShipping":false,"themeType":"THEME_ONE","showBundleInProductPage":true,"combinedWithProductDiscount":false,"combinedWithShippingDiscount":true,"combinedWithOrderDiscount":false,"allowedTags":null,"restrictTags":null,"selectionType":"FLEXIBLE","bundleHtml":null,"discountedVariants":null,"allowedCountries":null,"appliesOn":"BOTH","purchaseRequirement":"NO_REQUIREMENT","productDiscountType":"EACH_PRODUCT","countrySelectionType":"ALL_COUNTRY","discountApplyApproach":"SHOPIFY_DISCOUNT_FUNCTION","discountedProductChooseType":"CHOOSE_ALL","internalName":"Buy More, Save More (Sauces & Seasonings)","sections":"[]","limitToUsePerCustomer":null,"discountedVariantSelectionLimit":null,"hideOneTimePurchase":false,"hideSubscriptionPurchase":false,"maxOrderAmount":null,"collectionData":"[{\"id\":497906909503,\"title\":\"Seasonings\",\"handle\":\"seasonings\",\"image\":null},{\"id\":497906876735,\"title\":\"Sauces\",\"handle\":\"sauces\",\"image\":null}]","productSelectionType":"COLLECTION","tag":"appstle_bundles","productChooseType":"CHOOSE_ALL","variantSelectionLimit":null,"discountTargetType":"VARIANT","enableSubscription":false,"subscriptionWidgetPosition":"BELOW","subscribeTitle":"Subscribe and Save","subscribeSubtitle":"Delivered Monthly","subscriptionPreselected":false,"getYAppliesOn":"BOTH","announcementBarMessage":null,"automaticDiscountNodeId":"gid://shopify/DiscountAutomaticNode/1548956926271","recurringCycleLimit":0,"automaticShippingDiscountNodeId":"gid://shopify/DiscountAutomaticNode/1548956959039","scheduledBundleRule":false,"bundleActiveFrom":"2026-01-21T18:00:00Z","bundleActiveTo":null,"bundleSubType":null,"discountAppliesOn":"PER_ORDER","layoutType":"LAYOUT_ONE","style":"{\"tierFullPriceColor\":\"#1e293b\",\"tierFreeGiftTitleFontSize\":13,\"tierUpsellTitleFontSize\":13,\"primaryColor\":\"#000000\",\"tierSubTitleFontSize\":13,\"otherProductsModalFullPriceColor\":\"#555555\",\"primaryDisabledColor\":\"#333333\",\"cardHoverColor\":\"#f8fafc\",\"otherProductsModalPriceColor\":\"#000000\",\"otherProductsModalButtonTextColor\":\"#ffffff\",\"otherProductsButtonBackgroundColor\":\"#374151\",\"tierPriceFontSize\":20,\"tierUpsellSubTitleFontSize\":12,\"comboProductFullPriceFontSize\":12,\"headingTextColor\":\"#000000\",\"badgesTextColor\":\"#ffffff\",\"blockTitleFontStyle\":\"BOLD\",\"tierTitleFontSize\":20,\"otherProductsProductTitleColor\":\"#374151\",\"subscriptionTitleTextColor\":\"#1e293b\",\"subscriptionSubTitleFontSize\":13,\"otherProductsImageSize\":40,\"saveBadgeBackgroundColor\":\"#d1fae5\",\"tierFreeGiftBackgroundColor\":\"#f1f5f9\",\"cardGap\":16,\"tierPriceFontStyle\":\"BOLD\",\"otherProductsModalOverlayColor\":\"#6b7280\",\"tierPriceColor\":\"#1e293b\",\"tierFreeGiftPriceFontSize\":14,\"otherProductsButtonTextColor\":\"#ffffff\",\"tierTitleFontStyle\":\"BOLD\",\"ruleUpsellSubTitleFontSize\":13,\"comboProductPriceFontSize\":13,\"tierUnitLabelFontSize\":14,\"blockTitleFontSize\":14,\"otherProductsProductTitleSize\":16,\"productCardBackgroundColor\":\"#ffffff\",\"cardBackgroundColor\":\"#ffffff\",\"buttonBackgroundColor\":\"#8E0B0B\",\"bundlePageBackgroundColor\":\"#FAFAF9\",\"borderRadius\":8,\"tierUpsellBackgroundColor\":\"#e2e8f0\",\"ruleUpsellTitleTextColor\":\"#1e293b\",\"ruleUpsellSubTitleTextColor\":\"#1e293b\",\"tierUpsellSubTitleTextColor\":\"#1e293b\",\"primaryDisabledTextColor\":\"#ffffff\",\"otherProductsModalProductTitleTextSize\":14,\"otherProductsModalProductTitleColor\":\"#000000\",\"fieldDisabledBackgroundColor\":\"#D1D5DB\",\"otherProductsModalImageSize\":80,\"disabledTextColor\":\"#6B7280\",\"comboProductTitleFontStyle\":\"BOLD\",\"primaryHoverColor\":\"#000000\",\"saveBadgeTextColor\":\"#065f46\",\"tierUnitLabelFontStyle\":\"REGULAR\",\"cardBorderColor\":\"#cbd5e1\",\"ruleUpsellTitleFontSize\":15,\"selectedCardBackgroundColor\":\"#eff6ff\",\"tierFullPriceFontSize\":14,\"comboProductTitleFontSize\":13,\"subscriptionSubTitleTextColor\":\"#1e293b\",\"selectedCardBorderColor\":\"#3b82f6\",\"comboProductFullPriceFontStyle\":\"REGULAR\",\"tierTitleColor\":\"#1e293b\",\"tierFullPriceFontStyle\":\"REGULAR\",\"tierSubTitleFontStyle\":\"REGULAR\",\"secondaryTextColor\":\"#ffffff\",\"blockTitleColor\":\"#1e293b\",\"tierSubTitleColor\":\"#475569\",\"saveBadgeFontSize\":12,\"primaryTextColor\":\"#000000\",\"tierFreeGiftTextColor\":\"#1e293b\",\"tierFreeGiftTitleFontStyle\":\"BOLD\",\"tierUpsellTitleTextColor\":\"#1e293b\",\"tierFreeGiftPriceFontStyle\":\"REGULAR\",\"perRowItem\":\"THREE\",\"badgesBackgroundColor\":\"#ea580c\",\"otherProductsModalHeadingLabelColor\":\"#000000\",\"otherProductsModalButtonBackgroundColor\":\"#374151\",\"dedicatedSubscriptionLayout\":\"LAYOUT_ONE\",\"saveBadgeFontStyle\":\"REGULAR\",\"subscriptionTitleFontSize\":15,\"otherProductsModalProductPriceTextSize\":14,\"comboProductPriceFontStyle\":\"BOLD\"}","labels":"{\"volumeDiscountSaveRewardsLabel\":\"Save {{discount}}{{discount_type}}!\",\"volumeDiscountQuantityRewardsLabel\":\"Buy {{quantity}} quantity and get {{discount}}{{discount_type}} discount!\",\"oneTimeTitle\":\"One Time Purchase\",\"otherProductsModalSubtitleLabel\":\"\",\"volumeDiscountSpentAmountRewardsLabel\":\"Spend {{currency}}{{spent_amount}} and get {{discount}}{{discount_type}} discount!\",\"volumeAmountDiscountSpentAmountRewardsLabel\":\"Spend {{currency}}{{spent_amount}} and get {{currency}}{{discount}} discount!\",\"volumeAmountDiscountQuantityRewardsLabel\":\"Buy {{quantity}} quantity and get {{currency}}{{discount}} discount!\",\"volumeAmountDiscountSaveRewardsLabel\":\"Save {{currency}}{{discount}}!\",\"oneTimeSubtitle\":\"No Subscription\"}","upsells":null,"enableVolumeDiscountUpsell":false,"combos":"null","progressiveGift":null,"enableProgressiveGifts":false,"discountName":"Buy any 3, save 12%"}]; const customerTags = null; let customerDiscountUsage = []; let isLoggedIn = false; const filteredDiscountBundles = Array.isArray(discountBundles) && discountBundles.length > 0 && discountBundles?.filter((bundle) => { if (bundle?.status !== 'ACTIVE' || bundle?.bundleSubType === 'BUY_X_GET_Y') { return false; } if ((bundle?.allowedTags || bundle?.restrictTags || bundle?.limitToUsePerCustomer > 0) && !isLoggedIn) { return false; } if ((bundle?.allowedTags || bundle?.restrictTags) && isLoggedIn && isBundleRestrictedByDiscount(bundle, customerTags)) { return false; } if (bundle?.limitToUsePerCustomer > 0 && isDiscountUsageLimitExceed(customerDiscountUsage, bundle)) { return false; } if (bundle?.appliesOn === "ONE_TIME" && sellingPlanId != null) { return false; } if (bundle?.appliesOn === "SUBSCRIPTION" && sellingPlanId === null) { return false; } try { const variantsString = bundle?.variants || '[]'; const variants = typeof variantsString === 'string' ? JSON.parse(variantsString) : variantsString; const bundleCollections = JSON.parse(bundle?.collectionData || '[]'); return (Array.isArray(variants) && variants.some((variant) => variant && parseInt(variant?.variantId) === parseInt(variantId))) || (Array.isArray(bundleCollections) && bundleCollections?.length > 0 && bundleCollections.some(bundleCollection => collections.some(collection => collection?.id === bundleCollection?.id))) } catch (e) { console.error('Failed to parse JSON:', e); return false; } }) || []; const totalAmount = amount * quantity; const lineItem = {variantId, quantity, amount, totalAmount }; const volumeDiscountBundles = processBundleRules(filteredDiscountBundles, 'VOLUME_DISCOUNT', ["variants", "tieredDiscount"]); const discountedPricingBundles = processBundleRules(filteredDiscountBundles, 'DISCOUNTED_PRICING', ["variants"]); let applicableDiscount = null; const volumeDiscount = getApplicableTieredDiscount(volumeDiscountBundles, lineItem); const pricingDiscount = getApplicablePercentOrFixedDiscount(discountedPricingBundles, lineItem); if (volumeDiscount && pricingDiscount) { applicableDiscount = getBestDiscount([volumeDiscount, pricingDiscount], lineItem); } else { applicableDiscount = volumeDiscount || pricingDiscount; } const discountAmount = applicableDiscount?.discountType === "PERCENTAGE" ? (totalAmount * applicableDiscount?.discount) / 100 : applicableDiscount?.discount; const discountedPrice = applicableDiscount?.discountType === "PERCENTAGE" ? (totalAmount - discountAmount) : ( totalAmount - applicableDiscount?.discount); return { variantId, quantity, amount, totalAmount, discountType: applicableDiscount?.discountType, discountValue: applicableDiscount?.discount, discountAmount, discountedPrice: !isNaN(discountedPrice) ? discountedPrice : undefined, discountConfigure: applicableDiscount?.appliesOn }; }; (() => { const isDateInRange = (startDateString = null, endDateString = null) => { const currentDate = new Date(); const startDate = startDateString ? new Date(startDateString) : null; const endDate = endDateString ? new Date(endDateString) : null; if (!startDate && !endDate) return true; if (startDate && currentDate < startDate) return false; if (endDate && currentDate > endDate) return false; return true; }; const initializedElements = new WeakSet(); const executeDynamicBundleBlock = ({ blockElement, productId = null, isCustomPage = false }) => { if (initializedElements.has(blockElement)) return; initializedElements.add(blockElement); const babBundles = [{"id":39019,"shop":"kent-rollins-store.myshopify.com","name":"Buy Any 3, Save 12%! Buy 5+, Save 15%!","description":"Buy any combination of 3 eligible spices & seasonings, save 12%. Buy 5 or more, and save 15%","status":"ACTIVE","customerIncludeTags":null,"discountType":"TIERED_DISCOUNT","discountValue":null,"products":null,"variants":"null","sequenceNo":null,"bundleType":"CLASSIC_BUILD_A_BOX","settings":"{\"cardGap\":16,\"sequentialProductsPerBatch\":50,\"showUnitPrice\":false,\"showPricesWithoutDecimal\":false,\"disableProductDescription\":false,\"bundleProductNameSortOrder\":\"DEFAULT\",\"includedSubscriptionPlans\":\"\",\"excludeSubscriptionPlans\":\"\",\"perRowItem\":\"THREE\",\"enableAnnouncementBar\":true,\"borderRadius\":8,\"showClassicBundleWidgetInChildProduct\":false,\"enableSequentialProductLoading\":false,\"disableScrollingToBundle\":false,\"showPriceWithSubscriptionPrice\":true,\"showComboBundleWidgetInComboProduct\":false,\"showPriceOfChosenProductsOnly\":false,\"hideQuantitySelector\":false}","bundleProductId":null,"bundleVariantId":null,"productHandle":null,"discountId":null,"price":null,"numberOfProducts":0,"subscriptionBundlingEnabled":false,"subscriptionId":null,"minProductCount":3,"maxProductCount":10,"uniqueRef":"hqblara0d3","bundleRedirect":"CART","customRedirectURL":null,"minOrderAmount":null,"tieredDiscount":"[{\"discountBasedOn\":\"QUANTITY\",\"value\":5,\"discount\":15,\"discountType\":\"PERCENTAGE\",\"discountAllowedTags\":null}]","productViewStyle":"QUICK_ADD","singleProductSettings":null,"trackInventory":false,"sellingPlanType":"BUNDLE_LEVEL","clearCart":"DISABLED","minPrice":null,"maxPrice":null,"externalBuildABoxId":null,"variantVisibilityType":"SHOW_VARIANTS_AS_OPTIONS","subTitle":"Mix and Match any combination of spices and seasonings to save!","freeShipping":false,"themeType":"THEME_ONE","showBundleInProductPage":true,"combinedWithProductDiscount":false,"combinedWithShippingDiscount":true,"combinedWithOrderDiscount":false,"allowedTags":null,"restrictTags":null,"selectionType":"FLEXIBLE","bundleHtml":null,"discountedVariants":null,"allowedCountries":null,"appliesOn":"BOTH","purchaseRequirement":"NO_REQUIREMENT","productDiscountType":"EACH_PRODUCT","countrySelectionType":"ALL_COUNTRY","discountApplyApproach":"SHOPIFY_DISCOUNT_FUNCTION","discountedProductChooseType":"CHOOSE_ALL","internalName":"Buy More, Save More (Sauces & Seasonings)","sections":"[]","limitToUsePerCustomer":null,"discountedVariantSelectionLimit":null,"hideOneTimePurchase":false,"hideSubscriptionPurchase":false,"maxOrderAmount":null,"collectionData":"[{\"id\":497906909503,\"title\":\"Seasonings\",\"handle\":\"seasonings\",\"image\":null},{\"id\":497906876735,\"title\":\"Sauces\",\"handle\":\"sauces\",\"image\":null}]","productSelectionType":"COLLECTION","tag":"appstle_bundles","productChooseType":"CHOOSE_ALL","variantSelectionLimit":null,"discountTargetType":"VARIANT","enableSubscription":false,"subscriptionWidgetPosition":"BELOW","subscribeTitle":"Subscribe and Save","subscribeSubtitle":"Delivered Monthly","subscriptionPreselected":false,"getYAppliesOn":"BOTH","announcementBarMessage":null,"automaticDiscountNodeId":"gid://shopify/DiscountAutomaticNode/1548956926271","recurringCycleLimit":0,"automaticShippingDiscountNodeId":"gid://shopify/DiscountAutomaticNode/1548956959039","scheduledBundleRule":false,"bundleActiveFrom":"2026-01-21T18:00:00Z","bundleActiveTo":null,"bundleSubType":null,"discountAppliesOn":"PER_ORDER","layoutType":"LAYOUT_ONE","style":"{\"tierFullPriceColor\":\"#1e293b\",\"tierFreeGiftTitleFontSize\":13,\"tierUpsellTitleFontSize\":13,\"primaryColor\":\"#000000\",\"tierSubTitleFontSize\":13,\"otherProductsModalFullPriceColor\":\"#555555\",\"primaryDisabledColor\":\"#333333\",\"cardHoverColor\":\"#f8fafc\",\"otherProductsModalPriceColor\":\"#000000\",\"otherProductsModalButtonTextColor\":\"#ffffff\",\"otherProductsButtonBackgroundColor\":\"#374151\",\"tierPriceFontSize\":20,\"tierUpsellSubTitleFontSize\":12,\"comboProductFullPriceFontSize\":12,\"headingTextColor\":\"#000000\",\"badgesTextColor\":\"#ffffff\",\"blockTitleFontStyle\":\"BOLD\",\"tierTitleFontSize\":20,\"otherProductsProductTitleColor\":\"#374151\",\"subscriptionTitleTextColor\":\"#1e293b\",\"subscriptionSubTitleFontSize\":13,\"otherProductsImageSize\":40,\"saveBadgeBackgroundColor\":\"#d1fae5\",\"tierFreeGiftBackgroundColor\":\"#f1f5f9\",\"cardGap\":16,\"tierPriceFontStyle\":\"BOLD\",\"otherProductsModalOverlayColor\":\"#6b7280\",\"tierPriceColor\":\"#1e293b\",\"tierFreeGiftPriceFontSize\":14,\"otherProductsButtonTextColor\":\"#ffffff\",\"tierTitleFontStyle\":\"BOLD\",\"ruleUpsellSubTitleFontSize\":13,\"comboProductPriceFontSize\":13,\"tierUnitLabelFontSize\":14,\"blockTitleFontSize\":14,\"otherProductsProductTitleSize\":16,\"productCardBackgroundColor\":\"#ffffff\",\"cardBackgroundColor\":\"#ffffff\",\"buttonBackgroundColor\":\"#8E0B0B\",\"bundlePageBackgroundColor\":\"#FAFAF9\",\"borderRadius\":8,\"tierUpsellBackgroundColor\":\"#e2e8f0\",\"ruleUpsellTitleTextColor\":\"#1e293b\",\"ruleUpsellSubTitleTextColor\":\"#1e293b\",\"tierUpsellSubTitleTextColor\":\"#1e293b\",\"primaryDisabledTextColor\":\"#ffffff\",\"otherProductsModalProductTitleTextSize\":14,\"otherProductsModalProductTitleColor\":\"#000000\",\"fieldDisabledBackgroundColor\":\"#D1D5DB\",\"otherProductsModalImageSize\":80,\"disabledTextColor\":\"#6B7280\",\"comboProductTitleFontStyle\":\"BOLD\",\"primaryHoverColor\":\"#000000\",\"saveBadgeTextColor\":\"#065f46\",\"tierUnitLabelFontStyle\":\"REGULAR\",\"cardBorderColor\":\"#cbd5e1\",\"ruleUpsellTitleFontSize\":15,\"selectedCardBackgroundColor\":\"#eff6ff\",\"tierFullPriceFontSize\":14,\"comboProductTitleFontSize\":13,\"subscriptionSubTitleTextColor\":\"#1e293b\",\"selectedCardBorderColor\":\"#3b82f6\",\"comboProductFullPriceFontStyle\":\"REGULAR\",\"tierTitleColor\":\"#1e293b\",\"tierFullPriceFontStyle\":\"REGULAR\",\"tierSubTitleFontStyle\":\"REGULAR\",\"secondaryTextColor\":\"#ffffff\",\"blockTitleColor\":\"#1e293b\",\"tierSubTitleColor\":\"#475569\",\"saveBadgeFontSize\":12,\"primaryTextColor\":\"#000000\",\"tierFreeGiftTextColor\":\"#1e293b\",\"tierFreeGiftTitleFontStyle\":\"BOLD\",\"tierUpsellTitleTextColor\":\"#1e293b\",\"tierFreeGiftPriceFontStyle\":\"REGULAR\",\"perRowItem\":\"THREE\",\"badgesBackgroundColor\":\"#ea580c\",\"otherProductsModalHeadingLabelColor\":\"#000000\",\"otherProductsModalButtonBackgroundColor\":\"#374151\",\"dedicatedSubscriptionLayout\":\"LAYOUT_ONE\",\"saveBadgeFontStyle\":\"REGULAR\",\"subscriptionTitleFontSize\":15,\"otherProductsModalProductPriceTextSize\":14,\"comboProductPriceFontStyle\":\"BOLD\"}","labels":"{\"volumeDiscountSaveRewardsLabel\":\"Save {{discount}}{{discount_type}}!\",\"volumeDiscountQuantityRewardsLabel\":\"Buy {{quantity}} quantity and get {{discount}}{{discount_type}} discount!\",\"oneTimeTitle\":\"One Time Purchase\",\"otherProductsModalSubtitleLabel\":\"\",\"volumeDiscountSpentAmountRewardsLabel\":\"Spend {{currency}}{{spent_amount}} and get {{discount}}{{discount_type}} discount!\",\"volumeAmountDiscountSpentAmountRewardsLabel\":\"Spend {{currency}}{{spent_amount}} and get {{currency}}{{discount}} discount!\",\"volumeAmountDiscountQuantityRewardsLabel\":\"Buy {{quantity}} quantity and get {{currency}}{{discount}} discount!\",\"volumeAmountDiscountSaveRewardsLabel\":\"Save {{currency}}{{discount}}!\",\"oneTimeSubtitle\":\"No Subscription\"}","upsells":null,"enableVolumeDiscountUpsell":false,"combos":"null","progressiveGift":null,"enableProgressiveGifts":false,"discountName":"Buy any 3, save 12%"}]; window['isAppstleBuildABox'] = true; window.sessionStorage.setItem('external-bundle-token', window.appstle_bundle_external_token); const referenceBundle = blockElement.getAttribute('ref') || null; const collections = null; const baseFilteredBundles = Array.isArray(babBundles) && babBundles?.length > 0 && babBundles.filter((rule) => { /*if(!isCustomPage && rule?.shop !== 'bundle-demo-101.myshopify.com') { rule.themeType = 'THEME_TWO'; }*/ if (!isDateInRange(rule?.bundleActiveFrom, rule?.bundleActiveTo)) { return false; } if (rule?.bundleType === 'CLASSIC_BUILD_A_BOX' && rule?.status === 'ACTIVE' && (rule?.showBundleInProductPage === true || isCustomPage)) { try { let matchesVariant = false; let matchesCollection = false; if (rule?.productSelectionType === "PRODUCT") { const variants = JSON.parse(rule?.variants || '[]'); matchesVariant = variants.some(v => +v?.productId === +productId); } else if (rule?.productSelectionType === "COLLECTION" && Array.isArray(collections)) { const ruleCollections = JSON.parse(rule?.collectionData || '[]'); matchesCollection = ruleCollections?.some(rc => collections?.some(c => +c?.id === +rc?.id)); } return (matchesVariant || matchesCollection || !productId); } catch (e) { console.error('Failed to parse JSON:', e); return false; } } return false; }) || []; const filteredBundles = isCustomPage && referenceBundle ? baseFilteredBundles?.filter(rule => rule?.uniqueRef === referenceBundle) : baseFilteredBundles; if (filteredBundles?.length > 0 && blockElement) { const link = document.createElement('link'); link.rel = 'stylesheet'; link.href = "https://bundles-admin.appstle.com/content/build-a-box.css?v=1769007775682"; document.head.appendChild(link); const script = document.createElement('script'); script.async = true; script.src = "https://bundles-admin.appstle.com/app/build-a-box.bundle.js?v=1769007775682"; document.head.appendChild(script); filteredBundles.forEach((rule) => { const bundleDiv = document.createElement('div'); const uniqueRef = rule?.uniqueRef; bundleDiv.setAttribute('appstle-dynamic-bundle-unique-reference', uniqueRef); bundleDiv.className = isCustomPage ? `appstleBundlesCustomPage appstleCustomPageDynamicBundle-${uniqueRef}` : `appstleBundlesProductPage appstleDynamicBundle-${uniqueRef}`; blockElement.appendChild(bundleDiv); const appBlockDiv = document.querySelector(isCustomPage ? 'div[data-block-handle="appstle-bundle-dynamic-pricing-custom-page"]' : 'div[data-block-handle="appstle-bundle-product-page-build-a-box"]'); if (appBlockDiv) { appBlockDiv.appendChild(blockElement); } }); } }; const executeDynamicBundleLogic = () => { const productId = ""; const blockElement = document.getElementById('dynamic-pricing-bundle-product-page'); const blockElements = document.querySelectorAll('.ab-dynamic-bundle-custom-placement-selector'); const disableAppFunctionality = window?._ABConfig?.['disableAppFunctionality'] || false; if (blockElement && productId && !disableAppFunctionality) { blockElement.classList.add(`product-id-${productId}`); executeDynamicBundleBlock({ blockElement, productId, isCustomPage: false }); } if (blockElements && blockElements.length > 0 && !disableAppFunctionality) { blockElements.forEach((element) => { const productId = element?.getAttribute('data-product-id'); element.classList.add(`product-id-${productId}`); executeDynamicBundleBlock({ blockElement: element, productId, isCustomPage: false }); }); } const customPageBlockElement = document.getElementById('dynamic-pricing-bundle-custom-page'); if (customPageBlockElement && !disableAppFunctionality) executeDynamicBundleBlock({ blockElement: customPageBlockElement, productId: null, isCustomPage: true }); } const observeForQuickAddModal = () => { const seen = new WeakSet(); new MutationObserver(() => { document.querySelectorAll(".quick-add-modal__content-info")?.forEach((m) => { if (m?.offsetParent === null) return seen.delete(m); if (seen.has(m) || !m?.children?.length) return; seen.add(m); setTimeout(() => executeDynamicBundleLogic(), 100); }); }).observe(document.body, { childList: true, subtree: true }); }; document.addEventListener('DOMContentLoaded', () => { executeDynamicBundleLogic(); observeForQuickAddModal(); }); })();
'); printWindow.document.close(); // Wait for the window's DOM to be ready before appending printWindow.onload = function () { printWindow.document.body.appendChild(clonedCard); printWindow.focus(); printWindow.print(); printWindow.close(); }; }); }); -->