@profitlich/template-toolkit 2.18.6 → 2.19.0

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.
@@ -1,6 +1,25 @@
1
1
  import '@mux/mux-player';
2
2
  import './mux-player.scss';
3
3
 
4
+ /**
5
+ * Lädt Mux-Videos lazy und steuert Autoplay per IntersectionObserver.
6
+ *
7
+ * Ladereihenfolge:
8
+ * 1. observeLazyElements() beobachtet alle .mux-player-Container.
9
+ * 2. Betritt ein Container den Viewport, ersetzt #handleLazyLoad ihn durch
10
+ * ein <mux-player>-Element und ruft handleVisibilityChange auf.
11
+ * 3. handleVisibilityChange → #setup für alle sichtbaren Videos:
12
+ * - Autoplay: muted, Controls versteckt, #playPauseObserver startet
13
+ * - Kein Autoplay: keine Änderungen, User steuert Wiedergabe selbst
14
+ * - display:none beim Laden: Setup wird übersprungen; Projekt ruft
15
+ * handleVisibilityChange erneut auf, sobald das Video sichtbar wird.
16
+ * 4. onPlayerCreated (optional): wird für alle Player aufgerufen, unabhängig
17
+ * von Autoplay und nach dem internen Setup.
18
+ *
19
+ * Pausierlogik:
20
+ * - Viewport verlassen → #handlePlayPause via IntersectionObserver (nur Autoplay)
21
+ * - display:none gesetzt → handleVisibilityChange (manuell vom Projekt aufzurufen)
22
+ */
4
23
  export class MuxPlayer {
5
24
  #lazyLoadObserver;
6
25
  #playPauseObserver;
@@ -28,6 +47,7 @@ export class MuxPlayer {
28
47
  return;
29
48
  }
30
49
 
50
+ const autoplay = player.dataset.autoplay === 'true';
31
51
  if (autoplay) player.muted = true;
32
52
  if (autoplay) player.style.setProperty('--controls', 'none');
33
53
  if (this.#loop) player.loop = true;
@@ -35,16 +55,19 @@ export class MuxPlayer {
35
55
  // Flag setzen, um zukünftige Ausführungen zu verhindern.
36
56
  player.dataset.isSetup = 'true';
37
57
 
38
- // Den playPauseObserver starten, sobald die Daten geladen sind.
39
- if (player.readyState >= 2) { // HAVE_CURRENT_DATA oder höher
40
- this.#playPauseObserver.observe(player);
41
- } else {
42
- player.addEventListener('loadeddata', () => {
58
+ if (autoplay) {
59
+ if (player.readyState >= 2) { // HAVE_CURRENT_DATA oder höher
43
60
  this.#playPauseObserver.observe(player);
44
- }, { once: true });
61
+ } else {
62
+ player.addEventListener('loadeddata', () => {
63
+ this.#playPauseObserver.observe(player);
64
+ }, { once: true });
65
+ }
45
66
  }
46
67
  }
47
68
 
69
+ // Für Videos, die ein-/ausgeblendet werden
70
+ // zum Beispiel Startseite Angebote
48
71
  handleVisibilityChange(player) {
49
72
  const isVisible = window.getComputedStyle(player).display !== 'none';
50
73
 
@@ -99,13 +122,16 @@ export class MuxPlayer {
99
122
 
100
123
  if (autoplay) {
101
124
  player.setAttribute('data-autoplay', 'true');
125
+ } else {
126
+ player.setAttribute('data-autoplay', 'false');
102
127
  }
103
128
 
104
- const setPlaying = value => player.setAttribute('data-playing', value);
129
+ const setStatus = value => player.setAttribute('data-status', value);
105
130
 
106
- player.addEventListener('playing', () => setPlaying('true'));
107
- player.addEventListener('pause', () => setPlaying('pause'));
108
- player.addEventListener('ended', () => setPlaying('ended'));
131
+ player.addEventListener('loadstart', () => setStatus('loadstart'));
132
+ player.addEventListener('playing', () => setStatus('playing'));
133
+ player.addEventListener('pause', () => setStatus('pause'));
134
+ player.addEventListener('ended', () => setStatus('ended'));
109
135
 
110
136
  console.log(
111
137
  'Toolkit Video',
@@ -115,17 +141,17 @@ export class MuxPlayer {
115
141
  );
116
142
 
117
143
  container.replaceWith(player);
118
- setPlaying('false');
144
+ setStatus('false');
119
145
 
146
+ this.handleVisibilityChange(player);
120
147
  if (this.#onPlayerCreated) {
121
148
  this.#onPlayerCreated(player, container);
122
- } else if (autoplay) {
123
- this.handleVisibilityChange(player);
124
149
  }
125
150
  }
126
151
  }
127
152
  }
128
153
 
154
+ // Für autoplay Videos: play und pause
129
155
  #handlePlayPause(entries) {
130
156
  for (const entry of entries) {
131
157
  const player = entry.target;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@profitlich/template-toolkit",
3
- "version": "2.18.6",
3
+ "version": "2.19.0",
4
4
  "description": "Shared SCSS layout system, JS utilities, components and build scripts for profitlich template repos",
5
5
  "type": "module",
6
6
  "exports": {