Table des matières

Contenu textuel

Contenu textuel :

Ajouter des espaces insécables

Vous vous demandez si un signe de ponctuation doit être précédé ou suivi d’un espace? Consulter ce document de l’Office québécois de la langue française. Si ce document indique « Pas d’espace ou une espace fines », c’est le « pas d’espace » qui l’emporte sur le Web.

Vous pouvez visionner une explication vidéo également (15 min 35 sec).

Les ponctuations suivantes ont besoin d’un espace insécable pour éviter d’être retrouvé seul sur la ligne suivante :

  • le deux-point :
  • le signe de dollar $
  • le pourcentage %
  • les guillemets « » (les guillemets  » ne sont pas français)

Les titres, élément important du design et de la lisibilité, doivent avoir une apparence soignée :

  • éviter les mots orphelins (mot seul sur sa ligne) et ce, dans toutes les résolutions.
  • éviter qu’un groupe de mots qui vont ensemble ne soit séparé, par exemple :
    • les noms de ville comportant des traits d’union
    • les abréviations telles que « M. UnTel »

Les boutons sont aussi un élément important du design. Si leur libellé est très long, ils peuvent nécessiter l’ajout d’espaces insécables pour le mobile.

Le numéro de téléphone ainsi que le code postal ne devrait jamais se retrouver sur 2 lignes et ce, dans toutes les résolutions.

Si le site web est pour un client premium (donc être livré avec une grande qualité), des espaces insécables pourraient être ajoutés pour éviter les mots orphelins en fin de paragraphe. Les derniers mots jumelés par ces espaces insécables doivent cependant être courts (raison dans la note ci-dessous).

Important S’assurer que l’ajout des codes pour les espaces insécables n’engendre pas une barre de défilement horizontal ou un débordement du contenu hors écran dans la plus petite résolution mobile, soit 360px. Dans un tel cas, on n’a pas le choix de retirer l’espace insécable.

Selon le type de champ dans lequel se trouve le texte, vous pouvez utiliser des codes différents.

Champ standard

Pour un espace insécable, utilisez l’entité :

				
					 
				
			

Pour les mots séparés par un trait d’union, entourez-les des balises :

				
					<span class="text-nowrap">
				
			
				
					</span>
				
			
Champ WYSIWYG  (What You See Is What You Get)
  1. Aller dans l’onglet Texte.
  2. Utiliser toujours la balise que ce soit pour les espaces insécables ou les mots séparés par un trait d’union :
				
					<span class="text-nowrap">
				
			
				
					</span>
				
			

Important Éviter d’englober le point final d’une phrase.

Ainsi, quelqu’un qui ajoute du texte via l’onglet Visuel, l’ajoutera à la suite de la balise et non à l’intérieur de celle-ci. Tous les espaces à l’intérieur de la balise deviennent automatiquement des espaces insécables, pouvant ainsi avoir pour conséquence un débordement du contenu hors écran sur mobile.

Important Toujours vérifier vos ajouts/modifs dans l’onglet Texte.

À partir de l’onglet Visuel, il est possible de détecter que vous êtes en train d’écrire dans une balise pour un espace insécable. Selon où vous positionnez votre curseur dans le texte, vous verrez afficher dans la barre inférieure du WYSIWYG la liste des balises HTML entourant le texte que vous insérerez à cet endroit. Si vous êtes dans un SPAN, allez vérifier ce que vous faites dans l’onglet Texte.

Dès que vous éditez un contenu dans l’onglet Texte d’un champ WYSIWYG, il est IMPORTANT d’aller par la suite dans l’onglet Visuel pour écrire un point (peu importe où) et de l’effacer par la suite afin de forcer la mise à jour du WYSIWYG  (dans le but d’éviter que tous les paragraphes se retrouvent collés ensemble).

Si la balise ne semble pas fonctionner, adressez-vous à Diane Bellefeuille ou une intégratrice Web. Il est probable que le site web sur lequel vous travaillez n’a pas la définition de la classe .text-nowrap dans ses CSS personnalisés.

Exemple Avant
Contenu textuel :

Ajouter des liens

Création de lien par l'interface des widgets

Lorsque vous devez ajouter des liens, privilégier toujours de passer par l’interface des widgets.
À droite d’un champ Lien, la roulette propose quelques options pour personnaliser la balise :
  • Ouvrir dans une nouvelle fenêtre ajoute un attribut target="_blank"
  • Attributs personnalisés est l’endroit où indiquer d’autres attributs, notamment l’attribut title qui doit être inscrit de cette façon : title|Mon texte

Pour un lien interne qui force le téléchargement et non l’ouverture du fichier :

  • Cliquer sur la roulette pour accéder au champ Attributs personnalisés.
  • Écrire uniquement le nom de l’attribut download. La valeur de cet attribut, qui consiste en le nom du fichier qui sera téléchargé, est optionnelle.

Création de lien manuellement

Toutefois, si vous êtes dans un champ standard, par exemple le Widget Titre, ou un champ de type WYSIWYG (What You See Is What You Get), par exemple le Widget Éditeur de texte, vous devrez écrire la balise HTML pour créer un lien.

Balise pour un lien interne :
				
					<a href="/lien-interne/" title="Infobulle qui s'affiche au survol du lien">Libellé du lien</a>
				
			
Balise pour un lien externe :
				
					<a href="https//www.google.ca/" target="_blank" title="Infobulle qui s'affiche au survol du lien">Libellé du lien</a>
				
			
Balise pour un lien interne qui force le téléchargement et non l'ouverture du fichier :
				
					<a href="fichier.pdf" title="Télécharger le formulaire X" download>Libellé du lien</a>
				
			

Dès que vous éditez un contenu dans l’onglet Texte d’un champ WYSIWYG, il est IMPORTANT d’aller par la suite dans l’onglet Visuel pour écrire un point (peu importe où) et de l’effacer par la suite afin de forcer la mise à jour du WYSIWYG  (dans le but d’éviter que tous les paragraphes se retrouvent collés ensemble).

Important Toujours inscrire un libellé textuel, ne pas mettre une url comme libellé du lien.

Les urls ne comportent pas toujours de caractère où la coupure est autorisée pour créer une nouvelle ligne. Ainsi, il est fort probable que le lien déborde de son conteneur ou de l’écran dans toutes ou dans certaines résolutions.

Si vous avez des liens à faire vers des références (par exemple dans un article de blogue), suivre les conventions d’écriture d’une bibliographie est une bonne solution : « [Titre de la page] » sur le site [Nom du site web], consulté le [date].

Pour pousser vos connaissances plus loin...
Contenu textuel :

Ajouter un bouton Copier

Dans Elementor > Widget contenant le texte à copier >
  1. Identifier le contenu textuel à copier par un identifiant. Vous pouvez :
    • ajouter l’attribut id="copie" à une balise existante :
				
					<a href="mailto:info@courriel.com" id="copie">info@courriel.com</a>
				
			
    • entourer le texte d’une balise <span id="copie">…</span> :
				
					Du texte... <span id="copie">Le texte à copier.</span> Encore du texte...
				
			
  1. Important Il faut s’assurer que l’identifiant choisi soit UNIQUE dans la page, et ce, pour chaque texte DIFFÉRENT à copier au sein d’une même page. Si la page comporte plus d’un bouton Copier, mais que c’est toujours le même texte qui doit être copié, il suffit d’identifier un seul des textes à copier avec un identifiant. Dans les exemples ci-dessus, l’identifiant choisi est copie.
  2. Respecter les conventions et ajouter un #copie au début du nom du widget dans la fenêtre Navigateur (même si l’identifiant n’est pas dans l’onglet Avancé du widget).
Dans Elementor > Widget Bouton >
  1. Insérer un widget Bouton à proximité du texte à copier.
    • Texte : Copier ou Copy
    • Lien : cliquer sur la roue d’engrenage pour faire apparaître les champs supplémentaires.
    • Attributs personnalisés :
Pour un bouton en français :
				
					hidden,class|btn-copy,data-copy|copie,data-label-init|Copier,data-label-success|C'est copié!,data-label-error|Erreur : veuillez copier manuellement
				
			
Pour un bouton en anglais :
				
					hidden,class|btn-copy,data-copy|copie,data-label-init|Copy,data-label-success|It's copied!,data-label-error|Error: Please copy manually
				
			
    • Voici l’explication de cette liste d’attributs :
      • hidden : Cache par défaut le bouton. Si le navigateur possède l’API qui permet d’utiliser le presse-papier, cet attribut sera retiré et le bouton s’affichera.
      • class|btn-copy : Ajoute la classe btn-copy directement sur le bouton et non sur son parent (comme le fait le champ Classes CSS dans l’onglet Avancé d’un widget). Cette classe est utilisée par le script pour trouver les boutons auxquels ajouter la fonction de copie.
      • data-copy|copie : Contient l’identifiant de l’élément qui possède le contenu à copier.
      • Important Si l’identifiant choisi au point 1 n’est pas copie, remplacer le mot copie par l’identifiant utilisé.
      • data-label-init|Copier : Libellé initial du bouton. Le bouton revient à ce libellé 5 secondes après le clic.
      • data-label-success|C'est copié! : Libellé du bouton une fois le texte copié dans le presse-papier.
      • data-label-error|Erreur : veuillez copier manuellement : Libellé du bouton si le script échoue.
  1. Vous pouvez, si vous désirez, personnaliser les différents états du bouton Copier en écrivant des styles dans l’onglet Avancé > CSS personnalisé pour les classes suivantes :
    • .btn-succes : La copie a été un succès.
    • .btn-echec : La copie a échouée.
    • .btn-actif : Le script a été exécuté (que ce soit un succès ou un échec).
  2. Ces classes sont automatiquement retirées 5 secondes après le clic sur le bouton.
  1. Respecter les conventions et renommer le widget « . Bouton Copier » dans la fenêtre Navigateur (même si la classe n’est pas dans l’onglet Avancé du widget).
Dans Elementor > Widget HTML >
  1. Insérer un widget HTML SOUS le dernier bouton Copier de la page.
  2. Nommer ce widget « Bouton Copier – Code » dans la fenêtre Navigateur.
  3. Copier le code ci-dessous dans le widget :
				
					<!-- Copier un contenu - v.2024-10-16 -->
<script>
var copyContent = function(e) {
    var elBtn = e.currentTarget;
    var elElementorLabel = elBtn.querySelector('.elementor-button-text');
    var elLabel = (elElementorLabel) ? elElementorLabel : elBtn;
    var copyText = document.getElementById(elBtn.getAttribute('data-copy')).textContent;
    navigator.clipboard.writeText(copyText).then(function() {
        elLabel.innerHTML = elBtn.getAttribute('data-label-success');
        elBtn.classList.add('btn-actif', 'btn-succes');
        setTimeout(function() {
            elLabel.innerHTML = elBtn.getAttribute('data-label-init');
            elBtn.classList.remove('btn-actif', 'btn-succes');
        }, 5000);
    }, function() {
        elLabel.innerHTML = elBtn.getAttribute('data-label-error');
        elBtn.classList.add('btn-actif', 'btn-echec');
        setTimeout(function() {
            elLabel.innerHTML = elBtn.getAttribute('data-label-init');
            elBtn.classList.remove('btn-actif', 'btn-echec');
        }, 5000);
    });
    e.preventDefault();
}
var initCopy = function() {
    if (navigator.clipboard) {
        var btns = document.querySelectorAll('.btn-copy');
        for (var i = 0; i < btns.length; i++) {
            btns[i].removeAttribute('hidden');
            btns[i].addEventListener('click', copyContent);
        } 
    }
}
initCopy();  
</script>
				
			
  1. Important Ajouter votre site à la liste des Sites web clients WP qui utilisent ce code.
Bouton :

Ajouter un bouton pour afficher/masquer du contenu

Cette fonctionnalité permet d’afficher et de masquer un contenu à partir d’un lien (widget bouton ou conteneur). Son activation dépend de la visibilité du contenu et du lien de contrôle dans chaque point de rupture.

ÉTAPE 1 - Intégrer le script

Dans Elementor > Code personnalisé >
Cliquer sur le bouton Ajouter
  • Titre : Afficher/Masquer du contenu
  • Emplacement : </body> – Fin
  • Priorité : 10
  • Copier et coller le code suivant :
				
					<!-- v.2025-08-20 -->
<style>
    body:not(.elementor-editor-active) .msw-toggle-visible-opened, body:not(.elementor-editor-active) .msw-toggle-opened .msw-toggle-visible-closed {
        display:none !important;
    }
    .msw-toggle-target.msw-toggle-show, body:not(.elementor-editor-active) .msw-toggle-opened .msw-toggle-visible-opened  {
        display:block !important;
    }
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {

    const triggers = document.querySelectorAll('.msw-toggle-trigger[data-msw-toggle-id]');

    triggers.forEach(function (trigger) {

        if (trigger.tagName === 'A') {
            trigger.setAttribute('role', 'button');
        }

        const targetId = trigger.getAttribute('data-msw-toggle-id');
        const target = document.getElementById(targetId);
        if (!target) return;

        trigger.setAttribute('aria-controls', targetId);
        trigger.setAttribute('aria-expanded', 'false');

        const elBtnText = trigger.querySelector('.elementor-button-text');
        const openLabel = (elBtnText) ? elBtnText.textContent : '';
        if (openLabel) trigger.setAttribute('data-msw-toggle-label-open', openLabel);

        trigger.addEventListener('click', toggle);
    });

    function toggle(e) {
        const trigger = e.currentTarget;
        e.preventDefault();

        const targetId = trigger.getAttribute('data-msw-toggle-id');
        const target = document.getElementById(targetId);
        target.classList.toggle('msw-toggle-show');

        const isOpen = target.classList.contains('msw-toggle-show');
        trigger.classList.toggle('msw-toggle-opened', isOpen);
        trigger.setAttribute('aria-expanded', String(isOpen));

        const elBtnText = trigger.querySelector('.elementor-button-text');
        if (!elBtnText) return;

        const labelShow = trigger.getAttribute('data-msw-toggle-label-open') || '';
        const labelHide = trigger.getAttribute('data-msw-toggle-label-close') || '';
        const newLabel = isOpen ? labelHide : labelShow;
        if (newLabel) {
            elBtnText.textContent = newLabel;
        }
    }

});
</script>
				
			

ÉTAPE 2 - Identifier le contenu contrôlé

Dans Elementor > Page >

Cliquer sur le conteneur du contenu dont la visibilité doit être contrôlée.

  • Dans l’onglet Avancé :
    • ID de CSS : Donner un nom pertinent et unique dans la page
    • Classes CSS : msw-toggle-target

Dans le panneau Structure, renommer le conteneur : # . Contenu caché

ÉTAPE 3 - Identifier le lien de contrôle

Pour un widget Bouton :

  • Dans le panneau Structure, renommer le widget : Bouton Toggle
  • Dans l’onglet Contenu > Bouton :
    • Lien : #
    • Lien > Roue d’engrenage > Attributs personnalisés :
      • Dans ce champ, chaque couple attribut et valeur doit être écrit attribut|valeur et les différents attributs doivent être séparés par une virgule. Il est donc important de NE JAMAIS avoir une valeur comportant une virgule.
      • Copier et coller les attributs ci-dessous dans ce champ :
				
					data-msw-toggle-id|[ID de CSS],data-msw-toggle-label-close|[Libellé],class|msw-toggle-trigger
				
			
Remplacer :
  • [ID de CSS] par le ID ce que vous avez écrit sur le conteneur # . Contenu caché à l’étape 2.
  • [Libellé] par le libellé du bouton lorsque le contenu est affiché (ex. : En montrer moins / En lire moins / etc.).
  • Si le libellé ne doit pas changer, retirer l’attribut data-msw-toggle-label-close et sa valeur.

Pour un widget Conteneur :

  • Dans le panneau Structure, renommer le widget : Bouton Toggle
  • Dans l’onglet Mise en page > Options supplémentaires :
    • Balise HTML : a (lien)
    • Lien : #
    • Lien > Roue d’engrenage > Attributs personnalisés :
      • Dans ce champ, chaque couple attribut et valeur doit être écrit attribut|valeur et les différents attributs doivent être séparés par une virgule. Il est donc important de NE JAMAIS avoir une valeur comportant une virgule.
      • Copier et coller les attributs ci-dessous dans ce champ :
				
					data-msw-toggle-id|[ID de CSS],class|msw-toggle-trigger
				
			
  • Remplacer [ID de CSS] par le ID ce que vous avez écrit sur le conteneur # . Contenu caché à l’étape 2.
  • Avec un widget Conteneur, vous pouvez modifier la visibilité des widgets enfant qu’il contient selon la visibilité du contenu contrôlé en appliquant une classe CSS.
    • Sur le widget enfant > Dans l’onglet Avancé > Classes CSS :
      • Visible uniquement lorsque le contenu est masqué : msw-toggle-visible-closed
      • Visible uniquement lorsque le contenu est affiché : msw-toggle-visible-opened
    • Dans le panneau Structure, appliquer les conventions en préfixant le widget d’un point.

ÉTAPE 4 - Visibilité des éléments

Dans Elementor > Page >
Dans l’onglet Avancé > Responsive :
  • Masquer le conteneur # . Contenu caché sur tous les points de ruptures à l’exception de ceux où vous désirez qu’il soit immédiatement visible.
  • Si le conteneur # . Contenu caché est visible dans certains points de ruptures, masquer le widget Bouton Toggle pour ceux-ci.

ÉTAPE 5 - Trace du script

Important Ajouter votre site à la liste des Sites web clients WP qui utilisent ce code.

Images

Images :

Ajouter un bouton pour l'ouverture d'une galerie d'images

Dans Elementor > Widget Galerie >
  1. Insérer un widget Galerie et y incorporer les images.
  2. Dans l’onglet Contenu > Réglages :
    • Visionneuse : Oui
  3. Dans l’onglet Avancé > Mise en page :
    • ID de CSS : Donner un nom unique
  4. Cacher ce widget pour toutes les résolutions.
  5. Respecter les conventions et ajouter un # devant le nom du widget Galerie dans la fenêtre Navigateur.
Dans Elementor > Widget Bouton >
  1. Insérer un widget Bouton.
    • Lien : cliquer sur la roue d’engrenage pour faire apparaître les champs supplémentaires.
    • Attributs personnalisés :
				
					class|btn-open-lightbox,data-gallery-id|[ID_GALERIE]
				
			
Remplacer [ID_GALERIE] par l'ID de CSS que vous avez donné au widget Galerie.
  1. Respecter les conventions et renommer le widget « . Bouton Galerie » dans la fenêtre Navigateur (même si la classe n’est pas dans l’onglet Avancé du widget).
Dans Elementor > Code personnalisé >
  1. Cliquer sur le bouton Ajouter / Nouveau code
    • Titre : Bouton pour l’ouverture de galeries d’images
    • Emplacement : </body> – Fin
    • Priorité : 10
    • Copier et coller le code suivant :
				
					<!-- Bouton pour l'ouverture de galeries d'images - v.2025-03-21 -->
<script>
document.addEventListener('DOMContentLoaded', () => {
    const elBtns = document.querySelectorAll('a.btn-open-lightbox, .btn-open-lightbox a');

    elBtns.forEach((btn) => {
        btn.addEventListener('click', (e) => {
            e.preventDefault();
            const galleryId = btn.getAttribute('data-gallery-id');
            if (galleryId) {
                const firstGalleryLink = document.querySelector('#' + galleryId + ' a');
                if (firstGalleryLink) {
                    firstGalleryLink.click();
                }
            }
        });
    });
});
</script>
				
			
  1. Important Ajouter votre site à la liste des Sites web clients WP qui utilisent ce code.

Vidéos

Vidéos :

Intégrer une vidéo YouTube

2025-05-30 – Complianz fait enfin son travail de bloquer (lorsque les cookies ne sont pas acceptés) les vidéos YouTube intégrées via le widget Vidéo de Elementor.

Vous devez toutefois vérifier que le tout fonctionne correctement :

  1. Ouvrez le site web en navigation privée.
  2. Refusez les cookies.
  3. Défilez jusqu’à la vidéo. Si un message « Cliquez pour accepter les cookies marketing et activer ce contenu » (tel qu’illustré ci-dessous) s’affiche, c’est que tout est bien configuré.

Si vous intégrez une vidéo YouTube Shorts, vous devez modifier l’url dans le Widget Vidéo de Elementor :
https://www.youtube.com/shorts/[_ID_YOUTUBE_]

pour

https://www.youtube.com/embed/[_ID_YOUTUBE_]

Complianz sera alors en mesure d’afficher le bon thumbnail de la vidéo lorsque les cookies sont bloqués.

Sinon, vous devez vérifier les configurations de Complianz.

Dans Complianz > Outils
  • Vérifiez que Activer le mode sans échec est à Off.
Dans Complianz > Assistant
  • Lorsque vous arrivez à l’interface Consentement > Services, vérifiez que sous Sélectionnez le type de services de tierces parties que vous utilisez sur votre site, la case à cocher YouTube est cochée.
  • Si le mode sans échec était actif, il est important de faire Enregistrer et continuer à chaque étape et jusqu’à la fin (Complianz lancera des confettis) afin que la bannière sorte réellement du mode sans échec.
Dans LiteSpeed Cache >

La vidéo est bel et bien bloquée? Super! Si LiteSpeed Cache est activé sur l’environnement sur lequel vous travaillez, voici les dernières étapes à suivre ou à vérifier :

  • Aller dans Optimisation de la page / Page Optimization
  • Onglet Personnalisation / Tuning
  • Repérer l’option JS différé/reporté exclut / JS Deferred / Delayed Excludes
  • Vérifier ou ajouter les mots suivants à la liste (chacun sur leur propre ligne).
				
					complianz
cmplz
				
			
  • Enregistrer les modifications / Save Changes.
  • Dans la barre d’outils en haut, repérer le losange de LiteSpeed Cache, et cliquer sur Tout Purger / Purge All.

Testons une dernière fois!

  1. Ouvrez la page contenant la vidéo en navigation privée.
  2. Acceptez les cookies.
  3. Naviguez vers une autre page du site web.
  4. Retournez sur la page de la vidéo avec les liens du site web (pas de bouton Revenir en arrière).

Si la vidéo s’affiche, tout est beau!

Si, malgré tout, la vidéo ne fonctionne pas comme prévue, ajoutez un sous-pulse dans Monday :

  • Titre : SW – Vérifier vidéo YouTube avec Complianz
  • Commentaire : indiquer les urls des pages qui contiennent des vidéos
  • Responsable : Diane Bellefeuille
  • Échéance : la journée même
  • Technique : À faire
Vidéos :
Intégrer une ou plusieurs vidéos YouTube
  1. Créer un thumbnail pour chaque vidéo que vous souhaitez intégrer. Vous avez 2 options :
  2. Télécharger l’icône YouTube.
Dans Médias >
  1. Cliquer sur le bouton Ajouter un fichier média
  2. Téléverser les deux images (thumbnail de la vidéo et l’icône YouTube).
  3. Ne pas optimiser l’image de l’icône YouTube, rétablir l’original.
  4. Copier les urls de ces images et les converser dans un document à côté.
Dans Elementor > Code personnalisé
  1. Cliquer sur le bouton Ajouter / Nouveau code
    • Titre : Vidéos YouTube
    • Emplacement : </body> – Fin
    • Priorité : 10
    • Copier et coller le code suivant :
				
					<!-- LazyLoading YouTube Videos 2025-01-30 -->
<style>
    .lazyload-video {
        position:relative;
        display:inline-block;
    }
    .lazyload-video-icon {
        position:absolute;
        width:100%;
        height:100%;
        /* Url de l'icône YouTube */
        background-image:url("[_URL_ICONE_YOUTUBE_]");
        background-position: center center;
        background-repeat:no-repeat;
        z-index:1;
    }
    .lazyload-video img {
        display:block;
        max-width:100%;
        height:auto;
    }
	.lazyload-video.thumbnail-portrait img {
        width:auto;
        max-height:100%;
    }
</style>
<script>
(function() {
	let isIframeLoaded = false;

	// Convertir le lien en iFrame YouTube
	const msw_lazyloading_video = () => {
		if (!isIframeLoaded) {
			isIframeLoaded = true;
			const videos = document.querySelectorAll('.lazyload-video');
			videos.forEach(video => {
				video.addEventListener('click', function(event) {
					event.preventDefault();
					const el = event.currentTarget;
					const thumbnail = el.querySelector('img');
					const w = parseFloat(thumbnail.getAttribute('width'));
					const h = parseFloat(thumbnail.getAttribute('height'));
					const videoRatio = h / w;
					const iframe = document.createElement('iframe');
					iframe.src = el.getAttribute('data-embed-url');
					iframe.setAttribute('data-ratio', videoRatio);
					iframe.setAttribute('allow', 'accelerometer; autoplay; fullscreen; encrypted-media; gyroscope; picture-in-picture');
					iframe.setAttribute('allowfullscreen', true);
					const container = el.parentNode;
					const newWidth = container.offsetWidth;
					const newHeight = newWidth * videoRatio;
					iframe.setAttribute('width', newWidth);
					iframe.setAttribute('height', newHeight);
					container.replaceChild(iframe, el);
				});
			});
		}
	};

	// Rendre les iFrame YouTube Responsive
	const msw_responsive_video = () => {
		const videos = document.querySelectorAll('iframe[src*="//www.youtube"]');
		videos.forEach(video => {
			// Nouvelle dimension
			const videoRatio = parseFloat(video.getAttribute('data-ratio'));
			const newWidth = video.parentNode.offsetWidth;
			const newHeight = newWidth * videoRatio;
			video.width = newWidth;
			video.height = newHeight;
		});
	};

	// Optimiser les performances (réduire le nombre de déclenchement des événements resize)
	const throttle = msw_throttle_resize(msw_responsive_video, 100);
	function msw_throttle_resize(fn, wait) {
		let time = Date.now();
		return function() {
			if ((time + wait - Date.now()) < 0) {
				fn();
				time = Date.now();
			}
		};
	}

	// Activer les vidéos si les cookies Marketing sont acceptés (Complianz)
	function msw_cmplz_enable_video(consentData) {
		if (!consentData || !consentData.detail) {
			console.log('MSW YouTube Videos: Missing consent data.');
			return;
		}
		if (consentData.detail.category === 'marketing'){
			 msw_lazyloading_video();
			 window.addEventListener('resize', throttle);
		}
	}
	document.addEventListener('cmplz_enable_category', msw_cmplz_enable_video);

	document.addEventListener('DOMContentLoaded', function() {
		if (typeof cmplz_has_consent === 'function') {
			if (cmplz_has_consent('marketing')) {
				msw_lazyloading_video();
				window.addEventListener('resize', throttle);
			}
		}
	});

})();
</script>
<!-- END - LazyLoading YouTube Videos 2025-01-30 -->
				
			
  1. Important Personnaliser le code ainsi :
    • Remplacer le code [_URL_ICONE_YOUTUBE_] par l’url de l’icône YouTube que vous avez téléversé précédemment dans la médiathèque.
Dans Pages > Elementor >
  1. Insérer un widget HTML à l’endroit où vous désirez ajouter une vidéo YouTube.
  2. Nommer ce widget « Vidéo YouTube – Code » dans la fenêtre Navigateur.
  3. Copier le code ci-dessous dans le widget :
				
					<!-- Vidéo YouTube 2024-02-05 -->
<a href="https://www.youtube.com/watch?v=[_ID_YOUTUBE_]" target="_blank" rel="noopener" data-embed-url="https://www.youtube.com/embed/[_ID_YOUTUBE_]?rel=0" class="lazyload-video">
<span class="lazyload-video-icon"></span>
<img decoding="async" src="[_URL_THUMBNAIL_]" width="[_IMG_WIDTH_]" height="[_IMG_HEIGHT_]" alt="Vidéo - [_TITRE_VIDEO_]">
</a>
<!-- END - Vidéo YouTube 2024-02-05 -->
				
			
  1. Important Personnaliser le code ainsi :
    • Remplacer les 2 codes [_ID_YOUTUBE_] par la valeur du paramètre v= dans l’url de la vidéo YouTube, par exemple :
      https://www.youtube.com/watch?v=2CSHq1NtBlo
    • Remplacer le code [_URL_THUMBNAIL_] par l’url du thumbnail de la vidéo que vous avez téléversé dans la médiathèque.
    • Remplacer les codes [_IMG_WIDTH_] et [_IMG_HEIGHT_] par les dimensions de l’image. Ces informations peuvent être obtenus dans la médiathèque :
      • Dans la vue Grille > dans le popup > dans la colonne de droite.
      • Dans la vue Liste > lien Modifier > dans la colonne de droite.
    • Remplacer le code [_TITRE_VIDEO_] par le titre de la vidéo sur YouTube. Ce titre s’affichera si l’image n’est pas disponible pour l’affichage.
  2. Important Ajouter votre site à la liste des Sites web clients WP qui utilisent ce code.

Tant que le plugin pour la gestion des cookies Complianz n’est pas installé sur le site web, il est tout à fait normal que le résultat soit simplement un lien sur une image vers YouTube. Lorsque Complianz sera configuré, l’acceptation des cookies fera en sorte que la vidéo soit affichée à même le site web.

  • Le paramètre ?rel=0 à la fin de l’url embed de la vidéo a pour effet de présenter uniquement des vidéos du même auteur à la toute fin de la lecture (et non pas ceux de la concurrence).
  • Liste des Hooks du plugin Complianz
				
					<!-- LazyLoading Vidéo YouTube 2024-02-05 -->
<style>
    .lazyload-video {
        position:relative;
        display:inline-block;
    }
    .lazyload-video-icon {
        position:absolute;
        width:100%;
        height:100%;
        /* Url de l'icône YouTube */
        background-image:url("[_URL_ICONE_YOUTUBE_]");
        background-position: center center;
        background-repeat:no-repeat;
        z-index:1;
    }
    .lazyload-video img {
        display:block;
				max-width:100%;
				height:auto;
    }
	.lazyload-video.thumbnail-portrait img {
				width:auto;
				max-height:100%;
    }
</style>
<script>
// Convertir le lien en iFrame YouTube Responsive
var msw_lazyloading_video = function() {
  var videos = document.querySelectorAll('.lazyload-video');
  for (var i = 0; i < videos.length; i++) {
    videos[i].addEventListener('click', function(event) {
      event.preventDefault();
      var el = event.currentTarget;
      var thumbnail = el.querySelector('img');
      var w = thumbnail.offsetWidth, h = thumbnail.offsetHeight;
      var iframe = document.createElement('iframe');
      iframe.src = el.getAttribute('data-embed-url');
      var videoRatio = h / w;
      iframe.setAttribute('data-ratio', videoRatio);
      var container = el.parentNode;
      var newWidth = container.offsetWidth;
      var newHeight = newWidth * videoRatio;
      iframe.setAttribute('width', newWidth);
      iframe.setAttribute('height', newHeight);
      iframe.setAttribute('allow', 'accelerometer; autoplay; fullscreen; encrypted-media; gyroscope; picture-in-picture');
      iframe.setAttribute('allowfullscreen', true);
      el.parentNode.replaceChild(iframe, el);
    });
  }
};

// Rendre les iFrame YouTube Responsive
var msw_responsive_video = function() {
    // Boucle sur les vidéos
    var videos = document.querySelectorAll('iframe[src*="//www.youtube"]');
    for (var i = 0; i < videos.length; i++) {
        // Ratio
        if (!videos[i].hasAttribute('data-ratio')) {
            videos[i].setAttribute('data-ratio', videos[i].getAttribute('height') / videos[i].getAttribute('width'));
            videos[i].removeAttribute('width');
            videos[i].removeAttribute('height');
        }
        // Nouvelle dimension
        var videoRatio = videos[i].getAttribute('data-ratio');
        var newWidth = videos[i].parentNode.offsetWidth;
        var newHeight = newWidth * videoRatio;
        videos[i].width = newWidth;
        videos[i].height = newHeight;
    }
};

// Activation du vidéo si les cookies Marketing sont acceptés (Complianz)
if (cmplz_has_consent('marketing')) {
	   msw_lazyloading_video();
     window.addEventListener('resize', msw_responsive_video);
}
document.addEventListener('cmplz_enable_category', msw_cmplz_enable_video);
function msw_cmplz_enable_video(consentData) {
  var category = consentData.detail.category;
  if (category==='marketing'){
     msw_lazyloading_video();
     window.addEventListener('resize', msw_responsive_video);
  }
}
</script>
<!-- END - LazyLoading Vidéo YouTube 2024-02-05 -->
				
			
Vidéos :

Intégrer une vidéo Facebook

ÉTAPE 1 - Récupération du iFrame Facebook

Reels >
  1. Dans Facebook, sur le profil du client, à partir de la section Reels du profil du client, agrandir la vidéo que vous souhaitez intégrer au site web.
  2. Dans la vue agrandie, cliquer sur les 3 points horizontaux en bas à droite de la vidéo.
  3. Choisir l’option Ancrer.
  4. Dans la nouvelle fenêtre, cliquer sur le bouton Copier le code ou sélectionner et copier le code du iFrame.
Vidéos >
  1. Dans Facebook, sur le profil du client, à partir de la section Vidéos du profil du client, agrandir la vidéo que vous souhaitez intégrer au site web.
  2. Dans la vue agrandie, cliquer sur les 3 points horizontaux à la droite du nom du client.
  3. Choisir l’option Intégrer.
  4. Dans la nouvelle fenêtre, cliquer sur le bouton Copier le code ou sélectionner et copier le code du iFrame.

ÉTAPE 2 - Intégration du iFrame Facebook dans Elementor

  1. Insérer un widget HTML à l’endroit où la vidéo doit être intégrée.
  2. Dans l’onglet Contenu > Code HTML, coller le code du iFrame Facebook
  3. Dans l’onglet Avancé > CSS personnalisé, coller le code approprié selon le format de la vidéo :
Format paysage >
				
					selector iframe {
    /* Conserver le ratio de la vidéo */
    aspect-ratio: 16/9;
    width:auto;
    height:100%;
    max-height:400px;
    /* Centrer horizontalement */
    display:block;
    margin:0 auto;
}
				
			
Format portrait >
				
					selector iframe {
    /* Conserver le ratio de la vidéo */
    aspect-ratio: 9/16;
    width:100%;
    height:auto;
    max-width:340px;
    /* Centrer horizontalement */
    display:block;
    margin:0 auto;
}
				
			
  1. Personnaliser les CSS pour la hauteur maximum (vidéo format paysage) ou la largeur maximum (vidéo format portrait) selon votre design.
  2. Dans le panneau Structure, renommer le widget : * Vidéo Facebook

ÉTAPE 3 - Vérification du blocage par Complianz

Lorsque vous refusez les cookies, la vidéo doit être remplacée par l’image ci-contre. 

Si ce n’est pas le cas, faites les vérifications ci-dessous.

Dans Complianz > Outils
  • Vérifiez que Activer le mode sans échec est à Off.
Dans Complianz > Assistant
  • Lorsque vous arrivez à l’interface Consentement > Services, vérifiez que :
    • Votre site web contient-il du contenu intégré de réseaux sociaux […] : Oui.
    • Sélectionnez les réseaux sociaux utilisés sur le site web : Facebook.
  • Si le mode sans échec était actif, il est important de faire Enregistrer et continuer à chaque étape et jusqu’à la fin (Complianz lancera des confettis) afin que la bannière sorte réellement du mode sans échec.

Si, malgré tout, la vidéo n’est pas bloquée, ajoutez un sous-pulse dans Monday :

  • Titre : SW – Vérifier vidéo Facebook avec Complianz
  • Commentaire : indiquer les urls des pages qui contiennent des vidéos
  • Responsable : Diane Bellefeuille
  • Échéance : la journée même
  • Technique : À faire

Facebook

Facebook :

Intégrer le plugin Facebook Page

Afin que le plugin Facebook Page se redimensionne de façon dynamique (en quasi temps réel au redimensionnement de la fenêtre) au niveau de sa largeur et/ou de sa hauteur selon différents points de rupture, vous devez l’intégrer de la façon décrite ci-dessous.

Dans ELEMENTOR > Widget HTML >
  1. Copier et coller le code suivant :
				
					<!-- v.2024-08-22 -->
<div id="fb-page-plugin" data-href="[_URL_PAGE_FACEBOOK_]" data-label-link="Voir notre page Facebook" data-height="500"></div>
<div id="fb-root"></div>
<script data-category="marketing" data-service="facebook">
(function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; if(d.getElementById(id))return;js=d.createElement(s);js.id=id;js.src="//connect.facebook.net/fr_CA/sdk.js#xfbml=1&version=v17.0"; fjs.parentNode.insertBefore(js,fjs)})(document,"script","facebook-jssdk");
</script>
<script data-category="marketing" data-service="facebook">
var getViewportWidth=function(){var e=window,a="inner";if(!("innerWidth"in window)){a="client";e=document.documentElement||document.body}return e[a+"Width"]};
var resizeFbPagePlugin=function(){var resizeTimer;var parent=document.getElementById("fb-page-plugin");var show=false;var minWidth=180;var maxWidth=500;var prevHeight=parent.getAttribute("data-height");var prevWidth=parent.offsetWidth;var breakpoints={"xsmall":480,"medium":768,"large":1025,"xlarge":1266};window.addEventListener("resize",function(){clearTimeout(resizeTimer);resizeTimer=setTimeout(function(){var actualWidth=parent.offsetWidth;if(actualWidth>maxWidth)actualWidth=maxWidth;
if(actualWidth<minWidth)actualWidth=minWidth;var width=getViewportWidth();var height=parent.getAttribute("data-height");for(var i in breakpoints)if(width>=breakpoints[i])if(parent.getAttribute("data-height-"+i))height=parent.getAttribute("data-height-"+i);if(!show||prevWidth!=actualWidth||prevHeight!=height){parent.innerHTML='<div class="fb-page" data-href="'+parent.getAttribute("data-href")+'" data-width="'+Math.floor(actualWidth)+'" data-height="'+height+'" data-tabs="timeline" data-small-header="true" data-adapt-container-width="false" data-hide-cover="false" data-show-facepile="false" data-lazy="true"><blockquote cite="'+
parent.getAttribute("data-href")+'" class="fb-xfbml-parse-ignore"><a href="'+parent.getAttribute("data-href")+'" target="_blank" rel="noopener">'+parent.getAttribute("data-label-link")+"</a></blockquote></div>";if(typeof FB!="undefined")FB.XFBML.parse();show=true;prevWidth=actualWidth;prevHeight=height}},250)});window.dispatchEvent(new Event("resize"))};
resizeFbPagePlugin();
</script>
				
			
  1. Important Remplacer [_URL_PAGE_FACEBOOK_] par l’url complète de la page Facebook du client.
  2. Pour ajuster la hauteur du plugin, vous devez ajuster la valeur (en pixels) de l’attribut data-height.L’hauteur est également personnalisable selon différents points de rupture. Il suffit d’ajouter l’attribut correspondant à l’intérieur de la balise. Les hauteurs ainsi définies sont appliquées si la résolution est supérieure ou égale au point de rupture associé.
    Attribut Point de rupture Exemple Requis?
    data-height="" ≥ 0 <div id="fb-page-plugin" [...] data-height="300" [...]> Oui
    data-height-xsmall="" ≥ 480px <div id="fb-page-plugin" [...] data-height-xsmall="300" [...]> Non
    data-height-medium="" ≥ 768px <div id="fb-page-plugin" [...] data-height-medium="300" [...]> Non
    data-height-large="" ≥ 1025px <div id="fb-page-plugin" [...] data-height-large="300" [...]> Non
    data-height-xlarge="" ≥ 1266px <div id="fb-page-plugin" [...] data-height-xlarge="300" [...]> Non
  3. Important Ajouter votre site à la liste des Sites web clients WP qui utilisent ce code.

Si vous désirez personnaliser le lien qui s’affiche lorsque les cookies sont refusés, vous pouvez copier le code ci-dessous et le coller au-dessus du script. Il vous suffit de définir les différents états possibles. Redimensionner la fenêtre afin de voir ces différents états.

				
					<style>
    /* Styles pour personnaliser le lien qui s'affiche lorsque les cookies sont refusés */
    #fb-page-plugin > :not(.cmplz-blocked-content-container) a {
        /* Définir ici les CSS nécessaires pour personnaliser le lien lorsque l'encadré de Complianz ne s'affiche pas */
    }
    #fb-page-plugin > :not(.cmplz-blocked-content-container) a:hover, 
    #fb-page-plugin > :not(.cmplz-blocked-content-container) a:focus {
        /* Définir ici les CSS nécessaires pour personnaliser le lien au survol lorsque l'encadré de Complianz ne s'affiche pas */
    }
    #fb-page-plugin .cmplz-blocked-content-container a {
        /* Définir ici les CSS nécessaires pour personnaliser le lien lorsque l'encadré de Complianz s'affiche */
    }
</style>