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: '© <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.