()
| 4669 | |
| 4670 | |
| 4671 | function ensureNonZipDownloadPanel() { |
| 4672 | if (window.__nonZipDownloadPanel) return window.__nonZipDownloadPanel; |
| 4673 | |
| 4674 | const panel = document.createElement('div'); |
| 4675 | panel.id = 'nonZipDownloadPanel'; |
| 4676 | panel.setAttribute('role', 'status'); |
| 4677 | |
| 4678 | // Simple bottom-right card using Bootstrap-ish styles + inline layout tweaks |
| 4679 | panel.style.position = 'fixed'; |
| 4680 | panel.style.top = '50%'; |
| 4681 | panel.style.left = '50%'; |
| 4682 | panel.style.transform = 'translate(-50%, -50%)'; |
| 4683 | panel.style.zIndex = '9999'; |
| 4684 | panel.style.width = 'min(440px, 95vw)'; |
| 4685 | panel.style.minWidth = '280px'; |
| 4686 | panel.style.maxWidth = '440px'; |
| 4687 | panel.style.padding = '14px 16px'; |
| 4688 | panel.style.borderRadius = '12px'; |
| 4689 | panel.style.boxShadow = '0 18px 40px rgba(0,0,0,0.35)'; |
| 4690 | panel.style.backgroundColor = 'var(--filr-menu-bg, #222)'; |
| 4691 | panel.style.color = 'var(--filr-menu-fg, #f9fafb)'; |
| 4692 | panel.style.fontSize = '0.9rem'; |
| 4693 | panel.style.display = 'none'; |
| 4694 | |
| 4695 | panel.innerHTML = ` |
| 4696 | <div class="nonzip-title" style="margin-bottom:6px; font-weight:600;"></div> |
| 4697 | <div class="nonzip-sub" style="margin-bottom:8px; opacity:0.85;"></div> |
| 4698 | <div class="nonzip-actions" style="display:flex; justify-content:flex-end; gap:6px;"> |
| 4699 | <button type="button" |
| 4700 | class="btn btn-sm btn-secondary nonzip-cancel-btn"> |
| 4701 | ${t('cancel') || 'Cancel'} |
| 4702 | </button> |
| 4703 | <button type="button" |
| 4704 | class="btn btn-sm btn-primary nonzip-next-btn"> |
| 4705 | ${t('download_next') || 'Download next'} |
| 4706 | </button> |
| 4707 | </div> |
| 4708 | `; |
| 4709 | |
| 4710 | document.body.appendChild(panel); |
| 4711 | |
| 4712 | const nextBtn = panel.querySelector('.nonzip-next-btn'); |
| 4713 | const cancelBtn = panel.querySelector('.nonzip-cancel-btn'); |
| 4714 | |
| 4715 | if (nextBtn) { |
| 4716 | nextBtn.addEventListener('click', () => { |
| 4717 | triggerNextNonZipDownload(); |
| 4718 | }); |
| 4719 | } |
| 4720 | if (cancelBtn) { |
| 4721 | cancelBtn.addEventListener('click', () => { |
| 4722 | clearNonZipQueue(true); |
| 4723 | }); |
| 4724 | } |
| 4725 | |
| 4726 | window.__nonZipDownloadPanel = panel; |
| 4727 | return panel; |
| 4728 | } |
no test coverage detected