Newsletters archivées lisibles en mobile (iframe srcdoc) + fix couleur du bouton de recherche sur iOS
This commit is contained in:
@@ -394,6 +394,7 @@ header {
|
|||||||
display: block;
|
display: block;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
background-color: #eeeeee;
|
background-color: #eeeeee;
|
||||||
|
color: #1a1a1a;
|
||||||
padding: 0.5rem 1rem;
|
padding: 0.5rem 1rem;
|
||||||
font-family: "NewsCycle", sans-serif;
|
font-family: "NewsCycle", sans-serif;
|
||||||
font-size: 0.85rem;
|
font-size: 0.85rem;
|
||||||
@@ -2173,6 +2174,11 @@ footer {
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 1.5rem; }
|
gap: 1.5rem; }
|
||||||
|
.article .main-content-text .newsletter-frame {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
border: 0;
|
||||||
|
overflow: hidden; }
|
||||||
.article .main-content-text .canal-u-embed,
|
.article .main-content-text .canal-u-embed,
|
||||||
.article .main-content-text .video-embed {
|
.article .main-content-text .video-embed {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|||||||
@@ -190,6 +190,18 @@ function theme_enqueue_assets() {
|
|||||||
filemtime(get_template_directory() . '/js/imageSwiper.js'),
|
filemtime(get_template_directory() . '/js/imageSwiper.js'),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Newsletters archivées : rendues en <iframe srcdoc>, hauteur auto-ajustée
|
||||||
|
$queried_id = get_queried_object_id();
|
||||||
|
if ($queried_id && has_category(thalim_cat_id('newsletter'), $queried_id)) {
|
||||||
|
wp_enqueue_script(
|
||||||
|
'newsletterFrame',
|
||||||
|
get_template_directory_uri() . '/js/newsletterFrame.js',
|
||||||
|
[],
|
||||||
|
filemtime(get_template_directory() . '/js/newsletterFrame.js'),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wp_enqueue_script(
|
wp_enqueue_script(
|
||||||
|
|||||||
@@ -99,8 +99,20 @@ function thalim_get_single_data($post_id) {
|
|||||||
'parent_link' => '',
|
'parent_link' => '',
|
||||||
'category_name' => '',
|
'category_name' => '',
|
||||||
'category_link' => '',
|
'category_link' => '',
|
||||||
|
'is_newsletter' => false,
|
||||||
|
'newsletter_html' => '',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Newsletters archivées (cat « newsletter ») : le post_content est un
|
||||||
|
// document HTML email complet (table 600px + <style> media queries). Injecté
|
||||||
|
// dans la page il perd son <head>/<style> et déborde en mobile ; le template
|
||||||
|
// le rend donc isolé dans une <iframe srcdoc> — on passe le HTML brut (pas
|
||||||
|
// filtré par the_content/wpautop qui casserait le document).
|
||||||
|
if (in_array(thalim_cat_id('newsletter'), wp_get_post_categories($post_id), true)) {
|
||||||
|
$data['is_newsletter'] = true;
|
||||||
|
$data['newsletter_html'] = get_post_field('post_content', $post_id);
|
||||||
|
}
|
||||||
|
|
||||||
// --- Dates ---
|
// --- Dates ---
|
||||||
$raw_debut = get_post_meta($post_id, 'date_de_debut', true);
|
$raw_debut = get_post_meta($post_id, 'date_de_debut', true);
|
||||||
$raw_fin = get_post_meta($post_id, 'date_de_fin', true);
|
$raw_fin = get_post_meta($post_id, 'date_de_fin', true);
|
||||||
|
|||||||
64
js/newsletterFrame.js
Normal file
64
js/newsletterFrame.js
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/**
|
||||||
|
* Newsletters archivées : la <iframe srcdoc> qui rend le document email
|
||||||
|
* (single.twig, posts de catégorie « newsletter ») n'a pas de hauteur
|
||||||
|
* intrinsèque. On l'ajuste au contenu réel et on ré-ajuste sur resize, au
|
||||||
|
* chargement des images et sur tout reflow interne (ResizeObserver).
|
||||||
|
*/
|
||||||
|
(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function resize(frame) {
|
||||||
|
try {
|
||||||
|
var doc = frame.contentDocument || frame.contentWindow.document;
|
||||||
|
if (!doc || !doc.body) return;
|
||||||
|
var h = Math.max(
|
||||||
|
doc.body.scrollHeight, doc.documentElement.scrollHeight,
|
||||||
|
doc.body.offsetHeight, doc.documentElement.offsetHeight
|
||||||
|
);
|
||||||
|
frame.style.height = h + 'px';
|
||||||
|
} catch (e) { /* cross-origin impossible : srcdoc est same-origin */ }
|
||||||
|
}
|
||||||
|
|
||||||
|
function setup(frame) {
|
||||||
|
var run = function () { resize(frame); };
|
||||||
|
|
||||||
|
frame.addEventListener('load', function () {
|
||||||
|
run();
|
||||||
|
try {
|
||||||
|
var win = frame.contentWindow;
|
||||||
|
var doc = frame.contentDocument;
|
||||||
|
// Le reflow d'images en cours de chargement change la hauteur.
|
||||||
|
Array.prototype.forEach.call(doc.images, function (img) {
|
||||||
|
if (!img.complete) { img.addEventListener('load', run); }
|
||||||
|
});
|
||||||
|
if (win.ResizeObserver && doc.body) {
|
||||||
|
new win.ResizeObserver(run).observe(doc.body);
|
||||||
|
}
|
||||||
|
} catch (e) { /* no-op */ }
|
||||||
|
});
|
||||||
|
|
||||||
|
// srcdoc peut déjà être chargé si le script tourne tard.
|
||||||
|
run();
|
||||||
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
var frames = document.querySelectorAll('.newsletter-frame');
|
||||||
|
Array.prototype.forEach.call(frames, setup);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (document.readyState === 'loading') {
|
||||||
|
document.addEventListener('DOMContentLoaded', init);
|
||||||
|
} else {
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
var raf;
|
||||||
|
window.addEventListener('resize', function () {
|
||||||
|
if (raf) { cancelAnimationFrame(raf); }
|
||||||
|
raf = requestAnimationFrame(function () {
|
||||||
|
Array.prototype.forEach.call(
|
||||||
|
document.querySelectorAll('.newsletter-frame'), resize
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})();
|
||||||
@@ -297,6 +297,8 @@ header {
|
|||||||
display: block;
|
display: block;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
background-color: $light-gray;
|
background-color: $light-gray;
|
||||||
|
color: $dark-gray; // iOS Safari/Firefox : sans couleur explicite, le texte
|
||||||
|
// du <button> hérite du blanc système et devient illisible
|
||||||
padding: 0.5rem 1rem;
|
padding: 0.5rem 1rem;
|
||||||
font-family: $font-primary;
|
font-family: $font-primary;
|
||||||
font-size: 0.85rem;
|
font-size: 0.85rem;
|
||||||
|
|||||||
@@ -352,6 +352,17 @@
|
|||||||
gap: 1.5rem;
|
gap: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Newsletter archivée : document email rendu isolé (voir single.twig).
|
||||||
|
// L'iframe prend la largeur de la colonne ; son responsive interne
|
||||||
|
// (@media max-width:620px) fait passer la table 600px à 100%. Hauteur
|
||||||
|
// posée en px par newsletterFrame.js.
|
||||||
|
.newsletter-frame {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
border: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
.canal-u-embed,
|
.canal-u-embed,
|
||||||
.video-embed {
|
.video-embed {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|||||||
@@ -224,7 +224,12 @@
|
|||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if current_language == 'en' and article.body_en %}
|
{% if article.is_newsletter %}
|
||||||
|
{# Document email complet (table 600px + media queries) rendu
|
||||||
|
isolé pour préserver son <head>/<style> et son responsive.
|
||||||
|
Hauteur auto-ajustée par newsletterFrame.js. #}
|
||||||
|
<iframe class="newsletter-frame" title="{{ post.title }}" srcdoc="{{ article.newsletter_html|e('html_attr') }}"></iframe>
|
||||||
|
{% elseif current_language == 'en' and article.body_en %}
|
||||||
{{ article.body_en|raw }}
|
{{ article.body_en|raw }}
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ post.content }}
|
{{ post.content }}
|
||||||
|
|||||||
Reference in New Issue
Block a user