PageSourceSearch

https://www.forstpraxis.de/sites/forstpraxis.de/modules/custom/for…/assets/bundle_newsletter_block.js?tlk1bm

js forstpraxis.de collected 2026-10-02 07:44:00 UTC 8,361 bytes, 210 lines download raw bytes

1document.addEventListener('DOMContentLoaded', function () {
2  var getNLFromUri = new URLSearchParams(window.location.search);
3
4  if (getNLFromUri.has('nl')) {
5    var preselectedNl = document.getElementById(getNLFromUri.get('nl'));
6    if (preselectedNl) {
7      preselectedNl.checked = true;
8      var preselectedForm = preselectedNl.closest('.bundle_newsletter_form');
9      setTimeout(function () {
10        if (preselectedForm) {
11          preselectedForm.scrollIntoView({ block: 'start', behavior: 'smooth' });
12        }
13      }, 250);
14    }
15  }
16
17  document.querySelectorAll('.jump-to-nl').forEach(function (btn) {
18    btn.addEventListener('click', function (btnClickEv) {
19      btnClickEv.preventDefault();
20      var targetNlInput = document.getElementById(btn.dataset.nl);
21      if (targetNlInput) {
22        targetNlInput.checked = true;
23      }
24      var targetNlForm = targetNlInput ? targetNlInput.closest('.bundle_newsletter_form') : null;
25
26      setTimeout(function () {
27        if (targetNlForm) {
28          targetNlForm.scrollIntoView({ block: 'start', behavior: 'smooth' });
29        }
30      }, 250);
31    });
32  });
33
34  var bundleNewsletter = document.querySelectorAll('.bundle-newsletter');
35
36  bundleNewsletter.forEach(function (newsletter) {
37    var nlForm = newsletter.querySelector('.bundle_newsletter_form');
38    var werbeerlaubnisForm = newsletter.querySelector('.werbeerlaubnis-form');
39    var advancedDataField = newsletter.querySelector('[name="nl_info"]');
40
41    if (!nlForm) {
42      return;
43    }
44
45    if (advancedDataField && werbeerlaubnisForm) {
46      advancedDataField.addEventListener('change', function () {
47        werbeerlaubnisForm.style.display = advancedDataField.checked ? '' : 'none';
48        if (advancedDataField.checked) {
49          werbeerlaubnisForm.classList.add('grid');
50        } else {
51          werbeerlaubnisForm.classList.remove('grid');
52        }
53        werbeerlaubnisForm.querySelectorAll('input, select').forEach(function (input) {
54          input.disabled = !advancedDataField.checked;
55        });
56        newsletter.classList.toggle('nl-bg-open', advancedDataField.checked);
57      });
58
59      werbeerlaubnisForm.querySelectorAll('input, select').forEach(function (input) {
60        input.disabled = true;
61      });
62    }
63
64    var confirmAddressBtn = newsletter.querySelector('#confirmAddress');
65    if (confirmAddressBtn) {
66      confirmAddressBtn.addEventListener('click', function () {
67        nlForm.classList.add('was-validated');
68      });
69    }
70
71    newsletter.querySelectorAll('[name="newsletter_type"]').forEach(function (chk) {
72      chk.addEventListener('change', function () {
73        chk.setCustomValidity('');
74      });
75    });
76
77    nlForm.addEventListener('submit', function (e) {
78      e.preventDefault();
79
80      var form = e.target;
81      var checkedNlTypes = form.querySelectorAll('[name="newsletter_type"]:checked, input[type="hidden"][name="newsletter_type"]');
82
83      if (checkedNlTypes.length === 0) {
84        var newsletterRequiredField = form.querySelector('[name="newsletter_type"]');
85        if (newsletterRequiredField) {
86          newsletterRequiredField.setCustomValidity('Bitte wählen Sie mindestens einen Newsletter');
87        }
88        form.reportValidity();
89        return;
90      }
91
92      if (window.datafactory) {
93        window.datafactory.validate().then(function (result) {
94          if (advancedDataField && advancedDataField.checked && !result) {
95            var addressModal = form.querySelector('.datafactory-modal');
96            if (!addressModal) {
97              sendFormForCheckedNewsletters(checkedNlTypes, form);
98              return;
99            }
100
101            addressModal.innerHTML = String.raw`
102              <div class="datafactory-modal-content">
103                <div class="card-header mb-4">
104                  <div class="h2 mb-1" id="addressModalLabel">Adresse überprüfen</div>
105                  <p>Die eingegebene Adresse ist falsch. Möchten Sie fortfahren oder die Adresse anpassen?</p>
106                </div>
107                <div class="modal-flex-newsletter">
108                  <button type="button" class="nlformsubmitbtn btn btn-primary">Adresse bestätigen</button>
109                  <button type="button" class="nleditaddress btn btn-secondary" data-dismiss="modal">Adresse anpassen</button>
110                </div>
111              </div>`;
112
113            addressModal.querySelector('.nlformsubmitbtn').addEventListener('click', function () {
114              sendFormForCheckedNewsletters(checkedNlTypes, form);
115              addressModal.classList.remove('datafactory-show-modal');
116              addressModal.innerHTML = '';
117            });
118
119            addressModal.querySelector('.nleditaddress').addEventListener('click', function () {
120              addressModal.classList.remove('datafactory-show-modal');
121              addressModal.innerHTML = '';
122            });
123
124            addressModal.classList.add('datafactory-show-modal');
125          } else {
126            sendFormForCheckedNewsletters(checkedNlTypes, form);
127          }
128        });
129      } else {
130        sendFormForCheckedNewsletters(checkedNlTypes, form);
131      }
132
133      window.dataLayer = window.dataLayer || [];
134      window.dataLayer.push({
135        'event': 'newsletter',
136        'formLocation': location.href,
137      });
138    });
139
140    function sendFormForCheckedNewsletters(checkedNlTypes, form) {
141      checkedNlTypes.forEach(function (chk) {
142        sendForm(chk.value, form);
143      });
144
145      nlForm.innerHTML = String.raw`
146        <div>
147          <h2 class="h1 mt-2 text-white">Fast geschafft!</h2>
148          <p class="text-white font-bold">Bitte bestätigen Sie im letzten Schritt Ihre Anmeldung:</p>
149          <p class="text-white">Klicken Sie dazu bitte auf den Link in der E-Mail, die wir Ihnen soeben zugesendet haben. <br> Schauen Sie auch in Ihrem Spamordner nach.</p>
150          <p class="mt-4 text-white">Viel Spaß beim Lesen wünscht <br>Ihr Forstpraxis-Team</p>
151          <div class="w-full text-center">
152            <a href="/" class="btn btn-primary mt-4 w-full mx-auto cursor-pointer">Zur Startseite</a>
153          </div>
154        </div>`;
155
156      setTimeout(function () {
157        nlForm.scrollIntoView({ block: 'start', behavior: 'smooth' });
158      }, 250);
159
160      document.querySelectorAll('.jump-to-nl').forEach(function (el) {
161        el.style.display = 'none';
162      });
163    }
164
165    function sendForm(nl, form) {
166      var formData = new FormData();
167      var accountDetails = {
168        '2': { accountId: '31233', accountCode: 'wN3d9', optinsetupId: '2', optinsetupCode: 'gkM6B' },
169        '10': { accountId: '31233', accountCode: 'wN3d9', optinsetupId: '10', optinsetupCode: 'gkM6B' },
170      };
171      var details = accountDetails[nl] || accountDetails['2'];
172
173      formData.set('account_id', details.accountId);
174      formData.set('account_code', details.accountCode);
175      formData.set('optinsetup_id', details.optinsetupId);
176      formData.set('optinsetup_code', details.optinsetupCode);
177      formData.set('ic', 272);
178      formData.set('fields[1]', form.querySelector('[name="email"]').value);
179      formData.set('optinsetups[0][]', nl);
180
181      if (advancedDataField && advancedDataField.checked) {
182        formData.set('fields[22][]', 'on');
183        formData.set('fields[2]', form.querySelector('[name="nl-sal"]').value);
184        formData.set('fields[3]', form.querySelector('[name="firstname"]').value);
185        formData.set('fields[4]', form.querySelector('[name="lastname"]').value);
186        formData.set('fields[7]', form.querySelector('[name="title"]').value);
187        formData.set('fields[8]', form.querySelector('[name="street-address"]').value);
188        formData.set('fields[10]', form.querySelector('[name="street-number"]').value);
189        formData.set('fields[12]', form.querySelector('[name="plz"]').value);
190        formData.set('fields[14]', form.querySelector('[name="city"]').value);
191        formData.set('fields[16]', form.querySelector('[name="country"]').value);
192        formData.set('fields[20]', form.querySelector('[name="tel"]').value);
193      }
194
195      fetch('https://newsletter.dlv.de/optin/optin/execute', {
196        method: 'POST',
197        body: formData,
198        mode: 'no-cors',
199      });
200    }
201  });
202});
203
204function handleNewsletterSubscription() {
205  return true;
206}
207
208function handleNewsletterSubscriptionException() {
209  return true;
210}

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.