onelineplayer 1.0.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.
- package/LICENSE +21 -0
- package/README.md +116 -0
- package/dist/index.d.ts +43 -0
- package/dist/onelineplayer.cjs +125 -0
- package/dist/onelineplayer.cjs.map +1 -0
- package/dist/onelineplayer.css +618 -0
- package/dist/onelineplayer.min.js +125 -0
- package/dist/onelineplayer.min.js.map +1 -0
- package/dist/onelineplayer.mjs +732 -0
- package/dist/onelineplayer.mjs.map +1 -0
- package/package.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Dmitry Kiselev / OMDA INC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# onelineplayer
|
|
2
|
+
|
|
3
|
+
Minimal embeddable video player for Vimeo and direct video URLs — no branding.
|
|
4
|
+
|
|
5
|
+
Originally extracted from [onelineplayer.com](https://onelineplayer.com).
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install onelineplayer
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
import onelineplayer from 'onelineplayer'
|
|
15
|
+
import 'onelineplayer/style.css'
|
|
16
|
+
|
|
17
|
+
onelineplayer.mount('#player', {
|
|
18
|
+
url: 'https://vimeo.com/226137389',
|
|
19
|
+
playButton: true,
|
|
20
|
+
progressBar: true,
|
|
21
|
+
muteButton: true,
|
|
22
|
+
fullscreenButton: true,
|
|
23
|
+
overlay: true,
|
|
24
|
+
time: true,
|
|
25
|
+
})
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## CDN
|
|
29
|
+
|
|
30
|
+
```html
|
|
31
|
+
<div id="player"></div>
|
|
32
|
+
<script src="https://cdn.jsdelivr.net/npm/onelineplayer@1/dist/onelineplayer.min.js"></script>
|
|
33
|
+
<script>
|
|
34
|
+
onelineplayer.mount('#player', {
|
|
35
|
+
url: 'https://vimeo.com/226137389',
|
|
36
|
+
playButton: true,
|
|
37
|
+
progressBar: true,
|
|
38
|
+
muteButton: true,
|
|
39
|
+
fullscreenButton: true,
|
|
40
|
+
overlay: true,
|
|
41
|
+
time: true,
|
|
42
|
+
})
|
|
43
|
+
</script>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Styles are injected automatically from the UMD build. With a bundler, also import `onelineplayer/style.css`.
|
|
47
|
+
|
|
48
|
+
## iframe embed
|
|
49
|
+
|
|
50
|
+
No-code users can still use the hosted iframe from [onelineplayer.com](https://onelineplayer.com):
|
|
51
|
+
|
|
52
|
+
```html
|
|
53
|
+
<iframe
|
|
54
|
+
src="https://onelineplayer.com/player.html?url=..."
|
|
55
|
+
allow="autoplay;fullscreen"
|
|
56
|
+
allowfullscreen
|
|
57
|
+
></iframe>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Options
|
|
61
|
+
|
|
62
|
+
| Option | Type | Default | Description |
|
|
63
|
+
|---|---|---|---|
|
|
64
|
+
| `url` | string | `''` | Vimeo URL or direct video file URL |
|
|
65
|
+
| `poster` | string | `''` | Preview image URL |
|
|
66
|
+
| `autoplay` | boolean | `false` | Start playing automatically |
|
|
67
|
+
| `loop` | boolean | `false` | Loop playback |
|
|
68
|
+
| `autopause` | boolean | `false` | Pause other onelineplayer instances on play |
|
|
69
|
+
| `muted` | boolean | `false` | Start muted |
|
|
70
|
+
| `time` | boolean | `false` | Show current time |
|
|
71
|
+
| `progressBar` | boolean | `false` | Show progress bar |
|
|
72
|
+
| `playButton` | boolean | `true` | Show play/pause button |
|
|
73
|
+
| `overlay` | boolean | `true` | Clickable dim overlay |
|
|
74
|
+
| `muteButton` | boolean | `false` | Show mute button |
|
|
75
|
+
| `fullscreenButton` | boolean | `false` | Show fullscreen button |
|
|
76
|
+
| `style` | `'light' \| 'dark'` | `'light'` | Color scheme |
|
|
77
|
+
| `buttonColor` | string | — | Play button fill color |
|
|
78
|
+
| `buttonSize` | number | — | Play button size in px |
|
|
79
|
+
| `overlayColor` | string | — | Overlay background |
|
|
80
|
+
| `overlayOpacity` | number | — | Overlay opacity 0–1 |
|
|
81
|
+
| `quality` | string | `'auto'` | Vimeo quality hint |
|
|
82
|
+
|
|
83
|
+
## API
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
const player = await onelineplayer.mount('#player', { url: '...' })
|
|
87
|
+
player.play()
|
|
88
|
+
player.pause()
|
|
89
|
+
player.destroy()
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### React / Vue
|
|
93
|
+
|
|
94
|
+
Mount in a lifecycle hook and destroy on unmount:
|
|
95
|
+
|
|
96
|
+
```js
|
|
97
|
+
// React
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
let player
|
|
100
|
+
onelineplayer.mount(ref.current, options).then((p) => { player = p })
|
|
101
|
+
return () => player && player.destroy()
|
|
102
|
+
}, [])
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Local demo
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
npm install
|
|
109
|
+
npm run dev
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Open the demo page served by Vite (`examples/demo.html`).
|
|
113
|
+
|
|
114
|
+
## License
|
|
115
|
+
|
|
116
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export interface OnelinePlayerOptions {
|
|
2
|
+
url: string;
|
|
3
|
+
poster?: string;
|
|
4
|
+
autoplay?: boolean;
|
|
5
|
+
loop?: boolean;
|
|
6
|
+
autopause?: boolean;
|
|
7
|
+
muted?: boolean;
|
|
8
|
+
clickable?: boolean;
|
|
9
|
+
time?: boolean;
|
|
10
|
+
progressBar?: boolean;
|
|
11
|
+
playButton?: boolean;
|
|
12
|
+
overlay?: boolean;
|
|
13
|
+
muteButton?: boolean;
|
|
14
|
+
fullscreenButton?: boolean;
|
|
15
|
+
style?: 'light' | 'dark' | string;
|
|
16
|
+
buttonColor?: string | null;
|
|
17
|
+
buttonSize?: number | null;
|
|
18
|
+
overlayColor?: string | null;
|
|
19
|
+
overlayOpacity?: number | null;
|
|
20
|
+
quality?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface Player {
|
|
24
|
+
play(): void;
|
|
25
|
+
pause(): void;
|
|
26
|
+
destroy(): void;
|
|
27
|
+
readonly root: HTMLElement;
|
|
28
|
+
readonly options: OnelinePlayerOptions;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function mount(
|
|
32
|
+
target: string | Element,
|
|
33
|
+
options: OnelinePlayerOptions
|
|
34
|
+
): Promise<Player>;
|
|
35
|
+
|
|
36
|
+
export function destroy(player: Player): void;
|
|
37
|
+
|
|
38
|
+
declare const onelineplayer: {
|
|
39
|
+
mount: typeof mount;
|
|
40
|
+
destroy: typeof destroy;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default onelineplayer;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const D=`<div class="oneline-wrap">
|
|
2
|
+
<video style="display: none" class="oneline oneline-video" playsinline></video>
|
|
3
|
+
<div class="oneline-embed"></div>
|
|
4
|
+
<div class="oneline-error-box"><div class="oneline-error-message"></div></div>
|
|
5
|
+
<div class="oneline-poster" style="display: none"></div>
|
|
6
|
+
<div class="oneline-overlay" style="display: none"></div>
|
|
7
|
+
<div class="oneline-play-pause" style="display: none">
|
|
8
|
+
<button aria-label="Play" type="button">
|
|
9
|
+
<svg class="oneline-play-button" width="29px" height="29px" viewBox="-3 0 26 29" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
10
|
+
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.9">
|
|
11
|
+
<g class="oneline-icon" transform="translate(-308.000000, -226.000000)" fill="#EFEFEF" fill-rule="nonzero">
|
|
12
|
+
<g>
|
|
13
|
+
<path d="M308,252.742128 L308,228.216201 C308,227.111631 308.895431,226.216201 310,226.216201 C310.395737,226.216201 310.782578,226.333602 311.111565,226.553545 L329.506011,238.85112 C330.42427,239.46502 330.671002,240.707081 330.057101,241.62534 C329.910345,241.844855 329.721572,242.033137 329.501676,242.179321 L311.10723,254.407674 C310.187374,255.01918 308.945961,254.769213 308.334454,253.849358 C308.116351,253.521277 308,253.13609 308,252.742128 Z"></path>
|
|
14
|
+
</g>
|
|
15
|
+
</g>
|
|
16
|
+
</g>
|
|
17
|
+
</svg>
|
|
18
|
+
<svg class="oneline-pause-button" width="20px" height="20px" viewBox="-1 0 19 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
19
|
+
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.9">
|
|
20
|
+
<g class="oneline-icon" transform="translate(-1034.000000, -1137.000000)" fill="#EFEFEF">
|
|
21
|
+
<g transform="translate(920.000000, 331.000000)">
|
|
22
|
+
<g transform="translate(0.000000, 656.000000)">
|
|
23
|
+
<g transform="translate(87.000000, 60.000000)">
|
|
24
|
+
<path d="M29,90 L30.3333333,90 C31.4379028,90 32.3333333,90.8954305 32.3333333,92 L32.3333333,108 C32.3333333,109.104569 31.4379028,110 30.3333333,110 L29,110 C27.8954305,110 27,109.104569 27,108 L27,92 C27,90.8954305 27.8954305,90 29,90 Z M40.3333333,90 L41.6666667,90 C42.7712362,90 43.6666667,90.8954305 43.6666667,92 L43.6666667,108 C43.6666667,109.104569 42.7712362,110 41.6666667,110 L40.3333333,110 C39.2287638,110 38.3333333,109.104569 38.3333333,108 L38.3333333,92 C38.3333333,90.8954305 39.2287638,90 40.3333333,90 Z"></path>
|
|
25
|
+
</g>
|
|
26
|
+
</g>
|
|
27
|
+
</g>
|
|
28
|
+
</g>
|
|
29
|
+
</g>
|
|
30
|
+
</svg>
|
|
31
|
+
</button>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="oneline-loader-container">
|
|
34
|
+
<div class="la-ball-pulse">
|
|
35
|
+
<div></div>
|
|
36
|
+
<div></div>
|
|
37
|
+
<div></div>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="oneline-controls">
|
|
41
|
+
<div class="oneline-time" style="display: none"></div>
|
|
42
|
+
<div class="oneline-progress" style="display: none" tabindex="0" role="slider" aria-orientation="horizontal">
|
|
43
|
+
<div class="oneline-progress-fill-bg">
|
|
44
|
+
<div class="oneline-progress-fill"></div>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="oneline-progress-seek-fill"></div>
|
|
47
|
+
<svg
|
|
48
|
+
class="ring"
|
|
49
|
+
width="120"
|
|
50
|
+
height="120">
|
|
51
|
+
<circle
|
|
52
|
+
class="ring-circle ring-bg"
|
|
53
|
+
stroke="white"
|
|
54
|
+
stroke-width="4"
|
|
55
|
+
fill="transparent"
|
|
56
|
+
r="52"
|
|
57
|
+
cx="60"
|
|
58
|
+
cy="60"/>
|
|
59
|
+
<circle
|
|
60
|
+
class="ring-circle ring-fill"
|
|
61
|
+
stroke="red"
|
|
62
|
+
stroke-width="4"
|
|
63
|
+
fill="transparent"
|
|
64
|
+
r="52"
|
|
65
|
+
cx="60"
|
|
66
|
+
cy="60"/>
|
|
67
|
+
<circle
|
|
68
|
+
class="ring-circle ring-seek"
|
|
69
|
+
stroke="blue"
|
|
70
|
+
stroke-width="4"
|
|
71
|
+
fill="transparent"
|
|
72
|
+
r="52"
|
|
73
|
+
cx="60"
|
|
74
|
+
cy="60"/>
|
|
75
|
+
</svg>
|
|
76
|
+
</div>
|
|
77
|
+
<div class="oneline-control-buttons">
|
|
78
|
+
<button class="oneline-mute-button" style="display: none" type="button">
|
|
79
|
+
<svg class="mute" width="16px" height="20px" viewBox="0 0 16 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
80
|
+
<title>Mute</title>
|
|
81
|
+
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
82
|
+
<g transform="translate(-1392.000000, -1231.000000)" fill="#FFFFFF" fill-rule="nonzero">
|
|
83
|
+
<g transform="translate(802.000000, 794.000000)">
|
|
84
|
+
<path d="M602.985222,437 L602.985222,456.123535 L600.787842,456.123535 L592.44458,450.014526 L590,450.014526 L590,442.986084 L592.44458,442.986084 L600.787842,437 L602.985222,437 Z M606,444 L606,449 L604,449 L604,444 L606,444 Z"></path>
|
|
85
|
+
</g>
|
|
86
|
+
</g>
|
|
87
|
+
</g>
|
|
88
|
+
</svg>
|
|
89
|
+
<svg class="unmute" width="16px" height="20px" viewBox="0 0 16 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
90
|
+
<title>Unmute</title>
|
|
91
|
+
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
92
|
+
<g transform="translate(-1392.000000, -1197.000000)" fill="#FFFFFF" fill-rule="nonzero">
|
|
93
|
+
<g transform="translate(802.000000, 794.000000)">
|
|
94
|
+
<path d="M602.985,411.757 L602.985222,422.123535 L600.787842,422.123535 L596.072,418.67 L602.985,411.757 Z M606.424621,403.368272 L607.838835,404.782486 L592.282486,420.338835 L590.868272,418.924621 L606.424621,403.368272 Z M602.985222,403 L602.985,404.687 L591.658,416.014 L590,416.014526 L590,408.986084 L592.44458,408.986084 L600.787842,403 L602.985222,403 Z M606,410 L606,415 L604,415 L604,410.742 L604.743,409.999 L606,410 Z"></path>
|
|
95
|
+
</g>
|
|
96
|
+
</g>
|
|
97
|
+
</g>
|
|
98
|
+
</svg>
|
|
99
|
+
</button>
|
|
100
|
+
<button class="oneline-fullscreen-button" style="display: none" type="button">
|
|
101
|
+
<svg width="19px" class="fullscreen-icon-on" height="19px" viewBox="0 0 19 19" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
102
|
+
<title>Fullscreen</title>
|
|
103
|
+
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
104
|
+
<g transform="translate(-1351.000000, -1231.000000)" fill="#FFFFFF">
|
|
105
|
+
<g transform="translate(802.000000, 794.000000)">
|
|
106
|
+
<path d="M554.971733,448.344364 C555.432291,447.885212 556.177464,447.885212 556.638022,448.344364 L556.638022,448.344364 L556.654581,448.36091 C557.11514,448.821096 557.11514,449.566701 556.654581,450.025853 L556.654581,450.025853 L554.013357,452.664943 C553.750477,452.928645 553.750477,453.354705 554.013357,453.618407 L554.013357,453.618407 L555.245998,454.850052 C555.671367,455.274043 555.370193,456 554.769915,456 L554.769915,456 L549,456 L549,450.234747 C549,449.634953 549.726544,449.334023 550.150878,449.759049 L550.150878,449.759049 L551.377308,450.983454 C551.640189,451.247156 552.067628,451.247156 552.330509,450.983454 L552.330509,450.983454 Z M568,437 L568,442.764694 C568,443.36443 567.273456,443.665331 566.849122,443.240346 L566.849122,443.240346 L565.622692,442.01606 C565.359811,441.753417 564.932372,441.753417 564.669491,442.01606 L564.669491,442.01606 L562.028267,444.654894 C561.567709,445.115035 560.822536,445.115035 560.361978,444.654894 L560.361978,444.654894 L560.345419,444.638349 C559.88486,444.178208 559.88486,443.433709 560.345419,442.973568 L560.345419,442.973568 L562.986643,440.334734 C563.249523,440.071057 563.249523,439.645038 562.986643,439.381362 L562.986643,439.381362 L561.752967,438.149837 C561.328633,437.725886 561.629807,437 562.230085,437 L562.230085,437 L568,437 Z"></path>
|
|
107
|
+
</g>
|
|
108
|
+
</g>
|
|
109
|
+
</g>
|
|
110
|
+
</svg>
|
|
111
|
+
<svg class="fullscreen-icon-off" width="19px" height="19px" viewBox="0 0 19 19" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
112
|
+
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
113
|
+
<g transform="translate(-1351.000000, -1197.000000)" fill="#FFFFFF">
|
|
114
|
+
<g transform="translate(802.000000, 794.000000)">
|
|
115
|
+
<path d="M557,414 L557,419.764694 C557,420.36443 556.273456,420.665331 555.849122,420.240346 L555.849122,420.240346 L554.622692,419.01606 C554.359811,418.753417 553.932372,418.753417 553.669491,419.01606 L553.669491,419.01606 L551.028267,421.654894 C550.567709,422.115035 549.822536,422.115035 549.361978,421.654894 L549.361978,421.654894 L549.345419,421.638349 C548.88486,421.178208 548.88486,420.433709 549.345419,419.973568 L549.345419,419.973568 L551.986643,417.334734 C552.249523,417.071057 552.249523,416.645038 551.986643,416.381362 L551.986643,416.381362 L550.752967,415.149837 C550.328633,414.725886 550.629807,414 551.230085,414 L551.230085,414 L557,414 Z M565.971733,403.344364 C566.432291,402.885212 567.177464,402.885212 567.638022,403.344364 L567.638022,403.344364 L567.654581,403.36091 C568.11514,403.821096 568.11514,404.566701 567.654581,405.025853 L567.654581,405.025853 L565.013357,407.664943 C564.750477,407.928645 564.750477,408.354705 565.013357,408.618407 L565.013357,408.618407 L566.245998,409.850052 C566.671367,410.274043 566.370193,411 565.769915,411 L565.769915,411 L560,411 L560,405.234747 C560,404.634953 560.726544,404.334023 561.150878,404.759049 L561.150878,404.759049 L562.377308,405.983454 C562.640189,406.247156 563.067628,406.247156 563.330509,405.983454 L563.330509,405.983454 Z"></path>
|
|
116
|
+
</g>
|
|
117
|
+
</g>
|
|
118
|
+
</g>
|
|
119
|
+
</svg>
|
|
120
|
+
</button>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
`;function L(s){return!!(s&&s.match(/vimeo\.com\/(\d+)/i))}function N(s){const n=["assets-1.entertainvideo.com/assets/video/30df75d701c29181572c47389a031c60.mp4"];for(let l=0;l<n.length;l++)if(s&&s.indexOf(n[l])!==-1)return!0;return!1}function V(s){s=Math.floor(s);let n=Math.floor(s/3600),l=Math.floor((s-n*3600)/60),e=s-n*3600-l*60;l=l<10?"0"+l:l,e=e<10?"0"+e:e;let i=l+":"+e;return n>0&&(i=n+":"+i),i}function W(s){if(!s)throw new Error("onelineplayer.mount: target is required");if(typeof s=="string"){const n=document.querySelector(s);if(!n)throw new Error("onelineplayer.mount: element not found: "+s);return n}if(s.nodeType===1)return s;throw new Error("onelineplayer.mount: target must be a selector or Element")}function K(s){const n=s||{};return{url:n.url||"",poster:n.poster||"",autoplay:!!n.autoplay,loop:!!n.loop,autopause:!!n.autopause,muted:!!n.muted,clickable:n.clickable!==!1,time:!!n.time,progressBar:!!n.progressBar,playButton:n.playButton!==void 0?!!n.playButton:!0,overlay:n.overlay!==void 0?!!n.overlay:!0,muteButton:!!n.muteButton,fullscreenButton:!!n.fullscreenButton,style:n.style||"light",buttonColor:n.buttonColor||null,buttonSize:n.buttonSize||null,overlayColor:n.overlayColor||null,overlayOpacity:n.overlayOpacity!=null?n.overlayOpacity:null,quality:n.quality||"auto"}}function j(s,n,l){const e=s.video,i=s.wrap;return e.style.display="block",e.muted=!!n.muted,n.autoplay&&e.setAttribute("autoplay",""),n.loop&&e.setAttribute("loop",""),N(n.url)?e.src="restricted":e.src=n.url,e.addEventListener("error",function(){const o=i.querySelector(".oneline-error-message");if(e.error===null)return;let t="Video error";switch(e.error.code){case 1:t="Video aborted";break;case 2:t="Video expired, reload the page";break;case 3:t="Network error";break;case 4:t="Video not found or not supported";break}o&&(o.innerText=t),i.classList.add("oneline-error"),i.classList.remove("oneline-load")}),e.addEventListener("waiting",function(){l&&console.log("waiting"),i.classList.add("oneline-load")},!1),e.addEventListener("canplaythrough",function(){l&&console.log("canplay"),i.classList.remove("oneline-load")},!1),{type:"html",load:function(o){e.src=o.url,o.autoplay&&e.setAttribute("autoplay","")},node:function(){return e},play:function(){return e.play()},pause:function(){e.pause()},mute:function(){e.muted=!0},unmute:function(){e.muted=!1},getPaused:function(o){o(e.paused)},getWidth:function(o){o(e.videoWidth)},getHeight:function(o){o(e.videoHeight)},getTime:function(o){o(e.currentTime)},setTime:function(o){e.currentTime=o},setLoop:function(o){o?e.setAttribute("loop",""):e.removeAttribute("loop")},getDuration:function(o){o(e.duration)},getMuted:function(o){o(e.muted)},onLoadstart:function(o){e.addEventListener("loadstart",o,!1)},onLoadend:function(o){e.addEventListener("loadended",o,!1)},onReady:function(o){e.addEventListener("loadedmetadata",o,!1)},onPlay:function(o){e.addEventListener("play",o,!1)},onPause:function(o){e.addEventListener("pause",o,!1)},onTimeupdate:function(o){e.addEventListener("timeupdate",o,!1)},onVolumechange:function(o){e.addEventListener("volumechange",o,!1)},onEnded:function(o){e.addEventListener("ended",o,!1)},onSeeked:function(o){e.addEventListener("seeked",o,!1)},destroy:function(){e.removeAttribute("src"),e.load()}}}const U="https://player.vimeo.com/api/player.js";let g=null;function I(){return typeof window<"u"&&window.Vimeo&&window.Vimeo.Player?Promise.resolve(window.Vimeo):g||(g=new Promise(function(s,n){const l=document.querySelector("script[data-onelineplayer-vimeo]");if(l){l.addEventListener("load",function(){s(window.Vimeo)}),l.addEventListener("error",n);return}const e=document.createElement("script");e.src=U,e.async=!0,e.dataset.onelineplayerVimeo="1",e.onload=function(){s(window.Vimeo)},e.onerror=n,document.head.appendChild(e)}),g)}function O(s){return{url:s.url,controls:!1,muted:s.muted,autoplay:s.autoplay,loop:s.loop,quality:s.quality,responsive:!0}}async function Y(s,n){s.embed.style.display="block";const l=await I(),e=new l.Player(s.embed,O(n));return n.muted||e.setVolume(1),{type:"vimeo",load:function(i){e.loadVideo(O(i))},node:function(){return e.element},play:function(){return e.play()},pause:function(){return e.pause()},mute:function(){e.setVolume(0)},unmute:function(){e.setVolume(1)},getPaused:function(i){e.getPaused().then(i)},getWidth:function(i){e.getVideoWidth().then(i)},getHeight:function(i){e.getVideoHeight().then(i)},getTime:function(i){e.getCurrentTime().then(i)},setTime:function(i){e.setCurrentTime(i)},setLoop:function(i){e.setLoop(i)},getDuration:function(i){e.getDuration().then(i)},getMuted:function(i){e.getVolume().then(function(o){i(o===0)})},onLoadstart:function(i){e.on("bufferstart",i)},onLoadend:function(i){e.on("bufferend",i)},onReady:function(i){e.on("loaded",i)},onPlay:function(i){e.on("play",i)},onPause:function(i){e.on("pause",i)},onTimeupdate:function(i){e.on("timeupdate",i)},onVolumechange:function(i){e.on("volumechange",i)},onEnded:function(i){e.on("ended",i)},onSeeked:function(i){e.on("seeked",i)},destroy:function(){return e.destroy()}}}function X(s){const{video:n,options:l,els:e,components:i,state:o}=s,t=e.play,r=e.wrap;l&&l.buttonSize?(t.style.width=l.buttonSize+"px",t.style.marginTop=-(l.buttonSize/2)+"px",t.style.marginLeft=-(l.buttonSize/2)+"px"):(t.style.width=null,t.style.marginTop=null,t.style.marginLeft=null);const a=l&&l.buttonColor?l.buttonColor:null,d=t.querySelectorAll(".oneline-icon");for(let u=0;u<d.length;u++)d[u].style.fill=a;if(i.playButton)return i.playButton;const p=o.userCanTouch?"touchend":"click";return t.addEventListener(p,function(){r.classList.add("oneline-started"),n.getPaused(function(u){u?n.play():n.pause()})},!1),t.style.display="block",i.playButton=t,i.playButton}function G(s){const{video:n,els:l,components:e,state:i}=s;if(e.muteButton)return e.muteButton;const o=l.muteButton;n.getMuted(function(r){r&&o.classList.add("muted")});const t=i.userCanTouch?"touchend":"click";return o.addEventListener(t,function(){n.getMuted(function(r){r?n.unmute():n.mute()})}),n.onVolumechange(function(){n.getMuted(function(r){r?o.classList.add("muted"):o.classList.remove("muted")})}),o.style.display="block",e.muteButton=o,e.muteButton}function J(s){const{video:n,els:l,components:e,cleanup:i}=s,o=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,t=l.fullscreenButton;if(o&&n.type==="vimeo")return t.style.display="none",null;if(e.fullscreenButton)return e.fullscreenButton;function r(){const u=l.wrap;d()?(u.classList.remove("oneline-fullscreen"),n.node().dispatchEvent(new CustomEvent("fullscreenExit"))):(u.classList.add("oneline-fullscreen"),n.node().dispatchEvent(new CustomEvent("fullscreenEnter")))}function a(){const u=l.root;d()?u.requestFullscreen?u.requestFullscreen():u.msRequestFullscreen?u.msRequestFullscreen():u.mozRequestFullScreen?u.mozRequestFullScreen():u.webkitRequestFullscreen?u.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):o&&n.type==="html"&&n.node().webkitEnterFullscreen():document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen()}function d(){return!document.fullscreenElement&&!document.mozFullScreenElement&&!document.webkitFullscreenElement&&!document.msFullscreenElement}const p=function(){a(),t.blur()};return t.addEventListener("click",p),document.addEventListener("webkitfullscreenchange",r),document.addEventListener("fullscreenchange",r),document.addEventListener("mozfullscreenchange",r),document.addEventListener("MSFullscreenChange",r),i.push(function(){t.removeEventListener("click",p),document.removeEventListener("webkitfullscreenchange",r),document.removeEventListener("fullscreenchange",r),document.removeEventListener("mozfullscreenchange",r),document.removeEventListener("MSFullscreenChange",r)}),t.style.display="block",e.fullscreenButton=t,e.fullscreenButton}function Q(s){const{video:n,options:l,els:e,components:i,cleanup:o}=s;if(i.progressBar)return i.progressBar;let t=!1,r=null;const a=e.progress,d=e.progressFill,p=e.progressSeekFill,u=e.wrap;n.onPlay(function(){Z()}),n.onPause(function(){S()}),n.onEnded(function(){d.style.width=a.offsetWidth+"px"});function m(c){z(c),t=!0}function w(){t=!1}function k(c){B(c,!1)}function x(c){t=!0,c.returnValue=!1}function E(c){B(c,!0)}function C(){t=!1}function F(c){c.keyCode===39&&T(5),c.keyCode===37&&T(-5)}return a.addEventListener("mousedown",m,!1),a.addEventListener("mouseup",w,!1),a.addEventListener("mousemove",k,!1),a.addEventListener("touchstart",x,!1),a.addEventListener("touchmove",E,!1),a.addEventListener("touchend",C,!1),document.addEventListener("keydown",F,!1),o.push(function(){S(),a.removeEventListener("mousedown",m,!1),a.removeEventListener("mouseup",w,!1),a.removeEventListener("mousemove",k,!1),a.removeEventListener("touchstart",x,!1),a.removeEventListener("touchmove",E,!1),a.removeEventListener("touchend",C,!1),document.removeEventListener("keydown",F,!1)}),a.style.display="block",i.progressBar=a,a;function T(c){n.getTime(function(f){n.setTime(f+c)})}function B(c,f){f&&(c.returnValue=!1);const y=P(c);R(y),t&&z(c)}function z(c){const f=P(c);L(l.url)||u.classList.add("oneline-load"),n.getDuration(function(y){n.setTime(f/100*y),M()})}function Z(){(function c(){M(),r=setTimeout(c,50)})()}function S(){clearTimeout(r)}function M(){n.getTime(function(c){n.getDuration(function(f){H(c*100/f)})})}function H(c){d.style.width=c+"%"}function R(c){p.style.width=c+"%"}function P(c){const f=c.changedTouches,y=a.getBoundingClientRect().left,h=(f?c.pageX:c.clientX)-y,q=a.offsetWidth;return h>0&&h<q?h*100/q:0}}function $(s){const{video:n,els:l,components:e}=s,i=l.time;if(n.getTime(function(t){i.innerHTML=V(t)}),i.style.display="block",e.time)return e.time;return o(),n.onTimeupdate(function(){o()}),e.time=i,i;function o(){n.getTime(function(t){i.innerHTML=V(t)})}}function ee(s){const{video:n,options:l,els:e,components:i}=s,o=e.poster,t=l.poster;return!t||t==="null"?(o.style.display="none",null):(o.style.backgroundColor="#000",o.style.backgroundImage="url("+t+")",i.poster?i.poster:(o.style.display="block",n.onPlay(function(){o.style.display="none"}),i.poster=o,o))}function ne(s){const{video:n,options:l,els:e,components:i,state:o}=s,t=e.overlay,r=e.wrap;if(l&&l.overlayColor?t.style.backgroundColor=l.overlayColor:t.style.backgroundColor=null,l&&l.overlayOpacity!=null?(t.dataset.opacity=l.overlayOpacity,n.getPaused(function(d){d&&(t.style.opacity=t.dataset.opacity)})):(delete t.dataset.opacity,t.style.opacity=null),i.overlay)return i.overlay;t.classList.add("oneline-clickable");const a=o.userCanTouch?"touchend":"click";return t.addEventListener(a,function(){r.classList.add("oneline-started"),n.getPaused(function(d){d?n.play():n.pause()})},!1),n.onPlay(function(){typeof t.dataset.opacity<"u"&&(t.style.opacity=0)}),n.onPause(function(){typeof t.dataset.opacity<"u"&&(t.style.opacity=t.dataset.opacity)}),t.addEventListener("mouseleave",function(){r.classList.remove("oneline-hide-controls"),r.classList.remove("oneline-hide-all")}),t.addEventListener("mouseenter",function(){o.userCanTouch||(r.classList.remove("oneline-hide-controls"),r.classList.remove("oneline-hide-all"),o.hideTimeout&&clearTimeout(o.hideTimeout))}),t.style.display="block",i.overlay=t,i.overlay}const v=new Set;function te(s){const n=s.querySelector(".oneline-wrap");return{root:s,wrap:n,video:n.querySelector(".oneline-video"),embed:n.querySelector(".oneline-embed"),poster:n.querySelector(".oneline-poster"),overlay:n.querySelector(".oneline-overlay"),play:n.querySelector(".oneline-play-pause"),time:n.querySelector(".oneline-time"),progress:n.querySelector(".oneline-progress"),progressFill:n.querySelector(".oneline-progress-fill"),progressSeekFill:n.querySelector(".oneline-progress-seek-fill"),muteButton:n.querySelector(".oneline-mute-button"),fullscreenButton:n.querySelector(".oneline-fullscreen-button")}}function oe(s){const n=document.createElement("template");return n.innerHTML=D.trim(),s.classList.add("oneline-player"),s.replaceChildren(n.content.cloneNode(!0)),te(s)}class ie{constructor(n,l){this.root=n,this.options=l,this.components={},this.cleanup=[],this.state={userCanTouch:!1,hideTimeout:null,debug:!1},this.video=null,this.els=null,this._ready=!1,this._destroyed=!1}async init(){this.els=oe(this.root);const n=this.els,l=this.options,e=this.state,i=function(){e.userCanTouch=!0};n.root.addEventListener("touchstart",i,!0),this.cleanup.push(function(){n.root.removeEventListener("touchstart",i,!0)}),L(l.url)?this.video=await Y(n,l):(this.video=j(n,l,e.debug),n.wrap.classList.add("oneline-load"));const o=this.video,t=n.wrap;if(l.style==="dark"&&t.classList.add("oneline-dark"),l.poster&&ee({video:o,options:l,els:n,components:this.components}),l.overlay&&ne({video:o,options:l,els:n,components:this.components,state:e}),l.autopause){const p=this;o.onPlay(function(){v.forEach(function(u){u!==p&&!u._destroyed&&u.pause()})})}o.onLoadstart(function(){e.debug&&console.log("loadstart"),L(l.url)||t.classList.add("oneline-load"),t.classList.remove("oneline-error")}),o.onLoadend(function(){e.debug&&console.log("loadend"),t.classList.remove("oneline-load")}),o.onPlay(function(){e.debug&&console.log("play"),t.classList.add("oneline-hide-controls"),t.classList.add("oneline-playing"),t.classList.remove("oneline-paused"),e.hideTimeout=setTimeout(function(){t.classList.add("oneline-hide-all")},3e3)}),o.onPause(function(){e.debug&&console.log("pause"),t.classList.add("oneline-paused"),t.classList.remove("oneline-load"),t.classList.remove("oneline-playing"),t.classList.remove("oneline-hide-all"),clearTimeout(e.hideTimeout)}),o.onSeeked(function(){t.classList.remove("oneline-load")});const r=function(){t.classList.remove("oneline-hide-controls"),t.classList.remove("oneline-hide-all"),t.classList.remove("active")},a=function(){t.classList.remove("oneline-hide-controls"),t.classList.remove("oneline-hide-all"),clearTimeout(e.hideTimeout)};t.addEventListener("mouseleave",r),t.addEventListener("mouseenter",a),this.cleanup.push(function(){t.removeEventListener("mouseleave",r),t.removeEventListener("mouseenter",a)});const d=this;return o.onReady(function(){if(d._destroyed)return;e.debug&&console.log("loadedmetadata"),t.classList.add("oneline-ready"),t.classList.remove("oneline-load"),l.autoplay||t.classList.add("oneline-paused");const p={video:o,options:l,els:n,components:d.components,state:e,cleanup:d.cleanup};l.time&&$(p),l.progressBar&&Q(p),l.playButton&&X(p),l.muteButton&&G(p),l.fullscreenButton&&J(p),d._bindKeyboardFocus(p),d._ready=!0}),v.add(this),this}_bindKeyboardFocus(n){const{video:l,els:e,components:i,cleanup:o}=n,t=e.wrap,r=["playButton","progressBar","muteButton","fullscreenButton"];function a(p){p.keyCode===9&&t.classList.add("keyboard-control")}function d(p){const u=document.activeElement&&document.activeElement.tagName==="BUTTON";p.keyCode===32&&!u&&l.getPaused(function(m){m?l.play():l.pause()})}document.addEventListener("keyup",a),document.addEventListener("keydown",d),o.push(function(){document.removeEventListener("keyup",a),document.removeEventListener("keydown",d)}),r.forEach(function(p){const u=i[p];u&&(u.addEventListener("click",function(m){(m.clientX||m.clientY)&&t.classList.remove("keyboard-control")}),u.addEventListener("focus",function(){t.classList.add("active")}),u.addEventListener("blur",function(){t.classList.remove("active")}))})}play(){this.video&&this.video.play()}pause(){this.video&&this.video.pause()}destroy(){this._destroyed||(this._destroyed=!0,clearTimeout(this.state.hideTimeout),this.cleanup.forEach(function(n){try{n()}catch{}}),this.cleanup=[],this.video&&this.video.destroy&&this.video.destroy(),v.delete(this),this.root.classList.remove("oneline-player"),this.root.replaceChildren())}}const le=".oneline-player{font-family:Helvetica,sans-serif;margin:0;background:transparent;display:flex;align-items:center;width:100%}.oneline-responsive video{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;overflow:hidden}.oneline{width:100%;height:100%;display:block}.oneline-ready .oneline{height:auto}.oneline-clickable{cursor:pointer}.oneline-wrap{width:100%;position:relative;z-index:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.oneline-responsive .oneline-wrap{position:unset}.oneline-error-box{position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0;z-index:110;background:#efefef;color:#000;display:none}.oneline-error-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.oneline-error .oneline-error-box{display:block}.oneline-overlay{position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0;z-index:2;transition:opacity .8s cubic-bezier(.1,.79,0,.87);opacity:0}.oneline-overlay{opacity:.2}.oneline-playing .oneline-overlay{opacity:0}.oneline-load .oneline-overlay,.oneline-playing:hover .oneline-overlay{opacity:.2!important}.oneline-hide-controls.oneline-playing:hover .oneline-overlay{opacity:0!important}.oneline-controls{position:absolute;z-index:10;display:flex;align-items:center;flex-direction:row;justify-content:space-between;bottom:20px;left:0;width:100%;opacity:0;transform:translateY(8px);transition:all 1s cubic-bezier(.23,1,.32,1)}.oneline-started:hover .oneline-controls,.oneline-wrap.active .oneline-controls{opacity:1;transform:translateY(0)}.oneline-wrap.oneline-hide-all .oneline-controls{opacity:0;transform:translateY(8px)}.oneline-control-buttons{display:flex;justify-content:space-between;flex-direction:row;margin-left:auto}.oneline-time{padding-bottom:0;font-size:15px;letter-spacing:1px;padding-left:30px;font-family:Helvetica,sans-serif!important;-webkit-font-smoothing:auto}.oneline-progress{position:relative;margin:0 30px;padding:12px 0;flex-grow:1;cursor:pointer;display:block;border-radius:2px}.oneline-progress-fill{width:0;height:4px;border-radius:2px}.oneline-progress-fill-bg{width:100%;height:4px;border-radius:2px}.oneline-progress-seek{position:absolute;z-index:11;top:8px;left:0;width:10px;height:10px;border-radius:5px;transition:opacity .2s linear}.oneline-progress-seek-fill{position:absolute;z-index:12;top:12px;width:0;height:4px;border-radius:2px}.oneline-progress:hover .oneline-progress-fill{opacity:0}.oneline-progress:hover .oneline-progress-seek{opacity:1;-webkit-animation:in .2s ease-out;-webkit-animation-iteration-count:1}.oneline-progress:not(:hover) .oneline-progress-seek{opacity:0;-webkit-animation:out .2s ease-out;-webkit-animation-iteration-count:1}.oneline-progress:hover .oneline-progress-seek-fill{opacity:1}.oneline-progress:not(:hover) .oneline-progress-seek-fill{opacity:0}@-webkit-keyframes in{0%{-webkit-transform:scale(.1,.1)}to{-webkit-transform:scale(1,1)}}@-webkit-keyframes out{0%{-webkit-transform:scale(1,1)}to{-webkit-transform:scale(0,0)}}.oneline-loader-container{width:80px;position:absolute;top:50%;left:50%;margin-top:-15px;margin-left:-40px;height:30px;z-index:3;display:none}.oneline-load .oneline-loader-container{display:block}.oneline-play-pause{width:30px;height:30px;position:absolute;z-index:100;top:50%;left:50%;margin-top:-15px;margin-left:-15px;transition:transform 1s cubic-bezier(.075,.82,.165,1)}.oneline-play-pause:active,.oneline-wrap:active .oneline-play-pause{transform:scale(.9)!important}.oneline-play-pause button{cursor:pointer;display:block;position:relative;width:100%;padding:50%;background:transparent;border:none}.oneline-load .oneline-play-pause{opacity:0}.oneline-wrap:not(.oneline-started):hover .oneline-play-pause{transform:scale(1.2)}.oneline-play-button,.oneline-pause-button{top:0;left:0;position:absolute;transition:all .7s cubic-bezier(.1,.79,0,.87)}@media (max-width: 400px){.oneline-play-pause{width:10%;margin-top:-5%;margin-left:-5%}}.oneline-play-pause svg,.oneline-play-pause img{width:100%;height:auto}.oneline-playing .oneline-play-button{opacity:0}.oneline-paused .oneline-play-button{opacity:1}.oneline-pause-button{opacity:0}.oneline-playing:hover .oneline-pause-button{opacity:1}@media (hover: none){.oneline-playing:hover .oneline-pause-button{opacity:0}}.oneline-hide-controls.oneline-playing:hover .oneline-pause-button,.oneline-paused .oneline-pause-button{opacity:0}.oneline-mute-button svg{display:block}.oneline-mute-button.muted .mute,.oneline-mute-button .unmute{display:none}.oneline-mute-button.muted .unmute{display:block}.oneline-fullscreen-button svg{display:block}.oneline-fullscreen .oneline-fullscreen-button .fullscreen-icon-on,.oneline-fullscreen-button .fullscreen-icon-off{display:none}.oneline-fullscreen .oneline-fullscreen-button .fullscreen-icon-off{display:block}.oneline-mute-button,.oneline-fullscreen-button{width:100%;background:transparent;border:none;margin-right:30px;cursor:pointer;padding:0}button,div{outline-width:0}.keyboard-control button,.keyboard-control div{outline-width:2px!important}.keyboard-control.oneline-playing .oneline-play-pause button{outline-width:0!important}.oneline-logo{position:absolute;top:23px;left:30px;display:block;width:31px;height:20px;z-index:10;opacity:0;transition:opacity .1s linear;text-decoration:none;font-weight:500;font-size:18px}.oneline-wrap:hover .oneline-logo{opacity:.5}.oneline-wrap:hover .oneline-logo:hover{opacity:1}.oneline-poster{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;-moz-background-size:100% 100%;-o-background-size:100% 100%;-webkit-background-size:100% 100%;background-size:100% 100%}.oneline-play-button .oneline-icon,.oneline-pause-button .oneline-icon,.oneline-mute-button .oneline-icon,.oneline-fullscreen-button .oneline-icon{fill:#fff}.oneline-progress-fill{background-color:#fff}.oneline-progress-fill-bg{background-color:#fff3}.oneline-progress-seek,.oneline-progress-seek-fill{background-color:#fff}.oneline-overlay{background-color:#000}.oneline-loader{background-color:#fff}.oneline-logo,.oneline-time{color:#fff}.oneline-dark .oneline-play-button .oneline-icon,.oneline-dark .oneline-pause-button .oneline-icon,.oneline-dark .oneline-mute-button .oneline-icon,.oneline-dark .oneline-fullscreen-button .oneline-icon{fill:#333}.oneline-dark .oneline-progress-fill{background-color:#333}.oneline-dark .oneline-progress-fill-bg{background-color:#666}.oneline-dark .oneline-progress-seek,.oneline-dark .oneline-progress-seek-fill{background-color:#333}.oneline-dark .oneline-overlay{background-color:#000}.oneline-dark .oneline-loader{background-color:#333}.oneline-dark .la-ball-pulse,.oneline-dark .oneline-logo,.oneline-dark .oneline-time{color:#333}.theme-modern .oneline-controls{bottom:50%;height:100px;margin-bottom:-50px;align-items:center;justify-content:center}.theme-modern .oneline-progress-fill-bg,.theme-modern .oneline-progress-seek,.theme-modern .oneline-progress-seek-fill,.oneline-progress .ring{display:none}.theme-modern .oneline-progress .ring{display:block}.theme-modern .oneline-progress{flex-grow:0}.theme-modern .oneline-progress .ring-circle{transform:rotate(-90deg);transform-origin:50% 50%}.theme-modern .ring-seek{display:none}.theme-modern .oneline-control-buttons{margin-left:0}.la-ball-pulse,.la-ball-pulse>div{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.la-ball-pulse{margin:0 auto;display:block;font-size:0;color:#fff}.la-ball-pulse>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor}.la-ball-pulse{width:54px;height:18px}.la-ball-pulse>div:nth-child(1){-webkit-animation-delay:-.2s;-moz-animation-delay:-.2s;-o-animation-delay:-.2s;animation-delay:-.2s}.la-ball-pulse>div:nth-child(2){-webkit-animation-delay:-.1s;-moz-animation-delay:-.1s;-o-animation-delay:-.1s;animation-delay:-.1s}.la-ball-pulse>div:nth-child(3){-webkit-animation-delay:0ms;-moz-animation-delay:0ms;-o-animation-delay:0ms;animation-delay:0ms}.la-ball-pulse>div{width:10px;height:10px;margin:4px;border-radius:100%;-webkit-animation:ball-pulse 1s ease infinite;-moz-animation:ball-pulse 1s ease infinite;-o-animation:ball-pulse 1s ease infinite;animation:ball-pulse 1s ease infinite}.la-ball-pulse.la-sm{width:26px;height:8px}.la-ball-pulse.la-sm>div{width:4px;height:4px;margin:2px}.la-ball-pulse.la-2x{width:108px;height:36px}.la-ball-pulse.la-2x>div{width:20px;height:20px;margin:8px}.la-ball-pulse.la-3x{width:162px;height:54px}.la-ball-pulse.la-3x>div{width:30px;height:30px;margin:12px}@-webkit-keyframes ball-pulse{0%,60%,to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}30%{opacity:.1;-webkit-transform:scale(.01);transform:scale(.01)}}@-moz-keyframes ball-pulse{0%,60%,to{opacity:1;-moz-transform:scale(1);transform:scale(1)}30%{opacity:.1;-moz-transform:scale(.01);transform:scale(.01)}}@-o-keyframes ball-pulse{0%,60%,to{opacity:1;-o-transform:scale(1);transform:scale(1)}30%{opacity:.1;-o-transform:scale(.01);transform:scale(.01)}}@keyframes ball-pulse{0%,60%,to{opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);transform:scale(1)}30%{opacity:.1;-webkit-transform:scale(.01);-moz-transform:scale(.01);-o-transform:scale(.01);transform:scale(.01)}}";let b=!1;function se(){if(b||typeof document>"u")return;if(document.querySelector("style[data-onelineplayer]")){b=!0;return}const s=document.createElement("style");s.setAttribute("data-onelineplayer","1"),s.textContent=le,document.head.appendChild(s),b=!0}function A(s,n){se();const l=W(s),e=K(n);return new ie(l,e).init()}function _(s){s&&typeof s.destroy=="function"&&s.destroy()}const re={mount:A,destroy:_};exports.default=re;exports.destroy=_;exports.mount=A;
|
|
125
|
+
//# sourceMappingURL=onelineplayer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onelineplayer.cjs","sources":["../src/template.html?raw","../src/utils.js","../src/adapters/html5.js","../src/adapters/vimeo.js","../src/controls/play-button.js","../src/controls/mute-button.js","../src/controls/fullscreen.js","../src/controls/progress-bar.js","../src/controls/time.js","../src/controls/poster.js","../src/controls/overlay.js","../src/Player.js","../src/inject-css.js","../src/index.js"],"sourcesContent":["export default \"<div class=\\\"oneline-wrap\\\">\\n <video style=\\\"display: none\\\" class=\\\"oneline oneline-video\\\" playsinline></video>\\n <div class=\\\"oneline-embed\\\"></div>\\n <div class=\\\"oneline-error-box\\\"><div class=\\\"oneline-error-message\\\"></div></div>\\n <div class=\\\"oneline-poster\\\" style=\\\"display: none\\\"></div>\\n <div class=\\\"oneline-overlay\\\" style=\\\"display: none\\\"></div>\\n <div class=\\\"oneline-play-pause\\\" style=\\\"display: none\\\">\\n <button aria-label=\\\"Play\\\" type=\\\"button\\\">\\n <svg class=\\\"oneline-play-button\\\" width=\\\"29px\\\" height=\\\"29px\\\" viewBox=\\\"-3 0 26 29\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" opacity=\\\"0.9\\\">\\n <g class=\\\"oneline-icon\\\" transform=\\\"translate(-308.000000, -226.000000)\\\" fill=\\\"#EFEFEF\\\" fill-rule=\\\"nonzero\\\">\\n <g>\\n <path d=\\\"M308,252.742128 L308,228.216201 C308,227.111631 308.895431,226.216201 310,226.216201 C310.395737,226.216201 310.782578,226.333602 311.111565,226.553545 L329.506011,238.85112 C330.42427,239.46502 330.671002,240.707081 330.057101,241.62534 C329.910345,241.844855 329.721572,242.033137 329.501676,242.179321 L311.10723,254.407674 C310.187374,255.01918 308.945961,254.769213 308.334454,253.849358 C308.116351,253.521277 308,253.13609 308,252.742128 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </svg>\\n <svg class=\\\"oneline-pause-button\\\" width=\\\"20px\\\" height=\\\"20px\\\" viewBox=\\\"-1 0 19 20\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" opacity=\\\"0.9\\\">\\n <g class=\\\"oneline-icon\\\" transform=\\\"translate(-1034.000000, -1137.000000)\\\" fill=\\\"#EFEFEF\\\">\\n <g transform=\\\"translate(920.000000, 331.000000)\\\">\\n <g transform=\\\"translate(0.000000, 656.000000)\\\">\\n <g transform=\\\"translate(87.000000, 60.000000)\\\">\\n <path d=\\\"M29,90 L30.3333333,90 C31.4379028,90 32.3333333,90.8954305 32.3333333,92 L32.3333333,108 C32.3333333,109.104569 31.4379028,110 30.3333333,110 L29,110 C27.8954305,110 27,109.104569 27,108 L27,92 C27,90.8954305 27.8954305,90 29,90 Z M40.3333333,90 L41.6666667,90 C42.7712362,90 43.6666667,90.8954305 43.6666667,92 L43.6666667,108 C43.6666667,109.104569 42.7712362,110 41.6666667,110 L40.3333333,110 C39.2287638,110 38.3333333,109.104569 38.3333333,108 L38.3333333,92 C38.3333333,90.8954305 39.2287638,90 40.3333333,90 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </g>\\n </g>\\n </svg>\\n </button>\\n </div>\\n <div class=\\\"oneline-loader-container\\\">\\n <div class=\\\"la-ball-pulse\\\">\\n <div></div>\\n <div></div>\\n <div></div>\\n </div>\\n </div>\\n <div class=\\\"oneline-controls\\\">\\n <div class=\\\"oneline-time\\\" style=\\\"display: none\\\"></div>\\n <div class=\\\"oneline-progress\\\" style=\\\"display: none\\\" tabindex=\\\"0\\\" role=\\\"slider\\\" aria-orientation=\\\"horizontal\\\">\\n <div class=\\\"oneline-progress-fill-bg\\\">\\n <div class=\\\"oneline-progress-fill\\\"></div>\\n </div>\\n <div class=\\\"oneline-progress-seek-fill\\\"></div>\\n <svg\\n class=\\\"ring\\\"\\n width=\\\"120\\\"\\n height=\\\"120\\\">\\n <circle\\n class=\\\"ring-circle ring-bg\\\"\\n stroke=\\\"white\\\"\\n stroke-width=\\\"4\\\"\\n fill=\\\"transparent\\\"\\n r=\\\"52\\\"\\n cx=\\\"60\\\"\\n cy=\\\"60\\\"/>\\n <circle\\n class=\\\"ring-circle ring-fill\\\"\\n stroke=\\\"red\\\"\\n stroke-width=\\\"4\\\"\\n fill=\\\"transparent\\\"\\n r=\\\"52\\\"\\n cx=\\\"60\\\"\\n cy=\\\"60\\\"/>\\n <circle\\n class=\\\"ring-circle ring-seek\\\"\\n stroke=\\\"blue\\\"\\n stroke-width=\\\"4\\\"\\n fill=\\\"transparent\\\"\\n r=\\\"52\\\"\\n cx=\\\"60\\\"\\n cy=\\\"60\\\"/>\\n </svg>\\n </div>\\n <div class=\\\"oneline-control-buttons\\\">\\n <button class=\\\"oneline-mute-button\\\" style=\\\"display: none\\\" type=\\\"button\\\">\\n <svg class=\\\"mute\\\" width=\\\"16px\\\" height=\\\"20px\\\" viewBox=\\\"0 0 16 20\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <title>Mute</title>\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n <g transform=\\\"translate(-1392.000000, -1231.000000)\\\" fill=\\\"#FFFFFF\\\" fill-rule=\\\"nonzero\\\">\\n <g transform=\\\"translate(802.000000, 794.000000)\\\">\\n <path d=\\\"M602.985222,437 L602.985222,456.123535 L600.787842,456.123535 L592.44458,450.014526 L590,450.014526 L590,442.986084 L592.44458,442.986084 L600.787842,437 L602.985222,437 Z M606,444 L606,449 L604,449 L604,444 L606,444 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </svg>\\n <svg class=\\\"unmute\\\" width=\\\"16px\\\" height=\\\"20px\\\" viewBox=\\\"0 0 16 20\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <title>Unmute</title>\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n <g transform=\\\"translate(-1392.000000, -1197.000000)\\\" fill=\\\"#FFFFFF\\\" fill-rule=\\\"nonzero\\\">\\n <g transform=\\\"translate(802.000000, 794.000000)\\\">\\n <path d=\\\"M602.985,411.757 L602.985222,422.123535 L600.787842,422.123535 L596.072,418.67 L602.985,411.757 Z M606.424621,403.368272 L607.838835,404.782486 L592.282486,420.338835 L590.868272,418.924621 L606.424621,403.368272 Z M602.985222,403 L602.985,404.687 L591.658,416.014 L590,416.014526 L590,408.986084 L592.44458,408.986084 L600.787842,403 L602.985222,403 Z M606,410 L606,415 L604,415 L604,410.742 L604.743,409.999 L606,410 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </svg>\\n </button>\\n <button class=\\\"oneline-fullscreen-button\\\" style=\\\"display: none\\\" type=\\\"button\\\">\\n <svg width=\\\"19px\\\" class=\\\"fullscreen-icon-on\\\" height=\\\"19px\\\" viewBox=\\\"0 0 19 19\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <title>Fullscreen</title>\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n <g transform=\\\"translate(-1351.000000, -1231.000000)\\\" fill=\\\"#FFFFFF\\\">\\n <g transform=\\\"translate(802.000000, 794.000000)\\\">\\n <path d=\\\"M554.971733,448.344364 C555.432291,447.885212 556.177464,447.885212 556.638022,448.344364 L556.638022,448.344364 L556.654581,448.36091 C557.11514,448.821096 557.11514,449.566701 556.654581,450.025853 L556.654581,450.025853 L554.013357,452.664943 C553.750477,452.928645 553.750477,453.354705 554.013357,453.618407 L554.013357,453.618407 L555.245998,454.850052 C555.671367,455.274043 555.370193,456 554.769915,456 L554.769915,456 L549,456 L549,450.234747 C549,449.634953 549.726544,449.334023 550.150878,449.759049 L550.150878,449.759049 L551.377308,450.983454 C551.640189,451.247156 552.067628,451.247156 552.330509,450.983454 L552.330509,450.983454 Z M568,437 L568,442.764694 C568,443.36443 567.273456,443.665331 566.849122,443.240346 L566.849122,443.240346 L565.622692,442.01606 C565.359811,441.753417 564.932372,441.753417 564.669491,442.01606 L564.669491,442.01606 L562.028267,444.654894 C561.567709,445.115035 560.822536,445.115035 560.361978,444.654894 L560.361978,444.654894 L560.345419,444.638349 C559.88486,444.178208 559.88486,443.433709 560.345419,442.973568 L560.345419,442.973568 L562.986643,440.334734 C563.249523,440.071057 563.249523,439.645038 562.986643,439.381362 L562.986643,439.381362 L561.752967,438.149837 C561.328633,437.725886 561.629807,437 562.230085,437 L562.230085,437 L568,437 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </svg>\\n <svg class=\\\"fullscreen-icon-off\\\" width=\\\"19px\\\" height=\\\"19px\\\" viewBox=\\\"0 0 19 19\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n <g transform=\\\"translate(-1351.000000, -1197.000000)\\\" fill=\\\"#FFFFFF\\\">\\n <g transform=\\\"translate(802.000000, 794.000000)\\\">\\n <path d=\\\"M557,414 L557,419.764694 C557,420.36443 556.273456,420.665331 555.849122,420.240346 L555.849122,420.240346 L554.622692,419.01606 C554.359811,418.753417 553.932372,418.753417 553.669491,419.01606 L553.669491,419.01606 L551.028267,421.654894 C550.567709,422.115035 549.822536,422.115035 549.361978,421.654894 L549.361978,421.654894 L549.345419,421.638349 C548.88486,421.178208 548.88486,420.433709 549.345419,419.973568 L549.345419,419.973568 L551.986643,417.334734 C552.249523,417.071057 552.249523,416.645038 551.986643,416.381362 L551.986643,416.381362 L550.752967,415.149837 C550.328633,414.725886 550.629807,414 551.230085,414 L551.230085,414 L557,414 Z M565.971733,403.344364 C566.432291,402.885212 567.177464,402.885212 567.638022,403.344364 L567.638022,403.344364 L567.654581,403.36091 C568.11514,403.821096 568.11514,404.566701 567.654581,405.025853 L567.654581,405.025853 L565.013357,407.664943 C564.750477,407.928645 564.750477,408.354705 565.013357,408.618407 L565.013357,408.618407 L566.245998,409.850052 C566.671367,410.274043 566.370193,411 565.769915,411 L565.769915,411 L560,411 L560,405.234747 C560,404.634953 560.726544,404.334023 561.150878,404.759049 L561.150878,404.759049 L562.377308,405.983454 C562.640189,406.247156 563.067628,406.247156 563.330509,405.983454 L563.330509,405.983454 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </svg>\\n </button>\\n </div>\\n </div>\\n</div>\\n\"","export function isVimeo(url) {\n return !!(url && url.match(/vimeo\\.com\\/(\\d+)/i));\n}\n\nexport function getVimeoId(url) {\n const matches = url && url.match(/vimeo\\.com\\/(\\d+)/i);\n return matches ? matches[1] : null;\n}\n\nexport function videoIsRestricted(url) {\n const restrictedUrls = [\n 'assets-1.entertainvideo.com/assets/video/30df75d701c29181572c47389a031c60.mp4',\n ];\n for (let i = 0; i < restrictedUrls.length; i++) {\n if (url && url.indexOf(restrictedUrls[i]) !== -1) {\n return true;\n }\n }\n return false;\n}\n\nexport function formatTime(seconds) {\n seconds = Math.floor(seconds);\n let hoursNum = Math.floor(seconds / 3600);\n let minutesNum = Math.floor((seconds - hoursNum * 3600) / 60);\n let secondsNum = seconds - hoursNum * 3600 - minutesNum * 60;\n\n minutesNum = minutesNum < 10 ? '0' + minutesNum : minutesNum;\n secondsNum = secondsNum < 10 ? '0' + secondsNum : secondsNum;\n\n let time = minutesNum + ':' + secondsNum;\n if (hoursNum > 0) {\n time = hoursNum + ':' + time;\n }\n return time;\n}\n\nexport function resolveElement(target) {\n if (!target) {\n throw new Error('onelineplayer.mount: target is required');\n }\n if (typeof target === 'string') {\n const el = document.querySelector(target);\n if (!el) {\n throw new Error('onelineplayer.mount: element not found: ' + target);\n }\n return el;\n }\n if (target.nodeType === 1) {\n return target;\n }\n throw new Error('onelineplayer.mount: target must be a selector or Element');\n}\n\nexport function normalizeOptions(options) {\n const opts = options || {};\n return {\n url: opts.url || '',\n poster: opts.poster || '',\n autoplay: !!opts.autoplay,\n loop: !!opts.loop,\n autopause: !!opts.autopause,\n muted: !!opts.muted,\n clickable: opts.clickable !== false,\n time: !!opts.time,\n progressBar: !!opts.progressBar,\n playButton: opts.playButton !== undefined ? !!opts.playButton : true,\n overlay: opts.overlay !== undefined ? !!opts.overlay : true,\n muteButton: !!opts.muteButton,\n fullscreenButton: !!opts.fullscreenButton,\n style: opts.style || 'light',\n buttonColor: opts.buttonColor || null,\n buttonSize: opts.buttonSize || null,\n overlayColor: opts.overlayColor || null,\n overlayOpacity: opts.overlayOpacity != null ? opts.overlayOpacity : null,\n quality: opts.quality || 'auto',\n };\n}\n","import { videoIsRestricted } from '../utils.js';\n\nexport function createHtml5Adapter(els, options, debug) {\n const player = els.video;\n const container = els.wrap;\n\n player.style.display = 'block';\n player.muted = !!options.muted;\n\n if (options.autoplay) {\n player.setAttribute('autoplay', '');\n }\n if (options.loop) {\n player.setAttribute('loop', '');\n }\n\n if (videoIsRestricted(options.url)) {\n player.src = 'restricted';\n } else {\n player.src = options.url;\n }\n\n player.addEventListener('error', function () {\n const errorMessage = container.querySelector('.oneline-error-message');\n if (player.error === null) {\n return;\n }\n\n let text = 'Video error';\n switch (player.error.code) {\n case 1:\n text = 'Video aborted';\n break;\n case 2:\n text = 'Video expired, reload the page';\n break;\n case 3:\n text = 'Network error';\n break;\n case 4:\n text = 'Video not found or not supported';\n break;\n }\n\n if (errorMessage) {\n errorMessage.innerText = text;\n }\n container.classList.add('oneline-error');\n container.classList.remove('oneline-load');\n });\n\n player.addEventListener(\n 'waiting',\n function () {\n if (debug) console.log('waiting');\n container.classList.add('oneline-load');\n },\n false\n );\n\n player.addEventListener(\n 'canplaythrough',\n function () {\n if (debug) console.log('canplay');\n container.classList.remove('oneline-load');\n },\n false\n );\n\n return {\n type: 'html',\n load: function (nextOptions) {\n player.src = nextOptions.url;\n if (nextOptions.autoplay) {\n player.setAttribute('autoplay', '');\n }\n },\n node: function () {\n return player;\n },\n play: function () {\n return player.play();\n },\n pause: function () {\n player.pause();\n },\n mute: function () {\n player.muted = true;\n },\n unmute: function () {\n player.muted = false;\n },\n getPaused: function (callback) {\n callback(player.paused);\n },\n getWidth: function (callback) {\n callback(player.videoWidth);\n },\n getHeight: function (callback) {\n callback(player.videoHeight);\n },\n getTime: function (callback) {\n callback(player.currentTime);\n },\n setTime: function (seconds) {\n player.currentTime = seconds;\n },\n setLoop: function (value) {\n if (value) {\n player.setAttribute('loop', '');\n } else {\n player.removeAttribute('loop');\n }\n },\n getDuration: function (callback) {\n callback(player.duration);\n },\n getMuted: function (callback) {\n callback(player.muted);\n },\n onLoadstart: function (callback) {\n player.addEventListener('loadstart', callback, false);\n },\n onLoadend: function (callback) {\n player.addEventListener('loadended', callback, false);\n },\n onReady: function (callback) {\n player.addEventListener('loadedmetadata', callback, false);\n },\n onPlay: function (callback) {\n player.addEventListener('play', callback, false);\n },\n onPause: function (callback) {\n player.addEventListener('pause', callback, false);\n },\n onTimeupdate: function (callback) {\n player.addEventListener('timeupdate', callback, false);\n },\n onVolumechange: function (callback) {\n player.addEventListener('volumechange', callback, false);\n },\n onEnded: function (callback) {\n player.addEventListener('ended', callback, false);\n },\n onSeeked: function (callback) {\n player.addEventListener('seeked', callback, false);\n },\n destroy: function () {\n player.removeAttribute('src');\n player.load();\n },\n };\n}\n","import { getVimeoId } from '../utils.js';\n\nconst VIMEO_SDK = 'https://player.vimeo.com/api/player.js';\nlet vimeoSdkPromise = null;\n\nfunction loadVimeoSdk() {\n if (typeof window !== 'undefined' && window.Vimeo && window.Vimeo.Player) {\n return Promise.resolve(window.Vimeo);\n }\n if (vimeoSdkPromise) {\n return vimeoSdkPromise;\n }\n vimeoSdkPromise = new Promise(function (resolve, reject) {\n const existing = document.querySelector('script[data-onelineplayer-vimeo]');\n if (existing) {\n existing.addEventListener('load', function () {\n resolve(window.Vimeo);\n });\n existing.addEventListener('error', reject);\n return;\n }\n const script = document.createElement('script');\n script.src = VIMEO_SDK;\n script.async = true;\n script.dataset.onelineplayerVimeo = '1';\n script.onload = function () {\n resolve(window.Vimeo);\n };\n script.onerror = reject;\n document.head.appendChild(script);\n });\n return vimeoSdkPromise;\n}\n\nfunction getVimeoOptions(options) {\n return {\n url: options.url,\n controls: false,\n muted: options.muted,\n autoplay: options.autoplay,\n loop: options.loop,\n quality: options.quality,\n responsive: true,\n };\n}\n\nexport async function createVimeoAdapter(els, options) {\n els.embed.style.display = 'block';\n const Vimeo = await loadVimeoSdk();\n const player = new Vimeo.Player(els.embed, getVimeoOptions(options));\n\n if (!options.muted) {\n player.setVolume(1);\n }\n\n return {\n type: 'vimeo',\n load: function (nextOptions) {\n player.loadVideo(getVimeoOptions(nextOptions));\n },\n node: function () {\n return player.element;\n },\n play: function () {\n return player.play();\n },\n pause: function () {\n return player.pause();\n },\n mute: function () {\n player.setVolume(0);\n },\n unmute: function () {\n player.setVolume(1);\n },\n getPaused: function (callback) {\n player.getPaused().then(callback);\n },\n getWidth: function (callback) {\n player.getVideoWidth().then(callback);\n },\n getHeight: function (callback) {\n player.getVideoHeight().then(callback);\n },\n getTime: function (callback) {\n player.getCurrentTime().then(callback);\n },\n setTime: function (seconds) {\n player.setCurrentTime(seconds);\n },\n setLoop: function (value) {\n player.setLoop(value);\n },\n getDuration: function (callback) {\n player.getDuration().then(callback);\n },\n getMuted: function (callback) {\n player.getVolume().then(function (volume) {\n callback(volume === 0);\n });\n },\n onLoadstart: function (callback) {\n player.on('bufferstart', callback);\n },\n onLoadend: function (callback) {\n player.on('bufferend', callback);\n },\n onReady: function (callback) {\n player.on('loaded', callback);\n },\n onPlay: function (callback) {\n player.on('play', callback);\n },\n onPause: function (callback) {\n player.on('pause', callback);\n },\n onTimeupdate: function (callback) {\n player.on('timeupdate', callback);\n },\n onVolumechange: function (callback) {\n player.on('volumechange', callback);\n },\n onEnded: function (callback) {\n player.on('ended', callback);\n },\n onSeeked: function (callback) {\n player.on('seeked', callback);\n },\n destroy: function () {\n return player.destroy();\n },\n };\n}\n\nexport { getVimeoId, loadVimeoSdk };\n","export function initPlayButton(ctx) {\n const { video, options, els, components, state } = ctx;\n const component = els.play;\n const container = els.wrap;\n\n if (options && options.buttonSize) {\n component.style.width = options.buttonSize + 'px';\n component.style.marginTop = -(options.buttonSize / 2) + 'px';\n component.style.marginLeft = -(options.buttonSize / 2) + 'px';\n } else {\n component.style.width = null;\n component.style.marginTop = null;\n component.style.marginLeft = null;\n }\n\n const iconsFill = options && options.buttonColor ? options.buttonColor : null;\n const icons = component.querySelectorAll('.oneline-icon');\n for (let i = 0; i < icons.length; i++) {\n icons[i].style.fill = iconsFill;\n }\n\n if (components.playButton) {\n return components.playButton;\n }\n\n const event = state.userCanTouch ? 'touchend' : 'click';\n component.addEventListener(event, function () {\n container.classList.add('oneline-started');\n video.getPaused(function (paused) {\n paused ? video.play() : video.pause();\n });\n }, false);\n\n component.style.display = 'block';\n components.playButton = component;\n return components.playButton;\n}\n","export function initMuteButton(ctx) {\n const { video, els, components, state } = ctx;\n\n if (components.muteButton) {\n return components.muteButton;\n }\n\n const muteButton = els.muteButton;\n\n video.getMuted(function (muted) {\n if (muted) {\n muteButton.classList.add('muted');\n }\n });\n\n const event = state.userCanTouch ? 'touchend' : 'click';\n muteButton.addEventListener(event, function () {\n video.getMuted(function (muted) {\n muted ? video.unmute() : video.mute();\n });\n });\n\n video.onVolumechange(function () {\n video.getMuted(function (muted) {\n muted ? muteButton.classList.add('muted') : muteButton.classList.remove('muted');\n });\n });\n\n muteButton.style.display = 'block';\n components.muteButton = muteButton;\n return components.muteButton;\n}\n","export function initFullscreenButton(ctx) {\n const { video, els, components, cleanup } = ctx;\n const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n const fullscreenButton = els.fullscreenButton;\n\n if (iOS && video.type === 'vimeo') {\n fullscreenButton.style.display = 'none';\n return null;\n }\n\n if (components.fullscreenButton) {\n return components.fullscreenButton;\n }\n\n function onFullscreenChange() {\n const container = els.wrap;\n if (isFullscreenActive()) {\n container.classList.remove('oneline-fullscreen');\n video.node().dispatchEvent(new CustomEvent('fullscreenExit'));\n } else {\n container.classList.add('oneline-fullscreen');\n video.node().dispatchEvent(new CustomEvent('fullscreenEnter'));\n }\n }\n\n function toggleFullScreen() {\n const target = els.root;\n\n if (isFullscreenActive()) {\n if (target.requestFullscreen) {\n target.requestFullscreen();\n } else if (target.msRequestFullscreen) {\n target.msRequestFullscreen();\n } else if (target.mozRequestFullScreen) {\n target.mozRequestFullScreen();\n } else if (target.webkitRequestFullscreen) {\n target.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n } else if (iOS && video.type === 'html') {\n video.node().webkitEnterFullscreen();\n }\n } else {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n }\n }\n\n function isFullscreenActive() {\n return (\n !document.fullscreenElement &&\n !document.mozFullScreenElement &&\n !document.webkitFullscreenElement &&\n !document.msFullscreenElement\n );\n }\n\n const onClick = function () {\n toggleFullScreen();\n fullscreenButton.blur();\n };\n\n fullscreenButton.addEventListener('click', onClick);\n document.addEventListener('webkitfullscreenchange', onFullscreenChange);\n document.addEventListener('fullscreenchange', onFullscreenChange);\n document.addEventListener('mozfullscreenchange', onFullscreenChange);\n document.addEventListener('MSFullscreenChange', onFullscreenChange);\n\n cleanup.push(function () {\n fullscreenButton.removeEventListener('click', onClick);\n document.removeEventListener('webkitfullscreenchange', onFullscreenChange);\n document.removeEventListener('fullscreenchange', onFullscreenChange);\n document.removeEventListener('mozfullscreenchange', onFullscreenChange);\n document.removeEventListener('MSFullscreenChange', onFullscreenChange);\n });\n\n fullscreenButton.style.display = 'block';\n components.fullscreenButton = fullscreenButton;\n return components.fullscreenButton;\n}\n","import { isVimeo } from '../utils.js';\n\nexport function initProgressBar(ctx) {\n const { video, options, els, components, cleanup } = ctx;\n\n if (components.progressBar) {\n return components.progressBar;\n }\n\n let seekHolded = false;\n let progressInterval = null;\n const progressBar = els.progress;\n const progressBarFill = els.progressFill;\n const progressBarSeekFill = els.progressSeekFill;\n const container = els.wrap;\n\n video.onPlay(function () {\n startTrackProgress();\n });\n\n video.onPause(function () {\n stopTrackProgress();\n });\n\n video.onEnded(function () {\n progressBarFill.style.width = progressBar.offsetWidth + 'px';\n });\n\n function onMouseDown(e) {\n seek(e);\n seekHolded = true;\n }\n function onMouseUp() {\n seekHolded = false;\n }\n function onMouseMove(e) {\n onMove(e, false);\n }\n function onTouchStart(e) {\n seekHolded = true;\n e.returnValue = false;\n }\n function onTouchMove(e) {\n onMove(e, true);\n }\n function onTouchEnd() {\n seekHolded = false;\n }\n function onKeyDown(e) {\n if (e.keyCode === 39) {\n addTime(5);\n }\n if (e.keyCode === 37) {\n addTime(-5);\n }\n }\n\n progressBar.addEventListener('mousedown', onMouseDown, false);\n progressBar.addEventListener('mouseup', onMouseUp, false);\n progressBar.addEventListener('mousemove', onMouseMove, false);\n progressBar.addEventListener('touchstart', onTouchStart, false);\n progressBar.addEventListener('touchmove', onTouchMove, false);\n progressBar.addEventListener('touchend', onTouchEnd, false);\n document.addEventListener('keydown', onKeyDown, false);\n\n cleanup.push(function () {\n stopTrackProgress();\n progressBar.removeEventListener('mousedown', onMouseDown, false);\n progressBar.removeEventListener('mouseup', onMouseUp, false);\n progressBar.removeEventListener('mousemove', onMouseMove, false);\n progressBar.removeEventListener('touchstart', onTouchStart, false);\n progressBar.removeEventListener('touchmove', onTouchMove, false);\n progressBar.removeEventListener('touchend', onTouchEnd, false);\n document.removeEventListener('keydown', onKeyDown, false);\n });\n\n progressBar.style.display = 'block';\n components.progressBar = progressBar;\n return progressBar;\n\n function addTime(secondsToAdd) {\n video.getTime(function (time) {\n video.setTime(time + secondsToAdd);\n });\n }\n\n function onMove(e, isTouch) {\n if (isTouch) {\n e.returnValue = false;\n }\n const percent = getSeekedPercent(e);\n setSeekProgress(percent);\n if (seekHolded) {\n seek(e);\n }\n }\n\n function seek(e) {\n const percent = getSeekedPercent(e);\n if (!isVimeo(options.url)) {\n container.classList.add('oneline-load');\n }\n video.getDuration(function (videoDuration) {\n video.setTime((percent / 100) * videoDuration);\n updateProgress();\n });\n }\n\n function startTrackProgress() {\n (function progressTrack() {\n updateProgress();\n progressInterval = setTimeout(progressTrack, 50);\n })();\n }\n\n function stopTrackProgress() {\n clearTimeout(progressInterval);\n }\n\n function updateProgress() {\n video.getTime(function (time) {\n video.getDuration(function (videoDuration) {\n setProgress((time * 100) / videoDuration);\n });\n });\n }\n\n function setProgress(percent) {\n progressBarFill.style.width = percent + '%';\n }\n\n function setSeekProgress(percent) {\n progressBarSeekFill.style.width = percent + '%';\n }\n\n function getSeekedPercent(e) {\n const isTouch = e.changedTouches;\n const progressBarLeftOffset = progressBar.getBoundingClientRect().left;\n const offset = isTouch ? e.pageX : e.clientX;\n const position = offset - progressBarLeftOffset;\n const fullWidth = progressBar.offsetWidth;\n\n if (position > 0 && position < fullWidth) {\n return (position * 100) / fullWidth;\n }\n return 0;\n }\n}\n","import { formatTime } from '../utils.js';\n\nexport function initTime(ctx) {\n const { video, els, components } = ctx;\n const slot = els.time;\n\n video.getTime(function (time) {\n slot.innerHTML = formatTime(time);\n });\n slot.style.display = 'block';\n\n if (components.time) {\n return components.time;\n }\n\n setCurrentTime();\n video.onTimeupdate(function () {\n setCurrentTime();\n });\n\n components.time = slot;\n return slot;\n\n function setCurrentTime() {\n video.getTime(function (time) {\n slot.innerHTML = formatTime(time);\n });\n }\n}\n","export function initPoster(ctx) {\n const { video, options, els, components } = ctx;\n const poster = els.poster;\n const url = options.poster;\n\n if (!url || url === 'null') {\n poster.style.display = 'none';\n return null;\n }\n\n poster.style.backgroundColor = '#000';\n poster.style.backgroundImage = 'url(' + url + ')';\n\n if (components.poster) {\n return components.poster;\n }\n\n poster.style.display = 'block';\n\n video.onPlay(function () {\n poster.style.display = 'none';\n });\n\n components.poster = poster;\n return poster;\n}\n","export function initOverlay(ctx) {\n const { video, options, els, components, state } = ctx;\n const overlay = els.overlay;\n const container = els.wrap;\n\n if (options && options.overlayColor) {\n overlay.style.backgroundColor = options.overlayColor;\n } else {\n overlay.style.backgroundColor = null;\n }\n\n if (options && options.overlayOpacity != null) {\n overlay.dataset.opacity = options.overlayOpacity;\n video.getPaused(function (paused) {\n if (paused) {\n overlay.style.opacity = overlay.dataset.opacity;\n }\n });\n } else {\n delete overlay.dataset.opacity;\n overlay.style.opacity = null;\n }\n\n if (components.overlay) {\n return components.overlay;\n }\n\n overlay.classList.add('oneline-clickable');\n\n const event = state.userCanTouch ? 'touchend' : 'click';\n overlay.addEventListener(event, function () {\n container.classList.add('oneline-started');\n video.getPaused(function (paused) {\n paused ? video.play() : video.pause();\n });\n }, false);\n\n video.onPlay(function () {\n if (typeof overlay.dataset.opacity !== 'undefined') {\n overlay.style.opacity = 0;\n }\n });\n\n video.onPause(function () {\n if (typeof overlay.dataset.opacity !== 'undefined') {\n overlay.style.opacity = overlay.dataset.opacity;\n }\n });\n\n overlay.addEventListener('mouseleave', function () {\n container.classList.remove('oneline-hide-controls');\n container.classList.remove('oneline-hide-all');\n });\n\n overlay.addEventListener('mouseenter', function () {\n if (!state.userCanTouch) {\n container.classList.remove('oneline-hide-controls');\n container.classList.remove('oneline-hide-all');\n if (state.hideTimeout) {\n clearTimeout(state.hideTimeout);\n }\n }\n });\n\n overlay.style.display = 'block';\n components.overlay = overlay;\n return components.overlay;\n}\n","import templateHtml from './template.html?raw';\nimport { isVimeo } from './utils.js';\nimport { createHtml5Adapter } from './adapters/html5.js';\nimport { createVimeoAdapter } from './adapters/vimeo.js';\nimport { initPlayButton } from './controls/play-button.js';\nimport { initMuteButton } from './controls/mute-button.js';\nimport { initFullscreenButton } from './controls/fullscreen.js';\nimport { initProgressBar } from './controls/progress-bar.js';\nimport { initTime } from './controls/time.js';\nimport { initPoster } from './controls/poster.js';\nimport { initOverlay } from './controls/overlay.js';\n\nconst instances = new Set();\n\nexport function getInstances() {\n return instances;\n}\n\nfunction collectEls(root) {\n const wrap = root.querySelector('.oneline-wrap');\n return {\n root: root,\n wrap: wrap,\n video: wrap.querySelector('.oneline-video'),\n embed: wrap.querySelector('.oneline-embed'),\n poster: wrap.querySelector('.oneline-poster'),\n overlay: wrap.querySelector('.oneline-overlay'),\n play: wrap.querySelector('.oneline-play-pause'),\n time: wrap.querySelector('.oneline-time'),\n progress: wrap.querySelector('.oneline-progress'),\n progressFill: wrap.querySelector('.oneline-progress-fill'),\n progressSeekFill: wrap.querySelector('.oneline-progress-seek-fill'),\n muteButton: wrap.querySelector('.oneline-mute-button'),\n fullscreenButton: wrap.querySelector('.oneline-fullscreen-button'),\n };\n}\n\nfunction render(root) {\n const tpl = document.createElement('template');\n tpl.innerHTML = templateHtml.trim();\n root.classList.add('oneline-player');\n root.replaceChildren(tpl.content.cloneNode(true));\n return collectEls(root);\n}\n\nexport class Player {\n constructor(root, options) {\n this.root = root;\n this.options = options;\n this.components = {};\n this.cleanup = [];\n this.state = {\n userCanTouch: false,\n hideTimeout: null,\n debug: false,\n };\n this.video = null;\n this.els = null;\n this._ready = false;\n this._destroyed = false;\n }\n\n async init() {\n this.els = render(this.root);\n const els = this.els;\n const options = this.options;\n const state = this.state;\n\n const onTouch = function () {\n state.userCanTouch = true;\n };\n els.root.addEventListener('touchstart', onTouch, true);\n this.cleanup.push(function () {\n els.root.removeEventListener('touchstart', onTouch, true);\n });\n\n if (isVimeo(options.url)) {\n this.video = await createVimeoAdapter(els, options);\n } else {\n this.video = createHtml5Adapter(els, options, state.debug);\n els.wrap.classList.add('oneline-load');\n }\n\n const video = this.video;\n const container = els.wrap;\n\n if (options.style === 'dark') {\n container.classList.add('oneline-dark');\n }\n\n if (options.poster) {\n initPoster({ video, options, els, components: this.components });\n }\n\n if (options.overlay) {\n initOverlay({ video, options, els, components: this.components, state });\n }\n\n if (options.autopause) {\n const self = this;\n video.onPlay(function () {\n instances.forEach(function (other) {\n if (other !== self && !other._destroyed) {\n other.pause();\n }\n });\n });\n }\n\n video.onLoadstart(function () {\n if (state.debug) console.log('loadstart');\n if (!isVimeo(options.url)) {\n container.classList.add('oneline-load');\n }\n container.classList.remove('oneline-error');\n });\n\n video.onLoadend(function () {\n if (state.debug) console.log('loadend');\n container.classList.remove('oneline-load');\n });\n\n video.onPlay(function () {\n if (state.debug) console.log('play');\n container.classList.add('oneline-hide-controls');\n container.classList.add('oneline-playing');\n container.classList.remove('oneline-paused');\n state.hideTimeout = setTimeout(function () {\n container.classList.add('oneline-hide-all');\n }, 3000);\n });\n\n video.onPause(function () {\n if (state.debug) console.log('pause');\n container.classList.add('oneline-paused');\n container.classList.remove('oneline-load');\n container.classList.remove('oneline-playing');\n container.classList.remove('oneline-hide-all');\n clearTimeout(state.hideTimeout);\n });\n\n video.onSeeked(function () {\n container.classList.remove('oneline-load');\n });\n\n const onMouseLeave = function () {\n container.classList.remove('oneline-hide-controls');\n container.classList.remove('oneline-hide-all');\n container.classList.remove('active');\n };\n const onMouseEnter = function () {\n container.classList.remove('oneline-hide-controls');\n container.classList.remove('oneline-hide-all');\n clearTimeout(state.hideTimeout);\n };\n container.addEventListener('mouseleave', onMouseLeave);\n container.addEventListener('mouseenter', onMouseEnter);\n this.cleanup.push(function () {\n container.removeEventListener('mouseleave', onMouseLeave);\n container.removeEventListener('mouseenter', onMouseEnter);\n });\n\n const self = this;\n video.onReady(function () {\n if (self._destroyed) return;\n if (state.debug) console.log('loadedmetadata');\n\n container.classList.add('oneline-ready');\n container.classList.remove('oneline-load');\n if (!options.autoplay) {\n container.classList.add('oneline-paused');\n }\n\n const ctx = {\n video,\n options,\n els,\n components: self.components,\n state,\n cleanup: self.cleanup,\n };\n\n if (options.time) initTime(ctx);\n if (options.progressBar) initProgressBar(ctx);\n if (options.playButton) initPlayButton(ctx);\n if (options.muteButton) initMuteButton(ctx);\n if (options.fullscreenButton) initFullscreenButton(ctx);\n\n self._bindKeyboardFocus(ctx);\n self._ready = true;\n });\n\n instances.add(this);\n return this;\n }\n\n _bindKeyboardFocus(ctx) {\n const { video, els, components, cleanup } = ctx;\n const container = els.wrap;\n const keys = ['playButton', 'progressBar', 'muteButton', 'fullscreenButton'];\n\n function onKeyUp(e) {\n if (e.keyCode === 9) {\n container.classList.add('keyboard-control');\n }\n }\n function onKeyDown(e) {\n const isButton = document.activeElement && document.activeElement.tagName === 'BUTTON';\n if (e.keyCode === 32 && !isButton) {\n video.getPaused(function (paused) {\n paused ? video.play() : video.pause();\n });\n }\n }\n\n document.addEventListener('keyup', onKeyUp);\n document.addEventListener('keydown', onKeyDown);\n cleanup.push(function () {\n document.removeEventListener('keyup', onKeyUp);\n document.removeEventListener('keydown', onKeyDown);\n });\n\n keys.forEach(function (key) {\n const el = components[key];\n if (!el) return;\n el.addEventListener('click', function (e) {\n if (e.clientX || e.clientY) {\n container.classList.remove('keyboard-control');\n }\n });\n el.addEventListener('focus', function () {\n container.classList.add('active');\n });\n el.addEventListener('blur', function () {\n container.classList.remove('active');\n });\n });\n }\n\n play() {\n if (this.video) this.video.play();\n }\n\n pause() {\n if (this.video) this.video.pause();\n }\n\n destroy() {\n if (this._destroyed) return;\n this._destroyed = true;\n clearTimeout(this.state.hideTimeout);\n this.cleanup.forEach(function (fn) {\n try {\n fn();\n } catch (e) {\n /* ignore */\n }\n });\n this.cleanup = [];\n if (this.video && this.video.destroy) {\n this.video.destroy();\n }\n instances.delete(this);\n this.root.classList.remove('oneline-player');\n this.root.replaceChildren();\n }\n}\n","import cssText from './style.css?inline';\n\nlet injected = false;\n\nexport function ensureStyles() {\n if (injected || typeof document === 'undefined') {\n return;\n }\n if (document.querySelector('style[data-onelineplayer]')) {\n injected = true;\n return;\n }\n const style = document.createElement('style');\n style.setAttribute('data-onelineplayer', '1');\n style.textContent = cssText;\n document.head.appendChild(style);\n injected = true;\n}\n","import { Player } from './Player.js';\nimport { resolveElement, normalizeOptions } from './utils.js';\nimport { ensureStyles } from './inject-css.js';\n\n/**\n * Mount onelineplayer into a container.\n * @param {string|Element} target\n * @param {object} options\n * @returns {Promise<Player>}\n */\nexport function mount(target, options) {\n ensureStyles();\n const root = resolveElement(target);\n const opts = normalizeOptions(options);\n const player = new Player(root, opts);\n return player.init();\n}\n\n/**\n * Destroy a player instance previously returned by mount.\n * @param {Player} player\n */\nexport function destroy(player) {\n if (player && typeof player.destroy === 'function') {\n player.destroy();\n }\n}\n\nconst onelineplayer = {\n mount,\n destroy,\n};\n\nexport default onelineplayer;\n"],"names":["templateHtml","isVimeo","url","videoIsRestricted","restrictedUrls","i","formatTime","seconds","hoursNum","minutesNum","secondsNum","time","resolveElement","target","el","normalizeOptions","options","opts","createHtml5Adapter","els","debug","player","container","errorMessage","text","nextOptions","callback","value","VIMEO_SDK","vimeoSdkPromise","loadVimeoSdk","resolve","reject","existing","script","getVimeoOptions","createVimeoAdapter","Vimeo","volume","initPlayButton","ctx","video","components","state","component","iconsFill","icons","event","paused","initMuteButton","muteButton","muted","initFullscreenButton","cleanup","iOS","fullscreenButton","onFullscreenChange","isFullscreenActive","toggleFullScreen","onClick","initProgressBar","seekHolded","progressInterval","progressBar","progressBarFill","progressBarSeekFill","startTrackProgress","stopTrackProgress","onMouseDown","e","seek","onMouseUp","onMouseMove","onMove","onTouchStart","onTouchMove","onTouchEnd","onKeyDown","addTime","secondsToAdd","isTouch","percent","getSeekedPercent","setSeekProgress","videoDuration","updateProgress","progressTrack","setProgress","progressBarLeftOffset","position","fullWidth","initTime","slot","setCurrentTime","initPoster","poster","initOverlay","overlay","instances","collectEls","root","wrap","render","tpl","Player","onTouch","self","other","onMouseLeave","onMouseEnter","keys","onKeyUp","isButton","key","fn","injected","ensureStyles","style","cssText","mount","destroy","onelineplayer"],"mappings":"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"}
|