PageSourceSearch

https://www.gironde-habitat.fr/wp-content/themes/gironde-habitat/assets/js/tabselected.js?ver=7.0.2

js gironde-habitat.fr collected 2026-10-01 13:13:58 UTC 20,292 bytes, 587 lines download raw bytes

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.