1
0
mirror of https://github.com/videojs/video.js.git synced 2025-01-08 07:00:10 +02:00
Commit Graph

246 Commits

Author SHA1 Message Date
Borut Zizmond
21b4a5225b
feat: implement spatial navigation (#8570)
* feat(player): add spatialNavigation feature

Adds spatialNavigation feature to enhance user experience

- Implemented spatial navigation in slider component
- Enhanced player functionality for improved navigation

* feat(player): add spatialNavigation class
Adds spatialNavigation class to manage spatial-navigation-polyfill
- Set class SpatialNavigation on its own file
- Imported SpatialNavigation class on component class

* feat(player): update spatialNavigation class
Adds 3 methods to spatialNavigation class to manage spatial-navigation-polyfill
- Added start() to: Start listen of keydown events
- Added stop() to: Stop listen key down events
- Added getComponents() to: Get current focusable components

* feat(player): modify spatialNavigation class & modify component class
Modify spatialNavigation class:
-Remove unrequired version of function ‘getComponents’
Modify component class:
-Add function ‘getIsFocusable’

* Added methods getPositions, handleFocus and handleBLur for spatial navigation needs

* feat(player): modify Component class, BigPlayButton class & ClickableComponent class
Modify Component class:
-Add method getIsAvailableToBeFocused
-Modify method getIsFocusable to only focus on finding focusable candidates
Modify spatialNavigation class:
-Remove unrequired method ‘getIsFocusable’
Modify component class:
-Remove unrequired method ‘getIsFocusable’

* Added import in player.js, Created base methods inside spatial-navigation.js

* feat(player): modify Component class & SpatialNavigation class
Modify Component class:
-Modify method getIsAvailableToBeFocused to be more strict on candidates
Modify spatialNavigation class:
-Modify method getComponents to get all focusable components

* feat(player): modify Component class
Modify Component class:
-Add documentation to ‘isVisible’ function

* added keydown event logic for spatial-navigation

* feat(player): modify SpatialNavigation class
Modify SpatialNavigation class:
-Modify documentation of functions

* feat(player): modify SpatialNavigation class
Modify SpatialNavigation class:
-Add ‘clear’ & ‘remove’ methods

* feat(player): modify SpatialNavigation class
Modify SpatialNavigation class:
-Add documentation of functions

* feat(player): modify SpatialNavigation class
Modify SpatialNavigation class:
-Add function ‘getCurretComponent’‘’

* feat(player): modify SpatialNavigation class
Modify SpatialNavigation class:
-Add documentation for ‘findBestCandidate’ method

* Added logic for moving focus to the best candidate

* Implemented move, findBestCandidate, isInDirection, and calculateDistance methods for spatial navigation logic

* Added a new player option enableKeydownListener, Added gap: 1px to control-bar for spatial-navigation-polyfill needs

* feat(player): modify SpatialNavigation class  & Component class
Modify SpatialNavigation class:
-Add function ‘handlePlayerBlur’
-Add function ‘handlePlayerFocus’
Modify Component class:
-Modify ‘handleBlur’
-Modify ‘handleFocus’

* Removed enableKeydownListener flag, as user should start the SpatialNavigation manually

* Added functionality to track changes in the focusableComponents list (custom event focusableComponentsChanged)

* feat(player): modify SpatialNavigation class, ModalDialog  & Component class
Modify SpatialNavigation class:
-Add ‘lastFocusedComponent’
-Add function ‘refocusComponent’
Modify ModalDialog class:
-Add condition on ‘close’ function
Modify Component class:
-Modify ‘handleBlur’ to store blurred component

* feat(player): modify ModalDialog
Modify ModalDialog:
-Add condition to close Modal on Backspace

* Refactor SpatialNavigation to use player.spatialNavigation

* Added a new custom event endOfFocusableComponents

* Added new styles for focused elements in case spatial navigation is enabled

* feat(player): modify SpatialNavigation class:
-Add condition so getComponents can get as candidates the UI elements from the playlist-ui

* Changed to window.SpatialNabigation to this.player_.spatialNavigation

* feat(player): modify text-track-settings, created test-track-settings-colors.js, text-track-settings-font.js,text-track-fieldset.js & text-track-select.js:
Modify text-track-settings class:
- Add changes so newly created components can work as content of the modal.
- Create new components as a refactor of  the contents of text-track-settings

* changed handleKeyDown inside component.js, getComponents method is now iterating player.children

* feat(player): create TrackSettingsControls Component & Modify TextTrackSettings
Create TrackSettingsControls Component:
-Create Component to show buttons reset & done as components.
Modify TextTrackSettings:
-Add Component TrackSettingsControls in TextTrackSettings

* feat(player): Modify ModalDialog
Modify ModalDialog:
-Add condition for stop propagation of event inside of ModalDialog when spatialNavigation is enabled

* getIsFocusable and getIsAvailableToBeFocused methods are now accepting el as a parameter, added a new methods findSuitableDOMChild and focus for spatialNavigation class

* feat(player): Modify TextTrackSettings:
Modify TextTrackSettings:
-Remove unrequired methods to create DOM elements since now those are created by Components.

* feat(player): Modify CaptionSettingsMenuItem:
Modify CaptionSettingsMenuItem:
-Add condition to focus component of TextTrackSelect when modal is open

* feat(player): Modify TextTrackSelect & TextTrackFieldset:
Modify TextTrackSelect :
Modify TextTrackFieldset:
-Add comments to certain functions to explain the code

* feat(player): Modify TrackSettingsControls:
Modify TrackSettingsControls:
-Remove unrequired comments & add comments to certain functions to explain the code

* feat(player): Modify SpatialNavigation, Component & ModalDialog:
Modify SpatialNavigation:
Modify Component:
Modify ModalDialog:
-Add & update comments of documentation.

* Handle ENTER keydown in Modals when spatial navigation is enabled

* feat(player): Modify ModalDialog, spatialNavigation, TrackSettingsControls, TextTrackFieldset, TextTrackSelect, TrackSettingsColors, TrackSettingsFont:
Modify ModalDialog:
Modify spatialNavigation:
Modify TrackSettingsControls:
Modify TextTrackFieldset:
Modify TextTrackSelect:
Modify TrackSettingsColors:
Modify TrackSettingsFont:
-Add & update comments of documentation.

* Implement additional RCU controls

* feat(player): Modify Component class:
Modify Component :
-Remove unrequired condition inside of handleFocus method.

* feat(player): Modify ModalDialog & CaptionSettingsMenuItem
Modify ModalDialog:
Modify CaptionSettingsMenuItem:
-Modify spatialNavigation condition to be more specific regarding spatialNavigation implementation.

* feat(player): Modify SpatialNavigation class:
Modify SpatialNavigation :
-Fix bug where ‘enter’ press was not working properly on select component inside of the ‘vjs-text-track-settings’ modal.

* feat(player): Modify SpatialNavigation class:
Modify SpatialNavigation :
-Minor improvements on the loops of certain functions to stop when they have found the element they are looking for.
-Implement minor spacing formatting on switch statement.

* Update src/js/component.js

More understandable documentation.

Co-authored-by: Dzianis Dashkevich <98566601+dzianis-dashkevich@users.noreply.github.com>

* Update src/js/component.js

More understandable documentation.

Co-authored-by: Dzianis Dashkevich <98566601+dzianis-dashkevich@users.noreply.github.com>

* feat(player): Modify SpatialNavigation & Component class:
Modify Component class :
Modify SpatialNavigation class :
-Modify ‘getIsFocusable’ function to use ‘this.el_’ instead of ‘el’ parameter

* feat(player): Modify SpatialNavigation class:
Modify SpatialNavigation class :
-Refactor onKeyDown function to use static data & return when pause is true.

* feat(player): Modify SpatialNavigation class:
Modify SpatialNavigation class :
-Refactor to use ‘.el()’ instead of ‘.el_’

* Update src/js/spatial-navigation.js

Co-authored-by: Walter Seymour <walterseymour15@gmail.com>

* feat(player): Modify ModalDialog class & MenuItem class:
Modify ModalDialog class :
Modify MenuItem class :
-Correct typo of ‘isSpatialNavlistening’ to  ‘isSpatialNavListening’.

* removed unused property, remove this.focus, which was added for testing purposes

* Changed parameters to private, removed redundant code, removed initialFocusedComponent parameter, change STEP_SECONDS to static

* feat(player): solve remaining  conflict:
Modify Spatial Navigation class :
- Solve conflict

* feat(player): Rename TrackSettingsColors & TrackSettingsFont

* feat(player): Remove unrequired functions calls from components TextTrackSettingsColors & TextTrackSettingsFont.

* feat(player):  Update spatial-navigation.js's keypress return keyword.

* bind focus and blur just if spatial navigation is enabled, add 1px gap if spatial navigation is enabled

* feat(player): Modify calls on 'isListening' & 'isPaused' for ModalDialog & TextTrackMenuItem

* feat(player): remove unrequired object on component 'TrackSettingsControls'

* Removed 1px gap

* feat(player): Rename function ‘getComponents’ to ‘updateFocusableComponents’

* Changed SpatialNavigation class to extend EventTarget, removed redundant methods for events

* fix(player): fix call of 'getIsAvailableToBeFocused' that was throwing an error.

* removed Static maps for key presses and extended keycode with the missing keys

* refactor(player): Modify functions of 'getIsDisabled', 'getIsExpresslyInert' & 'getIsFocusable' to be more in pair when stablished code of the player.

* Conditional assignment for keycode.codes.back based on platform, changed Backspace to Back key for Modal closing

* Extend the  object for reverse lookup, prenet Up/down keys to open a menu if spatial navigation is anabled

* refactor(player): Refactor 'SpatialNavKeycodes' file to not patch 'keycode' dependency

* fix(pllayer): fix issue related to 'back' not  being used properly in function 'isEventKey'

* feat(player): Rename imports  of 'spatial-navigation-keycode' to have their extension

* feat(player): Add example of use of 'Client app uses a global spatial-navigation solution'

* feat(player): rename 'spatial-navigation-keycode.js' filename

* Fix on src chnage issue, ESC button closing modal, expand vjs-modal-dialog

* change file name and object name

* fix: Update ids of labels to use 'guid' so unit test works properly

* fix: update localized text in text-track-settings-font & text-track-settings

* Mark some methods as private

* fix: modify content of modal 'text-track-settings' to change language properly

* fix: add missing '.' in jsdoc of text-track components

* feature: add unit test for 'text-track-select' component

* Add test for Spatial Navigation

* test(player): Add minor test related to 'handleBlur' & 'handleFocus'

* feat(player): Remove unrequired files from 'react-video-nav-app'

* test(player): Add small test to check if 'getPositions' returns required properties

* test(player): add test to verify 'getPositions()' properties are not empty

* Add missing tests for performMediaAction_ and move

* test(player): add test to for 'component.js' related to 'handleBlur'

* test(player): add minor test in component related to test keypress propagation event

* test(player): add test for component related to 'getIsAvailableToBeFocused' function

* test(player): add test for Modal Dialog related to call function of spatial navigation

* test(player): add tests  for 'spatial-navigation-key-codes'

* test(player): add tests for keycodes related to 'should return event name if keyCode is not available'

* test(player): add minor test for case when not required parametters are passed

* test(player): add test for 'caption-settings-menu-item'

* feat(player): remove 'react-video-nav-app'

* Move handleFocus and handleBlur from components.js to spatial-navigation.js

* refactor(player): refactor 'searchForTrackSelect' to be handled in the spatial navigation

* remove unrequired code in function 'searchForTrackSelect'

* update documentation comment to be in pair to its current use

* remove spatial navigation keydown from modal dialog and move it to spatial navigation class, modify the modal-dialog test accordingly

* remove useless tests

* Remove caption-settings-menu-item.test.js

* Add minor test to 'searchForTrackSelect' in spatial-navigation.test.js

* Add unit test for back key and listening to events

---------

Co-authored-by: CarlosVillasenor <carlosdeveloper9@gmail.com>
Co-authored-by: Dzianis Dashkevich <98566601+dzianis-dashkevich@users.noreply.github.com>
Co-authored-by: Walter Seymour <walterseymour15@gmail.com>
Co-authored-by: Carlos Villasenor Castillo <cvillasenor@Carloss-MacBook-Pro.local>
2024-04-17 19:34:52 -06:00
Gary Katsevman
d715e0fe03
feat(emulated-tracks): add class to force cues to be center aligned (#8625)
https://github.com/videojs/http-streaming/pull/1408 updated 608 captions to default to be left aligned. This may be unwanted by some folks and we should provide an easier way to force them to be centered.
This PR adds a player level class that will override the text alignment to be `center`. It also overrides the `width` to `80%` because otherwise the cue box isn't set up correctly to be 10% from the right of the display area (a side effect of hardcoding a width value and using inset in the generation of the cues).
2024-04-12 20:45:50 +02:00
Carlos Javier Villaseñor Castillo
7345768575
feat(error): remove confusing decorative X from error display modal (#8553)
Modify _error:
-Remove the ‘x’ decorative element from the error display modal.
2024-01-10 14:32:27 -06:00
André
1866118e6c
fix(loading-spinner): border size costumization (#8369)
Allows to change the border size of the `loading-spinner` component without having to reflect the border size in the pseudo-element margin.

- uses display `flex` to facilitate centering of pseudo-elements
- deletes the pseudo-elements `margin`
2023-12-04 14:26:55 -05:00
André
6d8af0c892
fix(big-play-button): component remains displayed after an error (#8483)
This issue occurs when the `player` has the class `vjs-show-big-play-button-on-pause`
and playback has started and then been set to `pause` and an `error` occurs.

- Avoids displaying `big-play-button` on error
2023-11-29 10:29:22 +01:00
André
92b5e79ba9
fix(big-play-button): component remains displayed when seeking (#8484)
This issue happen when the `player` has the class `vjs-show-big-play-button-on-pause` and a `seek` occurs,
resulting in the `loadingSpinner` being hidden behind the `bigPlayButton`.

- Avoids displaying `bigPlayButton` while `seeking`
2023-11-28 23:22:39 +01:00
André
473176f268
fix(control-bar): incorrect display when control bar display is locked (#8435)
The control bar is not displayed correctly when the display is locked because `.vjs-lock-showing` uses `display` `block` instead of `flex`.

- use `display` `flex` instead of `display` `block` when the control bar has `.vjs-lock-showing` class
- ensure that the control bar is not displayed if the `player` has classes:
  - `.vjs-controls-disabled`
  - `.vjs-using-native-controls`
  - `.vjs-error`
2023-09-27 10:25:52 +02:00
André
b95cd7a6eb
fix(svg-icons): default icons color (#8382)
Uses the same color as defined by the `color` property of the `video-js` class to apply to `svg icons` for easy customization

- set `fill` property to `currentColor`

Co-authored-by: mister-ben <git@misterben.me>
2023-08-17 21:48:43 +02:00
André
d0408812df
fix(svg-icons): icon size consistency (#8380)
* fix(svg-icons): icon size consistency

The icons have been regenerated from the svg files in `videojs/font` to ensure consistency in size.

- update icons.svg file

* fix(svg-icons): default height and width in css

Uses the same reference value from the font size of `font icons` to define the default height and width of `svg icons`

* fix(big-play-button): default height and width of svg icon

Uses the same size as the big-play-button font size and centers the svg icon

* fix(volume-control): default height and width of svg icon

Uses the same size as the `volume-level` font size and
centers the svg icon for both horizontal and vertical display

* fix(volume-control): mouse-display overlaps the volume-level svg icon

* fix(play-progress): default height and width of svg icon

Uses the same size as the `play-progress` font size and removes the hover effect

* fix(subtitles-button): default height and width of svg icon

Uses the same size as the `subtitles button` font size
2023-08-17 21:30:23 +02:00
André
42e17b23da
fix(error-display): avoids displaying visual components when an error occurs (#8389)
When an error occurs, only the error screen should be displayed to maintain visual consistency.

- Hides the Title Bar
- Hides the Loading Spinner
- Hides the Captions Settings
- Hides the Text Track Display
2023-08-17 21:25:16 +02:00
mister-ben
c11d213453
fix: Fullscreen styles for older Safari (#8346) 2023-07-06 22:55:29 +02:00
André
e06465f9cb
fix(progress): mouse-time-display overlaps the play-progress svg icon (#8338)
When the mouse hovers over the `play-progress` svg icon,
the `mouse-time-display` bar appears above it.

- adds `z-index` to avoid overlap
2023-07-04 12:27:06 +02:00
Walter Seymour
6fc0dc783a
feat: Add useSVGIcons option (#8260) 2023-06-12 13:31:06 -05:00
André
3dece507bc
fix(text-track-settings): fix text track settings responsiveness when default font size is modified (#8294) 2023-06-06 17:24:00 -04:00
André
f0751777a1
fix(loading-spinner): fix loading spinner responsiveness when default font size is modified (#8295) 2023-06-06 17:22:27 -04:00
mister-ben
665154fa41
chore: remove legacy prefixes (#8276) 2023-05-31 10:34:01 -04:00
Grzegorz Blaszczyk
52bad2b784
fix: ad icon is not visible on audio description track list element on Safari (#8232) 2023-05-31 10:28:50 -04:00
mister-ben
0c72805500
feat: Add document picture-in-picture support (#8113)
Co-authored-by: François Beaufort <beaufort.francois@gmail.com>
2023-04-04 16:44:16 -04:00
Usman Omar
8f3f32cb2b
feat: add skip forward/backward buttons (#8147)
* remove duplicate icons from icon example

* create initial forward and back button classes

* add logic for back/forward buttons on click

* change icon used based on option passed into player

* move logic from forward and back buttons into one component

* add jsdoc comments for clarity

* create initial test file

* refactor button logic into separate files

* update skip button example and add test files

* test both the forward and backward buttons

* test handleClick fns for both forward and backward btns

* update skip buttons example

* update jsdocs for skip backward and forward buttons

* make control text accessible and use seekableEnd/Start when skipping forward/back

* update font version to use updated icons

* set control text only if config is valid

* add link to sandbox page & use localization

* update translations needed
2023-03-06 09:51:59 +00:00
Usman Omar
2c7eea889a
chore: upgrade videojs-font to 4.0.0 (#8117)
* upgrade videojs-font to 4.0 & update icons example

* update css content to use font 4.0 unicodes
2023-02-10 17:41:49 +00:00
Walter Seymour
b306ce614e
feat: improved text tracks settings labels (#8101) 2023-02-06 13:44:24 -06:00
mister-ben
dff3dd4155
fix: Add poster size styles (#8022) 2022-11-24 17:11:40 +01:00
KangXinzhi
b7080f7d8a fix(control-bar): make vertical alignment of slider handles more consistent (#7990)
Fixes #7989

BREAKING CHANGE: This changes how slider handles are styled, so custom skins that are targeting them may need to change.
2022-11-23 09:49:34 -05:00
mister-ben
f2aa0d7d13 feat: Use picture el for poster (#7865)
BREAKING CHANGE: This changes the DOM structure used for the video poster.
2022-11-23 09:49:29 -05:00
Gary Katsevman
bd54b4112e fix: update icons import path for sass (#7867)
This updates the path to remove node_modules as some tools expect the
module name to be first. This is particularly important for PnP tools as
local node_modules may not have the module.

Fixes #7208, fixes #7863

BREAKING CHANGE: update icons path in sass to remove node_modules
2022-11-23 09:49:28 -05:00
Roman Pougatchev
706983caa3 feat: Remove references and logic related to Flash and SWF (#7852)
* remove flash references, update comments & tests

* remove references to swf & stageclick listener
2022-11-23 09:49:26 -05:00
Pat O'Neill
5d165dc33c feat: add a new title bar component (#7788) 2022-11-23 09:49:25 -05:00
Roman Pougatchev
e4945cb78c refactor: Remove logic and style that accommodates non-flex fallbacks (#7820) 2022-11-23 09:49:24 -05:00
André
1445f87800
fix(control-bar): audio player no longer responds to touch events (#7825) 2022-07-01 15:17:43 -04:00
Alex Barstow
145aba6aea
fix: Audio only mode styling conflicts with fluid mode (#7724)
* css changes

* make audio only mode player responsive in fluid mode
2022-04-15 12:55:27 -04:00
mister-ben
28bdc7d590
feat: easier configuration of buttons and components via options (#7611) 2022-03-21 12:21:26 -04:00
Wayne-Morgan
337ff2fed3
fix: text-track-display position with no ui (#7682)
Fixes #7681
2022-03-21 10:00:41 -04:00
Alex Barstow
762e7bc751
feat: Audio Only Mode (#7647)
* audioOnlyMode wip

* fix incorrect logs

* add tests

* minor code changes and add another test

* update docs

* fix formatting

* fix typo

* Consolidate conditions

Co-authored-by: Pat O'Neill <pgoneill@gmail.com>

* Compare objects instead of name string

Co-authored-by: Pat O'Neill <pgoneill@gmail.com>

* code review changes

* remove unnecessary equivalence check

Co-authored-by: Gary Katsevman <git@gkatsev.com>

* replace height() with currentHeight()

Co-authored-by: Gary Katsevman <git@gkatsev.com>

* rewrite for async pip and fs handling

* asyncify tests

* update doc

* add test

Co-authored-by: Pat O'Neill <pgoneill@gmail.com>
Co-authored-by: Gary Katsevman <git@gkatsev.com>
2022-03-10 13:13:49 -05:00
Harisha Rajam Swaminathan
64e55f5492
feat: Add audioPosterMode option (#7629) 2022-03-01 15:50:46 -05:00
Pat O'Neill
c44057d217
fix(accessibility): By default, show track selection buttons at all responsive breakpoints (#7603) 2022-02-23 12:17:27 -05:00
André
78cf834e6f
fix: volume button empty space (#7466)
When responsive mode is used and the player layout is small or smaller, an empty space appears to the right of the mute button on hover.

Fixes #7465
2021-11-10 14:04:08 -05:00
Ileana Padilla
1d91831992
fix: remove rule on small layout (#7449) 2021-09-28 14:37:44 -04:00
Brandon Casey
2ad4d60dac
fix: prevent control bar clicks/taps with while user inactive (#7329) 2021-07-27 12:33:16 -04:00
Gary Katsevman
508a424b02
fix: all !important properties of vjs-lock-showing (#7312) 2021-07-06 15:42:24 -04:00
mister-ben
35ad17a0ef
feat: Add helper classes for 9:16 and 1:1 (#7219)
Fluid mode's automatic detection is nice, but there can be a layout jump once the video dimensions are known. We have the vjs-16-9 and vjs-9-16 classes already, but square and portrait are also common now.
2021-06-08 11:02:57 -04:00
mister-ben
b3503c93dd
chore: Update sass and remove now deprecated / for division. (#7253)
Fixes #7244
2021-06-02 13:13:00 -04:00
Aaron Mertzenich
06cdb6f49f
fix: incorrect focus styles on selected MenuItem (#7202)
Adds a :not() pseudo class to ensure that the MenuItem background color doesn't get incorrectly reset on mouse focus.

Fixes #7200
2021-05-11 12:54:43 -04:00
Grzegorz Blaszczyk
b2edfd24ac
feat: Add a mouse volume tooltip (#6824) 2021-03-23 18:02:07 -04:00
Ileana Padilla
239c9a1552
feat: enable responsive controls on fullscreen (#7098)
Co-authored-by: Ileana Padilla <ipadilla@brightcove.com>
2021-03-23 17:50:59 -04:00
Łukasz Polowczyk
45eef66b09
fix: add display block to all buttons icon placeholder (#7094)
Fixes #6989
2021-03-09 15:07:14 -05:00
Aaron Mertzenich
1b52e7bea0
fix: focus-visible shouldn't change background styles (#7113)
Only set background:none focus styles on menu
2021-03-09 15:06:35 -05:00
mister-ben
503141c75f
docs: Remove Flash (#6994) 2020-12-22 14:10:53 -05:00
genofire
3901ab0e72
fix(css): set seek to live button's align-items prop to center (#6942)
Fixes https://github.com/videojs/themes/issues/7
2020-11-16 14:44:29 -05:00
Gary Katsevman
d6b07f089e
fix(fs): don't set player element css props on native fullscreen (#6673)
Fixes #6640
2020-05-28 10:29:36 -04:00
Tsachi Shlidor
df3c14a0e3 fix(sass): import path has cwd once again (#6326) 2019-12-02 14:14:18 -05:00