1"use strict"; 2 3var _createClass = (function () { 4 function defineProperties(target, props) { 5 for (var i = 0; i < props.length; i++) { 6 var descriptor = props[i]; 7 descriptor.enumerable = descriptor.enumerable || false; 8 descriptor.configurable = true; 9 if ("value" in descriptor) descriptor.writable = true; 10 Object.defineProperty(target, descriptor.key, descriptor); 11 } 12 } 13 return function (Constructor, protoProps, staticProps) { 14 if (protoProps) defineProperties(Constructor.prototype, protoProps); 15 if (staticProps) defineProperties(Constructor, staticProps); 16 return Constructor; 17 }; 18})(); 19 20function _classCallCheck(instance, Constructor) { 21 if (!(instance instanceof Constructor)) { 22 throw new TypeError("Cannot call a class as a function"); 23 } 24} 25 26// import { debug } from "util"; 27 28//Remove Polyfill 29(function (arr) { 30 arr.forEach(function (item) { 31 if (item.hasOwnProperty("remove")) { 32 return; 33 } 34 Object.defineProperty(item, "remove", { 35 configurable: true, 36 enumerable: true, 37 writable: true, 38 value: function remove() { 39 if (this.parentNode !== null) this.parentNode.removeChild(this); 40 }, 41 }); 42 }); 43})([Element.prototype, CharacterData.prototype, DocumentType.prototype]); 44 45var popUpFunction = function popUpFunction() { 46 (function ($) { 47 $(".popup_box, .popup_cta").magnificPopup({ 48 type: "inline", 49 preloader: false, 50 focus: "#username", 51 modal: true, 52 }); 53 $(document).on("click", ".popup-modal-dismiss", function (e) { 54 e.preventDefault(); 55 $.magnificPopup.close(); 56 }); 57 })(jQuery); 58}; 59 60(function () { 61 "use strict"; 62 63 var Tab = (function () { 64 function Tab(container) { 65 _classCallCheck(this, Tab); 66 67 (this.container = container), 68 (this.tabList = container.querySelector(".tabselected")); 69 (this.tabListInner = container.querySelector(".tabselected__inner")), 70 (this.tabListItems = [].slice.call( 71 container.querySelectorAll(".tabselected__item") 72 )); 73 this.trigger = container.querySelector(".tabselected__trigger"); 74 this.contentItems = container.querySelectorAll( 75 ".tabselected__content__item" 76 ); 77 this.content = container.querySelector(".tabselected__content"); 78 this.handleClick = this.handleClick.bind(this); 79 } 80 81 _createClass(Tab, [ 82 { 83 key: "registerEvents", 84 value: function registerEvents() { 85 this.container.addEventListener("click", this.handleClick); 86 }, 87 }, 88 { 89 key: "handleClick", 90 value: function handleClick(e) { 91 var el = e.target; 92 93 if (el.classList.contains("tabselected__trigger")) 94 return this.toggleSelectArea(); 95 96 if (el.classList.contains("tabselected__item")) 97 return this.handleSelect(el); 98 99 if (el.classList.contains("tabselected__tablist__item")) 100 return this.handleCheckbox(el); 101 102 if (el.classList.contains("tabselect__submit__btn")) { 103 e.preventDefault(); 104 return this.handleSubmit(el); 105 } 106 }, 107 }, 108 { 109 key: "handleCheckbox", 110 value: function handleCheckbox(el) { 111 var data = el.getAttribute("data-file"), 112 url = "/wp-content/themes/gironde-habitat/form/" + data + ".php", 113 target = document.querySelector(".tabselected__tabcontent"), 114 current = document.querySelector( 115 ".tabselected__tablist__item.trigger" 116 ); 117 118 if (el === current) return; 119 120 var httpRequest = new XMLHttpRequest(); 121 122 httpRequest.open("GET", url, true); 123 httpRequest.setRequestHeader( 124 "Content-Type", 125 "application/x-www-form-urlencoded" 126 ); 127 httpRequest.send(); 128 129 httpRequest.onreadystatechange = function () { 130 if (httpRequest.readyState == XMLHttpRequest.DONE) { 131 if (httpRequest.status == 200) { 132 var div = document.createElement("div"); 133 div.innerHTML = httpRequest.responseText; 134 sessionStorage[url] = target.innerHTML = 135 div.querySelector(".my__content").innerHTML; 136 137 document 138 .querySelector(".tabselected__tablist__item.trigger") 139 .classList.remove("trigger"); 140 el.classList.add("trigger"); 141 142 return; 143 } else { 144 console.log("Something went wrong inside matrice"); 145 } 146 } 147 }; 148 149 // let xhr = new XMLHttpRequest() 150 // if (!xhr) return 151
152 // this.makeRequest(url, target) 153 // .then(() => { 154 // document.querySelector('.tabselected__tablist__item.trigger').classList.remove('trigger') 155 // el.classList.add('trigger') 156 // }) 157 // .catch((error) => { 158 // console.log('Checkbox : Something went wront inside the matrice : ', error) 159 // }) 160 }, 161 }, 162 { 163 key: "handleSelect", 164 value: function handleSelect(el) { 165 var data = el.getAttribute("data-file"), 166 url = 167 "https://www.gironde-habitat.fr/wp-content/themes/gironde-habitat/form/" + 168 data + 169 ".php", 170 target = document.querySelector(".tabselected__content"), 171 current = this.tabListInner.querySelector( 172 ".tabselected__item.trigger" 173 ); 174 175 if (current && el === current) return; 176 177 //TEST// 178 var httpRequest = new XMLHttpRequest(); 179 180 httpRequest.open("GET", url, true); 181 httpRequest.setRequestHeader( 182 "Content-Type", 183 "application/x-www-form-urlencoded" 184 ); 185 httpRequest.send(); 186 187 httpRequest.onreadystatechange = function () { 188 if (httpRequest.readyState == XMLHttpRequest.DONE) { 189 if (httpRequest.status == 200) { 190 var div = document.createElement("div"); 191 div.innerHTML = httpRequest.responseText; 192 sessionStorage[url] = target.innerHTML = 193 div.querySelector(".my__content").innerHTML; 194 195 if ( 196 document 197 .querySelector(".tabselected__inner") 198 .classList.contains("triggered") 199 ) { 200 document 201 .querySelector(".tabselected__inner") 202 .classList.remove("triggered"); 203 } 204 205 document.querySelector( 206 ".tabselected__trigger__baseline" 207 ).innerHTML = "<b>" + el.innerText + "</b>"; 208 209 if (current) { 210 current.classList.remove("trigger"); 211 } 212 213 // this.tabListInner.classList.remove('triggered') 214 // this.trigger.classList.remove('triggered') 215 // el.classList.add('trigger') 216 // this.trigger.querySelector('.tabselected__trigger__baseline').innerHTML = el.innerHTML 217 218 popUpFunction(); 219 return; 220 } else { 221 console.log("Something went wrong inside matrice"); 222 } 223 } 224 }; 225 //END TEST// 226 227 // let xhr = new XMLHttpRequest() 228 // if (!xhr) return 229 230 // this.makeRequest(url, target) 231 // .then(() => { 232 233 // if (current) 234 // current.classList.remove('trigger') 235 236 // this.tabListInner.classList.remove('triggered') 237 // this.trigger.classList.remove('triggered') 238 // el.classList.add('trigger') 239 // this.trigger.querySelector('.tabselected__trigger__baseline').innerHTML = el.innerHTML 240 // popUpFunction(); 241 // }) 242 // .catch((error) => { 243 // console.log('Select : Something went wrong inside matrice : ', error) 244 // }) 245 }, 246 }, 247 { 248 key: "makeRequest", 249 value: function makeRequest(url, target) { 250 var xhr = new XMLHttpRequest(); 251 if (!xhr) return; 252 253 return new Promise(function (resolve, reject) { 254 xhr.responseType = "document"; 255 xhr.onload = function () { 256 sessionStorage[url] = target.innerHTML = 257 xhr.response.querySelector(".my__content").innerHTML; 258 resolve(xhr); 259 }; 260 xhr.open("POST", url, true); 261 xhr.send(); 262 }); 263 }, 264 }, 265 { 266 key: "toggleSelectArea", 267 value: function toggleSelectArea() { 268 this.trigger.classList.toggle("triggered"); 269 this.tabListInner.classList.toggle("triggered"); 270 }, 271 }, 272 { 273 key: "selectItem", 274 value: function selectItem( 275 currentBtn, 276 currentContent, 277 contentItem, 278 el 279 ) { 280 currentContent.classList.remove("trigger"); 281 currentBtn.classList.remove("trigger"); 282 283 contentItem.classList.add("trigger"); 284 el.classList.add("trigger"); 285 }, 286 }, 287 { 288 key: "handleSubmit", 289 value: function handleSubmit(el) { 290 var form = document.querySelector("form.js__send__form"), 291 fields = form.querySelectorAll("input, textarea"), 292 tabSelect = document.querySelector(".tabselected"), 293 topic = document.querySelector( 294 ".tabselected__trigger__baseline" 295 ).innerHTML, 296 data = new FormData(form), 297 xhr = new XMLHttpRequest(); 298 299 if (!xhr) return; 300 301 if (topic == "<b>Votre demande concerne</b>") { 302 var pError = document.createElement("p"); 303 pError.innerText = "Veuillez renseigner l'objet de votre demande"; 304 pError.className = "field--alert alert-topic"; 305 tabSelect.appendChild(pError); 306 } else { 307 var alert = document.querySelector(".alert-topic"); 308 if (alert) { 309 alert.remove(); 310 } 311 } 312 313 this.checkField(fields); 314 315 if (document.querySelector(".field--alert")) { 316 return this.alertSubmit(); 317 } 318 319 var submitErrorMsg = document.querySelector(".submit__error"); 320 if (submitErrorMsg) submitErrorMsg.remove(); 321 322 xhr.onreadystatechange = function () { 323 if (xhr.readyState !== 4) return; 324 325 console.log("STATUS:", xhr.status); 326 console.log("RESPONSE:", xhr.responseText); 327 328 if (xhr.status >= 200 && xhr.status < 300) { 329 var submit = document.querySelector(".tabselect__submit__btn"), 330 _el = document.createElement("p"); 331 _el.className = "success__msg"; 332 _el.innerHTML = 333 "Merci pour votre message, nous allons traiter votre demande au plus vite."; 334 335 submit.parentElement.appendChild(_el); 336 submit.remove(); 337 //window.location.href = 338 // "https://www.gironde-habitat.fr/confirmation/?type=4"; 339 } else if (xhr.status === 422) { 340 // Un mot-clé interdit (RIB, IBAN...) a été détecté : le message 341 // n'a pas été envoyé. On affiche un message d'erreur sur le 342 // formulaire ET, si disponible, le pop-up d'avertissement. 343 var blockedMessage = ""; 344 try { 345 blockedMessage = (JSON.parse(xhr.responseText) || {}).message || ""; 346 } catch (parseError) { 347 blockedMessage = ""; 348 } 349 350 if (!blockedMessage) { 351 blockedMessage = 352 "Pour la sécurité de vos données, votre demande contient une information sensible et n'a pas été envoyée. Merci de modifier votre message ou de nous contacter par un autre moyen."; 353 } 354 355 var submitBtn = document.querySelector(".tabselect__submit__btn"); 356 if (submitBtn && submitBtn.parentElement) { 357 var previous = submitBtn.parentElement.querySelector( 358 ".submit__error--blacklist" 359 ); 360 if (previous) previous.remove(); 361 362 var errorEl = document.createElement("p"); 363 errorEl.className = "submit__error submit__error--blacklist field--alert"; 364 errorEl.setAttribute("role", "alert"); 365 errorEl.innerText = blockedMessage; 366 submitBtn.parentElement.appendChild(errorEl); 367 } 368 369 document.dispatchEvent( 370 new CustomEvent("gh-form-guard-block", { 371 detail: { message: blockedMessage }, 372 }) 373 ); 374 } else { 375 var _submit = document.querySelector(".tabselect__submit__btn"), 376 _el2 = document.createElement("p"); 377 _el2.className = "submit_error"; 378 _el2.innerHTML = 379 "Oups ! Excusez-nous mais une erreur interne est survenue. Veuillez réessayer un peu plus tard."; 380 console.log("Something went wrong in the upside down", error); 381 } 382 }; 383 384 xhr.open("POST", form.getAttribute("action"), true); 385 xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 386 xhr.send(data); 387 }, 388 }, 389 { 390 key: "alertSubmit", 391 value: function alertSubmit() { 392 var submit = document.querySelector(".tabselect__submit__btn"), 393 el = document.createElement("p"); 394 el.className = "submit__error"; 395 el.innerHTML = "Oups ! Un ou plusieurs champs sont incorrects"; 396 submit.parentElement.appendChild(el); 397 }, 398 }, 399 { 400 key: "checkField", 401 value: function checkField(fields) { 402 for (var i = 0; i < fields.length; i++) { 403 var field = fields[i]; 404 405 if (field.type === "file") { 406 var fileAlert = document.querySelector( 407 ".tabselected__field__file .field--alert" 408 ), 409 fileField = document.querySelector(".tabselected__field__file"), 410 fileTypes = [ 411 "image/jpeg", 412 "image/pjpeg", 413 "image/png", 414 "application/pdf", 415 "application/msword", 416 "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 417 ], 418 el = document.createElement("p"); 419 420 el.className = "field--alert"; 421 422 if (fileAlert != undefined) fileAlert.remove(); 423 424 if (field.files[0] != undefined) { 425 if (field.files[0].size >= 2000000) { 426 el.innerText = 427 "Le fichier est trop volumineux. (il doit être inférieur à 2Mb)"; 428 fileField.appendChild(el); 429 } 430 431 if (!fileTypes.includes(field.files[0].type)) { 432 el.innerText = 433 "Le format du fichier est incorrect. (doc, docx, pdf, jpg, png)"; 434 fileField.appendChild(el); 435 } 436 } 437 continue; 438 } 439 440 if (field.type === "radio") continue; 441 442 if ( 443 field.type === "checkbox" && 444 field.getAttribute("name") === "rgpd" && 445 !field.checked 446 ) { 447 this.handleAlert(field, true, "Merci d'accepter les conditions."); 448 } 449 450 if (field.getAttribute("name") === "quote") { 451 if (!field.value) continue; 452 453 var submit = document.querySelector(".tabselect__submit__btn"), 454 _el3 = document.createElement("p"); 455 _el3.className = "field--alert"; 456 _el3.innerHTML = 457 "Votre message est detecté comme étant celui d'un bot, et donc impossible à envoyer, merci de réessayer plus tard."; 458 submit.parentElement.appendChild(_el3); 459 } 460 461 if (field.type === "email") { 462 this.handleAlert( 463 field, 464 true, 465 "Le format est incorrect. Ex: [email protected]" 466 ); 467 continue; 468 } 469 470 if (field.type === "tel") { 471 this.handleAlert( 472 field, 473 true, 474 "Le format est incorrect. Ex: 0559515253 ou +33651525152" 475 ); 476 } 477 this.handleAlert(field); 478 } 479 }, 480 }, 481 { 482 key: "handleAlert", 483 value: function handleAlert(field) { 484 var checkFormat = 485 arguments.length > 1 && arguments[1] !== undefined 486 ? arguments[1] 487 : false;
488 var formatStr = 489 arguments.length > 2 && arguments[2] !== undefined 490 ? arguments[2] 491 : false; 492 493 if (field.type === "checkbox") { 494 if (field.checked) { 495 if (field.parentElement.classList.contains("field--empty")) { 496 field.parentElement.classList.remove("field--empty"); 497 field.parentElement.querySelector(".field--alert").remove(); 498 } 499 } else { 500 if (field.parentElement.classList.contains("field--empty")) 501 return; 502 503 var el = document.createElement("p"); 504 el.className = "field--alert"; 505 el.innerHTML = "Veuillez accepter les conditions."; 506 field.classList.add("field--empty"); 507 508 if (!field.parentElement.classList.contains("field--empty")) 509 field.parentElement.classList.add("field--empty"); 510 511 return field.parentElement.appendChild(el); 512 } 513 return; 514 } 515 516 if (!field.value && !field.classList.contains("field--empty")) { 517 var _el4 = document.createElement("p"); 518 _el4.className = "field--alert"; 519 _el4.innerHTML = "Ce champ est obligatoire"; 520 field.classList.add("field--empty"); 521 522 if (field.classList.contains("field--error")) { 523 field.classList.remove("field--error"); 524 field.parentElement.querySelector(".field--alert").remove(); 525 } 526 527 return field.parentElement.appendChild(_el4); 528 } 529 530 if (field.value && field.classList.contains("field--empty")) { 531 field.classList.remove("field--empty"); 532 field.parentElement.querySelector(".field--alert").remove(); 533 } 534 535 if (!checkFormat) return; 536 537 var regex = void 0; 538 539 switch (field.type) { 540 case "email": 541 regex = /[^\s@]+@[^\s@]+\.[^\s@]+/; 542 break; 543 case "tel": 544 regex = /^((\+)33|0)[1-9](\d{2}){4}$/; 545 break; 546 default: 547 break; 548 } 549 550 if ( 551 regex.test(field.value) && 552 field.classList.contains("field--error") 553 ) { 554 field.classList.remove("field--error"); 555 return field.parentElement.querySelector(".field--alert").remove(); 556 } 557 558 if ( 559 field.value && 560 !regex.test(field.value) && 561 !field.classList.contains("field--error") 562 ) { 563 field.classList.add("field--error"); 564 var _el5 = document.createElement("p"); 565 _el5.className = "field--alert"; 566 if (formatStr) _el5.innerHTML = formatStr; 567 else { 568 _el5.innerHTML = "Le format de ce champ est incorrect"; 569 } 570 return field.parentElement.appendChild(_el5); 571 } 572 }, 573 }, 574 ]); 575 576 return Tab; 577 })(); 578 579 window.onload = function () { 580 var tabSelect = document.querySelector(".tabselected__container"); 581 if (tabSelect) { 582 var tabInit = new Tab(tabSelect); 583 tabInit.registerEvents(); 584 } 585 }; 586})(); 587//# sourceMappingURL=tabselected.js.map
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.