{
  "version": 3,
  "sources": ["/cdn/shop/t/5/assets/br-sticky-atc.js?nocache=23383"],
  "sourcesContent": ["/* Bonny & Rose: vaste bestelbalk op mobiel.\r\n   Toont zichzelf zodra de echte bestelknop uit beeld is en klikt die knop aan,\r\n   zodat er maar \u00E9\u00E9n plek is waar een product in de winkelwagen komt.\r\n\r\n   Twee dingen zijn hier bewust zo geregeld:\r\n\r\n   1. De balk kijkt alleen naar de echte bestelknop en de prijs, niet naar het\r\n      hele productblok. De balk staat zelf \u00EDn dat blok, dus wie het hele blok\r\n      bewaakt en er tegelijk in schrijft, maakt een lus die nooit stopt en de\r\n      pagina laat hangen.\r\n   2. Alles wordt \u00E9\u00E9n keer aangemeld. Bij een kleurwissel wordt de balk opnieuw\r\n      opgebouwd, en dan worden de oude bewakers eerst losgekoppeld. Anders komt\r\n      er bij elke wissel een laag bij. */\r\n(function () {\r\n  'use strict';\r\n\r\n  var MAIN = '[id^=\"shopify-section-\"][id$=\"__main\"]';\r\n  var BAR = '[data-br-sticky]';\r\n  var mo = null;          // bewaker die kijkt of prijs of knop verandert\r\n  var mq = window.matchMedia('(max-width: 768px)');\r\n  var outOfView = false;\r\n  var ticking = false;\r\n\r\n  function mainEl() { return document.querySelector(MAIN) || document; }\r\n  function barEl() { return document.querySelector(BAR); }\r\n\r\n  function realButton() {\r\n    var buttons = mainEl().querySelectorAll('.add-to-cart, button[name=\"add\"], [data-add-to-cart]');\r\n    for (var i = 0; i < buttons.length; i++) {\r\n      // de knop in de balk zelf telt niet mee, anders klikt hij zichzelf aan\r\n      if (!buttons[i].closest(BAR)) return buttons[i];\r\n    }\r\n    return null;\r\n  }\r\n\r\n  function priceEl() {\r\n    // Alleen de prijs die je betaalt. De doorgestreepte \"was\"-prijs heeft ook\r\n    // de klasse product__price en staat eerder in de pagina; wie daarop\r\n    // matcht zet het oude bedrag in de balk en jaagt de klant weg.\r\n    var prices = mainEl().querySelectorAll('[data-product-price]');\r\n    for (var i = 0; i < prices.length; i++) {\r\n      if (!prices[i].closest(BAR) && !prices[i].classList.contains('product__price--compare')) return prices[i];\r\n    }\r\n    return null;\r\n  }\r\n\r\n  function setText(el, value) {\r\n    // alleen schrijven als er echt iets verandert; schrijven wekt bewakers\r\n    if (el && value && el.textContent !== value) el.textContent = value;\r\n  }\r\n\r\n  function render() {\r\n    var bar = barEl();\r\n    if (!bar) return;\r\n    var btn = realButton();\r\n    if (!btn) { bar.hidden = true; return; }\r\n\r\n    bar.hidden = !(mq.matches && outOfView);\r\n\r\n    var p = priceEl();\r\n    if (p) setText(bar.querySelector('[data-br-sticky-price]'), (p.textContent || '').trim());\r\n\r\n    var mirror = bar.querySelector('[data-br-sticky-add]');\r\n    if (mirror) {\r\n      if (mirror.disabled !== btn.disabled) mirror.disabled = btn.disabled;\r\n      // De echte knop draagt het bedrag; in de balk staat de volle prijs er al\r\n      // naast, dus daar blijft alleen \"Add to cart\" over.\r\n      // Splitsen op het bolletje zelf, niet op de spaties eromheen: die zijn\r\n      // em-spaties geworden en dan matcht een gewone spatie niet meer, waardoor\r\n      // het bedrag hier dubbel kwam te staan.\r\n      setText(mirror, (btn.textContent || '').split('\u2022')[0].trim());\r\n    }\r\n  }\r\n\r\n  // Meten bij het scrollen in plaats van via een waarnemer. Een rechttoe\r\n  // rechtaan meting werkt overal en ook in een venster dat op de achtergrond\r\n  // staat, waar zo'n waarnemer stil kan blijven.\r\n  // Onderaan de pagina moet de balk weg. Hij plakt over de voettekst heen, en\r\n  // wie daar is aangekomen zoekt de verzendinfo of het contact, niet de knop.\r\n  function bijDeVoet() {\r\n    var voet = document.querySelector('.site-footer');\r\n    if (!voet) return false;\r\n    return voet.getBoundingClientRect().top < window.innerHeight;\r\n  }\r\n\r\n  function measure() {\r\n    var btn = realButton();\r\n    if (!btn) return;\r\n    var was = outOfView;\r\n    outOfView = btn.getBoundingClientRect().bottom < 0 && !bijDeVoet();\r\n    if (was !== outOfView) render();\r\n  }\r\n\r\n  // Een korte pauze in plaats van een beeldframe. Een venster dat op de\r\n  // achtergrond staat levert geen frames meer, en dan zou de balk blijven\r\n  // hangen op wat hij het laatst wist.\r\n  function onScroll() {\r\n    if (ticking) return;\r\n    ticking = true;\r\n    window.setTimeout(function () { ticking = false; measure(); }, 80);\r\n  }\r\n\r\n  function watch() {\r\n    if (mo) { mo.disconnect(); mo = null; }\r\n\r\n    var bar = barEl();\r\n    if (!bar) return;\r\n    var btn = realButton();\r\n    if (!btn) { bar.hidden = true; return; }\r\n\r\n    if (window.MutationObserver) {\r\n      mo = new MutationObserver(render);\r\n      // alleen de knop en de prijs, allebei buiten de balk\r\n      mo.observe(btn, { subtree: true, childList: true, characterData: true, attributes: true,\r\n                        attributeFilter: ['disabled'] });\r\n      var p = priceEl();\r\n      if (p) mo.observe(p, { subtree: true, childList: true, characterData: true });\r\n    }\r\n\r\n    measure();\r\n    render();\r\n  }\r\n\r\n  // E\u00E9n keer aanmelden, hier buiten de opbouw, zodat er nooit een laag bij komt.\r\n  document.addEventListener('click', function (e) {\r\n    var mirror = e.target.closest && e.target.closest('[data-br-sticky-add]');\r\n    if (!mirror) return;\r\n    e.preventDefault();\r\n    var live = realButton();\r\n    if (live) live.click();\r\n  });\r\n\r\n  document.addEventListener('variant:change', render);\r\n  window.addEventListener('scroll', onScroll, { passive: true });\r\n  window.addEventListener('resize', onScroll, { passive: true });\r\n\r\n  document.addEventListener('shopify:section:load', function () {\r\n    window.setTimeout(watch, 60);\r\n  });\r\n\r\n  if (mq.addEventListener) mq.addEventListener('change', render);\r\n  else if (mq.addListener) mq.addListener(render);\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', watch);\r\n  } else {\r\n    watch();\r\n  }\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
