45 lines
2.5 KiB
Plaintext
45 lines
2.5 KiB
Plaintext
<%# ── Prévia do PDF ───────────────────────────────────────────────────────
|
|
<details> NATIVO, e não um modal controlado por Stimulus. Isto é o
|
|
conserto de um problema que voltou três vezes: a prévia era o ÚNICO jeito
|
|
de conferir a folha antes de imprimir e morria junto com o JavaScript.
|
|
Quando os assets do servidor ficaram 404 (precompile que não rodou no
|
|
deploy), o botão "Ver prévia do PDF" não fazia nada e o operador ficava
|
|
sem saída — a tela abria normal, sem erro visível. Com <details> o
|
|
abrir/fechar é do navegador: funciona com o JS quebrado, sem JS, e no
|
|
celular.
|
|
|
|
`loading="lazy"`: o iframe só busca o PDF quando o bloco é aberto. É o que
|
|
preserva a economia que o modal trazia (gerar PDF a cada carregamento da
|
|
tela era o problema original) sem precisar de JS para preencher o `src`.
|
|
|
|
<iframe> e não <embed>/<object>: o CSP está em enforcing com
|
|
`object_src :none`, e sem `frame_src` ele cai em `default_src :self` — o
|
|
iframe de mesma origem passa, os outros dois não.
|
|
|
|
O `data-romaneio-target="preview"` continua aqui de propósito: com o JS
|
|
no ar, `atualizarPreview()` recarrega a folha depois de cada edição. Sem
|
|
ele, basta fechar e abrir. %>
|
|
<details class="bg-[#111] border border-white/5 rounded-2xl overflow-hidden"
|
|
data-romaneio-target="overlay"
|
|
data-action="toggle->romaneio#aoAbrirPreview">
|
|
<summary class="cursor-pointer list-none px-4 py-3 min-h-[48px] flex items-center gap-2
|
|
text-white hover:bg-white/5">
|
|
<%= icone :visualizar, cor: nil, espaco: false %>
|
|
Prévia do PDF — <span data-romaneio-target="tituloPreview"><%= @veiculo %></span>
|
|
<span class="ml-auto text-xs text-gray-500">clique para abrir / fechar</span>
|
|
</summary>
|
|
|
|
<div class="px-4 pb-4 space-y-2">
|
|
<div class="flex justify-end">
|
|
<%= link_to 'Abrir em outra aba',
|
|
pdf_admin_romaneio_path(@romaneio, veiculo: @veiculo),
|
|
target: '_blank', rel: 'noopener',
|
|
class: 'text-sm text-gray-300 hover:text-white px-3 py-2 rounded-lg hover:bg-white/10' %>
|
|
</div>
|
|
<iframe data-romaneio-target="preview" loading="lazy"
|
|
src="<%= pdf_admin_romaneio_path(@romaneio, veiculo: @veiculo) %>"
|
|
class="w-full h-[80vh] rounded-xl border border-white/10 bg-white"
|
|
title="Pré-visualização do romaneio"></iframe>
|
|
</div>
|
|
</details>
|