merge(v12-q): iframe AEP forcé desktop transform scale
This commit is contained in:
@@ -14,8 +14,27 @@ interface JournalItem {
|
|||||||
|
|
||||||
const selectedItem = ref<JournalItem | null>(null)
|
const selectedItem = ref<JournalItem | null>(null)
|
||||||
const iframeRef = ref<HTMLIFrameElement | null>(null)
|
const iframeRef = ref<HTMLIFrameElement | null>(null)
|
||||||
|
const wrapperRef = ref<HTMLDivElement | null>(null)
|
||||||
const skeletonHidden = ref(false)
|
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 onJournalItemClick = (e: Event) => {
|
||||||
const ce = e as CustomEvent
|
const ce = e as CustomEvent
|
||||||
if (ce.detail?.item) selectedItem.value = ce.detail.item
|
if (ce.detail?.item) selectedItem.value = ce.detail.item
|
||||||
@@ -23,9 +42,16 @@ const onJournalItemClick = (e: Event) => {
|
|||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
window.addEventListener('journal-item-click', onJournalItemClick as EventListener)
|
window.addEventListener('journal-item-click', onJournalItemClick as EventListener)
|
||||||
|
if (wrapperRef.value && typeof ResizeObserver !== 'undefined') {
|
||||||
|
updateScale()
|
||||||
|
resizeObs = new ResizeObserver(updateScale)
|
||||||
|
resizeObs.observe(wrapperRef.value)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
window.removeEventListener('journal-item-click', onJournalItemClick as EventListener)
|
window.removeEventListener('journal-item-click', onJournalItemClick as EventListener)
|
||||||
|
resizeObs?.disconnect()
|
||||||
|
resizeObs = null
|
||||||
})
|
})
|
||||||
|
|
||||||
const reset = () => {
|
const reset = () => {
|
||||||
@@ -89,18 +115,19 @@ const formatDate = (iso: string) => {
|
|||||||
|
|
||||||
<!-- DEFAULT : iframe AEP (aucun item selectionne) -->
|
<!-- DEFAULT : iframe AEP (aucun item selectionne) -->
|
||||||
<div v-if="!selectedItem" class="h-full">
|
<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
|
<div
|
||||||
v-if="!skeletonHidden"
|
v-if="!skeletonHidden"
|
||||||
id="embed-skeleton"
|
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>
|
<span class="text-neutral-400 text-sm">Chargement de la carte AEP...</span>
|
||||||
</div>
|
</div>
|
||||||
<iframe
|
<iframe
|
||||||
src="https://aep.trans-former.fr/agences"
|
src="https://aep.trans-former.fr/agences"
|
||||||
title="Carte AEP"
|
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"
|
sandbox="allow-scripts allow-same-origin allow-popups allow-forms"
|
||||||
@load="onIframeLoad"
|
@load="onIframeLoad"
|
||||||
ref="iframeRef"
|
ref="iframeRef"
|
||||||
|
|||||||
Reference in New Issue
Block a user