PageSourceSearch

https://www.elite-extensions.fr/modules/chronopost/views/js/chronorelais.js

js elite-extensions.fr collected 2026-09-25 07:18:42 UTC 12,928 bytes, 365 lines download raw bytes

1var marker_group = null;
2var defaultPostCode = "75001";
3
4function capitalize(string) {
5    return string.charAt(0).toUpperCase() + string.slice(1);
6}
7
8/**
9 * Submit postCode change and rebuild markers
10 */
11function postcodeChangeEvent() {
12    initRelaisMap(null, $('#relais_postcode').val(), null, cust_country);
13}
14
15function toggleRelaisMap(cust_address, codePostal, city, e) {
16    var valueChecked = $("input.delivery_option_radio:checked").val();
17    if (valueChecked !== undefined) {
18        valueChecked = valueChecked.slice(0, -1);
19    }
20
21    var carrierChecked = $("input[name=id_carrier]:checked").val();
22    if (carrierChecked !== undefined) {
23        carrierChecked = carrierChecked.slice(0, -1);
24    }
25
26    var postCodeControls = $('#chrono_postcode_controls');
27    var chronorelaisContainer = $('#chronorelais_container');
28
29    if (valueChecked === CHRONORELAIS_AMBIENT_ID || carrierChecked === CHRONORELAIS_AMBIENT_ID_INT ||
30        valueChecked === CHRONORELAIS_ID || carrierChecked === CHRONORELAIS_ID_INT ||
31        valueChecked === RELAISEUROPE_ID || carrierChecked === RELAISEUROPE_ID_INT ||
32        valueChecked === RELAISDOM_ID || carrierChecked === RELAISDOM_ID_INT ||
33        valueChecked === TOSHOPDIRECT_ID || carrierChecked === TOSHOPDIRECT_ID_INT ||
34        valueChecked === TOSHOPDIRECT_EUROPE_ID || carrierChecked === TOSHOPDIRECT_EUROPE_ID_INT) {
35        if (typeof e != "undefined") {
36            e.stopPropagation();
37        }
38
39        // Show Chronorelais controls
40        chronorelaisContainer.show();
41        postCodeControls.show();
42
43        initRelaisMap(cust_address, codePostal, city, cust_country);
44        return false;
45    }
46
47    // Hide Chronorelais controls
48    chronorelaisContainer.hide();
49    postCodeControls.hide();
50}
51
52/**
53 * Initialize layers and build markers
54 *
55 * @param address
56 * @param codePostal
57 * @param city
58 * @param country
59 */
60function initRelaisMap(address, codePostal, city, country) {
61    if (typeof codePostal === 'undefined') {
62        return;
63    }
64
65    if (relais_map !== null) {
66        relais_map.remove()
67    }
68    relais_map = mapInit();
69
70    // Initialize imagery
71    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
72        attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
73    }).addTo(relais_map);
74
75    // Add markers layer
76    marker_group = L.featureGroup();
77    marker_group.addTo(relais_map);
78
79    // Build all markers
80    initRelaisMarkers(address, codePostal, city, country);
81}
82
83/**
84 * Initialize Leaflet map
85 *
86 * @returns {*}
87 */
88function mapInit() {
89    if ($('#chronorelais_map').length === 0) {
90        return null;
91    }
92
93    return L.map('chronorelais_map').setView([0, 0], 12);
94}
95
96/**
97 * Save customer "relais"
98 *
99 * @param relaisID
100 */
101function associateRelais(relaisID) {
102    $.ajax({
103        url: path + '/async/storePointRelais.php?relaisID=' + relaisID + '&cartID=' + cartID + '&customerFirstname=' + encodeURIComponent(cust_firstname) + '&customerLastname=' + encodeURIComponent(cust_lastname)
104    });
105}
106
107/**
108 * Create all "relais" list
109 *
110 * @param json
111 */
112function createAllPointRelais(json) {
113    var htmlForTxtSection = '';
114    var data = JSON.parse(json);
115
116    if (data.errorCode !== 0) {
117        alert('Code postal erroné, merci de modifier le code postal dans votre adresse de livraison.');
118
119        // init with original zipcode
120        cust_address = defaultPostCode + ", France";
121        $('#relais_postcode').val(defaultPostCode);
122        initRelaisMap(cust_address, defaultPostCode);
123
124        return;
125    }
126
127    if (data.hasOwnProperty("listePointRelais") && data.listePointRelais) {
128        var listePointsRelais = data.listePointRelais;
129
130        let associateRelaisId = listePointsRelais[0].identifiant;
131        if (listePointsRelais.length !== undefined) {
132            for (var i = 0; i < listePointsRelais.length; i++) {
133                // COMPAT WITH OLD RECHERCHEBT
134                var id = listePointsRelais[i].identifiant;
135                var nom = listePointsRelais[i].nom;
136                var adresse = listePointsRelais[i].adresse1;
137                var postalCode = listePointsRelais[i].codePostal;
138                var localite = listePointsRelais[i].localite;
139
140                // Create marker
141                createRelaisMarker(listePointsRelais[i]);
142                chronodata[id] = listePointsRelais[i];
143
144                // Build corresponding "relais" input
145                htmlForTxtSection += '<div class="checkbox"><label><input type="radio" name="chronorelaisSelect" id="bt' + id + '" value="' + id + '"';
146                if (i === 0 && (data['lastPR'] === '' || data['lastPR'] === false) || data['lastPR'] === id) {
147                    htmlForTxtSection += " checked";
148                    associateRelaisId = id;
149                }
150                htmlForTxtSection += '/> ' + nom + ' - ' + adresse + ' - ' + postalCode + ' ' + localite + '</label></div>';
151            }
152            associateRelais(associateRelaisId);
153        } else {
154            // COMPAT WITH OLD RECHERCHEBT
155            var id = listePointsRelais.identifiant;
156            var nom = listePointsRelais.nom;
157            var adresse = listePointsRelais.adresse1;
158            var postalCode = listePointsRelais.codePostal;
159            var localite = listePointsRelais.localite;
160
161            // Create marker
162            createRelaisMarker(listePointsRelais);
163            chronodata[id] = listePointsRelais;
164
165            // Build corresponding "relais" input
166            htmlForTxtSection += '<div class="checkbox"><label><input type="radio" name="chronorelaisSelect" id="bt' + id + '" value="' + id + '"';
167            htmlForTxtSection += " checked";
168            htmlForTxtSection += '/> ' + nom + ' - ' + adresse + ' - ' + postalCode + ' ' + localite + '</label></div>';
169            associateRelais(listePointsRelais.identifiant);
170        }
171
172        // Add all relais to list
173        $('#chronorelais_container #relais_txt').html(htmlForTxtSection);
174
175        // Listener for BT select in radio list
176        $('body').on('change', 'input[name="chronorelaisSelect"]', function () {
177            var relaisId = $('input[name="chronorelaisSelect"]:checked').val();
178            associateRelais(relaisId);
179            openMarker(relaisId);
180        });
181
182        // Open closest marker
183        openMarker($('input[name="chronorelaisSelect"]:checked').val());
184        relais_map.fitBounds(marker_group.getBounds(), {paddingTopLeft: [0, 350]});
185    }
186}
187
188/**
189 * Open marker corresponding to given "relais" ID
190 *
191 * @param relaisId
192 */
193function openMarker(relaisId) {
194    if (typeof map_markers[relaisId] !== 'undefined') {
195        map_markers[relaisId].openPopup();
196    }
197}
198
199/**
200 * Initialize all markers
201 *
202 * @param address
203 * @param cp
204 * @param city
205 * @param country
206 */
207function initRelaisMarkers(address, cp, city, country) {
208    let currentCarrier = $('input.delivery_option_radio:checked').val();
209    if (city === null) {
210        $.ajax({
211            url: path + '/async/getPointRelais2.php?city=unknown&codePostal=' + cp + '&country=' + country + '&carrier=' + currentCarrier + '&cartID=' + cartID,
212            success: createAllPointRelais
213        });
214    } else {
215        $.ajax({
216            url: path + '/async/getPointRelais2.php?codePostal=' + cp + '&address=' + encodeURIComponent(address)
217                + '&country=' + country + '&city=' + city + '&carrier=' + currentCarrier + '&cartID=' + cartID,
218            success: createAllPointRelais
219        });
220    }
221}
222
223/**
224 * Create Leaflet Marker for given "relais"
225 *
226 * @param relais
227 */
228function createRelaisMarker(relais) {
229    var relaisIcon = L.icon({
230        iconUrl: path + '/views/img/postal.png',
231        iconSize: [45, 30]
232    });
233
234    var marker = L.marker([relais.coordGeolocalisationLatitude, relais.coordGeolocalisationLongitude], {icon: relaisIcon});
235
236    marker.on('click', function (e) {
237        $("#bt" + relais.identifiant).prop("checked", true);
238    });
239
240    map_markers[relais.identifiant] = marker;
241    marker.addTo(marker_group).bindPopup(buildMarkerPopup(relais));
242}
243
244/**
245 * Build HTML Marker popup for given "relais"
246 *
247 * @param relais
248 * @returns {string}
249 */
250function buildMarkerPopup(relais) {
251    var popup = '<div class="pointRelais"><h4>'
252        + relais.nom + '</h4><p>' + relais.adresse1 + '<br/ >' + relais.codePostal
253        + ' ' + relais.localite + '</p><h5>' + trad_horaire_ouverture + '</h5><table><tbody>';
254
255    for (var i = 0; i < relais.listeHoraireOuverture.length; i++) {
256        var day = relais.listeHoraireOuverture[i];
257        if (day.horairesAsString !== null) {
258            popup += '<tr class="first_item item"><td>' + capitalize(days[day.jour - 1]) + '</td><td>'
259                + day.horairesAsString + '</td></tr>';
260        }
261    }
262
263    popup += '</tbody></table>'
264        + '<p><input type="hidden" name="btID" value="' + relais.identifiant
265        + '"/><a class="button_large btselect" href="javascript:;" class="pull-right">' + trad_selectionner + ' »</a></p>'
266        + '</div>';
267
268    return popup;
269}
270
271// Triggered on BT select from popup
272function btSelect() {
273    var btID = $(this).parent().children('input').val();
274    var mObj = $('#relais_txt input[value=' + btID + ']');
275    mObj.click();
276
277    associateRelais(btID);
278
279    $("html, body").animate({scrollTop: $('#relais_txt_cont').offset().top}, 500);
280}
281
282function cleanContainers() {
283    var dummyContainer = $('#chronorelais_dummy_container');
284
285    // move in DOM to prevent compatibility issues with Common Services' modules
286    if ($("#chronorelais_container").length > 0) {
287        dummyContainer.remove();
288    } else {
289        dummyContainer.attr('id', 'chronorelais_container');
290    }
291
292    let checkedDeliveryOption = $("input[name*='delivery_option[']:checked");
293    if (checkedDeliveryOption.length === 0 || typeof checkedDeliveryOption === 'undefined') {
294        return;
295    }
296
297    let checkedCarrier = checkedDeliveryOption.val().substring(0, checkedDeliveryOption.val().indexOf(','));
298    if (checkedCarrier === CHRONORELAIS_AMBIENT_ID || checkedCarrier === CHRONORELAIS_ID || checkedCarrier === RELAISEUROPE_ID ||
299        checkedCarrier === RELAISDOM_ID || checkedCarrier === TOSHOPDIRECT_ID || checkedCarrier === TOSHOPDIRECT_EUROPE_ID) {
300        let container = $("[id^=delivery_option]:checked").parents('.delivery_option').children('div');
301        if (container.length === 0) {
302            $('#chronorelais_container').detach().insertAfter($('#extra_carrier'));
303        } else {
304            $('#chronorelais_container').detach().appendTo(container);
305        }
306    }
307}
308
309$(function () {
310    // Return if variable are undefined
311    if (typeof CHRONORELAIS_AMBIENT_ID === 'undefined' && typeof CHRONORELAIS_ID === 'undefined' &&
312        typeof RELAISEUROPE_ID === 'undefined' && typeof RELAISDOM_ID === 'undefined' &&
313        typeof TOSHOPDIRECT_ID === 'undefined' && typeof TOSHOPDIRECT_EUROPE_ID === 'undefined') {
314        return false;
315    }
316
317    var body = $("body");
318
319    // Clean container on load
320    cleanContainers();
321    toggleRelaisMap($("#cust_address_clean").val(), $("#cust_codepostal").val(), $("#cust_city").val());
322
323    // Listener for selection of the ChronoRelais carrier radio button
324    body.on('click', '.delivery_options span.custom-radio > input[type=radio], input[name*="delivery_option"]', function (e) {
325        cleanContainers();
326        toggleRelaisMap($("#cust_address_clean").val(), $("#cust_codepostal").val(), $("#cust_city").val(), e);
327
328        var value = parseInt($(this).val());
329        if (value === parseInt(CHRONORELAIS_AMBIENT_ID) || value === parseInt(CHRONORELAIS_ID) ||
330            value === parseInt(RELAISEUROPE_ID) || value === parseInt(RELAISDOM_ID) ||
331            value === parseInt(TOSHOPDIRECT_ID) || value === parseInt(TOSHOPDIRECT_EUROPE_ID)) {
332            if ($('#chronorelais_container').length) {
333                $('html, body').animate({
334                    scrollTop: $('#chronorelais_container').offset().top
335                }, 500);
336            }
337        }
338    });
339
340    // Listener for postcode change
341    body.on('click', '#change_postcode', postcodeChangeEvent);
342
343    body.on('keypress keydown keyup', '#relais_postcode', function (e) {
344        if (e.which === 13) {
345            e.preventDefault();
346            e.stopPropagation();
347            postcodeChangeEvent();
348            return false;
349        }
350    });
351
352    // Listener for BT select in popup
353    body.on("click", ".btselect", function (e) {
354        btSelect.call(e.target, e);
355    });
356
357    // Listener for cart navigation to next step
358    body.on('click', 'input[name=processCarrier]', function () {
359        if ($('input[name=id_carrier]:checked').val() == carrierID && !$("input[name=chronorelaisSelect]:checked").val()) {
360            alert(errormessage);
361            $.scrollTo($('#relais_txt_cont'), 800);
362            return false;
363        }
364    });
365});

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.