Add a `Player#version()` method which returns an object with the Video.js version under the `video.js` property name, to match the package name.
This could then be extended to support adding plugin, tech, and source handler versions as part of the version call.
Fixes#8538
* refactor(player): decrease the indentation level in the currentTime method
* fix(player): cache_.currentTime is not updated when the current time is set
Updating cache_.currentTime as soon as the currentTime is set avoids having to wait for the timeupdate event, which results in:
- making cache_.currentTime more reliable
- updating the progress bar on mouse up after dragging when the media is paused.
See also: #6232, #6234, #6370, #6372
* feat: add an option to handle smooth seeking
Adds a player option called enableSmoothSeeking, which is false by default,
to provide a smoother seeking experience on mobile and desktop devices.
Usage:
```javascript
// Enables the smooth seeking
const player = videojs('player', {enableSmoothSeeking: true});
// Disable the smooth seeking
player.options({enableSmoothSeeking: false});
```
- **player.js** add an `option` called `enableSmoothSeeking`
- **time-display.js** add a listener to the `seeking` event if `enableSmoothSeeking` is `true` allowing to update the `CurrentTimeDisplay` and `RemainingTimeDisplay` in real time
- **seek-bar.js** `update` the seek bar on `mousemove` event if `enableSmoothSeeking` is `true`
- add test cases
Allows CSS classes to be reset when `player.reset` is called,
so that the player is close to its initial state.
- remove `vjs-playing`
- add `vjs-paused`
When `player.reset` is called the `titleBar` component is not reset.
- Sets the properties `title` and `description` to `undefined` when `player.titleBar.update` is called so that the component is properly reset.
When `player.reset` is called, the `errorDisplay` component is not reset, and neither is `player.error`.
- Sets `player.error` to `null`, so that the `player.errorDisplay` and `player.error` are correctly reset.
- Adds an `error` function to the `testPlayer` stub to prevent tests from failing.
When consecutive errors occur, the `ErrorDisplay` component is not updated with the new error message.
This results in an inconsistent state between the `player.error` and `player.errorDisplay.contentEl().textContent`.
| | player.error() | player.errorDisplay.content() | player.errorDisplay.contentEl().textContent |
| ----------------------- | -------------- | ----------------------------- | ------------------------------------------- |
| player.error('Error 1') | Error 1 ✔️ | Error 1 ✔️ | Error 1 ✔️ |
| player.error('Error 2') | Error 2 ✔️ | Error 2 ✔️ | Error 1 ❌ |
An example of a use case where updating the error message is useful is :
- user tries to play media 1 but the media doestn't exist
- user tries to play media 2 but the media is not compatible
- call the `close` function before each call to the `open` function.
- if errorDisplay is not **open**, the `close` function does nothing
- if errorDisplay is **open**, the `close` function executes and triggers the close events, then the open function executes and triggers the open events, ensuring that the content is updated.
When both the media URL and the poster return a response other than 200.
The media error is overwritten by an empty error, leaving the player in an inconsistent state.
- add a condition to `handleTechError_` to ensure that the `error` is truthy
- add a test case
Fixes#8409
* Added the createNewLogger method, to create a logger without a naming chain.
* Added optional custom delimiter and custom styles.
* Several improvements in jsDoc for proper types(d.ts) generation.
---------
Co-authored-by: Dzianis Dashkevich <ddashkevich@brightcove.com>
Updating cache_.currentTime as soon as the currentTime is set avoids having to wait for the timeupdate event, which results in:
- making cache_.currentTime more reliable
- updating the progress bar on mouse up after dragging when the media is paused.
See also: #6232, #6234, #6370, #6372
* fix: replay button broken for native playback
* remove debug logging
* move fix to player
* comment
* add unit test
* add native browser stubs
* reset stubs and test currentTime
* 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
This means that a retryOnError is removed and is no longer needed for
this behavior, which means that during source selection, if a source
fails, it'll try the next source that's available, to match the video
element.
BREAKING CHANGE: remove retryOnError option, turn it on by default
* remove statement that handles attributes in props argument
* clean up function
* add unit test
* add unit test
* remove duplicate set attr
* revert function cleanup