Skip to content

Commit e8289ac

Browse files
committed
New icon set, added overlay html, updated demo & various bugfixes
1 parent 748ee2b commit e8289ac

120 files changed

Lines changed: 881 additions & 398 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,44 @@ All notable changes to this project will be documented in this file.
55
This project adheres to [Semantic Versioning](https://semver.org) and follows the [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format.
66

77
---
8+
## [1.2.0] – 2025-10-26
9+
10+
### Added
11+
12+
- Playlist: prev / next icons will be greyed out when navigation is not possible (i.e. last segment is reached)
13+
- UI: new API `ui.resize` (which forces recalculating player width and height)
14+
- Overlays: added type `html` for HTML-based overlays
15+
- Overlays: added option `sanitizeHTML` to prevent XSS attacks from unsafe HTML (enabled by default and enforced in the secure build). This (severely) limits the allowed HTML.
16+
- Demo: added link on the logo to the new vision.player.io microsite
17+
- Added new default iconset
18+
- Added options in the UI component to change the iconset back to the filled version
19+
20+
### Changed
21+
22+
- Updated dev dependencies
23+
- More CSS resets to make player more resilient to outside CSS
24+
- Updated screenshot in README.md
25+
26+
### Fixed
27+
28+
- When UI autohide is enabled, the UI no longer reappears immediately when a popup was open at the time of hiding
29+
- Prevent default event handling in the keyboard component when an action is detected, so it does not interfere with scrolling etc.
30+
- Thumbnail positioning should now also work when using non pixel units for scrubber width
31+
- UI scale should now honor the respective player config setting
32+
- Additional minor CSS fixes
33+
- Fixed docs in Media.md and Media.js
34+
- Fixed links to docs in demo
35+
- Removed broken link in HLS demo
36+
- Additional fixes in demo
37+
838
## [1.1.1] – 2025-10-15
939

1040
### Fixed
1141

1242
- Playlist title now retained when switching player language
1343
- Thumbnail positioning in scrubber should be properly centered now
1444
- Thumbnail positioning fixed when switching playlist media
15-
- small typo in english translation
45+
- Small typo in English translation
1646
- Fixed JSDocs in ScrubberTooltip.js
1747

1848
### Changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
# VisionPlayer
1515

16-
The **VisionPlayer** by **[alphanull](https://alphanull.de)** is a highly modular, lightweight, and feature-rich JavaScript video player for the modern web. Designed as a flexible component system, the player allows for deep customization, simple integration, and full control over both appearance and functionality. Whether you're building a minimal player for a single video or a complex interface supporting multilingual, multi-quality streaming with overlays and playlist management — this player adapts to your needs.
16+
The **VisionPlayer** by **[alphanull](https://alphanull.de)** is a highly modular, lightweight, and feature-rich JavaScript media player for the modern web. Designed as a flexible component system, the player allows for deep customization, simple integration, and full control over both appearance and functionality. Whether you're building a minimal player for a single video or a complex interface supporting multilingual, multi-quality streaming with overlays and playlist management — this player adapts to your needs.
1717

1818
## Features
1919

@@ -51,7 +51,7 @@ The **VisionPlayer** by **[alphanull](https://alphanull.de)** is a highly modula
5151

5252
## Demo
5353

54-
Just hop over to **[visionplayer.io](https://visionplayer.io)** to take a test drive! Right now, the page features demos identical to the ones coming with the development server, but in the future this site will deliver more information about the VisionPlayer, so stay tuned.
54+
Just hop over to **[visionplayer.io](https://visionplayer.io)** to take a test drive or watch some feature demos. The documentation is [also available there](https://visionplayer.io/docs/).
5555

5656
## Installation
5757

assets/images/screenshot.jpg

-2.74 KB
Loading

assets/scss/casting/airplay.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
vision-player {
55
.icon.airplay { @include icon-masked('player/airplay.svg', var(--vip-icon-height), var(--vip-icon-color)); }
6+
&.icon-filled .icon.airplay { @include icon-masked('player-filled/airplay.svg', var(--vip-icon-height), var(--vip-icon-color)); }
67
&.has-no-media .icon.airplay { @include disabled; }
78
&.is-airplay .icon.airplay::before { background: var(--color-1st); }
89
}

assets/scss/casting/chromecast.scss

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
vision-player {
66

77
.icon.chromecast { @include icon-masked('player/chromecast.svg', var(--vip-icon-height), var(--vip-icon-color)); }
8+
&.icon-filled .icon.chromecast { @include icon-masked('player-filled/chromecast.svg', var(--vip-icon-height), var(--vip-icon-color)); }
89
&.has-no-media .icon.chromecast { @include disabled; }
910

1011
.vip-chromecast {
@@ -33,7 +34,10 @@ vision-player {
3334
button { min-width: 12em; }
3435
}
3536

36-
p { text-align: start; }
37+
p {
38+
margin: 0;
39+
text-align: start;
40+
}
3741
}
3842

3943
.vip-chromecast-bg {

assets/scss/controller/keyboard.scss

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,14 @@ vision-player {
8383
&.keySeekForward .icon-bg.forward { display: flex; }
8484
&.keyPlay .icon-bg.play { display: flex; }
8585
}
86+
87+
&.icon-filled .vip-keyboard-overlay .icon {
88+
&.forward { @include icon-masked('player-filled/forward.svg', 100%, var(--vip-icon-color)); }
89+
&.rewind { @include icon-masked('player-filled/rewind.svg', 100%, var(--vip-icon-color)); }
90+
&.volume { @include icon-masked('player-filled/vol-full.svg', 100%, var(--vip-icon-color)); }
91+
&.volume.is-half { @include icon-masked('player-filled/vol-half.svg', 100%, var(--vip-icon-color)); }
92+
&.volume.is-muted { @include icon-masked('player-filled/vol-muted.svg', 100%, var(--vip-icon-color)); }
93+
&.play { @include icon-masked('player-filled/play.svg', 100%, var(--vip-icon-color)); margin-left: 0.3em; }
94+
&.pause { @include icon-masked('player-filled/pause.svg', 100%, var(--vip-icon-color)); }
95+
}
8696
}

assets/scss/controller/pip.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ vision-player {
4141
}
4242
}
4343

44+
&.icon-filled .vip-pip-bg {
45+
@include icon-masked('player-filled/pip-bg.svg', 11vmin, var(--color-contrast5));
46+
}
47+
4448
&.is-rtl .vip-pip {
4549
direction: rtl;
4650
}

assets/scss/controller/playoverlay.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ vision-player {
3939
}
4040

4141
.icon.play {
42+
@include icon-masked('player/play-overlay.svg', var(--vip-icon-height), var(--vip-icon-color));
4243
@include transition('opacity, transform');
4344

4445
position: absolute;

assets/scss/controller/scrubber.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ vision-player {
1010
width: 100%;
1111
height: var(--vip-scrubber-height);
1212
top: 0;
13-
border-radius: var(--border-radius);
13+
border-radius: var(--border-radius-small);
1414
background: none;
1515
filter: brightness(80%) drop-shadow(0.001em 0 0 var(--vip-scrubber-buffered));
1616
pointer-events: none;

assets/scss/controller/volume.scss

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/* stylelint-disable @stylistic/max-line-length */
2+
13
@use '../lib/mixins' as *;
24
@use '../core/mixins' as *;
35
@use '../core/vars' as *;
@@ -6,7 +8,6 @@ vision-player {
68

79
.vip-volume-slider {
810

9-
/* stylelint-disable-next-line @stylistic/max-line-length */
1011
@include icon-masked('player/vol-slider.svg', [var(--vip-volume-slider-width), var(--vip-icon-height)], var(--color-contrast5), 0, '::after');
1112
@include transition('opacity, width, transform');
1213

@@ -71,4 +72,10 @@ vision-player {
7172
> .icon.volume.is-half { @include icon-masked('player/vol-half.svg', var(--vip-icon-height), var(--vip-icon-color), 0 0 0 0); }
7273
> .icon.volume.is-muted { @include icon-masked('player/vol-muted.svg', var(--vip-icon-height), var(--vip-icon-color), 0 0 0 0); }
7374
}
75+
76+
&.icon-filled .vip-volume-wrapper {
77+
> .icon.volume { @include icon-masked('player-filled/vol-full.svg', var(--vip-icon-height), var(--vip-icon-color), 0 0 0 0); }
78+
> .icon.volume.is-half { @include icon-masked('player-filled/vol-half.svg', var(--vip-icon-height), var(--vip-icon-color), 0 0 0 0); }
79+
> .icon.volume.is-muted { @include icon-masked('player-filled/vol-muted.svg', var(--vip-icon-height), var(--vip-icon-color), 0 0 0 0); }
80+
}
7481
}

0 commit comments

Comments
 (0)