<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=134.3.74.15</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=134.3.74.15"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/134.3.74.15"/>
	<updated>2026-05-06T13:57:39Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PrivacyWire_-_ProcessWire_Modul&amp;diff=26070</id>
		<title>PrivacyWire - ProcessWire Modul</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PrivacyWire_-_ProcessWire_Modul&amp;diff=26070"/>
		<updated>2022-04-25T15:13:31Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Cookie Options anzeigen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modul zum Anzeigen eines Cookie Banners und zum Blockieren von Skripten, Externen Medien etc. Das Modul passt das HTML an&lt;br /&gt;
== Links ==&lt;br /&gt;
 https://processwire.com/modules/privacy-wire/&lt;br /&gt;
 https://processwire.com/talk/topic/23118-privacywire-cookie-management-async-external-asset-loading/&lt;br /&gt;
&lt;br /&gt;
== Quickstart Cookie Consent für ProcessWire ==&lt;br /&gt;
* Modul installieren (PrivacyWire)&lt;br /&gt;
* Labels übersetzen&lt;br /&gt;
* Benötigte Ketegorien auswählen&lt;br /&gt;
** Zuordnung der Kategorien funktioniert über data-category Attribut.&lt;br /&gt;
* Skripte anpassen z.B.&lt;br /&gt;
** Normale Skripte: type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&lt;br /&gt;
** Externe Skripte: data-src=&amp;quot;...&amp;quot;&lt;br /&gt;
Beispiele:&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;statistics&amp;quot; data-src=&amp;quot;/path/to/your/statistic/script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot; data-src=&amp;quot;/path/to/your/mareketing/script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;external_media&amp;quot; data-src=&amp;quot;/path/to/your/external-media/script.js&amp;quot;&amp;gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&amp;gt;console.log(&amp;quot;Inline scripts are also working!&amp;quot;);&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- Global site tag (gtag.js) - Google Analytics --&amp;gt;&lt;br /&gt;
&amp;lt;script async type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot; data-src=&amp;quot;https://www.googletagmanager.com/gtag/js?id=G-DQPX4V13MY&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&amp;gt;&lt;br /&gt;
window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag(&amp;#039;js&amp;#039;, new Date());gtag(&amp;#039;config&amp;#039;, &amp;#039;G-DQPX4V13MY&amp;#039;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cookie Options anzeigen ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[privacywire-choose-cookies]] - Mit Textformatter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;privacywire-show-options&amp;quot;&amp;gt;Show Cookie Options&amp;lt;/a&amp;gt; - als Link&lt;br /&gt;
&amp;lt;button class=&amp;quot;privacywire-show-options&amp;quot;&amp;gt;Show Cookie Options&amp;lt;/button&amp;gt;  - als Button&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.pricacywire,&lt;br /&gt;
.privacywire-banner,&lt;br /&gt;
.privacywire-options,&lt;br /&gt;
.privacywire-message{&lt;br /&gt;
	background-color: #009999 !important;&lt;br /&gt;
}&lt;br /&gt;
.pricacywire a,&lt;br /&gt;
.privacywire-banner a,&lt;br /&gt;
.privacywire-options a{&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Video Embed Opt-In==&lt;br /&gt;
Im VideoEmbed Plugin kann man die Kategorie auswählen (z.B. external Media)&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PrivacyWire_-_ProcessWire_Modul&amp;diff=26069</id>
		<title>PrivacyWire - ProcessWire Modul</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PrivacyWire_-_ProcessWire_Modul&amp;diff=26069"/>
		<updated>2022-04-25T12:09:42Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Quickstart Cookie Consent für ProcessWire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modul zum Anzeigen eines Cookie Banners und zum Blockieren von Skripten, Externen Medien etc. Das Modul passt das HTML an&lt;br /&gt;
== Links ==&lt;br /&gt;
 https://processwire.com/modules/privacy-wire/&lt;br /&gt;
 https://processwire.com/talk/topic/23118-privacywire-cookie-management-async-external-asset-loading/&lt;br /&gt;
&lt;br /&gt;
== Quickstart Cookie Consent für ProcessWire ==&lt;br /&gt;
* Modul installieren (PrivacyWire)&lt;br /&gt;
* Labels übersetzen&lt;br /&gt;
* Benötigte Ketegorien auswählen&lt;br /&gt;
** Zuordnung der Kategorien funktioniert über data-category Attribut.&lt;br /&gt;
* Skripte anpassen z.B.&lt;br /&gt;
** Normale Skripte: type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&lt;br /&gt;
** Externe Skripte: data-src=&amp;quot;...&amp;quot;&lt;br /&gt;
Beispiele:&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;statistics&amp;quot; data-src=&amp;quot;/path/to/your/statistic/script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot; data-src=&amp;quot;/path/to/your/mareketing/script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;external_media&amp;quot; data-src=&amp;quot;/path/to/your/external-media/script.js&amp;quot;&amp;gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&amp;gt;console.log(&amp;quot;Inline scripts are also working!&amp;quot;);&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- Global site tag (gtag.js) - Google Analytics --&amp;gt;&lt;br /&gt;
&amp;lt;script async type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot; data-src=&amp;quot;https://www.googletagmanager.com/gtag/js?id=G-DQPX4V13MY&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&amp;gt;&lt;br /&gt;
window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag(&amp;#039;js&amp;#039;, new Date());gtag(&amp;#039;config&amp;#039;, &amp;#039;G-DQPX4V13MY&amp;#039;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cookie Options anzeigen ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[privacywire-choose-cookies]] - Mit Textformatter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;privacywire-show-options&amp;quot;&amp;gt;Show Cookie Options&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;privacywire-show-options&amp;quot;&amp;gt;Show Cookie Options&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.pricacywire,&lt;br /&gt;
.privacywire-banner,&lt;br /&gt;
.privacywire-options,&lt;br /&gt;
.privacywire-message{&lt;br /&gt;
	background-color: #009999 !important;&lt;br /&gt;
}&lt;br /&gt;
.pricacywire a,&lt;br /&gt;
.privacywire-banner a,&lt;br /&gt;
.privacywire-options a{&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Video Embed Opt-In==&lt;br /&gt;
Im VideoEmbed Plugin kann man die Kategorie auswählen (z.B. external Media)&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PrivacyWire_-_ProcessWire_Modul&amp;diff=26068</id>
		<title>PrivacyWire - ProcessWire Modul</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PrivacyWire_-_ProcessWire_Modul&amp;diff=26068"/>
		<updated>2022-04-25T12:09:23Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Quickstart Cookie Consent für ProcessWire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modul zum Anzeigen eines Cookie Banners und zum Blockieren von Skripten, Externen Medien etc. Das Modul passt das HTML an&lt;br /&gt;
== Links ==&lt;br /&gt;
 https://processwire.com/modules/privacy-wire/&lt;br /&gt;
 https://processwire.com/talk/topic/23118-privacywire-cookie-management-async-external-asset-loading/&lt;br /&gt;
&lt;br /&gt;
== Quickstart Cookie Consent für ProcessWire ==&lt;br /&gt;
* Modul installieren (PrivacyWire)&lt;br /&gt;
* Labels übersetzen&lt;br /&gt;
* Benötigte Ketegorien auswählen&lt;br /&gt;
** Zuordnung der Kategorien funktioniert über data-category Attribut.&lt;br /&gt;
* Skripte anpassen z.B.&lt;br /&gt;
** Normale Skripte: type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&lt;br /&gt;
** Externe Skripte: data-src=&amp;quot;...&amp;quot;&lt;br /&gt;
Beispiele:&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;statistics&amp;quot; data-src=&amp;quot;/path/to/your/statistic/script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot; data-src=&amp;quot;/path/to/your/mareketing/script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;external_media&amp;quot; data-src=&amp;quot;/path/to/your/external-media/script.js&amp;quot;&amp;gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&amp;gt;console.log(&amp;quot;Inline scripts are also working!&amp;quot;);&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Global site tag (gtag.js) - Google Analytics --&amp;gt;&lt;br /&gt;
&amp;lt;script async type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot; data-src=&amp;quot;https://www.googletagmanager.com/gtag/js?id=G-DQPX4V13MY&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&amp;gt;&lt;br /&gt;
window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag(&amp;#039;js&amp;#039;, new Date());gtag(&amp;#039;config&amp;#039;, &amp;#039;G-DQPX4V13MY&amp;#039;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cookie Options anzeigen ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[privacywire-choose-cookies]] - Mit Textformatter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;privacywire-show-options&amp;quot;&amp;gt;Show Cookie Options&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;privacywire-show-options&amp;quot;&amp;gt;Show Cookie Options&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.pricacywire,&lt;br /&gt;
.privacywire-banner,&lt;br /&gt;
.privacywire-options,&lt;br /&gt;
.privacywire-message{&lt;br /&gt;
	background-color: #009999 !important;&lt;br /&gt;
}&lt;br /&gt;
.pricacywire a,&lt;br /&gt;
.privacywire-banner a,&lt;br /&gt;
.privacywire-options a{&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Video Embed Opt-In==&lt;br /&gt;
Im VideoEmbed Plugin kann man die Kategorie auswählen (z.B. external Media)&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PrivacyWire_-_ProcessWire_Modul&amp;diff=26067</id>
		<title>PrivacyWire - ProcessWire Modul</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PrivacyWire_-_ProcessWire_Modul&amp;diff=26067"/>
		<updated>2022-04-25T11:37:07Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Quickstart Cookie Consent für ProcessWire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modul zum Anzeigen eines Cookie Banners und zum Blockieren von Skripten, Externen Medien etc. Das Modul passt das HTML an&lt;br /&gt;
== Links ==&lt;br /&gt;
 https://processwire.com/modules/privacy-wire/&lt;br /&gt;
 https://processwire.com/talk/topic/23118-privacywire-cookie-management-async-external-asset-loading/&lt;br /&gt;
&lt;br /&gt;
== Quickstart Cookie Consent für ProcessWire ==&lt;br /&gt;
* Modul installieren (PrivacyWire)&lt;br /&gt;
* Labels übersetzen&lt;br /&gt;
* Benötigte Ketegorien auswählen&lt;br /&gt;
** Zuordnung der Kategorien funktioniert über data-category Attribut.&lt;br /&gt;
* Skripte anpassen z.B.&lt;br /&gt;
** Normale Skripte: type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&lt;br /&gt;
** Externe Skripte: data-src=&amp;quot;...&amp;quot;&lt;br /&gt;
Beispiele:&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;statistics&amp;quot; data-src=&amp;quot;/path/to/your/statistic/script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot; data-src=&amp;quot;/path/to/your/mareketing/script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;external_media&amp;quot; data-src=&amp;quot;/path/to/your/external-media/script.js&amp;quot;&amp;gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&amp;gt;console.log(&amp;quot;Inline scripts are also working!&amp;quot;);&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cookie Options anzeigen ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[privacywire-choose-cookies]] - Mit Textformatter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;privacywire-show-options&amp;quot;&amp;gt;Show Cookie Options&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;privacywire-show-options&amp;quot;&amp;gt;Show Cookie Options&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.pricacywire,&lt;br /&gt;
.privacywire-banner,&lt;br /&gt;
.privacywire-options,&lt;br /&gt;
.privacywire-message{&lt;br /&gt;
	background-color: #009999 !important;&lt;br /&gt;
}&lt;br /&gt;
.pricacywire a,&lt;br /&gt;
.privacywire-banner a,&lt;br /&gt;
.privacywire-options a{&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Video Embed Opt-In==&lt;br /&gt;
Im VideoEmbed Plugin kann man die Kategorie auswählen (z.B. external Media)&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_CookieConsent&amp;diff=26066</id>
		<title>ProcessWire - CookieConsent</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_CookieConsent&amp;diff=26066"/>
		<updated>2022-04-25T11:35:03Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: Die Seite wurde neu angelegt: „ PrivacyWire - ProcessWire Modul“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[PrivacyWire - ProcessWire Modul]]&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PrivacyWire_-_ProcessWire_Modul&amp;diff=26065</id>
		<title>PrivacyWire - ProcessWire Modul</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PrivacyWire_-_ProcessWire_Modul&amp;diff=26065"/>
		<updated>2022-04-25T11:34:41Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modul zum Anzeigen eines Cookie Banners und zum Blockieren von Skripten, Externen Medien etc. Das Modul passt das HTML an&lt;br /&gt;
== Links ==&lt;br /&gt;
 https://processwire.com/modules/privacy-wire/&lt;br /&gt;
 https://processwire.com/talk/topic/23118-privacywire-cookie-management-async-external-asset-loading/&lt;br /&gt;
&lt;br /&gt;
== Quickstart Cookie Consent für ProcessWire ==&lt;br /&gt;
* Modul installieren&lt;br /&gt;
* Labels übersetzen&lt;br /&gt;
* Benötigte Ketegorien auswählen&lt;br /&gt;
** Zuordnung der Kategorien funktioniert über data-category Attribut.&lt;br /&gt;
* Skripte anpassen z.B.&lt;br /&gt;
** Normale Skripte: type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&lt;br /&gt;
** Externe Skripte: data-src=&amp;quot;...&amp;quot;&lt;br /&gt;
Beispiele:&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;statistics&amp;quot; data-src=&amp;quot;/path/to/your/statistic/script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot; data-src=&amp;quot;/path/to/your/mareketing/script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;external_media&amp;quot; data-src=&amp;quot;/path/to/your/external-media/script.js&amp;quot;&amp;gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/plain&amp;quot; data-type=&amp;quot;text/javascript&amp;quot; data-category=&amp;quot;marketing&amp;quot;&amp;gt;console.log(&amp;quot;Inline scripts are also working!&amp;quot;);&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cookie Options anzeigen ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[privacywire-choose-cookies]] - Mit Textformatter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;privacywire-show-options&amp;quot;&amp;gt;Show Cookie Options&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;privacywire-show-options&amp;quot;&amp;gt;Show Cookie Options&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.pricacywire,&lt;br /&gt;
.privacywire-banner,&lt;br /&gt;
.privacywire-options,&lt;br /&gt;
.privacywire-message{&lt;br /&gt;
	background-color: #009999 !important;&lt;br /&gt;
}&lt;br /&gt;
.pricacywire a,&lt;br /&gt;
.privacywire-banner a,&lt;br /&gt;
.privacywire-options a{&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Video Embed Opt-In==&lt;br /&gt;
Im VideoEmbed Plugin kann man die Kategorie auswählen (z.B. external Media)&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Page_Loader_-_Beispiele&amp;diff=26064</id>
		<title>Page Loader - Beispiele</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Page_Loader_-_Beispiele&amp;diff=26064"/>
		<updated>2022-04-24T09:05:20Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Beispiel 1 jquery mini-modernizr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&lt;br /&gt;
&lt;br /&gt;
== Beispiel 1 mit no-js Check ==&lt;br /&gt;
Der Loader berücksichtigt das no-js Tag im &amp;lt;html&amp;gt; und wird nicht angezeigt wenn kein JavaScript vorhanden ist.&lt;br /&gt;
1. Add a div just after &amp;lt;body&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Direkt nach &amp;lt;body&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;loader-icon&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.no-js #loader { display: none;  }&lt;br /&gt;
.js #loader { display: block; position: absolute; left: 100px; top: 0; }&lt;br /&gt;
.loader-icon {&lt;br /&gt;
	position: fixed;&lt;br /&gt;
	left: 0px;&lt;br /&gt;
	top: 0px;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	z-index: 9999;&lt;br /&gt;
	background: url(https://smallenvelop.com/wp-content/uploads/2014/08/Preloader_11.gif) center no-repeat #fff;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Mini Modernizr&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Feature_Detection#Mini_Modernizer_.28JS.2C_Touch.29&lt;br /&gt;
&lt;br /&gt;
4. Loader Script (jQuery)Now add some jQuery to show the pre-loading icon when the page is loading and hide when it has finished loading.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Wait for window load&lt;br /&gt;
$(window).load(function() {&lt;br /&gt;
	// Animate loader off screen&lt;br /&gt;
	$(&amp;quot;.loader-icon&amp;quot;).fadeOut(&amp;quot;slow&amp;quot;);;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel 2 ==&lt;br /&gt;
(Gyn Gap 2017) Mit SVG Zirkel, CSS Animation, Stilisiertes Logo und Vorhang rechts links. &lt;br /&gt;
&lt;br /&gt;
HTML - direkt hinter body Tag (Beispiel aus ProcessWire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Page Loader&lt;br /&gt;
  ========================================================= --&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;loader-container&amp;quot; id=&amp;quot;page-loader&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;loading-wrapper loading-wrapper-hide&amp;quot;&amp;gt;&lt;br /&gt;
    	&amp;lt;div class=&amp;quot;loader-animation&amp;quot; id=&amp;quot;loader-animation&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;svg class=&amp;quot;svg-loader&amp;quot; width=100 height=100&amp;gt;&lt;br /&gt;
  		  &amp;lt;circle cx=50 cy=50 r=25 /&amp;gt;&lt;br /&gt;
  		&amp;lt;/svg&amp;gt;&lt;br /&gt;
    	&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Edit With Your Name --&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;loader-name&amp;quot; id=&amp;quot;loader-name&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;img src=&amp;quot;&amp;lt;?php echo $config-&amp;gt;urls-&amp;gt;templates?&amp;gt;img/logo-negative.png&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;!-- /Edit With Your Name --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;!-- /End of Page loader&lt;br /&gt;
  ========================================================= --&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* ==========================================================&lt;br /&gt;
! Page Loader&lt;br /&gt;
========================================================== */&lt;br /&gt;
#page-loader {&lt;br /&gt;
  display: none;&lt;br /&gt;
  visibility: hidden;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  z-index: 9999;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  font-family: &amp;#039;Gilroy-Light&amp;#039;, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  #page-loader {&lt;br /&gt;
    display: block;&lt;br /&gt;
    visibility: visible;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#page-loader:before {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  background: #333333;&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
#page-loader:after {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  background: #333333;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
.loader-out {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-out:before {&lt;br /&gt;
  transform: translateX(-600px);&lt;br /&gt;
  -moz-transform: translateX(-600px);&lt;br /&gt;
  -webkit-transform: translateX(-600px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-out:after {&lt;br /&gt;
  transform: translateX(600px);&lt;br /&gt;
  -moz-transform: translateX(600px);&lt;br /&gt;
  -webkit-transform: translateX(600px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loading-wrapper {&lt;br /&gt;
  width: 250px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  margin-top: -130px;&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  margin-left: -125px;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  z-index: 9;&lt;br /&gt;
  transform: translateY(0px);&lt;br /&gt;
  -moz-transform: translateY(0px);&lt;br /&gt;
  -webkit-transform: translateY(0px);&lt;br /&gt;
}&lt;br /&gt;
.loading-wrapper-hide {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  transform: translateY(-20px);&lt;br /&gt;
  -moz-transform: translateY(-20px);&lt;br /&gt;
  -webkit-transform: translateY(-20px);&lt;br /&gt;
}&lt;br /&gt;
.tp-loader {&lt;br /&gt;
  z-index: 10000;&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
.loader-name {&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  opacity: 0.8;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  letter-spacing: 0px;&lt;br /&gt;
  padding-left: 2px;&lt;br /&gt;
  padding-right: 2px;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  margin-top: 45px;&lt;br /&gt;
  -webkit-transition: all 0.4s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.4s ease-in-out;&lt;br /&gt;
  transition: all 0.4s ease-in-out;&lt;br /&gt;
  margin-bottom: 35px;&lt;br /&gt;
}&lt;br /&gt;
.loader-name img {&lt;br /&gt;
  max-width: 230px;&lt;br /&gt;
}&lt;br /&gt;
.loader-job {&lt;br /&gt;
  border: 1px solid #ffffff;&lt;br /&gt;
  padding: 5px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-weight: 200;&lt;br /&gt;
  margin-top: 5px;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  -webkit-transition: all 0.4s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.4s ease-in-out;&lt;br /&gt;
  transition: all 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
.loader-left {&lt;br /&gt;
  -webkit-transform: translateX(-40px);&lt;br /&gt;
  -moz-transform: translateX(-40px);&lt;br /&gt;
  -o-transform: translateX(-40px);&lt;br /&gt;
  transform: translateX(-40px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-right {&lt;br /&gt;
  -webkit-transform: translateX(40px);&lt;br /&gt;
  -moz-transform: translateX(40px);&lt;br /&gt;
  -o-transform: translateX(40px);&lt;br /&gt;
  transform: translateX(40px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-up {&lt;br /&gt;
  -webkit-transform: translateY(-80px);&lt;br /&gt;
  -moz-transform: translateY(-80px);&lt;br /&gt;
  -o-transform: translateY(-80px);&lt;br /&gt;
  transform: translateY(-80px);&lt;br /&gt;
  opacity: 0!important;&lt;br /&gt;
}&lt;br /&gt;
.loader-down {&lt;br /&gt;
  -webkit-transform: translateY(80px);&lt;br /&gt;
  -moz-transform: translateY(80px);&lt;br /&gt;
  -o-transform: translateY(80px);&lt;br /&gt;
  transform: translateY(80px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-hide {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  width: 30px;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 4px solid #Fff;&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  animation: loader 2s infinite ease;&lt;br /&gt;
}&lt;br /&gt;
.loader-inner {&lt;br /&gt;
  vertical-align: top;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  animation: loader-inner 2s infinite ease-in;&lt;br /&gt;
}&lt;br /&gt;
.loader-animation {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.svg-loader {&lt;br /&gt;
  margin: 0px auto;&lt;br /&gt;
  margin-bottom: -30px;&lt;br /&gt;
  display: block;&lt;br /&gt;
  -webkit-animation: svg-rotate 4000ms linear infinite;&lt;br /&gt;
  animation: svg-rotate 4000ms linear infinite;&lt;br /&gt;
}&lt;br /&gt;
.svg-loader circle {&lt;br /&gt;
  fill: transparent;&lt;br /&gt;
  stroke: #ffffff;&lt;br /&gt;
  stroke-width: 4;&lt;br /&gt;
  stroke-linecap: round;&lt;br /&gt;
  stroke-dasharray: 0, 301.59289;&lt;br /&gt;
  -webkit-animation: stroke-dash 2000ms linear infinite, stroke-width 2000ms linear infinite, stroke-color 8000ms steps(4) infinite;&lt;br /&gt;
  animation: stroke-dash 2000ms linear infinite, stroke-width 2000ms linear infinite, stroke-color 8000ms steps(4) infinite;&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes svg-rotate {&lt;br /&gt;
  to {&lt;br /&gt;
    -webkit-transform: rotate(360deg);&lt;br /&gt;
    transform: rotate(360deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes svg-rotate {&lt;br /&gt;
  to {&lt;br /&gt;
    -webkit-transform: rotate(360deg);&lt;br /&gt;
    transform: rotate(360deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-width {&lt;br /&gt;
  0%,&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-width: 0;&lt;br /&gt;
  }&lt;br /&gt;
  45%,&lt;br /&gt;
  55% {&lt;br /&gt;
    stroke-width: 2;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-width: 4;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-width {&lt;br /&gt;
  0%,&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-width: 0;&lt;br /&gt;
  }&lt;br /&gt;
  45%,&lt;br /&gt;
  55% {&lt;br /&gt;
    stroke-width: 2;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-width: 4;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-dash {&lt;br /&gt;
  0% {&lt;br /&gt;
    stroke-dasharray: 0, 301.59289;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 0;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 301.59289;&lt;br /&gt;
    stroke-dashoffset: -301.59289;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-dash {&lt;br /&gt;
  0% {&lt;br /&gt;
    stroke-dasharray: 0, 301.59289;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 0;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 301.59289;&lt;br /&gt;
    stroke-dashoffset: -301.59289;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-color {&lt;br /&gt;
  from {&lt;br /&gt;
    stroke: #ffffff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-color {&lt;br /&gt;
  from {&lt;br /&gt;
    stroke: #ffffff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
JavaScript&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Begin - Window Load&lt;br /&gt;
$(window).load(function(){&lt;br /&gt;
&lt;br /&gt;
  //Page Loader&lt;br /&gt;
  setTimeout(function(){&lt;br /&gt;
    $(&amp;#039;#loader-name&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    $(&amp;#039;#loader-job&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    $(&amp;#039;#loader-animation&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    return false;&lt;br /&gt;
  }, 500);&lt;br /&gt;
  setTimeout(function(){&lt;br /&gt;
    $(&amp;#039;#page-loader&amp;#039;).addClass(&amp;#039;loader-out&amp;#039;);&lt;br /&gt;
    return false;&lt;br /&gt;
  }, 1100);&lt;br /&gt;
  $(&amp;#039;#page-loader&amp;#039;).delay(1600).fadeOut(10);&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Page_Loader_-_Beispiele&amp;diff=26063</id>
		<title>Page Loader - Beispiele</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Page_Loader_-_Beispiele&amp;diff=26063"/>
		<updated>2022-04-24T09:03:00Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Beispiel 1 jquery mini-modernizr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&lt;br /&gt;
&lt;br /&gt;
== Beispiel 1 jquery mini-modernizr==&lt;br /&gt;
&lt;br /&gt;
1. Add a div just after &amp;lt;body&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Direkt nach &amp;lt;body&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;pl-icon&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.no-js #loader { display: none;  }&lt;br /&gt;
.js #loader { display: block; position: absolute; left: 100px; top: 0; }&lt;br /&gt;
.pl-icon {&lt;br /&gt;
	position: fixed;&lt;br /&gt;
	left: 0px;&lt;br /&gt;
	top: 0px;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	z-index: 9999;&lt;br /&gt;
	background: url(https://smallenvelop.com/wp-content/uploads/2014/08/Preloader_11.gif) center no-repeat #fff;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Mini Modernizr&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Feature_Detection#Mini_Modernizer_.28JS.2C_Touch.29&lt;br /&gt;
&lt;br /&gt;
4. Loader Script (jQuery)Now add some jQuery to show the pre-loading icon when the page is loading and hide when it has finished loading.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Wait for window load&lt;br /&gt;
$(window).load(function() {&lt;br /&gt;
	// Animate loader off screen&lt;br /&gt;
	$(&amp;quot;.pl-icon&amp;quot;).fadeOut(&amp;quot;slow&amp;quot;);;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel 2 ==&lt;br /&gt;
(Gyn Gap 2017) Mit SVG Zirkel, CSS Animation, Stilisiertes Logo und Vorhang rechts links. &lt;br /&gt;
&lt;br /&gt;
HTML - direkt hinter body Tag (Beispiel aus ProcessWire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Page Loader&lt;br /&gt;
  ========================================================= --&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;loader-container&amp;quot; id=&amp;quot;page-loader&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;loading-wrapper loading-wrapper-hide&amp;quot;&amp;gt;&lt;br /&gt;
    	&amp;lt;div class=&amp;quot;loader-animation&amp;quot; id=&amp;quot;loader-animation&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;svg class=&amp;quot;svg-loader&amp;quot; width=100 height=100&amp;gt;&lt;br /&gt;
  		  &amp;lt;circle cx=50 cy=50 r=25 /&amp;gt;&lt;br /&gt;
  		&amp;lt;/svg&amp;gt;&lt;br /&gt;
    	&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Edit With Your Name --&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;loader-name&amp;quot; id=&amp;quot;loader-name&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;img src=&amp;quot;&amp;lt;?php echo $config-&amp;gt;urls-&amp;gt;templates?&amp;gt;img/logo-negative.png&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;!-- /Edit With Your Name --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;!-- /End of Page loader&lt;br /&gt;
  ========================================================= --&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* ==========================================================&lt;br /&gt;
! Page Loader&lt;br /&gt;
========================================================== */&lt;br /&gt;
#page-loader {&lt;br /&gt;
  display: none;&lt;br /&gt;
  visibility: hidden;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  z-index: 9999;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  font-family: &amp;#039;Gilroy-Light&amp;#039;, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  #page-loader {&lt;br /&gt;
    display: block;&lt;br /&gt;
    visibility: visible;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#page-loader:before {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  background: #333333;&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
#page-loader:after {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  background: #333333;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
.loader-out {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-out:before {&lt;br /&gt;
  transform: translateX(-600px);&lt;br /&gt;
  -moz-transform: translateX(-600px);&lt;br /&gt;
  -webkit-transform: translateX(-600px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-out:after {&lt;br /&gt;
  transform: translateX(600px);&lt;br /&gt;
  -moz-transform: translateX(600px);&lt;br /&gt;
  -webkit-transform: translateX(600px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loading-wrapper {&lt;br /&gt;
  width: 250px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  margin-top: -130px;&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  margin-left: -125px;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  z-index: 9;&lt;br /&gt;
  transform: translateY(0px);&lt;br /&gt;
  -moz-transform: translateY(0px);&lt;br /&gt;
  -webkit-transform: translateY(0px);&lt;br /&gt;
}&lt;br /&gt;
.loading-wrapper-hide {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  transform: translateY(-20px);&lt;br /&gt;
  -moz-transform: translateY(-20px);&lt;br /&gt;
  -webkit-transform: translateY(-20px);&lt;br /&gt;
}&lt;br /&gt;
.tp-loader {&lt;br /&gt;
  z-index: 10000;&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
.loader-name {&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  opacity: 0.8;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  letter-spacing: 0px;&lt;br /&gt;
  padding-left: 2px;&lt;br /&gt;
  padding-right: 2px;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  margin-top: 45px;&lt;br /&gt;
  -webkit-transition: all 0.4s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.4s ease-in-out;&lt;br /&gt;
  transition: all 0.4s ease-in-out;&lt;br /&gt;
  margin-bottom: 35px;&lt;br /&gt;
}&lt;br /&gt;
.loader-name img {&lt;br /&gt;
  max-width: 230px;&lt;br /&gt;
}&lt;br /&gt;
.loader-job {&lt;br /&gt;
  border: 1px solid #ffffff;&lt;br /&gt;
  padding: 5px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-weight: 200;&lt;br /&gt;
  margin-top: 5px;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  -webkit-transition: all 0.4s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.4s ease-in-out;&lt;br /&gt;
  transition: all 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
.loader-left {&lt;br /&gt;
  -webkit-transform: translateX(-40px);&lt;br /&gt;
  -moz-transform: translateX(-40px);&lt;br /&gt;
  -o-transform: translateX(-40px);&lt;br /&gt;
  transform: translateX(-40px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-right {&lt;br /&gt;
  -webkit-transform: translateX(40px);&lt;br /&gt;
  -moz-transform: translateX(40px);&lt;br /&gt;
  -o-transform: translateX(40px);&lt;br /&gt;
  transform: translateX(40px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-up {&lt;br /&gt;
  -webkit-transform: translateY(-80px);&lt;br /&gt;
  -moz-transform: translateY(-80px);&lt;br /&gt;
  -o-transform: translateY(-80px);&lt;br /&gt;
  transform: translateY(-80px);&lt;br /&gt;
  opacity: 0!important;&lt;br /&gt;
}&lt;br /&gt;
.loader-down {&lt;br /&gt;
  -webkit-transform: translateY(80px);&lt;br /&gt;
  -moz-transform: translateY(80px);&lt;br /&gt;
  -o-transform: translateY(80px);&lt;br /&gt;
  transform: translateY(80px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-hide {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  width: 30px;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 4px solid #Fff;&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  animation: loader 2s infinite ease;&lt;br /&gt;
}&lt;br /&gt;
.loader-inner {&lt;br /&gt;
  vertical-align: top;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  animation: loader-inner 2s infinite ease-in;&lt;br /&gt;
}&lt;br /&gt;
.loader-animation {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.svg-loader {&lt;br /&gt;
  margin: 0px auto;&lt;br /&gt;
  margin-bottom: -30px;&lt;br /&gt;
  display: block;&lt;br /&gt;
  -webkit-animation: svg-rotate 4000ms linear infinite;&lt;br /&gt;
  animation: svg-rotate 4000ms linear infinite;&lt;br /&gt;
}&lt;br /&gt;
.svg-loader circle {&lt;br /&gt;
  fill: transparent;&lt;br /&gt;
  stroke: #ffffff;&lt;br /&gt;
  stroke-width: 4;&lt;br /&gt;
  stroke-linecap: round;&lt;br /&gt;
  stroke-dasharray: 0, 301.59289;&lt;br /&gt;
  -webkit-animation: stroke-dash 2000ms linear infinite, stroke-width 2000ms linear infinite, stroke-color 8000ms steps(4) infinite;&lt;br /&gt;
  animation: stroke-dash 2000ms linear infinite, stroke-width 2000ms linear infinite, stroke-color 8000ms steps(4) infinite;&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes svg-rotate {&lt;br /&gt;
  to {&lt;br /&gt;
    -webkit-transform: rotate(360deg);&lt;br /&gt;
    transform: rotate(360deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes svg-rotate {&lt;br /&gt;
  to {&lt;br /&gt;
    -webkit-transform: rotate(360deg);&lt;br /&gt;
    transform: rotate(360deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-width {&lt;br /&gt;
  0%,&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-width: 0;&lt;br /&gt;
  }&lt;br /&gt;
  45%,&lt;br /&gt;
  55% {&lt;br /&gt;
    stroke-width: 2;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-width: 4;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-width {&lt;br /&gt;
  0%,&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-width: 0;&lt;br /&gt;
  }&lt;br /&gt;
  45%,&lt;br /&gt;
  55% {&lt;br /&gt;
    stroke-width: 2;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-width: 4;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-dash {&lt;br /&gt;
  0% {&lt;br /&gt;
    stroke-dasharray: 0, 301.59289;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 0;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 301.59289;&lt;br /&gt;
    stroke-dashoffset: -301.59289;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-dash {&lt;br /&gt;
  0% {&lt;br /&gt;
    stroke-dasharray: 0, 301.59289;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 0;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 301.59289;&lt;br /&gt;
    stroke-dashoffset: -301.59289;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-color {&lt;br /&gt;
  from {&lt;br /&gt;
    stroke: #ffffff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-color {&lt;br /&gt;
  from {&lt;br /&gt;
    stroke: #ffffff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
JavaScript&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Begin - Window Load&lt;br /&gt;
$(window).load(function(){&lt;br /&gt;
&lt;br /&gt;
  //Page Loader&lt;br /&gt;
  setTimeout(function(){&lt;br /&gt;
    $(&amp;#039;#loader-name&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    $(&amp;#039;#loader-job&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    $(&amp;#039;#loader-animation&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    return false;&lt;br /&gt;
  }, 500);&lt;br /&gt;
  setTimeout(function(){&lt;br /&gt;
    $(&amp;#039;#page-loader&amp;#039;).addClass(&amp;#039;loader-out&amp;#039;);&lt;br /&gt;
    return false;&lt;br /&gt;
  }, 1100);&lt;br /&gt;
  $(&amp;#039;#page-loader&amp;#039;).delay(1600).fadeOut(10);&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Page_Loader_-_Beispiele&amp;diff=26062</id>
		<title>Page Loader - Beispiele</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Page_Loader_-_Beispiele&amp;diff=26062"/>
		<updated>2022-04-24T09:01:49Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Beispiel 1 jquery mini-modernizr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&lt;br /&gt;
&lt;br /&gt;
== Beispiel 1 jquery mini-modernizr==&lt;br /&gt;
&lt;br /&gt;
1. Add a div just after &amp;lt;body&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Direkt nach &amp;lt;body&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;pl-icon&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.no-js #loader { display: none;  }&lt;br /&gt;
.js #loader { display: block; position: absolute; left: 100px; top: 0; }&lt;br /&gt;
.pl-icon {&lt;br /&gt;
	position: fixed;&lt;br /&gt;
	left: 0px;&lt;br /&gt;
	top: 0px;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	z-index: 9999;&lt;br /&gt;
	background: url(https://smallenvelop.com/wp-content/uploads/2014/08/Preloader_11.gif) center no-repeat #fff;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Mini Modernizr&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Feature_Detection#Mini_Modernizer_.28JS.2C_Touch.29&lt;br /&gt;
&lt;br /&gt;
4. Loader Script (jQuery)Now add some jQuery to show the pre-loading icon when the page is loading and hide when it has finished loading.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Wait for window load&lt;br /&gt;
$(window).load(function() {&lt;br /&gt;
	// Animate loader off screen&lt;br /&gt;
	$(&amp;quot;.pl-icon&amp;quot;).fadeOut(&amp;quot;slow&amp;quot;);;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel 2 ==&lt;br /&gt;
(Gyn Gap 2017) Mit SVG Zirkel, CSS Animation, Stilisiertes Logo und Vorhang rechts links. &lt;br /&gt;
&lt;br /&gt;
HTML - direkt hinter body Tag (Beispiel aus ProcessWire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Page Loader&lt;br /&gt;
  ========================================================= --&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;loader-container&amp;quot; id=&amp;quot;page-loader&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;loading-wrapper loading-wrapper-hide&amp;quot;&amp;gt;&lt;br /&gt;
    	&amp;lt;div class=&amp;quot;loader-animation&amp;quot; id=&amp;quot;loader-animation&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;svg class=&amp;quot;svg-loader&amp;quot; width=100 height=100&amp;gt;&lt;br /&gt;
  		  &amp;lt;circle cx=50 cy=50 r=25 /&amp;gt;&lt;br /&gt;
  		&amp;lt;/svg&amp;gt;&lt;br /&gt;
    	&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Edit With Your Name --&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;loader-name&amp;quot; id=&amp;quot;loader-name&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;img src=&amp;quot;&amp;lt;?php echo $config-&amp;gt;urls-&amp;gt;templates?&amp;gt;img/logo-negative.png&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;!-- /Edit With Your Name --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;!-- /End of Page loader&lt;br /&gt;
  ========================================================= --&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* ==========================================================&lt;br /&gt;
! Page Loader&lt;br /&gt;
========================================================== */&lt;br /&gt;
#page-loader {&lt;br /&gt;
  display: none;&lt;br /&gt;
  visibility: hidden;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  z-index: 9999;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  font-family: &amp;#039;Gilroy-Light&amp;#039;, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  #page-loader {&lt;br /&gt;
    display: block;&lt;br /&gt;
    visibility: visible;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#page-loader:before {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  background: #333333;&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
#page-loader:after {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  background: #333333;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
.loader-out {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-out:before {&lt;br /&gt;
  transform: translateX(-600px);&lt;br /&gt;
  -moz-transform: translateX(-600px);&lt;br /&gt;
  -webkit-transform: translateX(-600px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-out:after {&lt;br /&gt;
  transform: translateX(600px);&lt;br /&gt;
  -moz-transform: translateX(600px);&lt;br /&gt;
  -webkit-transform: translateX(600px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loading-wrapper {&lt;br /&gt;
  width: 250px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  margin-top: -130px;&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  margin-left: -125px;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  z-index: 9;&lt;br /&gt;
  transform: translateY(0px);&lt;br /&gt;
  -moz-transform: translateY(0px);&lt;br /&gt;
  -webkit-transform: translateY(0px);&lt;br /&gt;
}&lt;br /&gt;
.loading-wrapper-hide {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  transform: translateY(-20px);&lt;br /&gt;
  -moz-transform: translateY(-20px);&lt;br /&gt;
  -webkit-transform: translateY(-20px);&lt;br /&gt;
}&lt;br /&gt;
.tp-loader {&lt;br /&gt;
  z-index: 10000;&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
.loader-name {&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  opacity: 0.8;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  letter-spacing: 0px;&lt;br /&gt;
  padding-left: 2px;&lt;br /&gt;
  padding-right: 2px;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  margin-top: 45px;&lt;br /&gt;
  -webkit-transition: all 0.4s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.4s ease-in-out;&lt;br /&gt;
  transition: all 0.4s ease-in-out;&lt;br /&gt;
  margin-bottom: 35px;&lt;br /&gt;
}&lt;br /&gt;
.loader-name img {&lt;br /&gt;
  max-width: 230px;&lt;br /&gt;
}&lt;br /&gt;
.loader-job {&lt;br /&gt;
  border: 1px solid #ffffff;&lt;br /&gt;
  padding: 5px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-weight: 200;&lt;br /&gt;
  margin-top: 5px;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  -webkit-transition: all 0.4s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.4s ease-in-out;&lt;br /&gt;
  transition: all 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
.loader-left {&lt;br /&gt;
  -webkit-transform: translateX(-40px);&lt;br /&gt;
  -moz-transform: translateX(-40px);&lt;br /&gt;
  -o-transform: translateX(-40px);&lt;br /&gt;
  transform: translateX(-40px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-right {&lt;br /&gt;
  -webkit-transform: translateX(40px);&lt;br /&gt;
  -moz-transform: translateX(40px);&lt;br /&gt;
  -o-transform: translateX(40px);&lt;br /&gt;
  transform: translateX(40px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-up {&lt;br /&gt;
  -webkit-transform: translateY(-80px);&lt;br /&gt;
  -moz-transform: translateY(-80px);&lt;br /&gt;
  -o-transform: translateY(-80px);&lt;br /&gt;
  transform: translateY(-80px);&lt;br /&gt;
  opacity: 0!important;&lt;br /&gt;
}&lt;br /&gt;
.loader-down {&lt;br /&gt;
  -webkit-transform: translateY(80px);&lt;br /&gt;
  -moz-transform: translateY(80px);&lt;br /&gt;
  -o-transform: translateY(80px);&lt;br /&gt;
  transform: translateY(80px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-hide {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  width: 30px;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 4px solid #Fff;&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  animation: loader 2s infinite ease;&lt;br /&gt;
}&lt;br /&gt;
.loader-inner {&lt;br /&gt;
  vertical-align: top;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  animation: loader-inner 2s infinite ease-in;&lt;br /&gt;
}&lt;br /&gt;
.loader-animation {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.svg-loader {&lt;br /&gt;
  margin: 0px auto;&lt;br /&gt;
  margin-bottom: -30px;&lt;br /&gt;
  display: block;&lt;br /&gt;
  -webkit-animation: svg-rotate 4000ms linear infinite;&lt;br /&gt;
  animation: svg-rotate 4000ms linear infinite;&lt;br /&gt;
}&lt;br /&gt;
.svg-loader circle {&lt;br /&gt;
  fill: transparent;&lt;br /&gt;
  stroke: #ffffff;&lt;br /&gt;
  stroke-width: 4;&lt;br /&gt;
  stroke-linecap: round;&lt;br /&gt;
  stroke-dasharray: 0, 301.59289;&lt;br /&gt;
  -webkit-animation: stroke-dash 2000ms linear infinite, stroke-width 2000ms linear infinite, stroke-color 8000ms steps(4) infinite;&lt;br /&gt;
  animation: stroke-dash 2000ms linear infinite, stroke-width 2000ms linear infinite, stroke-color 8000ms steps(4) infinite;&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes svg-rotate {&lt;br /&gt;
  to {&lt;br /&gt;
    -webkit-transform: rotate(360deg);&lt;br /&gt;
    transform: rotate(360deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes svg-rotate {&lt;br /&gt;
  to {&lt;br /&gt;
    -webkit-transform: rotate(360deg);&lt;br /&gt;
    transform: rotate(360deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-width {&lt;br /&gt;
  0%,&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-width: 0;&lt;br /&gt;
  }&lt;br /&gt;
  45%,&lt;br /&gt;
  55% {&lt;br /&gt;
    stroke-width: 2;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-width: 4;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-width {&lt;br /&gt;
  0%,&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-width: 0;&lt;br /&gt;
  }&lt;br /&gt;
  45%,&lt;br /&gt;
  55% {&lt;br /&gt;
    stroke-width: 2;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-width: 4;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-dash {&lt;br /&gt;
  0% {&lt;br /&gt;
    stroke-dasharray: 0, 301.59289;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 0;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 301.59289;&lt;br /&gt;
    stroke-dashoffset: -301.59289;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-dash {&lt;br /&gt;
  0% {&lt;br /&gt;
    stroke-dasharray: 0, 301.59289;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 0;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 301.59289;&lt;br /&gt;
    stroke-dashoffset: -301.59289;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-color {&lt;br /&gt;
  from {&lt;br /&gt;
    stroke: #ffffff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-color {&lt;br /&gt;
  from {&lt;br /&gt;
    stroke: #ffffff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
JavaScript&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Begin - Window Load&lt;br /&gt;
$(window).load(function(){&lt;br /&gt;
&lt;br /&gt;
  //Page Loader&lt;br /&gt;
  setTimeout(function(){&lt;br /&gt;
    $(&amp;#039;#loader-name&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    $(&amp;#039;#loader-job&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    $(&amp;#039;#loader-animation&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    return false;&lt;br /&gt;
  }, 500);&lt;br /&gt;
  setTimeout(function(){&lt;br /&gt;
    $(&amp;#039;#page-loader&amp;#039;).addClass(&amp;#039;loader-out&amp;#039;);&lt;br /&gt;
    return false;&lt;br /&gt;
  }, 1100);&lt;br /&gt;
  $(&amp;#039;#page-loader&amp;#039;).delay(1600).fadeOut(10);&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Page_Loader_-_Beispiele&amp;diff=26061</id>
		<title>Page Loader - Beispiele</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Page_Loader_-_Beispiele&amp;diff=26061"/>
		<updated>2022-04-24T09:01:25Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&lt;br /&gt;
&lt;br /&gt;
== Beispiel 1 jquery mini-modernizr==&lt;br /&gt;
&lt;br /&gt;
1. Add a div just after &amp;lt;body&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Direkt nach &amp;lt;body&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;pl-icon&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.no-js #loader { display: none;  }&lt;br /&gt;
.js #loader { display: block; position: absolute; left: 100px; top: 0; }&lt;br /&gt;
.pl-icon {&lt;br /&gt;
	position: fixed;&lt;br /&gt;
	left: 0px;&lt;br /&gt;
	top: 0px;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	z-index: 9999;&lt;br /&gt;
	background: url(https://smallenvelop.com/wp-content/uploads/2014/08/Preloader_11.gif) center no-repeat #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
3. Mini Modernizr&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Feature_Detection#Mini_Modernizer_.28JS.2C_Touch.29&lt;br /&gt;
&lt;br /&gt;
4. Loader Script (jQuery)Now add some jQuery to show the pre-loading icon when the page is loading and hide when it has finished loading.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Wait for window load&lt;br /&gt;
$(window).load(function() {&lt;br /&gt;
	// Animate loader off screen&lt;br /&gt;
	$(&amp;quot;.pl-icon&amp;quot;).fadeOut(&amp;quot;slow&amp;quot;);;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel 2 ==&lt;br /&gt;
(Gyn Gap 2017) Mit SVG Zirkel, CSS Animation, Stilisiertes Logo und Vorhang rechts links. &lt;br /&gt;
&lt;br /&gt;
HTML - direkt hinter body Tag (Beispiel aus ProcessWire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Page Loader&lt;br /&gt;
  ========================================================= --&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;loader-container&amp;quot; id=&amp;quot;page-loader&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;loading-wrapper loading-wrapper-hide&amp;quot;&amp;gt;&lt;br /&gt;
    	&amp;lt;div class=&amp;quot;loader-animation&amp;quot; id=&amp;quot;loader-animation&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;svg class=&amp;quot;svg-loader&amp;quot; width=100 height=100&amp;gt;&lt;br /&gt;
  		  &amp;lt;circle cx=50 cy=50 r=25 /&amp;gt;&lt;br /&gt;
  		&amp;lt;/svg&amp;gt;&lt;br /&gt;
    	&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Edit With Your Name --&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;loader-name&amp;quot; id=&amp;quot;loader-name&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;img src=&amp;quot;&amp;lt;?php echo $config-&amp;gt;urls-&amp;gt;templates?&amp;gt;img/logo-negative.png&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;!-- /Edit With Your Name --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;!-- /End of Page loader&lt;br /&gt;
  ========================================================= --&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* ==========================================================&lt;br /&gt;
! Page Loader&lt;br /&gt;
========================================================== */&lt;br /&gt;
#page-loader {&lt;br /&gt;
  display: none;&lt;br /&gt;
  visibility: hidden;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  z-index: 9999;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  font-family: &amp;#039;Gilroy-Light&amp;#039;, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  #page-loader {&lt;br /&gt;
    display: block;&lt;br /&gt;
    visibility: visible;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#page-loader:before {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  background: #333333;&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
#page-loader:after {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  background: #333333;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
.loader-out {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-out:before {&lt;br /&gt;
  transform: translateX(-600px);&lt;br /&gt;
  -moz-transform: translateX(-600px);&lt;br /&gt;
  -webkit-transform: translateX(-600px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-out:after {&lt;br /&gt;
  transform: translateX(600px);&lt;br /&gt;
  -moz-transform: translateX(600px);&lt;br /&gt;
  -webkit-transform: translateX(600px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loading-wrapper {&lt;br /&gt;
  width: 250px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  margin-top: -130px;&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  margin-left: -125px;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  z-index: 9;&lt;br /&gt;
  transform: translateY(0px);&lt;br /&gt;
  -moz-transform: translateY(0px);&lt;br /&gt;
  -webkit-transform: translateY(0px);&lt;br /&gt;
}&lt;br /&gt;
.loading-wrapper-hide {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  transform: translateY(-20px);&lt;br /&gt;
  -moz-transform: translateY(-20px);&lt;br /&gt;
  -webkit-transform: translateY(-20px);&lt;br /&gt;
}&lt;br /&gt;
.tp-loader {&lt;br /&gt;
  z-index: 10000;&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
.loader-name {&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  opacity: 0.8;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  letter-spacing: 0px;&lt;br /&gt;
  padding-left: 2px;&lt;br /&gt;
  padding-right: 2px;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  margin-top: 45px;&lt;br /&gt;
  -webkit-transition: all 0.4s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.4s ease-in-out;&lt;br /&gt;
  transition: all 0.4s ease-in-out;&lt;br /&gt;
  margin-bottom: 35px;&lt;br /&gt;
}&lt;br /&gt;
.loader-name img {&lt;br /&gt;
  max-width: 230px;&lt;br /&gt;
}&lt;br /&gt;
.loader-job {&lt;br /&gt;
  border: 1px solid #ffffff;&lt;br /&gt;
  padding: 5px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-weight: 200;&lt;br /&gt;
  margin-top: 5px;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  -webkit-transition: all 0.4s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.4s ease-in-out;&lt;br /&gt;
  transition: all 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
.loader-left {&lt;br /&gt;
  -webkit-transform: translateX(-40px);&lt;br /&gt;
  -moz-transform: translateX(-40px);&lt;br /&gt;
  -o-transform: translateX(-40px);&lt;br /&gt;
  transform: translateX(-40px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-right {&lt;br /&gt;
  -webkit-transform: translateX(40px);&lt;br /&gt;
  -moz-transform: translateX(40px);&lt;br /&gt;
  -o-transform: translateX(40px);&lt;br /&gt;
  transform: translateX(40px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-up {&lt;br /&gt;
  -webkit-transform: translateY(-80px);&lt;br /&gt;
  -moz-transform: translateY(-80px);&lt;br /&gt;
  -o-transform: translateY(-80px);&lt;br /&gt;
  transform: translateY(-80px);&lt;br /&gt;
  opacity: 0!important;&lt;br /&gt;
}&lt;br /&gt;
.loader-down {&lt;br /&gt;
  -webkit-transform: translateY(80px);&lt;br /&gt;
  -moz-transform: translateY(80px);&lt;br /&gt;
  -o-transform: translateY(80px);&lt;br /&gt;
  transform: translateY(80px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-hide {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  width: 30px;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 4px solid #Fff;&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  animation: loader 2s infinite ease;&lt;br /&gt;
}&lt;br /&gt;
.loader-inner {&lt;br /&gt;
  vertical-align: top;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  animation: loader-inner 2s infinite ease-in;&lt;br /&gt;
}&lt;br /&gt;
.loader-animation {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.svg-loader {&lt;br /&gt;
  margin: 0px auto;&lt;br /&gt;
  margin-bottom: -30px;&lt;br /&gt;
  display: block;&lt;br /&gt;
  -webkit-animation: svg-rotate 4000ms linear infinite;&lt;br /&gt;
  animation: svg-rotate 4000ms linear infinite;&lt;br /&gt;
}&lt;br /&gt;
.svg-loader circle {&lt;br /&gt;
  fill: transparent;&lt;br /&gt;
  stroke: #ffffff;&lt;br /&gt;
  stroke-width: 4;&lt;br /&gt;
  stroke-linecap: round;&lt;br /&gt;
  stroke-dasharray: 0, 301.59289;&lt;br /&gt;
  -webkit-animation: stroke-dash 2000ms linear infinite, stroke-width 2000ms linear infinite, stroke-color 8000ms steps(4) infinite;&lt;br /&gt;
  animation: stroke-dash 2000ms linear infinite, stroke-width 2000ms linear infinite, stroke-color 8000ms steps(4) infinite;&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes svg-rotate {&lt;br /&gt;
  to {&lt;br /&gt;
    -webkit-transform: rotate(360deg);&lt;br /&gt;
    transform: rotate(360deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes svg-rotate {&lt;br /&gt;
  to {&lt;br /&gt;
    -webkit-transform: rotate(360deg);&lt;br /&gt;
    transform: rotate(360deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-width {&lt;br /&gt;
  0%,&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-width: 0;&lt;br /&gt;
  }&lt;br /&gt;
  45%,&lt;br /&gt;
  55% {&lt;br /&gt;
    stroke-width: 2;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-width: 4;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-width {&lt;br /&gt;
  0%,&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-width: 0;&lt;br /&gt;
  }&lt;br /&gt;
  45%,&lt;br /&gt;
  55% {&lt;br /&gt;
    stroke-width: 2;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-width: 4;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-dash {&lt;br /&gt;
  0% {&lt;br /&gt;
    stroke-dasharray: 0, 301.59289;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 0;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 301.59289;&lt;br /&gt;
    stroke-dashoffset: -301.59289;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-dash {&lt;br /&gt;
  0% {&lt;br /&gt;
    stroke-dasharray: 0, 301.59289;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 0;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 301.59289;&lt;br /&gt;
    stroke-dashoffset: -301.59289;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-color {&lt;br /&gt;
  from {&lt;br /&gt;
    stroke: #ffffff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-color {&lt;br /&gt;
  from {&lt;br /&gt;
    stroke: #ffffff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
JavaScript&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Begin - Window Load&lt;br /&gt;
$(window).load(function(){&lt;br /&gt;
&lt;br /&gt;
  //Page Loader&lt;br /&gt;
  setTimeout(function(){&lt;br /&gt;
    $(&amp;#039;#loader-name&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    $(&amp;#039;#loader-job&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    $(&amp;#039;#loader-animation&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    return false;&lt;br /&gt;
  }, 500);&lt;br /&gt;
  setTimeout(function(){&lt;br /&gt;
    $(&amp;#039;#page-loader&amp;#039;).addClass(&amp;#039;loader-out&amp;#039;);&lt;br /&gt;
    return false;&lt;br /&gt;
  }, 1100);&lt;br /&gt;
  $(&amp;#039;#page-loader&amp;#039;).delay(1600).fadeOut(10);&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Feature_Detection&amp;diff=26060</id>
		<title>JavaScript - Feature Detection</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Feature_Detection&amp;diff=26060"/>
		<updated>2022-04-24T08:48:02Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* SVG */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://kulturbanause.de/blog/feature-detection-ohne-modernizr/#comments&lt;br /&gt;
 https://gist.github.com/tomblanchard/11290882#file-mini-modernizr-html&lt;br /&gt;
&lt;br /&gt;
Moderne Websites setzen fast ausnahmslos das Konzept »Feature Detection« ein, um in Erfahrung zu bringen, welche Techniken oder Funktionen von einem Browser unterstützt werden. Dazu wird i.d.R. die Feature Detection-Library Modernizr eingesetzt. Bei vielen Projekten halte ich Modernizr jedoch für überdimensioniert, da man häufig nur prüfen möchte ob JavaScript aktiviert ist, ob der Anwender einen Touch-Screen benutzt und ob SVGs eingesetzt werden können. In diesem Beitrag möchte ich daher einige JavaScript-Snippets archivieren, mit denen ihr die notwendigen Infos in Erfahrung bringen könnt ohne dafür die ganze Modernizr-Bibliothek laden zu müssen. In Zukunft werden in diesem Zusammenhang die Feature Queries von CSS sicher auch sehr interessant. (Quelle: Kulturbanause s.o.)&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
=== Mini Modernizer (JS, Touch) ===&lt;br /&gt;
JavaScript überprüfen, Touchscreen überprüfen. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ersetzt folgende Klassen auf dem &amp;lt;html&amp;gt; Element:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 no-js =&amp;gt; js &lt;br /&gt;
 no-touch =&amp;gt; touch &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
!function(a,b){&amp;quot;use strict&amp;quot;;b.documentElement.className=b.documentElement.className.replace(&amp;quot;no-js&amp;quot;,&amp;quot;js&amp;quot;),(&amp;quot;ontouchstart&amp;quot;in window||window.DocumentTouch&amp;amp;&amp;amp;document instanceof DocumentTouch)&amp;amp;&amp;amp;(document.documentElement.className=document.documentElement.className.replace(&amp;quot;no-touch&amp;quot;,&amp;quot;touch&amp;quot;))}(window,document);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SVG ===&lt;br /&gt;
Quelle: Kulturbanause s.o.&lt;br /&gt;
==== Testen ob svg unterstützt wird ====&lt;br /&gt;
Prüfen ob SVG unterstützt wird&lt;br /&gt;
&lt;br /&gt;
Um herauszufinden, ob SVG unterstützt wird, reicht folgender Code aus. Auch in diesem Fall fügen wir die Klasse .svg bzw. .no-svg in den &amp;lt;html&amp;gt;-Tag ein.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Prüfe ob SVGs dargestellt werden können&lt;br /&gt;
if(!document.createElement(&amp;#039;svg&amp;#039;).getAttributeNS){&lt;br /&gt;
  $(&amp;#039;html&amp;#039;).addClass(&amp;#039;no-svg&amp;#039;);&lt;br /&gt;
} else {&lt;br /&gt;
  $(&amp;#039;html&amp;#039;).addClass(&amp;#039;svg&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== .svg mit .png ersetzen ====&lt;br /&gt;
Die Dateiendung *.svg in &amp;lt;img&amp;gt;-Tags durch *.png ersetzen, sofern der Browser keine SVGs darstellen kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Prüfe ob SVGs dargestellt werden können&lt;br /&gt;
if(!document.createElement(&amp;#039;svg&amp;#039;).getAttributeNS){&lt;br /&gt;
  $(&amp;#039;html&amp;#039;).addClass(&amp;#039;no-svg&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  // Schreibe im HTML-Markup die Dateiendung *.svg auf *.png um.&lt;br /&gt;
  $(&amp;#039;img[src$=&amp;quot;svg&amp;quot;]&amp;#039;).attr(&amp;#039;src&amp;#039;, function() {&lt;br /&gt;
    return $(this).attr(&amp;#039;src&amp;#039;).replace(&amp;#039;.svg&amp;#039;, &amp;#039;.png&amp;#039;);&lt;br /&gt;
  });&lt;br /&gt;
} else {&lt;br /&gt;
  $(&amp;#039;html&amp;#039;).addClass(&amp;#039;svg&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Feature_Detection&amp;diff=26059</id>
		<title>JavaScript - Feature Detection</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Feature_Detection&amp;diff=26059"/>
		<updated>2022-04-24T08:45:43Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Mini Modernizer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://kulturbanause.de/blog/feature-detection-ohne-modernizr/#comments&lt;br /&gt;
 https://gist.github.com/tomblanchard/11290882#file-mini-modernizr-html&lt;br /&gt;
&lt;br /&gt;
Moderne Websites setzen fast ausnahmslos das Konzept »Feature Detection« ein, um in Erfahrung zu bringen, welche Techniken oder Funktionen von einem Browser unterstützt werden. Dazu wird i.d.R. die Feature Detection-Library Modernizr eingesetzt. Bei vielen Projekten halte ich Modernizr jedoch für überdimensioniert, da man häufig nur prüfen möchte ob JavaScript aktiviert ist, ob der Anwender einen Touch-Screen benutzt und ob SVGs eingesetzt werden können. In diesem Beitrag möchte ich daher einige JavaScript-Snippets archivieren, mit denen ihr die notwendigen Infos in Erfahrung bringen könnt ohne dafür die ganze Modernizr-Bibliothek laden zu müssen. In Zukunft werden in diesem Zusammenhang die Feature Queries von CSS sicher auch sehr interessant. (Quelle: Kulturbanause s.o.)&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
=== Mini Modernizer (JS, Touch) ===&lt;br /&gt;
JavaScript überprüfen, Touchscreen überprüfen. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ersetzt folgende Klassen auf dem &amp;lt;html&amp;gt; Element:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 no-js =&amp;gt; js &lt;br /&gt;
 no-touch =&amp;gt; touch &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
!function(a,b){&amp;quot;use strict&amp;quot;;b.documentElement.className=b.documentElement.className.replace(&amp;quot;no-js&amp;quot;,&amp;quot;js&amp;quot;),(&amp;quot;ontouchstart&amp;quot;in window||window.DocumentTouch&amp;amp;&amp;amp;document instanceof DocumentTouch)&amp;amp;&amp;amp;(document.documentElement.className=document.documentElement.className.replace(&amp;quot;no-touch&amp;quot;,&amp;quot;touch&amp;quot;))}(window,document);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SVG ===&lt;br /&gt;
Quelle: Kulturbanause s.o.&lt;br /&gt;
&lt;br /&gt;
Die Dateiendung *.svg in &amp;lt;img&amp;gt;-Tags durch *.png ersetzen, sofern der Browser keine SVGs darstellen kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Prüfe ob SVGs dargestellt werden können&lt;br /&gt;
if(!document.createElement(&amp;#039;svg&amp;#039;).getAttributeNS){&lt;br /&gt;
  $(&amp;#039;html&amp;#039;).addClass(&amp;#039;no-svg&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  // Schreibe im HTML-Markup die Dateiendung *.svg auf *.png um.&lt;br /&gt;
  $(&amp;#039;img[src$=&amp;quot;svg&amp;quot;]&amp;#039;).attr(&amp;#039;src&amp;#039;, function() {&lt;br /&gt;
    return $(this).attr(&amp;#039;src&amp;#039;).replace(&amp;#039;.svg&amp;#039;, &amp;#039;.png&amp;#039;);&lt;br /&gt;
  });&lt;br /&gt;
} else {&lt;br /&gt;
  $(&amp;#039;html&amp;#039;).addClass(&amp;#039;svg&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Feature_Detection&amp;diff=26058</id>
		<title>JavaScript - Feature Detection</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Feature_Detection&amp;diff=26058"/>
		<updated>2022-04-24T08:42:06Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: Die Seite wurde neu angelegt: „ https://kulturbanause.de/blog/feature-detection-ohne-modernizr/#comments  https://gist.github.com/tomblanchard/11290882#file-mini-modernizr-html  Moderne Webs…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://kulturbanause.de/blog/feature-detection-ohne-modernizr/#comments&lt;br /&gt;
 https://gist.github.com/tomblanchard/11290882#file-mini-modernizr-html&lt;br /&gt;
&lt;br /&gt;
Moderne Websites setzen fast ausnahmslos das Konzept »Feature Detection« ein, um in Erfahrung zu bringen, welche Techniken oder Funktionen von einem Browser unterstützt werden. Dazu wird i.d.R. die Feature Detection-Library Modernizr eingesetzt. Bei vielen Projekten halte ich Modernizr jedoch für überdimensioniert, da man häufig nur prüfen möchte ob JavaScript aktiviert ist, ob der Anwender einen Touch-Screen benutzt und ob SVGs eingesetzt werden können. In diesem Beitrag möchte ich daher einige JavaScript-Snippets archivieren, mit denen ihr die notwendigen Infos in Erfahrung bringen könnt ohne dafür die ganze Modernizr-Bibliothek laden zu müssen. In Zukunft werden in diesem Zusammenhang die Feature Queries von CSS sicher auch sehr interessant. (Quelle: Kulturbanause s.o.)&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
=== Mini Modernizer ===&lt;br /&gt;
JavaScript überprüfen, Touchscreen überprüfen. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ersetzt folgende Klassen auf dem &amp;lt;html&amp;gt; Element:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 no-js =&amp;gt; js &lt;br /&gt;
 no-touch =&amp;gt; touch &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
!function(a,b){&amp;quot;use strict&amp;quot;;b.documentElement.className=b.documentElement.className.replace(&amp;quot;no-js&amp;quot;,&amp;quot;js&amp;quot;),(&amp;quot;ontouchstart&amp;quot;in window||window.DocumentTouch&amp;amp;&amp;amp;document instanceof DocumentTouch)&amp;amp;&amp;amp;(document.documentElement.className=document.documentElement.className.replace(&amp;quot;no-touch&amp;quot;,&amp;quot;touch&amp;quot;))}(window,document);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&amp;diff=26057</id>
		<title>JavaScript - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&amp;diff=26057"/>
		<updated>2022-04-24T08:36:00Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Must Know */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
Siehe auch&lt;br /&gt;
&lt;br /&gt;
 [[JavaScript - Plugins]]&lt;br /&gt;
 [[JavaScripts - Basics]]&lt;br /&gt;
 [[JavaScript - DOM Manipulation]]&lt;br /&gt;
 [[jQuery - Snippets]]&lt;br /&gt;
 [[Browser Fallbacks]]&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JQuery_vs_Vanilla_JavaScript&lt;br /&gt;
&lt;br /&gt;
== Sonderzeichen in Alert-Meldungen ==&lt;br /&gt;
&lt;br /&gt;
Oft sieht man im Web sehr hässliche alert-Meldungen , in denen die Umlaute nicht korrekt dargestellt sind. Das liegt auch daran, dass unterschiedliche Betriebssystem Zeichen unterschiedlich kodieren. Damit so etwas möglichst vermieden wird, sollte man solche Meldungen mit alert(unescape(&amp;quot;...&amp;quot;)) anzeigen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
 alert(unescape(&amp;quot;So was d%E4mliches%21&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
Zeichen	so verschlüsseln:&lt;br /&gt;
\	\\&lt;br /&gt;
&amp;quot;	\&amp;quot;&lt;br /&gt;
&amp;#039;	\&amp;#039;&lt;br /&gt;
Zeilenumbruch	\n&lt;br /&gt;
Wagenrücklauf	\r&lt;br /&gt;
(Den Unterschied zum Zeilenumbruch habe ich auch noch nicht begriffen.)&lt;br /&gt;
Tabulator	\t&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zeichen	so:&lt;br /&gt;
Ä	%C4&lt;br /&gt;
Ö	%D6&lt;br /&gt;
Ü	%DC&lt;br /&gt;
ä	%E4&lt;br /&gt;
ö	%F6&lt;br /&gt;
ü	%FC&lt;br /&gt;
ß	%DF&lt;br /&gt;
€	%u20AC&lt;br /&gt;
$	%24&lt;br /&gt;
%	%25&lt;br /&gt;
&lt;br /&gt;
Generier Tool:&lt;br /&gt;
http://www.salesianer.de/util/alert-umlaute.html&lt;br /&gt;
&lt;br /&gt;
== Teil einer Seite drucken ==&lt;br /&gt;
Old School JavaScript, sollte sich  aber relativ einfach auf jQuery übertragen lassen.&lt;br /&gt;
&lt;br /&gt;
Quelle: http://www.webstool.de/de/tipps_down_druck3.html Zugriff: 10/2011&lt;br /&gt;
&lt;br /&gt;
Mit einem einfachen JavaScript lässt sich mit relativ wenig Aufwand eine druckerfreundliche Version einer Webseite bei Bedarf erzeugen.&lt;br /&gt;
&lt;br /&gt;
Das JavaScript wird nachstehend vorgestellt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function ausgabe()&lt;br /&gt;
{&lt;br /&gt;
var ref = document.getElementById(&amp;quot;auswahl&amp;quot;);&lt;br /&gt;
var ausgabe;&lt;br /&gt;
// nächste Zeile öffnet ein Fenster der Größe 800 x 600 Pixel&lt;br /&gt;
ausgabe=window.open(&amp;quot;#&amp;quot;,&amp;quot;fenster&amp;quot;,&amp;quot;width=800,height=600,resizable=yes,menubar=yes,left=50,top=50&amp;quot;);&lt;br /&gt;
ausgabe.document.open();&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;html&amp;gt;\n&amp;lt;head&amp;gt;\n&amp;lt;title&amp;gt;Druckversion&amp;lt;/title&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-1&amp;quot;&amp;gt;\n&amp;#039;);&lt;br /&gt;
// in der nächsten Zeile an das eigene Stylesheet anpassen&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;../css/design1.css&amp;quot;&amp;gt;\n&amp;lt;/head&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;body&amp;gt;\n&amp;lt;h1 align=&amp;quot;center&amp;quot;&amp;gt;&amp;amp;copy; web s tool - Partner f&amp;amp;uuml;r Ihren Internetauftritt&amp;lt;/h1&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;div&amp;gt;\n&amp;#039;);&lt;br /&gt;
// Ausgabe aller Inhalte mit der id = auswahl&lt;br /&gt;
while (ref!=null)&lt;br /&gt;
{&lt;br /&gt;
ausgabe.document.write(ref.innerHTML + &amp;#039;\n&amp;#039;);&lt;br /&gt;
ref = ref.nextSibling;&lt;br /&gt;
}&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;/div&amp;gt;\n&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;javascript:window.print()&amp;quot;&amp;gt;drucken&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;\n&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.close();&lt;br /&gt;
ausgabe.focus();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die externe Einbindung des JavaScripts erfolgt dabei z.B. im head-Bereich der Webseite über&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script language=&amp;quot;JavaScript&amp;quot; src=&amp;quot;../scripts/ausgabe4print.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Von entscheidender Bedeutung ist, dass auf der Seite das auszuwählende Objekt mit der id = &amp;quot;auswahl&amp;quot; (bitte bei Bedarf anpassen) versehen ist. Das auszuwählende Objekt kann dabei eine Tabelle oder ein div-Container sein.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf erfolgt z.B. durch den Link &amp;lt;a href=&amp;quot;javascript:ausgabe();&amp;quot;&amp;gt; Druckversion&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fehler Behandlung ==&lt;br /&gt;
=== Prüfen ob ein Element existiert (normales JavaScript)===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function isElement(obj) {&lt;br /&gt;
  try {&lt;br /&gt;
    //Using W3 DOM2 (works for FF, Opera and Chrom)&lt;br /&gt;
    return obj instanceof HTMLElement;&lt;br /&gt;
  }&lt;br /&gt;
  catch(e){&lt;br /&gt;
    return (typeof obj===&amp;quot;object&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
      (obj.nodeType===1) &amp;amp;&amp;amp; (typeof obj.style === &amp;quot;object&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
      (typeof obj.ownerDocument ===&amp;quot;object&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Prüfen ob ein Element in einem Objekt-Literal existiert und nicht null ist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var data = {&lt;br /&gt;
    &amp;quot;key1&amp;quot; : val,&lt;br /&gt;
    &amp;quot;key2&amp;quot; : val,&lt;br /&gt;
    &amp;quot;key3&amp;quot; : val&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if( &amp;quot;key2&amp;quot; in data &amp;amp;&amp;amp; data.key2 != null){&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eingaben Validieren ==&lt;br /&gt;
=== Handynummer validieren (normales JavaScript) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function phone_is_valid(nr){&lt;br /&gt;
	var reg2 = /^([0-9]{4,6})+\/([0-9]{6,11})$/;&lt;br /&gt;
	return reg2.test(nr);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Datum validieren (normales JavaScript) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function date_is_valid(myDate){&lt;br /&gt;
	var isValid = false;&lt;br /&gt;
	var today = new Date();&lt;br /&gt;
	if (!myDate) return false;&lt;br /&gt;
	myDate=myDate.toString();&lt;br /&gt;
	arrDate=myDate.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
	if (arrDate.length!=3) return false;&lt;br /&gt;
	arrDate[0]=parseInt(arrDate[0],10);&lt;br /&gt;
	arrDate[1]=parseInt(arrDate[1],10)-1;&lt;br /&gt;
	if (arrDate[2].length==2) arrDate[2]=&amp;quot;20&amp;quot;+arrDate[2]&lt;br /&gt;
	var kontrolldatum=new Date(arrDate[2],arrDate[1],arrDate[0]);&lt;br /&gt;
	// Datum gültig ?&lt;br /&gt;
	if (kontrolldatum.getDate()==arrDate[0] &amp;amp;&amp;amp; kontrolldatum.getMonth()==arrDate[1] &amp;amp;&amp;amp; kontrolldatum.getFullYear()==arrDate[2])&lt;br /&gt;
	{&lt;br /&gt;
		// in der Zukunft&lt;br /&gt;
		if (kontrolldatum.getTime()-today.getTime()+(24*60*60*1000) &amp;gt; 0)&lt;br /&gt;
			return true; 		&lt;br /&gt;
	}&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Maus ==&lt;br /&gt;
[[JavaScript - Maus]]&lt;br /&gt;
== Timer ==&lt;br /&gt;
Quelle: http://blog.agrafix.net/2011/10/javascript-timers-mit-jquery/&lt;br /&gt;
&lt;br /&gt;
Benötigte Funktionen sind window.setTimeout und window.setInterval&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// funktion verzögert aufrufen&lt;br /&gt;
function machWas() {&lt;br /&gt;
   alert(&amp;#039;alert() mit 1000ms verzögerung!&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
window.setTimeout(machWas, 1000);&lt;br /&gt;
 &lt;br /&gt;
// funktion alle X Millisekunden aufruden&lt;br /&gt;
function machWasOft() {&lt;br /&gt;
   alert(&amp;#039;alle 1000ms ein alert()&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.setInterval(machWasOft, 1000);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch was ist, wenn ich jetzt einen solchen Timer ändern oder abbrechen möchte? Das ist eigentlich auch nicht schwer – die Funktionen setTimeout/setInterval geben ein Objekt zurück über das sie sich wieder beenden lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var x = 0;&lt;br /&gt;
function machWasAbbrechbarOft() {&lt;br /&gt;
    x += 1;&lt;br /&gt;
    if (x &amp;gt; 200) {&lt;br /&gt;
        window.clearInterval(running); // beende das &amp;quot;Interval&amp;quot; nach 201 Ausführungen&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
var running = window.setInterval(machWasAbbrechbarOft, 1000);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Timer mit jQuery ===&lt;br /&gt;
Für größere Projekte gibt es ein komfortableres jQuery Plugin&lt;br /&gt;
&lt;br /&gt;
Mit diesem Plugin geht das “Interval” setzen dann wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(document).everyTime(1000, &amp;quot;machWasOftAbbrechbar&amp;quot;, function(i) { // alle 1000ms&lt;br /&gt;
  alert(&amp;#039;Hallo ich bin der &amp;#039; + i + &amp;#039;te Aufruf!&amp;#039;); // machWasOftAbbrechbar, hier die funktion die aufgerufen werden soll&lt;br /&gt;
}, 200); // 200 mal ausführen&lt;br /&gt;
Der zweite Parameter, machWasOftAbbrechbar, stellt hierbei ein sogenanntes “label” dar, über das man den gestarten Timer dann wieder abbrechen kann:&lt;br /&gt;
&lt;br /&gt;
$(document).stopTime(&amp;quot;machWasOftAbbrechbar&amp;quot;); // stoppe machWasOftAbbrechbar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Viel mehr gibt’s eigentlich nicht dazu zu sagen – die Dokumentation dazu findet man, genau wie das Plugin selbst, unter http://plugins.jquery.com/project/timers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Arrays ==&lt;br /&gt;
=== Elemente hinzufügen / entfernen ===&lt;br /&gt;
Gegeben ist ein Array items in der Art &lt;br /&gt;
 [{id: 1, name: Anton, isFavourite: true}, {id: 2, name: Berta},...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// add to end of array&lt;br /&gt;
this.friends.push(newFriend)&lt;br /&gt;
&lt;br /&gt;
// add to start of array&lt;br /&gt;
this.friends.unshift(newFriend)&lt;br /&gt;
&lt;br /&gt;
// delete item from array via id - v1 -&amp;gt; override complete array&lt;br /&gt;
deleteItem(id){&lt;br /&gt;
  this.items = this.items.filter( item =&amp;gt; item.id !== sarchId)&lt;br /&gt;
  // filter( filterFunction ) uses filterFunction for every item in items.&lt;br /&gt;
  // If filterFunction returns true the item is kept. item.id !== id returns true for every&lt;br /&gt;
  // item which has NOT the id&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// v2 - change array&lt;br /&gt;
deleteItem(id){&lt;br /&gt;
  const itemIndex = this.items.findIndex(item =&amp;gt; item.id === id)&lt;br /&gt;
  this.items.splice(resIndex, 1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finden und Suchen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// find in array and change prop&lt;br /&gt;
const identifiedItem = this.items.find(&lt;br /&gt;
  (item) =&amp;gt; item.id === searchId // the same as function(friend){return friend.id...}&lt;br /&gt;
)&lt;br /&gt;
// filter(callback) - callback is executed on every array (array item) first item match is returned&lt;br /&gt;
identifiedItem.isFavourite = !identifiedItem.isFavourite&lt;br /&gt;
// identifiedItem is a proxy connected to the original items array.&lt;br /&gt;
// thus why we can modify identifiedItems and items will be altered too&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Objekte ==&lt;br /&gt;
[[JavaScript - Objektorientierte Programmierung]]&lt;br /&gt;
&lt;br /&gt;
=== Objekte löschen ===&lt;br /&gt;
 for (prop in allOverlays) { if (allOverlays.hasOwnProperty(prop)) { delete allOverlays[prop]; } } //ie 6 gc problems&lt;br /&gt;
 //allOverlays = {};&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Strings ==&lt;br /&gt;
[[JavaScript - Strings]]&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Numbers ==&lt;br /&gt;
 const x = &amp;#039;1&amp;#039;&lt;br /&gt;
 const y = +x // y is a number now&lt;br /&gt;
 const y = x.parseInt()&lt;br /&gt;
&lt;br /&gt;
== Viewport / Offset / Scrolling ==&lt;br /&gt;
=== Element sichtbar im Viewport ===&lt;br /&gt;
==== Kommt in den Viewport mit Self-Destroy ====&lt;br /&gt;
Wird nur einmal ausgeführt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.body.onscroll = function() {&lt;br /&gt;
	if (document.getElementById(&amp;quot;viewElement&amp;quot;).getBoundingClientRect().bottom &amp;lt;= window.innerHeight) {&lt;br /&gt;
		document.body.onscroll = &amp;quot;&amp;quot;;&lt;br /&gt;
		alert(&amp;quot;The tag just came into view&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Komplett im Viewport ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function isInViewport(el) {&lt;br /&gt;
    const rect = el.getBoundingClientRect();&lt;br /&gt;
    return (&lt;br /&gt;
        rect.top &amp;gt;= 0 &amp;amp;&amp;amp;&lt;br /&gt;
        rect.left &amp;gt;= 0 &amp;amp;&amp;amp;&lt;br /&gt;
        rect.bottom &amp;lt;= (window.innerHeight || document.documentElement.clientHeight) &amp;amp;&amp;amp;&lt;br /&gt;
        rect.right &amp;lt;= (window.innerWidth || document.documentElement.clientWidth)&lt;br /&gt;
&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
const box = document.querySelector(&amp;#039;.box&amp;#039;);&lt;br /&gt;
const message = document.querySelector(&amp;#039;#message&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
document.addEventListener(&amp;#039;scroll&amp;#039;, function () {&lt;br /&gt;
    const messageText = isInViewport(box) ?&lt;br /&gt;
        &amp;#039;The box is visible in the viewport&amp;#039; :&lt;br /&gt;
        &amp;#039;The box is not visible in the viewport&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    message.textContent = messageText;&lt;br /&gt;
&lt;br /&gt;
}, {&lt;br /&gt;
    passive: true&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teil im Viewport ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * checks if any part of the element is in viewport&lt;br /&gt;
 */&lt;br /&gt;
function isInViewport(el){&lt;br /&gt;
  h = el.height();&lt;br /&gt;
  hVp = $(window).height();&lt;br /&gt;
  posY = el.offset().top - $(window).scrollTop();&lt;br /&gt;
  dh = posY+h;&lt;br /&gt;
  // dh &amp;lt; 0 -&amp;gt; oben raus&lt;br /&gt;
  // posY &amp;gt; hVp -&amp;gt; unten raus&lt;br /&gt;
  if ( dh &amp;lt; 0 || posY &amp;gt; hVp ) return false;&lt;br /&gt;
  else return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Funktion mit GSAP ScrollTrigger starten ===&lt;br /&gt;
Counter Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function count(){&lt;br /&gt;
  $(&amp;#039;.counter&amp;#039;).each(function() {&lt;br /&gt;
    var $this = $(this), countTo = $this.attr(&amp;#039;data-count&amp;#039;);&lt;br /&gt;
    $({ countNum: $this.text()}).animate({&lt;br /&gt;
      countNum: countTo&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      duration: 5000,&lt;br /&gt;
      easing:&amp;#039;linear&amp;#039;,&lt;br /&gt;
      step: function() {&lt;br /&gt;
        $this.text(Math.floor(this.countNum));&lt;br /&gt;
      },&lt;br /&gt;
      complete: function() {&lt;br /&gt;
        $this.text(this.countNum);&lt;br /&gt;
        //alert(&amp;#039;finished&amp;#039;);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ScrollTrigger.create({&lt;br /&gt;
  trigger: &amp;#039;#counterTrigger&amp;#039;,&lt;br /&gt;
  onEnter: ()=&amp;gt;{&lt;br /&gt;
    console.log(&amp;#039;count&amp;#039;)&lt;br /&gt;
    count()&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JavaScript - HTML5 Audio ==&lt;br /&gt;
[[JavaScript - HTML5 Audio]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[[JavaScript - Tricks mit Links]]&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Verschiedenes ==&lt;br /&gt;
=== Enter 2 Tabs ===&lt;br /&gt;
JQuery&lt;br /&gt;
&lt;br /&gt;
Wenn der User in einem Formular die Eingabetaste drückt wird in vielen Browsxern das Formular abgesendet. Stattdessen, kann man den Tastendruck in einen Tab verwandeln, dann kommt der User stattdessen ins nächste Eingabefeld. In diesem Beispiel wird der Cursor zu Beginn gleich ins erste Feld gesetzt (eingesetzt bei Mietlager XL Rechner).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// enter2tab for textboxes&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
	$(&amp;#039;input:text:first&amp;#039;).focus();&lt;br /&gt;
	$(&amp;#039;input:text&amp;#039;).bind(&amp;#039;keydown&amp;#039;, function(e) {&lt;br /&gt;
		if (e.keyCode == 13) {&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
			var nextIndex = $(&amp;#039;input:text&amp;#039;).index(this) + 1;&lt;br /&gt;
			var maxIndex = $(&amp;#039;input:text&amp;#039;).length;&lt;br /&gt;
			if (nextIndex &amp;lt; maxIndex) {&lt;br /&gt;
				$(&amp;#039;input:text:eq(&amp;#039; + nextIndex+&amp;#039;)&amp;#039;).focus();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JavaScript Animation ===&lt;br /&gt;
Siehe [[Animation im Web]]&lt;br /&gt;
&lt;br /&gt;
=== Sortieren ===&lt;br /&gt;
http://www.javascriptkit.com/javatutors/arraysort.shtml&lt;br /&gt;
&lt;br /&gt;
=== Scrolling ===&lt;br /&gt;
==== Smooth Scroll &amp;amp; Sticky - Fixed Navbar ====&lt;br /&gt;
jQuery&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
  var stickyNavTop = $(&amp;#039;.nav&amp;#039;).offset().top;&lt;br /&gt;
  var stickyNav = function(){&lt;br /&gt;
    var scrollTop = $(window).scrollTop();  &lt;br /&gt;
    if (scrollTop &amp;gt; stickyNavTop) { &lt;br /&gt;
      $(&amp;#039;.nav&amp;#039;).addClass(&amp;#039;sticky&amp;#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      $(&amp;#039;.nav&amp;#039;).removeClass(&amp;#039;sticky&amp;#039;); &lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
  stickyNav();&lt;br /&gt;
  $(window).scroll(function() {&lt;br /&gt;
    stickyNav();&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CSS - wichtig vor allem fixed.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.sticky {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 100;&lt;br /&gt;
  border-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Smooth Scroll für Anchor Tags oder toTop Links ====&lt;br /&gt;
 https://stackoverflow.com/questions/7717527/smooth-scrolling-when-clicking-an-anchor-link&lt;br /&gt;
noch ein Beispiel (Vanilla)&lt;br /&gt;
 https://perishablepress.com/vanilla-javascript-scroll-anchor/&lt;br /&gt;
&lt;br /&gt;
===== Beispiel ab 2018 =====&lt;br /&gt;
Nutzt das CSS Verhalten (kann man auch direkt als CSS nutzen. Manchmal funktioniert es (Stand 2020) nicht ganz sauber. Safari und Edge funktionieren nicht mit dem CSS Behaviour&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
document.querySelectorAll(&amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;).forEach(anchor =&amp;gt; {&lt;br /&gt;
    anchor.addEventListener(&amp;#039;click&amp;#039;, function (e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
&lt;br /&gt;
        document.querySelector(this.getAttribute(&amp;#039;href&amp;#039;)).scrollIntoView({&lt;br /&gt;
            behavior: &amp;#039;smooth&amp;#039;&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For older browser support, you can use this jQuery technique:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(document).on(&amp;#039;click&amp;#039;, &amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;, function (event) {&lt;br /&gt;
    event.preventDefault();&lt;br /&gt;
&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
        scrollTop: $($.attr(this, &amp;#039;href&amp;#039;)).offset().top&lt;br /&gt;
    }, 500);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And here&amp;#039;s the fiddle: http://jsfiddle.net/9SDLw/&lt;br /&gt;
&lt;br /&gt;
If your target element does not have an ID, and you&amp;#039;re linking to it by its name, use this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(&amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;).click(function () {&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
        scrollTop: $(&amp;#039;[name=&amp;quot;&amp;#039; + $.attr(this, &amp;#039;href&amp;#039;).substr(1) + &amp;#039;&amp;quot;]&amp;#039;).offset().top&lt;br /&gt;
    }, 500);&lt;br /&gt;
&lt;br /&gt;
    return false;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 1 (jQuery)  =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(&amp;#039;a[href*=#]:not([href=#])&amp;#039;).click(function() {&lt;br /&gt;
    if (location.pathname.replace(/^\//,&amp;#039;&amp;#039;) == this.pathname.replace(/^\//,&amp;#039;&amp;#039;) &lt;br /&gt;
        || location.hostname == this.hostname) {&lt;br /&gt;
&lt;br /&gt;
        var target = $(this.hash);&lt;br /&gt;
        target = target.length ? target : $(&amp;#039;[name=&amp;#039; + this.hash.slice(1) +&amp;#039;]&amp;#039;);&lt;br /&gt;
           if (target.length) {&lt;br /&gt;
             $(&amp;#039;html,body&amp;#039;).animate({&lt;br /&gt;
                 scrollTop: target.offset().top&lt;br /&gt;
            }, 1000);&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 2 (jQuery) mit Offset =====&lt;br /&gt;
statt &lt;br /&gt;
 .top&lt;br /&gt;
einfach&lt;br /&gt;
 .top-100&lt;br /&gt;
http://1stwebmagazine.com/jquery-scroll-to-anchor-point&lt;br /&gt;
&lt;br /&gt;
==== Smooth Scrolling mit Vanilla JS ====&lt;br /&gt;
 [[JavaScript - Smooth Scrolling]]&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 3 Materialize Pushpin ToTop =====&lt;br /&gt;
jQuery Plugin enthalten in MaterializeCSS http://materializecss.com/pushpin.html&lt;br /&gt;
&lt;br /&gt;
Kann für ToTop Navigation oder Fixed Navigations etc. eingesetzt werden. Liegt im Verzeichnis js/pushpin geht aber nicht ohne weiteres Standalone&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//PUSHPIN TOTOP&lt;br /&gt;
$( document ).ready(function(){&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).pushpin({&lt;br /&gt;
    top: 500,// distance where pin becomes fixed (class)- default 0&lt;br /&gt;
    bottom: &amp;#039;infinity&amp;#039;, // distance when pin stops being fixed - default infinity&lt;br /&gt;
    offset: 24 // style=&amp;quot;top:[offset]&amp;quot;&amp;quot;&amp;quot; - default 0&lt;br /&gt;
  })&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//You can remove pushpin and pushpin classes&lt;br /&gt;
$(&amp;#039;.tabs-wrapper .row&amp;#039;).pushpin(&amp;#039;remove&amp;#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
CSS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Class for when element is above threshold */&lt;br /&gt;
.pin-top {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
/* Class for when element is below threshold*/&lt;br /&gt;
.pin-bottom {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
/* Class for when element is pinned */&lt;br /&gt;
.pinned {&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  z-index: 9;&lt;br /&gt;
}&lt;br /&gt;
/* Only necessary for window height sized blocks. */&lt;br /&gt;
  html, body, .block {&lt;br /&gt;
    height: 100%;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel Markup für ToTop Navigation =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;anchor&amp;quot; name=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;!-- totop --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;totop&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-angle-double-up fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).hide();&lt;br /&gt;
  $(window).scroll(function(){&lt;br /&gt;
    var value = 200; // Toplink beim vertikalen scrollen ab einem Wert von XXX &amp;#039;px&amp;#039; anzeigen&lt;br /&gt;
    var scrolling = $(window).scrollTop();&lt;br /&gt;
    if (scrolling &amp;gt; value) {&lt;br /&gt;
      $(&amp;#039;.totop&amp;#039;).fadeIn();&lt;br /&gt;
    } else {&lt;br /&gt;
      $(&amp;#039;.totop&amp;#039;).fadeOut();&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).click(function(){&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({scrollTop:&amp;#039;0px&amp;#039;}, 400);&lt;br /&gt;
    return false;&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toggle ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;javascript:void(0);&amp;quot; class=&amp;quot;icon&amp;quot; onclick=&amp;quot;myFunction()&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;i class=&amp;quot;fa fa-bars&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
oder registrieren&lt;br /&gt;
&lt;br /&gt;
element.addEventListener(&amp;#039;click&amp;#039;, myFunctionReference , false);&lt;br /&gt;
&lt;br /&gt;
function toggleNavigation() {&lt;br /&gt;
  var x = document.getElementById(&amp;quot;#mobileNavigationPanel&amp;quot;);&lt;br /&gt;
  if (x.style.display === &amp;quot;block&amp;quot;) {&lt;br /&gt;
    x.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
    x.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zwischenablage (Clipboard) modifizieren ===&lt;br /&gt;
 https://developer.mozilla.org/en-US/docs/Web/API/Element/copy_event&lt;br /&gt;
Mit dem Copy Event kann man die Zwischenablage modifizieren wenn der User etwas hineinkopiert. Z.B. könnte das ein Copyright Hinweis sein, den man anhängt.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel - Uppercase ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;Try copying text from this box...&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;target&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;...and pasting it into this one&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const source = document.querySelector(&amp;#039;div.source&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
source.addEventListener(&amp;#039;copy&amp;#039;, (event) =&amp;gt; {&lt;br /&gt;
    const selection = document.getSelection();&lt;br /&gt;
    event.clipboardData.setData(&amp;#039;text/plain&amp;#039;, selection.toString().toUpperCase());&lt;br /&gt;
    event.preventDefault();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel - Copyright Hinweis hinzufügen ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box source&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;Kopiere Text aus dieser Box...&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box target&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;...in diese Box!&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    const source = document.querySelector(&amp;#039;div.source&amp;#039;);&lt;br /&gt;
    var today = new Date();&lt;br /&gt;
    var dd = String(today.getDate()).padStart(2, &amp;#039;0&amp;#039;);&lt;br /&gt;
    var mm = String(today.getMonth() + 1).padStart(2, &amp;#039;0&amp;#039;); //January is 0!&lt;br /&gt;
    var yyyy = today.getFullYear();&lt;br /&gt;
    copyDate = dd + &amp;#039;.&amp;#039; + mm + &amp;#039;.&amp;#039; + yyyy; &lt;br /&gt;
    copyHint = &amp;#039;\nQuelle: &amp;#039; + window.location.href + &amp;#039; (Zugriff am: &amp;#039; + copyDate + &amp;#039;)&amp;#039;; //href, hostname or pathname is possible&lt;br /&gt;
    source.addEventListener(&amp;#039;copy&amp;#039;, (event) =&amp;gt; {&lt;br /&gt;
        const selection = document.getSelection();&lt;br /&gt;
        event.clipboardData.setData(&amp;#039;text/plain&amp;#039;, selection.toString() + copyHint);&lt;br /&gt;
        event.preventDefault();&lt;br /&gt;
    });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Must Know - Wichtige JavaScript Snippets und Konzepte ==&lt;br /&gt;
=== Seite geladen? ===&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 window.onload = function () {&lt;br /&gt;
        console.log(&amp;#039;Dokument geladen&amp;#039;);&lt;br /&gt;
        function init();&lt;br /&gt;
        function machwas();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seite und Bilder geladen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;#039;load&amp;#039;, function () {&lt;br /&gt;
  alert(&amp;quot;It&amp;#039;s loaded!&amp;quot;)&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
let img = new Image;&lt;br /&gt;
&lt;br /&gt;
img.onload = function() {&lt;br /&gt;
   console.log (&amp;quot;Bild geladen&amp;quot;);&lt;br /&gt;
   elem.appendChild (img);&lt;br /&gt;
}&lt;br /&gt;
img.src = &amp;quot;little-snail.png&amp;quot;;  // erst nach dem Event Listener!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seite verlassen ===&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;br /&gt;
&lt;br /&gt;
=== Feature Detection ===&lt;br /&gt;
Herausfinden was ein Browser unterstützt und darauf reagieren.&lt;br /&gt;
 [[JavaScript - Feature Detection]]&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Page_Loader_-_Beispiele&amp;diff=26056</id>
		<title>Page Loader - Beispiele</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Page_Loader_-_Beispiele&amp;diff=26056"/>
		<updated>2022-04-24T07:58:56Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&lt;br /&gt;
== Beispiel 1 ==&lt;br /&gt;
(Gyn Gap 2017) Mit SVG Zirkel, CSS Animation, Stilisiertes Logo und Vorhang rechts links. &lt;br /&gt;
&lt;br /&gt;
HTML - direkt hinter body Tag (Beispiel aus ProcessWire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Page Loader&lt;br /&gt;
  ========================================================= --&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;loader-container&amp;quot; id=&amp;quot;page-loader&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;loading-wrapper loading-wrapper-hide&amp;quot;&amp;gt;&lt;br /&gt;
    	&amp;lt;div class=&amp;quot;loader-animation&amp;quot; id=&amp;quot;loader-animation&amp;quot;&amp;gt;&lt;br /&gt;
    		&amp;lt;svg class=&amp;quot;svg-loader&amp;quot; width=100 height=100&amp;gt;&lt;br /&gt;
  		  &amp;lt;circle cx=50 cy=50 r=25 /&amp;gt;&lt;br /&gt;
  		&amp;lt;/svg&amp;gt;&lt;br /&gt;
    	&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Edit With Your Name --&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;loader-name&amp;quot; id=&amp;quot;loader-name&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;img src=&amp;quot;&amp;lt;?php echo $config-&amp;gt;urls-&amp;gt;templates?&amp;gt;img/logo-negative.png&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;!-- /Edit With Your Name --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;!-- /End of Page loader&lt;br /&gt;
  ========================================================= --&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* ==========================================================&lt;br /&gt;
! Page Loader&lt;br /&gt;
========================================================== */&lt;br /&gt;
#page-loader {&lt;br /&gt;
  display: none;&lt;br /&gt;
  visibility: hidden;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  z-index: 9999;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  font-family: &amp;#039;Gilroy-Light&amp;#039;, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  #page-loader {&lt;br /&gt;
    display: block;&lt;br /&gt;
    visibility: visible;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#page-loader:before {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  background: #333333;&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
#page-loader:after {&lt;br /&gt;
  content: &amp;#039;&amp;#039;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  background: #333333;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
.loader-out {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-out:before {&lt;br /&gt;
  transform: translateX(-600px);&lt;br /&gt;
  -moz-transform: translateX(-600px);&lt;br /&gt;
  -webkit-transform: translateX(-600px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-out:after {&lt;br /&gt;
  transform: translateX(600px);&lt;br /&gt;
  -moz-transform: translateX(600px);&lt;br /&gt;
  -webkit-transform: translateX(600px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loading-wrapper {&lt;br /&gt;
  width: 250px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  margin-top: -130px;&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  margin-left: -125px;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  z-index: 9;&lt;br /&gt;
  transform: translateY(0px);&lt;br /&gt;
  -moz-transform: translateY(0px);&lt;br /&gt;
  -webkit-transform: translateY(0px);&lt;br /&gt;
}&lt;br /&gt;
.loading-wrapper-hide {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  -webkit-transition: all 0.6s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.6s ease-in-out;&lt;br /&gt;
  transition: all 0.6s ease-in-out;&lt;br /&gt;
  transform: translateY(-20px);&lt;br /&gt;
  -moz-transform: translateY(-20px);&lt;br /&gt;
  -webkit-transform: translateY(-20px);&lt;br /&gt;
}&lt;br /&gt;
.tp-loader {&lt;br /&gt;
  z-index: 10000;&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
.loader-name {&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  opacity: 0.8;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  letter-spacing: 0px;&lt;br /&gt;
  padding-left: 2px;&lt;br /&gt;
  padding-right: 2px;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  margin-top: 45px;&lt;br /&gt;
  -webkit-transition: all 0.4s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.4s ease-in-out;&lt;br /&gt;
  transition: all 0.4s ease-in-out;&lt;br /&gt;
  margin-bottom: 35px;&lt;br /&gt;
}&lt;br /&gt;
.loader-name img {&lt;br /&gt;
  max-width: 230px;&lt;br /&gt;
}&lt;br /&gt;
.loader-job {&lt;br /&gt;
  border: 1px solid #ffffff;&lt;br /&gt;
  padding: 5px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-weight: 200;&lt;br /&gt;
  margin-top: 5px;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  -webkit-transition: all 0.4s ease-in-out;&lt;br /&gt;
  -moz-transition: all 0.4s ease-in-out;&lt;br /&gt;
  transition: all 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
.loader-left {&lt;br /&gt;
  -webkit-transform: translateX(-40px);&lt;br /&gt;
  -moz-transform: translateX(-40px);&lt;br /&gt;
  -o-transform: translateX(-40px);&lt;br /&gt;
  transform: translateX(-40px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-right {&lt;br /&gt;
  -webkit-transform: translateX(40px);&lt;br /&gt;
  -moz-transform: translateX(40px);&lt;br /&gt;
  -o-transform: translateX(40px);&lt;br /&gt;
  transform: translateX(40px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-up {&lt;br /&gt;
  -webkit-transform: translateY(-80px);&lt;br /&gt;
  -moz-transform: translateY(-80px);&lt;br /&gt;
  -o-transform: translateY(-80px);&lt;br /&gt;
  transform: translateY(-80px);&lt;br /&gt;
  opacity: 0!important;&lt;br /&gt;
}&lt;br /&gt;
.loader-down {&lt;br /&gt;
  -webkit-transform: translateY(80px);&lt;br /&gt;
  -moz-transform: translateY(80px);&lt;br /&gt;
  -o-transform: translateY(80px);&lt;br /&gt;
  transform: translateY(80px);&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader-hide {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
.loader {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  width: 30px;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 4px solid #Fff;&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  animation: loader 2s infinite ease;&lt;br /&gt;
}&lt;br /&gt;
.loader-inner {&lt;br /&gt;
  vertical-align: top;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  animation: loader-inner 2s infinite ease-in;&lt;br /&gt;
}&lt;br /&gt;
.loader-animation {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.svg-loader {&lt;br /&gt;
  margin: 0px auto;&lt;br /&gt;
  margin-bottom: -30px;&lt;br /&gt;
  display: block;&lt;br /&gt;
  -webkit-animation: svg-rotate 4000ms linear infinite;&lt;br /&gt;
  animation: svg-rotate 4000ms linear infinite;&lt;br /&gt;
}&lt;br /&gt;
.svg-loader circle {&lt;br /&gt;
  fill: transparent;&lt;br /&gt;
  stroke: #ffffff;&lt;br /&gt;
  stroke-width: 4;&lt;br /&gt;
  stroke-linecap: round;&lt;br /&gt;
  stroke-dasharray: 0, 301.59289;&lt;br /&gt;
  -webkit-animation: stroke-dash 2000ms linear infinite, stroke-width 2000ms linear infinite, stroke-color 8000ms steps(4) infinite;&lt;br /&gt;
  animation: stroke-dash 2000ms linear infinite, stroke-width 2000ms linear infinite, stroke-color 8000ms steps(4) infinite;&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes svg-rotate {&lt;br /&gt;
  to {&lt;br /&gt;
    -webkit-transform: rotate(360deg);&lt;br /&gt;
    transform: rotate(360deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes svg-rotate {&lt;br /&gt;
  to {&lt;br /&gt;
    -webkit-transform: rotate(360deg);&lt;br /&gt;
    transform: rotate(360deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-width {&lt;br /&gt;
  0%,&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-width: 0;&lt;br /&gt;
  }&lt;br /&gt;
  45%,&lt;br /&gt;
  55% {&lt;br /&gt;
    stroke-width: 2;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-width: 4;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-width {&lt;br /&gt;
  0%,&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-width: 0;&lt;br /&gt;
  }&lt;br /&gt;
  45%,&lt;br /&gt;
  55% {&lt;br /&gt;
    stroke-width: 2;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-width: 4;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-dash {&lt;br /&gt;
  0% {&lt;br /&gt;
    stroke-dasharray: 0, 301.59289;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 0;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 301.59289;&lt;br /&gt;
    stroke-dashoffset: -301.59289;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-dash {&lt;br /&gt;
  0% {&lt;br /&gt;
    stroke-dasharray: 0, 301.59289;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  50% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 0;&lt;br /&gt;
    stroke-dashoffset: 0;&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    stroke-dasharray: 301.59289, 301.59289;&lt;br /&gt;
    stroke-dashoffset: -301.59289;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes stroke-color {&lt;br /&gt;
  from {&lt;br /&gt;
    stroke: #ffffff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes stroke-color {&lt;br /&gt;
  from {&lt;br /&gt;
    stroke: #ffffff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
JavaScript&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Begin - Window Load&lt;br /&gt;
$(window).load(function(){&lt;br /&gt;
&lt;br /&gt;
  //Page Loader&lt;br /&gt;
  setTimeout(function(){&lt;br /&gt;
    $(&amp;#039;#loader-name&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    $(&amp;#039;#loader-job&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    $(&amp;#039;#loader-animation&amp;#039;).addClass(&amp;#039;loader-up&amp;#039;);&lt;br /&gt;
    return false;&lt;br /&gt;
  }, 500);&lt;br /&gt;
  setTimeout(function(){&lt;br /&gt;
    $(&amp;#039;#page-loader&amp;#039;).addClass(&amp;#039;loader-out&amp;#039;);&lt;br /&gt;
    return false;&lt;br /&gt;
  }, 1100);&lt;br /&gt;
  $(&amp;#039;#page-loader&amp;#039;).delay(1600).fadeOut(10);&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&amp;diff=26055</id>
		<title>JavaScript - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&amp;diff=26055"/>
		<updated>2022-04-24T07:54:01Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Seite und Bilder geladen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
Siehe auch&lt;br /&gt;
&lt;br /&gt;
 [[JavaScript - Plugins]]&lt;br /&gt;
 [[JavaScripts - Basics]]&lt;br /&gt;
 [[JavaScript - DOM Manipulation]]&lt;br /&gt;
 [[jQuery - Snippets]]&lt;br /&gt;
 [[Browser Fallbacks]]&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JQuery_vs_Vanilla_JavaScript&lt;br /&gt;
&lt;br /&gt;
== Sonderzeichen in Alert-Meldungen ==&lt;br /&gt;
&lt;br /&gt;
Oft sieht man im Web sehr hässliche alert-Meldungen , in denen die Umlaute nicht korrekt dargestellt sind. Das liegt auch daran, dass unterschiedliche Betriebssystem Zeichen unterschiedlich kodieren. Damit so etwas möglichst vermieden wird, sollte man solche Meldungen mit alert(unescape(&amp;quot;...&amp;quot;)) anzeigen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
 alert(unescape(&amp;quot;So was d%E4mliches%21&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
Zeichen	so verschlüsseln:&lt;br /&gt;
\	\\&lt;br /&gt;
&amp;quot;	\&amp;quot;&lt;br /&gt;
&amp;#039;	\&amp;#039;&lt;br /&gt;
Zeilenumbruch	\n&lt;br /&gt;
Wagenrücklauf	\r&lt;br /&gt;
(Den Unterschied zum Zeilenumbruch habe ich auch noch nicht begriffen.)&lt;br /&gt;
Tabulator	\t&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zeichen	so:&lt;br /&gt;
Ä	%C4&lt;br /&gt;
Ö	%D6&lt;br /&gt;
Ü	%DC&lt;br /&gt;
ä	%E4&lt;br /&gt;
ö	%F6&lt;br /&gt;
ü	%FC&lt;br /&gt;
ß	%DF&lt;br /&gt;
€	%u20AC&lt;br /&gt;
$	%24&lt;br /&gt;
%	%25&lt;br /&gt;
&lt;br /&gt;
Generier Tool:&lt;br /&gt;
http://www.salesianer.de/util/alert-umlaute.html&lt;br /&gt;
&lt;br /&gt;
== Teil einer Seite drucken ==&lt;br /&gt;
Old School JavaScript, sollte sich  aber relativ einfach auf jQuery übertragen lassen.&lt;br /&gt;
&lt;br /&gt;
Quelle: http://www.webstool.de/de/tipps_down_druck3.html Zugriff: 10/2011&lt;br /&gt;
&lt;br /&gt;
Mit einem einfachen JavaScript lässt sich mit relativ wenig Aufwand eine druckerfreundliche Version einer Webseite bei Bedarf erzeugen.&lt;br /&gt;
&lt;br /&gt;
Das JavaScript wird nachstehend vorgestellt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function ausgabe()&lt;br /&gt;
{&lt;br /&gt;
var ref = document.getElementById(&amp;quot;auswahl&amp;quot;);&lt;br /&gt;
var ausgabe;&lt;br /&gt;
// nächste Zeile öffnet ein Fenster der Größe 800 x 600 Pixel&lt;br /&gt;
ausgabe=window.open(&amp;quot;#&amp;quot;,&amp;quot;fenster&amp;quot;,&amp;quot;width=800,height=600,resizable=yes,menubar=yes,left=50,top=50&amp;quot;);&lt;br /&gt;
ausgabe.document.open();&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;html&amp;gt;\n&amp;lt;head&amp;gt;\n&amp;lt;title&amp;gt;Druckversion&amp;lt;/title&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-1&amp;quot;&amp;gt;\n&amp;#039;);&lt;br /&gt;
// in der nächsten Zeile an das eigene Stylesheet anpassen&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;../css/design1.css&amp;quot;&amp;gt;\n&amp;lt;/head&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;body&amp;gt;\n&amp;lt;h1 align=&amp;quot;center&amp;quot;&amp;gt;&amp;amp;copy; web s tool - Partner f&amp;amp;uuml;r Ihren Internetauftritt&amp;lt;/h1&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;div&amp;gt;\n&amp;#039;);&lt;br /&gt;
// Ausgabe aller Inhalte mit der id = auswahl&lt;br /&gt;
while (ref!=null)&lt;br /&gt;
{&lt;br /&gt;
ausgabe.document.write(ref.innerHTML + &amp;#039;\n&amp;#039;);&lt;br /&gt;
ref = ref.nextSibling;&lt;br /&gt;
}&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;/div&amp;gt;\n&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;javascript:window.print()&amp;quot;&amp;gt;drucken&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;\n&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.close();&lt;br /&gt;
ausgabe.focus();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die externe Einbindung des JavaScripts erfolgt dabei z.B. im head-Bereich der Webseite über&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script language=&amp;quot;JavaScript&amp;quot; src=&amp;quot;../scripts/ausgabe4print.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Von entscheidender Bedeutung ist, dass auf der Seite das auszuwählende Objekt mit der id = &amp;quot;auswahl&amp;quot; (bitte bei Bedarf anpassen) versehen ist. Das auszuwählende Objekt kann dabei eine Tabelle oder ein div-Container sein.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf erfolgt z.B. durch den Link &amp;lt;a href=&amp;quot;javascript:ausgabe();&amp;quot;&amp;gt; Druckversion&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fehler Behandlung ==&lt;br /&gt;
=== Prüfen ob ein Element existiert (normales JavaScript)===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function isElement(obj) {&lt;br /&gt;
  try {&lt;br /&gt;
    //Using W3 DOM2 (works for FF, Opera and Chrom)&lt;br /&gt;
    return obj instanceof HTMLElement;&lt;br /&gt;
  }&lt;br /&gt;
  catch(e){&lt;br /&gt;
    return (typeof obj===&amp;quot;object&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
      (obj.nodeType===1) &amp;amp;&amp;amp; (typeof obj.style === &amp;quot;object&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
      (typeof obj.ownerDocument ===&amp;quot;object&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Prüfen ob ein Element in einem Objekt-Literal existiert und nicht null ist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var data = {&lt;br /&gt;
    &amp;quot;key1&amp;quot; : val,&lt;br /&gt;
    &amp;quot;key2&amp;quot; : val,&lt;br /&gt;
    &amp;quot;key3&amp;quot; : val&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if( &amp;quot;key2&amp;quot; in data &amp;amp;&amp;amp; data.key2 != null){&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eingaben Validieren ==&lt;br /&gt;
=== Handynummer validieren (normales JavaScript) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function phone_is_valid(nr){&lt;br /&gt;
	var reg2 = /^([0-9]{4,6})+\/([0-9]{6,11})$/;&lt;br /&gt;
	return reg2.test(nr);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Datum validieren (normales JavaScript) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function date_is_valid(myDate){&lt;br /&gt;
	var isValid = false;&lt;br /&gt;
	var today = new Date();&lt;br /&gt;
	if (!myDate) return false;&lt;br /&gt;
	myDate=myDate.toString();&lt;br /&gt;
	arrDate=myDate.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
	if (arrDate.length!=3) return false;&lt;br /&gt;
	arrDate[0]=parseInt(arrDate[0],10);&lt;br /&gt;
	arrDate[1]=parseInt(arrDate[1],10)-1;&lt;br /&gt;
	if (arrDate[2].length==2) arrDate[2]=&amp;quot;20&amp;quot;+arrDate[2]&lt;br /&gt;
	var kontrolldatum=new Date(arrDate[2],arrDate[1],arrDate[0]);&lt;br /&gt;
	// Datum gültig ?&lt;br /&gt;
	if (kontrolldatum.getDate()==arrDate[0] &amp;amp;&amp;amp; kontrolldatum.getMonth()==arrDate[1] &amp;amp;&amp;amp; kontrolldatum.getFullYear()==arrDate[2])&lt;br /&gt;
	{&lt;br /&gt;
		// in der Zukunft&lt;br /&gt;
		if (kontrolldatum.getTime()-today.getTime()+(24*60*60*1000) &amp;gt; 0)&lt;br /&gt;
			return true; 		&lt;br /&gt;
	}&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Maus ==&lt;br /&gt;
[[JavaScript - Maus]]&lt;br /&gt;
== Timer ==&lt;br /&gt;
Quelle: http://blog.agrafix.net/2011/10/javascript-timers-mit-jquery/&lt;br /&gt;
&lt;br /&gt;
Benötigte Funktionen sind window.setTimeout und window.setInterval&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// funktion verzögert aufrufen&lt;br /&gt;
function machWas() {&lt;br /&gt;
   alert(&amp;#039;alert() mit 1000ms verzögerung!&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
window.setTimeout(machWas, 1000);&lt;br /&gt;
 &lt;br /&gt;
// funktion alle X Millisekunden aufruden&lt;br /&gt;
function machWasOft() {&lt;br /&gt;
   alert(&amp;#039;alle 1000ms ein alert()&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.setInterval(machWasOft, 1000);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch was ist, wenn ich jetzt einen solchen Timer ändern oder abbrechen möchte? Das ist eigentlich auch nicht schwer – die Funktionen setTimeout/setInterval geben ein Objekt zurück über das sie sich wieder beenden lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var x = 0;&lt;br /&gt;
function machWasAbbrechbarOft() {&lt;br /&gt;
    x += 1;&lt;br /&gt;
    if (x &amp;gt; 200) {&lt;br /&gt;
        window.clearInterval(running); // beende das &amp;quot;Interval&amp;quot; nach 201 Ausführungen&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
var running = window.setInterval(machWasAbbrechbarOft, 1000);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Timer mit jQuery ===&lt;br /&gt;
Für größere Projekte gibt es ein komfortableres jQuery Plugin&lt;br /&gt;
&lt;br /&gt;
Mit diesem Plugin geht das “Interval” setzen dann wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(document).everyTime(1000, &amp;quot;machWasOftAbbrechbar&amp;quot;, function(i) { // alle 1000ms&lt;br /&gt;
  alert(&amp;#039;Hallo ich bin der &amp;#039; + i + &amp;#039;te Aufruf!&amp;#039;); // machWasOftAbbrechbar, hier die funktion die aufgerufen werden soll&lt;br /&gt;
}, 200); // 200 mal ausführen&lt;br /&gt;
Der zweite Parameter, machWasOftAbbrechbar, stellt hierbei ein sogenanntes “label” dar, über das man den gestarten Timer dann wieder abbrechen kann:&lt;br /&gt;
&lt;br /&gt;
$(document).stopTime(&amp;quot;machWasOftAbbrechbar&amp;quot;); // stoppe machWasOftAbbrechbar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Viel mehr gibt’s eigentlich nicht dazu zu sagen – die Dokumentation dazu findet man, genau wie das Plugin selbst, unter http://plugins.jquery.com/project/timers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Arrays ==&lt;br /&gt;
=== Elemente hinzufügen / entfernen ===&lt;br /&gt;
Gegeben ist ein Array items in der Art &lt;br /&gt;
 [{id: 1, name: Anton, isFavourite: true}, {id: 2, name: Berta},...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// add to end of array&lt;br /&gt;
this.friends.push(newFriend)&lt;br /&gt;
&lt;br /&gt;
// add to start of array&lt;br /&gt;
this.friends.unshift(newFriend)&lt;br /&gt;
&lt;br /&gt;
// delete item from array via id - v1 -&amp;gt; override complete array&lt;br /&gt;
deleteItem(id){&lt;br /&gt;
  this.items = this.items.filter( item =&amp;gt; item.id !== sarchId)&lt;br /&gt;
  // filter( filterFunction ) uses filterFunction for every item in items.&lt;br /&gt;
  // If filterFunction returns true the item is kept. item.id !== id returns true for every&lt;br /&gt;
  // item which has NOT the id&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// v2 - change array&lt;br /&gt;
deleteItem(id){&lt;br /&gt;
  const itemIndex = this.items.findIndex(item =&amp;gt; item.id === id)&lt;br /&gt;
  this.items.splice(resIndex, 1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finden und Suchen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// find in array and change prop&lt;br /&gt;
const identifiedItem = this.items.find(&lt;br /&gt;
  (item) =&amp;gt; item.id === searchId // the same as function(friend){return friend.id...}&lt;br /&gt;
)&lt;br /&gt;
// filter(callback) - callback is executed on every array (array item) first item match is returned&lt;br /&gt;
identifiedItem.isFavourite = !identifiedItem.isFavourite&lt;br /&gt;
// identifiedItem is a proxy connected to the original items array.&lt;br /&gt;
// thus why we can modify identifiedItems and items will be altered too&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Objekte ==&lt;br /&gt;
[[JavaScript - Objektorientierte Programmierung]]&lt;br /&gt;
&lt;br /&gt;
=== Objekte löschen ===&lt;br /&gt;
 for (prop in allOverlays) { if (allOverlays.hasOwnProperty(prop)) { delete allOverlays[prop]; } } //ie 6 gc problems&lt;br /&gt;
 //allOverlays = {};&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Strings ==&lt;br /&gt;
[[JavaScript - Strings]]&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Numbers ==&lt;br /&gt;
 const x = &amp;#039;1&amp;#039;&lt;br /&gt;
 const y = +x // y is a number now&lt;br /&gt;
 const y = x.parseInt()&lt;br /&gt;
&lt;br /&gt;
== Viewport / Offset / Scrolling ==&lt;br /&gt;
=== Element sichtbar im Viewport ===&lt;br /&gt;
==== Kommt in den Viewport mit Self-Destroy ====&lt;br /&gt;
Wird nur einmal ausgeführt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.body.onscroll = function() {&lt;br /&gt;
	if (document.getElementById(&amp;quot;viewElement&amp;quot;).getBoundingClientRect().bottom &amp;lt;= window.innerHeight) {&lt;br /&gt;
		document.body.onscroll = &amp;quot;&amp;quot;;&lt;br /&gt;
		alert(&amp;quot;The tag just came into view&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Komplett im Viewport ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function isInViewport(el) {&lt;br /&gt;
    const rect = el.getBoundingClientRect();&lt;br /&gt;
    return (&lt;br /&gt;
        rect.top &amp;gt;= 0 &amp;amp;&amp;amp;&lt;br /&gt;
        rect.left &amp;gt;= 0 &amp;amp;&amp;amp;&lt;br /&gt;
        rect.bottom &amp;lt;= (window.innerHeight || document.documentElement.clientHeight) &amp;amp;&amp;amp;&lt;br /&gt;
        rect.right &amp;lt;= (window.innerWidth || document.documentElement.clientWidth)&lt;br /&gt;
&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
const box = document.querySelector(&amp;#039;.box&amp;#039;);&lt;br /&gt;
const message = document.querySelector(&amp;#039;#message&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
document.addEventListener(&amp;#039;scroll&amp;#039;, function () {&lt;br /&gt;
    const messageText = isInViewport(box) ?&lt;br /&gt;
        &amp;#039;The box is visible in the viewport&amp;#039; :&lt;br /&gt;
        &amp;#039;The box is not visible in the viewport&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    message.textContent = messageText;&lt;br /&gt;
&lt;br /&gt;
}, {&lt;br /&gt;
    passive: true&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teil im Viewport ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * checks if any part of the element is in viewport&lt;br /&gt;
 */&lt;br /&gt;
function isInViewport(el){&lt;br /&gt;
  h = el.height();&lt;br /&gt;
  hVp = $(window).height();&lt;br /&gt;
  posY = el.offset().top - $(window).scrollTop();&lt;br /&gt;
  dh = posY+h;&lt;br /&gt;
  // dh &amp;lt; 0 -&amp;gt; oben raus&lt;br /&gt;
  // posY &amp;gt; hVp -&amp;gt; unten raus&lt;br /&gt;
  if ( dh &amp;lt; 0 || posY &amp;gt; hVp ) return false;&lt;br /&gt;
  else return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Funktion mit GSAP ScrollTrigger starten ===&lt;br /&gt;
Counter Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function count(){&lt;br /&gt;
  $(&amp;#039;.counter&amp;#039;).each(function() {&lt;br /&gt;
    var $this = $(this), countTo = $this.attr(&amp;#039;data-count&amp;#039;);&lt;br /&gt;
    $({ countNum: $this.text()}).animate({&lt;br /&gt;
      countNum: countTo&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      duration: 5000,&lt;br /&gt;
      easing:&amp;#039;linear&amp;#039;,&lt;br /&gt;
      step: function() {&lt;br /&gt;
        $this.text(Math.floor(this.countNum));&lt;br /&gt;
      },&lt;br /&gt;
      complete: function() {&lt;br /&gt;
        $this.text(this.countNum);&lt;br /&gt;
        //alert(&amp;#039;finished&amp;#039;);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ScrollTrigger.create({&lt;br /&gt;
  trigger: &amp;#039;#counterTrigger&amp;#039;,&lt;br /&gt;
  onEnter: ()=&amp;gt;{&lt;br /&gt;
    console.log(&amp;#039;count&amp;#039;)&lt;br /&gt;
    count()&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JavaScript - HTML5 Audio ==&lt;br /&gt;
[[JavaScript - HTML5 Audio]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[[JavaScript - Tricks mit Links]]&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Verschiedenes ==&lt;br /&gt;
=== Enter 2 Tabs ===&lt;br /&gt;
JQuery&lt;br /&gt;
&lt;br /&gt;
Wenn der User in einem Formular die Eingabetaste drückt wird in vielen Browsxern das Formular abgesendet. Stattdessen, kann man den Tastendruck in einen Tab verwandeln, dann kommt der User stattdessen ins nächste Eingabefeld. In diesem Beispiel wird der Cursor zu Beginn gleich ins erste Feld gesetzt (eingesetzt bei Mietlager XL Rechner).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// enter2tab for textboxes&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
	$(&amp;#039;input:text:first&amp;#039;).focus();&lt;br /&gt;
	$(&amp;#039;input:text&amp;#039;).bind(&amp;#039;keydown&amp;#039;, function(e) {&lt;br /&gt;
		if (e.keyCode == 13) {&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
			var nextIndex = $(&amp;#039;input:text&amp;#039;).index(this) + 1;&lt;br /&gt;
			var maxIndex = $(&amp;#039;input:text&amp;#039;).length;&lt;br /&gt;
			if (nextIndex &amp;lt; maxIndex) {&lt;br /&gt;
				$(&amp;#039;input:text:eq(&amp;#039; + nextIndex+&amp;#039;)&amp;#039;).focus();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JavaScript Animation ===&lt;br /&gt;
Siehe [[Animation im Web]]&lt;br /&gt;
&lt;br /&gt;
=== Sortieren ===&lt;br /&gt;
http://www.javascriptkit.com/javatutors/arraysort.shtml&lt;br /&gt;
&lt;br /&gt;
=== Scrolling ===&lt;br /&gt;
==== Smooth Scroll &amp;amp; Sticky - Fixed Navbar ====&lt;br /&gt;
jQuery&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
  var stickyNavTop = $(&amp;#039;.nav&amp;#039;).offset().top;&lt;br /&gt;
  var stickyNav = function(){&lt;br /&gt;
    var scrollTop = $(window).scrollTop();  &lt;br /&gt;
    if (scrollTop &amp;gt; stickyNavTop) { &lt;br /&gt;
      $(&amp;#039;.nav&amp;#039;).addClass(&amp;#039;sticky&amp;#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      $(&amp;#039;.nav&amp;#039;).removeClass(&amp;#039;sticky&amp;#039;); &lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
  stickyNav();&lt;br /&gt;
  $(window).scroll(function() {&lt;br /&gt;
    stickyNav();&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CSS - wichtig vor allem fixed.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.sticky {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 100;&lt;br /&gt;
  border-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Smooth Scroll für Anchor Tags oder toTop Links ====&lt;br /&gt;
 https://stackoverflow.com/questions/7717527/smooth-scrolling-when-clicking-an-anchor-link&lt;br /&gt;
noch ein Beispiel (Vanilla)&lt;br /&gt;
 https://perishablepress.com/vanilla-javascript-scroll-anchor/&lt;br /&gt;
&lt;br /&gt;
===== Beispiel ab 2018 =====&lt;br /&gt;
Nutzt das CSS Verhalten (kann man auch direkt als CSS nutzen. Manchmal funktioniert es (Stand 2020) nicht ganz sauber. Safari und Edge funktionieren nicht mit dem CSS Behaviour&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
document.querySelectorAll(&amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;).forEach(anchor =&amp;gt; {&lt;br /&gt;
    anchor.addEventListener(&amp;#039;click&amp;#039;, function (e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
&lt;br /&gt;
        document.querySelector(this.getAttribute(&amp;#039;href&amp;#039;)).scrollIntoView({&lt;br /&gt;
            behavior: &amp;#039;smooth&amp;#039;&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For older browser support, you can use this jQuery technique:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(document).on(&amp;#039;click&amp;#039;, &amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;, function (event) {&lt;br /&gt;
    event.preventDefault();&lt;br /&gt;
&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
        scrollTop: $($.attr(this, &amp;#039;href&amp;#039;)).offset().top&lt;br /&gt;
    }, 500);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And here&amp;#039;s the fiddle: http://jsfiddle.net/9SDLw/&lt;br /&gt;
&lt;br /&gt;
If your target element does not have an ID, and you&amp;#039;re linking to it by its name, use this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(&amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;).click(function () {&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
        scrollTop: $(&amp;#039;[name=&amp;quot;&amp;#039; + $.attr(this, &amp;#039;href&amp;#039;).substr(1) + &amp;#039;&amp;quot;]&amp;#039;).offset().top&lt;br /&gt;
    }, 500);&lt;br /&gt;
&lt;br /&gt;
    return false;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 1 (jQuery)  =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(&amp;#039;a[href*=#]:not([href=#])&amp;#039;).click(function() {&lt;br /&gt;
    if (location.pathname.replace(/^\//,&amp;#039;&amp;#039;) == this.pathname.replace(/^\//,&amp;#039;&amp;#039;) &lt;br /&gt;
        || location.hostname == this.hostname) {&lt;br /&gt;
&lt;br /&gt;
        var target = $(this.hash);&lt;br /&gt;
        target = target.length ? target : $(&amp;#039;[name=&amp;#039; + this.hash.slice(1) +&amp;#039;]&amp;#039;);&lt;br /&gt;
           if (target.length) {&lt;br /&gt;
             $(&amp;#039;html,body&amp;#039;).animate({&lt;br /&gt;
                 scrollTop: target.offset().top&lt;br /&gt;
            }, 1000);&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 2 (jQuery) mit Offset =====&lt;br /&gt;
statt &lt;br /&gt;
 .top&lt;br /&gt;
einfach&lt;br /&gt;
 .top-100&lt;br /&gt;
http://1stwebmagazine.com/jquery-scroll-to-anchor-point&lt;br /&gt;
&lt;br /&gt;
==== Smooth Scrolling mit Vanilla JS ====&lt;br /&gt;
 [[JavaScript - Smooth Scrolling]]&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 3 Materialize Pushpin ToTop =====&lt;br /&gt;
jQuery Plugin enthalten in MaterializeCSS http://materializecss.com/pushpin.html&lt;br /&gt;
&lt;br /&gt;
Kann für ToTop Navigation oder Fixed Navigations etc. eingesetzt werden. Liegt im Verzeichnis js/pushpin geht aber nicht ohne weiteres Standalone&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//PUSHPIN TOTOP&lt;br /&gt;
$( document ).ready(function(){&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).pushpin({&lt;br /&gt;
    top: 500,// distance where pin becomes fixed (class)- default 0&lt;br /&gt;
    bottom: &amp;#039;infinity&amp;#039;, // distance when pin stops being fixed - default infinity&lt;br /&gt;
    offset: 24 // style=&amp;quot;top:[offset]&amp;quot;&amp;quot;&amp;quot; - default 0&lt;br /&gt;
  })&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//You can remove pushpin and pushpin classes&lt;br /&gt;
$(&amp;#039;.tabs-wrapper .row&amp;#039;).pushpin(&amp;#039;remove&amp;#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
CSS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Class for when element is above threshold */&lt;br /&gt;
.pin-top {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
/* Class for when element is below threshold*/&lt;br /&gt;
.pin-bottom {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
/* Class for when element is pinned */&lt;br /&gt;
.pinned {&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  z-index: 9;&lt;br /&gt;
}&lt;br /&gt;
/* Only necessary for window height sized blocks. */&lt;br /&gt;
  html, body, .block {&lt;br /&gt;
    height: 100%;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel Markup für ToTop Navigation =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;anchor&amp;quot; name=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;!-- totop --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;totop&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-angle-double-up fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).hide();&lt;br /&gt;
  $(window).scroll(function(){&lt;br /&gt;
    var value = 200; // Toplink beim vertikalen scrollen ab einem Wert von XXX &amp;#039;px&amp;#039; anzeigen&lt;br /&gt;
    var scrolling = $(window).scrollTop();&lt;br /&gt;
    if (scrolling &amp;gt; value) {&lt;br /&gt;
      $(&amp;#039;.totop&amp;#039;).fadeIn();&lt;br /&gt;
    } else {&lt;br /&gt;
      $(&amp;#039;.totop&amp;#039;).fadeOut();&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).click(function(){&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({scrollTop:&amp;#039;0px&amp;#039;}, 400);&lt;br /&gt;
    return false;&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toggle ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;javascript:void(0);&amp;quot; class=&amp;quot;icon&amp;quot; onclick=&amp;quot;myFunction()&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;i class=&amp;quot;fa fa-bars&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
oder registrieren&lt;br /&gt;
&lt;br /&gt;
element.addEventListener(&amp;#039;click&amp;#039;, myFunctionReference , false);&lt;br /&gt;
&lt;br /&gt;
function toggleNavigation() {&lt;br /&gt;
  var x = document.getElementById(&amp;quot;#mobileNavigationPanel&amp;quot;);&lt;br /&gt;
  if (x.style.display === &amp;quot;block&amp;quot;) {&lt;br /&gt;
    x.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
    x.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zwischenablage (Clipboard) modifizieren ===&lt;br /&gt;
 https://developer.mozilla.org/en-US/docs/Web/API/Element/copy_event&lt;br /&gt;
Mit dem Copy Event kann man die Zwischenablage modifizieren wenn der User etwas hineinkopiert. Z.B. könnte das ein Copyright Hinweis sein, den man anhängt.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel - Uppercase ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;Try copying text from this box...&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;target&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;...and pasting it into this one&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const source = document.querySelector(&amp;#039;div.source&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
source.addEventListener(&amp;#039;copy&amp;#039;, (event) =&amp;gt; {&lt;br /&gt;
    const selection = document.getSelection();&lt;br /&gt;
    event.clipboardData.setData(&amp;#039;text/plain&amp;#039;, selection.toString().toUpperCase());&lt;br /&gt;
    event.preventDefault();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel - Copyright Hinweis hinzufügen ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box source&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;Kopiere Text aus dieser Box...&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box target&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;...in diese Box!&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    const source = document.querySelector(&amp;#039;div.source&amp;#039;);&lt;br /&gt;
    var today = new Date();&lt;br /&gt;
    var dd = String(today.getDate()).padStart(2, &amp;#039;0&amp;#039;);&lt;br /&gt;
    var mm = String(today.getMonth() + 1).padStart(2, &amp;#039;0&amp;#039;); //January is 0!&lt;br /&gt;
    var yyyy = today.getFullYear();&lt;br /&gt;
    copyDate = dd + &amp;#039;.&amp;#039; + mm + &amp;#039;.&amp;#039; + yyyy; &lt;br /&gt;
    copyHint = &amp;#039;\nQuelle: &amp;#039; + window.location.href + &amp;#039; (Zugriff am: &amp;#039; + copyDate + &amp;#039;)&amp;#039;; //href, hostname or pathname is possible&lt;br /&gt;
    source.addEventListener(&amp;#039;copy&amp;#039;, (event) =&amp;gt; {&lt;br /&gt;
        const selection = document.getSelection();&lt;br /&gt;
        event.clipboardData.setData(&amp;#039;text/plain&amp;#039;, selection.toString() + copyHint);&lt;br /&gt;
        event.preventDefault();&lt;br /&gt;
    });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Must Know ==&lt;br /&gt;
=== Seite geladen? ===&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 window.onload = function () {&lt;br /&gt;
        console.log(&amp;#039;Dokument geladen&amp;#039;);&lt;br /&gt;
        function init();&lt;br /&gt;
        function machwas();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seite und Bilder geladen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;#039;load&amp;#039;, function () {&lt;br /&gt;
  alert(&amp;quot;It&amp;#039;s loaded!&amp;quot;)&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
let img = new Image;&lt;br /&gt;
&lt;br /&gt;
img.onload = function() {&lt;br /&gt;
   console.log (&amp;quot;Bild geladen&amp;quot;);&lt;br /&gt;
   elem.appendChild (img);&lt;br /&gt;
}&lt;br /&gt;
img.src = &amp;quot;little-snail.png&amp;quot;;  // erst nach dem Event Listener!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seite verlassen ===&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&amp;diff=26054</id>
		<title>JavaScript - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&amp;diff=26054"/>
		<updated>2022-04-24T07:48:21Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
Siehe auch&lt;br /&gt;
&lt;br /&gt;
 [[JavaScript - Plugins]]&lt;br /&gt;
 [[JavaScripts - Basics]]&lt;br /&gt;
 [[JavaScript - DOM Manipulation]]&lt;br /&gt;
 [[jQuery - Snippets]]&lt;br /&gt;
 [[Browser Fallbacks]]&lt;br /&gt;
 https://wiki.stephanschlegel.de/index.php?title=JQuery_vs_Vanilla_JavaScript&lt;br /&gt;
&lt;br /&gt;
== Sonderzeichen in Alert-Meldungen ==&lt;br /&gt;
&lt;br /&gt;
Oft sieht man im Web sehr hässliche alert-Meldungen , in denen die Umlaute nicht korrekt dargestellt sind. Das liegt auch daran, dass unterschiedliche Betriebssystem Zeichen unterschiedlich kodieren. Damit so etwas möglichst vermieden wird, sollte man solche Meldungen mit alert(unescape(&amp;quot;...&amp;quot;)) anzeigen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
 alert(unescape(&amp;quot;So was d%E4mliches%21&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
Zeichen	so verschlüsseln:&lt;br /&gt;
\	\\&lt;br /&gt;
&amp;quot;	\&amp;quot;&lt;br /&gt;
&amp;#039;	\&amp;#039;&lt;br /&gt;
Zeilenumbruch	\n&lt;br /&gt;
Wagenrücklauf	\r&lt;br /&gt;
(Den Unterschied zum Zeilenumbruch habe ich auch noch nicht begriffen.)&lt;br /&gt;
Tabulator	\t&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zeichen	so:&lt;br /&gt;
Ä	%C4&lt;br /&gt;
Ö	%D6&lt;br /&gt;
Ü	%DC&lt;br /&gt;
ä	%E4&lt;br /&gt;
ö	%F6&lt;br /&gt;
ü	%FC&lt;br /&gt;
ß	%DF&lt;br /&gt;
€	%u20AC&lt;br /&gt;
$	%24&lt;br /&gt;
%	%25&lt;br /&gt;
&lt;br /&gt;
Generier Tool:&lt;br /&gt;
http://www.salesianer.de/util/alert-umlaute.html&lt;br /&gt;
&lt;br /&gt;
== Teil einer Seite drucken ==&lt;br /&gt;
Old School JavaScript, sollte sich  aber relativ einfach auf jQuery übertragen lassen.&lt;br /&gt;
&lt;br /&gt;
Quelle: http://www.webstool.de/de/tipps_down_druck3.html Zugriff: 10/2011&lt;br /&gt;
&lt;br /&gt;
Mit einem einfachen JavaScript lässt sich mit relativ wenig Aufwand eine druckerfreundliche Version einer Webseite bei Bedarf erzeugen.&lt;br /&gt;
&lt;br /&gt;
Das JavaScript wird nachstehend vorgestellt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function ausgabe()&lt;br /&gt;
{&lt;br /&gt;
var ref = document.getElementById(&amp;quot;auswahl&amp;quot;);&lt;br /&gt;
var ausgabe;&lt;br /&gt;
// nächste Zeile öffnet ein Fenster der Größe 800 x 600 Pixel&lt;br /&gt;
ausgabe=window.open(&amp;quot;#&amp;quot;,&amp;quot;fenster&amp;quot;,&amp;quot;width=800,height=600,resizable=yes,menubar=yes,left=50,top=50&amp;quot;);&lt;br /&gt;
ausgabe.document.open();&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;html&amp;gt;\n&amp;lt;head&amp;gt;\n&amp;lt;title&amp;gt;Druckversion&amp;lt;/title&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-1&amp;quot;&amp;gt;\n&amp;#039;);&lt;br /&gt;
// in der nächsten Zeile an das eigene Stylesheet anpassen&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;../css/design1.css&amp;quot;&amp;gt;\n&amp;lt;/head&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;body&amp;gt;\n&amp;lt;h1 align=&amp;quot;center&amp;quot;&amp;gt;&amp;amp;copy; web s tool - Partner f&amp;amp;uuml;r Ihren Internetauftritt&amp;lt;/h1&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;div&amp;gt;\n&amp;#039;);&lt;br /&gt;
// Ausgabe aller Inhalte mit der id = auswahl&lt;br /&gt;
while (ref!=null)&lt;br /&gt;
{&lt;br /&gt;
ausgabe.document.write(ref.innerHTML + &amp;#039;\n&amp;#039;);&lt;br /&gt;
ref = ref.nextSibling;&lt;br /&gt;
}&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;/div&amp;gt;\n&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;javascript:window.print()&amp;quot;&amp;gt;drucken&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;\n&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.close();&lt;br /&gt;
ausgabe.focus();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die externe Einbindung des JavaScripts erfolgt dabei z.B. im head-Bereich der Webseite über&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script language=&amp;quot;JavaScript&amp;quot; src=&amp;quot;../scripts/ausgabe4print.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Von entscheidender Bedeutung ist, dass auf der Seite das auszuwählende Objekt mit der id = &amp;quot;auswahl&amp;quot; (bitte bei Bedarf anpassen) versehen ist. Das auszuwählende Objekt kann dabei eine Tabelle oder ein div-Container sein.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf erfolgt z.B. durch den Link &amp;lt;a href=&amp;quot;javascript:ausgabe();&amp;quot;&amp;gt; Druckversion&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fehler Behandlung ==&lt;br /&gt;
=== Prüfen ob ein Element existiert (normales JavaScript)===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function isElement(obj) {&lt;br /&gt;
  try {&lt;br /&gt;
    //Using W3 DOM2 (works for FF, Opera and Chrom)&lt;br /&gt;
    return obj instanceof HTMLElement;&lt;br /&gt;
  }&lt;br /&gt;
  catch(e){&lt;br /&gt;
    return (typeof obj===&amp;quot;object&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
      (obj.nodeType===1) &amp;amp;&amp;amp; (typeof obj.style === &amp;quot;object&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
      (typeof obj.ownerDocument ===&amp;quot;object&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Prüfen ob ein Element in einem Objekt-Literal existiert und nicht null ist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var data = {&lt;br /&gt;
    &amp;quot;key1&amp;quot; : val,&lt;br /&gt;
    &amp;quot;key2&amp;quot; : val,&lt;br /&gt;
    &amp;quot;key3&amp;quot; : val&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if( &amp;quot;key2&amp;quot; in data &amp;amp;&amp;amp; data.key2 != null){&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eingaben Validieren ==&lt;br /&gt;
=== Handynummer validieren (normales JavaScript) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function phone_is_valid(nr){&lt;br /&gt;
	var reg2 = /^([0-9]{4,6})+\/([0-9]{6,11})$/;&lt;br /&gt;
	return reg2.test(nr);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Datum validieren (normales JavaScript) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function date_is_valid(myDate){&lt;br /&gt;
	var isValid = false;&lt;br /&gt;
	var today = new Date();&lt;br /&gt;
	if (!myDate) return false;&lt;br /&gt;
	myDate=myDate.toString();&lt;br /&gt;
	arrDate=myDate.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
	if (arrDate.length!=3) return false;&lt;br /&gt;
	arrDate[0]=parseInt(arrDate[0],10);&lt;br /&gt;
	arrDate[1]=parseInt(arrDate[1],10)-1;&lt;br /&gt;
	if (arrDate[2].length==2) arrDate[2]=&amp;quot;20&amp;quot;+arrDate[2]&lt;br /&gt;
	var kontrolldatum=new Date(arrDate[2],arrDate[1],arrDate[0]);&lt;br /&gt;
	// Datum gültig ?&lt;br /&gt;
	if (kontrolldatum.getDate()==arrDate[0] &amp;amp;&amp;amp; kontrolldatum.getMonth()==arrDate[1] &amp;amp;&amp;amp; kontrolldatum.getFullYear()==arrDate[2])&lt;br /&gt;
	{&lt;br /&gt;
		// in der Zukunft&lt;br /&gt;
		if (kontrolldatum.getTime()-today.getTime()+(24*60*60*1000) &amp;gt; 0)&lt;br /&gt;
			return true; 		&lt;br /&gt;
	}&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Maus ==&lt;br /&gt;
[[JavaScript - Maus]]&lt;br /&gt;
== Timer ==&lt;br /&gt;
Quelle: http://blog.agrafix.net/2011/10/javascript-timers-mit-jquery/&lt;br /&gt;
&lt;br /&gt;
Benötigte Funktionen sind window.setTimeout und window.setInterval&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// funktion verzögert aufrufen&lt;br /&gt;
function machWas() {&lt;br /&gt;
   alert(&amp;#039;alert() mit 1000ms verzögerung!&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
window.setTimeout(machWas, 1000);&lt;br /&gt;
 &lt;br /&gt;
// funktion alle X Millisekunden aufruden&lt;br /&gt;
function machWasOft() {&lt;br /&gt;
   alert(&amp;#039;alle 1000ms ein alert()&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.setInterval(machWasOft, 1000);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch was ist, wenn ich jetzt einen solchen Timer ändern oder abbrechen möchte? Das ist eigentlich auch nicht schwer – die Funktionen setTimeout/setInterval geben ein Objekt zurück über das sie sich wieder beenden lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var x = 0;&lt;br /&gt;
function machWasAbbrechbarOft() {&lt;br /&gt;
    x += 1;&lt;br /&gt;
    if (x &amp;gt; 200) {&lt;br /&gt;
        window.clearInterval(running); // beende das &amp;quot;Interval&amp;quot; nach 201 Ausführungen&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
var running = window.setInterval(machWasAbbrechbarOft, 1000);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Timer mit jQuery ===&lt;br /&gt;
Für größere Projekte gibt es ein komfortableres jQuery Plugin&lt;br /&gt;
&lt;br /&gt;
Mit diesem Plugin geht das “Interval” setzen dann wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(document).everyTime(1000, &amp;quot;machWasOftAbbrechbar&amp;quot;, function(i) { // alle 1000ms&lt;br /&gt;
  alert(&amp;#039;Hallo ich bin der &amp;#039; + i + &amp;#039;te Aufruf!&amp;#039;); // machWasOftAbbrechbar, hier die funktion die aufgerufen werden soll&lt;br /&gt;
}, 200); // 200 mal ausführen&lt;br /&gt;
Der zweite Parameter, machWasOftAbbrechbar, stellt hierbei ein sogenanntes “label” dar, über das man den gestarten Timer dann wieder abbrechen kann:&lt;br /&gt;
&lt;br /&gt;
$(document).stopTime(&amp;quot;machWasOftAbbrechbar&amp;quot;); // stoppe machWasOftAbbrechbar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Viel mehr gibt’s eigentlich nicht dazu zu sagen – die Dokumentation dazu findet man, genau wie das Plugin selbst, unter http://plugins.jquery.com/project/timers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Arrays ==&lt;br /&gt;
=== Elemente hinzufügen / entfernen ===&lt;br /&gt;
Gegeben ist ein Array items in der Art &lt;br /&gt;
 [{id: 1, name: Anton, isFavourite: true}, {id: 2, name: Berta},...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// add to end of array&lt;br /&gt;
this.friends.push(newFriend)&lt;br /&gt;
&lt;br /&gt;
// add to start of array&lt;br /&gt;
this.friends.unshift(newFriend)&lt;br /&gt;
&lt;br /&gt;
// delete item from array via id - v1 -&amp;gt; override complete array&lt;br /&gt;
deleteItem(id){&lt;br /&gt;
  this.items = this.items.filter( item =&amp;gt; item.id !== sarchId)&lt;br /&gt;
  // filter( filterFunction ) uses filterFunction for every item in items.&lt;br /&gt;
  // If filterFunction returns true the item is kept. item.id !== id returns true for every&lt;br /&gt;
  // item which has NOT the id&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// v2 - change array&lt;br /&gt;
deleteItem(id){&lt;br /&gt;
  const itemIndex = this.items.findIndex(item =&amp;gt; item.id === id)&lt;br /&gt;
  this.items.splice(resIndex, 1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finden und Suchen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// find in array and change prop&lt;br /&gt;
const identifiedItem = this.items.find(&lt;br /&gt;
  (item) =&amp;gt; item.id === searchId // the same as function(friend){return friend.id...}&lt;br /&gt;
)&lt;br /&gt;
// filter(callback) - callback is executed on every array (array item) first item match is returned&lt;br /&gt;
identifiedItem.isFavourite = !identifiedItem.isFavourite&lt;br /&gt;
// identifiedItem is a proxy connected to the original items array.&lt;br /&gt;
// thus why we can modify identifiedItems and items will be altered too&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Objekte ==&lt;br /&gt;
[[JavaScript - Objektorientierte Programmierung]]&lt;br /&gt;
&lt;br /&gt;
=== Objekte löschen ===&lt;br /&gt;
 for (prop in allOverlays) { if (allOverlays.hasOwnProperty(prop)) { delete allOverlays[prop]; } } //ie 6 gc problems&lt;br /&gt;
 //allOverlays = {};&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Strings ==&lt;br /&gt;
[[JavaScript - Strings]]&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Numbers ==&lt;br /&gt;
 const x = &amp;#039;1&amp;#039;&lt;br /&gt;
 const y = +x // y is a number now&lt;br /&gt;
 const y = x.parseInt()&lt;br /&gt;
&lt;br /&gt;
== Viewport / Offset / Scrolling ==&lt;br /&gt;
=== Element sichtbar im Viewport ===&lt;br /&gt;
==== Kommt in den Viewport mit Self-Destroy ====&lt;br /&gt;
Wird nur einmal ausgeführt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.body.onscroll = function() {&lt;br /&gt;
	if (document.getElementById(&amp;quot;viewElement&amp;quot;).getBoundingClientRect().bottom &amp;lt;= window.innerHeight) {&lt;br /&gt;
		document.body.onscroll = &amp;quot;&amp;quot;;&lt;br /&gt;
		alert(&amp;quot;The tag just came into view&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Komplett im Viewport ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function isInViewport(el) {&lt;br /&gt;
    const rect = el.getBoundingClientRect();&lt;br /&gt;
    return (&lt;br /&gt;
        rect.top &amp;gt;= 0 &amp;amp;&amp;amp;&lt;br /&gt;
        rect.left &amp;gt;= 0 &amp;amp;&amp;amp;&lt;br /&gt;
        rect.bottom &amp;lt;= (window.innerHeight || document.documentElement.clientHeight) &amp;amp;&amp;amp;&lt;br /&gt;
        rect.right &amp;lt;= (window.innerWidth || document.documentElement.clientWidth)&lt;br /&gt;
&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
const box = document.querySelector(&amp;#039;.box&amp;#039;);&lt;br /&gt;
const message = document.querySelector(&amp;#039;#message&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
document.addEventListener(&amp;#039;scroll&amp;#039;, function () {&lt;br /&gt;
    const messageText = isInViewport(box) ?&lt;br /&gt;
        &amp;#039;The box is visible in the viewport&amp;#039; :&lt;br /&gt;
        &amp;#039;The box is not visible in the viewport&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    message.textContent = messageText;&lt;br /&gt;
&lt;br /&gt;
}, {&lt;br /&gt;
    passive: true&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teil im Viewport ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * checks if any part of the element is in viewport&lt;br /&gt;
 */&lt;br /&gt;
function isInViewport(el){&lt;br /&gt;
  h = el.height();&lt;br /&gt;
  hVp = $(window).height();&lt;br /&gt;
  posY = el.offset().top - $(window).scrollTop();&lt;br /&gt;
  dh = posY+h;&lt;br /&gt;
  // dh &amp;lt; 0 -&amp;gt; oben raus&lt;br /&gt;
  // posY &amp;gt; hVp -&amp;gt; unten raus&lt;br /&gt;
  if ( dh &amp;lt; 0 || posY &amp;gt; hVp ) return false;&lt;br /&gt;
  else return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Funktion mit GSAP ScrollTrigger starten ===&lt;br /&gt;
Counter Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function count(){&lt;br /&gt;
  $(&amp;#039;.counter&amp;#039;).each(function() {&lt;br /&gt;
    var $this = $(this), countTo = $this.attr(&amp;#039;data-count&amp;#039;);&lt;br /&gt;
    $({ countNum: $this.text()}).animate({&lt;br /&gt;
      countNum: countTo&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      duration: 5000,&lt;br /&gt;
      easing:&amp;#039;linear&amp;#039;,&lt;br /&gt;
      step: function() {&lt;br /&gt;
        $this.text(Math.floor(this.countNum));&lt;br /&gt;
      },&lt;br /&gt;
      complete: function() {&lt;br /&gt;
        $this.text(this.countNum);&lt;br /&gt;
        //alert(&amp;#039;finished&amp;#039;);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ScrollTrigger.create({&lt;br /&gt;
  trigger: &amp;#039;#counterTrigger&amp;#039;,&lt;br /&gt;
  onEnter: ()=&amp;gt;{&lt;br /&gt;
    console.log(&amp;#039;count&amp;#039;)&lt;br /&gt;
    count()&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JavaScript - HTML5 Audio ==&lt;br /&gt;
[[JavaScript - HTML5 Audio]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[[JavaScript - Tricks mit Links]]&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Verschiedenes ==&lt;br /&gt;
=== Enter 2 Tabs ===&lt;br /&gt;
JQuery&lt;br /&gt;
&lt;br /&gt;
Wenn der User in einem Formular die Eingabetaste drückt wird in vielen Browsxern das Formular abgesendet. Stattdessen, kann man den Tastendruck in einen Tab verwandeln, dann kommt der User stattdessen ins nächste Eingabefeld. In diesem Beispiel wird der Cursor zu Beginn gleich ins erste Feld gesetzt (eingesetzt bei Mietlager XL Rechner).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// enter2tab for textboxes&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
	$(&amp;#039;input:text:first&amp;#039;).focus();&lt;br /&gt;
	$(&amp;#039;input:text&amp;#039;).bind(&amp;#039;keydown&amp;#039;, function(e) {&lt;br /&gt;
		if (e.keyCode == 13) {&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
			var nextIndex = $(&amp;#039;input:text&amp;#039;).index(this) + 1;&lt;br /&gt;
			var maxIndex = $(&amp;#039;input:text&amp;#039;).length;&lt;br /&gt;
			if (nextIndex &amp;lt; maxIndex) {&lt;br /&gt;
				$(&amp;#039;input:text:eq(&amp;#039; + nextIndex+&amp;#039;)&amp;#039;).focus();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JavaScript Animation ===&lt;br /&gt;
Siehe [[Animation im Web]]&lt;br /&gt;
&lt;br /&gt;
=== Sortieren ===&lt;br /&gt;
http://www.javascriptkit.com/javatutors/arraysort.shtml&lt;br /&gt;
&lt;br /&gt;
=== Scrolling ===&lt;br /&gt;
==== Smooth Scroll &amp;amp; Sticky - Fixed Navbar ====&lt;br /&gt;
jQuery&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
  var stickyNavTop = $(&amp;#039;.nav&amp;#039;).offset().top;&lt;br /&gt;
  var stickyNav = function(){&lt;br /&gt;
    var scrollTop = $(window).scrollTop();  &lt;br /&gt;
    if (scrollTop &amp;gt; stickyNavTop) { &lt;br /&gt;
      $(&amp;#039;.nav&amp;#039;).addClass(&amp;#039;sticky&amp;#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      $(&amp;#039;.nav&amp;#039;).removeClass(&amp;#039;sticky&amp;#039;); &lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
  stickyNav();&lt;br /&gt;
  $(window).scroll(function() {&lt;br /&gt;
    stickyNav();&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CSS - wichtig vor allem fixed.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.sticky {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 100;&lt;br /&gt;
  border-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Smooth Scroll für Anchor Tags oder toTop Links ====&lt;br /&gt;
 https://stackoverflow.com/questions/7717527/smooth-scrolling-when-clicking-an-anchor-link&lt;br /&gt;
noch ein Beispiel (Vanilla)&lt;br /&gt;
 https://perishablepress.com/vanilla-javascript-scroll-anchor/&lt;br /&gt;
&lt;br /&gt;
===== Beispiel ab 2018 =====&lt;br /&gt;
Nutzt das CSS Verhalten (kann man auch direkt als CSS nutzen. Manchmal funktioniert es (Stand 2020) nicht ganz sauber. Safari und Edge funktionieren nicht mit dem CSS Behaviour&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
document.querySelectorAll(&amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;).forEach(anchor =&amp;gt; {&lt;br /&gt;
    anchor.addEventListener(&amp;#039;click&amp;#039;, function (e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
&lt;br /&gt;
        document.querySelector(this.getAttribute(&amp;#039;href&amp;#039;)).scrollIntoView({&lt;br /&gt;
            behavior: &amp;#039;smooth&amp;#039;&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For older browser support, you can use this jQuery technique:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(document).on(&amp;#039;click&amp;#039;, &amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;, function (event) {&lt;br /&gt;
    event.preventDefault();&lt;br /&gt;
&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
        scrollTop: $($.attr(this, &amp;#039;href&amp;#039;)).offset().top&lt;br /&gt;
    }, 500);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And here&amp;#039;s the fiddle: http://jsfiddle.net/9SDLw/&lt;br /&gt;
&lt;br /&gt;
If your target element does not have an ID, and you&amp;#039;re linking to it by its name, use this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(&amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;).click(function () {&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
        scrollTop: $(&amp;#039;[name=&amp;quot;&amp;#039; + $.attr(this, &amp;#039;href&amp;#039;).substr(1) + &amp;#039;&amp;quot;]&amp;#039;).offset().top&lt;br /&gt;
    }, 500);&lt;br /&gt;
&lt;br /&gt;
    return false;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 1 (jQuery)  =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(&amp;#039;a[href*=#]:not([href=#])&amp;#039;).click(function() {&lt;br /&gt;
    if (location.pathname.replace(/^\//,&amp;#039;&amp;#039;) == this.pathname.replace(/^\//,&amp;#039;&amp;#039;) &lt;br /&gt;
        || location.hostname == this.hostname) {&lt;br /&gt;
&lt;br /&gt;
        var target = $(this.hash);&lt;br /&gt;
        target = target.length ? target : $(&amp;#039;[name=&amp;#039; + this.hash.slice(1) +&amp;#039;]&amp;#039;);&lt;br /&gt;
           if (target.length) {&lt;br /&gt;
             $(&amp;#039;html,body&amp;#039;).animate({&lt;br /&gt;
                 scrollTop: target.offset().top&lt;br /&gt;
            }, 1000);&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 2 (jQuery) mit Offset =====&lt;br /&gt;
statt &lt;br /&gt;
 .top&lt;br /&gt;
einfach&lt;br /&gt;
 .top-100&lt;br /&gt;
http://1stwebmagazine.com/jquery-scroll-to-anchor-point&lt;br /&gt;
&lt;br /&gt;
==== Smooth Scrolling mit Vanilla JS ====&lt;br /&gt;
 [[JavaScript - Smooth Scrolling]]&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 3 Materialize Pushpin ToTop =====&lt;br /&gt;
jQuery Plugin enthalten in MaterializeCSS http://materializecss.com/pushpin.html&lt;br /&gt;
&lt;br /&gt;
Kann für ToTop Navigation oder Fixed Navigations etc. eingesetzt werden. Liegt im Verzeichnis js/pushpin geht aber nicht ohne weiteres Standalone&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//PUSHPIN TOTOP&lt;br /&gt;
$( document ).ready(function(){&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).pushpin({&lt;br /&gt;
    top: 500,// distance where pin becomes fixed (class)- default 0&lt;br /&gt;
    bottom: &amp;#039;infinity&amp;#039;, // distance when pin stops being fixed - default infinity&lt;br /&gt;
    offset: 24 // style=&amp;quot;top:[offset]&amp;quot;&amp;quot;&amp;quot; - default 0&lt;br /&gt;
  })&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//You can remove pushpin and pushpin classes&lt;br /&gt;
$(&amp;#039;.tabs-wrapper .row&amp;#039;).pushpin(&amp;#039;remove&amp;#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
CSS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Class for when element is above threshold */&lt;br /&gt;
.pin-top {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
/* Class for when element is below threshold*/&lt;br /&gt;
.pin-bottom {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
/* Class for when element is pinned */&lt;br /&gt;
.pinned {&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  z-index: 9;&lt;br /&gt;
}&lt;br /&gt;
/* Only necessary for window height sized blocks. */&lt;br /&gt;
  html, body, .block {&lt;br /&gt;
    height: 100%;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel Markup für ToTop Navigation =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;anchor&amp;quot; name=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;!-- totop --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;totop&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-angle-double-up fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).hide();&lt;br /&gt;
  $(window).scroll(function(){&lt;br /&gt;
    var value = 200; // Toplink beim vertikalen scrollen ab einem Wert von XXX &amp;#039;px&amp;#039; anzeigen&lt;br /&gt;
    var scrolling = $(window).scrollTop();&lt;br /&gt;
    if (scrolling &amp;gt; value) {&lt;br /&gt;
      $(&amp;#039;.totop&amp;#039;).fadeIn();&lt;br /&gt;
    } else {&lt;br /&gt;
      $(&amp;#039;.totop&amp;#039;).fadeOut();&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).click(function(){&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({scrollTop:&amp;#039;0px&amp;#039;}, 400);&lt;br /&gt;
    return false;&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toggle ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;javascript:void(0);&amp;quot; class=&amp;quot;icon&amp;quot; onclick=&amp;quot;myFunction()&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;i class=&amp;quot;fa fa-bars&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
oder registrieren&lt;br /&gt;
&lt;br /&gt;
element.addEventListener(&amp;#039;click&amp;#039;, myFunctionReference , false);&lt;br /&gt;
&lt;br /&gt;
function toggleNavigation() {&lt;br /&gt;
  var x = document.getElementById(&amp;quot;#mobileNavigationPanel&amp;quot;);&lt;br /&gt;
  if (x.style.display === &amp;quot;block&amp;quot;) {&lt;br /&gt;
    x.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
    x.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zwischenablage (Clipboard) modifizieren ===&lt;br /&gt;
 https://developer.mozilla.org/en-US/docs/Web/API/Element/copy_event&lt;br /&gt;
Mit dem Copy Event kann man die Zwischenablage modifizieren wenn der User etwas hineinkopiert. Z.B. könnte das ein Copyright Hinweis sein, den man anhängt.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel - Uppercase ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;Try copying text from this box...&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;target&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;...and pasting it into this one&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const source = document.querySelector(&amp;#039;div.source&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
source.addEventListener(&amp;#039;copy&amp;#039;, (event) =&amp;gt; {&lt;br /&gt;
    const selection = document.getSelection();&lt;br /&gt;
    event.clipboardData.setData(&amp;#039;text/plain&amp;#039;, selection.toString().toUpperCase());&lt;br /&gt;
    event.preventDefault();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel - Copyright Hinweis hinzufügen ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box source&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;Kopiere Text aus dieser Box...&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box target&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;...in diese Box!&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    const source = document.querySelector(&amp;#039;div.source&amp;#039;);&lt;br /&gt;
    var today = new Date();&lt;br /&gt;
    var dd = String(today.getDate()).padStart(2, &amp;#039;0&amp;#039;);&lt;br /&gt;
    var mm = String(today.getMonth() + 1).padStart(2, &amp;#039;0&amp;#039;); //January is 0!&lt;br /&gt;
    var yyyy = today.getFullYear();&lt;br /&gt;
    copyDate = dd + &amp;#039;.&amp;#039; + mm + &amp;#039;.&amp;#039; + yyyy; &lt;br /&gt;
    copyHint = &amp;#039;\nQuelle: &amp;#039; + window.location.href + &amp;#039; (Zugriff am: &amp;#039; + copyDate + &amp;#039;)&amp;#039;; //href, hostname or pathname is possible&lt;br /&gt;
    source.addEventListener(&amp;#039;copy&amp;#039;, (event) =&amp;gt; {&lt;br /&gt;
        const selection = document.getSelection();&lt;br /&gt;
        event.clipboardData.setData(&amp;#039;text/plain&amp;#039;, selection.toString() + copyHint);&lt;br /&gt;
        event.preventDefault();&lt;br /&gt;
    });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Must Know ==&lt;br /&gt;
=== Seite geladen? ===&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 window.onload = function () {&lt;br /&gt;
        console.log(&amp;#039;Dokument geladen&amp;#039;);&lt;br /&gt;
        function init();&lt;br /&gt;
        function machwas();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seite und Bilder geladen ===&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
let img = new Image;&lt;br /&gt;
&lt;br /&gt;
img.onload = function() {&lt;br /&gt;
   console.log (&amp;quot;Bild geladen&amp;quot;);&lt;br /&gt;
   elem.appendChild (img);&lt;br /&gt;
}&lt;br /&gt;
img.src = &amp;quot;little-snail.png&amp;quot;;  // erst nach dem Event Listener!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seite verlassen ===&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&amp;diff=26053</id>
		<title>JavaScript - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&amp;diff=26053"/>
		<updated>2022-04-22T11:29:54Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Element sichtbar im Viewport */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
Siehe auch&lt;br /&gt;
&lt;br /&gt;
 [[JavaScript - Plugins]]&lt;br /&gt;
 [[JavaScripts - Basics]]&lt;br /&gt;
 [[JavaScript - DOM Manipulation]]&lt;br /&gt;
 [[jQuery - Snippets]]&lt;br /&gt;
 [[Browser Fallbacks]]&lt;br /&gt;
&lt;br /&gt;
== Sonderzeichen in Alert-Meldungen ==&lt;br /&gt;
&lt;br /&gt;
Oft sieht man im Web sehr hässliche alert-Meldungen , in denen die Umlaute nicht korrekt dargestellt sind. Das liegt auch daran, dass unterschiedliche Betriebssystem Zeichen unterschiedlich kodieren. Damit so etwas möglichst vermieden wird, sollte man solche Meldungen mit alert(unescape(&amp;quot;...&amp;quot;)) anzeigen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
 alert(unescape(&amp;quot;So was d%E4mliches%21&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
Zeichen	so verschlüsseln:&lt;br /&gt;
\	\\&lt;br /&gt;
&amp;quot;	\&amp;quot;&lt;br /&gt;
&amp;#039;	\&amp;#039;&lt;br /&gt;
Zeilenumbruch	\n&lt;br /&gt;
Wagenrücklauf	\r&lt;br /&gt;
(Den Unterschied zum Zeilenumbruch habe ich auch noch nicht begriffen.)&lt;br /&gt;
Tabulator	\t&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zeichen	so:&lt;br /&gt;
Ä	%C4&lt;br /&gt;
Ö	%D6&lt;br /&gt;
Ü	%DC&lt;br /&gt;
ä	%E4&lt;br /&gt;
ö	%F6&lt;br /&gt;
ü	%FC&lt;br /&gt;
ß	%DF&lt;br /&gt;
€	%u20AC&lt;br /&gt;
$	%24&lt;br /&gt;
%	%25&lt;br /&gt;
&lt;br /&gt;
Generier Tool:&lt;br /&gt;
http://www.salesianer.de/util/alert-umlaute.html&lt;br /&gt;
&lt;br /&gt;
== Teil einer Seite drucken ==&lt;br /&gt;
Old School JavaScript, sollte sich  aber relativ einfach auf jQuery übertragen lassen.&lt;br /&gt;
&lt;br /&gt;
Quelle: http://www.webstool.de/de/tipps_down_druck3.html Zugriff: 10/2011&lt;br /&gt;
&lt;br /&gt;
Mit einem einfachen JavaScript lässt sich mit relativ wenig Aufwand eine druckerfreundliche Version einer Webseite bei Bedarf erzeugen.&lt;br /&gt;
&lt;br /&gt;
Das JavaScript wird nachstehend vorgestellt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function ausgabe()&lt;br /&gt;
{&lt;br /&gt;
var ref = document.getElementById(&amp;quot;auswahl&amp;quot;);&lt;br /&gt;
var ausgabe;&lt;br /&gt;
// nächste Zeile öffnet ein Fenster der Größe 800 x 600 Pixel&lt;br /&gt;
ausgabe=window.open(&amp;quot;#&amp;quot;,&amp;quot;fenster&amp;quot;,&amp;quot;width=800,height=600,resizable=yes,menubar=yes,left=50,top=50&amp;quot;);&lt;br /&gt;
ausgabe.document.open();&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;html&amp;gt;\n&amp;lt;head&amp;gt;\n&amp;lt;title&amp;gt;Druckversion&amp;lt;/title&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-1&amp;quot;&amp;gt;\n&amp;#039;);&lt;br /&gt;
// in der nächsten Zeile an das eigene Stylesheet anpassen&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;../css/design1.css&amp;quot;&amp;gt;\n&amp;lt;/head&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;body&amp;gt;\n&amp;lt;h1 align=&amp;quot;center&amp;quot;&amp;gt;&amp;amp;copy; web s tool - Partner f&amp;amp;uuml;r Ihren Internetauftritt&amp;lt;/h1&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;div&amp;gt;\n&amp;#039;);&lt;br /&gt;
// Ausgabe aller Inhalte mit der id = auswahl&lt;br /&gt;
while (ref!=null)&lt;br /&gt;
{&lt;br /&gt;
ausgabe.document.write(ref.innerHTML + &amp;#039;\n&amp;#039;);&lt;br /&gt;
ref = ref.nextSibling;&lt;br /&gt;
}&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;/div&amp;gt;\n&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;javascript:window.print()&amp;quot;&amp;gt;drucken&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;\n&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.close();&lt;br /&gt;
ausgabe.focus();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die externe Einbindung des JavaScripts erfolgt dabei z.B. im head-Bereich der Webseite über&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script language=&amp;quot;JavaScript&amp;quot; src=&amp;quot;../scripts/ausgabe4print.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Von entscheidender Bedeutung ist, dass auf der Seite das auszuwählende Objekt mit der id = &amp;quot;auswahl&amp;quot; (bitte bei Bedarf anpassen) versehen ist. Das auszuwählende Objekt kann dabei eine Tabelle oder ein div-Container sein.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf erfolgt z.B. durch den Link &amp;lt;a href=&amp;quot;javascript:ausgabe();&amp;quot;&amp;gt; Druckversion&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fehler Behandlung ==&lt;br /&gt;
=== Prüfen ob ein Element existiert (normales JavaScript)===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function isElement(obj) {&lt;br /&gt;
  try {&lt;br /&gt;
    //Using W3 DOM2 (works for FF, Opera and Chrom)&lt;br /&gt;
    return obj instanceof HTMLElement;&lt;br /&gt;
  }&lt;br /&gt;
  catch(e){&lt;br /&gt;
    return (typeof obj===&amp;quot;object&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
      (obj.nodeType===1) &amp;amp;&amp;amp; (typeof obj.style === &amp;quot;object&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
      (typeof obj.ownerDocument ===&amp;quot;object&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Prüfen ob ein Element in einem Objekt-Literal existiert und nicht null ist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var data = {&lt;br /&gt;
    &amp;quot;key1&amp;quot; : val,&lt;br /&gt;
    &amp;quot;key2&amp;quot; : val,&lt;br /&gt;
    &amp;quot;key3&amp;quot; : val&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if( &amp;quot;key2&amp;quot; in data &amp;amp;&amp;amp; data.key2 != null){&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eingaben Validieren ==&lt;br /&gt;
=== Handynummer validieren (normales JavaScript) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function phone_is_valid(nr){&lt;br /&gt;
	var reg2 = /^([0-9]{4,6})+\/([0-9]{6,11})$/;&lt;br /&gt;
	return reg2.test(nr);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Datum validieren (normales JavaScript) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function date_is_valid(myDate){&lt;br /&gt;
	var isValid = false;&lt;br /&gt;
	var today = new Date();&lt;br /&gt;
	if (!myDate) return false;&lt;br /&gt;
	myDate=myDate.toString();&lt;br /&gt;
	arrDate=myDate.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
	if (arrDate.length!=3) return false;&lt;br /&gt;
	arrDate[0]=parseInt(arrDate[0],10);&lt;br /&gt;
	arrDate[1]=parseInt(arrDate[1],10)-1;&lt;br /&gt;
	if (arrDate[2].length==2) arrDate[2]=&amp;quot;20&amp;quot;+arrDate[2]&lt;br /&gt;
	var kontrolldatum=new Date(arrDate[2],arrDate[1],arrDate[0]);&lt;br /&gt;
	// Datum gültig ?&lt;br /&gt;
	if (kontrolldatum.getDate()==arrDate[0] &amp;amp;&amp;amp; kontrolldatum.getMonth()==arrDate[1] &amp;amp;&amp;amp; kontrolldatum.getFullYear()==arrDate[2])&lt;br /&gt;
	{&lt;br /&gt;
		// in der Zukunft&lt;br /&gt;
		if (kontrolldatum.getTime()-today.getTime()+(24*60*60*1000) &amp;gt; 0)&lt;br /&gt;
			return true; 		&lt;br /&gt;
	}&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Maus ==&lt;br /&gt;
[[JavaScript - Maus]]&lt;br /&gt;
== Timer ==&lt;br /&gt;
Quelle: http://blog.agrafix.net/2011/10/javascript-timers-mit-jquery/&lt;br /&gt;
&lt;br /&gt;
Benötigte Funktionen sind window.setTimeout und window.setInterval&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// funktion verzögert aufrufen&lt;br /&gt;
function machWas() {&lt;br /&gt;
   alert(&amp;#039;alert() mit 1000ms verzögerung!&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
window.setTimeout(machWas, 1000);&lt;br /&gt;
 &lt;br /&gt;
// funktion alle X Millisekunden aufruden&lt;br /&gt;
function machWasOft() {&lt;br /&gt;
   alert(&amp;#039;alle 1000ms ein alert()&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.setInterval(machWasOft, 1000);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Doch was ist, wenn ich jetzt einen solchen Timer ändern oder abbrechen möchte? Das ist eigentlich auch nicht schwer – die Funktionen setTimeout/setInterval geben ein Objekt zurück über das sie sich wieder beenden lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var x = 0;&lt;br /&gt;
function machWasAbbrechbarOft() {&lt;br /&gt;
    x += 1;&lt;br /&gt;
    if (x &amp;gt; 200) {&lt;br /&gt;
        window.clearInterval(running); // beende das &amp;quot;Interval&amp;quot; nach 201 Ausführungen&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
var running = window.setInterval(machWasAbbrechbarOft, 1000);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Timer mit jQuery ===&lt;br /&gt;
Für größere Projekte gibt es ein komfortableres jQuery Plugin&lt;br /&gt;
&lt;br /&gt;
Mit diesem Plugin geht das “Interval” setzen dann wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(document).everyTime(1000, &amp;quot;machWasOftAbbrechbar&amp;quot;, function(i) { // alle 1000ms&lt;br /&gt;
  alert(&amp;#039;Hallo ich bin der &amp;#039; + i + &amp;#039;te Aufruf!&amp;#039;); // machWasOftAbbrechbar, hier die funktion die aufgerufen werden soll&lt;br /&gt;
}, 200); // 200 mal ausführen&lt;br /&gt;
Der zweite Parameter, machWasOftAbbrechbar, stellt hierbei ein sogenanntes “label” dar, über das man den gestarten Timer dann wieder abbrechen kann:&lt;br /&gt;
&lt;br /&gt;
$(document).stopTime(&amp;quot;machWasOftAbbrechbar&amp;quot;); // stoppe machWasOftAbbrechbar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Viel mehr gibt’s eigentlich nicht dazu zu sagen – die Dokumentation dazu findet man, genau wie das Plugin selbst, unter http://plugins.jquery.com/project/timers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Arrays ==&lt;br /&gt;
=== Elemente hinzufügen / entfernen ===&lt;br /&gt;
Gegeben ist ein Array items in der Art &lt;br /&gt;
 [{id: 1, name: Anton, isFavourite: true}, {id: 2, name: Berta},...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// add to end of array&lt;br /&gt;
this.friends.push(newFriend)&lt;br /&gt;
&lt;br /&gt;
// add to start of array&lt;br /&gt;
this.friends.unshift(newFriend)&lt;br /&gt;
&lt;br /&gt;
// delete item from array via id - v1 -&amp;gt; override complete array&lt;br /&gt;
deleteItem(id){&lt;br /&gt;
  this.items = this.items.filter( item =&amp;gt; item.id !== sarchId)&lt;br /&gt;
  // filter( filterFunction ) uses filterFunction for every item in items.&lt;br /&gt;
  // If filterFunction returns true the item is kept. item.id !== id returns true for every&lt;br /&gt;
  // item which has NOT the id&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// v2 - change array&lt;br /&gt;
deleteItem(id){&lt;br /&gt;
  const itemIndex = this.items.findIndex(item =&amp;gt; item.id === id)&lt;br /&gt;
  this.items.splice(resIndex, 1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finden und Suchen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// find in array and change prop&lt;br /&gt;
const identifiedItem = this.items.find(&lt;br /&gt;
  (item) =&amp;gt; item.id === searchId // the same as function(friend){return friend.id...}&lt;br /&gt;
)&lt;br /&gt;
// filter(callback) - callback is executed on every array (array item) first item match is returned&lt;br /&gt;
identifiedItem.isFavourite = !identifiedItem.isFavourite&lt;br /&gt;
// identifiedItem is a proxy connected to the original items array.&lt;br /&gt;
// thus why we can modify identifiedItems and items will be altered too&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Objekte ==&lt;br /&gt;
[[JavaScript - Objektorientierte Programmierung]]&lt;br /&gt;
&lt;br /&gt;
=== Objekte löschen ===&lt;br /&gt;
 for (prop in allOverlays) { if (allOverlays.hasOwnProperty(prop)) { delete allOverlays[prop]; } } //ie 6 gc problems&lt;br /&gt;
 //allOverlays = {};&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Strings ==&lt;br /&gt;
[[JavaScript - Strings]]&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Numbers ==&lt;br /&gt;
 const x = &amp;#039;1&amp;#039;&lt;br /&gt;
 const y = +x // y is a number now&lt;br /&gt;
 const y = x.parseInt()&lt;br /&gt;
&lt;br /&gt;
== Viewport / Offset / Scrolling ==&lt;br /&gt;
=== Element sichtbar im Viewport ===&lt;br /&gt;
==== Kommt in den Viewport mit Self-Destroy ====&lt;br /&gt;
Wird nur einmal ausgeführt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.body.onscroll = function() {&lt;br /&gt;
	if (document.getElementById(&amp;quot;viewElement&amp;quot;).getBoundingClientRect().bottom &amp;lt;= window.innerHeight) {&lt;br /&gt;
		document.body.onscroll = &amp;quot;&amp;quot;;&lt;br /&gt;
		alert(&amp;quot;The tag just came into view&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Komplett im Viewport ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function isInViewport(el) {&lt;br /&gt;
    const rect = el.getBoundingClientRect();&lt;br /&gt;
    return (&lt;br /&gt;
        rect.top &amp;gt;= 0 &amp;amp;&amp;amp;&lt;br /&gt;
        rect.left &amp;gt;= 0 &amp;amp;&amp;amp;&lt;br /&gt;
        rect.bottom &amp;lt;= (window.innerHeight || document.documentElement.clientHeight) &amp;amp;&amp;amp;&lt;br /&gt;
        rect.right &amp;lt;= (window.innerWidth || document.documentElement.clientWidth)&lt;br /&gt;
&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
const box = document.querySelector(&amp;#039;.box&amp;#039;);&lt;br /&gt;
const message = document.querySelector(&amp;#039;#message&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
document.addEventListener(&amp;#039;scroll&amp;#039;, function () {&lt;br /&gt;
    const messageText = isInViewport(box) ?&lt;br /&gt;
        &amp;#039;The box is visible in the viewport&amp;#039; :&lt;br /&gt;
        &amp;#039;The box is not visible in the viewport&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    message.textContent = messageText;&lt;br /&gt;
&lt;br /&gt;
}, {&lt;br /&gt;
    passive: true&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teil im Viewport ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * checks if any part of the element is in viewport&lt;br /&gt;
 */&lt;br /&gt;
function isInViewport(el){&lt;br /&gt;
  h = el.height();&lt;br /&gt;
  hVp = $(window).height();&lt;br /&gt;
  posY = el.offset().top - $(window).scrollTop();&lt;br /&gt;
  dh = posY+h;&lt;br /&gt;
  // dh &amp;lt; 0 -&amp;gt; oben raus&lt;br /&gt;
  // posY &amp;gt; hVp -&amp;gt; unten raus&lt;br /&gt;
  if ( dh &amp;lt; 0 || posY &amp;gt; hVp ) return false;&lt;br /&gt;
  else return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Funktion mit GSAP ScrollTrigger starten ===&lt;br /&gt;
Counter Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function count(){&lt;br /&gt;
  $(&amp;#039;.counter&amp;#039;).each(function() {&lt;br /&gt;
    var $this = $(this), countTo = $this.attr(&amp;#039;data-count&amp;#039;);&lt;br /&gt;
    $({ countNum: $this.text()}).animate({&lt;br /&gt;
      countNum: countTo&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      duration: 5000,&lt;br /&gt;
      easing:&amp;#039;linear&amp;#039;,&lt;br /&gt;
      step: function() {&lt;br /&gt;
        $this.text(Math.floor(this.countNum));&lt;br /&gt;
      },&lt;br /&gt;
      complete: function() {&lt;br /&gt;
        $this.text(this.countNum);&lt;br /&gt;
        //alert(&amp;#039;finished&amp;#039;);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ScrollTrigger.create({&lt;br /&gt;
  trigger: &amp;#039;#counterTrigger&amp;#039;,&lt;br /&gt;
  onEnter: ()=&amp;gt;{&lt;br /&gt;
    console.log(&amp;#039;count&amp;#039;)&lt;br /&gt;
    count()&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JavaScript - HTML5 Audio ==&lt;br /&gt;
[[JavaScript - HTML5 Audio]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[[JavaScript - Tricks mit Links]]&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Verschiedenes ==&lt;br /&gt;
=== Enter 2 Tabs ===&lt;br /&gt;
JQuery&lt;br /&gt;
&lt;br /&gt;
Wenn der User in einem Formular die Eingabetaste drückt wird in vielen Browsxern das Formular abgesendet. Stattdessen, kann man den Tastendruck in einen Tab verwandeln, dann kommt der User stattdessen ins nächste Eingabefeld. In diesem Beispiel wird der Cursor zu Beginn gleich ins erste Feld gesetzt (eingesetzt bei Mietlager XL Rechner).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// enter2tab for textboxes&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
	$(&amp;#039;input:text:first&amp;#039;).focus();&lt;br /&gt;
	$(&amp;#039;input:text&amp;#039;).bind(&amp;#039;keydown&amp;#039;, function(e) {&lt;br /&gt;
		if (e.keyCode == 13) {&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
			var nextIndex = $(&amp;#039;input:text&amp;#039;).index(this) + 1;&lt;br /&gt;
			var maxIndex = $(&amp;#039;input:text&amp;#039;).length;&lt;br /&gt;
			if (nextIndex &amp;lt; maxIndex) {&lt;br /&gt;
				$(&amp;#039;input:text:eq(&amp;#039; + nextIndex+&amp;#039;)&amp;#039;).focus();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JavaScript Animation ===&lt;br /&gt;
Siehe [[Animation im Web]]&lt;br /&gt;
&lt;br /&gt;
=== Sortieren ===&lt;br /&gt;
http://www.javascriptkit.com/javatutors/arraysort.shtml&lt;br /&gt;
&lt;br /&gt;
=== Scrolling ===&lt;br /&gt;
==== Smooth Scroll &amp;amp; Sticky - Fixed Navbar ====&lt;br /&gt;
jQuery&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
  var stickyNavTop = $(&amp;#039;.nav&amp;#039;).offset().top;&lt;br /&gt;
  var stickyNav = function(){&lt;br /&gt;
    var scrollTop = $(window).scrollTop();  &lt;br /&gt;
    if (scrollTop &amp;gt; stickyNavTop) { &lt;br /&gt;
      $(&amp;#039;.nav&amp;#039;).addClass(&amp;#039;sticky&amp;#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      $(&amp;#039;.nav&amp;#039;).removeClass(&amp;#039;sticky&amp;#039;); &lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
  stickyNav();&lt;br /&gt;
  $(window).scroll(function() {&lt;br /&gt;
    stickyNav();&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CSS - wichtig vor allem fixed.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.sticky {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 100;&lt;br /&gt;
  border-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Smooth Scroll für Anchor Tags oder toTop Links ====&lt;br /&gt;
 https://stackoverflow.com/questions/7717527/smooth-scrolling-when-clicking-an-anchor-link&lt;br /&gt;
noch ein Beispiel (Vanilla)&lt;br /&gt;
 https://perishablepress.com/vanilla-javascript-scroll-anchor/&lt;br /&gt;
&lt;br /&gt;
===== Beispiel ab 2018 =====&lt;br /&gt;
Nutzt das CSS Verhalten (kann man auch direkt als CSS nutzen. Manchmal funktioniert es (Stand 2020) nicht ganz sauber. Safari und Edge funktionieren nicht mit dem CSS Behaviour&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
document.querySelectorAll(&amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;).forEach(anchor =&amp;gt; {&lt;br /&gt;
    anchor.addEventListener(&amp;#039;click&amp;#039;, function (e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
&lt;br /&gt;
        document.querySelector(this.getAttribute(&amp;#039;href&amp;#039;)).scrollIntoView({&lt;br /&gt;
            behavior: &amp;#039;smooth&amp;#039;&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For older browser support, you can use this jQuery technique:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(document).on(&amp;#039;click&amp;#039;, &amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;, function (event) {&lt;br /&gt;
    event.preventDefault();&lt;br /&gt;
&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
        scrollTop: $($.attr(this, &amp;#039;href&amp;#039;)).offset().top&lt;br /&gt;
    }, 500);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And here&amp;#039;s the fiddle: http://jsfiddle.net/9SDLw/&lt;br /&gt;
&lt;br /&gt;
If your target element does not have an ID, and you&amp;#039;re linking to it by its name, use this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(&amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;).click(function () {&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
        scrollTop: $(&amp;#039;[name=&amp;quot;&amp;#039; + $.attr(this, &amp;#039;href&amp;#039;).substr(1) + &amp;#039;&amp;quot;]&amp;#039;).offset().top&lt;br /&gt;
    }, 500);&lt;br /&gt;
&lt;br /&gt;
    return false;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 1 (jQuery)  =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(&amp;#039;a[href*=#]:not([href=#])&amp;#039;).click(function() {&lt;br /&gt;
    if (location.pathname.replace(/^\//,&amp;#039;&amp;#039;) == this.pathname.replace(/^\//,&amp;#039;&amp;#039;) &lt;br /&gt;
        || location.hostname == this.hostname) {&lt;br /&gt;
&lt;br /&gt;
        var target = $(this.hash);&lt;br /&gt;
        target = target.length ? target : $(&amp;#039;[name=&amp;#039; + this.hash.slice(1) +&amp;#039;]&amp;#039;);&lt;br /&gt;
           if (target.length) {&lt;br /&gt;
             $(&amp;#039;html,body&amp;#039;).animate({&lt;br /&gt;
                 scrollTop: target.offset().top&lt;br /&gt;
            }, 1000);&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 2 (jQuery) mit Offset =====&lt;br /&gt;
statt &lt;br /&gt;
 .top&lt;br /&gt;
einfach&lt;br /&gt;
 .top-100&lt;br /&gt;
http://1stwebmagazine.com/jquery-scroll-to-anchor-point&lt;br /&gt;
&lt;br /&gt;
==== Smooth Scrolling mit Vanilla JS ====&lt;br /&gt;
 [[JavaScript - Smooth Scrolling]]&lt;br /&gt;
&lt;br /&gt;
===== Beispiel 3 Materialize Pushpin ToTop =====&lt;br /&gt;
jQuery Plugin enthalten in MaterializeCSS http://materializecss.com/pushpin.html&lt;br /&gt;
&lt;br /&gt;
Kann für ToTop Navigation oder Fixed Navigations etc. eingesetzt werden. Liegt im Verzeichnis js/pushpin geht aber nicht ohne weiteres Standalone&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//PUSHPIN TOTOP&lt;br /&gt;
$( document ).ready(function(){&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).pushpin({&lt;br /&gt;
    top: 500,// distance where pin becomes fixed (class)- default 0&lt;br /&gt;
    bottom: &amp;#039;infinity&amp;#039;, // distance when pin stops being fixed - default infinity&lt;br /&gt;
    offset: 24 // style=&amp;quot;top:[offset]&amp;quot;&amp;quot;&amp;quot; - default 0&lt;br /&gt;
  })&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//You can remove pushpin and pushpin classes&lt;br /&gt;
$(&amp;#039;.tabs-wrapper .row&amp;#039;).pushpin(&amp;#039;remove&amp;#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
CSS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Class for when element is above threshold */&lt;br /&gt;
.pin-top {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
/* Class for when element is below threshold*/&lt;br /&gt;
.pin-bottom {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
/* Class for when element is pinned */&lt;br /&gt;
.pinned {&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  z-index: 9;&lt;br /&gt;
}&lt;br /&gt;
/* Only necessary for window height sized blocks. */&lt;br /&gt;
  html, body, .block {&lt;br /&gt;
    height: 100%;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Beispiel Markup für ToTop Navigation =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;a class=&amp;quot;anchor&amp;quot; name=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;!-- totop --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;totop&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-angle-double-up fa-2x&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).hide();&lt;br /&gt;
  $(window).scroll(function(){&lt;br /&gt;
    var value = 200; // Toplink beim vertikalen scrollen ab einem Wert von XXX &amp;#039;px&amp;#039; anzeigen&lt;br /&gt;
    var scrolling = $(window).scrollTop();&lt;br /&gt;
    if (scrolling &amp;gt; value) {&lt;br /&gt;
      $(&amp;#039;.totop&amp;#039;).fadeIn();&lt;br /&gt;
    } else {&lt;br /&gt;
      $(&amp;#039;.totop&amp;#039;).fadeOut();&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
  $(&amp;#039;.totop&amp;#039;).click(function(){&lt;br /&gt;
    $(&amp;#039;html, body&amp;#039;).animate({scrollTop:&amp;#039;0px&amp;#039;}, 400);&lt;br /&gt;
    return false;&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toggle ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;javascript:void(0);&amp;quot; class=&amp;quot;icon&amp;quot; onclick=&amp;quot;myFunction()&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;i class=&amp;quot;fa fa-bars&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
oder registrieren&lt;br /&gt;
&lt;br /&gt;
element.addEventListener(&amp;#039;click&amp;#039;, myFunctionReference , false);&lt;br /&gt;
&lt;br /&gt;
function toggleNavigation() {&lt;br /&gt;
  var x = document.getElementById(&amp;quot;#mobileNavigationPanel&amp;quot;);&lt;br /&gt;
  if (x.style.display === &amp;quot;block&amp;quot;) {&lt;br /&gt;
    x.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
    x.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zwischenablage (Clipboard) modifizieren ===&lt;br /&gt;
 https://developer.mozilla.org/en-US/docs/Web/API/Element/copy_event&lt;br /&gt;
Mit dem Copy Event kann man die Zwischenablage modifizieren wenn der User etwas hineinkopiert. Z.B. könnte das ein Copyright Hinweis sein, den man anhängt.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel - Uppercase ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;Try copying text from this box...&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;target&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;...and pasting it into this one&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const source = document.querySelector(&amp;#039;div.source&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
source.addEventListener(&amp;#039;copy&amp;#039;, (event) =&amp;gt; {&lt;br /&gt;
    const selection = document.getSelection();&lt;br /&gt;
    event.clipboardData.setData(&amp;#039;text/plain&amp;#039;, selection.toString().toUpperCase());&lt;br /&gt;
    event.preventDefault();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel - Copyright Hinweis hinzufügen ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box source&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;Kopiere Text aus dieser Box...&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box target&amp;quot; contenteditable=&amp;quot;true&amp;quot;&amp;gt;...in diese Box!&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    const source = document.querySelector(&amp;#039;div.source&amp;#039;);&lt;br /&gt;
    var today = new Date();&lt;br /&gt;
    var dd = String(today.getDate()).padStart(2, &amp;#039;0&amp;#039;);&lt;br /&gt;
    var mm = String(today.getMonth() + 1).padStart(2, &amp;#039;0&amp;#039;); //January is 0!&lt;br /&gt;
    var yyyy = today.getFullYear();&lt;br /&gt;
    copyDate = dd + &amp;#039;.&amp;#039; + mm + &amp;#039;.&amp;#039; + yyyy; &lt;br /&gt;
    copyHint = &amp;#039;\nQuelle: &amp;#039; + window.location.href + &amp;#039; (Zugriff am: &amp;#039; + copyDate + &amp;#039;)&amp;#039;; //href, hostname or pathname is possible&lt;br /&gt;
    source.addEventListener(&amp;#039;copy&amp;#039;, (event) =&amp;gt; {&lt;br /&gt;
        const selection = document.getSelection();&lt;br /&gt;
        event.clipboardData.setData(&amp;#039;text/plain&amp;#039;, selection.toString() + copyHint);&lt;br /&gt;
        event.preventDefault();&lt;br /&gt;
    });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Must Know ==&lt;br /&gt;
=== Seite geladen? ===&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 window.onload = function () {&lt;br /&gt;
        console.log(&amp;#039;Dokument geladen&amp;#039;);&lt;br /&gt;
        function init();&lt;br /&gt;
        function machwas();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seite und Bilder geladen ===&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
let img = new Image;&lt;br /&gt;
&lt;br /&gt;
img.onload = function() {&lt;br /&gt;
   console.log (&amp;quot;Bild geladen&amp;quot;);&lt;br /&gt;
   elem.appendChild (img);&lt;br /&gt;
}&lt;br /&gt;
img.src = &amp;quot;little-snail.png&amp;quot;;  // erst nach dem Event Listener!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seite verlassen ===&lt;br /&gt;
 https://www.mediaevent.de/javascript/onload.html&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Mit_JavaScript_Get_Parameter_aus_der_URL_auslesen&amp;diff=26052</id>
		<title>Mit JavaScript Get Parameter aus der URL auslesen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Mit_JavaScript_Get_Parameter_aus_der_URL_auslesen&amp;diff=26052"/>
		<updated>2022-04-21T10:47:22Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
function getUrlVars()&lt;br /&gt;
/* get GET Vars from URl */&lt;br /&gt;
{&lt;br /&gt;
    var vars = [], hash;&lt;br /&gt;
    var hashes = window.location.href.slice(window.location.href.indexOf(&amp;#039;?&amp;#039;) + 1).split(&amp;#039;&amp;amp;&amp;#039;);&lt;br /&gt;
    for(var i = 0; i &amp;lt; hashes.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
        hash = hashes[i].split(&amp;#039;=&amp;#039;);&lt;br /&gt;
        vars.push(hash[0]);&lt;br /&gt;
        vars[hash[0]] = hash[1];&lt;br /&gt;
    }&lt;br /&gt;
    return vars;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For example, if you have the URL:&lt;br /&gt;
&lt;br /&gt;
http://www.example.com/?me=myValue&amp;amp;name2=SomeOtherValue&lt;br /&gt;
This code will return:&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;me&amp;quot;    : &amp;quot;myValue&amp;quot;,&lt;br /&gt;
    &amp;quot;name2&amp;quot; : &amp;quot;SomeOtherValue&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
and you can do:&lt;br /&gt;
&lt;br /&gt;
 var me = getUrlVars()[&amp;quot;me&amp;quot;];&lt;br /&gt;
 var name2 = getUrlVars()[&amp;quot;name2&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
Nützlich auch hier:&lt;br /&gt;
&lt;br /&gt;
 if (typeof variable === &amp;#039;undefined&amp;#039;) {&lt;br /&gt;
    // variable is undefined&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Facebook_3D_Foto_mit_Blender&amp;diff=26044</id>
		<title>Facebook 3D Foto mit Blender</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Facebook_3D_Foto_mit_Blender&amp;diff=26044"/>
		<updated>2022-04-15T19:32:19Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: Die Seite wurde neu angelegt: „Facebook 3D Fotos bestehen aus einem Bildlayer und einem Depth Layer. Man benötigt also 2 Bilder:  bildname.png  bildname_depth.png Beim Depth-Layer steht sch…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Facebook 3D Fotos bestehen aus einem Bildlayer und einem Depth Layer. Man benötigt also 2 Bilder:&lt;br /&gt;
 bildname.png&lt;br /&gt;
 bildname_depth.png&lt;br /&gt;
Beim Depth-Layer steht schwarz für den Hintergrund und weiß für den Vordergrund. Neuere Handys können oft selbst einen Depth Layer mithilfe eines LIDAR Sensors erzeugen. In der 3D Software gibt es verschiedene Möglichkeiten solch einen Layer zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
== Depth Layer in Blender erstellen ==&lt;br /&gt;
=== Methode 1 Depth Output ===&lt;br /&gt;
 View Layer Properties &amp;gt; Passes &amp;quot;Z&amp;quot; anhaken&lt;br /&gt;
 Compositor Window &amp;gt; Use Nodes&lt;br /&gt;
 Compositor Backdrop (zeigt im Hintergrund den Render an)&lt;br /&gt;
 Compositor Auto Render (wird ohne F12 gerendert - in manchen Setups muss trotzdem selbst gerendert werden)&lt;br /&gt;
 Composition Setup wie unten.&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26043</id>
		<title>GSAP - ScrollTrigger</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26043"/>
		<updated>2022-04-09T15:16:02Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Update: Die beste Möglichkeit Scrolling mit Animationen zu verbinden ist mit dem neuen (2020) ScrollTrigger Plugin.&lt;br /&gt;
 https://www.youtube.com/watch?v=X7IBa7vZjmo Intro mit Beispielen&lt;br /&gt;
 https://greensock.com/scrolltrigger Main Page&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Documentation&lt;br /&gt;
 https://greensock.com/st-mistakes/ Häufige Fehler (auch mit each Schleifen)&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Mit Demos&lt;br /&gt;
 https://css-tricks.com/tips-for-writing-animation-code-efficiently/&lt;br /&gt;
 https://greensock.com/forums/topic/31761-add-scrolltrigger-timeline-into-matchmedia-functions/#comment-158780&lt;br /&gt;
 &lt;br /&gt;
 Obsolet: https://codepen.io/osublake/pen/a633d0c9e6e2b951496d7f1eb4fd8fb6 (ohne ScrollMagic)&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
Eine gute Methode vorzugehen:&lt;br /&gt;
* Timeline-Animation ohne ScrollTrigger bauen&lt;br /&gt;
* ScrollTrigger Konfiguration in die Timeline einbauen.&lt;br /&gt;
&lt;br /&gt;
== MatchMedia ==&lt;br /&gt;
Mit MatchMedia kann man unterschiedliche ScrollTrigger für unterschiedliche Bildschirme nutzen.&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger/static.matchMedia()&lt;br /&gt;
MatchMedia verwaltet bei Resize Events auch die Timelines, killt diese wenn nötig oder erzeugt neue. Das erleichtert unglaublich viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
Vorgehen&lt;br /&gt;
&lt;br /&gt;
* Timeline Animation erstellen&lt;br /&gt;
* ScrollTrigger Konfiguration in Timeline aufsetzen&lt;br /&gt;
* MatchMedia erstellen und Timeline Animation einsetzen.&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei MediaQueries umschließt MatchMedia die Animation. Genauer gesagt man übergibt in der MatchMedia Funktion alles was in diesem Query ausgeführt werden soll. MatchMedia überwacht aber auch Veränderungen und setzt alle Animationen zurück, wenn der Query nicht mehr passt. Timelines etc. werden also wieder gekillt und der Urzustand wieder hergestellt.&lt;br /&gt;
&lt;br /&gt;
=== MatchMedia aufsetzen ===&lt;br /&gt;
Im Konfigurationsobjekt von MatchMedia übergeben wir als Schlüssel der das MediaQuery enthält. Als Wert übergeben wie eine Funktion. In dieser Funktion werden alle Timelines / Animationen gesetzt die für das Query gelten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ScrollTrigger.matchMedia({&lt;br /&gt;
  &amp;quot;(minWidth: 800px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for 800px and up go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;(maxWidth: 799px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for smaller screens than 799px go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;all&amp;quot;: function(){&lt;br /&gt;
    // animations valid for all viewport sizes go here&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== start, end, trigger, endTrigger ==&lt;br /&gt;
Legt fest welches Element und welcher Teil des Elements eine Aktion auslöst. &lt;br /&gt;
&lt;br /&gt;
Standard: &lt;br /&gt;
 Start wenn Decke von Trigger Element erreicht unteren Viewport&lt;br /&gt;
 Ende wenn Boden von Trigger Decke von Viewport erreicht (+ 1px)&lt;br /&gt;
 start: top bottom&lt;br /&gt;
 end: bottom top&lt;br /&gt;
&lt;br /&gt;
Default&lt;br /&gt;
 start: &lt;br /&gt;
&lt;br /&gt;
== Toggle Actions ==&lt;br /&gt;
toggleActions legen Fest was mit der Animation passiert, wenn Start oder Endpunkte erreicht werden. Daher hängen sie auch eng mit start und stop zusammen.&lt;br /&gt;
 onEnter, onLeave, onEnterBack, and onLeaveBack&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 EREIGNISSE&lt;br /&gt;
 onEnter -&amp;gt; Startpunkt des Elements erreicht Startppunkt =&amp;gt; Beginn es Durchgangs&lt;br /&gt;
 onLeave -&amp;gt; Enpunkt des Elements hinter Endposition =&amp;gt; Durchgang komplett&lt;br /&gt;
 onEnterBack -&amp;gt; Endpunkt des Elements zurück vor Endposition&lt;br /&gt;
 onLeaveBack -&amp;gt; Startpunkt des Elements zurück vor Startposition&lt;br /&gt;
&lt;br /&gt;
 JEDES EREIGNIS KANN ETWAS AUSLÖSEN:&lt;br /&gt;
 &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
 toggleActions: play none none none //default&lt;br /&gt;
&lt;br /&gt;
So toggleActions: &amp;quot;play pause resume reset&amp;quot; will play the animation when entering, pause it when leaving, resume it when entering again backwards, and reset (rewind back to the beginning) when scrolling all the way back past the beginning. You can use any of the following keywords for each action: &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
=== Probleme mit Inline Styles und mediaQuery beheben - ScrollTrigger.saveStyles() ===&lt;br /&gt;
Manchmal kommt es vor, dass eine &amp;#039;&amp;#039;&amp;#039;Animation einen Inline Style setzt, der ein mediaQuery in CSS &amp;quot;überschreibt&amp;quot;&amp;#039;&amp;#039;&amp;#039;. Wenn man dieses Verhalten nicht möchte und lieber den &amp;#039;&amp;#039;&amp;#039;Zustand beim Laden der Seite herstellen&amp;#039;&amp;#039;&amp;#039; möchte kann man die Funktion saveStyles nutzen. Mit saveStyles kann man vor der Animation den Zustand von DOM-Objekten speichern. GSAP setzt diese dann wieder zurück wenn der MatchMedia Zweig nicht mehr zutrifft.&lt;br /&gt;
 ScrollTrigger.saveStyles(&amp;#039;.myElement, .myOtherElement);&lt;br /&gt;
&lt;br /&gt;
== Beispiele Tipps etc. ==&lt;br /&gt;
=== Horizontal Scroll ===&lt;br /&gt;
 https://codepen.io/GreenSock/pen/896549f0a83297debd9111fe9b205a97&lt;br /&gt;
&lt;br /&gt;
Mit Tablet Swipe:&lt;br /&gt;
 https://greensock.com/forums/topic/28016-horizontal-scroll-with-draggable-syncing-the-two/?tab=comments#comment-138080&lt;br /&gt;
 https://codepen.io/GreenSock/pen/ZELQqeJ?editors=0010&lt;br /&gt;
 https://greensock.com/forums/topic/25544-horizontal-scroll-trigger-tablet-mobile/&lt;br /&gt;
&lt;br /&gt;
== Probleme beheben ==&lt;br /&gt;
=== Sprünge ===&lt;br /&gt;
 https://greensock.com/st-mistakes/#to-issues&lt;br /&gt;
Wichtig zu wissen: ScrollTrigger speichert die Startwerte für eine Animation wenn der Trigger erzeugt wird. Dadurch können Sprünge entstehen, wenn mehrere Trigger auf eine Eigenschaft angewendet werden, das Objekt sich aber zum Startpunkt bereits verändert hat.&lt;br /&gt;
&lt;br /&gt;
Lösungen &lt;br /&gt;
- immediateRender Eigenschaft&lt;br /&gt;
- fromTo statt to nutzen&lt;br /&gt;
- Ein ScrollTrigger für mehrere Animationen (Timeline)&lt;br /&gt;
&lt;br /&gt;
=== Abhängigkeiten vom Viewport ===&lt;br /&gt;
Wenn Objekte sich relativ zum Viewport ausrichten muss man darauf achten, dass sich die Werte bei einer Veränderung des Browsers anpassen. Das funktioniert mit Funktionen statt statischen Werten:&lt;br /&gt;
 end: `+=${elem.offsetHeight}` // won&amp;#039;t be updated on refresh&lt;br /&gt;
 end: () =&amp;gt; `+=${elem.offsetHeight}` // will be updated&lt;br /&gt;
&lt;br /&gt;
=== Overlaping Issued / Überlappungen vermeiden ===&lt;br /&gt;
 https://www.youtube.com/watch?v=SVjndrQ6v9I&lt;br /&gt;
Zwei Wege entweder &lt;br /&gt;
&lt;br /&gt;
Toggle Actions (die Regel)&lt;br /&gt;
 play complete reverse reset&lt;br /&gt;
 // wird zu&lt;br /&gt;
 &lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
preventOverlaps / fastScrollEnd&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26042</id>
		<title>GSAP - ScrollTrigger</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26042"/>
		<updated>2022-04-09T14:55:41Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Update: Die beste Möglichkeit Scrolling mit Animationen zu verbinden ist mit dem neuen (2020) ScrollTrigger Plugin.&lt;br /&gt;
 https://www.youtube.com/watch?v=X7IBa7vZjmo Intro mit Beispielen&lt;br /&gt;
 https://greensock.com/scrolltrigger Main Page&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Documentation&lt;br /&gt;
 https://greensock.com/st-mistakes/ Häufige Fehler (auch mit each Schleifen)&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Mit Demos&lt;br /&gt;
 https://css-tricks.com/tips-for-writing-animation-code-efficiently/&lt;br /&gt;
 &lt;br /&gt;
 Obsolet: https://codepen.io/osublake/pen/a633d0c9e6e2b951496d7f1eb4fd8fb6 (ohne ScrollMagic)&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
Eine gute Methode vorzugehen:&lt;br /&gt;
* Timeline-Animation ohne ScrollTrigger bauen&lt;br /&gt;
* ScrollTrigger Konfiguration in die Timeline einbauen.&lt;br /&gt;
&lt;br /&gt;
== MatchMedia ==&lt;br /&gt;
Mit MatchMedia kann man unterschiedliche ScrollTrigger für unterschiedliche Bildschirme nutzen.&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger/static.matchMedia()&lt;br /&gt;
MatchMedia verwaltet bei Resize Events auch die Timelines, killt diese wenn nötig oder erzeugt neue. Das erleichtert unglaublich viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
Vorgehen&lt;br /&gt;
&lt;br /&gt;
* Timeline Animation erstellen&lt;br /&gt;
* ScrollTrigger Konfiguration in Timeline aufsetzen&lt;br /&gt;
* MatchMedia erstellen und Timeline Animation einsetzen.&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei MediaQueries umschließt MatchMedia die Animation. Genauer gesagt man übergibt in der MatchMedia Funktion alles was in diesem Query ausgeführt werden soll. MatchMedia überwacht aber auch Veränderungen und setzt alle Animationen zurück, wenn der Query nicht mehr passt. Timelines etc. werden also wieder gekillt und der Urzustand wieder hergestellt.&lt;br /&gt;
&lt;br /&gt;
=== MatchMedia aufsetzen ===&lt;br /&gt;
Im Konfigurationsobjekt von MatchMedia übergeben wir als Schlüssel der das MediaQuery enthält. Als Wert übergeben wie eine Funktion. In dieser Funktion werden alle Timelines / Animationen gesetzt die für das Query gelten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ScrollTrigger.matchMedia({&lt;br /&gt;
  &amp;quot;(minWidth: 800px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for 800px and up go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;(maxWidth: 799px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for smaller screens than 799px go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;all&amp;quot;: function(){&lt;br /&gt;
    // animations valid for all viewport sizes go here&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== start, end, trigger, endTrigger ==&lt;br /&gt;
Legt fest welches Element und welcher Teil des Elements eine Aktion auslöst. &lt;br /&gt;
&lt;br /&gt;
Standard: &lt;br /&gt;
 Start wenn Decke von Trigger Element erreicht unteren Viewport&lt;br /&gt;
 Ende wenn Boden von Trigger Decke von Viewport erreicht (+ 1px)&lt;br /&gt;
 start: top bottom&lt;br /&gt;
 end: bottom top&lt;br /&gt;
&lt;br /&gt;
Default&lt;br /&gt;
 start: &lt;br /&gt;
&lt;br /&gt;
== Toggle Actions ==&lt;br /&gt;
toggleActions legen Fest was mit der Animation passiert, wenn Start oder Endpunkte erreicht werden. Daher hängen sie auch eng mit start und stop zusammen.&lt;br /&gt;
 onEnter, onLeave, onEnterBack, and onLeaveBack&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 EREIGNISSE&lt;br /&gt;
 onEnter -&amp;gt; Startpunkt des Elements erreicht Startppunkt =&amp;gt; Beginn es Durchgangs&lt;br /&gt;
 onLeave -&amp;gt; Enpunkt des Elements hinter Endposition =&amp;gt; Durchgang komplett&lt;br /&gt;
 onEnterBack -&amp;gt; Endpunkt des Elements zurück vor Endposition&lt;br /&gt;
 onLeaveBack -&amp;gt; Startpunkt des Elements zurück vor Startposition&lt;br /&gt;
&lt;br /&gt;
 JEDES EREIGNIS KANN ETWAS AUSLÖSEN:&lt;br /&gt;
 &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
 toggleActions: play none none none //default&lt;br /&gt;
&lt;br /&gt;
So toggleActions: &amp;quot;play pause resume reset&amp;quot; will play the animation when entering, pause it when leaving, resume it when entering again backwards, and reset (rewind back to the beginning) when scrolling all the way back past the beginning. You can use any of the following keywords for each action: &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
=== Probleme mit Inline Styles und mediaQuery beheben - ScrollTrigger.saveStyles() ===&lt;br /&gt;
Manchmal kommt es vor, dass eine &amp;#039;&amp;#039;&amp;#039;Animation einen Inline Style setzt, der ein mediaQuery in CSS &amp;quot;überschreibt&amp;quot;&amp;#039;&amp;#039;&amp;#039;. Wenn man dieses Verhalten nicht möchte und lieber den &amp;#039;&amp;#039;&amp;#039;Zustand beim Laden der Seite herstellen&amp;#039;&amp;#039;&amp;#039; möchte kann man die Funktion saveStyles nutzen. Mit saveStyles kann man vor der Animation den Zustand von DOM-Objekten speichern. GSAP setzt diese dann wieder zurück wenn der MatchMedia Zweig nicht mehr zutrifft.&lt;br /&gt;
 ScrollTrigger.saveStyles(&amp;#039;.myElement, .myOtherElement);&lt;br /&gt;
&lt;br /&gt;
== Beispiele Tipps etc. ==&lt;br /&gt;
=== Horizontal Scroll ===&lt;br /&gt;
 https://codepen.io/GreenSock/pen/896549f0a83297debd9111fe9b205a97&lt;br /&gt;
&lt;br /&gt;
Mit Tablet Swipe:&lt;br /&gt;
 https://greensock.com/forums/topic/28016-horizontal-scroll-with-draggable-syncing-the-two/?tab=comments#comment-138080&lt;br /&gt;
 https://codepen.io/GreenSock/pen/ZELQqeJ?editors=0010&lt;br /&gt;
 https://greensock.com/forums/topic/25544-horizontal-scroll-trigger-tablet-mobile/&lt;br /&gt;
&lt;br /&gt;
== Probleme beheben ==&lt;br /&gt;
=== Sprünge ===&lt;br /&gt;
 https://greensock.com/st-mistakes/#to-issues&lt;br /&gt;
Wichtig zu wissen: ScrollTrigger speichert die Startwerte für eine Animation wenn der Trigger erzeugt wird. Dadurch können Sprünge entstehen, wenn mehrere Trigger auf eine Eigenschaft angewendet werden, das Objekt sich aber zum Startpunkt bereits verändert hat.&lt;br /&gt;
&lt;br /&gt;
Lösungen &lt;br /&gt;
- immediateRender Eigenschaft&lt;br /&gt;
- fromTo statt to nutzen&lt;br /&gt;
- Ein ScrollTrigger für mehrere Animationen (Timeline)&lt;br /&gt;
&lt;br /&gt;
=== Abhängigkeiten vom Viewport ===&lt;br /&gt;
Wenn Objekte sich relativ zum Viewport ausrichten muss man darauf achten, dass sich die Werte bei einer Veränderung des Browsers anpassen. Das funktioniert mit Funktionen statt statischen Werten:&lt;br /&gt;
 end: `+=${elem.offsetHeight}` // won&amp;#039;t be updated on refresh&lt;br /&gt;
 end: () =&amp;gt; `+=${elem.offsetHeight}` // will be updated&lt;br /&gt;
&lt;br /&gt;
=== Overlaping Issued / Überlappungen vermeiden ===&lt;br /&gt;
 https://www.youtube.com/watch?v=SVjndrQ6v9I&lt;br /&gt;
Zwei Wege entweder &lt;br /&gt;
&lt;br /&gt;
Toggle Actions (die Regel)&lt;br /&gt;
 play complete reverse reset&lt;br /&gt;
 // wird zu&lt;br /&gt;
 &lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
preventOverlaps / fastScrollEnd&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26041</id>
		<title>GSAP - ScrollTrigger</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26041"/>
		<updated>2022-04-09T14:55:16Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Toggle Actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Update: Die beste Möglichkeit Scrolling mit Animationen zu verbinden ist mit dem neuen (2020) ScrollTrigger Plugin.&lt;br /&gt;
 https://www.youtube.com/watch?v=X7IBa7vZjmo Intro mit Beispielen&lt;br /&gt;
 https://greensock.com/scrolltrigger Main Page&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Documentation&lt;br /&gt;
 https://greensock.com/st-mistakes/ Häufige Fehler (auch mit each Schleifen)&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Mit Demos&lt;br /&gt;
 &lt;br /&gt;
 Obsolet: https://codepen.io/osublake/pen/a633d0c9e6e2b951496d7f1eb4fd8fb6 (ohne ScrollMagic)&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
Eine gute Methode vorzugehen:&lt;br /&gt;
* Timeline-Animation ohne ScrollTrigger bauen&lt;br /&gt;
* ScrollTrigger Konfiguration in die Timeline einbauen.&lt;br /&gt;
&lt;br /&gt;
== MatchMedia ==&lt;br /&gt;
Mit MatchMedia kann man unterschiedliche ScrollTrigger für unterschiedliche Bildschirme nutzen.&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger/static.matchMedia()&lt;br /&gt;
MatchMedia verwaltet bei Resize Events auch die Timelines, killt diese wenn nötig oder erzeugt neue. Das erleichtert unglaublich viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
Vorgehen&lt;br /&gt;
&lt;br /&gt;
* Timeline Animation erstellen&lt;br /&gt;
* ScrollTrigger Konfiguration in Timeline aufsetzen&lt;br /&gt;
* MatchMedia erstellen und Timeline Animation einsetzen.&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei MediaQueries umschließt MatchMedia die Animation. Genauer gesagt man übergibt in der MatchMedia Funktion alles was in diesem Query ausgeführt werden soll. MatchMedia überwacht aber auch Veränderungen und setzt alle Animationen zurück, wenn der Query nicht mehr passt. Timelines etc. werden also wieder gekillt und der Urzustand wieder hergestellt.&lt;br /&gt;
&lt;br /&gt;
=== MatchMedia aufsetzen ===&lt;br /&gt;
Im Konfigurationsobjekt von MatchMedia übergeben wir als Schlüssel der das MediaQuery enthält. Als Wert übergeben wie eine Funktion. In dieser Funktion werden alle Timelines / Animationen gesetzt die für das Query gelten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ScrollTrigger.matchMedia({&lt;br /&gt;
  &amp;quot;(minWidth: 800px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for 800px and up go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;(maxWidth: 799px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for smaller screens than 799px go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;all&amp;quot;: function(){&lt;br /&gt;
    // animations valid for all viewport sizes go here&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== start, end, trigger, endTrigger ==&lt;br /&gt;
Legt fest welches Element und welcher Teil des Elements eine Aktion auslöst. &lt;br /&gt;
&lt;br /&gt;
Standard: &lt;br /&gt;
 Start wenn Decke von Trigger Element erreicht unteren Viewport&lt;br /&gt;
 Ende wenn Boden von Trigger Decke von Viewport erreicht (+ 1px)&lt;br /&gt;
 start: top bottom&lt;br /&gt;
 end: bottom top&lt;br /&gt;
&lt;br /&gt;
Default&lt;br /&gt;
 start: &lt;br /&gt;
&lt;br /&gt;
== Toggle Actions ==&lt;br /&gt;
toggleActions legen Fest was mit der Animation passiert, wenn Start oder Endpunkte erreicht werden. Daher hängen sie auch eng mit start und stop zusammen.&lt;br /&gt;
 onEnter, onLeave, onEnterBack, and onLeaveBack&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 EREIGNISSE&lt;br /&gt;
 onEnter -&amp;gt; Startpunkt des Elements erreicht Startppunkt =&amp;gt; Beginn es Durchgangs&lt;br /&gt;
 onLeave -&amp;gt; Enpunkt des Elements hinter Endposition =&amp;gt; Durchgang komplett&lt;br /&gt;
 onEnterBack -&amp;gt; Endpunkt des Elements zurück vor Endposition&lt;br /&gt;
 onLeaveBack -&amp;gt; Startpunkt des Elements zurück vor Startposition&lt;br /&gt;
&lt;br /&gt;
 JEDES EREIGNIS KANN ETWAS AUSLÖSEN:&lt;br /&gt;
 &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
 toggleActions: play none none none //default&lt;br /&gt;
&lt;br /&gt;
So toggleActions: &amp;quot;play pause resume reset&amp;quot; will play the animation when entering, pause it when leaving, resume it when entering again backwards, and reset (rewind back to the beginning) when scrolling all the way back past the beginning. You can use any of the following keywords for each action: &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
=== Probleme mit Inline Styles und mediaQuery beheben - ScrollTrigger.saveStyles() ===&lt;br /&gt;
Manchmal kommt es vor, dass eine &amp;#039;&amp;#039;&amp;#039;Animation einen Inline Style setzt, der ein mediaQuery in CSS &amp;quot;überschreibt&amp;quot;&amp;#039;&amp;#039;&amp;#039;. Wenn man dieses Verhalten nicht möchte und lieber den &amp;#039;&amp;#039;&amp;#039;Zustand beim Laden der Seite herstellen&amp;#039;&amp;#039;&amp;#039; möchte kann man die Funktion saveStyles nutzen. Mit saveStyles kann man vor der Animation den Zustand von DOM-Objekten speichern. GSAP setzt diese dann wieder zurück wenn der MatchMedia Zweig nicht mehr zutrifft.&lt;br /&gt;
 ScrollTrigger.saveStyles(&amp;#039;.myElement, .myOtherElement);&lt;br /&gt;
&lt;br /&gt;
== Beispiele Tipps etc. ==&lt;br /&gt;
=== Horizontal Scroll ===&lt;br /&gt;
 https://codepen.io/GreenSock/pen/896549f0a83297debd9111fe9b205a97&lt;br /&gt;
&lt;br /&gt;
Mit Tablet Swipe:&lt;br /&gt;
 https://greensock.com/forums/topic/28016-horizontal-scroll-with-draggable-syncing-the-two/?tab=comments#comment-138080&lt;br /&gt;
 https://codepen.io/GreenSock/pen/ZELQqeJ?editors=0010&lt;br /&gt;
 https://greensock.com/forums/topic/25544-horizontal-scroll-trigger-tablet-mobile/&lt;br /&gt;
&lt;br /&gt;
== Probleme beheben ==&lt;br /&gt;
=== Sprünge ===&lt;br /&gt;
 https://greensock.com/st-mistakes/#to-issues&lt;br /&gt;
Wichtig zu wissen: ScrollTrigger speichert die Startwerte für eine Animation wenn der Trigger erzeugt wird. Dadurch können Sprünge entstehen, wenn mehrere Trigger auf eine Eigenschaft angewendet werden, das Objekt sich aber zum Startpunkt bereits verändert hat.&lt;br /&gt;
&lt;br /&gt;
Lösungen &lt;br /&gt;
- immediateRender Eigenschaft&lt;br /&gt;
- fromTo statt to nutzen&lt;br /&gt;
- Ein ScrollTrigger für mehrere Animationen (Timeline)&lt;br /&gt;
&lt;br /&gt;
=== Abhängigkeiten vom Viewport ===&lt;br /&gt;
Wenn Objekte sich relativ zum Viewport ausrichten muss man darauf achten, dass sich die Werte bei einer Veränderung des Browsers anpassen. Das funktioniert mit Funktionen statt statischen Werten:&lt;br /&gt;
 end: `+=${elem.offsetHeight}` // won&amp;#039;t be updated on refresh&lt;br /&gt;
 end: () =&amp;gt; `+=${elem.offsetHeight}` // will be updated&lt;br /&gt;
&lt;br /&gt;
=== Overlaping Issued / Überlappungen vermeiden ===&lt;br /&gt;
 https://www.youtube.com/watch?v=SVjndrQ6v9I&lt;br /&gt;
Zwei Wege entweder &lt;br /&gt;
&lt;br /&gt;
Toggle Actions (die Regel)&lt;br /&gt;
 play complete reverse reset&lt;br /&gt;
 // wird zu&lt;br /&gt;
 &lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
preventOverlaps / fastScrollEnd&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26040</id>
		<title>GSAP - ScrollTrigger</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26040"/>
		<updated>2022-04-09T13:20:41Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Update: Die beste Möglichkeit Scrolling mit Animationen zu verbinden ist mit dem neuen (2020) ScrollTrigger Plugin.&lt;br /&gt;
 https://www.youtube.com/watch?v=X7IBa7vZjmo Intro mit Beispielen&lt;br /&gt;
 https://greensock.com/scrolltrigger Main Page&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Documentation&lt;br /&gt;
 https://greensock.com/st-mistakes/ Häufige Fehler (auch mit each Schleifen)&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Mit Demos&lt;br /&gt;
 &lt;br /&gt;
 Obsolet: https://codepen.io/osublake/pen/a633d0c9e6e2b951496d7f1eb4fd8fb6 (ohne ScrollMagic)&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
Eine gute Methode vorzugehen:&lt;br /&gt;
* Timeline-Animation ohne ScrollTrigger bauen&lt;br /&gt;
* ScrollTrigger Konfiguration in die Timeline einbauen.&lt;br /&gt;
&lt;br /&gt;
== MatchMedia ==&lt;br /&gt;
Mit MatchMedia kann man unterschiedliche ScrollTrigger für unterschiedliche Bildschirme nutzen.&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger/static.matchMedia()&lt;br /&gt;
MatchMedia verwaltet bei Resize Events auch die Timelines, killt diese wenn nötig oder erzeugt neue. Das erleichtert unglaublich viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
Vorgehen&lt;br /&gt;
&lt;br /&gt;
* Timeline Animation erstellen&lt;br /&gt;
* ScrollTrigger Konfiguration in Timeline aufsetzen&lt;br /&gt;
* MatchMedia erstellen und Timeline Animation einsetzen.&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei MediaQueries umschließt MatchMedia die Animation. Genauer gesagt man übergibt in der MatchMedia Funktion alles was in diesem Query ausgeführt werden soll. MatchMedia überwacht aber auch Veränderungen und setzt alle Animationen zurück, wenn der Query nicht mehr passt. Timelines etc. werden also wieder gekillt und der Urzustand wieder hergestellt.&lt;br /&gt;
&lt;br /&gt;
=== MatchMedia aufsetzen ===&lt;br /&gt;
Im Konfigurationsobjekt von MatchMedia übergeben wir als Schlüssel der das MediaQuery enthält. Als Wert übergeben wie eine Funktion. In dieser Funktion werden alle Timelines / Animationen gesetzt die für das Query gelten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ScrollTrigger.matchMedia({&lt;br /&gt;
  &amp;quot;(minWidth: 800px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for 800px and up go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;(maxWidth: 799px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for smaller screens than 799px go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;all&amp;quot;: function(){&lt;br /&gt;
    // animations valid for all viewport sizes go here&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toggle Actions ==&lt;br /&gt;
toggleActions &lt;br /&gt;
 onEnter, onLeave, onEnterBack, and onLeaveBack&lt;br /&gt;
 &lt;br /&gt;
 EREIGNISSE&lt;br /&gt;
 onEnter -&amp;gt; Startpunkt des Elements erreicht Startppunkt =&amp;gt; Beginn es Durchgangs&lt;br /&gt;
 onLeave -&amp;gt; Enpunkt des Elements hinter Endposition =&amp;gt; Durchgang komplett&lt;br /&gt;
 onEnterBack -&amp;gt; Endpunkt des Elements zurück vor Endposition&lt;br /&gt;
 onLeaveBack -&amp;gt; Startpunkt des Elements zurück vor Startposition&lt;br /&gt;
&lt;br /&gt;
 JEDES EREIGNIS KANN ETWAS AUSLÖSEN:&lt;br /&gt;
 &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
 toggleActions: play none none none //default&lt;br /&gt;
&lt;br /&gt;
So toggleActions: &amp;quot;play pause resume reset&amp;quot; will play the animation when entering, pause it when leaving, resume it when entering again backwards, and reset (rewind back to the beginning) when scrolling all the way back past the beginning. You can use any of the following keywords for each action: &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
=== Probleme mit Inline Styles und mediaQuery beheben - ScrollTrigger.saveStyles() ===&lt;br /&gt;
Manchmal kommt es vor, dass eine &amp;#039;&amp;#039;&amp;#039;Animation einen Inline Style setzt, der ein mediaQuery in CSS &amp;quot;überschreibt&amp;quot;&amp;#039;&amp;#039;&amp;#039;. Wenn man dieses Verhalten nicht möchte und lieber den &amp;#039;&amp;#039;&amp;#039;Zustand beim Laden der Seite herstellen&amp;#039;&amp;#039;&amp;#039; möchte kann man die Funktion saveStyles nutzen. Mit saveStyles kann man vor der Animation den Zustand von DOM-Objekten speichern. GSAP setzt diese dann wieder zurück wenn der MatchMedia Zweig nicht mehr zutrifft.&lt;br /&gt;
 ScrollTrigger.saveStyles(&amp;#039;.myElement, .myOtherElement);&lt;br /&gt;
&lt;br /&gt;
== Beispiele Tipps etc. ==&lt;br /&gt;
=== Horizontal Scroll ===&lt;br /&gt;
 https://codepen.io/GreenSock/pen/896549f0a83297debd9111fe9b205a97&lt;br /&gt;
&lt;br /&gt;
Mit Tablet Swipe:&lt;br /&gt;
 https://greensock.com/forums/topic/28016-horizontal-scroll-with-draggable-syncing-the-two/?tab=comments#comment-138080&lt;br /&gt;
 https://codepen.io/GreenSock/pen/ZELQqeJ?editors=0010&lt;br /&gt;
 https://greensock.com/forums/topic/25544-horizontal-scroll-trigger-tablet-mobile/&lt;br /&gt;
&lt;br /&gt;
== Probleme beheben ==&lt;br /&gt;
=== Sprünge ===&lt;br /&gt;
 https://greensock.com/st-mistakes/#to-issues&lt;br /&gt;
Wichtig zu wissen: ScrollTrigger speichert die Startwerte für eine Animation wenn der Trigger erzeugt wird. Dadurch können Sprünge entstehen, wenn mehrere Trigger auf eine Eigenschaft angewendet werden, das Objekt sich aber zum Startpunkt bereits verändert hat.&lt;br /&gt;
&lt;br /&gt;
Lösungen &lt;br /&gt;
- immediateRender Eigenschaft&lt;br /&gt;
- fromTo statt to nutzen&lt;br /&gt;
- Ein ScrollTrigger für mehrere Animationen (Timeline)&lt;br /&gt;
&lt;br /&gt;
=== Abhängigkeiten vom Viewport ===&lt;br /&gt;
Wenn Objekte sich relativ zum Viewport ausrichten muss man darauf achten, dass sich die Werte bei einer Veränderung des Browsers anpassen. Das funktioniert mit Funktionen statt statischen Werten:&lt;br /&gt;
 end: `+=${elem.offsetHeight}` // won&amp;#039;t be updated on refresh&lt;br /&gt;
 end: () =&amp;gt; `+=${elem.offsetHeight}` // will be updated&lt;br /&gt;
&lt;br /&gt;
=== Overlaping Issued / Überlappungen vermeiden ===&lt;br /&gt;
 https://www.youtube.com/watch?v=SVjndrQ6v9I&lt;br /&gt;
Zwei Wege entweder &lt;br /&gt;
&lt;br /&gt;
Toggle Actions (die Regel)&lt;br /&gt;
 play complete reverse reset&lt;br /&gt;
 // wird zu&lt;br /&gt;
 &lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
preventOverlaps / fastScrollEnd&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26039</id>
		<title>GSAP - ScrollTrigger</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26039"/>
		<updated>2022-04-09T13:19:20Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Toggle Actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Update: Die beste Möglichkeit Scrolling mit Animationen zu verbinden ist mit dem neuen (2020) ScrollTrigger Plugin.&lt;br /&gt;
 https://www.youtube.com/watch?v=X7IBa7vZjmo Intro mit Beispielen&lt;br /&gt;
 https://greensock.com/scrolltrigger Main Page&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Documentation&lt;br /&gt;
 https://greensock.com/st-mistakes/ Häufige Fehler (auch mit each Schleifen)&lt;br /&gt;
 &lt;br /&gt;
 Obsolet: https://codepen.io/osublake/pen/a633d0c9e6e2b951496d7f1eb4fd8fb6 (ohne ScrollMagic)&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
Eine gute Methode vorzugehen:&lt;br /&gt;
* Timeline-Animation ohne ScrollTrigger bauen&lt;br /&gt;
* ScrollTrigger Konfiguration in die Timeline einbauen.&lt;br /&gt;
&lt;br /&gt;
== MatchMedia ==&lt;br /&gt;
Mit MatchMedia kann man unterschiedliche ScrollTrigger für unterschiedliche Bildschirme nutzen.&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger/static.matchMedia()&lt;br /&gt;
MatchMedia verwaltet bei Resize Events auch die Timelines, killt diese wenn nötig oder erzeugt neue. Das erleichtert unglaublich viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
Vorgehen&lt;br /&gt;
&lt;br /&gt;
* Timeline Animation erstellen&lt;br /&gt;
* ScrollTrigger Konfiguration in Timeline aufsetzen&lt;br /&gt;
* MatchMedia erstellen und Timeline Animation einsetzen.&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei MediaQueries umschließt MatchMedia die Animation. Genauer gesagt man übergibt in der MatchMedia Funktion alles was in diesem Query ausgeführt werden soll. MatchMedia überwacht aber auch Veränderungen und setzt alle Animationen zurück, wenn der Query nicht mehr passt. Timelines etc. werden also wieder gekillt und der Urzustand wieder hergestellt.&lt;br /&gt;
&lt;br /&gt;
=== MatchMedia aufsetzen ===&lt;br /&gt;
Im Konfigurationsobjekt von MatchMedia übergeben wir als Schlüssel der das MediaQuery enthält. Als Wert übergeben wie eine Funktion. In dieser Funktion werden alle Timelines / Animationen gesetzt die für das Query gelten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ScrollTrigger.matchMedia({&lt;br /&gt;
  &amp;quot;(minWidth: 800px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for 800px and up go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;(maxWidth: 799px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for smaller screens than 799px go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;all&amp;quot;: function(){&lt;br /&gt;
    // animations valid for all viewport sizes go here&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toggle Actions ==&lt;br /&gt;
toggleActions &lt;br /&gt;
 onEnter, onLeave, onEnterBack, and onLeaveBack&lt;br /&gt;
 &lt;br /&gt;
 EREIGNISSE&lt;br /&gt;
 onEnter -&amp;gt; Startpunkt des Elements erreicht Startppunkt =&amp;gt; Beginn es Durchgangs&lt;br /&gt;
 onLeave -&amp;gt; Enpunkt des Elements hinter Endposition =&amp;gt; Durchgang komplett&lt;br /&gt;
 onEnterBack -&amp;gt; Endpunkt des Elements zurück vor Endposition&lt;br /&gt;
 onLeaveBack -&amp;gt; Startpunkt des Elements zurück vor Startposition&lt;br /&gt;
&lt;br /&gt;
 JEDES EREIGNIS KANN ETWAS AUSLÖSEN:&lt;br /&gt;
 &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
 play none none none //default&lt;br /&gt;
&lt;br /&gt;
So toggleActions: &amp;quot;play pause resume reset&amp;quot; will play the animation when entering, pause it when leaving, resume it when entering again backwards, and reset (rewind back to the beginning) when scrolling all the way back past the beginning. You can use any of the following keywords for each action: &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
=== Probleme mit Inline Styles und mediaQuery beheben - ScrollTrigger.saveStyles() ===&lt;br /&gt;
Manchmal kommt es vor, dass eine &amp;#039;&amp;#039;&amp;#039;Animation einen Inline Style setzt, der ein mediaQuery in CSS &amp;quot;überschreibt&amp;quot;&amp;#039;&amp;#039;&amp;#039;. Wenn man dieses Verhalten nicht möchte und lieber den &amp;#039;&amp;#039;&amp;#039;Zustand beim Laden der Seite herstellen&amp;#039;&amp;#039;&amp;#039; möchte kann man die Funktion saveStyles nutzen. Mit saveStyles kann man vor der Animation den Zustand von DOM-Objekten speichern. GSAP setzt diese dann wieder zurück wenn der MatchMedia Zweig nicht mehr zutrifft.&lt;br /&gt;
 ScrollTrigger.saveStyles(&amp;#039;.myElement, .myOtherElement);&lt;br /&gt;
&lt;br /&gt;
== Beispiele Tipps etc. ==&lt;br /&gt;
=== Horizontal Scroll ===&lt;br /&gt;
 https://codepen.io/GreenSock/pen/896549f0a83297debd9111fe9b205a97&lt;br /&gt;
&lt;br /&gt;
Mit Tablet Swipe:&lt;br /&gt;
 https://greensock.com/forums/topic/28016-horizontal-scroll-with-draggable-syncing-the-two/?tab=comments#comment-138080&lt;br /&gt;
 https://codepen.io/GreenSock/pen/ZELQqeJ?editors=0010&lt;br /&gt;
 https://greensock.com/forums/topic/25544-horizontal-scroll-trigger-tablet-mobile/&lt;br /&gt;
&lt;br /&gt;
== Probleme beheben ==&lt;br /&gt;
=== Sprünge ===&lt;br /&gt;
 https://greensock.com/st-mistakes/#to-issues&lt;br /&gt;
Wichtig zu wissen: ScrollTrigger speichert die Startwerte für eine Animation wenn der Trigger erzeugt wird. Dadurch können Sprünge entstehen, wenn mehrere Trigger auf eine Eigenschaft angewendet werden, das Objekt sich aber zum Startpunkt bereits verändert hat.&lt;br /&gt;
&lt;br /&gt;
Lösungen &lt;br /&gt;
- immediateRender Eigenschaft&lt;br /&gt;
- fromTo statt to nutzen&lt;br /&gt;
- Ein ScrollTrigger für mehrere Animationen (Timeline)&lt;br /&gt;
&lt;br /&gt;
=== Abhängigkeiten vom Viewport ===&lt;br /&gt;
Wenn Objekte sich relativ zum Viewport ausrichten muss man darauf achten, dass sich die Werte bei einer Veränderung des Browsers anpassen. Das funktioniert mit Funktionen statt statischen Werten:&lt;br /&gt;
 end: `+=${elem.offsetHeight}` // won&amp;#039;t be updated on refresh&lt;br /&gt;
 end: () =&amp;gt; `+=${elem.offsetHeight}` // will be updated&lt;br /&gt;
&lt;br /&gt;
=== Overlaping Issued / Überlappungen vermeiden ===&lt;br /&gt;
 https://www.youtube.com/watch?v=SVjndrQ6v9I&lt;br /&gt;
Zwei Wege entweder &lt;br /&gt;
&lt;br /&gt;
Toggle Actions (die Regel)&lt;br /&gt;
 play complete reverse reset&lt;br /&gt;
 // wird zu&lt;br /&gt;
 &lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
preventOverlaps / fastScrollEnd&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26038</id>
		<title>GSAP - ScrollTrigger</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26038"/>
		<updated>2022-04-09T04:23:31Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Probleme beheben */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Update: Die beste Möglichkeit Scrolling mit Animationen zu verbinden ist mit dem neuen (2020) ScrollTrigger Plugin.&lt;br /&gt;
 https://www.youtube.com/watch?v=X7IBa7vZjmo Intro mit Beispielen&lt;br /&gt;
 https://greensock.com/scrolltrigger Main Page&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Documentation&lt;br /&gt;
 https://greensock.com/st-mistakes/ Häufige Fehler (auch mit each Schleifen)&lt;br /&gt;
 &lt;br /&gt;
 Obsolet: https://codepen.io/osublake/pen/a633d0c9e6e2b951496d7f1eb4fd8fb6 (ohne ScrollMagic)&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
Eine gute Methode vorzugehen:&lt;br /&gt;
* Timeline-Animation ohne ScrollTrigger bauen&lt;br /&gt;
* ScrollTrigger Konfiguration in die Timeline einbauen.&lt;br /&gt;
&lt;br /&gt;
== MatchMedia ==&lt;br /&gt;
Mit MatchMedia kann man unterschiedliche ScrollTrigger für unterschiedliche Bildschirme nutzen.&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger/static.matchMedia()&lt;br /&gt;
MatchMedia verwaltet bei Resize Events auch die Timelines, killt diese wenn nötig oder erzeugt neue. Das erleichtert unglaublich viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
Vorgehen&lt;br /&gt;
&lt;br /&gt;
* Timeline Animation erstellen&lt;br /&gt;
* ScrollTrigger Konfiguration in Timeline aufsetzen&lt;br /&gt;
* MatchMedia erstellen und Timeline Animation einsetzen.&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei MediaQueries umschließt MatchMedia die Animation. Genauer gesagt man übergibt in der MatchMedia Funktion alles was in diesem Query ausgeführt werden soll. MatchMedia überwacht aber auch Veränderungen und setzt alle Animationen zurück, wenn der Query nicht mehr passt. Timelines etc. werden also wieder gekillt und der Urzustand wieder hergestellt.&lt;br /&gt;
&lt;br /&gt;
=== MatchMedia aufsetzen ===&lt;br /&gt;
Im Konfigurationsobjekt von MatchMedia übergeben wir als Schlüssel der das MediaQuery enthält. Als Wert übergeben wie eine Funktion. In dieser Funktion werden alle Timelines / Animationen gesetzt die für das Query gelten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ScrollTrigger.matchMedia({&lt;br /&gt;
  &amp;quot;(minWidth: 800px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for 800px and up go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;(maxWidth: 799px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for smaller screens than 799px go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;all&amp;quot;: function(){&lt;br /&gt;
    // animations valid for all viewport sizes go here&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toggle Actions ==&lt;br /&gt;
toggleActions 	&lt;br /&gt;
&lt;br /&gt;
 onEnter, onLeave, onEnterBack, and onLeaveBack&lt;br /&gt;
 default is play none none none&lt;br /&gt;
 &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
 onEnter -&amp;gt; &amp;quot;normales betreten&amp;quot; von vorne&lt;br /&gt;
 onLeave -&amp;gt; nach komplettem Durchgang nach unten&lt;br /&gt;
 onEnterBack -&amp;gt; Eintritt von hinten&lt;br /&gt;
 onLeaveBack -&amp;gt; zurück bis Vor den Anfang&lt;br /&gt;
&lt;br /&gt;
So toggleActions: &amp;quot;play pause resume reset&amp;quot; will play the animation when entering, pause it when leaving, resume it when entering again backwards, and reset (rewind back to the beginning) when scrolling all the way back past the beginning. You can use any of the following keywords for each action: &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
=== Probleme mit Inline Styles und mediaQuery beheben - ScrollTrigger.saveStyles() ===&lt;br /&gt;
Manchmal kommt es vor, dass eine &amp;#039;&amp;#039;&amp;#039;Animation einen Inline Style setzt, der ein mediaQuery in CSS &amp;quot;überschreibt&amp;quot;&amp;#039;&amp;#039;&amp;#039;. Wenn man dieses Verhalten nicht möchte und lieber den &amp;#039;&amp;#039;&amp;#039;Zustand beim Laden der Seite herstellen&amp;#039;&amp;#039;&amp;#039; möchte kann man die Funktion saveStyles nutzen. Mit saveStyles kann man vor der Animation den Zustand von DOM-Objekten speichern. GSAP setzt diese dann wieder zurück wenn der MatchMedia Zweig nicht mehr zutrifft.&lt;br /&gt;
 ScrollTrigger.saveStyles(&amp;#039;.myElement, .myOtherElement);&lt;br /&gt;
&lt;br /&gt;
== Beispiele Tipps etc. ==&lt;br /&gt;
=== Horizontal Scroll ===&lt;br /&gt;
 https://codepen.io/GreenSock/pen/896549f0a83297debd9111fe9b205a97&lt;br /&gt;
&lt;br /&gt;
Mit Tablet Swipe:&lt;br /&gt;
 https://greensock.com/forums/topic/28016-horizontal-scroll-with-draggable-syncing-the-two/?tab=comments#comment-138080&lt;br /&gt;
 https://codepen.io/GreenSock/pen/ZELQqeJ?editors=0010&lt;br /&gt;
 https://greensock.com/forums/topic/25544-horizontal-scroll-trigger-tablet-mobile/&lt;br /&gt;
&lt;br /&gt;
== Probleme beheben ==&lt;br /&gt;
=== Sprünge ===&lt;br /&gt;
 https://greensock.com/st-mistakes/#to-issues&lt;br /&gt;
Wichtig zu wissen: ScrollTrigger speichert die Startwerte für eine Animation wenn der Trigger erzeugt wird. Dadurch können Sprünge entstehen, wenn mehrere Trigger auf eine Eigenschaft angewendet werden, das Objekt sich aber zum Startpunkt bereits verändert hat.&lt;br /&gt;
&lt;br /&gt;
Lösungen &lt;br /&gt;
- immediateRender Eigenschaft&lt;br /&gt;
- fromTo statt to nutzen&lt;br /&gt;
- Ein ScrollTrigger für mehrere Animationen (Timeline)&lt;br /&gt;
&lt;br /&gt;
=== Abhängigkeiten vom Viewport ===&lt;br /&gt;
Wenn Objekte sich relativ zum Viewport ausrichten muss man darauf achten, dass sich die Werte bei einer Veränderung des Browsers anpassen. Das funktioniert mit Funktionen statt statischen Werten:&lt;br /&gt;
 end: `+=${elem.offsetHeight}` // won&amp;#039;t be updated on refresh&lt;br /&gt;
 end: () =&amp;gt; `+=${elem.offsetHeight}` // will be updated&lt;br /&gt;
&lt;br /&gt;
=== Overlaping Issued / Überlappungen vermeiden ===&lt;br /&gt;
 https://www.youtube.com/watch?v=SVjndrQ6v9I&lt;br /&gt;
Zwei Wege entweder &lt;br /&gt;
&lt;br /&gt;
Toggle Actions (die Regel)&lt;br /&gt;
 play complete reverse reset&lt;br /&gt;
 // wird zu&lt;br /&gt;
 &lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
preventOverlaps / fastScrollEnd&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26037</id>
		<title>GSAP - ScrollTrigger</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26037"/>
		<updated>2022-04-08T13:21:03Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Update: Die beste Möglichkeit Scrolling mit Animationen zu verbinden ist mit dem neuen (2020) ScrollTrigger Plugin.&lt;br /&gt;
 https://www.youtube.com/watch?v=X7IBa7vZjmo Intro mit Beispielen&lt;br /&gt;
 https://greensock.com/scrolltrigger Main Page&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Documentation&lt;br /&gt;
 https://greensock.com/st-mistakes/ Häufige Fehler (auch mit each Schleifen)&lt;br /&gt;
 &lt;br /&gt;
 Obsolet: https://codepen.io/osublake/pen/a633d0c9e6e2b951496d7f1eb4fd8fb6 (ohne ScrollMagic)&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
Eine gute Methode vorzugehen:&lt;br /&gt;
* Timeline-Animation ohne ScrollTrigger bauen&lt;br /&gt;
* ScrollTrigger Konfiguration in die Timeline einbauen.&lt;br /&gt;
&lt;br /&gt;
== MatchMedia ==&lt;br /&gt;
Mit MatchMedia kann man unterschiedliche ScrollTrigger für unterschiedliche Bildschirme nutzen.&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger/static.matchMedia()&lt;br /&gt;
MatchMedia verwaltet bei Resize Events auch die Timelines, killt diese wenn nötig oder erzeugt neue. Das erleichtert unglaublich viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
Vorgehen&lt;br /&gt;
&lt;br /&gt;
* Timeline Animation erstellen&lt;br /&gt;
* ScrollTrigger Konfiguration in Timeline aufsetzen&lt;br /&gt;
* MatchMedia erstellen und Timeline Animation einsetzen.&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei MediaQueries umschließt MatchMedia die Animation. Genauer gesagt man übergibt in der MatchMedia Funktion alles was in diesem Query ausgeführt werden soll. MatchMedia überwacht aber auch Veränderungen und setzt alle Animationen zurück, wenn der Query nicht mehr passt. Timelines etc. werden also wieder gekillt und der Urzustand wieder hergestellt.&lt;br /&gt;
&lt;br /&gt;
=== MatchMedia aufsetzen ===&lt;br /&gt;
Im Konfigurationsobjekt von MatchMedia übergeben wir als Schlüssel der das MediaQuery enthält. Als Wert übergeben wie eine Funktion. In dieser Funktion werden alle Timelines / Animationen gesetzt die für das Query gelten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ScrollTrigger.matchMedia({&lt;br /&gt;
  &amp;quot;(minWidth: 800px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for 800px and up go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;(maxWidth: 799px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for smaller screens than 799px go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;all&amp;quot;: function(){&lt;br /&gt;
    // animations valid for all viewport sizes go here&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toggle Actions ==&lt;br /&gt;
toggleActions 	&lt;br /&gt;
&lt;br /&gt;
 onEnter, onLeave, onEnterBack, and onLeaveBack&lt;br /&gt;
 default is play none none none&lt;br /&gt;
 &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
 onEnter -&amp;gt; &amp;quot;normales betreten&amp;quot; von vorne&lt;br /&gt;
 onLeave -&amp;gt; nach komplettem Durchgang nach unten&lt;br /&gt;
 onEnterBack -&amp;gt; Eintritt von hinten&lt;br /&gt;
 onLeaveBack -&amp;gt; zurück bis Vor den Anfang&lt;br /&gt;
&lt;br /&gt;
So toggleActions: &amp;quot;play pause resume reset&amp;quot; will play the animation when entering, pause it when leaving, resume it when entering again backwards, and reset (rewind back to the beginning) when scrolling all the way back past the beginning. You can use any of the following keywords for each action: &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
=== Probleme mit Inline Styles und mediaQuery beheben - ScrollTrigger.saveStyles() ===&lt;br /&gt;
Manchmal kommt es vor, dass eine &amp;#039;&amp;#039;&amp;#039;Animation einen Inline Style setzt, der ein mediaQuery in CSS &amp;quot;überschreibt&amp;quot;&amp;#039;&amp;#039;&amp;#039;. Wenn man dieses Verhalten nicht möchte und lieber den &amp;#039;&amp;#039;&amp;#039;Zustand beim Laden der Seite herstellen&amp;#039;&amp;#039;&amp;#039; möchte kann man die Funktion saveStyles nutzen. Mit saveStyles kann man vor der Animation den Zustand von DOM-Objekten speichern. GSAP setzt diese dann wieder zurück wenn der MatchMedia Zweig nicht mehr zutrifft.&lt;br /&gt;
 ScrollTrigger.saveStyles(&amp;#039;.myElement, .myOtherElement);&lt;br /&gt;
&lt;br /&gt;
== Beispiele Tipps etc. ==&lt;br /&gt;
=== Horizontal Scroll ===&lt;br /&gt;
 https://codepen.io/GreenSock/pen/896549f0a83297debd9111fe9b205a97&lt;br /&gt;
&lt;br /&gt;
Mit Tablet Swipe:&lt;br /&gt;
 https://greensock.com/forums/topic/28016-horizontal-scroll-with-draggable-syncing-the-two/?tab=comments#comment-138080&lt;br /&gt;
 https://codepen.io/GreenSock/pen/ZELQqeJ?editors=0010&lt;br /&gt;
 https://greensock.com/forums/topic/25544-horizontal-scroll-trigger-tablet-mobile/&lt;br /&gt;
&lt;br /&gt;
== Probleme beheben ==&lt;br /&gt;
=== Overlaping Issued / Überlappungen vermeiden ===&lt;br /&gt;
 https://www.youtube.com/watch?v=SVjndrQ6v9I&lt;br /&gt;
Zwei Wege entweder &lt;br /&gt;
&lt;br /&gt;
Toggle Actions (die Regel)&lt;br /&gt;
 play complete reverse reset&lt;br /&gt;
 // wird zu&lt;br /&gt;
 &lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
preventOverlaps / fastScrollEnd&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_Timelines&amp;diff=26036</id>
		<title>GSAP - Timelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_Timelines&amp;diff=26036"/>
		<updated>2022-04-08T12:25:29Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://greensock.com/docs/v3/GSAP/gsap.timeline()&lt;br /&gt;
 https://greensock.com/forums/topic/12643-master-timeline-and-the-use-of-functions/&lt;br /&gt;
== Master Timeline ==&lt;br /&gt;
Gutes Vorgehen für flexiblen Einsatz:&lt;br /&gt;
&lt;br /&gt;
Celli, I read you question a little differently. it seems you are already using a modular approach, it&amp;#039;s just that you are doing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var first = new TImelineLite();&lt;br /&gt;
var second = new TimelineLite();&lt;br /&gt;
var third = new TimelineLite();&lt;br /&gt;
&lt;br /&gt;
master.add(first);&lt;br /&gt;
master.add(second);&lt;br /&gt;
master.add(third);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and want to know why its better to do&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function getFirst() {&lt;br /&gt;
  var tl = new TimelineLite();&lt;br /&gt;
  tl.to(...)&lt;br /&gt;
  return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getSecond() {&lt;br /&gt;
  var tl = new TimelineLite();&lt;br /&gt;
  tl.to(...)&lt;br /&gt;
  return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getThird() {&lt;br /&gt;
  var tl = new TimelineLite();&lt;br /&gt;
  tl.to(...)&lt;br /&gt;
  return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
master.add(getFirst());&lt;br /&gt;
master.add(getSecond());&lt;br /&gt;
master.add(getThird());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The end result of both techniques is going to be identical and both offer a modular approach. However, wrapping your timelines in a function has two advantages which may not be applicable all the time, but its nice to have them:)&lt;br /&gt;
&lt;br /&gt;
1: By using functions to create your timelines, you can create them &amp;quot;on-demand&amp;quot; only when needed. In the context of a large game or application the function-wrapped way means you don&amp;#039;t have to create 500 timelines in advance, you can just call the proper function when you need a timeline. &lt;br /&gt;
&lt;br /&gt;
2: You can create the same timeline multiple times and add each unique copy of the timeline to the same or any parent timeline. Although it isn&amp;#039;t always necessary, it is very easy to use the function-wrapped technique to do&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
master.add(getFirst());&lt;br /&gt;
master.add(getFirst());&lt;br /&gt;
master.add(getFirst());&lt;br /&gt;
master.add(getSecond());&lt;br /&gt;
master.add(getSecond());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When it comes to doing elaborate, dynamic scene changes (based on user interaction) it makes things incredibly flexible.&lt;br /&gt;
&lt;br /&gt;
Imagine your app has a variety of scenes, and each scene has its own timeline for animating in and out.&lt;br /&gt;
&lt;br /&gt;
You could do something like:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navTimeline.add(scene1Out());&lt;br /&gt;
navTimeline.add(scene3In(), &amp;quot;-=1&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which would trigger the timeline that the scene3In() function generates 1 second before the scene1Out animation ends.&lt;br /&gt;
&lt;br /&gt;
and then maybe later the user wants to go back to scene1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navTimeline.add(scene3Out());&lt;br /&gt;
navTimeline.add(scene1In(), &amp;quot;-=1&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The end result of this technique is that you can generate your transition timelines whenever you need them, as many times as you need them, and glue them together in any number of ways. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function carMove(){&lt;br /&gt;
var tl = new TimelineMax();&lt;br /&gt;
tl.to(&amp;quot;#car&amp;quot;, 2, {x:&amp;quot;+=200&amp;quot;})&lt;br /&gt;
/* more tweens go here */&lt;br /&gt;
return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wheelsRotate(){&lt;br /&gt;
var tl = new TimelineMax();&lt;br /&gt;
tl.to(&amp;quot;#wheels&amp;quot;, 2, {rotation:&amp;quot;+=360&amp;quot;})&lt;br /&gt;
/* more tweens go here */&lt;br /&gt;
return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
masterTL&lt;br /&gt;
.add( carMove())&lt;br /&gt;
.add( wheelsRotate());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_Timelines&amp;diff=26035</id>
		<title>GSAP - Timelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_Timelines&amp;diff=26035"/>
		<updated>2022-04-08T12:19:26Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Master Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://greensock.com/forums/topic/12643-master-timeline-and-the-use-of-functions/&lt;br /&gt;
== Master Timeline ==&lt;br /&gt;
Gutes Vorgehen für flexiblen Einsatz:&lt;br /&gt;
&lt;br /&gt;
Celli, I read you question a little differently. it seems you are already using a modular approach, it&amp;#039;s just that you are doing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var first = new TImelineLite();&lt;br /&gt;
var second = new TimelineLite();&lt;br /&gt;
var third = new TimelineLite();&lt;br /&gt;
&lt;br /&gt;
master.add(first);&lt;br /&gt;
master.add(second);&lt;br /&gt;
master.add(third);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and want to know why its better to do&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function getFirst() {&lt;br /&gt;
  var tl = new TimelineLite();&lt;br /&gt;
  tl.to(...)&lt;br /&gt;
  return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getSecond() {&lt;br /&gt;
  var tl = new TimelineLite();&lt;br /&gt;
  tl.to(...)&lt;br /&gt;
  return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getThird() {&lt;br /&gt;
  var tl = new TimelineLite();&lt;br /&gt;
  tl.to(...)&lt;br /&gt;
  return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
master.add(getFirst());&lt;br /&gt;
master.add(getSecond());&lt;br /&gt;
master.add(getThird());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The end result of both techniques is going to be identical and both offer a modular approach. However, wrapping your timelines in a function has two advantages which may not be applicable all the time, but its nice to have them:)&lt;br /&gt;
&lt;br /&gt;
1: By using functions to create your timelines, you can create them &amp;quot;on-demand&amp;quot; only when needed. In the context of a large game or application the function-wrapped way means you don&amp;#039;t have to create 500 timelines in advance, you can just call the proper function when you need a timeline. &lt;br /&gt;
&lt;br /&gt;
2: You can create the same timeline multiple times and add each unique copy of the timeline to the same or any parent timeline. Although it isn&amp;#039;t always necessary, it is very easy to use the function-wrapped technique to do&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
master.add(getFirst());&lt;br /&gt;
master.add(getFirst());&lt;br /&gt;
master.add(getFirst());&lt;br /&gt;
master.add(getSecond());&lt;br /&gt;
master.add(getSecond());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When it comes to doing elaborate, dynamic scene changes (based on user interaction) it makes things incredibly flexible.&lt;br /&gt;
&lt;br /&gt;
Imagine your app has a variety of scenes, and each scene has its own timeline for animating in and out.&lt;br /&gt;
&lt;br /&gt;
You could do something like:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navTimeline.add(scene1Out());&lt;br /&gt;
navTimeline.add(scene3In(), &amp;quot;-=1&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which would trigger the timeline that the scene3In() function generates 1 second before the scene1Out animation ends.&lt;br /&gt;
&lt;br /&gt;
and then maybe later the user wants to go back to scene1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
navTimeline.add(scene3Out());&lt;br /&gt;
navTimeline.add(scene1In(), &amp;quot;-=1&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The end result of this technique is that you can generate your transition timelines whenever you need them, as many times as you need them, and glue them together in any number of ways. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function carMove(){&lt;br /&gt;
var tl = new TimelineMax();&lt;br /&gt;
tl.to(&amp;quot;#car&amp;quot;, 2, {x:&amp;quot;+=200&amp;quot;})&lt;br /&gt;
/* more tweens go here */&lt;br /&gt;
return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wheelsRotate(){&lt;br /&gt;
var tl = new TimelineMax();&lt;br /&gt;
tl.to(&amp;quot;#wheels&amp;quot;, 2, {rotation:&amp;quot;+=360&amp;quot;})&lt;br /&gt;
/* more tweens go here */&lt;br /&gt;
return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
masterTL&lt;br /&gt;
.add( carMove())&lt;br /&gt;
.add( wheelsRotate());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_Timelines&amp;diff=26034</id>
		<title>GSAP - Timelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_Timelines&amp;diff=26034"/>
		<updated>2022-04-08T12:13:44Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: Die Seite wurde neu angelegt: „ https://greensock.com/forums/topic/12643-master-timeline-and-the-use-of-functions/ == Master Timeline == Gutes Vorgehen für flexiblen Einsatz: &amp;lt;syntaxhighlig…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://greensock.com/forums/topic/12643-master-timeline-and-the-use-of-functions/&lt;br /&gt;
== Master Timeline ==&lt;br /&gt;
Gutes Vorgehen für flexiblen Einsatz:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function carMove(){&lt;br /&gt;
var tl = new TimelineMax();&lt;br /&gt;
tl.to(&amp;quot;#car&amp;quot;, 2, {x:&amp;quot;+=200&amp;quot;})&lt;br /&gt;
/* more tweens go here */&lt;br /&gt;
return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wheelsRotate(){&lt;br /&gt;
var tl = new TimelineMax();&lt;br /&gt;
tl.to(&amp;quot;#wheels&amp;quot;, 2, {rotation:&amp;quot;+=360&amp;quot;})&lt;br /&gt;
/* more tweens go here */&lt;br /&gt;
return tl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
masterTL&lt;br /&gt;
.add( carMove())&lt;br /&gt;
.add( wheelsRotate());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP&amp;diff=26033</id>
		<title>GSAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP&amp;diff=26033"/>
		<updated>2022-04-08T12:11:57Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Greensock Animation Plattform ==&lt;br /&gt;
GSAP ist eine Sammlung von JavaScripten zur Animation. Es ist im Moment der quasi Standard wenn es um JavaScript Manipulation von CSS Eigenschaften geht. &lt;br /&gt;
&lt;br /&gt;
GSAP ist in der Basisversion frei. Mit einem kostenpflichtigen Account bekommt man zusätzliche Plugins.&lt;br /&gt;
&lt;br /&gt;
GSAP übernimmt einem Arbeit ab, da es recht gut mit verschiedenen Browsern und Plattformen umgehen kann und außerdem performant arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
 [[GSAP - Timelines]]&lt;br /&gt;
 https://greensock.com&lt;br /&gt;
 https://greensock.com/install&lt;br /&gt;
 [[GSAP - Snippets]]&lt;br /&gt;
 https://tympanus.net/codrops/2019/11/14/the-new-features-of-gsap-3/&lt;br /&gt;
 https://greensock.com/scrollmagic - obsolet mit ScrollTrigger&lt;br /&gt;
 https://css-tricks.com/writing-smarter-animation-code/ // *****&lt;br /&gt;
 https://css-tricks.com/tips-for-writing-animation-code-efficiently/ // *****&lt;br /&gt;
 [[GSAP - Plugins]]&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
 [[GSAP - Infinite Textbanner]]&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
Einbinden&lt;br /&gt;
 &amp;lt;script src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/gsap/3.2.4/gsap.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
Einfache Animationen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.to(&amp;quot;.logo&amp;quot;, {duration: 2, x: 300}); // Dies nennt sich eine Timeline. 300px nach rechts bewegen in 2s mit Standardwerten (ease out...)&lt;br /&gt;
gsap.to(&amp;quot;.logo&amp;quot;, {duration: 2, x: 300, backgroundColor: &amp;quot;#c2c4c8&amp;quot;}); // CSS Eigenschaften die normal ein - haben, werden als Camelcase geschrieben.&lt;br /&gt;
// Eigenschaften mit Zeichen in Anführungsstrichen. Fast alles lässt sich Animieren.&lt;br /&gt;
gsap.to(&amp;quot;.logo&amp;quot;, {duration: 2, x: 300, backgroundColor: &amp;quot;#c2c4c8&amp;quot;, borderRadius: &amp;quot;50%&amp;quot;, border: &amp;quot;4px solid white&amp;quot;});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ease In Out&lt;br /&gt;
 https://greensock.com/docs/v3/Eases&lt;br /&gt;
 gsap.to(&amp;quot;.logo&amp;quot;, {duration: 1, x:300, ease: &amp;quot;power2.inOut&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
== Umstieg von v2 auf v3 / Codesnippets ==&lt;br /&gt;
 https://greensock.com/3-release-notes&lt;br /&gt;
Vieles wurde vereinfacht. Die meisten alten Funktionen funktionieren weiterhin. Neue Projekte sollte man in der neuen Syntax realisieren. Es kamen viele nützliche Dinge hinzu.&lt;br /&gt;
&lt;br /&gt;
=== Vereinheitlichung der Objekte ===&lt;br /&gt;
* Keine Unterscheidung mehr zwischen TweenMax und TweenMax Lite, Timeline... Es gibt &amp;#039;&amp;#039;&amp;#039;nur noch ein gsap Objekt&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* Duration ist jetzt im Eigenschaften Objekt.&lt;br /&gt;
 //OLD - duration was 2nd parameter&lt;br /&gt;
 TweenMax.to(&amp;quot;.class&amp;quot;, 1, {x:100});&lt;br /&gt;
 //NEW - duration is now a property of the vars object&lt;br /&gt;
 gsap.to(&amp;quot;.class&amp;quot;, {duration:1, x:100});&lt;br /&gt;
* Ease ist einfacher&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//OLD ==&amp;gt; NEW&lt;br /&gt;
Elastic.easeOut ==&amp;gt; &amp;quot;elastic.out&amp;quot; //or just &amp;quot;elastic&amp;quot; because &amp;quot;.out&amp;quot; is the default flavor&lt;br /&gt;
Elastic.easeIn ==&amp;gt; &amp;quot;elastic.in&amp;quot;&lt;br /&gt;
Elastic.easeInOut ==&amp;gt; &amp;quot;elastic.inOut&amp;quot;&lt;br /&gt;
Elastic.easeOut.config(1, 0.5) ==&amp;gt; &amp;quot;elastic.out(1, 0.5)&amp;quot; //or just &amp;quot;elastic(1, 0.5)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//and the other configurable eases are much easier!:&lt;br /&gt;
SteppedEase.config(5) ==&amp;gt; &amp;quot;steps(5)&amp;quot;&lt;br /&gt;
SlowMo.ease.config(0.5, 0.8) ==&amp;gt; &amp;quot;slow(0.5, 0.8)&amp;quot;&lt;br /&gt;
RoughEase.ease.config({points:40}) ==&amp;gt; &amp;quot;rough(40)&amp;quot;&lt;br /&gt;
ExpoScaleEase.config(0.5, 3) ==&amp;gt; &amp;quot;expoScale(0.5, 3)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Vererbung von Timeline Eigenschaften ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.timeline({defaults:{ease:&amp;quot;back&amp;quot;, duration:2}})&lt;br /&gt;
    .to(&amp;quot;.class-1&amp;quot;, {x:100}) //inherits the ease and duration from the parent timeline!&lt;br /&gt;
    .to(&amp;quot;.class-2&amp;quot;, {y:200}) //this one too&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Staggering als Eigenschaft ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Staggering&amp;#039;&amp;#039;&amp;#039; in den Properties. Früher mußte man stagger Funktionen nutzen (staggerTo()...)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.to(&amp;quot;.class&amp;quot;, {&lt;br /&gt;
  x:&amp;quot;+=100&amp;quot;,&lt;br /&gt;
  duration:1,&lt;br /&gt;
  stagger: 0.5 //simple stagger of 0.5 seconds&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//or get advanced:&lt;br /&gt;
gsap.to(&amp;quot;.class&amp;quot;, {&lt;br /&gt;
  x:&amp;quot;+=100&amp;quot;,&lt;br /&gt;
  duration:1,&lt;br /&gt;
  stagger: {&lt;br /&gt;
    amount:2,&lt;br /&gt;
    from:&amp;quot;center&amp;quot;,&lt;br /&gt;
    grid:&amp;quot;auto&amp;quot;,&lt;br /&gt;
    onComplete: myFunction //define callbacks inside the stagger to make them apply to each sub-tween&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Keyframes ===&lt;br /&gt;
Anstatt mehrerer Tweens kann man auch mehrere TweenProperties als keyframes kombinieren und hat weniger Tipparbeit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.to(&amp;quot;.class&amp;quot;, {keyframes: [ //&amp;lt;-- an array of keyframes!&lt;br /&gt;
  {x:100, duration:1},&lt;br /&gt;
  {y:200, duration:1, delay:0.5}, //create a 0.5 second gap&lt;br /&gt;
  {rotation:360, duration:2, delay:-0.25} //overlap by 0.25 seconds&lt;br /&gt;
]});&lt;br /&gt;
&amp;lt;/syntaxhighligh&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neue Timeline Control Features ===&lt;br /&gt;
Standardmäßig startet ein Tween nachdem der vorige beendet ist. möchte man ihn gleichzeitig starten musste man früher mit Labels arbeiten, oder die Dauer wissen und ihn vorziehen. Jetzt geht das einfacher. &amp;#039;&amp;#039;&amp;#039;Man kann eine nachfolgende Animation relativ zum Endpunkt ODER zum Startpunkt der vorigen positionieren.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;quot;&amp;lt;&amp;quot; references the most recently-added animation&amp;#039;s START time&lt;br /&gt;
* &amp;quot;&amp;gt;&amp;quot; references the most recently-added animation&amp;#039;s END time&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var tl = gsap.timeline();&lt;br /&gt;
tl.to(...)&lt;br /&gt;
  .to(..., &amp;quot;&amp;quot;) //starts immediately after the previous tween&amp;#039;s end time (sequenced)&lt;br /&gt;
  .to(..., &amp;quot;&amp;gt;-0.5&amp;quot;) //overlaps with the previous tween by 0.5 seconds (because the number is negative)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Globale Timeline kontrollieren ===&lt;br /&gt;
 gsap.globalTimeline.timeScale(0.1); //slow everything down&lt;br /&gt;
 gsap.globalTimeline.pause(); //stop everything, though you might want to use gsap.exportRoot() instead so that you can exclude delayedCalls()&lt;br /&gt;
&lt;br /&gt;
=== Sinnvollere Aliase ===&lt;br /&gt;
* Sinnvollere Aliase für CSS-Eigenschaften: x -&amp;gt; translateX, y -&amp;gt; translateY, rotate -&amp;gt; rotation&lt;br /&gt;
Geschickte Shortcuts für Rotation:&lt;br /&gt;
 rotation:&amp;quot;270_short&amp;quot; //animates in the shortest direction!&lt;br /&gt;
 rotation:&amp;quot;270_cw&amp;quot;    //animates clockwise&lt;br /&gt;
 rotation:&amp;quot;270_ccw&amp;quot;   //animates counter-clockwise&lt;br /&gt;
Einheiten für x und y Transformationen möglich:&lt;br /&gt;
 gsap.to(&amp;quot;.class&amp;quot;, {&lt;br /&gt;
   x:&amp;quot;50vw&amp;quot;, //units! (default is px)&lt;br /&gt;
   y:&amp;quot;5em&amp;quot;&lt;br /&gt;
 });&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;MotionPathPlugin&amp;#039;&amp;#039;&amp;#039; ersetzt BezierPlugin. Hat zusätzlich einen &amp;#039;&amp;#039;&amp;#039;Editor&amp;#039;&amp;#039;&amp;#039; (nur Club Members)&lt;br /&gt;
* Neue &amp;#039;&amp;#039;&amp;#039;random&amp;#039;&amp;#039;&amp;#039; Funktion&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;getProperty&amp;#039;&amp;#039;&amp;#039; Funktion mit Konvertierung von Einheiten&lt;br /&gt;
* Es lassen sich &amp;quot;&amp;#039;&amp;#039;&amp;#039;effects&amp;#039;&amp;#039;&amp;#039;&amp;quot; definieren, die man dann als Animation / Timeline wieder verwenden kann. Auch Parameter kann man nutzen.&lt;br /&gt;
* Man kann jetzt width und height von DOM Objekten animieren die mit &amp;quot;&amp;#039;&amp;#039;&amp;#039;auto&amp;#039;&amp;#039;&amp;#039;&amp;quot; definiert sind.&lt;br /&gt;
* Snap Plugin - bietet mehrere Möglichkeiten auf bestimmte Werte zu runden (in Array, in der Nähe...)&lt;br /&gt;
* Zahlreiche nützliche Utility Funktionen&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Multilanguage_Website&amp;diff=26032</id>
		<title>ProcessWire - Multilanguage Website</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Multilanguage_Website&amp;diff=26032"/>
		<updated>2022-04-06T14:34:33Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Seiten nur in einer Sprache verfügbar */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mehrsprachige Websites mit ProcessWire / Andere Default Sprache&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* https://processwire.com/docs/multi-language-support/&lt;br /&gt;
* https://processwire.com/talk/topic/5518-multi-language-site/&lt;br /&gt;
* http://processwire.com/api/multi-language-support/multi-language-urls/&lt;br /&gt;
* https://processwire.com/talk/topic/9322-change-default-language-for-homepage/ (Modul Solution, mehr zur Anschauung)&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Es gibt mehrere Bereiche an die man denken muss. Einmal geht es um die Eingabe im Backend, die Ausgabe im Frontend, die Sprachnavigation auf der Website und die Templates:&lt;br /&gt;
* Wie übersetze ich Text in meinen &amp;#039;&amp;#039;&amp;#039;Templates&amp;#039;&amp;#039;&amp;#039; ? Siehe unten i18n&lt;br /&gt;
* Wie übersetze ich &amp;#039;&amp;#039;&amp;#039;Inhalte&amp;#039;&amp;#039;&amp;#039; im Backend ?  Dafür ist das Modul Language Support Fields zuständig&lt;br /&gt;
* Wie sollen meine URLs aussehen ? Prinzipiell kann man jedem User unterschiedliche Sprachen auch ohne andere Domain liefern (über seine Session) aber i.d.R wollen wir die URL anzupassen.&lt;br /&gt;
** &amp;#039;&amp;#039;domain.de/en/meineSeite&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;domain.de/myPage&amp;#039;&amp;#039;&lt;br /&gt;
** Um &amp;#039;&amp;#039;&amp;#039;Seitennamen&amp;#039;&amp;#039;&amp;#039; zu übersetzen oder ein Domainkürzel in der URL voranzustellen benötige ich das Modul &amp;#039;&amp;#039;&amp;#039;Language Support Page Names&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
== Welche Module benötige ich ==&lt;br /&gt;
Da es einige Module in diesem Zusammenhang gibt hier eine Übersicht. Man findet Sie am besten unter &lt;br /&gt;
 Modules &amp;gt; Core &amp;gt; Language&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Languages Support&amp;#039;&amp;#039;&amp;#039; - ProcessWire multi-language support. Basis Modul bracht man für alle Beispiele unten. Reicht aus, wenn man nur die Standard-Sprache ändern will. &amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; In der aktuellen PW3 Version schlägt einem ProcessWire nach Installation des Language Support Moduls gleich die Ergänzenden Module (s.u.) vor und man kann den Installationsprozess ziemlich fix erledigen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Languages Support - Fields&amp;#039;&amp;#039;&amp;#039; Required to use multi-language fields. Basis für mehrsprachige Felder im Backend. &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Languages Support - Page Names&amp;#039;&amp;#039;&amp;#039;	(LanguageSupportPageNames) Required to use multi-language page names. Braucht man nur wenn &amp;#039;&amp;#039;&amp;#039;alle Seiten in allen Sprachen unterschiedliche Namen&amp;#039;&amp;#039;&amp;#039; bekommen sollen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Languages Support - Tabs&amp;#039;&amp;#039;&amp;#039; Organizes multi-language fields into tabs for a cleaner easier to use interface.&lt;br /&gt;
Für mehrsprachige Seiten benötigen wir im Frontend i.d.R. folgende Module: &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Language Support Fields&amp;#039;&amp;#039;&amp;#039; - Sind Felder, die im Backend für jede Sprache eine eigene Eingabe bieten.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Language Support Page Names&amp;#039;&amp;#039;&amp;#039; benötigt man, damit man für die Sprachen eigene URLs angeben kann. Z.B. bei Home in Englisch /en/ usw. &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;FieldtypePageTitleLanguage&amp;#039;&amp;#039;&amp;#039; benötigt man wenn man alle Seitenamen anpassen will (seite1_de seite1_fr ...) Für einen reinen Sprachpfad (/de/Seite) braucht man das nicht.&lt;br /&gt;
&lt;br /&gt;
== Einsprachige Seite aber Deutsch als Default Sprache ==&lt;br /&gt;
Wenn nur die Standardsprache verändern möchte, aber keine Mehrsprachige Seite benötigt brauchen wir nur das Modul &amp;#039;&amp;#039;&amp;#039;Language Support&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Enable languages support -&amp;gt; &amp;#039;&amp;#039;&amp;#039;Core Module &amp;quot;Language Support&amp;quot; aktivieren&amp;#039;&amp;#039;&amp;#039;. -&amp;gt; Sprachen stehen num im Backend Setup zur Verfügung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Titel der Default Sprache&amp;#039;&amp;#039;&amp;#039; anpassen (z.B. Deutsch (default) )&lt;br /&gt;
* Language Pack in der default Sprache installieren -&amp;gt; Dies ist ab jetzt die Default Sprache. Nicht vergessen auch den &amp;#039;&amp;#039;&amp;#039;lang Tag im Header&amp;#039;&amp;#039;&amp;#039; zu setzen, damit der Browser die Sprache richtig erkennt.&lt;br /&gt;
&lt;br /&gt;
== Sprachpakete installieren ==&lt;br /&gt;
 https://processwire.com/modules/category/language-pack/&lt;br /&gt;
* Sprache auswählen und dort komplettes zip hochladen.&lt;br /&gt;
* Informell (DU) leider im Moment nicht vorhanden&lt;br /&gt;
&lt;br /&gt;
== Basis-Module für Mehrsprachigkeit im Backend ==&lt;br /&gt;
Für mehrsprachige Seiten benötigen wir i.d.R. folgende Module: &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Language Support Fields&amp;#039;&amp;#039;&amp;#039; für die Backend Übersetzungen und &amp;#039;&amp;#039;&amp;#039;Language Support Page Names&amp;#039;&amp;#039;&amp;#039; für die URLs.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;FieldtypePageTitleLanguage&amp;#039;&amp;#039;&amp;#039; benötigt man wenn man alle Seitenamen anpassen will (seite1_de seite1_fr ...) Für einen reinen Sprachpfad (/de/Seite) braucht man das nicht.&lt;br /&gt;
* Für weitere Sprachen entsprechend hinzufügen.&lt;br /&gt;
Vorgehen:&lt;br /&gt;
* Language Packs installieren: drop in the none english language pack (for admin backend) into the default language, (e.g. german langpack)&lt;br /&gt;
* As a nice sideeffect every new user in your system gets the native language per default without have it to select from the list.&lt;br /&gt;
&lt;br /&gt;
== Templates für Multilanguage vorbereiten (i18n) ==&lt;br /&gt;
 https://processwire.com/docs/multi-language-support/code-i18n/&lt;br /&gt;
 https://processwire.com/blog/posts/functional-fields/&lt;br /&gt;
=== Functional fields ===&lt;br /&gt;
In PW3 kamen die functional Fields hinzu. Mit diesen kann man statischen Text dynamisch im Page Editor ansprechen. D.h. das Functional Field findet Texte im Template und macht sie automatisch editierbar im Page Editor. Das Ganze funktioniert auch Mehrsprachig.&lt;br /&gt;
 [[ProcessWire - Functional Fields]]&lt;br /&gt;
 https://processwire.com/blog/posts/functional-fields/&lt;br /&gt;
Beispiele für die Ausgabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
__text(&amp;#039;your text&amp;#039;);&lt;br /&gt;
__textarea(&amp;#039;your text&amp;#039;);&lt;br /&gt;
__richtext(&amp;#039;&amp;lt;p&amp;gt;your text&amp;lt;/p&amp;gt;&amp;#039;); &lt;br /&gt;
__text(&amp;#039;Subscribe Now&amp;#039;, &amp;#039;subscribe&amp;#039;) // define a identifier for this text snippet...&lt;br /&gt;
__text(&amp;#039;subscribe&amp;#039;) // ..reuse it this way&lt;br /&gt;
$pages-&amp;gt;get(&amp;#039;/&amp;#039;)-&amp;gt;mytext-&amp;gt;subscribe // reuse from another template&lt;br /&gt;
__text(&amp;#039;Subscribe Now&amp;#039;, &amp;#039;subscribe&amp;#039;, &amp;#039;Submit button&amp;#039;); // Label for page editor&lt;br /&gt;
__text(&amp;#039;Subscribe Now&amp;#039;, &amp;#039;subscribe&amp;#039;, &amp;#039;label=Submit button, notes=Test&amp;#039;); // or use a pw selector&lt;br /&gt;
__text(&amp;#039;Subscribe Now&amp;#039;, &amp;#039;name=subscribe, label=Submit button, notes=Test&amp;#039;); // equivalent to upper&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard Multilanguage nach i18n ===&lt;br /&gt;
&lt;br /&gt;
 $out = $this-&amp;gt;_(&amp;quot;Live long and prosper&amp;quot;);  // syntax within a class&lt;br /&gt;
 $out = __(&amp;quot;Live long and prosper!&amp;quot;); // syntax outside of a class&lt;br /&gt;
&lt;br /&gt;
Dann im Backend unter der Sprache &amp;quot;Find files to translate&amp;quot; und die Template Datei auswählen.&lt;br /&gt;
&lt;br /&gt;
=== Variablen in i18n ===&lt;br /&gt;
 $out = sprintf(__(&amp;quot;Created %d pages.&amp;quot;), $count); &lt;br /&gt;
 $out = sprintf(__(&amp;#039;Your city is %1$s, and your zip code is %2$s.&amp;#039;), $city, $zipcode);&lt;br /&gt;
&lt;br /&gt;
=== Plural in Multilanguage Files===&lt;br /&gt;
Hierzu gibt es die _n() Funktion&lt;br /&gt;
 $out = sprintf(_n(&amp;quot;Created %d page.&amp;quot;, &amp;quot;Created %d pages.&amp;quot;, $count), $count);&lt;br /&gt;
=== Unterschiedliche Übersetzungen bei gleichem Wortlaut ===&lt;br /&gt;
Manchmal muss der Begriff in anderen Sprachen unterschiedlich übersetzt werden, obwohl er in der Default Sprache gleich lautet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$label = _x(&amp;#039;Comment&amp;#039;, &amp;#039;noun&amp;#039;); // or $this-&amp;gt;_x(&amp;#039;Comment&amp;#039;, &amp;#039;noun&amp;#039;) in a class&lt;br /&gt;
...&lt;br /&gt;
// some other place in the code&lt;br /&gt;
echo _x(&amp;#039;Comment&amp;#039;, &amp;#039;column name&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kommentare für den Übersetzer und User ===&lt;br /&gt;
 $date = __(&amp;#039;g:i:s a&amp;#039;); // Date string in PHP date() format&lt;br /&gt;
 echo __(&amp;quot;Welcome Guest&amp;quot;); // Headline for guest user // Keep it short (2-3 words)&lt;br /&gt;
=== Regeln ===&lt;br /&gt;
* Eine Zeile ein Paar Anführungszeichen&lt;br /&gt;
* Nur eine Übersetzungsfunktion pro Zeile&lt;br /&gt;
&lt;br /&gt;
== Language Switcher ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// remember what language is set to&lt;br /&gt;
$savedLanguage = $user-&amp;gt;language;&lt;br /&gt;
&lt;br /&gt;
foreach($languages as $language) {&lt;br /&gt;
&lt;br /&gt;
  // if user is already viewing the page in this language, skip it&lt;br /&gt;
  if($language-&amp;gt;id == $savedLanguage-&amp;gt;id) continue;&lt;br /&gt;
&lt;br /&gt;
  // if this page isn&amp;#039;t viewable (active) for the language, skip it&lt;br /&gt;
  if(!$page-&amp;gt;viewable($language)) continue;&lt;br /&gt;
&lt;br /&gt;
  // set the user&amp;#039;s language, so that the $page-&amp;gt;url and any other&lt;br /&gt;
  // fields we access from it will be reflective of the $language&lt;br /&gt;
  $user-&amp;gt;language = $language;&lt;br /&gt;
&lt;br /&gt;
  // output a link to this page in the other language&lt;br /&gt;
  echo &amp;quot;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;#039;$page-&amp;gt;url&amp;#039;&amp;gt;$language-&amp;gt;title: $page-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
// restore the original language setting&lt;br /&gt;
$user-&amp;gt;language = $savedLanguage;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Seiten nur in einer Sprache verfügbar ==&lt;br /&gt;
What If I want to create/publish a page only in DE language, and that page should not be available in the default language?&lt;br /&gt;
Default language is required. But you could always add your own checkbox field to the page as a toggle to disable it. Your head.inc or _init.php or whatever your common initialization file is could check: &lt;br /&gt;
&lt;br /&gt;
 if($page-&amp;gt;disable_default_language &amp;amp;&amp;amp; $user-&amp;gt;language-&amp;gt;isDefault()) throw new Wire404Exception(); &lt;br /&gt;
You&amp;#039;d also have to consider it with navigation generation, perhaps skipping over pages that have the toggle set while in the default language, or adding it to your selectors when querying pages. &lt;br /&gt;
&lt;br /&gt;
Edit: you could also just choose to not use the default language at all. &lt;br /&gt;
&lt;br /&gt;
 if($user-&amp;gt;language-&amp;gt;isDefault()) $user-&amp;gt;language = $languages-&amp;gt;get(&amp;quot;en-us&amp;quot;); // or whatever you want your default to be&lt;br /&gt;
&lt;br /&gt;
== Language Alternate Fields ==&lt;br /&gt;
Eine Möglichkeit alle Felder (auch Bilder) in verschiedenen Sprachen zu nutzen.&lt;br /&gt;
 https://processwire.com/docs/multi-language-support/multi-language-fields/#language-alternate-fields&lt;br /&gt;
&lt;br /&gt;
== Probleme lösen ==&lt;br /&gt;
=== Feldtyp nicht als Multilanguagefeld vorhanden - Language Alternate Field ===&lt;br /&gt;
Manche Felder (z.B. AssistedUrl) gibt es nur einsprachig. ProcessWire bietet aber mit den &amp;#039;&amp;#039;&amp;#039;Language Alternate Fields&amp;#039;&amp;#039;&amp;#039; eine Möglichkeit solche Felder mehrsprachig zu nutzen. Dazu braucht man kein Modul. Es ist eine Basis Funktionalität.&lt;br /&gt;
&lt;br /&gt;
Dazu legt man für jede zusätzliche Sprache ein weiteres Feld mit dem selben Namen + der Namenserweiterung _sprachname an. Beispielsweise kann man für ein Feld Namens link ein weiteres Feld Namens &amp;#039;&amp;#039;&amp;#039;link_en&amp;#039;&amp;#039;&amp;#039; anlegen. Dann nutzt ProcessWire automatisch für die Sprache mit dem Namen &amp;#039;&amp;#039;&amp;#039;en&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Multilanguage Page allgemeines Vorgehen ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Module ====&lt;br /&gt;
* s.o. alle benötigten installieren&lt;br /&gt;
&lt;br /&gt;
==== 2. Backend ====&lt;br /&gt;
* Default Sprache festlegen&lt;br /&gt;
** Wenn nicht Englisch Sprachpaket installieren&lt;br /&gt;
** Wenn der Titel der Sprache auch der Identifier für den html Tag sein soll muss er &amp;#039;&amp;#039;de, en, fi&amp;#039;&amp;#039;... lauten&lt;br /&gt;
* Weitere Sprachen hinzufügen. Für Englisch benötigt man kein Sprachpaket. Als Name am besten den offiziellen Code (de, en...) vergeben.&lt;br /&gt;
* Die Homepage entscheidet über den Pfad. Wenn Englisch z.B. unter www.meineSeite.com/en/seitenname/ erreichbar sein soll, dann muss für Englisch unter &amp;#039;&amp;#039;&amp;#039;Einstellung &amp;gt; Namen en&amp;#039;&amp;#039;&amp;#039; eingetragen werden.&lt;br /&gt;
* Alle Felder die Übersetzt werden sollen auf Multilanguage Felder umstellen&lt;br /&gt;
&lt;br /&gt;
==== 3. Templates ====&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;lang Attribut&amp;#039;&amp;#039;&amp;#039; sollte zur Sprache passen. Mit der _x Funktion kann PW beliebige Strings in Templates übersetzten. PW findet diese automatisch.&lt;br /&gt;
_main.php (oder header..)&lt;br /&gt;
 &amp;lt;html lang=&amp;quot;&amp;lt;?php echo _x(&amp;#039;en&amp;#039;, &amp;#039;HTML language code&amp;#039;); ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
Im &amp;#039;&amp;#039;&amp;#039;Backend&amp;#039;&amp;#039;&amp;#039; muss man zunächst für Englisch den &amp;#039;&amp;#039;&amp;#039;Sprachindex aufbauen&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;Spracheinstellungen Verwaltung &amp;gt; Sprachen &amp;gt; Englisch&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
Dann kann man nun in den &amp;#039;&amp;#039;&amp;#039;Spracheinstellungen Verwaltung &amp;gt; Sprachen &amp;gt; meineSprache&amp;#039;&amp;#039;&amp;#039; das Label &amp;#039;&amp;#039;HTML language code&amp;#039;&amp;#039; suchen und mit dem passenden lang tag ersetzen.&lt;br /&gt;
&lt;br /&gt;
Das Funktioniert auch mit beliebigen anderen Werten die man im Template hartkodiert hat.&lt;br /&gt;
&lt;br /&gt;
Man kann auch den Language Title verwenden wenn dieser entsprechend vergeben wurde (en, de,...) . &amp;#039;&amp;#039;&amp;#039;Nachteil:&amp;#039;&amp;#039;&amp;#039; Dann kann man aber den Titel nicht mehr frei verändern wenn man ihn auch als Bezeichnung für den Language Switcher nutezn möchte.&lt;br /&gt;
 &amp;lt;html lang=&amp;quot;&amp;lt;?= $user-&amp;gt;language-&amp;gt;title ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies hat bei mir nicht funktioniert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;? $lang = $pages-&amp;gt;get(1)-&amp;gt;getLanguageValue($user-&amp;gt;language, &amp;#039;name&amp;#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;&amp;lt;?php echo $lang ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier wird einfach der Name der Sprache die der Benutzer im Moment hat (Session) ausgegeben. Der Name der Sprache sollte im Backend entsprechend der Norm gewählt sein. (de, it, fi...). Problem war das man den Namen der default Sprache nicht vergeben kann.&lt;br /&gt;
&lt;br /&gt;
==== 4. Language Switcher ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Text Navigation&amp;#039;&amp;#039;&amp;#039; z.B. so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;ul id=&amp;quot;nav-lang&amp;quot; class=&amp;quot;nav nav-h&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach($languages as $language){&lt;br /&gt;
	if(!$page-&amp;gt;viewable($language)) continue; // is page viewable in this language?&lt;br /&gt;
	if($language-&amp;gt;id == $user-&amp;gt;language-&amp;gt;id) {&lt;br /&gt;
		echo &amp;quot;&amp;lt;li class=&amp;#039;current&amp;#039;&amp;gt;&amp;quot;;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &amp;quot;&amp;lt;li&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	$url = $page-&amp;gt;localUrl($language);&lt;br /&gt;
	$hreflang = $pages-&amp;gt;get(&amp;#039;/&amp;#039;)-&amp;gt;getLanguageValue($language, &amp;#039;name&amp;#039;);&lt;br /&gt;
	echo &amp;#039;&amp;lt;a hreflang=&amp;quot;&amp;#039;.$hreflang.&amp;#039;&amp;quot; href=&amp;quot;&amp;#039;.$url.&amp;#039;&amp;quot; style=&amp;quot;text-transform:uppercase;&amp;quot;&amp;gt;&amp;#039;.$language-&amp;gt;title.&amp;#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Textnavigation mit first/last etc. Klassen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;ul id=&amp;quot;nav-lang&amp;quot; class=&amp;quot;nav nav-h&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$n = $languages-&amp;gt;count();&lt;br /&gt;
$i = 0;&lt;br /&gt;
&lt;br /&gt;
$separator = &amp;#039;&amp;lt;span class=&amp;quot;separator&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
foreach($languages as $language){&lt;br /&gt;
    $liClass = array();&lt;br /&gt;
    if(!$page-&amp;gt;viewable($language)) continue; // is page viewable in this language?&lt;br /&gt;
    $i++;&lt;br /&gt;
    if( $i == 1 ) $liClass[] = &amp;quot;first&amp;quot;;&lt;br /&gt;
    if( $i == $n ) $liClass[] = &amp;quot;last&amp;quot;;&lt;br /&gt;
    if($language-&amp;gt;id == $user-&amp;gt;language-&amp;gt;id) $liClass[] = &amp;#039;current&amp;#039;;&lt;br /&gt;
    echo &amp;#039;&amp;lt;li class=&amp;quot;&amp;#039;.implode(&amp;#039; &amp;#039;,$liClass).&amp;#039;&amp;quot;&amp;gt;&amp;#039;;&lt;br /&gt;
	$url = $page-&amp;gt;localUrl($language);&lt;br /&gt;
	$hreflang = $pages-&amp;gt;get(&amp;#039;/&amp;#039;)-&amp;gt;getLanguageValue($language, &amp;#039;name&amp;#039;);&lt;br /&gt;
	echo &amp;#039;&amp;lt;a hreflang=&amp;quot;&amp;#039;.$hreflang.&amp;#039;&amp;quot; href=&amp;quot;&amp;#039;.$url.&amp;#039;&amp;quot; style=&amp;quot;text-transform:uppercase;&amp;quot;&amp;gt;&amp;#039;.$language-&amp;gt;title.&amp;#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
	if( $i &amp;lt; $n ) echo $separator;&lt;br /&gt;
    echo &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Flaggennavi&amp;#039;&amp;#039;&amp;#039; z.B. so :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;ul id=&amp;quot;nav-lang&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach($languages as $language){&lt;br /&gt;
	if(!$page-&amp;gt;viewable($language)) continue; // is page viewable in this language?&lt;br /&gt;
	if($language-&amp;gt;id == $user-&amp;gt;language-&amp;gt;id) {&lt;br /&gt;
&lt;br /&gt;
		echo &amp;#039;&amp;lt;li class=&amp;quot;current&amp;quot; style=&amp;quot;opacity:0.5;&amp;quot;&amp;gt;&amp;#039;;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &amp;#039;&amp;lt;li&amp;gt;&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	$flag = urls()-&amp;gt;templates.&amp;#039;assets/flag-&amp;#039;.$language-&amp;gt;name.&amp;#039;.png&amp;#039;;&lt;br /&gt;
	$url = $page-&amp;gt;localUrl($language);&lt;br /&gt;
	$hreflang = $pages-&amp;gt;get(&amp;#039;/&amp;#039;)-&amp;gt;getLanguageValue($language, &amp;#039;name&amp;#039;);&lt;br /&gt;
	echo &amp;#039;&amp;lt;a hreflang=&amp;quot;&amp;#039;.$hreflang.&amp;#039;&amp;quot; href=&amp;quot;&amp;#039;.$url.&amp;#039;&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;flag&amp;quot; src=&amp;quot;&amp;#039;.$flag.&amp;#039;&amp;quot; style=&amp;quot;width: 100px;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Prantner ===&lt;br /&gt;
Hauptnavigation mit Flaggen:&lt;br /&gt;
&lt;br /&gt;
language-switcher.inc &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
$imgMarkup = &amp;quot;&amp;quot;;&lt;br /&gt;
$out = &amp;quot;&amp;quot;;&lt;br /&gt;
foreach($languages as $language) {&lt;br /&gt;
	if(!$page-&amp;gt;viewable($language)) continue; // is page viewable in this language?&lt;br /&gt;
	$url = $page-&amp;gt;localUrl($language);&lt;br /&gt;
	$hreflang = $homepage-&amp;gt;getLanguageValue($language, &amp;#039;name&amp;#039;);&lt;br /&gt;
	$imgUrl = $config-&amp;gt;urls-&amp;gt;templates.&amp;#039;assets/flags/&amp;#039;.$language-&amp;gt;name.&amp;#039;_sq.png&amp;#039;;&lt;br /&gt;
	$imgMarkup = &amp;quot;&amp;lt;img src=\&amp;quot;$imgUrl\&amp;quot; title=\&amp;quot;$language-&amp;gt;title\&amp;quot; alt=\&amp;quot;$language-&amp;gt;title\&amp;quot; class=\&amp;quot;circle z-depth-1\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	if($language-&amp;gt;id == $user-&amp;gt;language-&amp;gt;id) {&lt;br /&gt;
		$out .= &amp;quot;&amp;lt;span class=\&amp;quot;lang-button current\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	} else {&lt;br /&gt;
		$out .= &amp;quot;&amp;lt;span class=\&amp;quot;lang-button\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	$out .= &amp;quot;&amp;lt;a hreflang=\&amp;quot;$hreflang\&amp;quot; href=\&amp;quot;$url\&amp;quot;&amp;gt;$imgMarkup&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$out = &amp;#039;&amp;lt;div id=&amp;quot;nav-lang&amp;quot;&amp;gt;&amp;#039;.$out.&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
echo $out; &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
language-switcher-mobile.inc&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;ul id=&amp;quot;nav-mobile&amp;quot; class=&amp;quot;right hide-on-med-and-down&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	foreach($languages as $language) {&lt;br /&gt;
		if(!$page-&amp;gt;viewable($language)) continue; // is page viewable in this language?&lt;br /&gt;
		if($language-&amp;gt;id == $user-&amp;gt;language-&amp;gt;id) {&lt;br /&gt;
			echo &amp;quot;&amp;lt;li class=&amp;#039;current&amp;#039;&amp;gt;&amp;quot;;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &amp;quot;&amp;lt;li&amp;gt;&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		$url = $page-&amp;gt;localUrl($language);&lt;br /&gt;
		$hreflang = $homepage-&amp;gt;getLanguageValue($language, &amp;#039;name&amp;#039;);&lt;br /&gt;
		echo &amp;quot;&amp;lt;a hreflang=&amp;#039;$hreflang&amp;#039; href=&amp;#039;$url&amp;#039;&amp;gt;$language-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Language Snippets ==&lt;br /&gt;
=== URL der Sprache ===&lt;br /&gt;
 getLanguageValue($language-&amp;gt;id, &amp;#039;url&amp;#039;);&lt;br /&gt;
 $page-&amp;gt;localHttpUrl($language-&amp;gt;id); &lt;br /&gt;
 $page-&amp;gt;localUrl($language-&amp;gt;id);&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26031</id>
		<title>ProcessWire - Job Template</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26031"/>
		<updated>2022-04-04T08:14:42Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Funktionalität */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beispiel Setting für Jobs mit strukturierten Daten ==&lt;br /&gt;
Beispiel von SPPS&lt;br /&gt;
&lt;br /&gt;
=== Job Template ===&lt;br /&gt;
&lt;br /&gt;
==== Felder ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job_addresscountry&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 191,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Land&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addresslocality&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 188,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Ort&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addressregion&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 189,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Region&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_maxvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 185,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_minvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 184,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_unittext&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 186,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Bezahlung pro&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=MONTH|Monat\n2=YEAR|Jahr\n3=HOUR|Stunde\n4=WEEK|Woche\n5=DAY|Tag&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 179,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Datum&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_description&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 181,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeTextareaLanguage&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldCKEditor&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;rows&amp;quot;: 5,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterHannaCode&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;htmlOptions&amp;quot;: [&lt;br /&gt;
            2,&lt;br /&gt;
            4,&lt;br /&gt;
            16&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;langBlankInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;toolbar&amp;quot;: &amp;quot;Format, Styles, -, Bold, Italic, -, RemoveFormat\nNumberedList, BulletedList, -, Blockquote\nPWLink, Unlink, Anchor\nPWImage, Table, HorizontalRule, SpecialChar\nPasteText, PasteFromWord\nScayt, -, Sourcedialog\nJustifyCenter, JustifyLeft, JustifyRight&amp;quot;,&lt;br /&gt;
        &amp;quot;inlineMode&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useACF&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;usePurifier&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;formatTags&amp;quot;: &amp;quot;p;h1;h2;h3;h4;h5;h6;pre;address&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsCss&amp;quot;: &amp;quot;/site/templates/modules/InputfieldCKEditor/contents.css&amp;quot;,&lt;br /&gt;
        &amp;quot;stylesSet&amp;quot;: &amp;quot;customstyles:/site/templates/modules/InputfieldCKEditor/mystyles.js&amp;quot;,&lt;br /&gt;
        &amp;quot;extraPlugins&amp;quot;: [&lt;br /&gt;
            &amp;quot;pwimage&amp;quot;,&lt;br /&gt;
            &amp;quot;pwlink&amp;quot;,&lt;br /&gt;
            &amp;quot;sourcedialog&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;removePlugins&amp;quot;: &amp;quot;image,magicline&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;imageFields&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;toggles&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;extraAllowedContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsInlineCss&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;customOptions&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;plugin_sourcedialog&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_employmenttype&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 192,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Art der Anstellung&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=FULL_TIME|Vollzeit\n2=PART_TIME|Teilzeit\n3=CONTRACTOR|Vertrag\n4=TEMPORARY|Zeitarbeit\n5=INTERN|Internship (Trainee etc.)\n6=VOLUNTEER|Volontariat\n7=PER_DIEM|Per diem\n8=OTHER|Andere&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 178,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_link&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Link zum Jobangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeURL&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;noRelative&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowIDN&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowQuotes&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;addRoot&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 1024,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_logo&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 183,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_logo&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Logo&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeImage&amp;quot;,&lt;br /&gt;
        &amp;quot;fileSchema&amp;quot;: 270,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;extensions&amp;quot;: &amp;quot;gif jpg jpeg png&amp;quot;,&lt;br /&gt;
        &amp;quot;maxFiles&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputFormat&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;descriptionRows&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;useTags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;gridMode&amp;quot;: &amp;quot;grid&amp;quot;,&lt;br /&gt;
        &amp;quot;focusMode&amp;quot;: &amp;quot;on&amp;quot;,&lt;br /&gt;
        &amp;quot;resizeServer&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;clientQuality&amp;quot;: 90,&lt;br /&gt;
        &amp;quot;maxReject&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dimensionsByAspectRatio&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValuePage&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldImage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;optional&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputString&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;entityEncode&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tagsList&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;unzip&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;overwrite&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;aspect_ratios&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 193,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=intensiv|SPPS Karlsruhe Intensiv\n2=karlsruhe|SPPS Karlsruhe\n3=rastatt|SPPS Ötigheim/Rastatt\n4=pforzheim|SPPS Pforzheim\n5=rheinhausen|SPPS Rheinhausen-Oberhausen\n6=tagespflege|Tagespflege Etje&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname_old&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 182,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname_old&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_postalcode&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 190,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;PLZ&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_streetaddress&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 187,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Adresse&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 180,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Gültig bis&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Options für:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_basesalary_unittext&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=MONTH|Monat&lt;br /&gt;
2=YEAR|Jahr&lt;br /&gt;
3=HOUR|Stunde&lt;br /&gt;
4=WEEK|Woche&lt;br /&gt;
5=DAY|Tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_employmenttype&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=FULL_TIME|Vollzeit&lt;br /&gt;
2=PART_TIME|Teilzeit&lt;br /&gt;
3=CONTRACTOR|Vertrag&lt;br /&gt;
4=TEMPORARY|Zeitarbeit&lt;br /&gt;
5=INTERN|Internship (Trainee etc.)&lt;br /&gt;
6=VOLUNTEER|Volontariat&lt;br /&gt;
7=PER_DIEM|Per diem&lt;br /&gt;
8=OTHER|Andere&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_organizationname&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kann genutzt werden wenn man mehrere Organisationen hat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Job Fieldset Page&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Das Feld fasst die anderen Felder in eines zusammen. So kann man sie einfacher handeln.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 177,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeFieldsetPage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Daten für ein Jobposting&amp;quot;,&lt;br /&gt;
        &amp;quot;icon&amp;quot;: &amp;quot;wrench&amp;quot;,&lt;br /&gt;
        &amp;quot;template_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;parent_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterLoading&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;repeaterMaxItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;repeaterMinItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
            &amp;quot;job_description&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
            &amp;quot;job_link&amp;quot;,&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings. Wenn leer wird das Erstelldatum dieser Seite verwendet.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Empfohlen. Unbefristet für manche Berufsgruppen erlaubt (z.B. Bedienungen)&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_description&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Wenn leer wird diese Seite genutzt.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Templates Import ====&lt;br /&gt;
Import Daten (Zulässige Kind/Elternseiten von Hand nachtragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 53,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;jobs&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-user-circle-o title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;jobs&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 55,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: -1,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-users title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebote&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;images&amp;quot;,&lt;br /&gt;
            &amp;quot;files&amp;quot;,&lt;br /&gt;
            &amp;quot;menu&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;images&amp;quot;: [],&lt;br /&gt;
            &amp;quot;files&amp;quot;: [],&lt;br /&gt;
            &amp;quot;menu&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Template Jobs ===&lt;br /&gt;
Todo besser als Layout-Block&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// JOBLIST&lt;br /&gt;
$joblist = &amp;#039;&amp;#039;;&lt;br /&gt;
$jobs = pages(&amp;#039;template=job,sort=-published&amp;#039;);&lt;br /&gt;
foreach ($jobs as $item) {&lt;br /&gt;
  $joblist .= &amp;#039;&amp;lt;li class=&amp;quot;joblist-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#039;.$item-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$item-&amp;gt;title.&amp;#039; (&amp;#039;.$item-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title.&amp;#039;)&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
$joblist = &amp;#039;&amp;lt;ul class=&amp;quot;joblist&amp;quot;&amp;gt;&amp;#039;.$joblist.&amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Template Job ===&lt;br /&gt;
Benötigt im Admin Bereich nur das job Feld. In diesem sind alle anderen benötigten Felder bereits enthalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
include_once(&amp;#039;includes/SchemaHelper.php&amp;#039;);&lt;br /&gt;
$sh = new SchemaHelper;&lt;br /&gt;
$jsonld = $sh-&amp;gt;jsonldJobPosting($page);&lt;br /&gt;
&lt;br /&gt;
// BEWERBUNGSFORMULAR WENN GESÜNSCHT&lt;br /&gt;
$contact =  $forms-&amp;gt;render(&amp;#039;bewerbung&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
ob_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;apply&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?=$page-&amp;gt;title?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;job-description&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_description?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;Arbeitgeber&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;?=$page-&amp;gt;link?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Arbeitsort&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_streetaddress?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_postalcode?&amp;gt; &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_addresslocality?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php if ($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ - &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_unittext-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php elseif($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;unit-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy pt-20&amp;quot;&amp;gt;Art der Anstellung&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;pb-30&amp;quot;&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_employmenttype-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Bewerbungsmöglichkeit --&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;apply-form&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;Bewerbung&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&amp;lt;?= $contact ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- job ldjson --&amp;gt;&lt;br /&gt;
    &amp;lt;?=$jsonld?&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$content = ob_get_clean();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bewerbungsformular ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;required&amp;quot;: false,&lt;br /&gt;
    &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;roles&amp;quot;: {&lt;br /&gt;
        &amp;quot;form-submit&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;form-list&amp;quot;: [],&lt;br /&gt;
        &amp;quot;form-edit&amp;quot;: [],&lt;br /&gt;
        &amp;quot;form-delete&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-list&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-edit&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-delete&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-page&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-resend&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;flags&amp;quot;: 256,&lt;br /&gt;
    &amp;quot;pluginActions&amp;quot;: [],&lt;br /&gt;
    &amp;quot;framework&amp;quot;: &amp;quot;Uikit3&amp;quot;,&lt;br /&gt;
    &amp;quot;allowPreset&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;skipSessionKey&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;useCookies&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;partialEntryDays&amp;quot;: 14,&lt;br /&gt;
    &amp;quot;spamEntryDays&amp;quot;: 7,&lt;br /&gt;
    &amp;quot;submitText&amp;quot;: &amp;quot;Absenden&amp;quot;,&lt;br /&gt;
    &amp;quot;successMessage&amp;quot;: &amp;quot;Vielen Dank - Ihre Bewerbung wurde versendet.&amp;quot;,&lt;br /&gt;
    &amp;quot;errorMessage&amp;quot;: &amp;quot;Ein Fehler ist aufgetreten. Bitte überprüfen Sie Ihre Eingaben.&amp;quot;,&lt;br /&gt;
    &amp;quot;mobilePx&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frBasic_noLoad&amp;quot;: [],&lt;br /&gt;
    &amp;quot;frBasic_cssURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/basic/main.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frBasic_itemContent&amp;quot;: [&lt;br /&gt;
        &amp;quot;description&amp;quot;,&lt;br /&gt;
        &amp;quot;out&amp;quot;,&lt;br /&gt;
        &amp;quot;error&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;spamFlags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;listFields&amp;quot;: [],&lt;br /&gt;
    &amp;quot;entryDays&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;emailSubject&amp;quot;: &amp;quot;Bewerbungsformular auf salus-klinik.de&amp;quot;,&lt;br /&gt;
    &amp;quot;responderSubject&amp;quot;: &amp;quot;Auto-Response&amp;quot;,&lt;br /&gt;
    &amp;quot;saveFlags&amp;quot;: 35,&lt;br /&gt;
    &amp;quot;spamWords&amp;quot;: [],&lt;br /&gt;
    &amp;quot;honeypot&amp;quot;: &amp;quot;name_1&amp;quot;,&lt;br /&gt;
    &amp;quot;emailTo&amp;quot;: &amp;quot;post@stephanschlegel.de&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_noLoad&amp;quot;: [&lt;br /&gt;
        &amp;quot;framework&amp;quot;,&lt;br /&gt;
        &amp;quot;jquery&amp;quot;,&lt;br /&gt;
        &amp;quot;jqueryui&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;frUikit3_ukURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/uikit3/&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_css&amp;quot;: &amp;quot;uikit.min.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_horizontal&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_inlineErrorBelow&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_horizHeaderWidth&amp;quot;: 30,&lt;br /&gt;
    &amp;quot;frUikit3_buttonType&amp;quot;: &amp;quot;primary&amp;quot;,&lt;br /&gt;
    &amp;quot;children&amp;quot;: {&lt;br /&gt;
        &amp;quot;name_1&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: false,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;name_2&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;e_mail&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Email&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;E-Mail&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 250,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;telefon&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Telefon&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;bewerbungsunterlagen&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;FormBuilderFile&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Bewerbungsunterlagen&amp;quot;,&lt;br /&gt;
            &amp;quot;notes&amp;quot;: &amp;quot;Maximal 3 Dateien á 5MB&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: false,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;extensions&amp;quot;: &amp;quot;pdf doc docx xls xlsx gif jpg jpeg png&amp;quot;,&lt;br /&gt;
            &amp;quot;maxFiles&amp;quot;: 3,&lt;br /&gt;
            &amp;quot;maxFileSize&amp;quot;: 5242880&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Layout Block - Job-Liste ===&lt;br /&gt;
Beispiel Salus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
$sectionClasses = array($page-&amp;gt;_type);&lt;br /&gt;
$containerClasses = array(&amp;#039;ani section&amp;#039;);&lt;br /&gt;
if($page-&amp;gt;bg &amp;amp;&amp;amp; $page-&amp;gt;bg-&amp;gt;value) {&lt;br /&gt;
    $colorClassBorder = $page-&amp;gt;bg-&amp;gt;value;&lt;br /&gt;
    $colorClassContent = $page-&amp;gt;bg-&amp;gt;value;&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    $colorClassBorder = &amp;#039;bc1&amp;#039;;&lt;br /&gt;
    $colorClassContent = &amp;#039;bc1&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$out = &amp;#039;&amp;#039;;&lt;br /&gt;
$jobsMarkup = &amp;#039;&amp;#039;;&lt;br /&gt;
$jobsAccordion = new Box;&lt;br /&gt;
$jobs = pages(&amp;#039;template=job,sort=-published&amp;#039;);&lt;br /&gt;
foreach ($jobs as $item) {&lt;br /&gt;
&lt;br /&gt;
    $jobsMarkup .= &amp;#039;&lt;br /&gt;
      &amp;lt;li class=&amp;quot;bc1 joblist-item&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;a class=&amp;quot;uk-accordion-title uk-padding-small&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;#039;.$item-&amp;gt;title.&amp;#039;&lt;br /&gt;
        &amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;uk-accordion-content uk-padding-small nmt npt&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;#039;.$item-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title.&amp;#039;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
          &amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Arbeitsort:&amp;lt;/strong&amp;gt; &amp;#039;.$item-&amp;gt;job-&amp;gt;job_addresslocality.&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
          &amp;lt;strong&amp;gt;Art der Anstellung: &amp;lt;/strong&amp;gt;&amp;#039;.$item-&amp;gt;job-&amp;gt;job_employmenttype-&amp;gt;title.&amp;#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
          &amp;lt;p&amp;gt;&amp;lt;a class=&amp;quot;uk-button uk-button-primary&amp;quot; href=&amp;quot;&amp;#039;.$item-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;Zur Stellenbeschreibung&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$jobsAccordion-&amp;gt;addClasses(&amp;#039;accordion uk-accordion nmb&amp;#039;);&lt;br /&gt;
$jobsAccordion-&amp;gt;addAttributes(&amp;#039;uk-accordion=&amp;quot;&amp;quot;&amp;#039;); // i.e. active:0&lt;br /&gt;
$out .= $jobsAccordion-&amp;gt;wrap($jobsMarkup,&amp;#039;ul&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// RANDSPALTE?&lt;br /&gt;
$out = &amp;#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;uk-grid uk-grid-collapse uk-grid-match&amp;quot; uk-grid&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;uk-visible@m uk-width-1-5 &amp;#039;.$colorClassBorder.&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;uk-padding-small&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;uk-width-expand@m&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;uk-padding npt npb npr&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;#039;.renderHeadline($page).&amp;#039;&lt;br /&gt;
            &amp;#039;. $out .&amp;#039;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
//$out = renderContainer($page,$out,$containerClasses);&lt;br /&gt;
$out = renderSection($page,$out,$sectionClasses,array(&amp;#039;skipDefaultClasses&amp;#039;=&amp;gt;false));&lt;br /&gt;
return $out;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Funktionalität ===&lt;br /&gt;
==== SchemaHelper ====&lt;br /&gt;
Für Erzeugung der Strukturierten Daten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
/**&lt;br /&gt;
 * SchemaHelper&lt;br /&gt;
 * Class for structured data&lt;br /&gt;
 * V1.0&lt;br /&gt;
 */&lt;br /&gt;
// @todo outsource some of the nessecary types (i.e. place) in backend use&lt;br /&gt;
// fieldgroups for that maybe s.th. like $place = getFg(&amp;#039;schema_place&amp;#039;)&lt;br /&gt;
class SchemaHelper{&lt;br /&gt;
	// Load the requested schema from the schemas directory and register the class&lt;br /&gt;
	public function jsonldJobPosting ($p) {&lt;br /&gt;
		$jsonld = array();&lt;br /&gt;
		$sanitizer = wire(&amp;#039;sanitizer&amp;#039;);&lt;br /&gt;
		//set unset fields (for not mandatory fields)&lt;br /&gt;
		$p-&amp;gt;job-&amp;gt;job_validthrough = $p-&amp;gt;job-&amp;gt;job_validthrough ? : &amp;#039;&amp;#039;; // todo test&lt;br /&gt;
&lt;br /&gt;
		$jsonld[&amp;quot;@context&amp;quot;] = &amp;quot;http://schema.org/&amp;quot;;&lt;br /&gt;
		$jsonld[&amp;quot;@type&amp;quot;] = &amp;quot;JobPosting&amp;quot;;&lt;br /&gt;
		if($p-&amp;gt;job-&amp;gt;job_link) $jsonld[&amp;quot;url&amp;quot;] = $p-&amp;gt;job-&amp;gt;job_link;&lt;br /&gt;
		else $jsonld[&amp;quot;url&amp;quot;] = $sanitizer-&amp;gt;url($p-&amp;gt;httpUrl);&lt;br /&gt;
		$jsonld[&amp;quot;datePosted&amp;quot;] = !empty($p-&amp;gt;job-&amp;gt;job_dateposted) ? date(&amp;#039;Y-m-d&amp;#039;, $p-&amp;gt;job-&amp;gt;getUnformatted(&amp;#039;job_dateposted&amp;#039;) ) : date(&amp;#039;Y-m-d&amp;#039;, strtotime($p-&amp;gt;created));&lt;br /&gt;
		$jsonld[&amp;quot;validThrough&amp;quot;] = date(&amp;#039;Y-m-d&amp;#039;, $p-&amp;gt;job-&amp;gt;getUnformatted(&amp;#039;job_validthrough&amp;#039;) );&lt;br /&gt;
		$jsonld[&amp;quot;description&amp;quot;] = $sanitizer-&amp;gt;textarea($p-&amp;gt;job-&amp;gt;job_description);&lt;br /&gt;
		$jsonld[&amp;#039;hiringOrganization&amp;#039;] = array(&lt;br /&gt;
			&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;Organization&amp;quot;,&lt;br /&gt;
			&amp;quot;name&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title),&lt;br /&gt;
			&amp;quot;sameAs&amp;quot; =&amp;gt; $sanitizer-&amp;gt;url($p-&amp;gt;job-&amp;gt;job_link)&lt;br /&gt;
		);&lt;br /&gt;
		if($p-&amp;gt;job-&amp;gt;link2)$jsonld[&amp;#039;hiringOrganization&amp;#039;][&amp;#039;logo&amp;#039;] = $p-&amp;gt;job-&amp;gt;link2;&lt;br /&gt;
		$jsonld[&amp;#039;title&amp;#039;] = $sanitizer-&amp;gt;text($p-&amp;gt;title);&lt;br /&gt;
&lt;br /&gt;
		if($p-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $p-&amp;gt;job-&amp;gt;job_basesalary_maxvalue &amp;amp;&amp;amp; $p-&amp;gt;job-&amp;gt;job_basesalary_unittext){&lt;br /&gt;
			$jsonld[&amp;#039;baseSalary&amp;#039;] = array(&lt;br /&gt;
				&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;MonetaryAmount&amp;quot;,&lt;br /&gt;
				&amp;quot;currency&amp;quot; =&amp;gt; &amp;quot;EUR&amp;quot;,&lt;br /&gt;
				&amp;quot;value&amp;quot; =&amp;gt; array(&lt;br /&gt;
					&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;QuantitativeValue&amp;quot;,&lt;br /&gt;
					&amp;quot;minValue&amp;quot; =&amp;gt; $sanitizer-&amp;gt;float($p-&amp;gt;job-&amp;gt;job_basesalary_minvalue),&lt;br /&gt;
					&amp;quot;maxValue&amp;quot; =&amp;gt; $sanitizer-&amp;gt;float($p-&amp;gt;job-&amp;gt;job_basesalary_maxvalue),&lt;br /&gt;
					&amp;quot;unitText&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_basesalary_unittext-&amp;gt;value)&lt;br /&gt;
				)&lt;br /&gt;
			);&lt;br /&gt;
		}else if($p-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $p-&amp;gt;job-&amp;gt;job_basesalary_unittext){&lt;br /&gt;
			$jsonld[&amp;#039;baseSalary&amp;#039;] = array(&lt;br /&gt;
				&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;MonetaryAmount&amp;quot;,&lt;br /&gt;
				&amp;quot;currency&amp;quot; =&amp;gt; &amp;quot;EUR&amp;quot;,&lt;br /&gt;
				&amp;quot;value&amp;quot; =&amp;gt; array(&lt;br /&gt;
					&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;QuantitativeValue&amp;quot;,&lt;br /&gt;
					&amp;quot;value&amp;quot; =&amp;gt; $sanitizer-&amp;gt;float($p-&amp;gt;job-&amp;gt;job_basesalary_minvalue),&lt;br /&gt;
					&amp;quot;unitText&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_basesalary_unittext-&amp;gt;value)&lt;br /&gt;
				)&lt;br /&gt;
			);&lt;br /&gt;
		}&lt;br /&gt;
		$jsonld[&amp;#039;jobLocation&amp;#039;] = array(&lt;br /&gt;
			&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;Place&amp;quot;,&lt;br /&gt;
			&amp;quot;address&amp;quot; =&amp;gt; array(&lt;br /&gt;
				&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;PostalAddress&amp;quot;,&lt;br /&gt;
				&amp;quot;streetAddress&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_streetaddress),&lt;br /&gt;
				&amp;quot;addressLocality&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_addresslocality),&lt;br /&gt;
				&amp;quot;addressRegion&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_addressregion),&lt;br /&gt;
				&amp;quot;postalCode&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_postalcode),&lt;br /&gt;
				&amp;quot;addressCountry&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_addresscountry),&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
		// recommended properties&lt;br /&gt;
&lt;br /&gt;
		if($c = count($p-&amp;gt;job-&amp;gt;job_employmenttype)){&lt;br /&gt;
			$types = array();&lt;br /&gt;
			foreach($p-&amp;gt;job-&amp;gt;job_employmenttype as $type){&lt;br /&gt;
				$types[] = $sanitizer-&amp;gt;text($type-&amp;gt;value);&lt;br /&gt;
			}&lt;br /&gt;
			//var_dump($c);&lt;br /&gt;
			if($c &amp;gt; 1) $jsonld[&amp;#039;employmentType&amp;#039;] = $types;&lt;br /&gt;
			else $jsonld[&amp;#039;employmentType&amp;#039;] = $types[0];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//$out .= &amp;#039;&amp;lt;script type=&amp;quot;application/ld+json&amp;quot;&amp;gt;&amp;#039; . json_encode($jsonld) . &amp;#039;&amp;lt;/script&amp;gt;&amp;#039;;&lt;br /&gt;
		$out = &amp;#039;&amp;lt;script type=&amp;quot;application/ld+json&amp;quot;&amp;gt;&amp;#039; . json_encode($jsonld,JSON_PRETTY_PRINT) . &amp;#039;&amp;lt;/script&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		return $out;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26030</id>
		<title>ProcessWire - Job Template</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26030"/>
		<updated>2022-04-04T08:01:04Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* SchemaHelper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beispiel Setting für Jobs mit strukturierten Daten ==&lt;br /&gt;
Beispiel von SPPS&lt;br /&gt;
&lt;br /&gt;
=== Job Template ===&lt;br /&gt;
&lt;br /&gt;
==== Felder ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job_addresscountry&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 191,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Land&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addresslocality&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 188,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Ort&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addressregion&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 189,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Region&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_maxvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 185,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_minvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 184,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_unittext&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 186,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Bezahlung pro&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=MONTH|Monat\n2=YEAR|Jahr\n3=HOUR|Stunde\n4=WEEK|Woche\n5=DAY|Tag&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 179,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Datum&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_description&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 181,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeTextareaLanguage&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldCKEditor&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;rows&amp;quot;: 5,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterHannaCode&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;htmlOptions&amp;quot;: [&lt;br /&gt;
            2,&lt;br /&gt;
            4,&lt;br /&gt;
            16&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;langBlankInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;toolbar&amp;quot;: &amp;quot;Format, Styles, -, Bold, Italic, -, RemoveFormat\nNumberedList, BulletedList, -, Blockquote\nPWLink, Unlink, Anchor\nPWImage, Table, HorizontalRule, SpecialChar\nPasteText, PasteFromWord\nScayt, -, Sourcedialog\nJustifyCenter, JustifyLeft, JustifyRight&amp;quot;,&lt;br /&gt;
        &amp;quot;inlineMode&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useACF&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;usePurifier&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;formatTags&amp;quot;: &amp;quot;p;h1;h2;h3;h4;h5;h6;pre;address&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsCss&amp;quot;: &amp;quot;/site/templates/modules/InputfieldCKEditor/contents.css&amp;quot;,&lt;br /&gt;
        &amp;quot;stylesSet&amp;quot;: &amp;quot;customstyles:/site/templates/modules/InputfieldCKEditor/mystyles.js&amp;quot;,&lt;br /&gt;
        &amp;quot;extraPlugins&amp;quot;: [&lt;br /&gt;
            &amp;quot;pwimage&amp;quot;,&lt;br /&gt;
            &amp;quot;pwlink&amp;quot;,&lt;br /&gt;
            &amp;quot;sourcedialog&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;removePlugins&amp;quot;: &amp;quot;image,magicline&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;imageFields&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;toggles&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;extraAllowedContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsInlineCss&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;customOptions&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;plugin_sourcedialog&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_employmenttype&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 192,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Art der Anstellung&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=FULL_TIME|Vollzeit\n2=PART_TIME|Teilzeit\n3=CONTRACTOR|Vertrag\n4=TEMPORARY|Zeitarbeit\n5=INTERN|Internship (Trainee etc.)\n6=VOLUNTEER|Volontariat\n7=PER_DIEM|Per diem\n8=OTHER|Andere&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 178,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_link&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Link zum Jobangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeURL&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;noRelative&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowIDN&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowQuotes&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;addRoot&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 1024,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_logo&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 183,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_logo&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Logo&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeImage&amp;quot;,&lt;br /&gt;
        &amp;quot;fileSchema&amp;quot;: 270,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;extensions&amp;quot;: &amp;quot;gif jpg jpeg png&amp;quot;,&lt;br /&gt;
        &amp;quot;maxFiles&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputFormat&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;descriptionRows&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;useTags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;gridMode&amp;quot;: &amp;quot;grid&amp;quot;,&lt;br /&gt;
        &amp;quot;focusMode&amp;quot;: &amp;quot;on&amp;quot;,&lt;br /&gt;
        &amp;quot;resizeServer&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;clientQuality&amp;quot;: 90,&lt;br /&gt;
        &amp;quot;maxReject&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dimensionsByAspectRatio&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValuePage&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldImage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;optional&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputString&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;entityEncode&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tagsList&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;unzip&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;overwrite&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;aspect_ratios&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 193,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=intensiv|SPPS Karlsruhe Intensiv\n2=karlsruhe|SPPS Karlsruhe\n3=rastatt|SPPS Ötigheim/Rastatt\n4=pforzheim|SPPS Pforzheim\n5=rheinhausen|SPPS Rheinhausen-Oberhausen\n6=tagespflege|Tagespflege Etje&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname_old&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 182,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname_old&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_postalcode&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 190,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;PLZ&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_streetaddress&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 187,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Adresse&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 180,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Gültig bis&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Options für:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_basesalary_unittext&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=MONTH|Monat&lt;br /&gt;
2=YEAR|Jahr&lt;br /&gt;
3=HOUR|Stunde&lt;br /&gt;
4=WEEK|Woche&lt;br /&gt;
5=DAY|Tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_employmenttype&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=FULL_TIME|Vollzeit&lt;br /&gt;
2=PART_TIME|Teilzeit&lt;br /&gt;
3=CONTRACTOR|Vertrag&lt;br /&gt;
4=TEMPORARY|Zeitarbeit&lt;br /&gt;
5=INTERN|Internship (Trainee etc.)&lt;br /&gt;
6=VOLUNTEER|Volontariat&lt;br /&gt;
7=PER_DIEM|Per diem&lt;br /&gt;
8=OTHER|Andere&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_organizationname&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kann genutzt werden wenn man mehrere Organisationen hat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Job Fieldset Page&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Das Feld fasst die anderen Felder in eines zusammen. So kann man sie einfacher handeln.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 177,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeFieldsetPage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Daten für ein Jobposting&amp;quot;,&lt;br /&gt;
        &amp;quot;icon&amp;quot;: &amp;quot;wrench&amp;quot;,&lt;br /&gt;
        &amp;quot;template_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;parent_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterLoading&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;repeaterMaxItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;repeaterMinItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
            &amp;quot;job_description&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
            &amp;quot;job_link&amp;quot;,&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings. Wenn leer wird das Erstelldatum dieser Seite verwendet.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Empfohlen. Unbefristet für manche Berufsgruppen erlaubt (z.B. Bedienungen)&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_description&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Wenn leer wird diese Seite genutzt.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Templates Import ====&lt;br /&gt;
Import Daten (Zulässige Kind/Elternseiten von Hand nachtragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 53,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;jobs&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-user-circle-o title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;jobs&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 55,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: -1,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-users title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebote&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;images&amp;quot;,&lt;br /&gt;
            &amp;quot;files&amp;quot;,&lt;br /&gt;
            &amp;quot;menu&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;images&amp;quot;: [],&lt;br /&gt;
            &amp;quot;files&amp;quot;: [],&lt;br /&gt;
            &amp;quot;menu&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Template Jobs ===&lt;br /&gt;
Todo besser als Layout-Block&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// JOBLIST&lt;br /&gt;
$joblist = &amp;#039;&amp;#039;;&lt;br /&gt;
$jobs = pages(&amp;#039;template=job,sort=-published&amp;#039;);&lt;br /&gt;
foreach ($jobs as $item) {&lt;br /&gt;
  $joblist .= &amp;#039;&amp;lt;li class=&amp;quot;joblist-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#039;.$item-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$item-&amp;gt;title.&amp;#039; (&amp;#039;.$item-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title.&amp;#039;)&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
$joblist = &amp;#039;&amp;lt;ul class=&amp;quot;joblist&amp;quot;&amp;gt;&amp;#039;.$joblist.&amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Template Job ===&lt;br /&gt;
Benötigt im Admin Bereich nur das job Feld. In diesem sind alle anderen benötigten Felder bereits enthalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
include_once(&amp;#039;includes/SchemaHelper.php&amp;#039;);&lt;br /&gt;
$sh = new SchemaHelper;&lt;br /&gt;
$jsonld = $sh-&amp;gt;jsonldJobPosting($page);&lt;br /&gt;
&lt;br /&gt;
// BEWERBUNGSFORMULAR WENN GESÜNSCHT&lt;br /&gt;
$contact =  $forms-&amp;gt;render(&amp;#039;bewerbung&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
ob_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;apply&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?=$page-&amp;gt;title?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;job-description&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_description?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;Arbeitgeber&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;?=$page-&amp;gt;link?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Arbeitsort&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_streetaddress?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_postalcode?&amp;gt; &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_addresslocality?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php if ($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ - &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_unittext-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php elseif($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;unit-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy pt-20&amp;quot;&amp;gt;Art der Anstellung&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;pb-30&amp;quot;&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_employmenttype-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Bewerbungsmöglichkeit --&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;apply-form&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;Bewerbung&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&amp;lt;?= $contact ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- job ldjson --&amp;gt;&lt;br /&gt;
    &amp;lt;?=$jsonld?&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$content = ob_get_clean();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bewerbungsformular ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;required&amp;quot;: false,&lt;br /&gt;
    &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;roles&amp;quot;: {&lt;br /&gt;
        &amp;quot;form-submit&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;form-list&amp;quot;: [],&lt;br /&gt;
        &amp;quot;form-edit&amp;quot;: [],&lt;br /&gt;
        &amp;quot;form-delete&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-list&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-edit&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-delete&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-page&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-resend&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;flags&amp;quot;: 256,&lt;br /&gt;
    &amp;quot;pluginActions&amp;quot;: [],&lt;br /&gt;
    &amp;quot;framework&amp;quot;: &amp;quot;Uikit3&amp;quot;,&lt;br /&gt;
    &amp;quot;allowPreset&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;skipSessionKey&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;useCookies&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;partialEntryDays&amp;quot;: 14,&lt;br /&gt;
    &amp;quot;spamEntryDays&amp;quot;: 7,&lt;br /&gt;
    &amp;quot;submitText&amp;quot;: &amp;quot;Absenden&amp;quot;,&lt;br /&gt;
    &amp;quot;successMessage&amp;quot;: &amp;quot;Vielen Dank - Ihre Bewerbung wurde versendet.&amp;quot;,&lt;br /&gt;
    &amp;quot;errorMessage&amp;quot;: &amp;quot;Ein Fehler ist aufgetreten. Bitte überprüfen Sie Ihre Eingaben.&amp;quot;,&lt;br /&gt;
    &amp;quot;mobilePx&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frBasic_noLoad&amp;quot;: [],&lt;br /&gt;
    &amp;quot;frBasic_cssURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/basic/main.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frBasic_itemContent&amp;quot;: [&lt;br /&gt;
        &amp;quot;description&amp;quot;,&lt;br /&gt;
        &amp;quot;out&amp;quot;,&lt;br /&gt;
        &amp;quot;error&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;spamFlags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;listFields&amp;quot;: [],&lt;br /&gt;
    &amp;quot;entryDays&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;emailSubject&amp;quot;: &amp;quot;Bewerbungsformular auf salus-klinik.de&amp;quot;,&lt;br /&gt;
    &amp;quot;responderSubject&amp;quot;: &amp;quot;Auto-Response&amp;quot;,&lt;br /&gt;
    &amp;quot;saveFlags&amp;quot;: 35,&lt;br /&gt;
    &amp;quot;spamWords&amp;quot;: [],&lt;br /&gt;
    &amp;quot;honeypot&amp;quot;: &amp;quot;name_1&amp;quot;,&lt;br /&gt;
    &amp;quot;emailTo&amp;quot;: &amp;quot;post@stephanschlegel.de&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_noLoad&amp;quot;: [&lt;br /&gt;
        &amp;quot;framework&amp;quot;,&lt;br /&gt;
        &amp;quot;jquery&amp;quot;,&lt;br /&gt;
        &amp;quot;jqueryui&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;frUikit3_ukURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/uikit3/&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_css&amp;quot;: &amp;quot;uikit.min.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_horizontal&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_inlineErrorBelow&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_horizHeaderWidth&amp;quot;: 30,&lt;br /&gt;
    &amp;quot;frUikit3_buttonType&amp;quot;: &amp;quot;primary&amp;quot;,&lt;br /&gt;
    &amp;quot;children&amp;quot;: {&lt;br /&gt;
        &amp;quot;name_1&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: false,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;name_2&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;e_mail&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Email&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;E-Mail&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 250,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;telefon&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Telefon&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;bewerbungsunterlagen&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;FormBuilderFile&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Bewerbungsunterlagen&amp;quot;,&lt;br /&gt;
            &amp;quot;notes&amp;quot;: &amp;quot;Maximal 3 Dateien á 5MB&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: false,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;extensions&amp;quot;: &amp;quot;pdf doc docx xls xlsx gif jpg jpeg png&amp;quot;,&lt;br /&gt;
            &amp;quot;maxFiles&amp;quot;: 3,&lt;br /&gt;
            &amp;quot;maxFileSize&amp;quot;: 5242880&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Funktionalität ===&lt;br /&gt;
==== SchemaHelper ====&lt;br /&gt;
Für Erzeugung der Strukturierten Daten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
/**&lt;br /&gt;
 * SchemaHelper&lt;br /&gt;
 * Class for structured data&lt;br /&gt;
 * V1.0&lt;br /&gt;
 */&lt;br /&gt;
// @todo outsource some of the nessecary types (i.e. place) in backend use&lt;br /&gt;
// fieldgroups for that maybe s.th. like $place = getFg(&amp;#039;schema_place&amp;#039;)&lt;br /&gt;
class SchemaHelper{&lt;br /&gt;
	// Load the requested schema from the schemas directory and register the class&lt;br /&gt;
	public function jsonldJobPosting ($p) {&lt;br /&gt;
		$jsonld = array();&lt;br /&gt;
		$sanitizer = wire(&amp;#039;sanitizer&amp;#039;);&lt;br /&gt;
		//set unset fields (for not mandatory fields)&lt;br /&gt;
		$p-&amp;gt;job-&amp;gt;job_validthrough = $p-&amp;gt;job-&amp;gt;job_validthrough ? : &amp;#039;&amp;#039;; // todo test&lt;br /&gt;
&lt;br /&gt;
		$jsonld[&amp;quot;@context&amp;quot;] = &amp;quot;http://schema.org/&amp;quot;;&lt;br /&gt;
		$jsonld[&amp;quot;@type&amp;quot;] = &amp;quot;JobPosting&amp;quot;;&lt;br /&gt;
		if($p-&amp;gt;job-&amp;gt;job_link) $jsonld[&amp;quot;url&amp;quot;] = $p-&amp;gt;job-&amp;gt;job_link;&lt;br /&gt;
		else $jsonld[&amp;quot;url&amp;quot;] = $sanitizer-&amp;gt;url($p-&amp;gt;httpUrl);&lt;br /&gt;
		$jsonld[&amp;quot;datePosted&amp;quot;] = !empty($p-&amp;gt;job-&amp;gt;job_dateposted) ? date(&amp;#039;Y-m-d&amp;#039;, $p-&amp;gt;job-&amp;gt;getUnformatted(&amp;#039;job_dateposted&amp;#039;) ) : date(&amp;#039;Y-m-d&amp;#039;, strtotime($p-&amp;gt;created));&lt;br /&gt;
		$jsonld[&amp;quot;validThrough&amp;quot;] = date(&amp;#039;Y-m-d&amp;#039;, $p-&amp;gt;job-&amp;gt;getUnformatted(&amp;#039;job_validthrough&amp;#039;) );&lt;br /&gt;
		$jsonld[&amp;quot;description&amp;quot;] = $sanitizer-&amp;gt;textarea($p-&amp;gt;job-&amp;gt;job_description);&lt;br /&gt;
		$jsonld[&amp;#039;hiringOrganization&amp;#039;] = array(&lt;br /&gt;
			&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;Organization&amp;quot;,&lt;br /&gt;
			&amp;quot;name&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title),&lt;br /&gt;
			&amp;quot;sameAs&amp;quot; =&amp;gt; $sanitizer-&amp;gt;url($p-&amp;gt;job-&amp;gt;job_link)&lt;br /&gt;
		);&lt;br /&gt;
		if($p-&amp;gt;job-&amp;gt;link2)$jsonld[&amp;#039;hiringOrganization&amp;#039;][&amp;#039;logo&amp;#039;] = $p-&amp;gt;job-&amp;gt;link2;&lt;br /&gt;
		$jsonld[&amp;#039;title&amp;#039;] = $sanitizer-&amp;gt;text($p-&amp;gt;title);&lt;br /&gt;
&lt;br /&gt;
		if($p-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $p-&amp;gt;job-&amp;gt;job_basesalary_maxvalue &amp;amp;&amp;amp; $p-&amp;gt;job-&amp;gt;job_basesalary_unittext){&lt;br /&gt;
			$jsonld[&amp;#039;baseSalary&amp;#039;] = array(&lt;br /&gt;
				&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;MonetaryAmount&amp;quot;,&lt;br /&gt;
				&amp;quot;currency&amp;quot; =&amp;gt; &amp;quot;EUR&amp;quot;,&lt;br /&gt;
				&amp;quot;value&amp;quot; =&amp;gt; array(&lt;br /&gt;
					&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;QuantitativeValue&amp;quot;,&lt;br /&gt;
					&amp;quot;minValue&amp;quot; =&amp;gt; $sanitizer-&amp;gt;float($p-&amp;gt;job-&amp;gt;job_basesalary_minvalue),&lt;br /&gt;
					&amp;quot;maxValue&amp;quot; =&amp;gt; $sanitizer-&amp;gt;float($p-&amp;gt;job-&amp;gt;job_basesalary_maxvalue),&lt;br /&gt;
					&amp;quot;unitText&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_basesalary_unittext-&amp;gt;value)&lt;br /&gt;
				)&lt;br /&gt;
			);&lt;br /&gt;
		}else if($p-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $p-&amp;gt;job-&amp;gt;job_basesalary_unittext){&lt;br /&gt;
			$jsonld[&amp;#039;baseSalary&amp;#039;] = array(&lt;br /&gt;
				&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;MonetaryAmount&amp;quot;,&lt;br /&gt;
				&amp;quot;currency&amp;quot; =&amp;gt; &amp;quot;EUR&amp;quot;,&lt;br /&gt;
				&amp;quot;value&amp;quot; =&amp;gt; array(&lt;br /&gt;
					&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;QuantitativeValue&amp;quot;,&lt;br /&gt;
					&amp;quot;value&amp;quot; =&amp;gt; $sanitizer-&amp;gt;float($p-&amp;gt;job-&amp;gt;job_basesalary_minvalue),&lt;br /&gt;
					&amp;quot;unitText&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_basesalary_unittext-&amp;gt;value)&lt;br /&gt;
				)&lt;br /&gt;
			);&lt;br /&gt;
		}&lt;br /&gt;
		$jsonld[&amp;#039;jobLocation&amp;#039;] = array(&lt;br /&gt;
			&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;Place&amp;quot;,&lt;br /&gt;
			&amp;quot;address&amp;quot; =&amp;gt; array(&lt;br /&gt;
				&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;PostalAddress&amp;quot;,&lt;br /&gt;
				&amp;quot;streetAddress&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_streetaddress),&lt;br /&gt;
				&amp;quot;addressLocality&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_addresslocality),&lt;br /&gt;
				&amp;quot;addressRegion&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_addressregion),&lt;br /&gt;
				&amp;quot;postalCode&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_postalcode),&lt;br /&gt;
				&amp;quot;addressCountry&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;job-&amp;gt;job_addresscountry),&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
		// recommended properties&lt;br /&gt;
&lt;br /&gt;
		if($c = count($p-&amp;gt;job-&amp;gt;job_employmenttype)){&lt;br /&gt;
			$types = array();&lt;br /&gt;
			foreach($p-&amp;gt;job-&amp;gt;job_employmenttype as $type){&lt;br /&gt;
				$types[] = $sanitizer-&amp;gt;text($type-&amp;gt;value);&lt;br /&gt;
			}&lt;br /&gt;
			//var_dump($c);&lt;br /&gt;
			if($c &amp;gt; 1) $jsonld[&amp;#039;employmentType&amp;#039;] = $types;&lt;br /&gt;
			else $jsonld[&amp;#039;employmentType&amp;#039;] = $types[0];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//$out .= &amp;#039;&amp;lt;script type=&amp;quot;application/ld+json&amp;quot;&amp;gt;&amp;#039; . json_encode($jsonld) . &amp;#039;&amp;lt;/script&amp;gt;&amp;#039;;&lt;br /&gt;
		$out = &amp;#039;&amp;lt;script type=&amp;quot;application/ld+json&amp;quot;&amp;gt;&amp;#039; . json_encode($jsonld,JSON_PRETTY_PRINT) . &amp;#039;&amp;lt;/script&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		return $out;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26029</id>
		<title>ProcessWire - Job Template</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26029"/>
		<updated>2022-04-04T07:52:36Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Funktionalität */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beispiel Setting für Jobs mit strukturierten Daten ==&lt;br /&gt;
Beispiel von SPPS&lt;br /&gt;
&lt;br /&gt;
=== Job Template ===&lt;br /&gt;
&lt;br /&gt;
==== Felder ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job_addresscountry&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 191,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Land&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addresslocality&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 188,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Ort&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addressregion&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 189,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Region&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_maxvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 185,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_minvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 184,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_unittext&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 186,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Bezahlung pro&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=MONTH|Monat\n2=YEAR|Jahr\n3=HOUR|Stunde\n4=WEEK|Woche\n5=DAY|Tag&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 179,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Datum&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_description&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 181,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeTextareaLanguage&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldCKEditor&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;rows&amp;quot;: 5,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterHannaCode&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;htmlOptions&amp;quot;: [&lt;br /&gt;
            2,&lt;br /&gt;
            4,&lt;br /&gt;
            16&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;langBlankInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;toolbar&amp;quot;: &amp;quot;Format, Styles, -, Bold, Italic, -, RemoveFormat\nNumberedList, BulletedList, -, Blockquote\nPWLink, Unlink, Anchor\nPWImage, Table, HorizontalRule, SpecialChar\nPasteText, PasteFromWord\nScayt, -, Sourcedialog\nJustifyCenter, JustifyLeft, JustifyRight&amp;quot;,&lt;br /&gt;
        &amp;quot;inlineMode&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useACF&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;usePurifier&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;formatTags&amp;quot;: &amp;quot;p;h1;h2;h3;h4;h5;h6;pre;address&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsCss&amp;quot;: &amp;quot;/site/templates/modules/InputfieldCKEditor/contents.css&amp;quot;,&lt;br /&gt;
        &amp;quot;stylesSet&amp;quot;: &amp;quot;customstyles:/site/templates/modules/InputfieldCKEditor/mystyles.js&amp;quot;,&lt;br /&gt;
        &amp;quot;extraPlugins&amp;quot;: [&lt;br /&gt;
            &amp;quot;pwimage&amp;quot;,&lt;br /&gt;
            &amp;quot;pwlink&amp;quot;,&lt;br /&gt;
            &amp;quot;sourcedialog&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;removePlugins&amp;quot;: &amp;quot;image,magicline&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;imageFields&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;toggles&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;extraAllowedContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsInlineCss&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;customOptions&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;plugin_sourcedialog&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_employmenttype&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 192,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Art der Anstellung&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=FULL_TIME|Vollzeit\n2=PART_TIME|Teilzeit\n3=CONTRACTOR|Vertrag\n4=TEMPORARY|Zeitarbeit\n5=INTERN|Internship (Trainee etc.)\n6=VOLUNTEER|Volontariat\n7=PER_DIEM|Per diem\n8=OTHER|Andere&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 178,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_link&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Link zum Jobangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeURL&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;noRelative&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowIDN&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowQuotes&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;addRoot&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 1024,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_logo&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 183,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_logo&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Logo&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeImage&amp;quot;,&lt;br /&gt;
        &amp;quot;fileSchema&amp;quot;: 270,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;extensions&amp;quot;: &amp;quot;gif jpg jpeg png&amp;quot;,&lt;br /&gt;
        &amp;quot;maxFiles&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputFormat&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;descriptionRows&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;useTags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;gridMode&amp;quot;: &amp;quot;grid&amp;quot;,&lt;br /&gt;
        &amp;quot;focusMode&amp;quot;: &amp;quot;on&amp;quot;,&lt;br /&gt;
        &amp;quot;resizeServer&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;clientQuality&amp;quot;: 90,&lt;br /&gt;
        &amp;quot;maxReject&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dimensionsByAspectRatio&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValuePage&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldImage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;optional&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputString&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;entityEncode&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tagsList&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;unzip&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;overwrite&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;aspect_ratios&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 193,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=intensiv|SPPS Karlsruhe Intensiv\n2=karlsruhe|SPPS Karlsruhe\n3=rastatt|SPPS Ötigheim/Rastatt\n4=pforzheim|SPPS Pforzheim\n5=rheinhausen|SPPS Rheinhausen-Oberhausen\n6=tagespflege|Tagespflege Etje&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname_old&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 182,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname_old&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_postalcode&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 190,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;PLZ&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_streetaddress&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 187,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Adresse&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 180,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Gültig bis&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Options für:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_basesalary_unittext&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=MONTH|Monat&lt;br /&gt;
2=YEAR|Jahr&lt;br /&gt;
3=HOUR|Stunde&lt;br /&gt;
4=WEEK|Woche&lt;br /&gt;
5=DAY|Tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_employmenttype&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=FULL_TIME|Vollzeit&lt;br /&gt;
2=PART_TIME|Teilzeit&lt;br /&gt;
3=CONTRACTOR|Vertrag&lt;br /&gt;
4=TEMPORARY|Zeitarbeit&lt;br /&gt;
5=INTERN|Internship (Trainee etc.)&lt;br /&gt;
6=VOLUNTEER|Volontariat&lt;br /&gt;
7=PER_DIEM|Per diem&lt;br /&gt;
8=OTHER|Andere&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_organizationname&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kann genutzt werden wenn man mehrere Organisationen hat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Job Fieldset Page&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Das Feld fasst die anderen Felder in eines zusammen. So kann man sie einfacher handeln.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 177,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeFieldsetPage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Daten für ein Jobposting&amp;quot;,&lt;br /&gt;
        &amp;quot;icon&amp;quot;: &amp;quot;wrench&amp;quot;,&lt;br /&gt;
        &amp;quot;template_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;parent_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterLoading&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;repeaterMaxItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;repeaterMinItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
            &amp;quot;job_description&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
            &amp;quot;job_link&amp;quot;,&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings. Wenn leer wird das Erstelldatum dieser Seite verwendet.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Empfohlen. Unbefristet für manche Berufsgruppen erlaubt (z.B. Bedienungen)&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_description&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Wenn leer wird diese Seite genutzt.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Templates Import ====&lt;br /&gt;
Import Daten (Zulässige Kind/Elternseiten von Hand nachtragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 53,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;jobs&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-user-circle-o title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;jobs&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 55,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: -1,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-users title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebote&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;images&amp;quot;,&lt;br /&gt;
            &amp;quot;files&amp;quot;,&lt;br /&gt;
            &amp;quot;menu&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;images&amp;quot;: [],&lt;br /&gt;
            &amp;quot;files&amp;quot;: [],&lt;br /&gt;
            &amp;quot;menu&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Template Jobs ===&lt;br /&gt;
Todo besser als Layout-Block&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// JOBLIST&lt;br /&gt;
$joblist = &amp;#039;&amp;#039;;&lt;br /&gt;
$jobs = pages(&amp;#039;template=job,sort=-published&amp;#039;);&lt;br /&gt;
foreach ($jobs as $item) {&lt;br /&gt;
  $joblist .= &amp;#039;&amp;lt;li class=&amp;quot;joblist-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#039;.$item-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$item-&amp;gt;title.&amp;#039; (&amp;#039;.$item-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title.&amp;#039;)&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
$joblist = &amp;#039;&amp;lt;ul class=&amp;quot;joblist&amp;quot;&amp;gt;&amp;#039;.$joblist.&amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Template Job ===&lt;br /&gt;
Benötigt im Admin Bereich nur das job Feld. In diesem sind alle anderen benötigten Felder bereits enthalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
include_once(&amp;#039;includes/SchemaHelper.php&amp;#039;);&lt;br /&gt;
$sh = new SchemaHelper;&lt;br /&gt;
$jsonld = $sh-&amp;gt;jsonldJobPosting($page);&lt;br /&gt;
&lt;br /&gt;
// BEWERBUNGSFORMULAR WENN GESÜNSCHT&lt;br /&gt;
$contact =  $forms-&amp;gt;render(&amp;#039;bewerbung&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
ob_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;apply&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?=$page-&amp;gt;title?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;job-description&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_description?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;Arbeitgeber&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;?=$page-&amp;gt;link?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Arbeitsort&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_streetaddress?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_postalcode?&amp;gt; &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_addresslocality?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php if ($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ - &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_unittext-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php elseif($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;unit-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy pt-20&amp;quot;&amp;gt;Art der Anstellung&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;pb-30&amp;quot;&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_employmenttype-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Bewerbungsmöglichkeit --&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;apply-form&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;Bewerbung&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&amp;lt;?= $contact ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- job ldjson --&amp;gt;&lt;br /&gt;
    &amp;lt;?=$jsonld?&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$content = ob_get_clean();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bewerbungsformular ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;required&amp;quot;: false,&lt;br /&gt;
    &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;roles&amp;quot;: {&lt;br /&gt;
        &amp;quot;form-submit&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;form-list&amp;quot;: [],&lt;br /&gt;
        &amp;quot;form-edit&amp;quot;: [],&lt;br /&gt;
        &amp;quot;form-delete&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-list&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-edit&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-delete&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-page&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-resend&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;flags&amp;quot;: 256,&lt;br /&gt;
    &amp;quot;pluginActions&amp;quot;: [],&lt;br /&gt;
    &amp;quot;framework&amp;quot;: &amp;quot;Uikit3&amp;quot;,&lt;br /&gt;
    &amp;quot;allowPreset&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;skipSessionKey&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;useCookies&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;partialEntryDays&amp;quot;: 14,&lt;br /&gt;
    &amp;quot;spamEntryDays&amp;quot;: 7,&lt;br /&gt;
    &amp;quot;submitText&amp;quot;: &amp;quot;Absenden&amp;quot;,&lt;br /&gt;
    &amp;quot;successMessage&amp;quot;: &amp;quot;Vielen Dank - Ihre Bewerbung wurde versendet.&amp;quot;,&lt;br /&gt;
    &amp;quot;errorMessage&amp;quot;: &amp;quot;Ein Fehler ist aufgetreten. Bitte überprüfen Sie Ihre Eingaben.&amp;quot;,&lt;br /&gt;
    &amp;quot;mobilePx&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frBasic_noLoad&amp;quot;: [],&lt;br /&gt;
    &amp;quot;frBasic_cssURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/basic/main.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frBasic_itemContent&amp;quot;: [&lt;br /&gt;
        &amp;quot;description&amp;quot;,&lt;br /&gt;
        &amp;quot;out&amp;quot;,&lt;br /&gt;
        &amp;quot;error&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;spamFlags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;listFields&amp;quot;: [],&lt;br /&gt;
    &amp;quot;entryDays&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;emailSubject&amp;quot;: &amp;quot;Bewerbungsformular auf salus-klinik.de&amp;quot;,&lt;br /&gt;
    &amp;quot;responderSubject&amp;quot;: &amp;quot;Auto-Response&amp;quot;,&lt;br /&gt;
    &amp;quot;saveFlags&amp;quot;: 35,&lt;br /&gt;
    &amp;quot;spamWords&amp;quot;: [],&lt;br /&gt;
    &amp;quot;honeypot&amp;quot;: &amp;quot;name_1&amp;quot;,&lt;br /&gt;
    &amp;quot;emailTo&amp;quot;: &amp;quot;post@stephanschlegel.de&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_noLoad&amp;quot;: [&lt;br /&gt;
        &amp;quot;framework&amp;quot;,&lt;br /&gt;
        &amp;quot;jquery&amp;quot;,&lt;br /&gt;
        &amp;quot;jqueryui&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;frUikit3_ukURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/uikit3/&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_css&amp;quot;: &amp;quot;uikit.min.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_horizontal&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_inlineErrorBelow&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit3_horizHeaderWidth&amp;quot;: 30,&lt;br /&gt;
    &amp;quot;frUikit3_buttonType&amp;quot;: &amp;quot;primary&amp;quot;,&lt;br /&gt;
    &amp;quot;children&amp;quot;: {&lt;br /&gt;
        &amp;quot;name_1&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: false,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;name_2&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;e_mail&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Email&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;E-Mail&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 250,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;telefon&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Telefon&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;showCount&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 0&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;bewerbungsunterlagen&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;FormBuilderFile&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Bewerbungsunterlagen&amp;quot;,&lt;br /&gt;
            &amp;quot;notes&amp;quot;: &amp;quot;Maximal 3 Dateien á 5MB&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: false,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;extensions&amp;quot;: &amp;quot;pdf doc docx xls xlsx gif jpg jpeg png&amp;quot;,&lt;br /&gt;
            &amp;quot;maxFiles&amp;quot;: 3,&lt;br /&gt;
            &amp;quot;maxFileSize&amp;quot;: 5242880&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Funktionalität ===&lt;br /&gt;
==== SchemaHelper ====&lt;br /&gt;
Für Erzeugung der Strukturierten Daten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26028</id>
		<title>ProcessWire - Job Template</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26028"/>
		<updated>2022-04-04T07:04:28Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Templates Import */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beispiel Setting für Jobs mit strukturierten Daten ==&lt;br /&gt;
Beispiel von SPPS&lt;br /&gt;
&lt;br /&gt;
=== Job Template ===&lt;br /&gt;
&lt;br /&gt;
==== Felder ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job_addresscountry&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 191,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Land&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addresslocality&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 188,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Ort&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addressregion&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 189,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Region&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_maxvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 185,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_minvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 184,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_unittext&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 186,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Bezahlung pro&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=MONTH|Monat\n2=YEAR|Jahr\n3=HOUR|Stunde\n4=WEEK|Woche\n5=DAY|Tag&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 179,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Datum&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_description&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 181,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeTextareaLanguage&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldCKEditor&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;rows&amp;quot;: 5,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterHannaCode&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;htmlOptions&amp;quot;: [&lt;br /&gt;
            2,&lt;br /&gt;
            4,&lt;br /&gt;
            16&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;langBlankInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;toolbar&amp;quot;: &amp;quot;Format, Styles, -, Bold, Italic, -, RemoveFormat\nNumberedList, BulletedList, -, Blockquote\nPWLink, Unlink, Anchor\nPWImage, Table, HorizontalRule, SpecialChar\nPasteText, PasteFromWord\nScayt, -, Sourcedialog\nJustifyCenter, JustifyLeft, JustifyRight&amp;quot;,&lt;br /&gt;
        &amp;quot;inlineMode&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useACF&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;usePurifier&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;formatTags&amp;quot;: &amp;quot;p;h1;h2;h3;h4;h5;h6;pre;address&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsCss&amp;quot;: &amp;quot;/site/templates/modules/InputfieldCKEditor/contents.css&amp;quot;,&lt;br /&gt;
        &amp;quot;stylesSet&amp;quot;: &amp;quot;customstyles:/site/templates/modules/InputfieldCKEditor/mystyles.js&amp;quot;,&lt;br /&gt;
        &amp;quot;extraPlugins&amp;quot;: [&lt;br /&gt;
            &amp;quot;pwimage&amp;quot;,&lt;br /&gt;
            &amp;quot;pwlink&amp;quot;,&lt;br /&gt;
            &amp;quot;sourcedialog&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;removePlugins&amp;quot;: &amp;quot;image,magicline&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;imageFields&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;toggles&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;extraAllowedContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsInlineCss&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;customOptions&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;plugin_sourcedialog&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_employmenttype&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 192,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Art der Anstellung&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=FULL_TIME|Vollzeit\n2=PART_TIME|Teilzeit\n3=CONTRACTOR|Vertrag\n4=TEMPORARY|Zeitarbeit\n5=INTERN|Internship (Trainee etc.)\n6=VOLUNTEER|Volontariat\n7=PER_DIEM|Per diem\n8=OTHER|Andere&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 178,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_link&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Link zum Jobangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeURL&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;noRelative&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowIDN&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowQuotes&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;addRoot&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 1024,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_logo&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 183,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_logo&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Logo&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeImage&amp;quot;,&lt;br /&gt;
        &amp;quot;fileSchema&amp;quot;: 270,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;extensions&amp;quot;: &amp;quot;gif jpg jpeg png&amp;quot;,&lt;br /&gt;
        &amp;quot;maxFiles&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputFormat&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;descriptionRows&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;useTags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;gridMode&amp;quot;: &amp;quot;grid&amp;quot;,&lt;br /&gt;
        &amp;quot;focusMode&amp;quot;: &amp;quot;on&amp;quot;,&lt;br /&gt;
        &amp;quot;resizeServer&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;clientQuality&amp;quot;: 90,&lt;br /&gt;
        &amp;quot;maxReject&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dimensionsByAspectRatio&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValuePage&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldImage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;optional&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputString&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;entityEncode&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tagsList&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;unzip&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;overwrite&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;aspect_ratios&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 193,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=intensiv|SPPS Karlsruhe Intensiv\n2=karlsruhe|SPPS Karlsruhe\n3=rastatt|SPPS Ötigheim/Rastatt\n4=pforzheim|SPPS Pforzheim\n5=rheinhausen|SPPS Rheinhausen-Oberhausen\n6=tagespflege|Tagespflege Etje&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname_old&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 182,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname_old&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_postalcode&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 190,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;PLZ&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_streetaddress&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 187,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Adresse&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 180,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Gültig bis&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Options für:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_basesalary_unittext&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=MONTH|Monat&lt;br /&gt;
2=YEAR|Jahr&lt;br /&gt;
3=HOUR|Stunde&lt;br /&gt;
4=WEEK|Woche&lt;br /&gt;
5=DAY|Tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_employmenttype&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=FULL_TIME|Vollzeit&lt;br /&gt;
2=PART_TIME|Teilzeit&lt;br /&gt;
3=CONTRACTOR|Vertrag&lt;br /&gt;
4=TEMPORARY|Zeitarbeit&lt;br /&gt;
5=INTERN|Internship (Trainee etc.)&lt;br /&gt;
6=VOLUNTEER|Volontariat&lt;br /&gt;
7=PER_DIEM|Per diem&lt;br /&gt;
8=OTHER|Andere&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_organizationname&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kann genutzt werden wenn man mehrere Organisationen hat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Job Fieldset Page&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Das Feld fasst die anderen Felder in eines zusammen. So kann man sie einfacher handeln.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 177,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeFieldsetPage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Daten für ein Jobposting&amp;quot;,&lt;br /&gt;
        &amp;quot;icon&amp;quot;: &amp;quot;wrench&amp;quot;,&lt;br /&gt;
        &amp;quot;template_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;parent_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterLoading&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;repeaterMaxItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;repeaterMinItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
            &amp;quot;job_description&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
            &amp;quot;job_link&amp;quot;,&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings. Wenn leer wird das Erstelldatum dieser Seite verwendet.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Empfohlen. Unbefristet für manche Berufsgruppen erlaubt (z.B. Bedienungen)&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_description&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Wenn leer wird diese Seite genutzt.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Templates Import ====&lt;br /&gt;
Import Daten (Zulässige Kind/Elternseiten von Hand nachtragen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 53,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;jobs&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-user-circle-o title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;jobs&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 55,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: -1,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-users title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebote&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;images&amp;quot;,&lt;br /&gt;
            &amp;quot;files&amp;quot;,&lt;br /&gt;
            &amp;quot;menu&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;images&amp;quot;: [],&lt;br /&gt;
            &amp;quot;files&amp;quot;: [],&lt;br /&gt;
            &amp;quot;menu&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Template Jobs ===&lt;br /&gt;
Todo besser als Layout-Block&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// JOBLIST&lt;br /&gt;
$joblist = &amp;#039;&amp;#039;;&lt;br /&gt;
$jobs = pages(&amp;#039;template=job,sort=-published&amp;#039;);&lt;br /&gt;
foreach ($jobs as $item) {&lt;br /&gt;
  $joblist .= &amp;#039;&amp;lt;li class=&amp;quot;joblist-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#039;.$item-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$item-&amp;gt;title.&amp;#039; (&amp;#039;.$item-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title.&amp;#039;)&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
$joblist = &amp;#039;&amp;lt;ul class=&amp;quot;joblist&amp;quot;&amp;gt;&amp;#039;.$joblist.&amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Template Job ===&lt;br /&gt;
Benötigt im Admin Bereich nur das job Feld. In diesem sind alle anderen benötigten Felder bereits enthalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
include_once(&amp;#039;includes/SchemaHelper.php&amp;#039;);&lt;br /&gt;
$sh = new SchemaHelper;&lt;br /&gt;
$jsonld = $sh-&amp;gt;jsonldJobPosting($page);&lt;br /&gt;
&lt;br /&gt;
// BEWERBUNGSFORMULAR WENN GESÜNSCHT&lt;br /&gt;
$contact =  $forms-&amp;gt;render(&amp;#039;bewerbung&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
ob_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;apply&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?=$page-&amp;gt;title?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;job-description&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_description?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;Arbeitgeber&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;?=$page-&amp;gt;link?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Arbeitsort&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_streetaddress?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_postalcode?&amp;gt; &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_addresslocality?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php if ($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ - &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_unittext-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php elseif($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;unit-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy pt-20&amp;quot;&amp;gt;Art der Anstellung&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;pb-30&amp;quot;&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_employmenttype-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Bewerbungsmöglichkeit --&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;apply-form&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;Bewerbung&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&amp;lt;?= $contact ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- job ldjson --&amp;gt;&lt;br /&gt;
    &amp;lt;?=$jsonld?&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$content = ob_get_clean();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funktionalität ===&lt;br /&gt;
==== SchemaHelper ====&lt;br /&gt;
Für Erzeugung der Strukturierten Daten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26027</id>
		<title>ProcessWire - Job Template</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26027"/>
		<updated>2022-04-04T07:02:13Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Templates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beispiel Setting für Jobs mit strukturierten Daten ==&lt;br /&gt;
Beispiel von SPPS&lt;br /&gt;
&lt;br /&gt;
=== Job Template ===&lt;br /&gt;
&lt;br /&gt;
==== Felder ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job_addresscountry&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 191,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Land&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addresslocality&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 188,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Ort&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addressregion&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 189,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Region&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_maxvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 185,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_minvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 184,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_unittext&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 186,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Bezahlung pro&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=MONTH|Monat\n2=YEAR|Jahr\n3=HOUR|Stunde\n4=WEEK|Woche\n5=DAY|Tag&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 179,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Datum&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_description&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 181,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeTextareaLanguage&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldCKEditor&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;rows&amp;quot;: 5,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterHannaCode&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;htmlOptions&amp;quot;: [&lt;br /&gt;
            2,&lt;br /&gt;
            4,&lt;br /&gt;
            16&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;langBlankInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;toolbar&amp;quot;: &amp;quot;Format, Styles, -, Bold, Italic, -, RemoveFormat\nNumberedList, BulletedList, -, Blockquote\nPWLink, Unlink, Anchor\nPWImage, Table, HorizontalRule, SpecialChar\nPasteText, PasteFromWord\nScayt, -, Sourcedialog\nJustifyCenter, JustifyLeft, JustifyRight&amp;quot;,&lt;br /&gt;
        &amp;quot;inlineMode&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useACF&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;usePurifier&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;formatTags&amp;quot;: &amp;quot;p;h1;h2;h3;h4;h5;h6;pre;address&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsCss&amp;quot;: &amp;quot;/site/templates/modules/InputfieldCKEditor/contents.css&amp;quot;,&lt;br /&gt;
        &amp;quot;stylesSet&amp;quot;: &amp;quot;customstyles:/site/templates/modules/InputfieldCKEditor/mystyles.js&amp;quot;,&lt;br /&gt;
        &amp;quot;extraPlugins&amp;quot;: [&lt;br /&gt;
            &amp;quot;pwimage&amp;quot;,&lt;br /&gt;
            &amp;quot;pwlink&amp;quot;,&lt;br /&gt;
            &amp;quot;sourcedialog&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;removePlugins&amp;quot;: &amp;quot;image,magicline&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;imageFields&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;toggles&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;extraAllowedContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsInlineCss&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;customOptions&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;plugin_sourcedialog&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_employmenttype&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 192,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Art der Anstellung&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=FULL_TIME|Vollzeit\n2=PART_TIME|Teilzeit\n3=CONTRACTOR|Vertrag\n4=TEMPORARY|Zeitarbeit\n5=INTERN|Internship (Trainee etc.)\n6=VOLUNTEER|Volontariat\n7=PER_DIEM|Per diem\n8=OTHER|Andere&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 178,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_link&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Link zum Jobangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeURL&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;noRelative&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowIDN&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowQuotes&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;addRoot&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 1024,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_logo&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 183,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_logo&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Logo&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeImage&amp;quot;,&lt;br /&gt;
        &amp;quot;fileSchema&amp;quot;: 270,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;extensions&amp;quot;: &amp;quot;gif jpg jpeg png&amp;quot;,&lt;br /&gt;
        &amp;quot;maxFiles&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputFormat&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;descriptionRows&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;useTags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;gridMode&amp;quot;: &amp;quot;grid&amp;quot;,&lt;br /&gt;
        &amp;quot;focusMode&amp;quot;: &amp;quot;on&amp;quot;,&lt;br /&gt;
        &amp;quot;resizeServer&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;clientQuality&amp;quot;: 90,&lt;br /&gt;
        &amp;quot;maxReject&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dimensionsByAspectRatio&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValuePage&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldImage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;optional&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputString&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;entityEncode&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tagsList&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;unzip&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;overwrite&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;aspect_ratios&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 193,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=intensiv|SPPS Karlsruhe Intensiv\n2=karlsruhe|SPPS Karlsruhe\n3=rastatt|SPPS Ötigheim/Rastatt\n4=pforzheim|SPPS Pforzheim\n5=rheinhausen|SPPS Rheinhausen-Oberhausen\n6=tagespflege|Tagespflege Etje&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname_old&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 182,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname_old&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_postalcode&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 190,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;PLZ&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_streetaddress&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 187,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Adresse&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 180,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Gültig bis&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Options für:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_basesalary_unittext&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=MONTH|Monat&lt;br /&gt;
2=YEAR|Jahr&lt;br /&gt;
3=HOUR|Stunde&lt;br /&gt;
4=WEEK|Woche&lt;br /&gt;
5=DAY|Tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_employmenttype&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=FULL_TIME|Vollzeit&lt;br /&gt;
2=PART_TIME|Teilzeit&lt;br /&gt;
3=CONTRACTOR|Vertrag&lt;br /&gt;
4=TEMPORARY|Zeitarbeit&lt;br /&gt;
5=INTERN|Internship (Trainee etc.)&lt;br /&gt;
6=VOLUNTEER|Volontariat&lt;br /&gt;
7=PER_DIEM|Per diem&lt;br /&gt;
8=OTHER|Andere&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_organizationname&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kann genutzt werden wenn man mehrere Organisationen hat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Job Fieldset Page&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Das Feld fasst die anderen Felder in eines zusammen. So kann man sie einfacher handeln.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 177,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeFieldsetPage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Daten für ein Jobposting&amp;quot;,&lt;br /&gt;
        &amp;quot;icon&amp;quot;: &amp;quot;wrench&amp;quot;,&lt;br /&gt;
        &amp;quot;template_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;parent_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterLoading&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;repeaterMaxItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;repeaterMinItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
            &amp;quot;job_description&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
            &amp;quot;job_link&amp;quot;,&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings. Wenn leer wird das Erstelldatum dieser Seite verwendet.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Empfohlen. Unbefristet für manche Berufsgruppen erlaubt (z.B. Bedienungen)&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_description&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Wenn leer wird diese Seite genutzt.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Templates Import ====&lt;br /&gt;
Import Daten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 53,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;jobs&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-user-circle-o title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;jobs&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 55,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: -1,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-users title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebote&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;images&amp;quot;,&lt;br /&gt;
            &amp;quot;files&amp;quot;,&lt;br /&gt;
            &amp;quot;menu&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;images&amp;quot;: [],&lt;br /&gt;
            &amp;quot;files&amp;quot;: [],&lt;br /&gt;
            &amp;quot;menu&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Template Jobs ===&lt;br /&gt;
Todo besser als Layout-Block&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// JOBLIST&lt;br /&gt;
$joblist = &amp;#039;&amp;#039;;&lt;br /&gt;
$jobs = pages(&amp;#039;template=job,sort=-published&amp;#039;);&lt;br /&gt;
foreach ($jobs as $item) {&lt;br /&gt;
  $joblist .= &amp;#039;&amp;lt;li class=&amp;quot;joblist-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#039;.$item-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$item-&amp;gt;title.&amp;#039; (&amp;#039;.$item-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title.&amp;#039;)&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
$joblist = &amp;#039;&amp;lt;ul class=&amp;quot;joblist&amp;quot;&amp;gt;&amp;#039;.$joblist.&amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Template Job ===&lt;br /&gt;
Benötigt im Admin Bereich nur das job Feld. In diesem sind alle anderen benötigten Felder bereits enthalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
include_once(&amp;#039;includes/SchemaHelper.php&amp;#039;);&lt;br /&gt;
$sh = new SchemaHelper;&lt;br /&gt;
$jsonld = $sh-&amp;gt;jsonldJobPosting($page);&lt;br /&gt;
&lt;br /&gt;
// BEWERBUNGSFORMULAR WENN GESÜNSCHT&lt;br /&gt;
$contact =  $forms-&amp;gt;render(&amp;#039;bewerbung&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
ob_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;apply&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?=$page-&amp;gt;title?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;job-description&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_description?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;Arbeitgeber&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;?=$page-&amp;gt;link?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Arbeitsort&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_streetaddress?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_postalcode?&amp;gt; &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_addresslocality?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php if ($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ - &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_unittext-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php elseif($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;unit-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy pt-20&amp;quot;&amp;gt;Art der Anstellung&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;pb-30&amp;quot;&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_employmenttype-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Bewerbungsmöglichkeit --&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;apply-form&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;Bewerbung&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&amp;lt;?= $contact ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- job ldjson --&amp;gt;&lt;br /&gt;
    &amp;lt;?=$jsonld?&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$content = ob_get_clean();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funktionalität ===&lt;br /&gt;
==== SchemaHelper ====&lt;br /&gt;
Für Erzeugung der Strukturierten Daten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26026</id>
		<title>ProcessWire - Job Template</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26026"/>
		<updated>2022-04-04T07:01:58Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Templates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beispiel Setting für Jobs mit strukturierten Daten ==&lt;br /&gt;
Beispiel von SPPS&lt;br /&gt;
&lt;br /&gt;
=== Job Template ===&lt;br /&gt;
&lt;br /&gt;
==== Felder ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job_addresscountry&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 191,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Land&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addresslocality&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 188,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Ort&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addressregion&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 189,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Region&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_maxvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 185,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_minvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 184,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_unittext&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 186,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Bezahlung pro&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=MONTH|Monat\n2=YEAR|Jahr\n3=HOUR|Stunde\n4=WEEK|Woche\n5=DAY|Tag&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 179,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Datum&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_description&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 181,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeTextareaLanguage&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldCKEditor&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;rows&amp;quot;: 5,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterHannaCode&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;htmlOptions&amp;quot;: [&lt;br /&gt;
            2,&lt;br /&gt;
            4,&lt;br /&gt;
            16&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;langBlankInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;toolbar&amp;quot;: &amp;quot;Format, Styles, -, Bold, Italic, -, RemoveFormat\nNumberedList, BulletedList, -, Blockquote\nPWLink, Unlink, Anchor\nPWImage, Table, HorizontalRule, SpecialChar\nPasteText, PasteFromWord\nScayt, -, Sourcedialog\nJustifyCenter, JustifyLeft, JustifyRight&amp;quot;,&lt;br /&gt;
        &amp;quot;inlineMode&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useACF&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;usePurifier&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;formatTags&amp;quot;: &amp;quot;p;h1;h2;h3;h4;h5;h6;pre;address&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsCss&amp;quot;: &amp;quot;/site/templates/modules/InputfieldCKEditor/contents.css&amp;quot;,&lt;br /&gt;
        &amp;quot;stylesSet&amp;quot;: &amp;quot;customstyles:/site/templates/modules/InputfieldCKEditor/mystyles.js&amp;quot;,&lt;br /&gt;
        &amp;quot;extraPlugins&amp;quot;: [&lt;br /&gt;
            &amp;quot;pwimage&amp;quot;,&lt;br /&gt;
            &amp;quot;pwlink&amp;quot;,&lt;br /&gt;
            &amp;quot;sourcedialog&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;removePlugins&amp;quot;: &amp;quot;image,magicline&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;imageFields&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;toggles&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;extraAllowedContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsInlineCss&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;customOptions&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;plugin_sourcedialog&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_employmenttype&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 192,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Art der Anstellung&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=FULL_TIME|Vollzeit\n2=PART_TIME|Teilzeit\n3=CONTRACTOR|Vertrag\n4=TEMPORARY|Zeitarbeit\n5=INTERN|Internship (Trainee etc.)\n6=VOLUNTEER|Volontariat\n7=PER_DIEM|Per diem\n8=OTHER|Andere&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 178,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_link&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Link zum Jobangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeURL&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;noRelative&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowIDN&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowQuotes&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;addRoot&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 1024,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_logo&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 183,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_logo&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Logo&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeImage&amp;quot;,&lt;br /&gt;
        &amp;quot;fileSchema&amp;quot;: 270,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;extensions&amp;quot;: &amp;quot;gif jpg jpeg png&amp;quot;,&lt;br /&gt;
        &amp;quot;maxFiles&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputFormat&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;descriptionRows&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;useTags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;gridMode&amp;quot;: &amp;quot;grid&amp;quot;,&lt;br /&gt;
        &amp;quot;focusMode&amp;quot;: &amp;quot;on&amp;quot;,&lt;br /&gt;
        &amp;quot;resizeServer&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;clientQuality&amp;quot;: 90,&lt;br /&gt;
        &amp;quot;maxReject&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dimensionsByAspectRatio&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValuePage&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldImage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;optional&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputString&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;entityEncode&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tagsList&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;unzip&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;overwrite&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;aspect_ratios&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 193,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=intensiv|SPPS Karlsruhe Intensiv\n2=karlsruhe|SPPS Karlsruhe\n3=rastatt|SPPS Ötigheim/Rastatt\n4=pforzheim|SPPS Pforzheim\n5=rheinhausen|SPPS Rheinhausen-Oberhausen\n6=tagespflege|Tagespflege Etje&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname_old&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 182,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname_old&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_postalcode&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 190,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;PLZ&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_streetaddress&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 187,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Adresse&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 180,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Gültig bis&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Options für:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_basesalary_unittext&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=MONTH|Monat&lt;br /&gt;
2=YEAR|Jahr&lt;br /&gt;
3=HOUR|Stunde&lt;br /&gt;
4=WEEK|Woche&lt;br /&gt;
5=DAY|Tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_employmenttype&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=FULL_TIME|Vollzeit&lt;br /&gt;
2=PART_TIME|Teilzeit&lt;br /&gt;
3=CONTRACTOR|Vertrag&lt;br /&gt;
4=TEMPORARY|Zeitarbeit&lt;br /&gt;
5=INTERN|Internship (Trainee etc.)&lt;br /&gt;
6=VOLUNTEER|Volontariat&lt;br /&gt;
7=PER_DIEM|Per diem&lt;br /&gt;
8=OTHER|Andere&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_organizationname&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kann genutzt werden wenn man mehrere Organisationen hat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Job Fieldset Page&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Das Feld fasst die anderen Felder in eines zusammen. So kann man sie einfacher handeln.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 177,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeFieldsetPage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Daten für ein Jobposting&amp;quot;,&lt;br /&gt;
        &amp;quot;icon&amp;quot;: &amp;quot;wrench&amp;quot;,&lt;br /&gt;
        &amp;quot;template_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;parent_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterLoading&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;repeaterMaxItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;repeaterMinItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
            &amp;quot;job_description&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
            &amp;quot;job_link&amp;quot;,&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings. Wenn leer wird das Erstelldatum dieser Seite verwendet.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Empfohlen. Unbefristet für manche Berufsgruppen erlaubt (z.B. Bedienungen)&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_description&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Wenn leer wird diese Seite genutzt.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Templates ====&lt;br /&gt;
Import Daten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 53,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;jobs&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-user-circle-o title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;jobs&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 55,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: -1,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-users title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebote&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;images&amp;quot;,&lt;br /&gt;
            &amp;quot;files&amp;quot;,&lt;br /&gt;
            &amp;quot;menu&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;images&amp;quot;: [],&lt;br /&gt;
            &amp;quot;files&amp;quot;: [],&lt;br /&gt;
            &amp;quot;menu&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Template Jobs ===&lt;br /&gt;
Todo besser als Layout-Block&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// JOBLIST&lt;br /&gt;
$joblist = &amp;#039;&amp;#039;;&lt;br /&gt;
$jobs = pages(&amp;#039;template=job,sort=-published&amp;#039;);&lt;br /&gt;
foreach ($jobs as $item) {&lt;br /&gt;
  $joblist .= &amp;#039;&amp;lt;li class=&amp;quot;joblist-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#039;.$item-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$item-&amp;gt;title.&amp;#039; (&amp;#039;.$item-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title.&amp;#039;)&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
$joblist = &amp;#039;&amp;lt;ul class=&amp;quot;joblist&amp;quot;&amp;gt;&amp;#039;.$joblist.&amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Template Job ===&lt;br /&gt;
Benötigt im Admin Bereich nur das job Feld. In diesem sind alle anderen benötigten Felder bereits enthalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
include_once(&amp;#039;includes/SchemaHelper.php&amp;#039;);&lt;br /&gt;
$sh = new SchemaHelper;&lt;br /&gt;
$jsonld = $sh-&amp;gt;jsonldJobPosting($page);&lt;br /&gt;
&lt;br /&gt;
// BEWERBUNGSFORMULAR WENN GESÜNSCHT&lt;br /&gt;
$contact =  $forms-&amp;gt;render(&amp;#039;bewerbung&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
ob_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;apply&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?=$page-&amp;gt;title?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;job-description&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_description?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;Arbeitgeber&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;?=$page-&amp;gt;link?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Arbeitsort&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_streetaddress?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_postalcode?&amp;gt; &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_addresslocality?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php if ($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ - &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_unittext-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php elseif($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;unit-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy pt-20&amp;quot;&amp;gt;Art der Anstellung&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;pb-30&amp;quot;&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_employmenttype-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Bewerbungsmöglichkeit --&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;apply-form&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;Bewerbung&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&amp;lt;?= $contact ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- job ldjson --&amp;gt;&lt;br /&gt;
    &amp;lt;?=$jsonld?&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$content = ob_get_clean();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funktionalität ===&lt;br /&gt;
==== SchemaHelper ====&lt;br /&gt;
Für Erzeugung der Strukturierten Daten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26025</id>
		<title>ProcessWire - Job Template</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Job_Template&amp;diff=26025"/>
		<updated>2022-04-04T07:00:57Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Job Template */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beispiel Setting für Jobs mit strukturierten Daten ==&lt;br /&gt;
Beispiel von SPPS&lt;br /&gt;
&lt;br /&gt;
=== Job Template ===&lt;br /&gt;
&lt;br /&gt;
==== Felder ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job_addresscountry&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 191,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Land&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addresslocality&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 188,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Ort&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_addressregion&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 189,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Region&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_maxvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 185,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_minvalue&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 184,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeInteger&amp;quot;,&lt;br /&gt;
        &amp;quot;zeroNotEmpty&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 10,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;min&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;max&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_basesalary_unittext&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 186,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Bezahlung pro&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 33,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=MONTH|Monat\n2=YEAR|Jahr\n3=HOUR|Stunde\n4=WEEK|Woche\n5=DAY|Tag&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 179,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job Datum&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_description&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 181,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;job_description&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeTextareaLanguage&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldCKEditor&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;rows&amp;quot;: 5,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterHannaCode&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;htmlOptions&amp;quot;: [&lt;br /&gt;
            2,&lt;br /&gt;
            4,&lt;br /&gt;
            16&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;langBlankInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;toolbar&amp;quot;: &amp;quot;Format, Styles, -, Bold, Italic, -, RemoveFormat\nNumberedList, BulletedList, -, Blockquote\nPWLink, Unlink, Anchor\nPWImage, Table, HorizontalRule, SpecialChar\nPasteText, PasteFromWord\nScayt, -, Sourcedialog\nJustifyCenter, JustifyLeft, JustifyRight&amp;quot;,&lt;br /&gt;
        &amp;quot;inlineMode&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useACF&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;usePurifier&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;formatTags&amp;quot;: &amp;quot;p;h1;h2;h3;h4;h5;h6;pre;address&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsCss&amp;quot;: &amp;quot;/site/templates/modules/InputfieldCKEditor/contents.css&amp;quot;,&lt;br /&gt;
        &amp;quot;stylesSet&amp;quot;: &amp;quot;customstyles:/site/templates/modules/InputfieldCKEditor/mystyles.js&amp;quot;,&lt;br /&gt;
        &amp;quot;extraPlugins&amp;quot;: [&lt;br /&gt;
            &amp;quot;pwimage&amp;quot;,&lt;br /&gt;
            &amp;quot;pwlink&amp;quot;,&lt;br /&gt;
            &amp;quot;sourcedialog&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;removePlugins&amp;quot;: &amp;quot;image,magicline&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;imageFields&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;toggles&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;extraAllowedContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentsInlineCss&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;customOptions&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;plugin_sourcedialog&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_employmenttype&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 192,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Art der Anstellung&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=FULL_TIME|Vollzeit\n2=PART_TIME|Teilzeit\n3=CONTRACTOR|Vertrag\n4=TEMPORARY|Zeitarbeit\n5=INTERN|Internship (Trainee etc.)\n6=VOLUNTEER|Volontariat\n7=PER_DIEM|Per diem\n8=OTHER|Andere&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 178,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_link&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Link zum Jobangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeURL&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;noRelative&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowIDN&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowQuotes&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;addRoot&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 1024,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_logo&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 183,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_logo&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Logo&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeImage&amp;quot;,&lt;br /&gt;
        &amp;quot;fileSchema&amp;quot;: 270,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;extensions&amp;quot;: &amp;quot;gif jpg jpeg png&amp;quot;,&lt;br /&gt;
        &amp;quot;maxFiles&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputFormat&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;descriptionRows&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;useTags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;gridMode&amp;quot;: &amp;quot;grid&amp;quot;,&lt;br /&gt;
        &amp;quot;focusMode&amp;quot;: &amp;quot;on&amp;quot;,&lt;br /&gt;
        &amp;quot;resizeServer&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;clientQuality&amp;quot;: 90,&lt;br /&gt;
        &amp;quot;maxReject&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dimensionsByAspectRatio&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValuePage&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldImage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;optional&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;outputString&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;entityEncode&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tagsList&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;unzip&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;overwrite&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;maxSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;minHeight&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;aspect_ratios&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 193,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeOptions&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;InputfieldSelect&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;initValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultValue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;export_options&amp;quot;: {&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;1=intensiv|SPPS Karlsruhe Intensiv\n2=karlsruhe|SPPS Karlsruhe\n3=rastatt|SPPS Ötigheim/Rastatt\n4=pforzheim|SPPS Pforzheim\n5=rheinhausen|SPPS Rheinhausen-Oberhausen\n6=tagespflege|Tagespflege Etje&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_organizationname_old&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 182,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_organizationname_old&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Name der Organisation&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_postalcode&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 190,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;PLZ&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_streetaddress&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 187,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Adresse&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeText&amp;quot;,&lt;br /&gt;
        &amp;quot;textformatters&amp;quot;: [&lt;br /&gt;
            &amp;quot;TextformatterEntities&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;minlength&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
        &amp;quot;showCount&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;inputfieldClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputSize&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeInputWidth&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBlank&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;stripTags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pattern&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 180,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Gültig bis&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeDatetime&amp;quot;,&lt;br /&gt;
        &amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;htmlType&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
        &amp;quot;dateSelectFormat&amp;quot;: &amp;quot;yMd&amp;quot;,&lt;br /&gt;
        &amp;quot;yearFrom&amp;quot;: 1922,&lt;br /&gt;
        &amp;quot;yearTo&amp;quot;: 2042,&lt;br /&gt;
        &amp;quot;yearLock&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;datepicker&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;timeInputSelect&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateInputFormat&amp;quot;: &amp;quot;Y-m-d&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 25,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;dateOutputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredAttr&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dateMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeStep&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMin&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeMax&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;timeInputFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;placeholder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;yearRange&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultToday&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Options für:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_basesalary_unittext&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=MONTH|Monat&lt;br /&gt;
2=YEAR|Jahr&lt;br /&gt;
3=HOUR|Stunde&lt;br /&gt;
4=WEEK|Woche&lt;br /&gt;
5=DAY|Tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_employmenttype&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1=FULL_TIME|Vollzeit&lt;br /&gt;
2=PART_TIME|Teilzeit&lt;br /&gt;
3=CONTRACTOR|Vertrag&lt;br /&gt;
4=TEMPORARY|Zeitarbeit&lt;br /&gt;
5=INTERN|Internship (Trainee etc.)&lt;br /&gt;
6=VOLUNTEER|Volontariat&lt;br /&gt;
7=PER_DIEM|Per diem&lt;br /&gt;
8=OTHER|Andere&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;job_organizationname&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kann genutzt werden wenn man mehrere Organisationen hat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Job Fieldset Page&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Das Feld fasst die anderen Felder in eines zusammen. So kann man sie einfacher handeln.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 177,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;FieldtypeFieldsetPage&amp;quot;,&lt;br /&gt;
        &amp;quot;notes&amp;quot;: &amp;quot;Daten für ein Jobposting&amp;quot;,&lt;br /&gt;
        &amp;quot;icon&amp;quot;: &amp;quot;wrench&amp;quot;,&lt;br /&gt;
        &amp;quot;template_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;parent_id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterLoading&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;repeaterMaxItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;repeaterMinItems&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;collapsed&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;repeaterFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;,&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;,&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;,&lt;br /&gt;
            &amp;quot;job_description&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;,&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;,&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;,&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;,&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;,&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;,&lt;br /&gt;
            &amp;quot;job_link&amp;quot;,&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;showIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeOffset&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeBorder&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;themeColor&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;columnWidth&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;required&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;requiredIf&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;job_dateposted&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Datum des Postings. Wenn leer wird das Erstelldatum dieser Seite verwendet.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_validthrough&amp;quot;: {&lt;br /&gt;
                &amp;quot;icon&amp;quot;: &amp;quot;calendar&amp;quot;,&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Empfohlen. Unbefristet für manche Berufsgruppen erlaubt (z.B. Bedienungen)&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_organizationname&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_description&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_minvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_maxvalue&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_basesalary_unittext&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_streetaddress&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_postalcode&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresslocality&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addressregion&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_addresscountry&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_employmenttype&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job_link&amp;quot;: {&lt;br /&gt;
                &amp;quot;notes&amp;quot;: &amp;quot;Wenn leer wird diese Seite genutzt.&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;job_logo&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Templates ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;job&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 53,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;job&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;jobs&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-user-circle-o title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebot&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;job&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;jobs&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 55,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;fieldgroups_id&amp;quot;: &amp;quot;jobs&amp;quot;,&lt;br /&gt;
        &amp;quot;flags&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cache_time&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;useRoles&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;editRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;addRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;createRoles&amp;quot;: [],&lt;br /&gt;
        &amp;quot;rolesPermissions&amp;quot;: [],&lt;br /&gt;
        &amp;quot;noInherit&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;childrenTemplatesID&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;sortfield&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noParents&amp;quot;: -1,&lt;br /&gt;
        &amp;quot;childTemplates&amp;quot;: [&lt;br /&gt;
            &amp;quot;job&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;parentTemplates&amp;quot;: [],&lt;br /&gt;
        &amp;quot;allowPageNum&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;allowChangeUser&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;redirectLogin&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;urlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;https&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrls&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;slashPageNum&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;slashUrlSegments&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;altFilename&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;guestSearchable&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;pageClass&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;childNameFormat&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pageLabelField&amp;quot;: &amp;quot;fa-users title&amp;quot;,&lt;br /&gt;
        &amp;quot;noGlobal&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noMove&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noTrash&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noSettings&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noChangeTemplate&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noShortcut&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noUnpublish&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noLang&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;compile&amp;quot;: 3,&lt;br /&gt;
        &amp;quot;nameContentTab&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noCacheGetVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;noCachePostVars&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;useCacheForUsers&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpire&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;cacheExpirePages&amp;quot;: [],&lt;br /&gt;
        &amp;quot;cacheExpireSelector&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Stellenangebote&amp;quot;,&lt;br /&gt;
        &amp;quot;tags&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;titleNames&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noPrependTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;noAppendTemplateFile&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;prependFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;appendFile&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;pagefileSecure&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tabContent&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;tabChildren&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;nameLabel&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;contentType&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;errorAction&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;connectedFieldID&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ns&amp;quot;: &amp;quot;ProcessWire&amp;quot;,&lt;br /&gt;
        &amp;quot;_exportMode&amp;quot;: true,&lt;br /&gt;
        &amp;quot;roles&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupFields&amp;quot;: [&lt;br /&gt;
            &amp;quot;title&amp;quot;,&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;,&lt;br /&gt;
            &amp;quot;images&amp;quot;,&lt;br /&gt;
            &amp;quot;files&amp;quot;,&lt;br /&gt;
            &amp;quot;menu&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;fieldgroupContexts&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: [],&lt;br /&gt;
            &amp;quot;layout_blocks&amp;quot;: [],&lt;br /&gt;
            &amp;quot;images&amp;quot;: [],&lt;br /&gt;
            &amp;quot;files&amp;quot;: [],&lt;br /&gt;
            &amp;quot;menu&amp;quot;: []&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Template Jobs ===&lt;br /&gt;
Todo besser als Layout-Block&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// JOBLIST&lt;br /&gt;
$joblist = &amp;#039;&amp;#039;;&lt;br /&gt;
$jobs = pages(&amp;#039;template=job,sort=-published&amp;#039;);&lt;br /&gt;
foreach ($jobs as $item) {&lt;br /&gt;
  $joblist .= &amp;#039;&amp;lt;li class=&amp;quot;joblist-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#039;.$item-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$item-&amp;gt;title.&amp;#039; (&amp;#039;.$item-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title.&amp;#039;)&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
$joblist = &amp;#039;&amp;lt;ul class=&amp;quot;joblist&amp;quot;&amp;gt;&amp;#039;.$joblist.&amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Template Job ===&lt;br /&gt;
Benötigt im Admin Bereich nur das job Feld. In diesem sind alle anderen benötigten Felder bereits enthalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
include_once(&amp;#039;includes/SchemaHelper.php&amp;#039;);&lt;br /&gt;
$sh = new SchemaHelper;&lt;br /&gt;
$jsonld = $sh-&amp;gt;jsonldJobPosting($page);&lt;br /&gt;
&lt;br /&gt;
// BEWERBUNGSFORMULAR WENN GESÜNSCHT&lt;br /&gt;
$contact =  $forms-&amp;gt;render(&amp;#039;bewerbung&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
ob_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;apply&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;?=$page-&amp;gt;title?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;job-description&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_description?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;Arbeitgeber&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_organizationname-&amp;gt;title?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;?=$page-&amp;gt;link?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Arbeitsort&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_streetaddress?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
        &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_postalcode?&amp;gt; &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_addresslocality?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php if ($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ - &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_maxvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_unittext-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php elseif($page-&amp;gt;job-&amp;gt;job_basesalary_minvalue &amp;amp;&amp;amp; $page-&amp;gt;job-&amp;gt;job_basesalary_unittext): ?&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;font-heavy&amp;quot;&amp;gt;Vergütung&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_basesalary_minvalue?&amp;gt;€ &amp;lt;?=$page-&amp;gt;unit-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;font-heavy pt-20&amp;quot;&amp;gt;Art der Anstellung&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;pb-30&amp;quot;&amp;gt;&amp;lt;?=$page-&amp;gt;job-&amp;gt;job_employmenttype-&amp;gt;title?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Bewerbungsmöglichkeit --&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;apply-form&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;Bewerbung&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&amp;lt;?= $contact ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- job ldjson --&amp;gt;&lt;br /&gt;
    &amp;lt;?=$jsonld?&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$content = ob_get_clean();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funktionalität ===&lt;br /&gt;
==== SchemaHelper ====&lt;br /&gt;
Für Erzeugung der Strukturierten Daten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Webeditoren_und_Tools&amp;diff=26024</id>
		<title>Webeditoren und Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Webeditoren_und_Tools&amp;diff=26024"/>
		<updated>2022-04-01T17:52:00Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: Die Seite wurde neu angelegt: „== Online Editoren ==  === Webflow ===  webflow  https://www.udesly.com/ zum Exportieren von Webflow Projekten“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Online Editoren ==&lt;br /&gt;
&lt;br /&gt;
=== Webflow ===&lt;br /&gt;
 webflow&lt;br /&gt;
 https://www.udesly.com/ zum Exportieren von Webflow Projekten&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Webdesign&amp;diff=26023</id>
		<title>Webdesign</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Webdesign&amp;diff=26023"/>
		<updated>2022-04-01T17:50:49Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;siehe auch Gestaltung&lt;br /&gt;
&lt;br /&gt;
 [[Webeditoren und Tools]]&lt;br /&gt;
&lt;br /&gt;
== Richtlinien für Printgrafiker: ==&lt;br /&gt;
&lt;br /&gt;
* keine automatische Silbentrennung&lt;br /&gt;
* Farben als Webwerte&lt;br /&gt;
* Möglichst keine absoluten Schriftgrößen&lt;br /&gt;
* Wenn fixes Layout: gerne Pixelangaben für Spaltenbreiten und Abstände (margins, paddings) siehe Erklärung.&lt;br /&gt;
* Textfluss&lt;br /&gt;
** Für jede Art von Grundlayout benötigt man ein neues Template. &lt;br /&gt;
** CMS oder Hand-Made &lt;br /&gt;
&lt;br /&gt;
=== weitere Hinweise ===&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Animation_im_Web&amp;diff=26022</id>
		<title>Animation im Web</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Animation_im_Web&amp;diff=26022"/>
		<updated>2022-04-01T17:49:36Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* GSAP &amp;amp; ScrollMagic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
In früheren Zeiten war die Standardantwort für &amp;quot;bewegte&amp;quot; Webseiten ganz einfach Flash. Heutzutage gibt es viele Lösungen um Animationen auf eine Webseite zu bringen. Dieser Artikel soll eine kleine Übersicht bringen.&lt;br /&gt;
&lt;br /&gt;
Stichworte: Anime.js, GSAP, CSS Transform, CSS Keyframes, Snap, Waypoints, Lottie, ScrollMagic&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
 Siehe auch in den Sections&lt;br /&gt;
 [[Scroll-Snap]]&lt;br /&gt;
 [[Anime.js]]&lt;br /&gt;
 http://imakewebthings.com/waypoints/guides/getting-started/&lt;br /&gt;
&lt;br /&gt;
== Überblick ==&lt;br /&gt;
=== GSAP &amp;amp; ScrollMagic ===&lt;br /&gt;
ScrollMagic ist obsolet es gibt bei GSAP ein eigenes Plugin - ScrollTrigger&lt;br /&gt;
 [[GSAP]]&lt;br /&gt;
Gehört zu den Standardlösungen. GSAP - Greensock Animation Plattform bietet JavaScript Tools für Timeline-basierte Animationen. Ergänzend kann ScrollMagic die Steuerung der Timelines basierend auf der Skrollposition der Webseite steuern.&lt;br /&gt;
&lt;br /&gt;
Vorteil:&lt;br /&gt;
* Alle DOM Elemente können animiert werden. Nicht nur in der Bewegung sondern auch in der Farbe, Sichtbarkeit...&lt;br /&gt;
* Gute Performance&lt;br /&gt;
* Mit ScrollMagic einfaches Steuern beim Scrolling inklusive einfaches Pinning (fixieren während der Animation)&lt;br /&gt;
Nachteil: &lt;br /&gt;
* Skriptlastig, wobei es nicht so komplex ist wie bei anderen Lösungen.&lt;br /&gt;
&lt;br /&gt;
=== Vector + AfterFX + Bodymovin + Lottie ===&lt;br /&gt;
 https://www.youtube.com/watch?v=i6qfQ8QDOfs&amp;amp;feature=emb_rel_end&lt;br /&gt;
Ein weiterer vielversprechender Workflow. &lt;br /&gt;
* Vektordateien erstellen &lt;br /&gt;
* In AfterFX importieren. Hier gibt es mehrere Möglichkeiten. Illustrator Dateine kann man direkt importieren, für Sketch gibt es ein Importtool, das auch die Layer mitnimmt. More to check out...&lt;br /&gt;
* Animation in AfterFX erstellen&lt;br /&gt;
* Mit dem AfterFX Bodymovin Plugin exportierst du die Animation als JSON File.&lt;br /&gt;
* Lottie kann die erstellt Datei rendern. Die Lottie Library gibt es für den Browser, aber auch für iOS und Android - dort werden die Dateien Nativ gerendert.&lt;br /&gt;
* Lottie Animationen können auch mit GSAP gesteuert werden.&lt;br /&gt;
 https://greensock.com/forums/topic/18343-timelinemax-scrollmagic-lottie-web-bodymoving-is-it-possible-is-it-necessary/&lt;br /&gt;
 https://www.youtube.com/watch?time_continue=308&amp;amp;v=HeY9qGUT3zQ&amp;amp;feature=emb_logo&lt;br /&gt;
&lt;br /&gt;
Vorteil:&lt;br /&gt;
* Einfache Erstellung mit AfterFX&lt;br /&gt;
* Natives Rendern in Apps möglich -&amp;gt; gute Performance&lt;br /&gt;
Nachteil:&lt;br /&gt;
* Keine DOM Elemente&lt;br /&gt;
* Player nicht so frei positionierbar.&lt;br /&gt;
&lt;br /&gt;
=== Only CSS ===&lt;br /&gt;
 [[CSS Transitions]]&lt;br /&gt;
 [[CSS Animation]]&lt;br /&gt;
CSS3 stellt einfache Möglichkeiten zur Verfügung Elemente (auch SVG Pfade) zu animieren.&lt;br /&gt;
Vorteil:&lt;br /&gt;
* Ohne JavaScript&lt;br /&gt;
* Für einfache Animationen einfach zu realisieren&lt;br /&gt;
* Performant wenn Properties verwendet werden, die der Browser nativ rechnen kann (z.B. alle transform Eigenschaften)&lt;br /&gt;
Nachteil:&lt;br /&gt;
* Komplexe Animationen umständlich&lt;br /&gt;
&lt;br /&gt;
[[JQuery - Animation]] &lt;br /&gt;
&lt;br /&gt;
== Animation mit CSS only ==&lt;br /&gt;
 [[CSS Transitions]]&lt;br /&gt;
 [[CSS Animation]]&lt;br /&gt;
&lt;br /&gt;
== Animation mit JavaScript,CSS SVG und Canvas ==&lt;br /&gt;
=== Cooler Triangles Tiles Effekt ===&lt;br /&gt;
http://codepen.io/mistic100/pen/JobPLK (2016-12)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tiles&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Enhancement of my original &amp;lt;a href=&amp;quot;http://codepen.io/mistic100/pen/GFHkm&amp;quot;&amp;gt;Colorful Tiles&amp;lt;/a&amp;gt; with truly random animation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;At the end of each cycle (49 steps) a new Perlin noise map is generated.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
body { background:#111; }&lt;br /&gt;
#tiles { margin:0 auto; }&lt;br /&gt;
p { max-width:680px; margin:10px auto; color:white; font:16px &amp;quot;Calibri&amp;quot;, sans-serif; }&lt;br /&gt;
a { color:#3E7289; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(function(){&lt;br /&gt;
    if (!SVG.supported) {&lt;br /&gt;
        alert(&amp;#039;SVG not supported !&amp;#039;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // parameters&lt;br /&gt;
    var size = { x: 680, y: 400, tile: 40 },&lt;br /&gt;
        speed = 50,&lt;br /&gt;
        tile_nb = { x: Math.ceil(size.x/size.tile)+1, y: Math.ceil(size.y/size.tile)+1 },&lt;br /&gt;
        colors = [&amp;quot;#ED1156&amp;quot;, &amp;quot;#ED194E&amp;quot;, &amp;quot;#ED2247&amp;quot;, &amp;quot;#ED2B3F&amp;quot;, &amp;quot;#EE3438&amp;quot;, &amp;quot;#EE3D31&amp;quot;, &amp;quot;#EE4529&amp;quot;, &amp;quot;#EF4E22&amp;quot;, &amp;quot;#EF571A&amp;quot;, &amp;quot;#EF6013&amp;quot;, &amp;quot;#F0690C&amp;quot;, &amp;quot;#E8720E&amp;quot;, &amp;quot;#E17B10&amp;quot;, &amp;quot;#D98512&amp;quot;, &amp;quot;#D28E14&amp;quot;, &amp;quot;#CB9816&amp;quot;, &amp;quot;#C3A118&amp;quot;, &amp;quot;#BCAA1A&amp;quot;, &amp;quot;#B4B41C&amp;quot;, &amp;quot;#ADBD1E&amp;quot;, &amp;quot;#A6C721&amp;quot;, &amp;quot;#96C62F&amp;quot;, &amp;quot;#87C53E&amp;quot;, &amp;quot;#78C44D&amp;quot;, &amp;quot;#69C35C&amp;quot;, &amp;quot;#5AC26B&amp;quot;, &amp;quot;#4AC17A&amp;quot;, &amp;quot;#3BC089&amp;quot;, &amp;quot;#2CBF98&amp;quot;, &amp;quot;#1DBEA7&amp;quot;, &amp;quot;#0EBDB6&amp;quot;, &amp;quot;#0EBAB0&amp;quot;, &amp;quot;#0EB8AA&amp;quot;, &amp;quot;#0EB5A4&amp;quot;, &amp;quot;#0EB39E&amp;quot;, &amp;quot;#0EB098&amp;quot;, &amp;quot;#0EAE92&amp;quot;, &amp;quot;#0EAB8C&amp;quot;, &amp;quot;#0EA986&amp;quot;, &amp;quot;#0EA680&amp;quot;, &amp;quot;#0EA47B&amp;quot;, &amp;quot;#269376&amp;quot;, &amp;quot;#3F8372&amp;quot;, &amp;quot;#58736E&amp;quot;, &amp;quot;#71626A&amp;quot;, &amp;quot;#895266&amp;quot;, &amp;quot;#A24262&amp;quot;, &amp;quot;#BB315E&amp;quot;, &amp;quot;#D4215A&amp;quot;],&lt;br /&gt;
        objects = [],&lt;br /&gt;
        values = [],&lt;br /&gt;
        nb_colors = colors.length;&lt;br /&gt;
    &lt;br /&gt;
    // function to generate simplex noise map&lt;br /&gt;
    function generateValues(add) {&lt;br /&gt;
        var values = [], foo,&lt;br /&gt;
            simplex = new SimplexNoise();&lt;br /&gt;
        &lt;br /&gt;
        for (var l=0; l&amp;lt;tile_nb.y; l++) {&lt;br /&gt;
            for (var c=0; c&amp;lt;tile_nb.x; c++) {&lt;br /&gt;
                foo = Math.round((simplex.noise(c/10, l/10)+1) / 2 * nb_colors) + add;&lt;br /&gt;
                values.push(foo, foo+1, foo+2, foo+3);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return values;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // init canvas&lt;br /&gt;
    var container = document.getElementById(&amp;#039;tiles&amp;#039;);&lt;br /&gt;
    container.style.width = size.x+&amp;#039;px&amp;#039;;&lt;br /&gt;
    container.style.height = size.y+&amp;#039;px&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    var paper = SVG(container).size(size.x, size.y),&lt;br /&gt;
        pos, cmd,&lt;br /&gt;
        counter = 0;&lt;br /&gt;
&lt;br /&gt;
    // draw tiles&lt;br /&gt;
    for (var l=0; l&amp;lt;tile_nb.y; l++) {&lt;br /&gt;
        for (var c=0; c&amp;lt;tile_nb.x; c++) {&lt;br /&gt;
            pos = { x: c*size.tile, y: l*size.tile };&lt;br /&gt;
            &lt;br /&gt;
            // tile 1&lt;br /&gt;
            cmd = pos.x +&amp;#039;,&amp;#039;+ pos.y +&amp;#039; &amp;#039;+ (pos.x+size.tile) +&amp;#039;,&amp;#039;+ pos.y +&amp;#039; &amp;#039;+ (pos.x+size.tile/2) +&amp;#039;,&amp;#039;+ (pos.y+size.tile/2);&lt;br /&gt;
            objects.push(paper.polygon(cmd, true));&lt;br /&gt;
            // tile 2&lt;br /&gt;
            cmd = (pos.x+size.tile) +&amp;#039;,&amp;#039;+ (pos.y+size.tile) +&amp;#039; &amp;#039;+ pos.x +&amp;#039;,&amp;#039;+ (pos.y+size.tile) +&amp;#039; &amp;#039;+ (pos.x+size.tile/2) +&amp;#039;,&amp;#039;+ (pos.y+size.tile/2);&lt;br /&gt;
            objects.push(paper.polygon(cmd, true));&lt;br /&gt;
            // tile 3&lt;br /&gt;
            cmd = pos.x +&amp;#039;,&amp;#039;+ pos.y +&amp;#039; &amp;#039;+ (pos.x+size.tile/2) +&amp;#039;,&amp;#039;+ (pos.y+size.tile/2) +&amp;#039; &amp;#039;+ (pos.x-size.tile/2) +&amp;#039;,&amp;#039;+ (pos.y+size.tile/2);&lt;br /&gt;
            objects.push(paper.polygon(cmd, true));&lt;br /&gt;
            // tile 4&lt;br /&gt;
            cmd = pos.x +&amp;#039;,&amp;#039;+ (pos.y+size.tile) +&amp;#039; &amp;#039;+ (pos.x+size.tile/2) +&amp;#039;,&amp;#039;+ (pos.y+size.tile/2) +&amp;#039; &amp;#039;+ (pos.x-size.tile/2) +&amp;#039;,&amp;#039;+ (pos.y+size.tile/2);&lt;br /&gt;
            objects.push(paper.polygon(cmd, true));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // cycle colors&lt;br /&gt;
    values[0] = generateValues(0);&lt;br /&gt;
    values[1] = generateValues(nb_colors);&lt;br /&gt;
    &lt;br /&gt;
    setInterval(function() {&lt;br /&gt;
        var idx;&lt;br /&gt;
        for (var i=0, l=objects.length; i&amp;lt;l; i++) {&lt;br /&gt;
            idx = Math.round((values[1][i]-values[0][i]) * counter/(nb_colors-1) + values[0][i]);&lt;br /&gt;
            if (idx &amp;gt;= nb_colors) idx = idx%nb_colors;&lt;br /&gt;
            objects[i].fill(colors[idx]);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        counter++;&lt;br /&gt;
        if (counter == nb_colors) {&lt;br /&gt;
            counter = 1;&lt;br /&gt;
            values[0] = values[1].map(function(v) { return v-nb_colors; });&lt;br /&gt;
            values[1] = generateValues(nb_colors);&lt;br /&gt;
        }&lt;br /&gt;
    }, speed);&lt;br /&gt;
&lt;br /&gt;
    // bug in svg.js&lt;br /&gt;
    var temp = document.getElementById(&amp;#039;SvgjsSvg1002&amp;#039;);&lt;br /&gt;
    temp.parentNode.removeChild(temp);&lt;br /&gt;
}());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26021</id>
		<title>GSAP - ScrollTrigger</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_ScrollTrigger&amp;diff=26021"/>
		<updated>2022-03-31T07:22:53Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Toggle Actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Update: Die beste Möglichkeit Scrolling mit Animationen zu verbinden ist mit dem neuen (2020) ScrollTrigger Plugin.&lt;br /&gt;
 https://www.youtube.com/watch?v=X7IBa7vZjmo Intro mit Beispielen&lt;br /&gt;
 https://greensock.com/scrolltrigger Main Page&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Documentation&lt;br /&gt;
 https://greensock.com/st-mistakes/ Häufige Fehler (auch mit each Schleifen)&lt;br /&gt;
 &lt;br /&gt;
 Obsolet: https://codepen.io/osublake/pen/a633d0c9e6e2b951496d7f1eb4fd8fb6 (ohne ScrollMagic)&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
Eine gute Methode vorzugehen:&lt;br /&gt;
* Timeline-Animation ohne ScrollTrigger bauen&lt;br /&gt;
* ScrollTrigger Konfiguration in die Timeline einbauen.&lt;br /&gt;
&lt;br /&gt;
== MatchMedia ==&lt;br /&gt;
Mit MatchMedia kann man unterschiedliche ScrollTrigger für unterschiedliche Bildschirme nutzen.&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger/static.matchMedia()&lt;br /&gt;
MatchMedia verwaltet bei Resize Events auch die Timelines, killt diese wenn nötig oder erzeugt neue. Das erleichtert unglaublich viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
Vorgehen&lt;br /&gt;
&lt;br /&gt;
* Timeline Animation erstellen&lt;br /&gt;
* ScrollTrigger Konfiguration in Timeline aufsetzen&lt;br /&gt;
* MatchMedia erstellen und Timeline Animation einsetzen.&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei MediaQueries umschließt MatchMedia die Animation. Genauer gesagt man übergibt in der MatchMedia Funktion alles was in diesem Query ausgeführt werden soll. MatchMedia überwacht aber auch Veränderungen und setzt alle Animationen zurück, wenn der Query nicht mehr passt. Timelines etc. werden also wieder gekillt und der Urzustand wieder hergestellt.&lt;br /&gt;
&lt;br /&gt;
=== MatchMedia aufsetzen ===&lt;br /&gt;
Im Konfigurationsobjekt von MatchMedia übergeben wir als Schlüssel der das MediaQuery enthält. Als Wert übergeben wie eine Funktion. In dieser Funktion werden alle Timelines / Animationen gesetzt die für das Query gelten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ScrollTrigger.matchMedia({&lt;br /&gt;
  &amp;quot;(minWidth: 800px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for 800px and up go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;(maxWidth: 799px)&amp;quot;: function(){&lt;br /&gt;
    // all animations for smaller screens than 799px go here&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;all&amp;quot;: function(){&lt;br /&gt;
    // animations valid for all viewport sizes go here&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toggle Actions ==&lt;br /&gt;
toggleActions 	&lt;br /&gt;
&lt;br /&gt;
 onEnter, onLeave, onEnterBack, and onLeaveBack&lt;br /&gt;
 default is play none none none&lt;br /&gt;
 &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
 onEnter -&amp;gt; &amp;quot;normales betreten&amp;quot; von vorne&lt;br /&gt;
 onLeave -&amp;gt; nach komplettem Durchgang nach unten&lt;br /&gt;
 onEnterBack -&amp;gt; Eintritt von hinten&lt;br /&gt;
 onLeaveBack -&amp;gt; zurück bis Vor den Anfang&lt;br /&gt;
&lt;br /&gt;
So toggleActions: &amp;quot;play pause resume reset&amp;quot; will play the animation when entering, pause it when leaving, resume it when entering again backwards, and reset (rewind back to the beginning) when scrolling all the way back past the beginning. You can use any of the following keywords for each action: &amp;quot;play&amp;quot;, &amp;quot;pause&amp;quot;, &amp;quot;resume&amp;quot;, &amp;quot;reset&amp;quot;, &amp;quot;restart&amp;quot;, &amp;quot;complete&amp;quot;, &amp;quot;reverse&amp;quot;, and &amp;quot;none&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
=== Probleme mit Inline Styles und mediaQuery beheben - ScrollTrigger.saveStyles() ===&lt;br /&gt;
Manchmal kommt es vor, dass eine &amp;#039;&amp;#039;&amp;#039;Animation einen Inline Style setzt, der ein mediaQuery in CSS &amp;quot;überschreibt&amp;quot;&amp;#039;&amp;#039;&amp;#039;. Wenn man dieses Verhalten nicht möchte und lieber den &amp;#039;&amp;#039;&amp;#039;Zustand beim Laden der Seite herstellen&amp;#039;&amp;#039;&amp;#039; möchte kann man die Funktion saveStyles nutzen. Mit saveStyles kann man vor der Animation den Zustand von DOM-Objekten speichern. GSAP setzt diese dann wieder zurück wenn der MatchMedia Zweig nicht mehr zutrifft.&lt;br /&gt;
 ScrollTrigger.saveStyles(&amp;#039;.myElement, .myOtherElement);&lt;br /&gt;
&lt;br /&gt;
== Beispiele Tipps etc. ==&lt;br /&gt;
=== Horizontal Scroll ===&lt;br /&gt;
 https://codepen.io/GreenSock/pen/896549f0a83297debd9111fe9b205a97&lt;br /&gt;
&lt;br /&gt;
Mit Tablet Swipe:&lt;br /&gt;
 https://greensock.com/forums/topic/28016-horizontal-scroll-with-draggable-syncing-the-two/?tab=comments#comment-138080&lt;br /&gt;
 https://codepen.io/GreenSock/pen/ZELQqeJ?editors=0010&lt;br /&gt;
 https://greensock.com/forums/topic/25544-horizontal-scroll-trigger-tablet-mobile/&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_Snippets&amp;diff=26020</id>
		<title>GSAP - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_Snippets&amp;diff=26020"/>
		<updated>2022-03-31T04:21:59Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Keyframes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
 [[GSAP]]&lt;br /&gt;
 https://greensock.com/cheatsheet/&lt;br /&gt;
 https://greensock.com/get-started&lt;br /&gt;
 https://codepen.io/GreenSock/&lt;br /&gt;
 https://css-tricks.com/writing-smarter-animation-code/ *****&lt;br /&gt;
 https://greensock.com/forums/topic/17401-multiple-timelinemax-oncomplete-function-help/&lt;br /&gt;
Cool Stuff&lt;br /&gt;
 https://greensock.com/forums/topic/18128-svg-stroke-dasharray-quick-tip/&lt;br /&gt;
Read On&lt;br /&gt;
 https://greensock.com/forums/topic/22793-how-to-work-with-new-labels-object-in-gsap-3/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einfache Animationen ==&lt;br /&gt;
&lt;br /&gt;
gsap.to(&amp;quot;.logo&amp;quot;, {duration: 2, x: 300}); // Dies nennt sich eine Timeline. 300px nach rechts bewegen in 2s mit Standardwerten (ease out...)&lt;br /&gt;
gsap.to(&amp;quot;.logo&amp;quot;, {duration: 2, x: 300, backgroundColor: &amp;quot;#c2c4c8&amp;quot;}); // CSS Eigenschaften die normal ein - haben, werden als Camelcase geschrieben.&lt;br /&gt;
// Eigenschaften mit Zeichen in Anführungsstrichen. Fast alles lässt sich Animieren.&lt;br /&gt;
gsap.to(&amp;quot;.logo&amp;quot;, {duration: 2, x: 300, backgroundColor: &amp;quot;#c2c4c8&amp;quot;, borderRadius: &amp;quot;50%&amp;quot;, border: &amp;quot;4px solid white&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
=== Ease In Out ===&lt;br /&gt;
&lt;br /&gt;
 https://greensock.com/docs/v3/Eases&lt;br /&gt;
 gsap.to(&amp;quot;.logo&amp;quot;, {duration: 1, x:300, ease: &amp;quot;power2.inOut&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
Ease Möglichkeiten&lt;br /&gt;
&lt;br /&gt;
 //OLD ==&amp;gt; NEW&lt;br /&gt;
 Elastic.easeOut ==&amp;gt; &amp;quot;elastic.out&amp;quot; //or just &amp;quot;elastic&amp;quot; because &amp;quot;.out&amp;quot; is the default flavor&lt;br /&gt;
 Elastic.easeIn ==&amp;gt; &amp;quot;elastic.in&amp;quot;&lt;br /&gt;
 Elastic.easeInOut ==&amp;gt; &amp;quot;elastic.inOut&amp;quot;&lt;br /&gt;
 Elastic.easeOut.config(1, 0.5) ==&amp;gt; &amp;quot;elastic.out(1, 0.5)&amp;quot; //or just &amp;quot;elastic(1, 0.5)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 //and the other configurable eases are much easier!:&lt;br /&gt;
 SteppedEase.config(5) ==&amp;gt; &amp;quot;steps(5)&amp;quot;&lt;br /&gt;
 SlowMo.ease.config(0.5, 0.8) ==&amp;gt; &amp;quot;slow(0.5, 0.8)&amp;quot;&lt;br /&gt;
 RoughEase.ease.config({points:40}) ==&amp;gt; &amp;quot;rough(40)&amp;quot;&lt;br /&gt;
 ExpoScaleEase.config(0.5, 3) ==&amp;gt; &amp;quot;expoScale(0.5, 3)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Staggering ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.to(&amp;quot;.class&amp;quot;, {&lt;br /&gt;
  x:&amp;quot;+=100&amp;quot;,&lt;br /&gt;
  duration:1,&lt;br /&gt;
  stagger: 0.5 //simple stagger of 0.5 seconds&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//or get advanced:&lt;br /&gt;
gsap.to(&amp;quot;.class&amp;quot;, {&lt;br /&gt;
  x:&amp;quot;+=100&amp;quot;,&lt;br /&gt;
  duration:1,&lt;br /&gt;
  stagger: {&lt;br /&gt;
    amount:2,&lt;br /&gt;
    from:&amp;quot;center&amp;quot;,&lt;br /&gt;
    grid:&amp;quot;auto&amp;quot;,&lt;br /&gt;
    onComplete: myFunction //define callbacks inside the stagger to make them apply to each sub-tween&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Positioning ==&lt;br /&gt;
=== Relative position/timing prefix ===&lt;br /&gt;
Relative “&amp;gt;” and “&amp;lt;” position prefix&lt;br /&gt;
This feature helps with positioning animations in a timeline. It puts a tween relative to the previous tween’s start or end time and removes the need to add labels through your code.&lt;br /&gt;
&lt;br /&gt;
gsap.method(&amp;#039;selector&amp;#039;,{}, &amp;quot;&amp;lt;&amp;quot; ) //Inserts a tween at the start of the previous tween&lt;br /&gt;
&lt;br /&gt;
gsap.method(&amp;#039;selector&amp;#039;,{}, &amp;quot;&amp;gt;&amp;quot; ) //Inserts a tween at the end of the previous&lt;br /&gt;
&lt;br /&gt;
=== Centering ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.set(&amp;quot;.content&amp;quot;, {&lt;br /&gt;
  position: &amp;quot;absolute&amp;quot;,&lt;br /&gt;
  top: &amp;quot;50%&amp;quot;,&lt;br /&gt;
  left: &amp;quot;50%&amp;quot;,&lt;br /&gt;
  xPercent: -50,&lt;br /&gt;
  yPercent: -50&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Center the content on page load&lt;br /&gt;
gsap.set(&amp;#039;.content&amp;#039;, {xPercent: -50});&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
// Some time later animate the width&lt;br /&gt;
.to(&amp;#039;.content&amp;#039;, {&lt;br /&gt;
  width: &amp;#039;100vw&amp;#039;,&lt;br /&gt;
  duration: 2,&lt;br /&gt;
}, &amp;quot;&amp;lt;&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Keyframes ==&lt;br /&gt;
&lt;br /&gt;
Anstatt mehrerer Tweens kann man auch mehrere TweenProperties als keyframes kombinieren und hat weniger Tipparbeit. Aber Keyframes bieten noch einiges mehr:&lt;br /&gt;
 https://greensock.com/understanding-keyframes/&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.to(&amp;quot;.class&amp;quot;, {keyframes: [ //&amp;lt;-- an array of keyframes!&lt;br /&gt;
  {x:100, duration:1},&lt;br /&gt;
  {y:200, duration:1, delay:0.5}, //create a 0.5 second gap&lt;br /&gt;
  {rotation:360, duration:2, delay:-0.25} //overlap by 0.25 seconds&lt;br /&gt;
]});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Timelines ==&lt;br /&gt;
=== Reset Timeline ===&lt;br /&gt;
 If you want to set the values to the original position set in the animation you can move the the playhead&amp;#039;s position before you kill it:&lt;br /&gt;
&lt;br /&gt;
 tl.pause(0).kill(true);&lt;br /&gt;
 ScrollTrigger.getById(&amp;quot;trigger1&amp;quot;).kill(true); // you have to do a extra kill for ScrollTrigger if used&lt;br /&gt;
&lt;br /&gt;
If you want to remove all inline styles you can use clearProps:&lt;br /&gt;
&lt;br /&gt;
 tl.kill(true);&lt;br /&gt;
 ScrollTrigger.getById(&amp;quot;trigger1&amp;quot;).kill(true);&lt;br /&gt;
 gsap.set(&amp;quot;#element&amp;quot;, {clearProps: true});&lt;br /&gt;
&lt;br /&gt;
=== Globale Timeline kontrollieren (timeScale)===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gsap.globalTimeline.timeScale(0.1); //slow everything down&lt;br /&gt;
gsap.globalTimeline.pause(); //stop everything, though you might want to use gsap.exportRoot() instead so that you can exclude delayedCalls()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rotation ==&lt;br /&gt;
=== Richtung der Rotation ===&lt;br /&gt;
 rotation:&amp;quot;270_short&amp;quot; //animates in the shortest direction!&lt;br /&gt;
 rotation:&amp;quot;270_cw&amp;quot;    //animates clockwise&lt;br /&gt;
 rotation:&amp;quot;270_ccw&amp;quot;   //animates counter-clockwise&lt;br /&gt;
&lt;br /&gt;
== Scroll To ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.querySelector(&amp;quot;button&amp;quot;).addEventListener(&amp;quot;click&amp;quot;, function() {&lt;br /&gt;
  gsap.to(window, { duration: 0.75, scrollTo: &amp;quot;.target&amp;quot; });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GSAP Scroll Trigger ==&lt;br /&gt;
Update: Die beste Möglichkeit ist mit dem neuen ScrollTrigger Plugin.&lt;br /&gt;
 [[GSAP - ScrollTrigger]]&lt;br /&gt;
 https://www.youtube.com/watch?v=X7IBa7vZjmo Intro mit Beispielen&lt;br /&gt;
 https://greensock.com/scrolltrigger Main Page&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Documentation&lt;br /&gt;
 https://greensock.com/st-mistakes/ Häufige Fehler (auch mit each Schleifen)&lt;br /&gt;
 &lt;br /&gt;
 Obsolet: https://codepen.io/osublake/pen/a633d0c9e6e2b951496d7f1eb4fd8fb6 (ohne ScrollMagic)&lt;br /&gt;
&lt;br /&gt;
== Good Practice and Time Savers ==&lt;br /&gt;
=== Timeline schneller abspielen ===&lt;br /&gt;
 tl.timeScale(3).repeat(2);&lt;br /&gt;
=== Bestimmten Teil abspielen ===&lt;br /&gt;
 tl.play(&amp;quot;myLabel&amp;quot;);&lt;br /&gt;
wobei die Labels so definiert werden:&lt;br /&gt;
 .addLabel(&amp;quot;out3&amp;quot;);&lt;br /&gt;
oder&lt;br /&gt;
 .to(&amp;quot;#myElement&amp;quot;,{duration:1, rotation:90}, &amp;quot;in3&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=== Schleifen ===&lt;br /&gt;
Geeignet für gleiche Animation auf mehreren Elementen hintereinander. Dabei übergeben wir in einer Schleife ein DOM Element und erstellen in einer anonymen Funktion den Tween.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;.fade-in&amp;quot;).each(function(){&lt;br /&gt;
  var tween = gsap.from($(this), {duration: 0.5, scale: 0.7, y: &amp;#039;+=30&amp;#039;, ease: Linear.easeNone });&lt;br /&gt;
  // possible with ScrollMagic&lt;br /&gt;
  var scene = new ScrollMagic.Scene({&lt;br /&gt;
    triggerElement: this,&lt;br /&gt;
  })&lt;br /&gt;
    .setTween(tween);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Werte ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.timeline({defaults:{ease:&amp;quot;power2.out&amp;quot;, duration:5}})&lt;br /&gt;
    .to(&amp;quot;.selector1&amp;quot;, {x:200})&lt;br /&gt;
    .to(&amp;quot;.selector2&amp;quot;, {y:500}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Nesting Timelines ===&lt;br /&gt;
&lt;br /&gt;
=== Functions to create timelines ===&lt;br /&gt;
&lt;br /&gt;
== Responsive Animations &amp;amp; Media Queries==&lt;br /&gt;
 https://greensock.com/forums/topic/18719-how-to-manage-gsap-animation-in-mobile-device/&lt;br /&gt;
 https://greensock.com/forums/topic/18280-truly-responsive-animations/&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger/static.matchMedia()&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
=== MotionPathPlugin ===&lt;br /&gt;
[[GSAP - MotionPathPlugin]]&lt;br /&gt;
=== SVGMorph ===&lt;br /&gt;
 gsap.to(&amp;quot;#circle&amp;quot;, {duration: 1, morphSVG:&amp;quot;#hippo&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
== ScrollTrigger ==&lt;br /&gt;
[[GSAP - ScrollTrigger]]&lt;br /&gt;
&lt;br /&gt;
 https://codepen.io/noeldelgado/pen/BaogqYy&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Array erstellen um Animation auf viele Elemente anzuwenden&lt;br /&gt;
    var panels = gsap.utils.toArray(&amp;quot;.panel&amp;quot;);&lt;br /&gt;
    let container = document.querySelector(&amp;#039;.scroll-container&amp;#039;)&lt;br /&gt;
    &lt;br /&gt;
    tl = gsap.timeline();&lt;br /&gt;
    tl.to(panels, { //each panel&lt;br /&gt;
        xPercent: -100 * (panels.length -1), // move complete width i.e. -500%&lt;br /&gt;
        scrollTrigger: {&lt;br /&gt;
            trigger: &amp;quot;.scroll-container&amp;quot;,&lt;br /&gt;
            pin: true,&lt;br /&gt;
            markers: true,&lt;br /&gt;
            end: () =&amp;gt; &amp;quot;+=&amp;quot; + document.querySelector(&amp;quot;.scroll-container&amp;quot;).offsetWidth,&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
// ODER&lt;br /&gt;
&lt;br /&gt;
panels.forEach((panel, i) =&amp;gt; {&lt;br /&gt;
    gsap.to(panel, {&lt;br /&gt;
        //...&lt;br /&gt;
    }&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Helpers ==&lt;br /&gt;
=== gsap loader ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.registerPlugin(ScrollTrigger);&lt;br /&gt;
&lt;br /&gt;
const images = gsap.utils.toArray(&amp;#039;img&amp;#039;);&lt;br /&gt;
const loader = document.querySelector(&amp;#039;.loader--text&amp;#039;);&lt;br /&gt;
const updateProgress = (instance) =&amp;gt; &lt;br /&gt;
  loader.textContent = `${Math.round(instance.progressedCount * 100 / images.length)}%`;&lt;br /&gt;
&lt;br /&gt;
const showDemo = () =&amp;gt; {&lt;br /&gt;
  document.body.style.overflow = &amp;#039;auto&amp;#039;;&lt;br /&gt;
  document.scrollingElement.scrollTo(0, 0);&lt;br /&gt;
  gsap.to(document.querySelector(&amp;#039;.loader&amp;#039;), { autoAlpha: 0 });&lt;br /&gt;
  // do some cool stuff&lt;br /&gt;
  gsap.utils.toArray(&amp;#039;section&amp;#039;).forEach((section, index) =&amp;gt; {&lt;br /&gt;
    const w = section.querySelector(&amp;#039;.wrapper&amp;#039;);&lt;br /&gt;
    const [x, xEnd] = (index % 2) ? [&amp;#039;100%&amp;#039;, (w.scrollWidth - section.offsetWidth) * -1] : [w.scrollWidth * -1, 0];&lt;br /&gt;
    gsap.fromTo(w, {  x  }, {&lt;br /&gt;
      x: xEnd,&lt;br /&gt;
      scrollTrigger: { &lt;br /&gt;
        trigger: section, &lt;br /&gt;
        scrub: 0.5 &lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
// check how much is loaded&lt;br /&gt;
imagesLoaded(images).on(&amp;#039;progress&amp;#039;, updateProgress).on(&amp;#039;always&amp;#039;, showDemo);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=GSAP_-_Snippets&amp;diff=26019</id>
		<title>GSAP - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=GSAP_-_Snippets&amp;diff=26019"/>
		<updated>2022-03-31T04:06:43Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Relative position prefix */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
 [[GSAP]]&lt;br /&gt;
 https://greensock.com/cheatsheet/&lt;br /&gt;
 https://greensock.com/get-started&lt;br /&gt;
 https://codepen.io/GreenSock/&lt;br /&gt;
 https://css-tricks.com/writing-smarter-animation-code/ *****&lt;br /&gt;
 https://greensock.com/forums/topic/17401-multiple-timelinemax-oncomplete-function-help/&lt;br /&gt;
Cool Stuff&lt;br /&gt;
 https://greensock.com/forums/topic/18128-svg-stroke-dasharray-quick-tip/&lt;br /&gt;
Read On&lt;br /&gt;
 https://greensock.com/forums/topic/22793-how-to-work-with-new-labels-object-in-gsap-3/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einfache Animationen ==&lt;br /&gt;
&lt;br /&gt;
gsap.to(&amp;quot;.logo&amp;quot;, {duration: 2, x: 300}); // Dies nennt sich eine Timeline. 300px nach rechts bewegen in 2s mit Standardwerten (ease out...)&lt;br /&gt;
gsap.to(&amp;quot;.logo&amp;quot;, {duration: 2, x: 300, backgroundColor: &amp;quot;#c2c4c8&amp;quot;}); // CSS Eigenschaften die normal ein - haben, werden als Camelcase geschrieben.&lt;br /&gt;
// Eigenschaften mit Zeichen in Anführungsstrichen. Fast alles lässt sich Animieren.&lt;br /&gt;
gsap.to(&amp;quot;.logo&amp;quot;, {duration: 2, x: 300, backgroundColor: &amp;quot;#c2c4c8&amp;quot;, borderRadius: &amp;quot;50%&amp;quot;, border: &amp;quot;4px solid white&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
=== Ease In Out ===&lt;br /&gt;
&lt;br /&gt;
 https://greensock.com/docs/v3/Eases&lt;br /&gt;
 gsap.to(&amp;quot;.logo&amp;quot;, {duration: 1, x:300, ease: &amp;quot;power2.inOut&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
Ease Möglichkeiten&lt;br /&gt;
&lt;br /&gt;
 //OLD ==&amp;gt; NEW&lt;br /&gt;
 Elastic.easeOut ==&amp;gt; &amp;quot;elastic.out&amp;quot; //or just &amp;quot;elastic&amp;quot; because &amp;quot;.out&amp;quot; is the default flavor&lt;br /&gt;
 Elastic.easeIn ==&amp;gt; &amp;quot;elastic.in&amp;quot;&lt;br /&gt;
 Elastic.easeInOut ==&amp;gt; &amp;quot;elastic.inOut&amp;quot;&lt;br /&gt;
 Elastic.easeOut.config(1, 0.5) ==&amp;gt; &amp;quot;elastic.out(1, 0.5)&amp;quot; //or just &amp;quot;elastic(1, 0.5)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 //and the other configurable eases are much easier!:&lt;br /&gt;
 SteppedEase.config(5) ==&amp;gt; &amp;quot;steps(5)&amp;quot;&lt;br /&gt;
 SlowMo.ease.config(0.5, 0.8) ==&amp;gt; &amp;quot;slow(0.5, 0.8)&amp;quot;&lt;br /&gt;
 RoughEase.ease.config({points:40}) ==&amp;gt; &amp;quot;rough(40)&amp;quot;&lt;br /&gt;
 ExpoScaleEase.config(0.5, 3) ==&amp;gt; &amp;quot;expoScale(0.5, 3)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Staggering ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.to(&amp;quot;.class&amp;quot;, {&lt;br /&gt;
  x:&amp;quot;+=100&amp;quot;,&lt;br /&gt;
  duration:1,&lt;br /&gt;
  stagger: 0.5 //simple stagger of 0.5 seconds&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//or get advanced:&lt;br /&gt;
gsap.to(&amp;quot;.class&amp;quot;, {&lt;br /&gt;
  x:&amp;quot;+=100&amp;quot;,&lt;br /&gt;
  duration:1,&lt;br /&gt;
  stagger: {&lt;br /&gt;
    amount:2,&lt;br /&gt;
    from:&amp;quot;center&amp;quot;,&lt;br /&gt;
    grid:&amp;quot;auto&amp;quot;,&lt;br /&gt;
    onComplete: myFunction //define callbacks inside the stagger to make them apply to each sub-tween&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Positioning ==&lt;br /&gt;
=== Relative position/timing prefix ===&lt;br /&gt;
Relative “&amp;gt;” and “&amp;lt;” position prefix&lt;br /&gt;
This feature helps with positioning animations in a timeline. It puts a tween relative to the previous tween’s start or end time and removes the need to add labels through your code.&lt;br /&gt;
&lt;br /&gt;
gsap.method(&amp;#039;selector&amp;#039;,{}, &amp;quot;&amp;lt;&amp;quot; ) //Inserts a tween at the start of the previous tween&lt;br /&gt;
&lt;br /&gt;
gsap.method(&amp;#039;selector&amp;#039;,{}, &amp;quot;&amp;gt;&amp;quot; ) //Inserts a tween at the end of the previous&lt;br /&gt;
&lt;br /&gt;
=== Centering ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.set(&amp;quot;.content&amp;quot;, {&lt;br /&gt;
  position: &amp;quot;absolute&amp;quot;,&lt;br /&gt;
  top: &amp;quot;50%&amp;quot;,&lt;br /&gt;
  left: &amp;quot;50%&amp;quot;,&lt;br /&gt;
  xPercent: -50,&lt;br /&gt;
  yPercent: -50&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Center the content on page load&lt;br /&gt;
gsap.set(&amp;#039;.content&amp;#039;, {xPercent: -50});&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
// Some time later animate the width&lt;br /&gt;
.to(&amp;#039;.content&amp;#039;, {&lt;br /&gt;
  width: &amp;#039;100vw&amp;#039;,&lt;br /&gt;
  duration: 2,&lt;br /&gt;
}, &amp;quot;&amp;lt;&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Keyframes ==&lt;br /&gt;
&lt;br /&gt;
Anstatt mehrerer Tweens kann man auch mehrere TweenProperties als keyframes kombinieren und hat weniger Tipparbeit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.to(&amp;quot;.class&amp;quot;, {keyframes: [ //&amp;lt;-- an array of keyframes!&lt;br /&gt;
  {x:100, duration:1},&lt;br /&gt;
  {y:200, duration:1, delay:0.5}, //create a 0.5 second gap&lt;br /&gt;
  {rotation:360, duration:2, delay:-0.25} //overlap by 0.25 seconds&lt;br /&gt;
]});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Timelines ==&lt;br /&gt;
=== Reset Timeline ===&lt;br /&gt;
 If you want to set the values to the original position set in the animation you can move the the playhead&amp;#039;s position before you kill it:&lt;br /&gt;
&lt;br /&gt;
 tl.pause(0).kill(true);&lt;br /&gt;
 ScrollTrigger.getById(&amp;quot;trigger1&amp;quot;).kill(true); // you have to do a extra kill for ScrollTrigger if used&lt;br /&gt;
&lt;br /&gt;
If you want to remove all inline styles you can use clearProps:&lt;br /&gt;
&lt;br /&gt;
 tl.kill(true);&lt;br /&gt;
 ScrollTrigger.getById(&amp;quot;trigger1&amp;quot;).kill(true);&lt;br /&gt;
 gsap.set(&amp;quot;#element&amp;quot;, {clearProps: true});&lt;br /&gt;
&lt;br /&gt;
=== Globale Timeline kontrollieren (timeScale)===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gsap.globalTimeline.timeScale(0.1); //slow everything down&lt;br /&gt;
gsap.globalTimeline.pause(); //stop everything, though you might want to use gsap.exportRoot() instead so that you can exclude delayedCalls()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rotation ==&lt;br /&gt;
=== Richtung der Rotation ===&lt;br /&gt;
 rotation:&amp;quot;270_short&amp;quot; //animates in the shortest direction!&lt;br /&gt;
 rotation:&amp;quot;270_cw&amp;quot;    //animates clockwise&lt;br /&gt;
 rotation:&amp;quot;270_ccw&amp;quot;   //animates counter-clockwise&lt;br /&gt;
&lt;br /&gt;
== Scroll To ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.querySelector(&amp;quot;button&amp;quot;).addEventListener(&amp;quot;click&amp;quot;, function() {&lt;br /&gt;
  gsap.to(window, { duration: 0.75, scrollTo: &amp;quot;.target&amp;quot; });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GSAP Scroll Trigger ==&lt;br /&gt;
Update: Die beste Möglichkeit ist mit dem neuen ScrollTrigger Plugin.&lt;br /&gt;
 [[GSAP - ScrollTrigger]]&lt;br /&gt;
 https://www.youtube.com/watch?v=X7IBa7vZjmo Intro mit Beispielen&lt;br /&gt;
 https://greensock.com/scrolltrigger Main Page&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger Documentation&lt;br /&gt;
 https://greensock.com/st-mistakes/ Häufige Fehler (auch mit each Schleifen)&lt;br /&gt;
 &lt;br /&gt;
 Obsolet: https://codepen.io/osublake/pen/a633d0c9e6e2b951496d7f1eb4fd8fb6 (ohne ScrollMagic)&lt;br /&gt;
&lt;br /&gt;
== Good Practice and Time Savers ==&lt;br /&gt;
=== Timeline schneller abspielen ===&lt;br /&gt;
 tl.timeScale(3).repeat(2);&lt;br /&gt;
=== Bestimmten Teil abspielen ===&lt;br /&gt;
 tl.play(&amp;quot;myLabel&amp;quot;);&lt;br /&gt;
wobei die Labels so definiert werden:&lt;br /&gt;
 .addLabel(&amp;quot;out3&amp;quot;);&lt;br /&gt;
oder&lt;br /&gt;
 .to(&amp;quot;#myElement&amp;quot;,{duration:1, rotation:90}, &amp;quot;in3&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=== Schleifen ===&lt;br /&gt;
Geeignet für gleiche Animation auf mehreren Elementen hintereinander. Dabei übergeben wir in einer Schleife ein DOM Element und erstellen in einer anonymen Funktion den Tween.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;.fade-in&amp;quot;).each(function(){&lt;br /&gt;
  var tween = gsap.from($(this), {duration: 0.5, scale: 0.7, y: &amp;#039;+=30&amp;#039;, ease: Linear.easeNone });&lt;br /&gt;
  // possible with ScrollMagic&lt;br /&gt;
  var scene = new ScrollMagic.Scene({&lt;br /&gt;
    triggerElement: this,&lt;br /&gt;
  })&lt;br /&gt;
    .setTween(tween);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Werte ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.timeline({defaults:{ease:&amp;quot;power2.out&amp;quot;, duration:5}})&lt;br /&gt;
    .to(&amp;quot;.selector1&amp;quot;, {x:200})&lt;br /&gt;
    .to(&amp;quot;.selector2&amp;quot;, {y:500}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Nesting Timelines ===&lt;br /&gt;
&lt;br /&gt;
=== Functions to create timelines ===&lt;br /&gt;
&lt;br /&gt;
== Responsive Animations &amp;amp; Media Queries==&lt;br /&gt;
 https://greensock.com/forums/topic/18719-how-to-manage-gsap-animation-in-mobile-device/&lt;br /&gt;
 https://greensock.com/forums/topic/18280-truly-responsive-animations/&lt;br /&gt;
 https://greensock.com/docs/v3/Plugins/ScrollTrigger/static.matchMedia()&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
=== MotionPathPlugin ===&lt;br /&gt;
[[GSAP - MotionPathPlugin]]&lt;br /&gt;
=== SVGMorph ===&lt;br /&gt;
 gsap.to(&amp;quot;#circle&amp;quot;, {duration: 1, morphSVG:&amp;quot;#hippo&amp;quot;});&lt;br /&gt;
&lt;br /&gt;
== ScrollTrigger ==&lt;br /&gt;
[[GSAP - ScrollTrigger]]&lt;br /&gt;
&lt;br /&gt;
 https://codepen.io/noeldelgado/pen/BaogqYy&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Array erstellen um Animation auf viele Elemente anzuwenden&lt;br /&gt;
    var panels = gsap.utils.toArray(&amp;quot;.panel&amp;quot;);&lt;br /&gt;
    let container = document.querySelector(&amp;#039;.scroll-container&amp;#039;)&lt;br /&gt;
    &lt;br /&gt;
    tl = gsap.timeline();&lt;br /&gt;
    tl.to(panels, { //each panel&lt;br /&gt;
        xPercent: -100 * (panels.length -1), // move complete width i.e. -500%&lt;br /&gt;
        scrollTrigger: {&lt;br /&gt;
            trigger: &amp;quot;.scroll-container&amp;quot;,&lt;br /&gt;
            pin: true,&lt;br /&gt;
            markers: true,&lt;br /&gt;
            end: () =&amp;gt; &amp;quot;+=&amp;quot; + document.querySelector(&amp;quot;.scroll-container&amp;quot;).offsetWidth,&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
// ODER&lt;br /&gt;
&lt;br /&gt;
panels.forEach((panel, i) =&amp;gt; {&lt;br /&gt;
    gsap.to(panel, {&lt;br /&gt;
        //...&lt;br /&gt;
    }&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Helpers ==&lt;br /&gt;
=== gsap loader ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
gsap.registerPlugin(ScrollTrigger);&lt;br /&gt;
&lt;br /&gt;
const images = gsap.utils.toArray(&amp;#039;img&amp;#039;);&lt;br /&gt;
const loader = document.querySelector(&amp;#039;.loader--text&amp;#039;);&lt;br /&gt;
const updateProgress = (instance) =&amp;gt; &lt;br /&gt;
  loader.textContent = `${Math.round(instance.progressedCount * 100 / images.length)}%`;&lt;br /&gt;
&lt;br /&gt;
const showDemo = () =&amp;gt; {&lt;br /&gt;
  document.body.style.overflow = &amp;#039;auto&amp;#039;;&lt;br /&gt;
  document.scrollingElement.scrollTo(0, 0);&lt;br /&gt;
  gsap.to(document.querySelector(&amp;#039;.loader&amp;#039;), { autoAlpha: 0 });&lt;br /&gt;
  // do some cool stuff&lt;br /&gt;
  gsap.utils.toArray(&amp;#039;section&amp;#039;).forEach((section, index) =&amp;gt; {&lt;br /&gt;
    const w = section.querySelector(&amp;#039;.wrapper&amp;#039;);&lt;br /&gt;
    const [x, xEnd] = (index % 2) ? [&amp;#039;100%&amp;#039;, (w.scrollWidth - section.offsetWidth) * -1] : [w.scrollWidth * -1, 0];&lt;br /&gt;
    gsap.fromTo(w, {  x  }, {&lt;br /&gt;
      x: xEnd,&lt;br /&gt;
      scrollTrigger: { &lt;br /&gt;
        trigger: section, &lt;br /&gt;
        scrub: 0.5 &lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
// check how much is loaded&lt;br /&gt;
imagesLoaded(images).on(&amp;#039;progress&amp;#039;, updateProgress).on(&amp;#039;always&amp;#039;, showDemo);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Fritz.box_Probleme_l%C3%B6sen&amp;diff=26018</id>
		<title>Fritz.box Probleme lösen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Fritz.box_Probleme_l%C3%B6sen&amp;diff=26018"/>
		<updated>2022-03-20T11:24:23Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: Die Seite wurde neu angelegt: „== FTP extrem langsam == In manchen Firmwareversionen gibt es Bugs. Hier die Lösung:  Okay, ich habe die Lösung gefunden. In diesem Thread steht alles: https…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FTP extrem langsam ==&lt;br /&gt;
In manchen Firmwareversionen gibt es Bugs. Hier die Lösung:&lt;br /&gt;
&lt;br /&gt;
Okay, ich habe die Lösung gefunden. In diesem Thread steht alles: https://www.unitymediaforum.de/threads/39320/page-2&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Das FTP-Problem ist wohl AVM bekannt und ist in der neuesten FritzOS-Version gefixt. Diese muss uns aber VF zur Verfügung stellen. Da das erfahrungsgemäß immer ein wenig länger dauert, gibt es solange einen Workaround. In der Fritzbox einloggen, unten links neben &amp;quot;Ansicht: Erweitert&amp;quot; auf &amp;quot;Inhalt&amp;quot; klicken, dann auf der neuen Seite ganz unten auf &amp;quot;FRITZ!Box Support&amp;quot; und hier gibt es eine Option, die sich &amp;quot;Paketbeschleunigung&amp;quot; schimpft. Hier waren bei mir beide Haken an, also sowohl Paket- als auch Hardwarebeschleunigung. Wenn man den Haken bei Hardwarebeschleunigung rausnimmt, sprich die Option deaktiviert, sind FTP-Verbindungen wieder genauso schnell wie zuvor. Ich habe es gerade bei mir getestet. Nachteil: Die Downloadrate wird langsamer, anstelle meiner 1 G, erreiche ich max. 400 M im Download. Daher ist mein Workflow nun erst einmal: Wenn FTP, dann Haken bei Hardwarebeschleunigung raus und wenn fertig, dann Haken wieder rein.&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Webp&amp;diff=26017</id>
		<title>Webp</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Webp&amp;diff=26017"/>
		<updated>2022-03-18T19:06:13Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: Die Seite wurde neu angelegt: „&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt; &amp;lt;picture&amp;gt;   &amp;lt;source srcset=&amp;quot;img.webp&amp;quot; type=&amp;quot;image/webp&amp;quot;&amp;gt;   &amp;lt;source srcset=&amp;quot;img.jpg&amp;quot; type=&amp;quot;image/jpeg&amp;quot;&amp;gt;    &amp;lt;img src=&amp;quot;img.jpg&amp;quot;&amp;gt; &amp;lt;/…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;picture&amp;gt;&lt;br /&gt;
  &amp;lt;source srcset=&amp;quot;img.webp&amp;quot; type=&amp;quot;image/webp&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;source srcset=&amp;quot;img.jpg&amp;quot; type=&amp;quot;image/jpeg&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;img src=&amp;quot;img.jpg&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/picture&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Blender_Modeling_Tipps&amp;diff=26016</id>
		<title>Blender Modeling Tipps</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Blender_Modeling_Tipps&amp;diff=26016"/>
		<updated>2022-03-17T20:51:17Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Shade Smooth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemeine Tipps ==&lt;br /&gt;
=== Geschicktes Auswählen ===&lt;br /&gt;
 Alt - Klick -&amp;gt; Ring wählen&lt;br /&gt;
 L - Select Linked&lt;br /&gt;
Wählt mit dem aktiven Vertice verbundene. Nützlich wenn man zwei Objekte aufeinander klebend hat und eines auswählt um es z.B. zu transformieren.&lt;br /&gt;
=== Skalieren über zwei Achsen ===&lt;br /&gt;
 S &amp;gt; Shift Z -&amp;gt; Scale über X und Y Achse, aber NICHT Z Achse&lt;br /&gt;
=== Skalierung zurücksetzen ===&lt;br /&gt;
Hat man ein Objekt auf seine entgültige Größe gebracht, möchte man den Skalierwert auf 1 setzen. Das nennt sich &amp;#039;&amp;#039;&amp;#039;Apply Scale&amp;#039;&amp;#039;&amp;#039;. So kann man einfach auf dessen Ursprungsgröße zurückkehren.&lt;br /&gt;
 Ctrl A &amp;gt; Scale -&amp;gt; Alle Scale Werte für die jetzige Größe auf 1 setzen.&lt;br /&gt;
=== Bevel ===&lt;br /&gt;
 Ctrl B &amp;gt; Bevel (Achte darauf das die Scale Werte auf 1 stehen und du im Edge Mode bist)&lt;br /&gt;
 MD -&amp;gt; Drag regelt die Größe der Bevel-Fläche&lt;br /&gt;
 MW -&amp;gt; Wheel regelt die Anzahl der Bevel-Stufen&lt;br /&gt;
=== Geschicktes Löschen ===&lt;br /&gt;
 X &amp;gt; Dissolve -&amp;gt; lösche Vertices oder Edges ohne die Flächen zu löschen.&lt;br /&gt;
&lt;br /&gt;
== Mirror Modifier ==&lt;br /&gt;
Symetrisches bearbeiten. Clipping aktivieren um überlappende Bereiche zu verhindern.&lt;br /&gt;
&lt;br /&gt;
== Loop Cuts ==&lt;br /&gt;
 Cmd R - Loop Cut setzen&lt;br /&gt;
 G Move Loop Cut&lt;br /&gt;
 GG Move Loop Cut an original Achse&lt;br /&gt;
&lt;br /&gt;
== Aproximity Loops ==&lt;br /&gt;
Nutze am Anfang eher weniger Loop Cuts und nutze dann Subsurfaces. Danach setze zusätzliche Loopcuts um scharfe Kanten (Tasse unten und oben etc.) zu bekommen.&lt;br /&gt;
&lt;br /&gt;
== Inset ==&lt;br /&gt;
 I - Inset&lt;br /&gt;
Inset ist eine Kombination aus neuem Loop und Skalieren.&lt;br /&gt;
&lt;br /&gt;
Nutze Insets um wellenartige Rundungen die durch die Subface Surfaces zustandegekommen sind zu verstecken (u.B. Tassenrand).&lt;br /&gt;
&lt;br /&gt;
== Vermeide n-gons ==&lt;br /&gt;
Strebe als Polygone immer 4-Ecke an. Nicht mehr.&lt;br /&gt;
&lt;br /&gt;
== Darstellung ==&lt;br /&gt;
=== Shade Smooth ===&lt;br /&gt;
 RM auf Objekt &amp;gt; Kontextmenü Shade Smooth&lt;br /&gt;
Gut um Materialien zu testen.&lt;br /&gt;
==== Auto Smooth ====&lt;br /&gt;
Tipp mit der Auto Smooth Funktion kann man für das Smooth Shading einen Grenzwinkel angeben. Dadurch kann man Kanten erhalten die eckig bleiben sollen.&lt;br /&gt;
&lt;br /&gt;
 Object Data Properties &amp;gt; Normals &amp;gt; Auto Smooth&lt;br /&gt;
&lt;br /&gt;
== Proportional Editing ==&lt;br /&gt;
Beeinflusst die umgebenden nicht gewählten Vertices. Die Art der Beeinflussung lässt sich einstellen (Smooth, Round...). &lt;br /&gt;
 O - Proportional Editing&lt;br /&gt;
 MW - Einflussbereich einstellen&lt;br /&gt;
=== Vertices im Einflussbereich fixieren ===&lt;br /&gt;
Beispiel: Donut Topping soll unten Tropfen bilden, oben aber fixiert bleiben. Dazu blendet man die oberen Vertices mit Shortcut H aus und Grabt sich einen V. unten stellt Proportional Editing auf Random und zieht bis es passt.&lt;br /&gt;
&lt;br /&gt;
== Objekte erzeugen ==&lt;br /&gt;
  P - Ein eigenes Objekt erstellen. Meist aus einer Auswahl geht aber auch aus Material.&lt;br /&gt;
=== Thickness ===&lt;br /&gt;
==== Solidify ====&lt;br /&gt;
Hat man ein flaches Objekt könnte man es mit Extrude dicker machen. Danach lässt sich die Dicke aber nur schwer ändern. Man kann aber auch den &amp;#039;&amp;#039;&amp;#039;Solidify Modifier&amp;#039;&amp;#039;&amp;#039; nutzen. Thickness setzt die Dicke, Offset gibt vor ob nach außen oder nach innen &amp;quot;verdickt&amp;quot; wird (1 nach außen, -1 nach innen).&lt;br /&gt;
=== Verbindungen ===&lt;br /&gt;
 F - Face&lt;br /&gt;
Erzeuge Faces aus 4 Punkten (4 sind optimal). Oft entstehen dabei im innernen neue Flächen die man noch löschen muss um einen sauberen Hohlkörper zu bekommen. Sonst enstehen unschöne Kanten.&lt;br /&gt;
&lt;br /&gt;
=== Bessere Objekte ===&lt;br /&gt;
 [[Bessere Kugel in Blender]]&lt;br /&gt;
&lt;br /&gt;
== Probleme beheben ==&lt;br /&gt;
=== Normalen checken ===&lt;br /&gt;
* Anschalten unter Overlays Dropdown &amp;gt; Normals&lt;br /&gt;
* Recalculate Normals&lt;br /&gt;
 A - Select all&lt;br /&gt;
 Ctrl Shift N - Recalculate&lt;br /&gt;
* oder Flip Normal&lt;br /&gt;
 Ctrl N&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Curve to Mesh ==&lt;br /&gt;
Kurve modellieren&lt;br /&gt;
 Shift + A &amp;gt; Add -&amp;gt; Bezier Curve&lt;br /&gt;
 Tab -&amp;gt; Wechsel in Edit Mode&lt;br /&gt;
 G -&amp;gt; Grab&lt;br /&gt;
 E -&amp;gt; Extrude&lt;br /&gt;
 R -&amp;gt; Rotate ( Anfasser )&lt;br /&gt;
 Cmd + Select -&amp;gt; letzte offene Punkte auswählen&lt;br /&gt;
 F -&amp;gt; Face -&amp;gt; Kurve schließen&lt;br /&gt;
&lt;br /&gt;
In Objekt umwandeln&lt;br /&gt;
 Tab -&amp;gt; Wechsel in Object Mode, Objekt auswählen.&lt;br /&gt;
 Object &amp;gt; Convert to &amp;gt; Mesh -&amp;gt; Vertices werden auf der Kurve erzeugt&lt;br /&gt;
 Tab -&amp;gt; Edit Mode&lt;br /&gt;
 Objekt wählen&lt;br /&gt;
 NICHT: F -&amp;gt; erzeugt eine einzelne kaputte Fläche, die den Raum nicht abdeckt&lt;br /&gt;
 3 Benachbarte Vertices wählen&lt;br /&gt;
 F -&amp;gt; Face -&amp;gt; erzeugt eine Teilfläche&lt;br /&gt;
 Innere Kante wählen (2 Vertices)&lt;br /&gt;
 F - F - F -&amp;gt; erzeugt anschließende Teilflächen&lt;br /&gt;
&lt;br /&gt;
== Klassische &amp;quot;CAD&amp;quot; Operationen ==&lt;br /&gt;
 [[Blender - Boolean Modifier]]&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Blender_Modeling_Tipps&amp;diff=26015</id>
		<title>Blender Modeling Tipps</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Blender_Modeling_Tipps&amp;diff=26015"/>
		<updated>2022-03-17T20:45:55Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Shade Smooth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemeine Tipps ==&lt;br /&gt;
=== Geschicktes Auswählen ===&lt;br /&gt;
 Alt - Klick -&amp;gt; Ring wählen&lt;br /&gt;
 L - Select Linked&lt;br /&gt;
Wählt mit dem aktiven Vertice verbundene. Nützlich wenn man zwei Objekte aufeinander klebend hat und eines auswählt um es z.B. zu transformieren.&lt;br /&gt;
=== Skalieren über zwei Achsen ===&lt;br /&gt;
 S &amp;gt; Shift Z -&amp;gt; Scale über X und Y Achse, aber NICHT Z Achse&lt;br /&gt;
=== Skalierung zurücksetzen ===&lt;br /&gt;
Hat man ein Objekt auf seine entgültige Größe gebracht, möchte man den Skalierwert auf 1 setzen. Das nennt sich &amp;#039;&amp;#039;&amp;#039;Apply Scale&amp;#039;&amp;#039;&amp;#039;. So kann man einfach auf dessen Ursprungsgröße zurückkehren.&lt;br /&gt;
 Ctrl A &amp;gt; Scale -&amp;gt; Alle Scale Werte für die jetzige Größe auf 1 setzen.&lt;br /&gt;
=== Bevel ===&lt;br /&gt;
 Ctrl B &amp;gt; Bevel (Achte darauf das die Scale Werte auf 1 stehen und du im Edge Mode bist)&lt;br /&gt;
 MD -&amp;gt; Drag regelt die Größe der Bevel-Fläche&lt;br /&gt;
 MW -&amp;gt; Wheel regelt die Anzahl der Bevel-Stufen&lt;br /&gt;
=== Geschicktes Löschen ===&lt;br /&gt;
 X &amp;gt; Dissolve -&amp;gt; lösche Vertices oder Edges ohne die Flächen zu löschen.&lt;br /&gt;
&lt;br /&gt;
== Mirror Modifier ==&lt;br /&gt;
Symetrisches bearbeiten. Clipping aktivieren um überlappende Bereiche zu verhindern.&lt;br /&gt;
&lt;br /&gt;
== Loop Cuts ==&lt;br /&gt;
 Cmd R - Loop Cut setzen&lt;br /&gt;
 G Move Loop Cut&lt;br /&gt;
 GG Move Loop Cut an original Achse&lt;br /&gt;
&lt;br /&gt;
== Aproximity Loops ==&lt;br /&gt;
Nutze am Anfang eher weniger Loop Cuts und nutze dann Subsurfaces. Danach setze zusätzliche Loopcuts um scharfe Kanten (Tasse unten und oben etc.) zu bekommen.&lt;br /&gt;
&lt;br /&gt;
== Inset ==&lt;br /&gt;
 I - Inset&lt;br /&gt;
Inset ist eine Kombination aus neuem Loop und Skalieren.&lt;br /&gt;
&lt;br /&gt;
Nutze Insets um wellenartige Rundungen die durch die Subface Surfaces zustandegekommen sind zu verstecken (u.B. Tassenrand).&lt;br /&gt;
&lt;br /&gt;
== Vermeide n-gons ==&lt;br /&gt;
Strebe als Polygone immer 4-Ecke an. Nicht mehr.&lt;br /&gt;
&lt;br /&gt;
== Darstellung ==&lt;br /&gt;
=== Shade Smooth ===&lt;br /&gt;
 RM auf Objekt &amp;gt; Kontextmenü Shade Smooth&lt;br /&gt;
Gut um Materialien zu testen.&lt;br /&gt;
==== Auto Smooth ====&lt;br /&gt;
Tipp mit der Auto Smooth funktion kann man einen Grenzwinkel angeben. Dadurch kann man Kanten erhalten.&lt;br /&gt;
&lt;br /&gt;
 Object Data Properties &amp;gt; Auto Smooth&lt;br /&gt;
&lt;br /&gt;
== Proportional Editing ==&lt;br /&gt;
Beeinflusst die umgebenden nicht gewählten Vertices. Die Art der Beeinflussung lässt sich einstellen (Smooth, Round...). &lt;br /&gt;
 O - Proportional Editing&lt;br /&gt;
 MW - Einflussbereich einstellen&lt;br /&gt;
=== Vertices im Einflussbereich fixieren ===&lt;br /&gt;
Beispiel: Donut Topping soll unten Tropfen bilden, oben aber fixiert bleiben. Dazu blendet man die oberen Vertices mit Shortcut H aus und Grabt sich einen V. unten stellt Proportional Editing auf Random und zieht bis es passt.&lt;br /&gt;
&lt;br /&gt;
== Objekte erzeugen ==&lt;br /&gt;
  P - Ein eigenes Objekt erstellen. Meist aus einer Auswahl geht aber auch aus Material.&lt;br /&gt;
=== Thickness ===&lt;br /&gt;
==== Solidify ====&lt;br /&gt;
Hat man ein flaches Objekt könnte man es mit Extrude dicker machen. Danach lässt sich die Dicke aber nur schwer ändern. Man kann aber auch den &amp;#039;&amp;#039;&amp;#039;Solidify Modifier&amp;#039;&amp;#039;&amp;#039; nutzen. Thickness setzt die Dicke, Offset gibt vor ob nach außen oder nach innen &amp;quot;verdickt&amp;quot; wird (1 nach außen, -1 nach innen).&lt;br /&gt;
=== Verbindungen ===&lt;br /&gt;
 F - Face&lt;br /&gt;
Erzeuge Faces aus 4 Punkten (4 sind optimal). Oft entstehen dabei im innernen neue Flächen die man noch löschen muss um einen sauberen Hohlkörper zu bekommen. Sonst enstehen unschöne Kanten.&lt;br /&gt;
&lt;br /&gt;
=== Bessere Objekte ===&lt;br /&gt;
 [[Bessere Kugel in Blender]]&lt;br /&gt;
&lt;br /&gt;
== Probleme beheben ==&lt;br /&gt;
=== Normalen checken ===&lt;br /&gt;
* Anschalten unter Overlays Dropdown &amp;gt; Normals&lt;br /&gt;
* Recalculate Normals&lt;br /&gt;
 A - Select all&lt;br /&gt;
 Ctrl Shift N - Recalculate&lt;br /&gt;
* oder Flip Normal&lt;br /&gt;
 Ctrl N&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Curve to Mesh ==&lt;br /&gt;
Kurve modellieren&lt;br /&gt;
 Shift + A &amp;gt; Add -&amp;gt; Bezier Curve&lt;br /&gt;
 Tab -&amp;gt; Wechsel in Edit Mode&lt;br /&gt;
 G -&amp;gt; Grab&lt;br /&gt;
 E -&amp;gt; Extrude&lt;br /&gt;
 R -&amp;gt; Rotate ( Anfasser )&lt;br /&gt;
 Cmd + Select -&amp;gt; letzte offene Punkte auswählen&lt;br /&gt;
 F -&amp;gt; Face -&amp;gt; Kurve schließen&lt;br /&gt;
&lt;br /&gt;
In Objekt umwandeln&lt;br /&gt;
 Tab -&amp;gt; Wechsel in Object Mode, Objekt auswählen.&lt;br /&gt;
 Object &amp;gt; Convert to &amp;gt; Mesh -&amp;gt; Vertices werden auf der Kurve erzeugt&lt;br /&gt;
 Tab -&amp;gt; Edit Mode&lt;br /&gt;
 Objekt wählen&lt;br /&gt;
 NICHT: F -&amp;gt; erzeugt eine einzelne kaputte Fläche, die den Raum nicht abdeckt&lt;br /&gt;
 3 Benachbarte Vertices wählen&lt;br /&gt;
 F -&amp;gt; Face -&amp;gt; erzeugt eine Teilfläche&lt;br /&gt;
 Innere Kante wählen (2 Vertices)&lt;br /&gt;
 F - F - F -&amp;gt; erzeugt anschließende Teilflächen&lt;br /&gt;
&lt;br /&gt;
== Klassische &amp;quot;CAD&amp;quot; Operationen ==&lt;br /&gt;
 [[Blender - Boolean Modifier]]&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ThreeJS&amp;diff=26014</id>
		<title>ThreeJS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ThreeJS&amp;diff=26014"/>
		<updated>2022-03-17T20:20:45Z</updated>

		<summary type="html">&lt;p&gt;134.3.74.15: /* Debugging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://threejs.org/&lt;br /&gt;
 https://threejsfundamentals.org/&lt;br /&gt;
 https://threejs.org/editor/ (Szenen und Objekte erstellen und expportieren)&lt;br /&gt;
 https://threejs-journey.com/ Bruno Simon Course (registriert mit dev@stephanschlegel.de)&lt;br /&gt;
 https://discoverthreejs.com/tips-and-tricks/ Tipps zu Performance und vielem mehr.&lt;br /&gt;
&lt;br /&gt;
 [[ThreeJS - Snippets]]&lt;br /&gt;
== Basics ==&lt;br /&gt;
=== Basic Scene ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Canvas&lt;br /&gt;
const canvas = document.querySelector(&amp;#039;canvas&amp;#039;)&lt;br /&gt;
console.log(canvas)&lt;br /&gt;
// Scene&lt;br /&gt;
const scene = new THREE.Scene()&lt;br /&gt;
// Red cube&lt;br /&gt;
const geometry = new THREE.BoxGeometry(1,1,1);&lt;br /&gt;
const material = new THREE.MeshBasicMaterial({&lt;br /&gt;
  color: &amp;#039;#ff0000&amp;#039;&lt;br /&gt;
})&lt;br /&gt;
const mesh = new THREE.Mesh(geometry, material)&lt;br /&gt;
scene.add(mesh)&lt;br /&gt;
&lt;br /&gt;
// Sizes&lt;br /&gt;
const sizes = {&lt;br /&gt;
  width: 800,&lt;br /&gt;
  height: 600,&lt;br /&gt;
}&lt;br /&gt;
const fov = 75&lt;br /&gt;
&lt;br /&gt;
// Camera (field of view, aspect ratio)&lt;br /&gt;
const camera = new THREE.PerspectiveCamera(fov, sizes.width / sizes.height)&lt;br /&gt;
camera.position.z = 3 // move camera a little backward&lt;br /&gt;
scene.add(camera)&lt;br /&gt;
&lt;br /&gt;
// Renderer&lt;br /&gt;
const renderer = new THREE.WebGLRenderer({&lt;br /&gt;
  canvas: canvas&lt;br /&gt;
})&lt;br /&gt;
renderer.setSize(sizes.width, sizes.height) // renderer needs size too&lt;br /&gt;
renderer.render(scene, camera)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic animation example ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Canvas&lt;br /&gt;
const canvas = document.querySelector(&amp;#039;canvas.webgl&amp;#039;)&lt;br /&gt;
// Scene&lt;br /&gt;
const scene = new THREE.Scene()&lt;br /&gt;
// Object&lt;br /&gt;
const geometry = new THREE.BoxGeometry(1, 1, 1)&lt;br /&gt;
const material = new THREE.MeshBasicMaterial({ &lt;br /&gt;
    color: 0xff0000 &lt;br /&gt;
})&lt;br /&gt;
const mesh = new THREE.Mesh(geometry, material)&lt;br /&gt;
scene.add(mesh)&lt;br /&gt;
&lt;br /&gt;
// Sizes&lt;br /&gt;
const sizes = {&lt;br /&gt;
    width: 800,&lt;br /&gt;
    height: 600&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Camera&lt;br /&gt;
const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height)&lt;br /&gt;
camera.position.z = 3&lt;br /&gt;
scene.add(camera)&lt;br /&gt;
&lt;br /&gt;
// Renderer&lt;br /&gt;
const renderer = new THREE.WebGLRenderer({&lt;br /&gt;
    canvas: canvas&lt;br /&gt;
})&lt;br /&gt;
renderer.setSize(sizes.width, sizes.height)&lt;br /&gt;
&lt;br /&gt;
// ANIMATIONS&lt;br /&gt;
const clock = new THREE.Clock()&lt;br /&gt;
&lt;br /&gt;
const tick = () =&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    const elapsedTime = clock.getElapsedTime()&lt;br /&gt;
    //console.log(elapsedTime)&lt;br /&gt;
    &lt;br /&gt;
    // rotate the cube&lt;br /&gt;
    mesh.rotation.y = elapsedTime * Math.PI * 0.1&lt;br /&gt;
&lt;br /&gt;
    // circular movement of camera&lt;br /&gt;
    camera.position.y = Math.sin(elapsedTime)&lt;br /&gt;
    camera.position.x = Math.cos(elapsedTime)&lt;br /&gt;
    camera.lookAt(mesh.position)&lt;br /&gt;
    &lt;br /&gt;
    // Render new setting&lt;br /&gt;
    renderer.render(scene, camera)&lt;br /&gt;
    &lt;br /&gt;
    // tell JS to call tick on the next frame&lt;br /&gt;
    window.requestAnimationFrame(tick) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// GO...&lt;br /&gt;
tick()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Camera ==&lt;br /&gt;
=== Perspective Camera ===&lt;br /&gt;
Entspricht etwa einem regulären Objektiv. &lt;br /&gt;
 const camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 );&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Field of View (FOV)&amp;#039;&amp;#039;&amp;#039; Gibt die &amp;#039;&amp;#039;&amp;#039;Brennweite&amp;#039;&amp;#039;&amp;#039; vor. Gute Werte sind zwischen 45 (Weitwinkel) und 75 (Tele)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Aspect Ratio &amp;#039;&amp;#039;&amp;#039; Das Seitenverhältnis des Renderbereichs. Da hier nur eine Zahl angegeben wird muss man dem Renderer noch die Endbreite mitgeben.&lt;br /&gt;
 renderer.setSize(breite, hoehe)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Near, Far&amp;#039;&amp;#039;&amp;#039; - gibt an ab welcher Entfernung Objekte nicht mehr angezeigt werden. Vermeide Extreme Werte, da diese zu Glitches führen können (z-fighting)&lt;br /&gt;
 const camera = new THREE.PerspectiveCamera( 55, width / height, 0.1, 100 );&lt;br /&gt;
=== Orthographic Camera ===&lt;br /&gt;
Diese Kamera hat keine Brennweite / Perspektive. D.h. entfernte Objekte erscheinen gleich groß wie nahe Objekte. Man übergibt 4 Werte: links, rechts, oben, unten&lt;br /&gt;
 const camera = new THREE.OrthographicCamera( width / - 2, width / 2, height / 2, height / - 2, 1, 1000 );&lt;br /&gt;
Achtung das Bild kann verzerrt erscheinen, wenn die Höhe und Breite des Renderers nicht zu diesen Werten passen. Kann man z.B. so einstellen:&lt;br /&gt;
 const aspectRatio = width/height // width and height of renderer viewport&lt;br /&gt;
 const camera = new THREE.OrthographicCamera(-1 * aspectRatio,1 * aspectRatio,1,-1)&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Debug UI ===&lt;br /&gt;
Mit einer Debug UI kann man beliebige &amp;#039;&amp;#039;&amp;#039;Properties von Objekten&amp;#039;&amp;#039;&amp;#039; komfortabel &amp;#039;&amp;#039;&amp;#039;verändern&amp;#039;&amp;#039;&amp;#039;. Das funktioniert mit allen Objekten  und ist nicht spezifisch für ThreeJS. Einzige Voraussetzung ist, dass es sich um Objekte und Eigenschaften handelt (also nicht eine normale Variable).&lt;br /&gt;
&lt;br /&gt;
Dat.GUI ist (Ende 21) nicht mehr aktuell. Stattdessen kann man lil-gui verwenden. &lt;br /&gt;
&lt;br /&gt;
    Dat.GUI https://github.com/dataarts/dat.gui&lt;br /&gt;
    lil-gui https://lil-gui.georgealways.com/&lt;br /&gt;
    control-panel https://github.com/freeman-lab/control-panel&lt;br /&gt;
    ControlKit https://github.com/automat/controlkit.js&lt;br /&gt;
    Uil https://github.com/lo-th/uil&lt;br /&gt;
    Tweakpane https://cocopon.github.io/tweakpane/&lt;br /&gt;
    Guify https://github.com/colejd/guify&lt;br /&gt;
    Oui https://github.com/wearekuva/oui&lt;br /&gt;
    Bruno Simon&amp;#039;s debug panel https://bruno-simon.com/#debug&lt;br /&gt;
==== lil-gui ====&lt;br /&gt;
 https://www.npmjs.com/package/lil-gui&lt;br /&gt;
Mit Webpack / npm&lt;br /&gt;
 npm i --save lil-gui&lt;br /&gt;
&lt;br /&gt;
Beispiel inkl. kleiner GSAP Animation:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// https://lil-gui.georgealways.com/#&lt;br /&gt;
import GUI from &amp;#039;lil-gui&amp;#039;; &lt;br /&gt;
/**&lt;br /&gt;
 * Debug&lt;br /&gt;
 */&lt;br /&gt;
const gui = new GUI({&lt;br /&gt;
    width:400&lt;br /&gt;
})&lt;br /&gt;
gui.close()&lt;br /&gt;
const params = {&lt;br /&gt;
    color: 0xff0000,&lt;br /&gt;
    spin: () =&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        console.log(&amp;#039;spin&amp;#039;)&lt;br /&gt;
        let tl = new gsap.timeline&lt;br /&gt;
        tl.to(mesh.rotation,{y: mesh.rotation.y + 0.5*Math.PI, duration: 1.5, ease: &amp;quot;circ&amp;quot;})&lt;br /&gt;
        //...&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
//...&lt;br /&gt;
// Debug&lt;br /&gt;
//gui.add(mesh.position,&amp;#039;y&amp;#039;,-2,2,0.1) // OR&lt;br /&gt;
gui.add(mesh.position,&amp;#039;y&amp;#039;)&lt;br /&gt;
  .min(-2)&lt;br /&gt;
  .max(3)&lt;br /&gt;
  .step(0.1)&lt;br /&gt;
  .name(&amp;#039;elevation&amp;#039;) // chain version&lt;br /&gt;
gui.add(mesh,&amp;#039;visible&amp;#039;)&lt;br /&gt;
gui.add(material,&amp;#039;wireframe&amp;#039;)&lt;br /&gt;
// we can not use material.color as it&amp;#039;s not an object&lt;br /&gt;
// thus we use a separately created object...&lt;br /&gt;
gui.addColor(params,&amp;#039;color&amp;#039;)&lt;br /&gt;
// ... and update material when this param changed:&lt;br /&gt;
.onChange( ()=&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    material.color.set(params.color)&lt;br /&gt;
})&lt;br /&gt;
gui.add(params, &amp;#039;spin&amp;#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Viele Eigenschaften erkennt das gui selbst. Manche Eigenschaften die keine Objekteigenschaften sind kann man vorher in ein Objekt packen und diesen Wert verändern (hier z.b. Color). Danach kann man über onChange den tatsächlichen Wert ändern.&lt;br /&gt;
&lt;br /&gt;
Auch Funktionen kann man übergeben, diese werden dann per Klick ausgelöst.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript Module oder Vanilla ===&lt;br /&gt;
In moderneren Setups nutzt man heute Loader wie Webpack und lädt Plugins als Module. Es gibt aber alle Plugins auch als konventionelle Skripte.&lt;br /&gt;
&lt;br /&gt;
Konventionell:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;script src=&amp;quot;\node_modules\three\build\three.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script src=&amp;quot;\node_modules\three\examples\js\loaders\GLTFLoader.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script src=&amp;quot;index.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
 // Achtung bei manchen Modulen geht das hier anders als bei den Modulimporten:&lt;br /&gt;
 // You should instantiate the GLTFLoader constructor using its parent class constructor that is the &amp;#039;THREE&amp;#039; constructor&lt;br /&gt;
 var loader = new THREE.GLTFLoader();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modern:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;import &amp;#039;./style.css&amp;#039;&lt;br /&gt;
import * as THREE from &amp;#039;three&amp;#039;&lt;br /&gt;
import { OrbitControls } from &amp;#039;three/examples/jsm/controls/OrbitControls.js&amp;#039;&lt;br /&gt;
import * as dat from &amp;#039;lil-gui&amp;#039;&lt;br /&gt;
import { GLTFLoader } from &amp;#039;three/examples/jsm/loaders/GLTFLoader.js&amp;#039;&lt;br /&gt;
import { gsap } from &amp;quot;gsap&amp;quot;;&lt;br /&gt;
import { ScrollTrigger } from &amp;quot;gsap/ScrollTrigger.js&amp;quot;;&lt;br /&gt;
gsap.registerPlugin(ScrollTrigger)&lt;br /&gt;
//...&lt;br /&gt;
// Hier kann die Loader Klasse direkt angesprochen werden.&lt;br /&gt;
const gltfLoader = new GLTFLoader()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should instantiate the GLTFLoader constructor using its parent class constructor that is the &amp;#039;THREE&amp;#039; constructor, like I have shown above. This will resolve the issue.&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
</feed>