@leuffen/themejs1 7.0.1 → 7.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/_tpl/_root/.schiller-context.txt +4 -0
  2. package/_tpl/_root/docs/_includes/el/address.html +2 -0
  3. package/_tpl/_root/docs/_layouts/legal/impressum.html +1 -1
  4. package/_tpl/_root/package.json +1 -12
  5. package/_tpl/_root/src/_variables.scss +2 -2
  6. package/_tpl/pages/hausarzt-index-singleleistung.de.md +13 -5
  7. package/_tpl/pages/hausarzt-index.de.md +7 -4
  8. package/_tpl/pages/index-singlepage-frauenarzt.de.md +10 -4
  9. package/_tpl/pages/index.de.md +8 -4
  10. package/_tpl/service/online-anmeldung.de.md +49 -0
  11. package/_tpl/service/online-videosprechstunde.de.md +55 -0
  12. package/_variables.scss +3 -0
  13. package/dist/elements/button-group/button-group.d.ts +1 -0
  14. package/dist/elements/button-group/button-group.js +8 -0
  15. package/dist/elements/elements.d.ts +2 -0
  16. package/dist/elements/elements.js +2 -0
  17. package/dist/elements/hero-slide/hero-slide.d.ts +1 -0
  18. package/dist/elements/hero-slide/hero-slide.js +15 -0
  19. package/dist/sections/hero-max/hero-max.js +1 -7
  20. package/dist/sections/navbar-centerlogo/navbar-centerlogo.js +42 -21
  21. package/dist/sections/sec-card-2col/sec-card-2col.js +2 -1
  22. package/elements/_text-format.scss +3 -0
  23. package/elements/button-group/button-group.scss +31 -0
  24. package/elements/button-group/button-group.ts +10 -0
  25. package/elements/elements.scss +3 -0
  26. package/elements/elements.ts +2 -0
  27. package/elements/hero-slide/hero-slide.scss +44 -0
  28. package/elements/hero-slide/hero-slide.ts +21 -0
  29. package/package.json +10 -8
  30. package/sections/_defaults.scss +4 -1
  31. package/sections/hero-max/hero-max.scss +7 -17
  32. package/sections/hero-max/hero-max.ts +1 -7
  33. package/sections/navbar-centerlogo/_burger-menu.scss +3 -1
  34. package/sections/navbar-centerlogo/_sidebar.scss +80 -0
  35. package/sections/navbar-centerlogo/navbar-centerlogo.scss +89 -115
  36. package/sections/navbar-centerlogo/navbar-centerlogo.ts +46 -21
  37. package/sections/sec-card-2col/sec-card-2col.scss +28 -0
  38. package/sections/sec-card-2col/sec-card-2col.ts +2 -1
  39. package/sections/sec-testimonial-ribbon/sec-testimonial-ribbon.scss +6 -3
  40. package/themes/theme1/index.scss +1 -1
  41. package/themes/theme2/index.scss +1 -1
@@ -77,3 +77,7 @@ Für HNO-Ärzte:
77
77
  ![Untersuchung des Ohrs durch Arzt](https://cdn.leuffen.de//leu-stock/v2/145/c_gfedcba/AdobeStock_176115459.webp)
78
78
  ![Untersuchung der Nase durch Arzt](https://cdn.leuffen.de//leu-stock/v2/146/92-63_gfedcba/AdobeStock_10636763.webp)
79
79
  ![Symbolbild Frau seitlich mit Ohr und Wellen](https://cdn.leuffen.de//leu-stock/v2/137/211-98_gfedcba/AdobeStock_170518761.webp)
80
+
81
+ Für Hebammen und Frauenärzte:
82
+ ![Säugling in Windeln im Bett hell](https://cdn.leuffen.de//leu-stock/v2/175/c_gfedcba/AdobeStock_100664610.webp)
83
+ ![Schwangere Frauen im Kursraum](https://cdn.leuffen.de//leu-stock/v2/176/201-106_gfedcba/AdobeStock_616406996.webp)
@@ -2,7 +2,9 @@
2
2
  {%- if site.data.general.name2 != null -%}{{site.data.general.name2}}<br>{%- endif -%}
3
3
  {{ site.data.general.street }} <br>
4
4
  {{ site.data.general.zip }} {{ site.data.general.city }}<br><br>
5
+ {%- if site.data.general.phone1_text != null -%}
5
6
  <span>{% include do/trans.html val="Telefon" %}:</span> <b><a href="tel:{{site.data.general.phone1}}" title="Telefon" class="text-decoration-none">{{site.data.general.phone1_text}}</a></b><br>
7
+ {%- endif -%}
6
8
  {%- if site.data.general.fax1_text != null -%}
7
9
  <span>{% include do/trans.html val="Telefax" %}:</span> <b>{{site.data.general.fax1_text}}</b><br>
8
10
  {%- endif -%}
@@ -12,7 +12,7 @@ layout: legal
12
12
  {%- endif -%}
13
13
  {{site.data.general.street}}<br>
14
14
  {{site.data.general.zip}} {{site.data.general.city}}<br><br>
15
- <span class="fw-bold">Konakt:</span><br>
15
+ <span class="fw-bold">Kontakt:</span><br>
16
16
  Telefon: <a href="tel:{{site.data.general.phone1}}">{{site.data.general.phone1_text}}</a><br>
17
17
  {% if site.data.general.fax1_text %}
18
18
  Telefax: {{site.data.general.fax1_text}}<br>
@@ -9,19 +9,8 @@
9
9
  ],
10
10
  "author": "",
11
11
  "dependencies": {
12
- "@leuffen/themejs1": "^6.1.28"
12
+ "@leuffen/themejs1": "^7.0.1"
13
13
  },
14
14
  "devDependencies": {
15
- "css-loader": "^6.7.1",
16
- "dart-sass": "^1.25.0",
17
- "esbuild-loader": "^2.20.0",
18
- "mini-css-extract-plugin": "^2.6.1",
19
- "raw-loader": "^4.0.2",
20
- "sass": "^1.56.1",
21
- "sass-loader": "^13.0.2",
22
- "style-loader": "^3.3.1",
23
- "webpack": "^5.75.0",
24
- "webpack-cli": "^5.0.1",
25
- "webpack-dev-server": "^4.11.1"
26
15
  }
27
16
  }
@@ -1,4 +1,4 @@
1
1
 
2
2
 
3
- $accent: #9c8b58;
4
- $primary: #354b68;
3
+ $accent: #b83e8a;
4
+ $primary: #008ea5;
@@ -19,15 +19,23 @@ body_class: ~
19
19
  title: ~
20
20
  type: website
21
21
  ---
22
- # Willkommen in der Hausarztpraxis Graß
23
- {: layout="use: #hero-max; cols:7; class: box"}
22
+ ---
23
+ {: layout="use: #hero-max;"}
24
24
 
25
25
  ![](https://cdn.leuffen.de//leu-stock/v2/32/304-205_gfedcba/AdobeStock_138200241.webp)
26
26
  {: .background}
27
27
 
28
- [[i class="bi bi-calendar-plus-fill fs-3"]<br>Jetzt Termin vereinbaren](/termin){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;;hyphens: none;" target="_blank"}
29
- [[i class="bi bi-card-heading fs-3"]<br>Rezept online anfragen](/online-rezept){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;hyphens: none;"}
30
- [[i class="bi bi-box-arrow-up-right fs-3"]<br>Überweisung an Facharzt](/online-ueberweisung){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;hyphens: none;"}
28
+ # Augenarzt<br>Prof. Dr. Daniel Salchow
29
+ {: .section-h3 layout="use: #hero-slide; align-self: self-end; justify-self: left; x-adjust: 0%; y-adjust: 0% " .sec-box .sec-slide}
30
+
31
+ ---
32
+ {: .section-h4 layout="use: #button-group"}
33
+ [[i class="bi bi-house-add-fill fs-3"]<br>Jetzt als **neuer Patient** anmelden](/online-anmeldung){: .btn .btn-primary}
34
+ [[i class="bi bi-calendar-plus-fill fs-3"]<br>Jetzt **Termin** vereinbaren](/termin){: .btn .btn-primary .text-center}
35
+
36
+ [[i class="bi bi-card-heading fs-3"]<br>**Rezept** online anfragen](/online-rezept){: .btn .btn-primary .text-center }
37
+ [[i class="bi bi-box-arrow-up-right fs-3"]<br>**Überweisung** an Facharzt](/online-ueberweisung){: .btn .btn-primary .text-center}
38
+ [[i class="bi bi-camera-video-fill fs-3"]<br>**Videosprechstunde**](/online-videosprechstunde){: .btn .btn-primary .text-center}
31
39
 
32
40
 
33
41
 
@@ -16,13 +16,16 @@ body_class: ~
16
16
  title: ~
17
17
  type: website
18
18
  ---
19
- # Willkommen in der Hausarztpraxis Graß
20
- {: layout="use: #hero-max; cols:7; class: box"}
19
+ ---
20
+ {: layout="use: #hero-max;"}
21
21
 
22
- ![](https://cdn.leuffen.de//leu-stock/v2/63/c_gfedcba/AdobeStock_86161955.webp)
22
+ ![](https://cdn.leuffen.de//leu-stock/v2/32/304-205_gfedcba/AdobeStock_138200241.webp)
23
23
  {: .background}
24
24
 
25
- [[i class="bi bi-calendar-plus-fill fs-3"]<br>Jetzt Termin vereinbaren](/kontakt){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;;hyphens: none;"}
25
+ # Augenarzt<br>Prof. Dr. Daniel Salchow
26
+ {: .section-h3 layout="use: #hero-slide; align-self: self-end; justify-self: left; x-adjust: 0%; y-adjust: 0% " .sec-box .sec-slide}
27
+
28
+ [[i class="bi bi-calendar-plus-fill fs-3"]<br>Jetzt Termin vereinbaren](/termin){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;;hyphens: none;" target="_blank"}
26
29
  [[i class="bi bi-card-heading fs-3"]<br>Rezept online anfragen](/online-rezept){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;hyphens: none;"}
27
30
  [[i class="bi bi-box-arrow-up-right fs-3"]<br>Überweisung an Facharzt](/online-ueberweisung){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;hyphens: none;"}
28
31
 
@@ -18,13 +18,19 @@ _schiller_instructions: Ändere die Texte und Bilder. Füge am Ende die CTA ein.
18
18
  _schiller_template: pages/index
19
19
  image: ""
20
20
  ---
21
- # Willkommen bei Ihrer Frauenarztpraxis Antje-Christina Permien
22
- {: layout="use: #hero-max; cols:7; class: box"}
21
+ ---
22
+ {: layout="use: #hero-max;"}
23
23
 
24
- ![Antje Christina Permien](https://cdn.leuffen.de//leu-stock/v2/32/304-205_gfedcba/AdobeStock_138200241.webp)
24
+ ![](https://cdn.leuffen.de//leu-stock/v2/32/304-205_gfedcba/AdobeStock_138200241.webp)
25
25
  {: .background}
26
26
 
27
- [Jetzt Termin online vereinbaren](/kontakt){: .btn .btn-primary .btn-lg}
27
+ # Augenarzt<br>Prof. Dr. Daniel Salchow
28
+ {: .section-h3 layout="use: #hero-slide; align-self: self-end; justify-self: left; x-adjust: 0%; y-adjust: 0% " .sec-box .sec-slide}
29
+
30
+ [[i class="bi bi-calendar-plus-fill fs-3"]<br>Jetzt Termin vereinbaren](/termin){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;;hyphens: none;" target="_blank"}
31
+ [[i class="bi bi-card-heading fs-3"]<br>Rezept online anfragen](/online-rezept){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;hyphens: none;"}
32
+ [[i class="bi bi-box-arrow-up-right fs-3"]<br>Überweisung an Facharzt](/online-ueberweisung){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;hyphens: none;"}
33
+
28
34
 
29
35
 
30
36
  ## Headerbar
@@ -15,18 +15,22 @@ short_title: Home
15
15
  _schiller_instructions: "Ändere die Texte und Bilder. Füge am Ende die CTA ein. Gehe auf die im Context genannten Informationen ein. Entferne Links zu nicht vorhandenen Seiten."
16
16
  ---
17
17
 
18
- # Willkommen bei Ihrer <br>Augenpraxis B. Mustermann
19
- {: layout="use: #hero-max; cols:7; class: box"}
18
+ ---
19
+ {: layout="use: #hero-max;"}
20
20
 
21
- ![](cdn:///leu-stock/v/26/1920x1280_1200x800_992x661_768x512_480x320_256x256/AdobeStock_114414482.avif_jpeg)
21
+ ![](https://cdn.leuffen.de//leu-stock/v2/32/304-205_gfedcba/AdobeStock_138200241.webp)
22
22
  {: .background}
23
23
 
24
- [[i class="bi bi-calendar-plus-fill fs-3"]<br>Jetzt Termin vereinbaren](/kontakt){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;;hyphens: none;"}
24
+ # Augenarzt<br>Prof. Dr. Daniel Salchow
25
+ {: .section-h3 layout="use: #hero-slide; align-self: self-end; justify-self: left; x-adjust: 0%; y-adjust: 0% " .sec-box .sec-slide}
26
+
27
+ [[i class="bi bi-calendar-plus-fill fs-3"]<br>Jetzt Termin vereinbaren](/termin){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;;hyphens: none;" target="_blank"}
25
28
  [[i class="bi bi-card-heading fs-3"]<br>Rezept online anfragen](/online-rezept){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;hyphens: none;"}
26
29
  [[i class="bi bi-box-arrow-up-right fs-3"]<br>Überweisung an Facharzt](/online-ueberweisung){: .btn .btn-primary .text-center .btn-lg .m-1 style="width:30%;min-width: 100px;hyphens: none;"}
27
30
 
28
31
 
29
32
 
33
+
30
34
  ## Headerbar
31
35
  {: layout="use: #hero-ribbon"}
32
36
 
@@ -0,0 +1,49 @@
1
+ ---
2
+ description: ""
3
+ icon: bi bi-phone
4
+ image: ~
5
+ lang: de
6
+ layout: article
7
+ order: 71
8
+ permalink: /online-anmeldung
9
+ pid: service/online-anmeldung
10
+ ptags: ~
11
+ published: true
12
+ skipHead: false
13
+ body_class: ~
14
+ title: Online Anmeldung
15
+ type: article
16
+ _schiller_template: service/online-termin
17
+ _schiller_instructions: ""
18
+ ---
19
+ ## Anmeldung für Patienten
20
+ {: layout="use: #sec-card-2col"}
21
+
22
+ > Jetzt als Patient anmelden
23
+
24
+
25
+ Wir freuen uns sehr über Ihr Interesse an unserer Praxis. Da wir noch dabei sind, die letzten Vorbereitungen für unsere Eröffnung zu treffen, bieten wir Ihnen die Möglichkeit, sich vorab zu registrieren. Sobald unsere Praxis eröffnet ist, werden wir uns umgehend bei Ihnen melden, um einen Termin zu vereinbaren.
26
+
27
+ Bitte füllen Sie das untenstehende Formular mit Ihren persönlichen Daten aus. Ihre Daten werden selbstverständlich vertraulich behandelt und nur für interne Zwecke verwendet.
28
+
29
+
30
+ ---
31
+ {: layout="use: #e-form" .aside .mt-5}
32
+
33
+
34
+ [input type="text" name="Name*" required .mb-3]
35
+ [input type="date" name="Geburtsdatum*" required .mb-3]
36
+ [input type="email" name="E-Mail*" required .mb-3]
37
+ [input type="tel" name="Telefon*" required .mb-3]
38
+ [input type="text" name="Krankenkasse (optional)" .mb-3]
39
+ [input type="text" name="Versicherungsnummer (optional)" .mb-3]
40
+ [textarea name="Ihre Nachricht (optional)" .mb-3 style="height: 120px;"]
41
+ [input type="checkbox" name="Datenschutz" label="Ich akzeptiere die Datenschutzbestimmungen" required .mb-3]
42
+ [input type="submit" value="Absenden" .btn .btn-primary .btn-lg .mt-3]
43
+
44
+
45
+
46
+ ## Erfahren Sie mehr über uns
47
+ {: layout="use: #cta-base"}
48
+
49
+ [Unsere Untersuchungen](/leistungen/untersuchungen.de.html) [Über Uns](/ueber-uns) [Kontakt](/kontakt)
@@ -0,0 +1,55 @@
1
+ ---
2
+ description: ""
3
+ icon: bi bi-phone
4
+ image: ~
5
+ lang: de
6
+ layout: article
7
+ order: 71
8
+ permalink: /online-videosprechstunde
9
+ pid: service/online-videosprechstunde
10
+ ptags: ~
11
+ published: true
12
+ skipHead: false
13
+ body_class: ~
14
+ title: Videosprechstunde
15
+ type: article
16
+ _schiller_template: service/online-videosprechstunde
17
+ _schiller_instructions: ""
18
+ ---
19
+ ## Videosprechstunde
20
+ {: layout="use: #sec-card-2col; mobile_reverse: yes "}
21
+
22
+ > Bequem von zu Hause aus mit Ihrem Arzt sprechen!
23
+
24
+ **Die Videosprechstunde ist nur für Patienten verfügbar, die bereits in unserer Praxis bekannt sind.**
25
+
26
+ So funktioniert's:
27
+
28
+ 1. **Terminvereinbarung:** Nutzen Sie das nebenstehende Formular, um einen Termin für Ihre Videosprechstunde zu vereinbaren. Wählen Sie einfach das Datum und die Uhrzeit, die Ihnen am besten passen.
29
+ 2. **Bestätigung & Link:** Nach der Terminvereinbarung erhalten Sie eine Bestätigungs-E-Mail mit allen notwendigen Details sowie einem Link zur Videosprechstunde. Bitte bewahren Sie diese E-Mail sicher auf, da Sie den Link zum vereinbarten Termin benötigen.
30
+ 3. **Technische Vorbereitung:** Sollten Sie Fragen zur technischen Einrichtung haben oder Unterstützung benötigen, steht Ihnen unser Team gerne zur Verfügung. Klicken Sie einfach auf den untenstehenden Button, um zu unserem technischen Anbieter weitergeleitet zu werden, der Ihnen alle notwendigen Informationen zur Einrichtung und Nutzung des Videoanruf-Systems bereitstellt.
31
+ 4. **Ihre Sprechstunde:** Zum Zeitpunkt Ihrer Sprechstunde klicken Sie einfach auf den Link in Ihrer E-Mail, um Ihren Arzt virtuell zu treffen. Stellen Sie sicher, dass Sie eine stabile Internetverbindung haben und sich in einer ruhigen Umgebung befinden.
32
+
33
+
34
+ ### Termin für Videosprechstunde vereinbaren
35
+ {: .sec-aside}
36
+
37
+ ---
38
+ {: layout="use: #e-form" .section-h4 .mt-5}
39
+
40
+
41
+ [input type="hidden" name="Terminart" value="Videosprechstunde" required .mb-3]
42
+ [input type="text" name="Name" required .mb-3]
43
+ [input type="date" name="Geburtsdatum" required .mb-3]
44
+ [input type="email" name="E-Mail" required .mb-3]
45
+ [input type="tel" name="Telefon" required .mb-3]
46
+ [textarea name="Ihre Nachricht (optional)" .mb-3 style="height: 120px;"]
47
+ [input type="checkbox" name="Datenschutz" label="Ich akzeptiere die Datenschutzbestimmungen" required .mb-3]
48
+ [input type="submit" value="Absenden" .btn .btn-primary .btn-lg .mt-3]
49
+
50
+
51
+
52
+ ## Erfahren Sie mehr über uns
53
+ {: layout="use: #cta-base"}
54
+
55
+ [Unsere Untersuchungen](/leistungen/untersuchungen.de.html) [Über Uns](/ueber-uns) [Kontakt](/kontakt)
package/_variables.scss CHANGED
@@ -8,6 +8,8 @@
8
8
  $font-family-base: sans-serif !default;
9
9
  $font-family-header: $font-family-base !default;
10
10
 
11
+ //$enable-dark-mode: false !default;
12
+
11
13
  $accent: #f19045 !default;
12
14
  $primary: #a3979b !default;
13
15
  $success: #22b573 !default;
@@ -15,6 +17,7 @@ $danger: #bf1c0a !default;
15
17
  $warning: #bf760a !default;
16
18
  $dark: #006837 !default;
17
19
 
20
+ $soft-accent: lighten($accent, 40%) !default;
18
21
  $soft-primary: lighten($primary, 40%) !default;
19
22
  $soft-success: lighten($success, 40%) !default;
20
23
  $soft-danger: lighten($danger, 50%) !default;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import { Joda } from "@leuffen/jodastyle";
2
+ Joda.registerTemplate("button-group",
3
+ // language=HTML
4
+ `
5
+ <div class="tjs-button-group">
6
+ <slot></slot>
7
+ </div>
8
+ `);
@@ -1 +1,3 @@
1
1
  export * from "./e-form/e-form";
2
+ export * from "./hero-slide/hero-slide";
3
+ export * from "./button-group/button-group";
@@ -1 +1,3 @@
1
1
  export * from "./e-form/e-form";
2
+ export * from "./hero-slide/hero-slide";
3
+ export * from "./button-group/button-group";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import { Joda } from "@leuffen/jodastyle";
2
+ Joda.registerTemplate("hero-slide",
3
+ // language=HTML
4
+ `
5
+
6
+ <article class="hero-slide :: mobile :xl: desktop">
7
+ <slot></slot>
8
+ </article>
9
+
10
+ `, {
11
+ cols: 6
12
+ }, {
13
+ onAfterConnectedCallback: (el) => {
14
+ }
15
+ });
@@ -7,18 +7,12 @@ Joda.registerTemplate("hero-max",
7
7
  <slot data-select="img.background, :scope>.content>p.background>img" class="slideshow"></slot>
8
8
  <div class="tjs__hero-max--out-wrapper ">
9
9
  <div class="tjs__hero-max--container [[layout.container]] ">
10
- <div class="tjs__hero-max--inner-wrapper :: :xxl: col-[[layout.cols]]">
11
- <div class="tjs__hero-max--section-text">
12
- <slot></slot>
13
- </div>
14
- </div>
15
- </div>
10
+ <slot class="content" data-select=".slide || :scope > * "></slot>
16
11
  </div>
17
12
  </div>
18
13
  </section>
19
14
 
20
15
  `, {
21
- cols: "6",
22
16
  'aspect-ratio': "5/4",
23
17
  }, {
24
18
  onAfterConnectedCallback: (el) => {
@@ -2,26 +2,31 @@
2
2
  import { Joda } from "@leuffen/jodastyle";
3
3
  const html = `
4
4
 
5
- <nav class="navbar-centerlogo navbar :: mobile :xl:">
6
- <div class="navbar__wrapper [[ layout.container ]]">
7
- <slot class="" data-select="ul.navbar-top "></slot>
5
+ <nav class="navbar-centerlogo">
6
+ <div class="e--spacer"></div>
7
+ <div class="e--backdrop"></div>
8
+ <div class="navbar">
9
+ <div class="navbar__wrapper [[ layout.container ]]">
10
+ <slot class="" data-select="ul.navbar-top "></slot>
8
11
 
9
- <slot class="navbar__logo" data-select="[[ layout.slot_logo_selector ]]"></slot>
12
+ <slot class="navbar__logo" data-select="[[ layout.slot_logo_selector ]]"></slot>
10
13
 
11
- <div class="burger-menu" onclick="this.closest('nav').classList.toggle('sidebar')">
12
- <div class="burger-menu__text">
13
- [[ layout.burger_text ]]
14
- </div>
15
- <div class="burger-menu__burger">
16
- <div></div>
17
- <div></div>
18
- <div></div>
14
+
15
+
16
+ <div class="burger-menu" onclick="this.closest('nav').classList.toggle('sidebar')">
17
+ <div class="burger-menu__text">
18
+ [[ layout.burger_text ]]
19
+ </div>
20
+ <div class="burger-menu__burger">
21
+ <div></div>
22
+ <div></div>
23
+ <div></div>
24
+ </div>
19
25
  </div>
20
- </div>
21
26
 
27
+ </div>
22
28
  </div>
23
29
 
24
-
25
30
  <aside>
26
31
  <div class="backdrop" onclick="this.closest('nav').classList.remove('sidebar')"></div>
27
32
  <div class="menu">
@@ -38,19 +43,35 @@ const html = `
38
43
  `;
39
44
  Joda.registerTemplate("navbar-centerlogo", html, {
40
45
  slot_logo_selector: ".brand",
41
- burger_text: "Menu",
42
- container: "container"
46
+ burger_text: "Menü",
47
+ container: "container",
48
+ scrollup_position: 100
43
49
  }, {
44
- "onAfterConnectedCallback": (element) => {
50
+ "onAfterAllTemplatesConnectedCallback": (element) => {
51
+ // Query css variable --layout-scrollup from elment
45
52
  // If the page is scrolled down, the navbar should be sticky
46
53
  // Update this on scroll event
47
- window.addEventListener("scroll", () => {
54
+ let lastY = 0;
55
+ let navbar = element.querySelector(".navbar");
56
+ let changer = () => {
48
57
  if (window.scrollY > 1) {
49
- element.classList.add("scrolled");
58
+ navbar.classList.add("scrolled");
59
+ navbar.classList.remove("unscrolled");
60
+ }
61
+ else {
62
+ navbar.classList.remove("scrolled");
63
+ navbar.classList.add("unscrolled");
64
+ }
65
+ let isScrollingUp = window.scrollY < lastY;
66
+ lastY = window.scrollY;
67
+ if (window.scrollY > 250 && !isScrollingUp) {
68
+ navbar.classList.add("scrollup");
50
69
  }
51
70
  else {
52
- element.classList.remove("scrolled");
71
+ navbar.classList.remove("scrollup");
53
72
  }
54
- });
73
+ };
74
+ window.addEventListener("scroll", changer, { passive: true });
75
+ changer();
55
76
  }
56
77
  });
@@ -5,13 +5,14 @@ Joda.registerTemplate("sec-card-2col",
5
5
 
6
6
  <section class="tjs__sec-card-2col [[layout.class]] :: mobile :lg: desktop">
7
7
  <div class="tjs__sec-card-2col--container [[layout.container]]">
8
+ <slot class="title" data-select="img.title || .title > img"></slot>
8
9
  <div class="row [[layout.order === 'reverse' ? 'flex-column-reverse': '']] [[layout.mobile_reverse === 'yes' ? ':: flex-column-reverse :lg:': '']]">
9
10
  <div class="tjs__sec-card-2col--col-start tjs__section-text p-4 p-lg-5 :: col-12 :lg: col-[[layout.cols]]">
10
11
  <slot></slot>
11
12
  </div>
12
13
  <div class="tjs__sec-card-2col--col-end image-side :: col-12 :lg: col-[[12 - layout.cols]] ">
13
14
 
14
- <slot class="[[layout.slideshow === true ? 'slideshow' : '']]" data-select="img, .children > .section-hr.aside, .aside" [[layout.slideshow !== true ? 'data-limit="1"' : '' ]]></slot>
15
+ <slot class="[[layout.slideshow === true ? 'slideshow' : '']]" data-select=".aside || img, .children > .section-hr.aside" [[layout.slideshow !== true ? 'data-limit="1"' : '' ]]></slot>
15
16
  </div>
16
17
  </div>
17
18
  </div>
@@ -0,0 +1,3 @@
1
+ .address {
2
+ white-space: pre-wrap;
3
+ }
@@ -0,0 +1,31 @@
1
+
2
+ .tjs-button-group {
3
+
4
+ --layout-gap: 1rem;
5
+ // --layout-breakpoint: 1024px; Not Working on media query
6
+
7
+ &>slot {
8
+ display: flex;
9
+ flex-wrap: wrap;
10
+
11
+ &>* {
12
+ width: 100%;
13
+ }
14
+ p {
15
+ width: 100%;
16
+ display: flex;
17
+ flex-direction: row;
18
+ @media (width < 500px) {
19
+ flex-direction: column;
20
+ }
21
+ align-items: stretch;
22
+ gap: var(--layout-gap);
23
+ &>* {
24
+ flex-grow: 1;
25
+
26
+ }
27
+ }
28
+
29
+ }
30
+
31
+ }
@@ -0,0 +1,10 @@
1
+ import {Joda} from "@leuffen/jodastyle";
2
+
3
+
4
+ Joda.registerTemplate("button-group",
5
+ // language=HTML
6
+ `
7
+ <div class="tjs-button-group">
8
+ <slot></slot>
9
+ </div>
10
+ `);
@@ -2,3 +2,6 @@
2
2
  @import "background-color";
3
3
  @import "list-style";
4
4
  @import "e-form/e-form";
5
+ @import "hero-slide/hero-slide";
6
+ @import "button-group/button-group";
7
+ @import "text-format";
@@ -1 +1,3 @@
1
1
  export * from "./e-form/e-form";
2
+ export * from "./hero-slide/hero-slide";
3
+ export * from "./button-group/button-group";
@@ -0,0 +1,44 @@
1
+
2
+
3
+ .hero-slide {
4
+
5
+ --layout-box-color: rgba(255, 255, 255, 0.8);
6
+ --layout-text-shadow: 0 0 2px rgba(255, 255, 255, 1);
7
+ --layout-align-self: center;
8
+ --layout-justify-self: center;
9
+ --layout-cols: 6;
10
+
11
+ --layout-y-adjust: 25%;
12
+ --layout-x-adjust: 25%;
13
+
14
+ align-self: var(--layout-align-self);
15
+ justify-self: var(--layout-justify-self);
16
+
17
+
18
+
19
+ &.desktop {
20
+ margin-top: var(--layout-y-adjust);
21
+ margin-left: var(--layout-x-adjust);
22
+ width: calc(100% / 12 * var(--layout-cols));
23
+ &.box {
24
+ padding: 10px;
25
+ background-color: var(--layout-box-color);
26
+ }
27
+
28
+ &.glow {
29
+ &>slot {
30
+ &>h1,h2,h3,&>p {
31
+ text-shadow: var(--layout-text-shadow);
32
+ }
33
+ }
34
+ }
35
+ }
36
+ &.mobile {
37
+ width: 100%;
38
+ }
39
+
40
+
41
+
42
+
43
+
44
+ }
@@ -0,0 +1,21 @@
1
+ import {Joda} from "@leuffen/jodastyle";
2
+
3
+ Joda.registerTemplate("hero-slide",
4
+ // language=HTML
5
+ `
6
+
7
+ <article class="hero-slide :: mobile :xl: desktop">
8
+ <slot></slot>
9
+ </article>
10
+
11
+ `,
12
+ {
13
+ cols: 6
14
+ },
15
+ {
16
+ onAfterConnectedCallback: (el) => {
17
+
18
+ }
19
+ }
20
+
21
+ );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leuffen/themejs1",
3
- "version": "7.0.1",
3
+ "version": "7.0.2",
4
4
 
5
5
  "description": "",
6
6
  "license": "proprietary",
@@ -54,17 +54,19 @@
54
54
  ],
55
55
  "author": "",
56
56
  "dependencies": {
57
- "@leuffen/jodastyle": "^3.0.9",
58
- "@kasimirjs/embed": "^1.0.8",
59
- "@leuffen/isl-base": "^3.0.4",
60
- "@leuffen/liscom": "^2.0.8",
61
- "@leuffen/liscom-loader": "^1.0.6",
62
- "@leuffen/liweco-base": "^2.0.2",
57
+ "@leuffen/jodastyle": "^3.1.2",
58
+ "@kasimirjs/embed": "^1.0.23",
59
+ "@leuffen/isl-base": "^3.0.7",
60
+ "@leuffen/liscom": "^2.0.10",
61
+ "@leuffen/liscom-loader": "^1.0.9",
62
+ "@leuffen/liweco-base": "^2.0.3",
63
63
  "@micx/lib-js": "^1.0.22",
64
64
  "bootstrap": "^5.3.0"
65
+
66
+
67
+
65
68
  },
66
69
  "devDependencies": {
67
- "@micx/lib-js": "^1.0.18",
68
70
  "@kasimirjs/kit-bootstrap": "^1.0.4",
69
71
  "markdown-it": "^13.0.1",
70
72
  "markdown-it-attrs": "^4.1.6",
@@ -3,7 +3,7 @@
3
3
  --t-background-footer: #{$background-footer};
4
4
  --t-section-background: transparent;
5
5
  --t-section-background-accent: #{$background-accent};
6
- --t-section-background-primary: #D6EED9;
6
+ --t-section-background-primary: #{$soft-primary};
7
7
 
8
8
 
9
9
  --t-font-family-base: #{$font-family-base};
@@ -34,5 +34,8 @@
34
34
  --t-section-inner-padding: 3rem;
35
35
 
36
36
  --t-accent: #{$accent};
37
+ --t-primary: #{$primary};
38
+ --t-soft-primary: #{$soft-primary};
39
+ --t-soft-accent: #{$soft-accent};
37
40
 
38
41
  }
@@ -43,6 +43,11 @@
43
43
  }
44
44
 
45
45
  }
46
+
47
+ .tjs__hero-max--container {
48
+ height: 100%;
49
+ }
50
+
46
51
  min-height: var(--layout-min-height, 400px);
47
52
  position: relative;
48
53
  &.tjs__hero-max--autoheight {
@@ -87,33 +92,18 @@
87
92
 
88
93
 
89
94
 
90
- h1 {
91
- font-size: calc(1.5em + 1vw);
92
- }
93
95
 
94
96
  .slideshow:empty {
95
97
  display: none;
96
98
  }
97
99
 
98
- h1.glow {
99
- color: white;
100
- text-shadow: 0 0 10px var(--t-text-color), 0 0 20px var(--t-text-color), 0 0 30px var(--t-text-color), 0 0 40px var(--t-text-color), 0 0 50px var(--t-text-color), 0 0 60px var(--t-text-color), 0 0 70px var(--t-text-color);
101
- }
100
+ slot.content{
101
+ display: grid;
102
102
 
103
-
104
- .tjs-_hero-max--inner-wrapper {
105
- position: relative;
106
- width: 100%;
107
103
  height: 100%;
108
104
  }
109
105
 
110
106
 
111
- .tjs__hero-max--section-text {
112
- }
113
-
114
- .offsetmodifier {
115
- height: 100px;
116
- }
117
107
 
118
108
 
119
109
  }
@@ -9,19 +9,13 @@ Joda.registerTemplate("hero-max",
9
9
  <slot data-select="img.background, :scope>.content>p.background>img" class="slideshow"></slot>
10
10
  <div class="tjs__hero-max--out-wrapper ">
11
11
  <div class="tjs__hero-max--container [[layout.container]] ">
12
- <div class="tjs__hero-max--inner-wrapper :: :xxl: col-[[layout.cols]]">
13
- <div class="tjs__hero-max--section-text">
14
- <slot></slot>
15
- </div>
16
- </div>
17
- </div>
12
+ <slot class="content" data-select=".slide || :scope > * "></slot>
18
13
  </div>
19
14
  </div>
20
15
  </section>
21
16
 
22
17
  `,
23
18
  {
24
- cols: "6",
25
19
  'aspect-ratio': "5/4",
26
20
  },
27
21
  {
@@ -28,7 +28,9 @@
28
28
  padding: 20px; // Make the clickable area bigger
29
29
  margin: -20px; // Make the clickable area bigger
30
30
  z-index: 3;
31
- opacity: 0.6;transform: scale(1); transition: all 0.1s ease-in-out;
31
+ transition: all 0.1s ease-in-out;
32
+ opacity: 0.7;
33
+ transform: scale(1);
32
34
  div {
33
35
  width: 35px;
34
36
  height: 3px;
@@ -0,0 +1,80 @@
1
+ aside {
2
+ &>.backdrop {
3
+ position: fixed;
4
+ background-color: var(--nav-sidbar-backgrond-color, $primary);
5
+ opacity: 0.4;
6
+ top:0; bottom: 0; left: 0; right: 0;
7
+ width: 100%;
8
+ height: 100%;
9
+ transform: scale(0%);
10
+ -webkit-transform: scale(0, 0);
11
+ transition: all 0.1s ease-in-out;
12
+ z-index:9998;
13
+ }
14
+ &>.menu {
15
+
16
+
17
+ position: fixed;
18
+ top: 0; bottom: 0; right: 0;
19
+ width: 90vw;
20
+ max-width: 300px;
21
+ z-index: 9999;
22
+ transform: translateX(100%);
23
+ background-color: var(--nav-sidbar-backgrond-color, $primary);
24
+ // Do big black shadow
25
+ box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
26
+ transition: all 0.2s ease-in-out;
27
+
28
+ ul {
29
+ padding: 0;
30
+ margin: 0;
31
+ &>li {
32
+ list-style: none;
33
+ width: 100%;
34
+ &>a {
35
+ &:hover {
36
+ background-color: var(--nav-sidbar-backgrond-color-hover, darken($primary, 10%));
37
+ }
38
+
39
+ display: block;
40
+ text-decoration: none;
41
+ width: 100%;
42
+ padding: 15px;
43
+ color: $white;
44
+ border-bottom: 1px solid rgba(255, 255, 255, 0.5);
45
+ }
46
+ }
47
+ }
48
+
49
+ &>.menu-header {
50
+ width: 100%;
51
+ border-bottom: 1px solid rgba(255, 255,255,0.5);
52
+ display: flex;
53
+ align-content: center;
54
+ justify-content: end;
55
+
56
+ &>svg {
57
+ cursor: pointer;
58
+ margin: 20px;
59
+ color: $white;
60
+ height: 38px;
61
+ width: 38px;
62
+ }
63
+ }
64
+ }
65
+
66
+ }
67
+
68
+ &.sidebar {
69
+ aside {
70
+ &>.backdrop {
71
+ transform: scale(100%);
72
+ -webkit-transform: scale(100%, 100%);
73
+ }
74
+ &>.menu {
75
+ transform: translateX(0%);
76
+ }
77
+
78
+
79
+ }
80
+ }
@@ -17,159 +17,133 @@
17
17
 
18
18
  --layout-bg-default: transparent;
19
19
  --layout-bg-sticky: #fff;
20
- --layout-bg-sticky-shadow: 0px 1px 2px #000;
20
+ --layout-bg-sticky-shadow: 0px 1px 5px rgba(0, 0, 0, 0.6);
21
21
  --layout-burger-color: var(--t-accent);
22
22
  --layout-menu-color: var(--bs-primary);
23
23
  --layout-image-height: 80px;
24
+ --layout-zoom-ratio: 2;
25
+ --layout-zoom-ratio-mobile: 1.3;
26
+ --layout-backdrop-height: 20px;
24
27
 
28
+ --layout-spacer-height: 0px;
29
+ --layout-spacer-color: rgba(255,255,255,1);
30
+ --layout-spacer-height-mobile: calc(var(--layout-image-height) * var(--layout-zoom-ratio-mobile));
25
31
 
26
- background-color: var(--layout-bg-default);
27
- position: absolute;
28
- top: 0;
29
- width: 100vw;
30
- height: auto;
31
- z-index: 999;
32
32
 
33
- .brand img {
34
- height: auto;
35
-
36
- width: 50%;
33
+ --e-zoom-ratio: var(--layout-zoom-ratio);
34
+ @media (width < 750px) {
35
+ --e-zoom-ratio: var(--layout-zoom-ratio-mobile);
37
36
  }
38
37
 
39
- &.scrolled img.brand {
40
- width: auto;
41
- height: 80px;
42
-
43
- }
44
38
 
45
39
 
46
- &>.navbar__wrapper {
47
- display: flex;
48
- justify-content: space-between;
49
- flex-wrap: nowrap;
50
- flex-direction: row;
51
40
 
52
- & > *{
53
- flex-grow: 1;
54
- display: flex;
55
- width: 33%;
41
+ &>.e--spacer {
42
+ @media (width < 750px) {
43
+ height: var(--layout-spacer-height-mobile);
56
44
  }
57
- &>.navbar__logo {
58
- transition: all 0.5s ease-in-out;
59
- align-items: center;
60
- justify-content: center;
61
- display: flex;
45
+ height: var(--layout-spacer-height);
46
+ position: relative;
47
+ background-color: var(--layout-spacer-color);
62
48
 
49
+ }
50
+ &>.e--backdrop {
51
+ position: absolute;
52
+ width: 100vw;
53
+ left: 0;
54
+ z-index: 9;
55
+ height: var(--layout-backdrop-height);
56
+ background: linear-gradient(180deg, var(--layout-spacer-color) 0%, rgba(0,0,0,0) 100%);
57
+ }
58
+ &>.navbar {
59
+ background-color: var(--layout-bg-default);
63
60
 
64
- img {
65
- height: var(--layout-image-height);
66
- transition: all 0.25s ease-in-out;
67
- width: auto; transform: translateY(50%) scale(2);
68
- max-width: 70vw;
69
- }
61
+ position: absolute;
62
+ top: 0;
63
+ width: 100vw;
64
+ height: auto;
65
+ z-index: 999;
70
66
 
71
- }
72
- @import "burger-menu";
67
+ .brand img {
68
+ height: auto;
73
69
 
74
- }
70
+ width: 50%;
71
+ }
75
72
 
76
- transition: background-color 0.2s ease-in-out;
77
73
 
74
+ &.unscrolled {
78
75
 
79
76
 
80
- &.scrolled {
81
- height: var(--layout-scrolled-height);
82
- position: fixed;
83
- top: 0;
84
- width: 100vw;
85
- background-color: var(--layout-bg-sticky);
86
- .navbar__logo img {
87
- transform: translateY(0) scale(1);
88
77
  }
89
- }
90
78
 
79
+ &.scrolled {
80
+ box-shadow: var(--layout-bg-sticky-shadow);
81
+ img.brand {
82
+ width: auto;
83
+ height: 80px;
91
84
 
85
+ }
86
+ }
92
87
 
93
- aside {
94
- &>.backdrop {
95
- position: fixed;
96
- background-color: var(--nav-sidbar-backgrond-color, $primary);
97
- opacity: 0.4;
98
- top:0; bottom: 0; left: 0; right: 0;
99
- width: 100%;
100
- height: 100%;
101
- transform: scale(0%);
102
- -webkit-transform: scale(0, 0);
103
- transition: all 0.1s ease-in-out;
104
- z-index:9998;
88
+
89
+ transform: translateY(0);
90
+ transition: all 0.3s ease-in-out;
91
+ &.scrollup {
92
+ transform: translateY(-100%);
105
93
  }
106
- &>.menu {
107
94
 
108
95
 
109
- position: fixed;
110
- top: 0; bottom: 0; right: 0;
111
- width: 90vw;
112
- max-width: 300px;
113
- z-index: 9999;
114
- transform: translateX(100%);
115
- background-color: var(--nav-sidbar-backgrond-color, $primary);
116
- // Do big black shadow
117
- box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
118
- transition: all 0.2s ease-in-out;
119
-
120
- ul {
121
- padding: 0;
122
- margin: 0;
123
- &>li {
124
- list-style: none;
125
- width: 100%;
126
- &>a {
127
- &:hover {
128
- background-color: var(--nav-sidbar-backgrond-color-hover, darken($primary, 10%));
129
- }
130
-
131
- display: block;
132
- text-decoration: none;
133
- width: 100%;
134
- padding: 15px;
135
- color: $white;
136
- border-bottom: 1px solid rgba(255, 255, 255, 0.5);
137
- }
138
- }
139
- }
96
+ &>.navbar__wrapper {
97
+ display: flex;
98
+ justify-content: space-between;
99
+ flex-wrap: nowrap;
100
+ flex-direction: row;
140
101
 
141
- &>.menu-header {
142
- width: 100%;
143
- border-bottom: 1px solid rgba(255, 255,255,0.5);
102
+ & > *{
103
+ flex-grow: 1;
144
104
  display: flex;
145
- align-content: center;
146
- justify-content: end;
147
-
148
- &>svg {
149
- cursor: pointer;
150
- margin: 20px;
151
- color: $white;
152
- height: 38px;
153
- width: 38px;
105
+ width: 33%;
106
+ }
107
+ &>.navbar__logo {
108
+ transition: all 0.5s ease-in-out;
109
+ align-items: center;
110
+ justify-content: center;
111
+ display: flex;
112
+
113
+
114
+ img {
115
+ height: var(--layout-image-height);
116
+ transition: all 0.25s ease-in-out;
117
+ width: auto; transform: translateY(50% ) scale(var(--e-zoom-ratio));
118
+ max-width: 70vw;
154
119
  }
120
+
155
121
  }
122
+ @import "burger-menu";
123
+
156
124
  }
157
125
 
158
- }
159
126
 
160
- &.sidebar {
161
- aside {
162
- &>.backdrop {
163
- transform: scale(100%);
164
- -webkit-transform: scale(100%, 100%);
165
- }
166
- &>.menu {
167
- transform: translateX(0%);
168
- }
169
127
 
170
128
 
129
+
130
+ &.scrolled {
131
+ height: var(--layout-scrolled-height);
132
+ position: fixed;
133
+ top: 0;
134
+ width: 100vw;
135
+ background-color: var(--layout-bg-sticky);
136
+ .navbar__logo img {
137
+ transform: translateY(0) scale(1);
138
+ }
171
139
  }
140
+
172
141
  }
173
142
 
174
143
 
144
+
145
+
146
+ @import "sidebar";
147
+
148
+
175
149
  }
@@ -4,26 +4,31 @@ import {Joda, JodaDescriptionManager} from "@leuffen/jodastyle";
4
4
 
5
5
  const html = `
6
6
 
7
- <nav class="navbar-centerlogo navbar :: mobile :xl:">
8
- <div class="navbar__wrapper [[ layout.container ]]">
9
- <slot class="" data-select="ul.navbar-top "></slot>
7
+ <nav class="navbar-centerlogo">
8
+ <div class="e--spacer"></div>
9
+ <div class="e--backdrop"></div>
10
+ <div class="navbar">
11
+ <div class="navbar__wrapper [[ layout.container ]]">
12
+ <slot class="" data-select="ul.navbar-top "></slot>
10
13
 
11
- <slot class="navbar__logo" data-select="[[ layout.slot_logo_selector ]]"></slot>
14
+ <slot class="navbar__logo" data-select="[[ layout.slot_logo_selector ]]"></slot>
12
15
 
13
- <div class="burger-menu" onclick="this.closest('nav').classList.toggle('sidebar')">
14
- <div class="burger-menu__text">
15
- [[ layout.burger_text ]]
16
- </div>
17
- <div class="burger-menu__burger">
18
- <div></div>
19
- <div></div>
20
- <div></div>
16
+
17
+
18
+ <div class="burger-menu" onclick="this.closest('nav').classList.toggle('sidebar')">
19
+ <div class="burger-menu__text">
20
+ [[ layout.burger_text ]]
21
+ </div>
22
+ <div class="burger-menu__burger">
23
+ <div></div>
24
+ <div></div>
25
+ <div></div>
26
+ </div>
21
27
  </div>
22
- </div>
23
28
 
29
+ </div>
24
30
  </div>
25
31
 
26
-
27
32
  <aside>
28
33
  <div class="backdrop" onclick="this.closest('nav').classList.remove('sidebar')"></div>
29
34
  <div class="menu">
@@ -44,20 +49,40 @@ Joda.registerTemplate(
44
49
  html,
45
50
  {
46
51
  slot_logo_selector: ".brand",
47
- burger_text: "Menu",
48
- container: "container"
52
+ burger_text: "Menü",
53
+ container: "container",
49
54
 
55
+ scrollup_position: 100
50
56
  },
51
57
  {
52
- "onAfterConnectedCallback": (element: HTMLElement) => {
58
+ "onAfterAllTemplatesConnectedCallback": (element: HTMLElement) => {
59
+ // Query css variable --layout-scrollup from elment
60
+
53
61
  // If the page is scrolled down, the navbar should be sticky
54
62
  // Update this on scroll event
55
- window.addEventListener("scroll", () => {
63
+ let lastY = 0;
64
+ let navbar = element.querySelector(".navbar")
65
+ let changer = () => {
56
66
  if (window.scrollY > 1) {
57
- element.classList.add("scrolled");
67
+ navbar.classList.add("scrolled");
68
+ navbar.classList.remove("unscrolled");
58
69
  } else {
59
- element.classList.remove("scrolled");
70
+ navbar.classList.remove("scrolled");
71
+ navbar.classList.add("unscrolled");
60
72
  }
61
- });
73
+
74
+ let isScrollingUp = window.scrollY < lastY;
75
+ lastY = window.scrollY;
76
+
77
+ if (window.scrollY > 250 && ! isScrollingUp) {
78
+ navbar.classList.add("scrollup");
79
+ } else {
80
+ navbar.classList.remove("scrollup");
81
+ }
82
+
83
+ }
84
+
85
+ window.addEventListener("scroll", changer, {passive: true});
86
+ changer()
62
87
  }
63
88
  });
@@ -5,11 +5,39 @@
5
5
  background: var(--t-section-background);
6
6
 
7
7
 
8
+ --layout-title-aspect-ratio: 16 / 9;
9
+
10
+
11
+
8
12
  .tjs__sec-card-2col--col-start > slot > .children > *:last-child {
9
13
  margin-bottom: 0 !important;
10
14
  }
11
15
 
12
16
 
17
+
18
+ slot.title {
19
+ &:empty {
20
+ display: none;
21
+ }
22
+ display: block;
23
+ width: 100%;
24
+ text-align: center;
25
+
26
+ aspect-ratio: var(--layout-title-aspect-ratio);
27
+
28
+ object-fit: cover;
29
+ object-position: center center;
30
+ &>p {
31
+ display: contents;
32
+ }
33
+ img {
34
+ width: 100%;
35
+ height: 100%;
36
+ object-fit: cover;
37
+ object-position: center center;
38
+ }
39
+ }
40
+
13
41
  map.aside {
14
42
  --joda-class: "";
15
43
  display: block;
@@ -10,13 +10,14 @@ Joda.registerTemplate(
10
10
 
11
11
  <section class="tjs__sec-card-2col [[layout.class]] :: mobile :lg: desktop">
12
12
  <div class="tjs__sec-card-2col--container [[layout.container]]">
13
+ <slot class="title" data-select="img.title || .title > img"></slot>
13
14
  <div class="row [[layout.order === 'reverse' ? 'flex-column-reverse': '']] [[layout.mobile_reverse === 'yes' ? ':: flex-column-reverse :lg:': '']]">
14
15
  <div class="tjs__sec-card-2col--col-start tjs__section-text p-4 p-lg-5 :: col-12 :lg: col-[[layout.cols]]">
15
16
  <slot></slot>
16
17
  </div>
17
18
  <div class="tjs__sec-card-2col--col-end image-side :: col-12 :lg: col-[[12 - layout.cols]] ">
18
19
 
19
- <slot class="[[layout.slideshow === true ? 'slideshow' : '']]" data-select="img, .children > .section-hr.aside, .aside" [[layout.slideshow !== true ? 'data-limit="1"' : '' ]]></slot>
20
+ <slot class="[[layout.slideshow === true ? 'slideshow' : '']]" data-select=".aside || img, .children > .section-hr.aside" [[layout.slideshow !== true ? 'data-limit="1"' : '' ]]></slot>
20
21
  </div>
21
22
  </div>
22
23
  </div>
@@ -1,7 +1,10 @@
1
1
  .tjs__sec-testimonial-ribbon {
2
- padding: var(--t-section-padding);
3
2
 
4
- background-color: var(--t-section-background);
3
+ --layout-bg: var(--t-section-background);
4
+ --layout-bg-ribbon: var(--t-soft-primary);
5
+
6
+ padding: var(--t-section-padding);
7
+ background-color: var(--layout-bg);
5
8
 
6
9
  &.mobile {
7
10
  padding-top: 40px;
@@ -26,7 +29,7 @@
26
29
  & > .tjs__sec-testimonial-ribbon--wrapper {
27
30
  padding-top: 40px;
28
31
  padding-bottom: 40px;
29
- background-color: var(--t-section-background-primary);
32
+ background-color: var(--layout-bg-ribbon);
30
33
  font-size: 1.2em;
31
34
  font-style: italic;
32
35
  letter-spacing: 1px;
@@ -157,7 +157,7 @@
157
157
  }
158
158
  .content {
159
159
  background-color: #fff;
160
- p {
160
+ p,ul,ol {
161
161
  margin: 20px 20px 20px 0;
162
162
  }
163
163
  }
@@ -187,7 +187,7 @@ $header-text-transform: unset !default;
187
187
  }
188
188
  .content {
189
189
  background-color: #fff;
190
- p {
190
+ p,ul,ol{
191
191
  margin: 20px 20px 20px 0;
192
192
  }
193
193
  }