var Drupal = { behaviors : {} }; Drupal.madMedia = { 'attachLazyload' : function() {}, 'attachPicturefill' : function() {} } Drupal.settings = {}; Drupal.settings.galleryPlayer = []; /** * @file * mad_media.imagefull_player.js * * Gestion des évènements des images pleine taille. */ (function($) { Drupal.behaviors.madMediaImageFull = { attach: function (context, settings) { // Détecter si 'context' se trouve à l'intérieur d'un CKEditor. var $CKEditor = (Drupal.madCKeditor && Drupal.madCKeditor.getParentEditorContainer(context)) || null; if (!$CKEditor) { Drupal.madMediaImageFull.attachImageFullPopup(context); } } }; Drupal.madMediaImageFull = { attachImageFullPopup: function(context) { // Le clic sur l'image déclenche l'ouverture de MFP contenant la version // full size de l'image. var $zoomHandler = $('.mad_image--js-zoom', context); $zoomHandler.magnificPopup({ type: 'inline', closeBtnInside: false, callbacks: { elementParse: function(item) { // On récupère l'ID de l'image dans l'attribut 'data-image-id'. var imageID = $(item.el[0]).attr('data-image-id'); // Avec l'ID de l'image, on retrouve le tag passé dans le JS. item.src = Drupal.settings.madMedia.imagefull['mad_image--' + imageID]; } } }); // On s'appuie sur picturefill pour parser la balise . $zoomHandler.on('mfpOpen', function(e) { Drupal.madMedia.attachPicturefill(context); }); } }; })(jQuery); ; (function($) { Drupal.behaviors.madMediaDiaporama = { attach: function (context) { // Détecter si 'context' se trouve à l'intérieur d'un CKEditor. var $CKEditor = (Drupal.madCKeditor && Drupal.madCKeditor.getParentEditorContainer(context)) || null; if (!$CKEditor && context == document) { // Traiter les diaporamas. /* $('.lac__js-diaporama__link', context).once('diaporama', function() { Drupal.madMediaDiaporama.attachDiaporamaPopup($(this)); }); */ if( $('.lac__js-diaporama__link').length > 0 ) { Drupal.madMediaDiaporama.attachDiaporamaPopup($('.lac__js-diaporama__link')); // Catche les URL deeplink pour ouvrir directement les bonnes images/diapos. Drupal.madMediaDiaporama.attachDiaporamaDeepLinking(context); } } } }; Drupal.madMediaDiaporama = { /** * Handler de timeOut. * Permet de remettre à zéro les timeout du diaporama. */ diaporamaPlayTimeout:0, /** * Auto play : durée de la pause avant passage à la photo suivante (en ms). */ diaporamaPauseLength:8000, /** * Liste des pubs gérée dans les diapos. */ ads: ['pave-diapo', 'mban-diapo', 'intrusif-diapo'], /** * Mis à jours après chargement initial des pub du diapo. */ firstLoaded: false, /** * Associe les thumbnails du teaser diapo à la popup. * * @param $diaporama */ attachDiaporamaPopup: function($diaporama) { // Récupération des options du diaporama. var popupGalleryOptions = Drupal.madMediaDiaporama.buildDiaporamaOptions($diaporama); // Au clic sur une vignette, on affiche la photo cliquée. $('.lac__js-media-diaporama__photo>a', $diaporama).on('click', function(e) { e.preventDefault(); var $img = $(this).find('img'); // Si une propriété data-weight est présente elle renseigne sur // le weight de l'image dans la galerie sinon on récupère son index. var thumbIndex = $img.data('weight') != null ? $img.data('weight') : $('.lac__js-media-diaporama__photo>a', $diaporama).index(this); $.magnificPopup.open(popupGalleryOptions, thumbIndex); }); // On ajoute le comportement au clic sur le lien/titre du diapo. $('a.lac__js-media-diaporama__info__link_open, a.lac__js-media-diaporama__grid__link_open', $diaporama).on('click', function(e) { e.preventDefault(); $.magnificPopup.open(popupGalleryOptions); }); }, buildDiaporamaOptions: function($diaporama) { // On récupère l'ID du diaporama dans l'attribut 'data-player-id'. var playerID = $diaporama.attr('data-player-id'); // Avec cet ID, on retrouve les données correspondantes dans le JS. var diapoData = Drupal.settings.galleryPlayer['diapo_' + playerID]; // On définit les options d'affichage de la MFP pour un diaporama photo. return { type:'inline', items: diapoData.data, fixedBgPos:true, fixedContentPos: true, tClose: 'Fermer', closeOnBgClick:false, inline: { // Template de la MFP. // Les éléments suivants sont remplis à la volée : // - mfp-title => légende de la photo // - mfp-auteur => copyright de la photo // - mfp-pictureMarkup => markup des pour la photo // - mfp-pub => pavé publicité markup: diapoData.template }, gallery: { enabled: true, // preload : 0 images antérieures, 1 image postérieure preload : [1, 1], tPrev: 'Photo précédente', tNext: 'Photo suivante', tCounter: '%curr% / %total%', navigateByImgClick:true }, callbacks: { /** * Parse le contenu de la popup à chaque fois qu'il change. * * @param template * Template de la popup * @param values * Valeurs à setter pour remplacer le contenu des balises avec la * classe mfp-VALEUR. * @param item * Photo courante. */ markupParse: function(template, values, item) { var $pictureWrapper = template.find('.diaporama__figure picture'); var $outbrainWrapper = template.find('.outbrain__wrapper div#outbrain-diapo'); if (values.picture) { // On place le contenu de l'image. $pictureWrapper.replaceWith(values.picture); // On vide le block outbrain du diapo. $outbrainWrapper.empty(); } else { var $outBrainExternalWrapper = $('.outbrain__diaporama__block'); // On vide le contenu de l'image. $pictureWrapper.replaceWith(''); if ($outBrainExternalWrapper.html()) { // Cette situation n'apparait que quand on est en cours de // navigation dans le diaporama. $outbrainWrapper.html($('.OUTBRAIN', $outBrainExternalWrapper).html()); } else { $outBrainExternalWrapper.html(values.markup); // Un peu maigre mais si OBR n'est déjà présent (lib Outbrain) // c'est qu'on charge le diapo directement sur la page outBrain. // (la dernière page du diapo url avec son encre) // Si par contre OBR est présent c'est que le diapo a été ouvert // après chargement de la page ou à une page du diapo qui n'est // pas celle d'Outbrain. if (typeof OBR !== 'undefined') { OBR.extern.reloadWidget(values.widget); } var it = 0; // Parce qu'OutBrain ne dispose pas (du moins à ma connaissance) // de ready State pour l'affichage de son contenu, on fait en // sorte de surveiller son chargement avant d'en déplacer le // contenu dans le diapo en cours. var localInterval = setInterval(function() { // Prévient le cas où outbrain pour une raison ou une autre // ne chargerai pas, ce qui provoquerait une d'une boucle // sans fin. Le délai accordé de 8 secondes (40*200ms) est // fixé de façon tout à fait arbitaire... it++; if ($('.OUTBRAIN', $outBrainExternalWrapper).html() || it >= 40) { clearInterval(localInterval); $outbrainWrapper.html($('.OUTBRAIN', $outBrainExternalWrapper).html()); } }, 200); } } // Chargement async de Krux. if (typeof Krux != 'undefined') { // Reload krux. Krux('page:load', function(err) { /* Optional, called just after the tags are finished loading. If err is not null, then something went wrong. (err will be an instanceof Error or null.) }, {pageView: true /* Set to false if you don't want this counted as a page view. */ }); } // Appel tracking AT internet. Drupal.madMediaDiaporama.addtracking(); }, /** * Fonction exécutée à l'ouverture de la popup. * On attache la navigation. */ open: function() { var mfpContainer = $('.mfp-container').first(); Drupal.madMediaDiaporama.attachDiaporamaNavigation(mfpContainer); // @Todo s'assurer que ça marche aussi pour les pubs intrusives. /* apntag && !Drupal.madMediaDiaporama.firstLoaded && apntag.anq.push(function() { Drupal.madMarket.debug && console.log('Chargement initial'); ads_wrapper.tags = ads_wrapper.tags.concat(Drupal.madMediaDiaporama.ads); $(Drupal.madMediaDiaporama.ads).each(function(index, adName) { ads_wrapper.showTag(adName); }); }); */ }, /** * Fonction exécutée à chaque changement de photo. */ change: function(e) { var magnificPopup = $.magnificPopup.instance; var currentIndex = (magnificPopup.index + 1); // On attend (via setTimeout) pour être sur que le DOM est bien créé. setTimeout(function(){ // On rejoue picturefill() pour forcer l'interprétation de la balise // sur le DOM qu'on vient d'injecter pour l'image courante. var mfpContainer = $('.mfp-container').first(); Drupal.madMedia.attachPicturefill(mfpContainer); // On change l'URL. var currentHash = '#diaporama-' + playerID + '_' + currentIndex; var currentState = {'hash': currentHash, 'diapoID': playerID, 'index':currentIndex}; history.replaceState(undefined, undefined, currentHash); Drupal.madMediaDiaporama.storeCurrentState(currentState); // Rechargement synchronisé des publicité. if (false) { } else { // Au chargement initial du diapo on passe tout de même par là . // Donc on utilise la variable "firstLoaded" pour prévenir // les appels consécutifs du load et du refresh. Drupal.madMediaDiaporama.firstLoaded = true; } }, 1); }, /** * Fonction exécutée à la fermeture de MFP. */ close: function() { // On nettoie le hash.0 Drupal.madMediaDiaporama.removeHash(); // D'un point de vu business on veut faire un nouveau hit OutBrain // à chaque chargement du diapo ce dont on s'assure en vidant // le container externe du bloc. $('.outbrain__diaporama__block').empty() } } }; }, /** * Crée les comportements associés aux boutons de navigation au sein de la * popup. * * @param $diapoContainer * Container du daiporame (ressource jQuery). */ attachDiaporamaNavigation: function($diapoContainer) { // Flèches 'suivant' / 'précédent'. $('.lac__js-diaporama__nav .diapo__previous a', $diapoContainer).on('click', Drupal.madMediaDiaporama.displayPreviousPicture); $('.lac__js-diaporama__nav .diapo__next a', $diapoContainer).on('click', Drupal.madMediaDiaporama.displayNextPicture); /* $('.diaporama__wrapper').swipe( { swipeLeft:function(event, direction, distance, duration, fingerCount) { Drupal.madMediaDiaporama.displayPreviousPicture(event); }, swipeRight:function(event, direction, distance, duration, fingerCount) { Drupal.madMediaDiaporama.displayNextPicture(event); } }); */ // Attachement des comportement Pinterest. // Drupal.madSocialNetwork.attachEventPin($diapoContainer); // Grille des vignettes. $('.lac__js-diaporama__nav .diapo__index a', $diapoContainer).on('click', Drupal.madMediaDiaporama.showDiapoGrid); // Autoplay : binding. $('.lac__js-diaporama__nav .diapo__autoplay a', $diapoContainer).on('click', Drupal.madMediaDiaporama.autoPlay); // Autoplay : lancement au démarrage sauf si le cookie indique que l'utilisateur // a mis en pause précédemment. var playerCookie = Drupal.madMediaDiaporama.getCookies('mad_diapo_player'); if ((playerCookie == 'playing') ) { $('.lac__js-diaporama__nav .diapo__autoplay a', $diapoContainer).first().trigger('click'); } }, /** * Affiche la photo suivante. */ displayNextPicture: function(e) { e.preventDefault(); $.magnificPopup.instance.next(); }, /** * Affiche la photo précédente. */ displayPreviousPicture: function(e) { e.preventDefault(); $.magnificPopup.instance.prev(); }, /** * Affiche la grille contenant les vignettes de toutes les photos qui * composent le diaporama. */ showDiapoGrid: function() { // On récupère les données du diaporama, à partir de l'ID de diapo. var currentState = window.currentdiapodata; var diapoData = Drupal.settings.galleryPlayer['diapo_' + currentState.diapoID]; // On stocke les éléments du diaporama ainsi que l'index courant, pour // restitution ultérieure. var mfp = $.magnificPopup.instance; var diapoItems = mfp.items; // On construit le markup des vignettes. var photoGridMarkup = '
    '; var cptDiapo = 0; $.each(diapoData.data, function(index, item) { // Exclusion de la diapo Outbrain (celle qui ne contient que // le champs "tagOutbrain" dans la grille. if (isFinite(index) && index <= (diapoItems.length -1) ) { photoGridMarkup += '
  • '; if (item['button'] != undefined) { photoGridMarkup += item['button']; } photoGridMarkup += '
  • '; cptDiapo++; } }); photoGridMarkup += '
'; // On reprend le template de la MFP. var layoutMarkup = diapoData.template; var $layoutMarkupElement = $('
' + layoutMarkup + '
'); $layoutMarkupElement.find('.diaporama__wrapper').first().html(photoGridMarkup); // On retire les boutons de la barre de navigation. $layoutMarkupElement.find('.lac__js-diaporama__nav').empty(); // On ajoute un bouton avec les classes : // - 'mfp-close' pour theming iso des autres forme de MFP. // - 'mfp-close-grid' pour ajouter du comportement spécifique à la fermeture. $layoutMarkupElement.find('.lac__js-diaporama__nav').append('
  • '); // On relance la MFP avec la grille créée. mfp.arrowRight.hide(); mfp.arrowLeft.hide(); mfp.open({ items: { src: $layoutMarkupElement.html(), type: 'inline' } }, 0); if (typeof Krux != 'undefined') { // Reload krux. Krux('page:load', function(err) { /* Optional, called just after the tags are finished loading. If err is not null, then something went wrong. (err will be an instanceof Error or null.) }, {pageView: true /* Set to false if you don't want this counted as a page view. */ }); } // Conteneur MFP. var mfpContainer = $('.mfp-container').first(); // Ajout de behaviors en mode grille. // CLIC VIGNETTE => on affiche la photo cliquée. $('.lac__js-diaporama-grid-thumbnail', mfpContainer).on('click', function(e) { e.preventDefault(); var thumbIndex = $('.lac__js-diaporama-grid-thumbnail', mfpContainer).index(this); $.magnificPopup.instance.arrowRight.show(); $.magnificPopup.instance.arrowLeft.show(); $.magnificPopup.open({ delegate: '.lac__js-diaporama-grid-thumbnail', items:diapoItems, type: 'inline' }, thumbIndex); }); // CLIC BOUTON CLOSE => retour photo. $('.mfp-close-grid', mfpContainer).on('click', function(e) { e.preventDefault(); $(this).removeClass('mfp-close'); mfp.arrowRight.show(); mfp.arrowLeft.show(); // Si on vient d'une photo, on se repositionne dessus à la fermeture du // mode 'grille'. if (typeof currentState !== 'undefined') { $.magnificPopup.open({items:diapoItems}, (currentState.index -1)); } // Sinon on se positionne sur la 1ere photo. else { $.magnificPopup.open({items:diapoItems}); } return false; }); // CLIC CHECKBOX => enregistrement en ajax de la selection. $('.check', mfpContainer).on('click', function(e) { e.preventDefault(); var sid = $(this).attr('value'); if ($(this).hasClass("checked")) { $.post("/select_redac/" + sid + "/0"); $(this).addClass("unchecked"); $(this).removeClass("checked"); } else { $.post("/select_redac/" + sid + "/1"); $(this).addClass("checked"); $(this).removeClass("unchecked"); } return false; }); }, /** * Store the data of the previous diapo. * * @param data * @returns {*} */ storeCurrentState: function(data) { if (data) { window.currentdiapodata = data; } }, /** * Fonction d'auto play du slideshow. Cette fonction est appelée qd on clique * sur le bouton 'play' dans la navigation. */ autoPlay: function(e) { // preventDefault() pour éviter de suivre le lien # et perdre le deep link. e.preventDefault(); // Si déjà lancé, on l'arrête if ($(this).hasClass('playing')) { $(this).removeClass('playing'); Drupal.madMediaDiaporama.setCookies('mad_diapo_player', 'pause'); } // sinon, on le lance. else { $(this).addClass('playing'); Drupal.madMediaDiaporama.setCookies('mad_diapo_player', 'playing'); Drupal.madMediaDiaporama.diaporamaPlayTimeout = setTimeout(Drupal.madMediaDiaporama.playDiapo, Drupal.madMediaDiaporama.diaporamaPauseLength); } }, /** * Joue le diaporama en enchainant les photos, tant que le bouton 'pause' n'a * pas été cliqué. * * L'intervalle entre 2 images est de 5 secondes. */ playDiapo: function(){ var continuePlaying = $('.lac__js-diaporama__nav .diapo__autoplay a').hasClass('playing'); if (continuePlaying) { $.magnificPopup.instance.next(); } }, /** * Ajoute le deeplinking sur les atoms images. * */ attachDiaporamaDeepLinking: function (context) { var hashUrl = Drupal.madMediaDiaporama.urlFromHash(); if (hashUrl) { // Expression régulière capable de matcher les url deep link de la forme: // http://[BASE-URL]/node/[nid]#diaporama-[diapo-id]_[photo-id] var regex = /^diaporama-(\d+)(_(\d+))?/; var matches = regex.exec(hashUrl); if (matches) { var diapo_id = matches[1]; if (matches.length > 2) { var photo_id = matches[3] - 1; } var $diaporama = $('.diaporama__link--' + diapo_id); var popupGalleryOptions = Drupal.madMediaDiaporama.buildDiaporamaOptions($diaporama); $.magnificPopup.open(popupGalleryOptions, photo_id); // On rejoue les behaviors. //Drupal.behaviors.madMedia.attach(context); } } }, /** * Récupère le hash dans l'URL. * * @returns {*} */ urlFromHash : function () { if (location.hash.substr(0, 1) != '#') { return null; } // why not location.hash? => http://stackoverflow.com/q/4835784/298479 return location.href.split('#')[1].substr(0); }, /** * Se déplace vers la droite autant de fois qu'indiqué dans photoShift. * @param photoShift */ gotoPhoto : function (photoShift) { // Récupération des options du diaporama. var popupGalleryOptions = Drupal.madMediaDiaporama.buildDiaporamaOptions($diaporama); $.magnificPopup.open(popupGalleryOptions, photoShift); }, /** * Suppression du # en fin d'URL. * Fallback pour les navigateurs ne connaissant pas 'pushState'. * * @see http://stackoverflow.com/questions/1397329/how-to-remove-the-hash-from-window-location-with-javascript-without-page-refresh */ removeHash: function() { var scrollV, scrollH, loc = window.location; if ("replaceState" in history) { history.replaceState("", document.title, loc.pathname + loc.search); } else { // Prevent scrolling by storing the page's current scroll offset scrollV = document.body.scrollTop; scrollH = document.body.scrollLeft; loc.hash = ""; // Restore the scroll offset, should be flicker free document.body.scrollTop = scrollV; document.body.scrollLeft = scrollH; } }, /** * Lecture de cookie. */ getCookies: function(cName) { var oRegex = new RegExp("(?:; )?" + cName + "=([^;]*);?"); if (oRegex.test(document.cookie)) { return decodeURIComponent(RegExp["$1"]); } return null; }, /** * Création de cookie. */ setCookies: function(cName, cValue) { var today = new Date(); var expires = new Date(); // Expiration du cookie : 1 jour. expires.setTime(today.getTime() + (24 * 60 * 60 * 1000)); document.cookie = cName + "=" + encodeURIComponent(cValue) + ";expires=" + expires.toGMTString() + ";path=/"; }, addtracking: function(){ } }; /** * Surcharges des fonctions next() et prev() par défaut de MagnificPopup. * Permet d'inclure la remise à zéro du timeout d'autoplay. */ $.magnificPopup.instance.next = function() { // Appel à la fonction 'next' de base. $.magnificPopup.proto.next.call(this); // Remise à 0 du timeout. clearTimeout(Drupal.madMediaDiaporama.diaporamaPlayTimeout); Drupal.madMediaDiaporama.diaporamaPlayTimeout = setTimeout(Drupal.madMediaDiaporama.playDiapo, Drupal.madMediaDiaporama.diaporamaPauseLength); // On scrolle jusqu'en haut pour que la pub soit visible $(".mfp-wrap").animate({ scrollTop:0 },"slow"); }; $.magnificPopup.instance.prev = function() { // Appel à la fonction 'prev' de base. $.magnificPopup.proto.prev.call(this); // Remise à 0 du timeout. clearTimeout(Drupal.madMediaDiaporama.diaporamaPlayTimeout); Drupal.madMediaDiaporama.diaporamaPlayTimeout = setTimeout(Drupal.madMediaDiaporama.playDiapo, Drupal.madMediaDiaporama.diaporamaPauseLength); // On scrolle jusqu'en haut pour que la pub soit visible $(".mfp-wrap").animate({ scrollTop:0 },"slow"); }; })(jQuery); ; /** * @file * mad_market.js * * Attach des behaviors liés aux tags pub. */ (function($) { Drupal.madMarket = { /** * Tailles détectées par le script pour chaque format. */ tagsFormat:{}, postLoadFormats: [], exclu: true, debug: document.location.search.match('debug_ads'), /** * Mapping entre breakPoints et Device Pub. */ formatMap: { xlarge: 'desktop', large: 'tablette', medium: 'tablette', small: 'smartphone' }, loadTags:function() { apntag.anq.push(function() { apntag.loadTags(); }); }, defineTag:function(tagDef) { apntag.anq.push(function() { apntag.defineTag(tagDef); }); }, onEvent: function(event, targetId, callback) { apntag.anq.push(function() { apntag.onEvent(event, targetId, callback); }); }, showTag:function(targetId) { apntag.anq.push(function() { apntag.showTag(targetId); }); }, loadPostLoadPubs: function() { this.exclu = false; this.postLoadFormats.forEach(function(tagDef) { $('#' + tagDef.targetId).ready(function() { Drupal.madMarket.showTag(tagDef.targetId); }); }); }, managePubFormats:function(siteId, pageId, tags) { this.tagsFormat = JSON.parse(tags); var pubDevice = this.formatMap[Drupal.madCoreBreakPoints.getBreakPoint()]; for (var tag in this.tagsFormat) { if (!this.tagsFormat.hasOwnProperty(tag)) { continue; } var targetId = 'pub_' + tag; var tagDef = { invCode: [pubDevice, siteId, pageId, tag].join('_'), sizes: JSON.parse(this.tagsFormat[tag]['sizes'][pubDevice]), targetId: targetId }; switch (tag) { // Les formats *btf et *mtf seront définit après vérification de la // présence ou non d'une campagne exclu luxe en cours. case 'mban_atf': case 'mban_btf': case 'mban_mtf': this.postLoadFormats = this.postLoadFormats.concat(tagDef); // Sinon les autres formats sont immédiatement appelés. default: this.defineTag(tagDef); break; } // Le binding doit avoir lieux avant même la définition du tag ? this.handleEventBinding(tag, targetId); } // Start loading tags this.loadTags(); }, handleEventBinding: function(formatId, targetId) { switch(formatId) { case 'habillage': Drupal.madMarket.onEvent('adAvailable', targetId, function(adObj) { Drupal.madMarket.debug && console.log('ADAVAILABLE', formatId, targetId, adObj); if (adObj.banner.content && adObj.banner.content.indexOf('') === -1) { Drupal.madMarket.debug && console.log('NOT PIXEL_COLLAPSE_AD'); Drupal.madMarket.pubLoaded(formatId, adObj); } else { Drupal.madMarket.debug && console.log('PIXEL_COLLAPSE_AD'); } if (adObj.banner.content && adObj.banner.content.indexOf('') === -1) { Drupal.madMarket.debug && console.log('NOT EXCLU_LUXE'); Drupal.madMarket.loadPostLoadPubs(); } else { Drupal.madMarket.debug && console.log('EXCLU_LUXE'); } }); Drupal.madMarket.onEvent('adNoBid', targetId, function(adObject) { // Pas d'exclusivité luxe on rend les formats mis en postLoad. Drupal.madMarket.loadPostLoadPubs(); Drupal.madMarket.pubUnBided(formatId); }); Drupal.madMarket.onEvent('adRequestFailure', targetId, function(adObjonEventect){ Drupal.madMarket.loadPostLoadPubs(); Drupal.madMarket.pubUnBided(formatId); }); Drupal.madMarket.onEvent('adError', targetId, function(adObject){ Drupal.madMarket.loadPostLoadPubs(); Drupal.madMarket.pubUnBided(formatId); }); break; case 'pave_atf': // Gère les pubs qui renvoient bien une création. Drupal.madMarket.onEvent('adLoaded', targetId, function(adObject){ Drupal.madMarket.pubLoaded(formatId, adObject); }); // Gère les pubs qui ne renvoient pas de création. Drupal.madMarket.onEvent('adNoBid', targetId, function(adObject){ Drupal.madMarket.pubUnBided(formatId); }); Drupal.madMarket.onEvent('adRequestFailure', targetId, function(adObjonEventect){ Drupal.madMarket.pubUnBided(formatId); }); Drupal.madMarket.onEvent('adError', targetId, function(adObject){ Drupal.madMarket.pubUnBided(formatId); }); break; } }, loadPub:function(formatId) { var targetId = 'pub_' + formatId; // Seuls les habillages et pavés sont catcher car leur affichage conditionne // peux altérer la présentation du site. if (['mban_btf', 'mban_mtf'].indexOf(formatId) !== -1) { // Si le chargement de la bannière a déjà eu lieu et qu'on sait qu'il // ne s'agit pas d'une campagne luxe on laisse passer. // Sinon on bloque. if (this.exclu) { return; } } Drupal.madMarket.showTag(targetId); }, pubUnBided:function(formatId) { switch(formatId) { case 'pave_atf': case 'habillage': Drupal.madMarket.setTagFormatClass(formatId, 0); break; } }, pubLoaded:function(formatId, adObject) { switch(formatId) { case 'pave_atf': Drupal.madMarket.setTagFormatClass(formatId, adObject.banner.height); break; case 'habillage': Drupal.madMarket.setTagFormatClass(formatId, 1); break; } }, /** * Applique à la balise la classe CSS correspondant à la hauteur de la * balise injectée. * * @param {string} formatType * Format de pub injecté. * @param {number} tagHeight * Hauteur (en pixels) de la balise, utilisée pour construire la classe CSS. * Note : si tagHeight vaut 0 ou 1, sa valeur n'est pas utilisée comme * hauteur mais comme flag pour indiquer l'absence (respectivement la * présence) du bloc pub. */ setTagFormatClass: function(formatType, tagHeight) { $body = $('body'); var classe = ''; // Si tagHeight vaut 0, il s'agit d'un bloc vide pour garantir que rien ne // s'affiche dans cet encart. if (tagHeight == 0) { classe = 'pub__' + formatType + '--empty'; } // Si tagHeight vaut 1, le bloc est présent. // Ex: dans le cas du format habillage, on veut juste savoir s'il est // présent, sa hauteur n'est pas exploitée. else if (tagHeight == 1) { classe = 'pub__' + formatType; } else { classe = 'pub__' + formatType + '--' + tagHeight; } if (classe) { $body.addClass(classe); if (!$body.hasClass(classe)) { $(document).ready(function() { Drupal.madMarket.debug && console.log('Class', classe, 'was not set retry on document ready'); $body.addClass(classe); }); } } } } })(jQuery); ; $(function() { Drupal.behaviors.madMediaDiaporama.attach(document); })