Ë
    vSJj/  ã                   ó�   — d Z ddlZddlmZ  ee«      j
                  j                  «       dz  Zedz  ZdZ	d„ Z
edk(  r e
«        yy)	uX   æŠŠ 260630 çš„ comps.html æ”¹å›ž fetch åŠ è½½ media.jsonï¼Œå¹¶åŠ å…¥ BASE_PATH è§£æž�ã€‚é    N)ÚPathÚvps_stagingz
comps.htmlu    <script>
    const PREVIEW_COUNT = 6;
    const BASE_PATH = location.pathname.replace(/\/[^\/]*$/, '');
    function resolve(p) { return p.startsWith('/') ? p : (BASE_PATH + '/' + p); }

    function imgTag(thumb, full) {
      return `<img src="${resolve(thumb)}" loading="lazy" alt="" onclick="openLightbox('${resolve(full)}')">`;
    }

    function videoTag(src) {
      return `<video src="${resolve(src)}" controls preload="metadata"></video>`;
    }

    async function loadMedia() {
      let data = {};
      try {
        const res = await fetch(resolve('media.json'));
        if (!res.ok) throw new Error('media.json ' + res.status);
        data = await res.json();
      } catch (e) {
        console.error('åŠ è½½ media.json å¤±è´¥', e);
      }

      document.querySelectorAll('.media-gallery').forEach(el => {
        const slug = el.dataset.slug;
        const media = data[slug] || {};
        const images = media.images || [];
        const thumbnails = media.thumbnails || images;
        const videos = media.videos || [];

        if (images.length === 0 && videos.length === 0) {
          el.innerHTML = '<p class="placeholder">æš‚æ— ç…§ç‰‡/è§†é¢‘</p>';
          return;
        }

        const pairs = images.map((src, i) => [thumbnails[i] || src, src]);
        let html = '';

        html += '<div class="gallery gallery-preview">';
        pairs.slice(0, PREVIEW_COUNT).forEach(([thumb, full]) => { html += imgTag(thumb, full); });
        html += '</div>';

        if (pairs.length > PREVIEW_COUNT) {
          html += '<div class="gallery gallery-more">';
          pairs.slice(PREVIEW_COUNT).forEach(([thumb, full]) => { html += imgTag(thumb, full); });
          html += '</div>';
          html += `<button class="gallery-toggle" onclick="toggleGallery(this)">æ˜¾ç¤ºå‰©ä½™ ${pairs.length - PREVIEW_COUNT} å¼ ç…§ç‰‡</button>`;
        }

        if (videos.length) {
          html += '<div class="gallery gallery-videos">';
          videos.forEach(src => { html += videoTag(src); });
          html += '</div>';
        }

        el.innerHTML = html;
      });
    }

    function toggleGallery(btn) {
      const more = btn.previousElementSibling;
      more.classList.toggle('visible');
      const remaining = more.querySelectorAll('img').length;
      btn.textContent = more.classList.contains('visible')
        ? 'æ”¶èµ·ç…§ç‰‡'
        : `æ˜¾ç¤ºå‰©ä½™ ${remaining} å¼ ç…§ç‰‡`;
    }

    function openLightbox(src) {
      const box = document.getElementById('lightbox');
      document.getElementById('lightbox-img').src = src;
      box.classList.add('active');
    }

    document.querySelectorAll('tbody tr[data-href]').forEach(row => {
      row.addEventListener('click', () => {
        location.hash = row.dataset.href;
      });
    });

    loadMedia();
  </script>c                  óê   — t         j                  d¬«      } t        j                  dd| «      } t        j                  dt        | d¬«      } t         j                  | d¬«       t        dt         › �«       y )	Nzutf-8)ÚencodingzJ<div class="media-gallery" data-slug="([^"]+)">[\s\S]*?</div>\s*</section>zD<div class="media-gallery" data-slug="\1"></div>\n        </section>z  <script>[\s\S]*?</script>é   )Úcountu
   å·²æ›´æ–° )ÚHTMLÚ	read_textÚreÚsubÚFETCH_SCRIPTÚ
write_textÚprint)Úhtmls    ú./html_logs/fix_260630_fetch.pyÚmainr   ]   sa   € Ü�>‰> 7ˆ>Ó+€Dô �6‰6ØUØOØó€Dô �6‰6Ð0´,ÀÈAÔN€Dä‡O�O�D 7€OÔ+Ü	ˆJ”t�fÐ
Õó    Ú__main__)Ú__doc__r   Úpathlibr   Ú__file__ÚparentÚresolveÚSTAGINGr	   r   r   Ú__name__© r   r   Ú<module>r      sW   ðá ^Û 	Ý á
ˆx‹.×
Ñ
×
'Ñ
'Ó
)¨MÑ
9€Ø�Ñ€ðQ€òhð" ˆzÒÙ…Fð r   