@profitlich/template-toolkit 2.18.7 → 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;
@@ -36,16 +55,19 @@ export class MuxPlayer {
36
55
  // Flag setzen, um zukünftige Ausführungen zu verhindern.
37
56
  player.dataset.isSetup = 'true';
38
57
 
39
- // Den playPauseObserver starten, sobald die Daten geladen sind.
40
- if (player.readyState >= 2) { // HAVE_CURRENT_DATA oder höher
41
- this.#playPauseObserver.observe(player);
42
- } else {
43
- player.addEventListener('loadeddata', () => {
58
+ if (autoplay) {
59
+ if (player.readyState >= 2) { // HAVE_CURRENT_DATA oder höher
44
60
  this.#playPauseObserver.observe(player);
45
- }, { once: true });
61
+ } else {
62
+ player.addEventListener('loadeddata', () => {
63
+ this.#playPauseObserver.observe(player);
64
+ }, { once: true });
65
+ }
46
66
  }
47
67
  }
48
68
 
69
+ // Für Videos, die ein-/ausgeblendet werden
70
+ // zum Beispiel Startseite Angebote
49
71
  handleVisibilityChange(player) {
50
72
  const isVisible = window.getComputedStyle(player).display !== 'none';
51
73
 
@@ -100,13 +122,16 @@ export class MuxPlayer {
100
122
 
101
123
  if (autoplay) {
102
124
  player.setAttribute('data-autoplay', 'true');
125
+ } else {
126
+ player.setAttribute('data-autoplay', 'false');
103
127
  }
104
128
 
105
- const setPlaying = value => player.setAttribute('data-playing', value);
129
+ const setStatus = value => player.setAttribute('data-status', value);
106
130
 
107
- player.addEventListener('playing', () => setPlaying('true'));
108
- player.addEventListener('pause', () => setPlaying('pause'));
109
- 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'));
110
135
 
111
136
  console.log(
112
137
  'Toolkit Video',
@@ -116,17 +141,17 @@ export class MuxPlayer {
116
141
  );
117
142
 
118
143
  container.replaceWith(player);
119
- setPlaying('false');
144
+ setStatus('false');
120
145
 
146
+ this.handleVisibilityChange(player);
121
147
  if (this.#onPlayerCreated) {
122
148
  this.#onPlayerCreated(player, container);
123
- } else if (autoplay) {
124
- this.handleVisibilityChange(player);
125
149
  }
126
150
  }
127
151
  }
128
152
  }
129
153
 
154
+ // Für autoplay Videos: play und pause
130
155
  #handlePlayPause(entries) {
131
156
  for (const entry of entries) {
132
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.7",
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": {