{
  "version": 3,
  "sources": ["/cdn/shop/t/89/assets/ds-certificate-viewer.js?nc=1794329910764"],
  "sourcesContent": ["/**\n * ds-certificate-viewer\n *\n * \u00D6ffnet Zertifikat-PDFs (Link mit [data-certificate-viewer]) in einem\n * zoombaren PhotoSwipe-Popup statt in einem neuen Tab.\n *\n * Ablauf beim Klick:\n *   1. Popup \u00F6ffnet sofort mit einem Shimmer-Platzhalter (Fake-Zertifikat).\n *   2. Parallel werden PDF.js (erst jetzt!) und das PDF geladen.\n *   3. Jede Seite wird erst in Bildschirmaufl\u00F6sung gerendert und angezeigt,\n *      danach im Hintergrund in hoher Aufl\u00F6sung nachgeladen (scharfer Zoom).\n *\n * Fallbacks: Strg/Cmd/Mittelklick \u00F6ffnen weiterhin den neuen Tab; ohne JS\n * bleibt der normale Link; bei Fehlern zeigt das Popup einen PDF-Link.\n */\n\nconst LINK_SELECTOR = '[data-certificate-viewer]';\nconst OPEN_CLASS = 'ds-certificate-open';\n\nconst STRINGS = {\n  loading: 'Zertifikat wird geladen \u2026',\n  error: 'Das Zertifikat konnte nicht angezeigt werden.',\n  openPdf: 'PDF in neuem Tab \u00F6ffnen',\n  download: 'PDF herunterladen',\n  page: 'Seite',\n  pageLoading: 'wird geladen \u2026',\n  of: 'von',\n  close: window.themeVariables?.strings?.closeGallery || 'Schlie\u00DFen',\n};\n\nconst CLOSE_SVG = `<svg fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" aria-hidden=\"true\">\n  <path d=\"M56 28C56 12.536 43.464 0 28 0S0 12.536 0 28s12.536 28 28 28 28-12.536 28-28Z\" fill=\"#fff\"/>\n  <path d=\"M55.5 28C55.5 12.812 43.188.5 28 .5S.5 12.812.5 28 12.812 55.5 28 55.5 55.5 43.188 55.5 28Z\" stroke=\"#252627\" stroke-opacity=\".12\"/>\n  <path d=\"m22.344 22.343 11.313 11.314m-11.313 0 11.313-11.313\" stroke=\"#252627\" stroke-width=\"2\"/>\n</svg>`;\n\n/** PDF.js wird nur einmal pro Seitenaufruf geladen \u2013 und erst beim ersten Klick. */\nlet pdfjsPromise = null;\n\n// Verzeichnis einer Asset-URL inkl. Slash (ohne Dateiname und ?v=\u2026), z. B. f\u00FCr PDF.js' wasmUrl.\nfunction assetDir(url) {\n  return new URL('.', new URL(url, window.location.href)).href;\n}\n\nfunction loadPdfjs(src, workerSrc) {\n  if (!pdfjsPromise) {\n    pdfjsPromise = import(src)\n      .then((pdfjs) => {\n        pdfjs.GlobalWorkerOptions.workerSrc = workerSrc;\n        return pdfjs;\n      })\n      .catch((error) => {\n        pdfjsPromise = null; // n\u00E4chster Klick darf es erneut versuchen\n        throw error;\n      });\n  }\n  return pdfjsPromise;\n}\n\n/** Bereits gerenderte Zertifikate (URL -> Slides), damit ein zweiter Klick sofort da ist. */\nconst renderedCache = new Map();\n\nfunction escapeHtml(value) {\n  return String(value ?? '').replace(/[&<>\"']/g, (char) => ({\n    '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;',\n  })[char]);\n}\n\nfunction skeletonSlide(title, pageLabel) {\n  return {\n    html: `\n      <div class=\"ds-cert-viewer__stage\">\n        <div class=\"ds-cert-skeleton\" aria-hidden=\"true\">\n          <div class=\"ds-cert-skeleton__head\">\n            <span class=\"ds-cert-skeleton__logo\"></span>\n            <span class=\"ds-cert-skeleton__bar ds-cert-skeleton__bar--w40\"></span>\n          </div>\n          <span class=\"ds-cert-skeleton__bar ds-cert-skeleton__bar--title\"></span>\n          <span class=\"ds-cert-skeleton__bar ds-cert-skeleton__bar--w50 ds-cert-skeleton__bar--center\"></span>\n          <div class=\"ds-cert-skeleton__lines\">\n            <span class=\"ds-cert-skeleton__bar\"></span>\n            <span class=\"ds-cert-skeleton__bar ds-cert-skeleton__bar--w90\"></span>\n            <span class=\"ds-cert-skeleton__bar ds-cert-skeleton__bar--w95\"></span>\n            <span class=\"ds-cert-skeleton__bar ds-cert-skeleton__bar--w70\"></span>\n          </div>\n          <div class=\"ds-cert-skeleton__table\">\n            <span class=\"ds-cert-skeleton__bar\"></span><span class=\"ds-cert-skeleton__bar ds-cert-skeleton__bar--w60\"></span>\n            <span class=\"ds-cert-skeleton__bar\"></span><span class=\"ds-cert-skeleton__bar ds-cert-skeleton__bar--w80\"></span>\n            <span class=\"ds-cert-skeleton__bar\"></span><span class=\"ds-cert-skeleton__bar ds-cert-skeleton__bar--w50\"></span>\n          </div>\n          <div class=\"ds-cert-skeleton__foot\">\n            <span class=\"ds-cert-skeleton__seal\"></span>\n            <div class=\"ds-cert-skeleton__signature\">\n              <span class=\"ds-cert-skeleton__bar ds-cert-skeleton__bar--w80\"></span>\n              <span class=\"ds-cert-skeleton__bar ds-cert-skeleton__bar--w50\"></span>\n            </div>\n          </div>\n        </div>\n        <p class=\"ds-cert-viewer__status\" role=\"status\">${escapeHtml(pageLabel || STRINGS.loading)}</p>\n        ${title ? `<p class=\"ds-cert-viewer__caption\">${escapeHtml(title)}</p>` : ''}\n      </div>`,\n  };\n}\n\nfunction errorSlide(pdfUrl) {\n  return {\n    html: `\n      <div class=\"ds-cert-viewer__stage\">\n        <div class=\"ds-cert-viewer__error\" role=\"alert\">\n          <p>${escapeHtml(STRINGS.error)}</p>\n          <a class=\"ds-cert-viewer__button\" href=\"${escapeHtml(pdfUrl)}\" target=\"_blank\" rel=\"noopener\">${escapeHtml(STRINGS.openPdf)}</a>\n        </div>\n      </div>`,\n  };\n}\n\n/** Pixelbreite f\u00FCr die scharfe Zoom-Version \u2013 begrenzt, damit iOS-Canvas-Limits halten. */\nfunction hiResWidth(pageWidth, pageHeight) {\n  const dpr = Math.min(window.devicePixelRatio || 1, 3);\n  const screenMax = Math.max(window.screen?.width || 0, window.screen?.height || 0, window.innerWidth) * dpr;\n  let width = Math.min(3000, Math.max(2000, screenMax * 2));\n  const maxArea = navigator.deviceMemory && navigator.deviceMemory <= 2 ? 6e6 : 12e6;\n  if (width * (width * pageHeight / pageWidth) > maxArea) {\n    width = Math.sqrt(maxArea * pageWidth / pageHeight);\n  }\n  return Math.floor(width);\n}\n\n/** Pixelbreite f\u00FCr die erste, schnelle Anzeige (passt in den Viewport). */\nfunction previewWidth(pageWidth, pageHeight) {\n  const dpr = Math.min(window.devicePixelRatio || 1, 2.5);\n  const fitWidth = Math.min(window.innerWidth - 32, (window.innerHeight - 160) * pageWidth / pageHeight);\n  return Math.max(600, Math.floor(fitWidth * dpr));\n}\n\nasync function renderPageToBlobUrl(page, pixelWidth) {\n  const base = page.getViewport({ scale: 1 });\n  const viewport = page.getViewport({ scale: pixelWidth / base.width });\n  const canvas = document.createElement('canvas');\n  canvas.width = Math.floor(viewport.width);\n  canvas.height = Math.floor(viewport.height);\n\n  // Wei\u00DFer Hintergrund, falls das PDF transparent ist.\n  await page.render({ canvas, viewport, background: '#fff' }).promise;\n\n  const blob = await new Promise((resolve, reject) => {\n    canvas.toBlob((result) => (result ? resolve(result) : reject(new Error('toBlob failed'))), 'image/png');\n  });\n\n  // Canvas-Speicher sofort freigeben (wichtig auf iOS).\n  canvas.width = 0;\n  canvas.height = 0;\n\n  return URL.createObjectURL(blob);\n}\n\nfunction registerUi(pswp, pdfUrl) {\n  pswp.on('uiRegister', () => {\n    pswp.ui.registerElement({\n      name: 'ds-cert-bar',\n      order: 5,\n      appendTo: 'wrapper',\n      className: 'ds-cert-viewer__bar',\n      onInit: (element) => {\n        element.innerHTML = `\n          <span class=\"ds-cert-viewer__pages\" hidden></span>`;\n        // \u201EPDF herunterladen\u201C-Button vorerst deaktiviert. Zum Reaktivieren in das Template oben einf\u00FCgen:\n        // <a class=\"ds-cert-viewer__button\" href=\"${escapeHtml(pdfUrl)}\" target=\"_blank\" rel=\"noopener\" download>${escapeHtml(STRINGS.download)}</a>\n        const pages = element.querySelector('.ds-cert-viewer__pages');\n        const update = () => {\n          const total = pswp.getNumItems();\n          pages.hidden = total < 2;\n          pages.textContent = `${STRINGS.page} ${pswp.currIndex + 1} ${STRINGS.of} ${total}`;\n        };\n        pswp.on('change', update);\n        update();\n      },\n    });\n  });\n}\n\nasync function openCertificate(link) {\n  const pdfUrl = link.href;\n  const title = link.dataset.certificateTitle || '';\n  const { default: PhotoSwipe } = await import('photoswipe');\n\n  const cached = renderedCache.get(pdfUrl);\n  const dataSource = cached ? cached.map((slide) => ({ ...slide })) : [skeletonSlide(title)];\n\n  const pswp = new PhotoSwipe({\n    dataSource,\n    mainClass: 'pswp--ds-certificate',\n    bgOpacity: 0.86,\n    showHideAnimationType: 'fade',\n    padding: { top: 88, bottom: 64, left: 16, right: 16 },\n    initialZoomLevel: 'fit',\n    secondaryZoomLevel: (zoomLevels) => Math.min(zoomLevels.fit * 2.5, 1),\n    maxZoomLevel: 1,\n    wheelToZoom: true,\n    arrowPrev: false,\n    arrowNext: false,\n    counter: false,\n    zoom: false,\n    loop: false,\n    imageClickAction: 'zoom',\n    tapAction: false,\n    closeTitle: STRINGS.close,\n    closeSVG: CLOSE_SVG,\n    errorMsg: STRINGS.error,\n  });\n\n  registerUi(pswp, pdfUrl);\n\n  let closed = false;\n  let loadingTask = null;\n  pswp.on('destroy', () => {\n    closed = true;\n    loadingTask?.destroy();\n    document.documentElement.classList.remove(OPEN_CLASS);\n  });\n\n  // Chat-Widget, Klaviyo & Co. ausblenden, solange das Zertifikat offen ist (siehe CSS).\n  document.documentElement.classList.add(OPEN_CLASS);\n  pswp.init();\n  isOpening = false; // Popup ist offen \u2013 ab hier sch\u00FCtzt die .pswp--ds-certificate-Pr\u00FCfung\n\n  if (cached) return;\n\n  try {\n    // PDF.js und PDF-Datei parallel laden.\n    const [pdfjs, pdfData] = await Promise.all([\n      loadPdfjs(link.dataset.pdfjsSrc, link.dataset.pdfjsWorker),\n      fetch(pdfUrl, { credentials: 'same-origin' }).then((response) => {\n        if (!response.ok) throw new Error(`PDF request failed: ${response.status}`);\n        return response.arrayBuffer();\n      }),\n    ]);\n    if (closed) return;\n\n    loadingTask = pdfjs.getDocument({\n      data: new Uint8Array(pdfData),\n      // Gescannte PDFs (CCITT-Fax/JBIG2, JPEG 2000) brauchen Zusatz-Decoder. Statt .wasm (in\n      // Shopify-Assets nicht sicher erlaubt) nutzen wir die JS-Fallbacks von PDF.js\n      // (jbig2_/openjpeg_nowasm_fallback.js) \u2013 sie werden nur geladen, wenn ein PDF sie braucht.\n      useWasm: false,\n      wasmUrl: assetDir(link.dataset.pdfjsWorker),\n    });\n    const pdf = await loadingTask.promise;\n    if (closed) return;\n\n    // Weitere Seiten zun\u00E4chst als Platzhalter anh\u00E4ngen.\n    for (let pageNumber = 2; pageNumber <= pdf.numPages; pageNumber++) {\n      pswp.options.dataSource.push(skeletonSlide(title, `${STRINGS.page} ${pageNumber} ${STRINGS.pageLoading}`));\n      pswp.refreshSlideContent(pageNumber - 1);\n    }\n\n    const slides = [];\n    for (let pageNumber = 1; pageNumber <= pdf.numPages; pageNumber++) {\n      const page = await pdf.getPage(pageNumber);\n      if (closed) return;\n      const { width: pageWidth, height: pageHeight } = page.getViewport({ scale: 1 });\n\n      // Ziel-Abmessungen = hochaufgel\u00F6ste Version, damit PhotoSwipe bis dorthin zoomt.\n      const width = hiResWidth(pageWidth, pageHeight);\n      const height = Math.floor(width * pageHeight / pageWidth);\n\n      // 1) Schnelle Vorschau zeigen.\n      const previewSrc = await renderPageToBlobUrl(page, previewWidth(pageWidth, pageHeight));\n      if (closed) return;\n      const index = pageNumber - 1;\n      pswp.options.dataSource[index] = {\n        src: previewSrc,\n        width,\n        height,\n        alt: pdf.numPages > 1 ? `${title} \u2013 ${STRINGS.page} ${pageNumber}` : title,\n      };\n      pswp.refreshSlideContent(index);\n      slides[index] = { page, width, height, previewSrc };\n    }\n\n    // 2) Scharfe Versionen im Hintergrund nachziehen und das <img> direkt\n    //    austauschen \u2013 so bleibt ein laufender Zoom erhalten.\n    for (const [index, slide] of slides.entries()) {\n      const hiResSrc = await renderPageToBlobUrl(slide.page, slide.width);\n      if (closed) {\n        URL.revokeObjectURL(hiResSrc);\n        return;\n      }\n      pswp.options.dataSource[index].src = hiResSrc;\n      pswp.mainScroll.itemHolders.forEach((holder) => {\n        const img = holder.slide?.index === index ? holder.slide.content?.element : null;\n        if (img && img.tagName === 'IMG') {\n          const swap = new Image();\n          swap.onload = () => { img.src = hiResSrc; };\n          swap.src = hiResSrc;\n        }\n      });\n      URL.revokeObjectURL(slide.previewSrc);\n    }\n\n    renderedCache.set(pdfUrl, pswp.options.dataSource.map(({ src, width, height, alt }) => ({ src, width, height, alt })));\n    pdf.cleanup();\n  } catch (error) {\n    console.error('[ds-certificate-viewer]', error);\n    if (closed) return;\n    pswp.options.dataSource.splice(0, pswp.options.dataSource.length, errorSlide(pdfUrl));\n    pswp.refreshSlideContent(0);\n  }\n}\n\nlet isOpening = false;\n\nif (!window.__dsCertificateViewer) {\n  window.__dsCertificateViewer = true;\n\n  document.addEventListener('click', (event) => {\n    const link = event.target.closest?.(LINK_SELECTOR);\n    if (!link || event.defaultPrevented) return;\n    // Neuer Tab per Strg/Cmd/Shift/Mittelklick bleibt m\u00F6glich.\n    if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n\n    event.preventDefault();\n    if (isOpening || document.querySelector('.pswp--ds-certificate')) return; // Doppelklick\n    isOpening = true;\n    openCertificate(link)\n      .catch((error) => {\n        // Falls schon PhotoSwipe nicht l\u00E4dt: klassisch im neuen Tab \u00F6ffnen.\n        console.error('[ds-certificate-viewer]', error);\n        window.open(link.href, '_blank', 'noopener');\n      })\n      .finally(() => { isOpening = false; });\n  });\n}\n"],
  "mappings": "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",
  "names": []
}
