{
  "version": 3,
  "sources": ["/cdn/shop/t/36/assets/holster-paypal-restrict.js?holster_pp=1788750201"],
  "sourcesContent": ["/**\n * Holster: hide PayPal express when cart or PDP contains tobacco\n * (tag category:tobacco). Theme-layer enforcement. Other wallets (e.g. Google Pay) stay.\n */\n(function () {\n  'use strict';\n\n  var NOTE =\n    'PayPal ist bei Tabak nicht verf\u00FCgbar.';\n  var RESTRICTED_TYPES = ['tobacco'];\n  var RESTRICTED_TAG_FRAGMENTS = ['category:tobacco', 'cat:tobacco'];\n\n  function cfg() {\n    var el = document.getElementById('holster-paypal-config');\n    if (!el) return { restricted: false, note: NOTE };\n    try {\n      return JSON.parse(el.textContent || '{}');\n    } catch (e) {\n      return { restricted: false, note: NOTE };\n    }\n  }\n\n  function typeRestricted(type) {\n    var t = String(type || '').toLowerCase().trim();\n    if (!t) return false;\n    for (var i = 0; i < RESTRICTED_TYPES.length; i++) {\n      if (t === RESTRICTED_TYPES[i] || t.indexOf(RESTRICTED_TYPES[i]) !== -1) {\n        return true;\n      }\n    }\n    return t.indexOf('tabak') !== -1;\n  }\n\n  function tagsRestricted(tags) {\n    var list = Array.isArray(tags) ? tags : String(tags || '').split(',');\n    var joined = list\n      .map(function (x) {\n        return String(x || '').toLowerCase();\n      })\n      .join(',');\n    if (!joined) return false;\n    for (var i = 0; i < RESTRICTED_TAG_FRAGMENTS.length; i++) {\n      if (joined.indexOf(RESTRICTED_TAG_FRAGMENTS[i]) !== -1) return true;\n    }\n    return false;\n  }\n\n  function itemRestricted(item) {\n    if (!item) return false;\n    if (typeRestricted(item.product_type || item.productType)) return true;\n    if (tagsRestricted(item.tags || item.product_tags)) return true;\n    return false;\n  }\n\n  function setRestricted(on) {\n    document.documentElement.classList.toggle('holster-paypal-restricted', !!on);\n    document.documentElement.setAttribute(\n      'data-holster-paypal-restricted',\n      on ? 'true' : 'false'\n    );\n    syncNotes(!!on);\n    hideButtons(!!on);\n  }\n\n  function isPayPalNode(node) {\n    if (!node || node.nodeType !== 1) return false;\n    var cls = typeof node.className === 'string' ? node.className : String(node.className || '');\n    var hay = [\n      cls,\n      node.id || '',\n      node.getAttribute('title') || '',\n      node.getAttribute('name') || '',\n      node.getAttribute('src') || '',\n      node.getAttribute('aria-label') || '',\n      node.getAttribute('data-testid') || '',\n    ]\n      .join(' ')\n      .toLowerCase();\n    return hay.indexOf('paypal') !== -1 || hay.indexOf('pay pal') !== -1;\n  }\n\n  function toggleHidden(node, on) {\n    if (on) {\n      node.setAttribute('data-holster-paypal-hidden', '1');\n      node.style.setProperty('display', 'none', 'important');\n      node.style.setProperty('visibility', 'hidden', 'important');\n      node.style.setProperty('pointer-events', 'none', 'important');\n    } else if (node.getAttribute('data-holster-paypal-hidden') === '1') {\n      node.removeAttribute('data-holster-paypal-hidden');\n      node.style.removeProperty('display');\n      node.style.removeProperty('visibility');\n      node.style.removeProperty('pointer-events');\n    }\n  }\n\n  function hideInRoot(root, on) {\n    if (!root || !root.querySelectorAll) return;\n    var selectors = [\n      '.shopify-payment-button__button--paypal',\n      '#paypal-button-container',\n      '.paypal-buttons',\n      '[data-paypal-button]',\n      '[data-holster-paypal-hidden=\"1\"]',\n    ];\n    selectors.forEach(function (sel) {\n      root.querySelectorAll(sel).forEach(function (node) {\n        toggleHidden(node, on);\n      });\n    });\n    root.querySelectorAll('*').forEach(function (node) {\n      if (on && isPayPalNode(node)) toggleHidden(node, on);\n      if (!on && node.getAttribute('data-holster-paypal-hidden') === '1') {\n        toggleHidden(node, false);\n      }\n      if (node.shadowRoot) hideInRoot(node.shadowRoot, on);\n    });\n  }\n\n  function hideButtons(on) {\n    // Never hide the whole accelerated-checkout host (Google Pay must remain).\n    var hosts = document.querySelectorAll(\n      'shopify-accelerated-checkout, shopify-accelerated-checkout-cart, .shopify-payment-button, .additional-checkout-buttons, [data-shopify-buttoncontainer], #paypal-button-container, .paypal-buttons'\n    );\n    hosts.forEach(function (host) {\n      if (isPayPalNode(host)) toggleHidden(host, on);\n      hideInRoot(host, on);\n      if (host.shadowRoot) hideInRoot(host.shadowRoot, on);\n    });\n    // Light document-level PayPal leftovers (outside hosts)\n    document\n      .querySelectorAll(\n        '.shopify-payment-button__button--paypal, #paypal-button-container, .paypal-buttons, [data-paypal-button], [data-holster-paypal-hidden=\"1\"]'\n      )\n      .forEach(function (node) {\n        toggleHidden(node, on);\n      });\n  }\n\n  function syncNotes(on) {\n    // Explanatory cart note removed; keep any leftover nodes hidden.\n    document.querySelectorAll('[data-holster-paypal-note]').forEach(function (el) {\n      el.hidden = true;\n      el.setAttribute('hidden', '');\n      el.style.setProperty('display', 'none', 'important');\n    });\n  }\n\n  function evaluateFromCart(cart) {\n    var restricted = !!(cfg().productRestricted || cfg().restricted);\n    if (cart && Array.isArray(cart.items)) {\n      for (var i = 0; i < cart.items.length; i++) {\n        if (itemRestricted(cart.items[i])) {\n          restricted = true;\n          break;\n        }\n      }\n      // If Liquid said restricted but cart only has non-restricted types and\n      // productRestricted is false, trust cart.js product_type (AJAX updates).\n      if (!cfg().productRestricted && cart.items.length) {\n        restricted = cart.items.some(itemRestricted);\n      }\n    }\n    setRestricted(restricted);\n  }\n\n  // In-flight guard: refresh() fetches /cart.js; without this, a fetch patch\n  // that also matches /cart.js schedules infinite nested refreshes and starves\n  // cart UI updates (badge + drawer stuck after ATC).\n  var refreshPending = false;\n  var refreshQueued = false;\n\n  function refresh() {\n    if (refreshPending) {\n      refreshQueued = true;\n      return;\n    }\n    refreshPending = true;\n    refreshQueued = false;\n    fetch('/cart.js', { credentials: 'same-origin' })\n      .then(function (r) {\n        return r.json();\n      })\n      .then(evaluateFromCart)\n      .catch(function () {\n        setRestricted(!!(cfg().restricted || cfg().productRestricted));\n      })\n      .finally(function () {\n        refreshPending = false;\n        if (refreshQueued) {\n          refreshQueued = false;\n          window.setTimeout(refresh, 80);\n        }\n      });\n  }\n\n  function scheduleRefreshAfterMutation() {\n    window.setTimeout(refresh, 50);\n    window.setTimeout(refresh, 400);\n  }\n\n  function boot() {\n    setRestricted(!!(cfg().restricted || cfg().productRestricted));\n    refresh();\n\n    document.addEventListener('cart:update', refresh);\n    document.addEventListener('cart:refresh', refresh);\n    document.addEventListener('cart:change', refresh);\n    document.addEventListener('theme:cart:change', refresh);\n\n    // Horizon / native cart events\n    document.addEventListener('cart-drawer:refreshed', refresh);\n    document.addEventListener('variant:change', function () {\n      // PDP variant change does not change product type/tags; keep product flag\n      setRestricted(!!(cfg().productRestricted || document.documentElement.classList.contains('holster-paypal-restricted')));\n      refresh();\n    });\n\n    // Observe express button injection\n    var mo = new MutationObserver(function () {\n      if (document.documentElement.classList.contains('holster-paypal-restricted')) {\n        hideButtons(true);\n      }\n    });\n    mo.observe(document.documentElement, { childList: true, subtree: true });\n\n    // Patch fetch for /cart/* mutations ONLY \u2014 never /cart.js reads.\n    // Matching /cart.js caused: refresh \u2192 fetch(/cart.js) \u2192 schedule refresh \u2192 \u221E\n    if (window.fetch && !window.fetch.__holsterPaypalRestrict) {\n      var orig = window.fetch.bind(window);\n      window.fetch = function () {\n        var args = arguments;\n        return orig.apply(window, args).then(function (res) {\n          try {\n            var url = String((args[0] && args[0].url) || args[0] || '');\n            if (/\\/cart\\/(add|change|update|clear)(\\.js)?(\\?|$|\\/)/.test(url)) {\n              scheduleRefreshAfterMutation();\n            }\n          } catch (e) {}\n          return res;\n        });\n      };\n      window.fetch.__holsterPaypalRestrict = true;\n    }\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot);\n  } else {\n    boot();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
