Further training courses: Sustainability and climate protection - vdma.eu
An error occurred while processing the template.
Syntax error in template "20101#20128#18566172" in line 672, column 31: Encountered "...", but was expecting one of these patterns: <STRING_LITERAL> <RAW_STRING> "false" "true" <INTEGER> <DECIMAL> "." "+" "-" "!" "[" "(" "{" <ID>
1https://www.vdma.eu/lbs_recherchemodul_nl
2</iframe>
3<#noparse>
4<!-- ===== Newsletter-Recherche – Komplettmodul (FTL-sicher) ===== -->
5<style>
6/* Barrierefreiheit */
7.sr-only { position:absolute; left:-9999px; top:auto; width:1px; height:1px; overflow:hidden; }
8
9/* Design-Variablen */
10.nl-module {
11 --vdma-blue:#222F5C;
12 --chip-bg:#ECEAE5;
13 --chip-bg-active:#d8d6d0;
14 --border:#D8D6D0;
15 --text:#222;
16 --muted:#555;
17}
18
19/* Suchleiste mit Lupen-Icon */
20.nl-searchbar {
21 position: relative;
22 margin-bottom: 1.5rem;
23}
24
25.nl-input {
26 width: 100%;
27 padding: 0.85rem 2.5rem 0.85rem 2.5rem;
28 border: 1px solid var(--border);
29 border-radius: 8px;
30 font-size: 1rem;
31 outline: none;
32 background: #fff;
33 background-image: url('https://cdn.jsdelivr.net/npm/[email protected]/icons/search.svg');
34 background-repeat: no-repeat;
35 background-position: 0.75rem center;
36 background-size: 1rem;
37}
38
39.nl-input:focus {
40 border-color: var(--vdma-blue);
41 box-shadow: 0 0 0 3px rgba(34,47,92,.15);
42}
43
44.nl-clear {
45 position: absolute;
46 right: .25rem;
47 top: 50%;
48 transform: translateY(-50%);
49 border: 0;
50 background: transparent;
51 width: 2rem;
52 height: 2rem;
53 font-size: 1.25rem;
54 color: var(--muted);
55 cursor: pointer;
56}
57
58/* Vorschläge (Typeahead) */
59.nl-suggestions {
60 display: none;
61 position: absolute;
62 left: 0;
63 right: 0;
64 top: calc(100% + 4px);
65 background: #fff;
66 border: 1px solid var(--border);
67 border-radius: 8px;
68 max-height: 320px;
69 overflow: auto;
70 z-index: 10;
71 box-shadow: 0 8px 20px rgba(0,0,0,.08);
72}
73.nl-suggestions.show { display: block; }
74.nl-suggestions .group { padding: .5rem .5rem 0; }
75.nl-suggestions .group h5 {
76 margin: .25rem .5rem;
77 font-size: .8rem;
78 color: var(--muted);
79 text-transform: uppercase;
80 letter-spacing: .02em;
81}
82.nl-suggestions button {
83 width: 100%;
84 text-align: left;
85 background: #fff;
86 border: 0;
87 padding: .5rem .75rem;
88 cursor: pointer;
89 font-size: .95rem;
90}
91.nl-suggestions button[aria-selected="true"],
92.nl-suggestions button:hover {
93 background: #f5f5f5;
94}
95
96/* Horizontale Filterleiste */
97.nl-filters {
98 display: flex;
99 flex-wrap: wrap;
100 gap: 2rem;
101 margin-bottom: 1rem;
102 border-bottom: 1px solid var(--border);
103 padding-bottom: 1rem;
104}
105
106.nl-facet {
107 flex: 1 1 200px;
108}
109
110.nl-facet h4 {
111 margin-bottom: 0.5rem;
112 font-size: 0.95rem;
113 color: var(--vdma-blue);
114}
115
116.nl-chips {
117 display: flex;
118 flex-wrap: wrap;
119 gap: 0.5rem;
120}
121
122.nl-chip {
123 appearance: none;
124 border: 1px solid var(--border);
125 border-radius: 999px;
126 padding: 0.4rem 0.75rem;
127 background: var(--chip-bg);
128 cursor: pointer;
129 font-size: 0.92rem;
130 color: var(--text);
131}
132
133.nl-chip[aria-pressed="true"] {
134 background: var(--chip-bg-active);
135 border-color: var(--vdma-blue);
136 color: var(--vdma-blue);
137}
138</style>
139
140<section id="nl-module" class="nl-module" aria-label="Newsletter-Suche">
141 <!-- Suchleiste -->
142 <div class="nl-searchbar" role="search">
143 <label class="sr-only" for="nl-q">Suche</label>
144 <input id="nl-q" class="nl-input" type="search"
145 placeholder="Suche nach Thema, Branche, Region …"
146 autocomplete="off" aria-autocomplete="list" aria-expanded="false" aria-controls="nl-suggestions" />
147 <button type="button" class="nl-clear" aria-label="Suche löschen">×</button>
148 <div id="nl-suggestions" class="nl-suggestions" role="listbox" aria-label="Vorschläge"></div>
149 </div>
150
151 <!-- Filter / Facetten -->
152 <details class="nl-filters" open>
153 <summary>Filter ein-/ausklappen</summary>
154
155 <div class="nl-facet" data-facet="topics">
156 <h4>Themen</h4>
157 <div id="facet-topics" class="nl-chips" aria-label="Themen"></div>
158 </div>
159
160 <div class="nl-facet" data-facet="branches">
161 <h4>Branchen</h4>
162 <div id="facet-branches" class="nl-chips" aria-label="Branchen"></div>
163 </div>
164
165 <div class="nl-facet" data-facet="regions">
166 <h4>Regionen</h4>
167 <div id="facet-regions" class="nl-chips" aria-label="Regionen"></div>
168 </div>
169
170 <div class="nl-facet" data-facet="lang">
171 <h4>Sprache</h4>
172 <div id="facet-lang" class="nl-chips" aria-label="Sprache"></div>
173 </div>
174
175 <div class="nl-activefilters" aria-live="polite"></div>
176 <div class="nl-controls">
177 <button type="button" class="nl-reset">Filter zurücksetzen</button>
178 </div>
179 </details>
180</section>
181</#noparse>
182
183 <!-- Treffer-Infos -->
184 <div class="nl-meta" aria-live="polite">
185 <strong id="nl-count">0</strong> Treffer
186 </div>
187
188 <!-- Keine-Treffer-Hinweis -->
189 <p id="nl-empty" class="nl-empty" aria-live="polite">Keine Treffer. Bitte Suchbegriff oder Filter anpassen.</p>
190
191 <!-- ===== Ergebnisliste: Einträge als Cards ===== -->
192 <div id="nl-results" class="nl-results">
193 <!-- === BRANCHEN (Auszug) === -->
194 <article class="nl-card"
195 data-branches="Antriebstechnik"
196 data-regions=""
197 data-lang="DE"
198 data-topics="Technische Standards & Normung|Forschungsergebnisse & Marktanalysen|Branchenmessen & Fachveranstaltungen|Entwicklungen & Innovationen im Maschinenbau">
199 <h3 class="nl-title">Branchenblick – Antriebstechnik</h3>
200 <p class="nl-teaser">Aktuelles aus der Antriebstechnik und dem Maschinenbau.</p>
201 <ul class="nl-info">
202 <li><strong>Kontakt:</strong> Solveig Adler</li>
203 <li><strong>Frequenz:</strong> vierteljährlich</li>
204 <li><strong>Bereitstellung:</strong> Newsletter (mit Opt‑in)</li>
205 <li><strong>Sprache:</strong> DE</li>
206 </ul>
207 <aetzt abonnieren</a>
208 </article>
209
210 <article class="nl-card"
211 data-branches="Productronic"
212 data-regions=""
213 data-lang="DE"
214 data-topics="Technische Standards & Normung|Forschungsergebnisse & Marktanalysen|Branchenmessen & Fachveranstaltungen|Entwicklungen & Innovationen im Maschinenbau">
215 <h3 class="nl-title">Branchenblick – Productronic</h3>
216 <p class="nl-teaser">Aktuelles aus der Productronic und dem Maschinenbau.</p>
217 <ul class="nl-info">
218 <li><strong>Kontakt:</strong> Dr. Sandra Engel und Angela Bönicke</li>
219 <li><strong>Frequenz:</strong> ad‑hoc</li>
220 <li><strong>Bereitstellung:</strong> Newsletter (mit Opt‑in)</li>
221 <li><strong>Sprache:</strong> DE</li>
222 </ul>
223 <a classbonnieren</a>
224 </article>
225
226 <article class="nl-card"
227 data-branches="Fluidtechnik"
228 data-regions=""
229 data-lang="DE"
230 data-topics="Technische Standards & Normung|Forschungsergebnisse & Marktanalysen|Branchenmessen & Fachveranstaltungen|Entwicklungen & Innovationen im Maschinenbau">
231 <h3 class="nl-title">Branchenblick – Fluidtechnik</h3>
232 <p class="nl-teaser">Aktuelles aus der Fluidtechnik und dem Maschinenbau.</p>
233 <ul class="nl-info">
234 <li><strong>Kontakt:</strong> Ann‑Catrin Rehermann</li>
235 <li><strong>Frequenz:</strong> vierteljährlich</li>
236 <li><strong>Bereitstellung:</strong> Newsletter (mit Opt‑in)</li>
237 <li><strong>Sprache:</strong> DE</li>
238 </ul>
239 <a classbonnieren</a>
240 </article>
241
242 <article class="nl-card"
243 data-branches="Forum Glastechnik"
244 data-regions=""
245 data-lang="DE|EN"
246 data-topics="Arbeitskreise|Branchenmessen & Fachveranstaltungen|Leistungen aus dem VDMA">
247 <h3 class="nl-title">Branchenblick – Forum Glastechnik</h3>
248 <p class="nl-teaser">Aktuelles aus dem Forum Glastechnik.</p>
249 <ul class="nl-info">
250 <li><strong>Kontakt:</strong> Susanne Biernat</li>
251 <li><strong>Frequenz:</strong> monatlich</li>
252 <li><strong>Bereitstellung:</strong> Newsletter (mit Opt‑in)</li>
253 <li><strong>Sprache:</strong> DE/EN</li>
254 </ul>
255 <Jetzt abonnieren</a>
256 </article>
257
258 <article class="nl-card"
259 data-branches="HealthTech"
260 data-regions=""
261 data-lang="DE"
262 data-topics="Gesundheitstechnik|Branchennews|Veranstaltungen">
263 <h3 class="nl-title">AG HealthTech</h3>
264 <p class="nl-teaser">AG HealthTech.</p>
265 <ul class="nl-info">
266 <li><strong>Kontakt:</strong> Niklas Kuczaty</li>
267 <li><strong>Frequenz:</strong> zweimonatlich</li>
268 <li><strong>Sprache:</strong> DE</li>
269 </ul>
270 #Jetzt abonnieren</a>
271 </article>
272
273 <article class="nl-card"
274 data-branches="Materials Handling and Intralogistics"
275 data-regions=""
276 data-lang="DE|EN"
277 data-topics="Fachverbandsnews|Veranstaltungen|Mitglieder|Märkte">
278 <h3 class="nl-title">VDMA Materials Handling and Intralogistics</h3>
279 <p class="nl-teaser">News und Events für Mitgliedsunternehmen (DE/EN).</p>
280 <ul class="nl-info">
281 <li><strong>Kontakt:</strong> Juliane Kluge</li>
282 <li><strong>Frequenz:</strong> unregelmäßig</li>
283 <li><strong>Sprache:</strong> DE/EN</li>
284 </ul>
285 <aetzt abonnieren</a>
286 </article>
287
288 <article class="nl-card"
289 data-branches="Electronics, Solar and Battery Production"
290 data-regions=""
291 data-lang="DE"
292 data-topics="Technische Standards & Normung|Forschungsergebnisse & Marktanalysen|Branchenmessen & Fachveranstaltungen|Entwicklungen & Innovationen im Maschinenbau">
293 <h3 class="nl-title">Branchenblick – Electronics, Solar and Battery Production</h3>
294 <p class="nl-teaser">Aktuelles aus der ESBP und dem Maschinenbau.</p>
295 <ul class="nl-info">
296 <li><strong>Kontakt:</strong> Alexandra Janik‑Hannen</li>
297 <li><strong>Frequenz:</strong> ad‑hoc</li>
298 <li><strong>Bereitstellung:</strong> Newsletter (mit Opt‑in)</li>
299 <li><strong>Sprache:</strong> DE</li>
300 </ul>
301 #Jetzt abonnieren</a>
302 </article>
303
304 <article class="nl-card"
305 data-branches="Mining & Minerals"
306 data-regions=""
307 data-lang="DE|EN"
308 data-topics="Marktentwicklung & Konjunktur|Delegationsreisen & Aktivitäten|Normung & OPC UA|Messen, Veranstaltungen & Seminare">
309 <h3 class="nl-title">Branchenblick – Mining & Minerals</h3>
310 <p class="nl-teaser">Aktuelles aus Mining & Minerals und dem Maschinenbau.</p>
311 <ul class="nl-info">
312 <li><strong>Kontakt:</strong> Alexandra Landgraf</li>
313 <li><strong>Frequenz:</strong> monatlich</li>
314 <li><strong>Sprache:</strong> DE/EN</li>
315 </ul>
316 <a class="nlieren</a>
317 </article>
318
319 <article class="nl-card"
320 data-branches=""
321 data-regions="Afrika"
322 data-lang="DE"
323 data-topics="Marktentwicklung & Konjunktur|Nahrungsmittelverarbeitung|Afrika">
324 <h3 class="nl-title">Afrika Aktuell</h3>
325 <p class="nl-teaser">Konjunktur & Marktgeschehen in der nahrungsmittelverarbeitenden Industrie Afrikas.</p>
326 <ul class="nl-info">
327 <li><strong>Kontakt:</strong> VDMA Services</li>
328 <li><strong>Frequenz:</strong> keine Angabe</li>
329 <li><strong>Sprache:</strong> DE</li>
330 </ul>
331 <a class="nl-btnn</a>
332 </article>
333
334 <article class="nl-card"
335 data-branches="Photovoltaik"
336 data-regions=""
337 data-lang="DE"
338 data-topics="Technische Standards & Normung|Forschungsergebnisse & Marktanalysen|Branchenmessen & Fachveranstaltungen|Entwicklungen & Innovationen im Maschinenbau">
339 <h3 class="nl-title">Branchenblick – Photovoltaik</h3>
340 <p class="nl-teaser">Aktuelles aus der Photovoltaik und dem Maschinenbau.</p>
341 <ul class="nl-info">
342 <li><strong>Kontakt:</strong> Alexandra Janik‑Hannen</li>
343 <li><strong>Frequenz:</strong> ad‑hoc</li>
344 <li><strong>Bereitstellung:</strong> Newsletter (mit Opt‑in)</li>
345 <li><strong>Sprache:</strong> DE</li>
346 </ul>
347 <Jetzt abonnieren</a>
348 </article>
349
350 <article class="nl-card"
351 data-branches="Additive Manufacturing"
352 data-regions=""
353 data-lang="DE"
354 data-topics="Additive Fertigung|Anwendungen|Veranstaltungen">
355 <h3 class="nl-title">VDMA Additive Manufacturing</h3>
356 <p class="nl-teaser">Entwicklungen, Anwendungen und Veranstaltungen im Bereich Additive Fertigung.</p>
357 <ul class="nl-info">
358 <li><strong>Kontakt:</strong> Dr. Markus Heering</li>
359 <li><strong>Frequenz:</strong> monatlich</li>
360 <li><strong>Sprache:</strong> DE</li>
361 </ul>
362 #Jetzt abonnieren</a>
363 </article>
364
365 <article class="nl-card"
366 data-branches="Industrial IT"
367 data-regions=""
368 data-lang="DE"
369 data-topics="IT‑Sicherheit|Industrielle IT|Digitalisierung">
370 <h3 class="nl-title">VDMA Industrial IT</h3>
371 <p class="nl-teaser">Informationen zu industrieller IT und IT‑Sicherheit.</p>
372 <ul class="nl-info">
373 <li><strong>Kontakt:</strong> Dr. Christian Möller</li>
374 <li><strong>Frequenz:</strong> monatlich</li>
375 <li><strong>Sprache:</strong> DE</li>
376 </ul>
377 <a classbonnieren</a>
378 </article>
379
380 <article class="nl-card"
381 data-branches="Kunststoff- und Gummimaschinen"
382 data-regions=""
383 data-lang="DE"
384 data-topics="Märkte|Technologien|Veranstaltungen">
385 <h3 class="nl-title">VDMA Kunststoff‑ und Gummimaschinen</h3>
386 <p class="nl-teaser">Märkte, Technologien und Veranstaltungen rund um Kunststoff‑ und Gummimaschinen.</p>
387 <ul class="nl-info">
388 <li><strong>Kontakt:</strong> [email protected]</li>
389 <li><strong>Frequenz:</strong> monatlich</li>
390 <li><strong>Sprache:</strong> DE</li>
391 </ul>
392 #Jetzt abonnieren</a>
393 </article>
394
395 <article class="nl-card"
396 data-branches="Aufzüge und Fahrtreppen"
397 data-regions=""
398 data-lang="DE|EN"
399 data-topics="Märkte|Technologien|Veranstaltungen">
400 <h3 class="nl-title">VDMA Newsletter Aufzüge und Fahrtreppen</h3>
401 <p class="nl-teaser">Informationen zu Märkten, Technologien und Veranstaltungen.</p>
402 <ul class="nl-info">
403 <li><strong>Kontakt:</strong> Lisa Pfirrmann</li>
404 <li><strong>Frequenz:</strong> vierteljährlich</li>
405 <li><strong>Sprache:</strong> DE/EN</li>
406 </ul>
407 <Jetzt abonnieren</a>
408 </article>
409
410 <article class="nl-card"
411 data-branches="Micro Technologies"
412 data-regions=""
413 data-lang="DE"
414 data-topics="Technische Standards & Normung|Forschungsergebnisse & Marktanalysen|Branchenmessen & Fachveranstaltungen|Entwicklungen & Innovationen im Maschinenbau">
415 <h3 class="nl-title">Branchenblick – Micro Technologies</h3>
416 <p class="nl-teaser">Aktuelles aus der Micro‑Technologies‑Branche und dem Maschinenbau.</p>
417 <ul class="nl-info">
418 <li><strong>Kontakt:</strong> Johanna Schreiner und Alice Persichetti</li>
419 <li><strong>Frequenz:</strong> ad‑hoc</li>
420 <li><strong>Bereitstellung:</strong> Newsletter (mit Opt‑in)</li>
421 <li><strong>Sprache:</strong> DE</li>
422 </ul>
423 #Jetzt abonnieren</a>
424 </article>
425
426 <article class="nl-card"
427 data-branches="OPC UA"
428 data-regions=""
429 data-lang="DE"
430 data-topics="OPC UA|Interoperabilität|Standardisierung">
431 <h3 class="nl-title">VDMA OPC UA</h3>
432 <p class="nl-teaser">Updates zur OPC UA‑Technologie und deren Einsatz im Maschinenbau.</p>
433 <ul class="nl-info">
434 <li><strong>Kontakt:</strong> Dr. Christian Möller</li>
435 <li><strong>Frequenz:</strong> monatlich</li>
436 <li><strong>Sprache:</strong> DE</li>
437 </ul>
438 <Jetzt abonnieren</a>
439 </article>
440
441 <article class="nl-card"
442 data-branches="Robotik + Automation"
443 data-regions=""
444 data-lang="DE"
445 data-topics="Robotik|Industrielle Bildverarbeitung|Integrated Assembly Solutions">
446 <h3 class="nl-title">VDMA Robotik + Automation</h3>
447 <p class="nl-teaser">Neuigkeiten aus Robotik, Industrieller Bildverarbeitung und Integrated Assembly Solutions.</p>
448 <ul class="nl-info">
449 <li><strong>Kontakt:</strong> [email protected]</li>
450 <li><strong>Frequenz:</strong> monatlich</li>
451 <li><strong>Sprache:</strong> DE</li>
452 </ul>
453 #Jetzt abonnieren</a>
454 </article>
455
456 <article class="nl-card"
457 data-branches="Software und Digitalisierung"
458 data-regions=""
459 data-lang="DE"
460 data-topics="Software|Digitalisierung|Maschinenbau">
461 <h3 class="nl-title">VDMA Software und Digitalisierung</h3>
462 <p class="nl-teaser">Aktuelles aus dem Bereich Software und Digitalisierung im Maschinenbau.</p>
463 <ul class="nl-info">
464 <li><strong>Kontakt:</strong> Dr. Josef Waltl</li>
465 <li><strong>Frequenz:</strong> monatlich</li>
466 <li><strong>Sprache:</strong> DE</li>
467 </ul>
468 <a classbonnieren</a>
469 </article>
470
471 <article class="nl-card"
472 data-branches="Textilmaschinen"
473 data-regions=""
474 data-lang="DE|EN"
475 data-topics="Branchennews|Veranstaltungen|Trends">
476 <h3 class="nl-title">Rundschreiben: Blickpunkt (Textilmaschinen)</h3>
477 <p class="nl-teaser">Branchennews, Veranstaltungen und Trends aus dem Bereich Textilmaschinen.</p>
478 <ul class="nl-info">
479 <li><strong>Kontakt:</strong> Reingard Schwalbe</li>
480 <li><strong>Frequenz:</strong> monatlich</li>
481 <li><strong>Sprache:</strong> DE/EN</li>
482 </ul>
483 <a class="nl-btnn</a>
484 </article>
485
486 <article class="nl-card"
487 data-branches="Verfahrenstechnische Maschinen"
488 data-regions=""
489 data-lang="DE"
490 data-topics="Marktentwicklung & Konjunktur|Delegationsreisen & Aktivitäten|Messen, Veranstaltungen & Seminare">
491 <h3 class="nl-title">Branchenblick – Verfahrenstechnische Maschinen</h3>
492 <p class="nl-teaser">Aktuelles aus Verfahrenstechnische Maschinen & Apparate und dem Maschinenbau.</p>
493 <ul class="nl-info">
494 <li><strong>Kontakt:</strong> Alexandra Prawitz</li>
495 <li><strong>Frequenz:</strong> 14‑tägig</li>
496 <li><strong>Bereitstellung:</strong> Newsletter (mit Opt‑in)</li>
497 <li><strong>Sprache:</strong> DE</li>
498 </ul>
499 #Jetzt abonnieren</a>
500 </article>
501
502 <article class="nl-card"
503 data-branches="Verpackungsmaschinen"
504 data-regions=""
505 data-lang="DE"
506 data-topics="Technik|Märkte|Politik">
507 <h3 class="nl-title">VDMA Verpackungsmaschinen</h3>
508 <p class="nl-teaser">Aktuelles aus dem Bereich Verpackungsmaschinen – Technik, Märkte und Politik.</p>
509 <ul class="nl-info">
510 <li><strong>Kontakt:</strong> Dr. Bernd Jablonowski</li>
511 <li><strong>Frequenz:</strong> monatlich</li>
512 <li><strong>Sprache:</strong> DE</li>
513 </ul>
514 #Jetzt abonnieren</a>
515 </article>
516
517 <article class="nl-card"
518 data-branches="Verfahrenstechnik"
519 data-regions=""
520 data-lang="DE"
521 data-topics="Branchenrelevante Themen|Konjunktur|Verbandsaktivitäten">
522 <h3 class="nl-title">VDMA Verfahrenstechnik</h3>
523 <p class="nl-teaser">Aktuelle branchenrelevante Themen, Konjunkturdaten und Aktivitäten im Fachverband.</p>
524 <ul class="nl-info">
525 <li><strong>Kontakt:</strong> VDMA Services</li>
526 <li><strong>Frequenz:</strong> monatlich</li>
527 <li><strong>Sprache:</strong> DE</li>
528 </ul>
529 #Jetzt abonnieren</a>
530 </article>
531
532 <!-- === REGIONEN === -->
533 <article class="nl-card"
534 data-branches=""
535 data-regions="Bayern"
536 data-lang="DE"
537 data-topics="Regionale Informationen|Veranstaltungen|Mitglieder">
538 <h3 class="nl-title">VDMA Bayern</h3>
539 <p class="nl-teaser">Regionale Informationen und Veranstaltungen für Mitglieder in Bayern.</p>
540 <ul class="nl-info">
541 <li><strong>Kontakt:</strong> [email protected]</li>
542 <li><strong>Frequenz:</strong> monatlich</li>
543 <li><strong>Sprache:</strong> DE</li>
544 </ul>
545 <a class="nl-btn"</a>
546 </article>
547
548 <article class="nl-card"
549 data-branches=""
550 data-regions="Berlin"
551 data-lang="DE"
552 data-topics="Regionale Informationen|Veranstaltungen|Mitglieder">
553 <h3 class="nl-title">VDMA Berlin</h3>
554 <p class="nl-teaser">Regionale Informationen und Veranstaltungen für Mitglieder in Berlin.</p>
555 <ul class="nl-info">
556 <li><strong>Kontakt:</strong> [email protected]</li>
557 <li><strong>Frequenz:</strong> monatlich</li>
558 <li><strong>Sprache:</strong> DE</li>
559 </ul>
560 #Jetzt abonnieren</a>
561 </article>
562
563 <article class="nl-card"
564 data-branches=""
565 data-regions="Mitte"
566 data-lang="DE"
567 data-topics="Regionale Informationen|Veranstaltungen|Mitglieder|Hessen|Rheinland-Pfalz|Saarland">
568 <h3 class="nl-title">VDMA Mitte</h3>
569 <p class="nl-teaser">Regionale Informationen für Hessen, Rheinland‑Pfalz und Saarland.</p>
570 <ul class="nl-info">
571 <li><strong>Kontakt:</strong> [email protected]</li>
572 <li><strong>Frequenz:</strong> monatlich</li>
573 <li><strong>Sprache:</strong> DE</li>
574 </ul>
575 #Jetzt abonnieren</a>
576 </article>
577
578 <article class="nl-card"
579 data-branches=""
580 data-regions="Nord"
581 data-lang="DE"
582 data-topics="Regionale Informationen|Veranstaltungen|Mitglieder">
583 <h3 class="nl-title">VDMA Nord</h3>
584 <p class="nl-teaser">Regionale Informationen und Veranstaltungen für Mitglieder in Norddeutschland.</p>
585 <ul class="nl-info">
586 <li><strong>Kontakt:</strong> [email protected]</li>
587 <li><strong>Frequenz:</strong> monatlich</li>
588 <li><strong>Sprache:</strong> DE</li>
589 </ul>
590 #Jetzt abonnieren</a>
591 </article>
592
593 <article class="nl-card"
594 data-branches=""
595 data-regions="NRW"
596 data-lang="DE"
597 data-topics="Regionale Informationen|Veranstaltungen|Mitglieder">
598 <h3 class="nl-title">VDMA NRW</h3>
599 <p class="nl-teaser">Regionale Informationen und Veranstaltungen für Mitglieder in NRW.</p>
600 <ul class="nl-info">
601 <li><strong>Kontakt:</strong> [email protected]</li>
602 <li><strong>Frequenz:</strong> monatlich</li>
603 <li><strong>Sprache:</strong> DE</li>
604 </ul>
605 <a class="nlieren</a>
606 </article>
607
608 <article class="nl-card"
609 data-branches=""
610 data-regions="Ost"
611 data-lang="DE"
612 data-topics="Regionale Informationen|Veranstaltungen|Mitglieder|Sachsen|Sachsen-Anhalt|Mecklenburg-Vorpommern|Brandenburg|Berlin|Thüringen">
613 <h3 class="nl-title">VDMA Ost</h3>
614 <p class="nl-teaser">Regionale Informationen für Ostdeutschland (Sachsen, Sachsen‑Anhalt, Mecklenburg‑Vorpommern, Brandenburg, Berlin, Thüringen).</p>
615 <ul class="nl-info">
616 <li><strong>Kontakt:</strong> [email protected]</li>
617 <li><strong>Frequenz:</strong> monatlich</li>
618 <li><strong>Sprache:</strong> DE</li>
619 </ul>
620 #Jetzt abonnieren</a>
621 </article>
622
623 <article class="nl-card"
624 data-branches=""
625 data-regions="Schweiz"
626 data-lang="DE"
627 data-topics="Regionale Informationen|Veranstaltungen|Mitglieder|Schweiz">
628 <h3 class="nl-title">VDMA Schweiz</h3>
629 <p class="nl-teaser">Informationen für Schweizer Mitglieder und Interessenten.</p>
630 <ul class="nl-info">
631 <li><strong>Kontakt:</strong> [email protected]</li>
632 <li><strong>Frequenz:</strong> monatlich</li>
633 <li><strong>Sprache:</strong> DE</li>
634 </ul>
635 #Jetzt abonnieren</a>
636 </article>
637
638 <article class="nl-card"
639 data-branches=""
640 data-regions="Österreich"
641 data-lang="DE"
642 data-topics="Regionale Informationen|Veranstaltungen|Mitglieder|Österreich">
643 <h3 class="nl-title">VDMA Österreich</h3>
644 <p class="nl-teaser">Informationen für österreichische Mitglieder und Interessenten.</p>
645 <ul class="nl-info">
646 <li><strong>Kontakt:</strong> [email protected]</li>
647 <li><strong>Frequenz:</strong> monatlich</li>
648 <li><strong>Sprache:</strong> DE</li>
649 </ul>
650 #Jetzt abonnieren</a>
651 </article>
652
653 <article class="nl-card"
654 data-branches=""
655 data-regions="Berlin"
656 data-lang="DE"
657 data-topics="Regionale Updates|Aktivitäten des VDMA|Berlin">
658 <h3 class="nl-title">VDMA Berlin – Updates</h3>
659 <p class="nl-teaser">Updates für VDMA Mitglieder zu aktuellen Aktivitäten des VDMA in Berlin.</p>
660 <ul class="nl-info">
661 <li><strong>Kontakt:</strong> Florian von Gierke</li>
662 <li><strong>Frequenz:</strong> unregelmäßig</li>
663 <li><strong>Sprache:</strong> DE</li>
664 </ul>
665 #Jetzt abonnieren</a>
666 </article>
667 </div>
668</section>
669
670<script>
671/* ===== Newsletter-Recherche – Logik (vanilla JS, FTL-sicher) =====
672 - Keine Backticks, keine ${...} in Strings
673 - Volltextsuche (Titel, Teaser, Facetten)
674 - Facettenfilter (AND zwischen Facetten, OR innerhalb einer Facette)
675 - Typeahead ab 2 Zeichen
676 - URL-Parameter q, topics, branches, regions, lang
677 - Progressive Enhancement: ohne JS werden alle Cards angezeigt
678*/
679(function(){
680 var el = {
681 q: document.getElementById('nl-q'),
682 clear: document.querySelector('.nl-clear'),
683 suggestions: document.getElementById('nl-suggestions'),
684 results: document.getElementById('nl-results'),
685 count: document.getElementById('nl-count'),
686 empty: document.getElementById('nl-empty'),
687 facetTopics: document.getElementById('facet-topics'),
688 facetBranches: document.getElementById('facet-branches'),
689 facetRegions: document.getElementById('facet-regions'),
690 facetLang: document.getElementById('facet-lang'),
691 active: document.querySelector('.nl-activefilters'),
692 reset: document.querySelector('.nl-reset')
693 };
694
695 // Cards einlesen
696 var cardNodes = el.results.querySelectorAll('.nl-card');
697 var cards = Array.prototype.map.call(cardNodes, function(card){
698 var title = (card.querySelector('.nl-title') ? card.querySelector('.nl-title').textContent : '').trim();
699 var teaser = (card.querySelector('.nl-teaser') ? card.querySelector('.nl-teaser').textContent : '').trim();
700 var topics = (card.getAttribute('data-topics') || '').split('|').map(function(v){ return v.trim(); }).filter(Boolean);
701 var branches = (card.getAttribute('data-branches') || '').split('|').map(function(v){ return v.trim(); }).filter(Boolean);
702 var regions = (card.getAttribute('data-regions') || '').split('|').map(function(v){ return v.trim(); }).filter(Boolean);
703 var lang = (card.getAttribute('data-lang') || '').split('|').map(function(v){ return v.trim(); }).filter(Boolean);
704 return { el: card, title: title, teaser: teaser, topics: topics, branches: branches, regions: regions, lang: lang };
705 });
706
707 // Helpers
708 function norm(s){
709 // Diakritika entfernen ohne \p{...}, für maximale Kompatibilität
710 return (s || '')
711 .normalize('NFD')
712 .replace(/[\u0300-\u036f]/g, '')
713 .toLowerCase();
714 }
715 function unique(arr){
716 var set = Object.create(null);
717 var out = [];
718 arr.forEach(function(v){
719 if(v && !set[v]){ set[v]=true; out.push(v); }
720 });
721 out.sort(function(a,b){ return a.localeCompare(b,'de'); });
722 return out;
723 }
724 function escapeHtml(str){
725 return String(str)
726 .replace(/&/g,'&')
727 .replace(/</g,'<')
728 .replace(/>/g,'>')
729 .replace(/"/g,'"')
730 .replace(/'/g,''');
731 }
732
733 // Facetten automatisch sammeln
734 var ALL = {
735 topics: unique([].concat.apply([], cards.map(function(c){ return c.topics; }))),
736 branches: unique([].concat.apply([], cards.map(function(c){ return c.branches; }))),
737 regions: unique([].concat.apply([], cards.map(function(c){ return c.regions; }))),
738 lang: unique([].concat.apply([], cards.map(function(c){ return c.lang; })))
739 };
740
741 // State
742 var state = { q:'', topics:new Set(), branches:new Set(), regions:new Set(), lang:new Set() };
743
744 // Facetten-UI
745 function renderFacet(container, facetKey, values){
746 container.innerHTML = '';
747 values.forEach(function(value){
748 var btn = document.createElement('button');
749 btn.type = 'button';
750 btn.className = 'nl-chip';
751 btn.setAttribute('aria-pressed','false');
752 btn.setAttribute('data-facet', facetKey);
753 btn.setAttribute('data-value', value);
754 btn.textContent = value;
755 container.appendChild(btn);
756 });
757 }
758 renderFacet(el.facetTopics, 'topics', ALL.topics);
759 renderFacet(el.facetBranches, 'branches', ALL.branches);
760 renderFacet(el.facetRegions, 'regions', ALL.regions);
761 renderFacet(el.facetLang, 'lang', ALL.lang);
762
763 // Aktiv-Filter-Tags
764 function renderActiveTags(){
765 var tags = [];
766 ['topics','branches','regions','lang'].forEach(function(key){
767 state[key].forEach(function(value){
768 tags.push(
769 '<span class="tag">' + escapeHtml(value) +
770 '<button type="button" data-remove="' + key + '|' + value + '" aria-label="Filter ' + escapeHtml(value) + ' entfernen">×</button></span>'
771 );
772 });
773 });
774 el.active.innerHTML = tags.join('');
775 }
776
777 // Filtern
778 function matchesFacet(set, values){ return set.size===0 || values.some(function(v){ return set.has(v); }); }
779 function applyFilter(){
780 var nq = norm(state.q);
781 var visible = 0;
782 cards.forEach(function(c){
783 var hay = [c.title, c.teaser].concat(c.topics, c.branches, c.regions, c.lang);
784 var inText = !nq || hay.some(function(s){ return norm(s).indexOf(nq) !== -1; });
785 var ok = inText
786 && matchesFacet(state.topics, c.topics)
787 && matchesFacet(state.branches, c.branches)
788 && matchesFacet(state.regions, c.regions)
789 && matchesFacet(state.lang, c.lang);
790
791 c.el.style.display = ok ? '' : 'none';
792 if(ok) visible++;
793 });
794 el.count.textContent = visible;
795 el.empty.style.display = visible ? 'none' : '';
796 renderActiveTags();
797
798 // Chips Zustand syncen
799 var chips = document.querySelectorAll('.nl-chip');
800 Array.prototype.forEach.call(chips, function(ch){
801 var k = ch.getAttribute('data-facet');
802 var v = ch.getAttribute('data-value');
803 var active = state[k].has(v);
804 ch.setAttribute('aria-pressed', active ? 'true' : 'false');
805 });
806
807 updateURL();
808 }
809
810 // URL-Parameter
811 function updateURL(){
812 var p = new URLSearchParams();
813 if(state.q) p.set('q', state.q);
814 ['topics','branches','regions','lang'].forEach(function(k){
815 if(state[k].size) p.set(k, Array.from(state[k]).join('|'));
816 });
817 var newUrl = location.pathname + (p.toString() ? ('?' + p.toString()) : '') + location.hash;
818 history.replaceState(null, '', newUrl);
819 }
820 function loadFromURL(){
821 var p = new URLSearchParams(location.search);
822 state.q = p.get('q') || '';
823 ['topics','branches','regions','lang'].forEach(function(k){
824 var v = (p.get(k) || '').split('|').map(function(s){ return s.trim(); }).filter(Boolean);
825 state[k] = new Set(v);
826 });
827 el.q.value = state.q;
828 }
829 loadFromURL();
830
831 // Vorschläge (ab 2 Zeichen)
832 function buildSuggestions(query){
833 if(query.length < 2) return [];
834 var nq = norm(query);
835 var titles = unique(cards.map(function(c){ return c.title; }).filter(function(t){ return norm(t).indexOf(nq) !== -1; })).slice(0,6);
836 var topics = ALL.topics.filter(function(t){ return norm(t).indexOf(nq) !== -1; }).slice(0,6);
837 var branches = ALL.branches.filter(function(t){ return norm(t).indexOf(nq) !== -1; }).slice(0,6);
838 var regions = ALL.regions.filter(function(t){ return norm(t).indexOf(nq) !== -1; }).slice(0,6);
839 var lang = ALL.lang.filter(function(t){ return norm(t).indexOf(nq) !== -1; }).slice(0,6);
840
841 var groups = [];
842 if(titles.length) groups.push({label:'Titel', items:titles, type:'title'});
843 if(topics.length) groups.push({label:'Themen', items:topics, type:'topics'});
844 if(branches.length) groups.push({label:'Branchen', items:branches, type:'branches'});
845 if(regions.length) groups.push({label:'Regionen', items:regions, type:'regions'});
846 if(lang.length) groups.push({label:'Sprache', items:lang, type:'lang'});
847 return groups;
848 }
849 function renderSuggestions(groups){
850 if(!groups.length){
851 el.suggestions.classList.remove('show');
852 el.q.setAttribute('aria-expanded','false');
853 el.suggestions.innerHTML = '';
854 return;
855 }
856 var html = groups.map(function(g){
857 var items = g.items.map(function(item){
858 return '<button role="option" data-type="' + g.type + '" data-value="' + escapeHtml(item) + '">' + escapeHtml(item) + '</button>';
859 }).join('');
860 return '<div class="group"><h5>' + escapeHtml(g.label) + '</h5>' + items + '</div>';
861 }).join('');
862 el.suggestions.innerHTML = html;
863 el.suggestions.classList.add('show');
864 el.q.setAttribute('aria-expanded','true');
865 }
866
867 // Events
868 el.q.addEventListener('input', function(){
869 state.q = el.q.value.trim();
870 applyFilter();
871 renderSuggestions(buildSuggestions(state.q)); // ab 2 Zeichen
872 });
873 el.q.addEventListener('keydown', function(e){
874 if(e.key === 'Escape'){
875 el.suggestions.classList.remove('show');
876 el.q.setAttribute('aria-expanded','false');
877 }
878 });
879
880 el.clear.addEventListener('click', function(){
881 state.q = '';
882 el.q.value = '';
883 applyFilter();
884 renderSuggestions([]);
885 });
886
887 document.addEventListener('click', function(e){
888 var t = e.target;
889
890 // Vorschlag ausgewählt
891 if(t.closest && t.closest('#nl-suggestions') && t.getAttribute('data-value')){
892 var type = t.getAttribute('data-type');
893 var value = t.getAttribute('data-value');
894 if(type === 'title'){
895 state.q = value; el.q.value = value;
896 } else {
897 if(state[type].has(value)){ state[type].delete(value); }
898 else { state[type].add(value); }
899 }
900 applyFilter();
901 renderSuggestions([]);
902 return;
903 }
904
905 // Facettenchip
906 if(t.classList && t.classList.contains('nl-chip')){
907 var facet = t.getAttribute('data-facet');
908 var value = t.getAttribute('data-value');
909 if(state[facet].has(value)){ state[facet].delete(value); }
910 else { state[facet].add(value); }
911 applyFilter();
912 return;
913 }
914
915 // Aktiv-Tag entfernen
916 if(t.closest && t.closest('.nl-activefilters') && t.getAttribute('data-remove')){
917 var rm = t.getAttribute('data-remove').split('|');
918 var k = rm[0]; var v = rm[1];
919 state[k].delete(v);
920 applyFilter();
921 return;
922 }
923
924 // Reset
925 if(t.classList && t.classList.contains('nl-reset')){
926 state.q=''; el.q.value='';
927 ['topics','branches','regions','lang'].forEach(function(k){ state[k].clear(); });
928 applyFilter(); renderSuggestions([]);
929 return;
930 }
931 });
932
933 // Klick außerhalb -> Vorschläge schließen
934 document.addEventListener('click', function(e){
935 if(!el.suggestions.contains(e.target) && e.target !== el.q){
936 el.suggestions.classList.remove('show');
937 el.q.setAttribute('aria-expanded','false');
938 }
939 });
940
941 // Init
942 applyFilter();
943})();
944</script>
945<!-- ===== Ende Newsletter-Recherche ===== -->
946</#noparse>