Compare commits
1 Commits
feat/v12-m
...
feat/v12-q
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7791054ca0 |
@@ -14,8 +14,27 @@ interface JournalItem {
|
||||
|
||||
const selectedItem = ref<JournalItem | null>(null)
|
||||
const iframeRef = ref<HTMLIFrameElement | null>(null)
|
||||
const wrapperRef = ref<HTMLDivElement | null>(null)
|
||||
const skeletonHidden = ref(false)
|
||||
|
||||
// Force rendu desktop de l'iframe AEP : viewport simulée 1440px + scale dynamique
|
||||
const VIEWPORT_W = 1440
|
||||
const iframeScale = ref(0.42)
|
||||
let resizeObs: ResizeObserver | null = null
|
||||
|
||||
const updateScale = () => {
|
||||
if (!wrapperRef.value) return
|
||||
const w = wrapperRef.value.clientWidth
|
||||
if (w > 0) iframeScale.value = w / VIEWPORT_W
|
||||
}
|
||||
|
||||
const iframeStyle = computed(() => ({
|
||||
width: VIEWPORT_W + 'px',
|
||||
height: (100 / iframeScale.value) + '%',
|
||||
transform: `scale(${iframeScale.value})`,
|
||||
transformOrigin: '0 0',
|
||||
}))
|
||||
|
||||
const onJournalItemClick = (e: Event) => {
|
||||
const ce = e as CustomEvent
|
||||
if (ce.detail?.item) selectedItem.value = ce.detail.item
|
||||
@@ -23,9 +42,16 @@ const onJournalItemClick = (e: Event) => {
|
||||
|
||||
onMounted(() => {
|
||||
window.addEventListener('journal-item-click', onJournalItemClick as EventListener)
|
||||
if (wrapperRef.value && typeof ResizeObserver !== 'undefined') {
|
||||
updateScale()
|
||||
resizeObs = new ResizeObserver(updateScale)
|
||||
resizeObs.observe(wrapperRef.value)
|
||||
}
|
||||
})
|
||||
onUnmounted(() => {
|
||||
window.removeEventListener('journal-item-click', onJournalItemClick as EventListener)
|
||||
resizeObs?.disconnect()
|
||||
resizeObs = null
|
||||
})
|
||||
|
||||
const reset = () => {
|
||||
@@ -89,18 +115,19 @@ const formatDate = (iso: string) => {
|
||||
|
||||
<!-- DEFAULT : iframe AEP (aucun item selectionne) -->
|
||||
<div v-if="!selectedItem" class="h-full">
|
||||
<div class="relative h-full bg-neutral-100">
|
||||
<div ref="wrapperRef" class="relative h-full bg-neutral-100 overflow-hidden">
|
||||
<div
|
||||
v-if="!skeletonHidden"
|
||||
id="embed-skeleton"
|
||||
class="absolute inset-0 flex items-center justify-center bg-neutral-50 animate-pulse"
|
||||
class="absolute inset-0 flex items-center justify-center bg-neutral-50 animate-pulse z-10"
|
||||
>
|
||||
<span class="text-neutral-400 text-sm">Chargement de la carte AEP...</span>
|
||||
</div>
|
||||
<iframe
|
||||
src="https://aep.trans-former.fr/agences"
|
||||
title="Carte AEP"
|
||||
class="w-full h-full border-0 opacity-0 transition-opacity duration-500"
|
||||
class="absolute top-0 left-0 border-0 opacity-0 transition-opacity duration-500"
|
||||
:style="iframeStyle"
|
||||
sandbox="allow-scripts allow-same-origin allow-popups allow-forms"
|
||||
@load="onIframeLoad"
|
||||
ref="iframeRef"
|
||||
|
||||
Reference in New Issue
Block a user