PageSourceSearch

https://www.quartier-libre.fr/assets/js/common/module.js?1789390388

js quartier-libre.fr collected 2026-09-25 05:00:11 UTC 11,716 bytes, 317 lines download raw bytes

1$(function() {
2  $('.ajax-module').each(function() {
3    var element = $(this);
4    run_loading(element);
5  });
6
7  // Au clic sur des offres du module flightoffer
8  $(document).on('click', '.flight-offer-module .flight-offer', function(e) {
9    e.preventDefault();
10    show_loading();
11
12    if (!$('div#engine-flight-popin-reveal').length) {
13      $('body').append('<div id="engine-flight-popin-reveal" class="reveal-modal" data-reveal aria-hidden="true" role="dialog"></div>');
14    }
15
16    $('#engine-flight-popin-reveal').foundation('reveal', 'open', {
17      url: '/rest/module/product/flightoffer/popin.html',
18      data: {
19        url: $(this).attr('data-url')
20      }
21    });
22  });
23
24});
25
26function iframeload() {
27  show_loading(false);
28}
29
30function run_loading(element, page_block_id, block_position_id, module_id, configuration)
31{
32  if (arguments.length == 1 ) {
33    var page_block_id = block_position_id = module_id = configuration = '';
34  }
35  
36  var params = $.param({
37    'page_block_id':		page_block_id,
38    'block_position_id': 	block_position_id,
39    'module_id': 			module_id,
40    })+'&'+$.param(configuration);
41  
42  $.ajax({
43    url: element.data('url'),
44    data: params,
45    dataType: 'json',
46    type: 'get',
47    xhrFields: {
48      withCredentials: true
49    },
50    success: function(data) {
51      var callback = '_callback_'+element.data('module');
52      return window[callback](element, data);
53    }
54  });
55}
56
57function _callback_content_agencies(element, data)
58{
59  if (!data.error) {
60    element.find('select[name="agency_id"]').empty();
61    for (var i in data.agencies) {
62      var o = data.agencies[i];
63      var index = parseInt(i);
64      
65      var option = '<option value="'+o.code+'">'+o.name+'</option>';
66      element.find('select[name="agency_id"]').append(option);
67    }
68  } else {
69    element.find('select[name="agency_id"]').empty().append('<option value>'+data.message+'</option>');
70  }
71  
72  element.find('form').submit(function() {
73    var selected = $(this).find('select[name="agency_id"] option:selected');
74    if (!selected.length || !selected.val()) {
75      return false;
76    }
77    selected.text(selected.text().replace('"',''));
78    $(this).append('<input type="hidden" name="agency_name" value="'+selected.text()+'" /> ');
79    return true;
80  });
81  
82  return false;
83}
84
85function _callback_content_slider(element, data)
86{
87  if (!data.error) {
88    var index = 0;
89    for (var i in data.sliders) {
90      var o = data.sliders[i];
91      
92      // On ajoute une nouvelle slide à partir des templates
93      if (index != 0) {
94        var slide = $('#template-slide').html();
95        element.find('.offer-slider').slick('slickAdd', slide);
96        var mainSlider = $('#template-main-slider').html();
97        element.find('.main-slider').slick('slickAdd', mainSlider);
98      }
99
100      //Lien
101      if (o.url && typeof o.url != 'undefined') {
102        element.find('.slider-consult').eq(index).prop('href', o.url);
103      } else {
104        var anchor = element.find('.slider-consult').eq(index);
105        anchor.replaceWith($('<div class="slider-consult"></div>'));
106      }
107      
108      // Durée
109      if (o.duration_day && typeof o.duration_day != 'undefined' && o.duration_night && typeof o.duration_night != 'undefined') {
110        element.find('.slider-duration:eq('+index+')').removeClass('hide');
111        element.find('.slider-duration:eq('+index+')').find('.day').html(o.duration_day);
112        element.find('.slider-duration:eq('+index+')').find('.night').html(o.duration_night);
113      }
114      
115      //Prix
116      if (o.price && typeof o.price !== 'undefined' && parseFloat(o.price) > 0) {
117        element.find('.slider-price:eq('+index+')').html(o.price);
118        //Prix barré
119        if (o.old_price && typeof o.old_price !== "undefined" && parseFloat(o.old_price) > parseFloat(o.price)) {
120          element.find('.slider-old-price:eq('+ index+ ')').parent().removeClass('hide').end().html(o.old_price+' €');
121        }
122
123      } else {
124        element.find('.price-container:eq('+index+')').hide();
125      }
126      
127      element.find('.slider-title:eq('+index+')').html(o.title);
128      element.find('div[class*=slider-picture]:not(.slick-cloned):eq('+index+')').find('img').attr('src', o.picture);
129      o.old_price && (parseInt(o.old_price) > parseInt(o.price)) && element.find('.slider-price-old:eq('+index+')').html(o.old_price).closest('.slider-price-old-wrap').removeClass('hide');
130      element.find('.slider-description:eq('+index+')').html(o.description ? o.description.substring(0, 150) : '');
131
132      index++;
133    }
134
135    element.find('.main-slider').slick('refresh');
136    element.find('.offer-slider').slick('refresh');
137  }
138  
139  resizePicturesToContainer('slider-img');
140  resizeLoadedPicturesToContainer('slider-img');
141  //Notify un possible changement de taille du slider pour que les overlay s'adapte (BO uniquement)
142  $(document).trigger('heightChange');
143  
144  return false;
145}
146
147function _callback_product_offer(element, data)
148{
149  if (!data.error) {
150    // On affiche le retour si on a au moins 1 offre
151    if (Object.keys(data.offers).length > 0) {
152      var index = 0;
153      var flag = false;
154      for (var i in data.offers) {
155        var o = data.offers[i];
156        var offer_element = element.find('.offer-consult').eq(index);
157        var offer_loading = offer_element.hasClass('offer-loading') ? offer_element : offer_element.parents('.offer-loading');
158        
159        //Lien vers l'offre
160        if (o.url && typeof o.url != 'undefined') {
161          offer_element.prop('href', o.url);
162        } else {
163          if (offer_element.find('.link-container').length) {
164            offer_element.find('.link-container').remove();
165          } else if (offer_element.find('.go-offer-container').length) {
166            offer_element.find('.go-offer-container').remove();
167          }
168        }
169        
170        //Prix de vente
171        if (o.price && typeof o.price != 'undefined' && parseFloat(o.price) > 0) {
172          offer_element.find('.offer-price').html(o.price);
173          o.old_price && parseInt(o.old_price) > parseInt(o.price) && offer_element.find('.offer-price-old').html(o.old_price).closest('.offer-price-old-wrap').removeClass('hide');
174        } else {
175          offer_element.find('.price-content').hide();
176          offer_element.find('.price-container').hide();
177        }
178        
179        offer_element.find('.offer-title').html(o.title);
180        if (!offer_element.find('.offer-title').hasClass('not-truncated')) {
181          offer_element.find('.offer-title').dotdotdot({ellipsis: '...'});
182        }
183        
184        if (o.picture && offer_element.find('.offer-picture').length) {
185          offer_element.find('.offer-picture').append('<img src="'+o.picture+'" class="resize" />');
186        } else if (o.picture && offer_element.parent().find('.offer-picture').length && flag == false) {
187          offer_element.parent().find('.offer-picture').append('<img src="'+o.picture+'" class="resize" />');
188          flag = true;
189        }
190        
191        offer_element.find('.offer-destination').html(o.destination);
192        
193        if (o.destination.length == 0) {
194          offer_element.find('.offer-location').addClass('hide');
195        }
196
197        if (o.destination.length && $('.dash').length) {
198          offer_element.find('.dash').removeClass('hide');
199        }
200        
201        if (o.region && typeof o.region != 'undefined') {
202          offer_element.find('.offer-region').html(' - <strong>'+o.region+'</strong>');
203        } else {
204          offer_element.find('.offer-region').addClass('hide');
205        }
206
207        if (o.duration_day && typeof o.duration_day != 'undefined' && o.duration_night && typeof o.duration_night != 'undefined') {
208          offer_element.find('.offer-duration').removeClass('hide');
209          offer_element.find('.offer-duration .day').html(o.duration_day);
210          offer_element.find('.offer-duration .night').html(o.duration_night);
211        }
212        
213        o.description = o.description.replace(/[<]br[^>]*[>
213]/gi, "");
214        offer_element.find('.offer-description').html(strip_tags(o.description));
215        
216        offer_element.find('.offer-description').dotdotdot({ellipsis: '...'});
217        var description = offer_element.find('.offer-description').text().trim();
218        offer_element.find('.offer-description').html(description);
219        
220        // On supprime la class "offer_loading" si l'offre a été trouvée
221        offer_loading.removeClass('offer-loading');
222        index ++;
223      }
224
225      // Si on a plus d'offres paramétrées que de trouvées
226      if (element.find('.offer-loading').length) {
227        element.find('.offer-loading').remove();
228      }
229    // Si aucune offre n'a été trouvée, on affiche la configuration "contrepropos"
230    } else {
231      $.ajax({
232        url: '/rest/module/product/offer/counteroffer_view.html',
233        type: 'GET',
234        dataType: 'html',
235        data: data.counteroffer
236      }).done(function(data) {
237        element.eq(0).append(data);
238        element.find('.offer-loading').remove();
239        // Template vertical - Supprimer l'image au dessus des offres
240        if (element.find('.picture-container.offer-picture').length) {
241          element.find('.picture-container.offer-picture').remove();
242        }
243      });
244    }
245
246    //Notify un possible changement de taille du module offre pour que les overlay s'adapte (BO uniquement)
247    $(document).trigger('heightChange');
248    center_offer();
249  }
250  
251  setTimeout(function() {
252    resizePicturesToContainer('resize');
253    resizeLoadedPicturesToContainer('resize');
254    checkImages();
255    $(document).foundation({
256      equalizer : {
257        equalize_on_stack: true
258      }
259    });
260    //Notify un possible changement de taille du module offre pour que les overlay s'adapte (BO uniquement)
261    $(document).trigger('heightChange');
262  }, 200);
263  
264    return false;
265}
266
267$(window).resize(function() {
268  $('.offer-title').trigger('update.dot');
269  $('.offer-description').trigger('update.dot');
270  $(document).foundation('equalizer', 'reflow');
271});
272
273
274function strip_tags(html) {
275  if (arguments.length < 3) {
276    html = html.replace(/<\/?(?!\!)[^>]*>/gi, '');
277  } else {
278    var allowed = arguments[1];
279    var specified = eval("["+arguments[2]+"]" );
280    if (allowed) {
281      var regex = '</?(?!(' + specified.join('|') + '))\b[^>]*>';
282      html = html.replace(new RegExp(regex, 'gi'), '');
283    } else {
284      var regex = '</?(' + specified.join('|') + ')\b[^>]*>';
285      html = html.replace(new RegExp(regex, 'gi'), '');
286    }
287  }
288  return html;
289}
290
291function center_offer() {
292  $('.offers-module').parents('.page-block').find('> .row').addClass('center-offer');
293}
294
295// Ajoute une class au conteneur d'offre
296$(document).ready(function() {
297  center_offer();
298});
299
300// Permet à l'iframe moteur resatravel et resavoyage d'adapter sa hauteur.
301window.addEventListener( "message", function (event) {
302    if (event.data) {
303      try {
304        let data = JSON.parse(event.data);
305        if (data.source == "engine" && data.event == "resize") {
306          if($("#resavoyage_engine").length > 0) {
307            document.getElementById("resavoyage_engine").style.height = data.newHeight + "px";
308          }
309          if($("#resatravel_engine").length > 0) {
310            document.getElementById("resatravel_engine").style.height = data.newHeight + "px";
311          }
312        }
313      } catch (SyntaxError) {}
314    }
315  },
316  false
317);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.