1
0
Fork 0
mirror of https://github.com/DanielnetoDotCom/YouPHPTube synced 2025-10-03 09:49:28 +02:00
This commit is contained in:
Daniel Neto 2023-06-30 14:53:58 -03:00
parent 2f89498789
commit 2da55b4ae7
70 changed files with 6454 additions and 18078 deletions

26
node_modules/.package-lock.json generated vendored
View file

@ -151,14 +151,14 @@
} }
}, },
"node_modules/@silvermine/videojs-chromecast": { "node_modules/@silvermine/videojs-chromecast": {
"version": "1.3.4", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/@silvermine/videojs-chromecast/-/videojs-chromecast-1.3.4.tgz", "resolved": "https://registry.npmjs.org/@silvermine/videojs-chromecast/-/videojs-chromecast-1.4.1.tgz",
"integrity": "sha512-4VC/WEXb18Iex2Tf679RRUR+oSJhNq7+SyMGIsawFglET0IebXnwYKtO6x4t+dVd3be/iN1p5Ny6/iUnny4ljA==", "integrity": "sha512-tXeikkWoNC3WIl2WSkIag1CLMbGsgn+26LM4LoB4qx0TQ8mkg7pgpldCTkvXxLVaDluQ/uEm2uxrgrMmjOc6sw==",
"dependencies": { "dependencies": {
"webcomponents.js": "git+https://git@github.com/webcomponents/webcomponentsjs.git#v0.7.24" "webcomponents.js": "git+https://git@github.com/webcomponents/webcomponentsjs.git#v0.7.24"
}, },
"peerDependencies": { "peerDependencies": {
"video.js": ">= 6 < 8" "video.js": ">= 6 < 9"
} }
}, },
"node_modules/@videojs/http-streaming": { "node_modules/@videojs/http-streaming": {
@ -1915,9 +1915,9 @@
} }
}, },
"node_modules/videojs-ima/node_modules/@videojs/http-streaming/node_modules/video.js": { "node_modules/videojs-ima/node_modules/@videojs/http-streaming/node_modules/video.js": {
"version": "7.21.3", "version": "7.21.4",
"resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.3.tgz", "resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.4.tgz",
"integrity": "sha512-fIboXbSDCT3P8eVzIEC3hnLDKC/y+6QftcHdFGUVGn5a7qmH62Mh0Bt/SrBAgdmKDQM1qdZXfXAxPg5+IaiIXQ==", "integrity": "sha512-R5e57M/5uqxQMQpFpybNbd8GtiRwFJPqkHjrhv0QTJ2tqnesbjETbck5kU5dhFr1FevsJRFhjBG4hAnvRGnXbw==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
"@videojs/http-streaming": "2.16.2", "@videojs/http-streaming": "2.16.2",
@ -1989,9 +1989,9 @@
} }
}, },
"node_modules/videojs-ima/node_modules/videojs-contrib-ads/node_modules/video.js": { "node_modules/videojs-ima/node_modules/videojs-contrib-ads/node_modules/video.js": {
"version": "7.21.3", "version": "7.21.4",
"resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.3.tgz", "resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.4.tgz",
"integrity": "sha512-fIboXbSDCT3P8eVzIEC3hnLDKC/y+6QftcHdFGUVGn5a7qmH62Mh0Bt/SrBAgdmKDQM1qdZXfXAxPg5+IaiIXQ==", "integrity": "sha512-R5e57M/5uqxQMQpFpybNbd8GtiRwFJPqkHjrhv0QTJ2tqnesbjETbck5kU5dhFr1FevsJRFhjBG4hAnvRGnXbw==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
"@videojs/http-streaming": "2.16.2", "@videojs/http-streaming": "2.16.2",
@ -2076,12 +2076,6 @@
"webidl-conversions": "^3.0.0" "webidl-conversions": "^3.0.0"
} }
}, },
"node_modules/wow.js": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/wow.js/-/wow.js-1.2.2.tgz",
"integrity": "sha512-YTW9eiZimHCJDWofsiz2507txaPteUiQD461I/D8533AiRAn3+Y68/1LDuQ3OTgPjagGZLPYKrpoSgjzeQrO6A==",
"deprecated": "deprecated in favour of aos (Animate On Scroll)"
},
"node_modules/wrappy": { "node_modules/wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",

View file

@ -0,0 +1,29 @@
# Changelog
All notable changes to this project will be documented in this file.
See [our coding standards][commit-messages] for commit guidelines.
### [1.4.1](https://github.com/silvermine/videojs-chromecast/compare/v1.4.0...v1.4.1) (2023-03-21)
### Bug Fixes
* remove deprecated `.extend` method ([994b5b9](https://github.com/silvermine/videojs-chromecast/commit/994b5b9ae6df89f657e2ff4a920056826094b54f)), closes [#152](https://github.com/silvermine/videojs-chromecast/issues/152) [#147](https://github.com/silvermine/videojs-chromecast/issues/147)
## [1.4.0](https://github.com/silvermine/videojs-chromecast/compare/v1.3.4...v1.4.0) (2023-03-21)
### Features
* Add optional "Cast" label to button component ([220c362](https://github.com/silvermine/videojs-chromecast/commit/220c36247c9ac992b757b97257e24e665ac3feb5))
* Change label to "Disconnect Cast" when connected ([a7f495b](https://github.com/silvermine/videojs-chromecast/commit/a7f495b78d8472322079a75a834440fd20858b3c))
* Set image on cast device if the video has a poster ([902464c](https://github.com/silvermine/videojs-chromecast/commit/902464cecf468c554fb062bd93d09bae9e303922))
### Bug Fixes
* Chromecast button with label styling breaking on cast/disconnect ([2a181de](https://github.com/silvermine/videojs-chromecast/commit/2a181dea847927050b57453f9474a2f47028fdca))
[commit-messages]: https://github.com/silvermine/silvermine-info/blob/master/commit-history.md#commit-messages

View file

@ -162,6 +162,9 @@ player.chromecast(); // initializes the Chromecast plugin
the last child of the control bar. A value less than 0 puts the button at the specified the last child of the control bar. A value less than 0 puts the button at the specified
position from the end of the control bar. Note that it's likely not all child components position from the end of the control bar. Note that it's likely not all child components
of the control bar are visible. of the control bar are visible.
* **`plugins.chromecast.addCastLabelToButton`** (default: `false`) - by default, the Chromecast
button component will display only an icon. Setting `addCastLabelToButton` to `true` will
display a label titled `"Cast"` alongside the default icon.
##### Chromecast Tech configuration ##### Chromecast Tech configuration
@ -230,14 +233,17 @@ options = {
##### Localization ##### Localization
The `ChromecastButton` component has one translated string: "Open Chromecast menu". The The `ChromecastButton` component has two translated strings: "Open Chromecast menu" and "Cast".
"Open Chromecast menu" string appears in both of the standard places for Button component
accessibility text: inside the `.vjs-control-text` span and as the `<button>` element's
`title` attribute.
To localize the Chromecast button text, follow the steps in the * The "Open Chromecast menu" string appears in both of the standard places for Button
[Video.js Languages tutorial][videojs-translation] to add an `"Open Chromecast menu"` key component accessibility text: inside the `.vjs-control-text` span and as the `<button>`
to the map of translation strings. element's `title` attribute.
* The "Cast" string appears in an optional label within the Button component: inside the
`.vjs-chromecast-button-label` span.
To localize the Chromecast button strings, follow the steps in the
[Video.js Languages tutorial][videojs-translation] to add `"Open Chromecast menu"`
and `"Cast"` keys to the map of translation strings.
### Using the npm module ### Using the npm module

View file

@ -1 +1 @@
.vjs-chromecast-button .vjs-icon-placeholder{background:url("images/ic_cast_white_24dp.png") center center no-repeat;background-size:contain;display:inline-block;width:12px;height:12px}.vjs-chromecast-button:hover{cursor:pointer}.vjs-chromecast-button:hover .vjs-icon-placeholder{background-image:url("images/ic_cast_white_24dp.png")}.vjs-chromecast-button.vjs-chromecast-casting-state .vjs-icon-placeholder{background-image:url("images/ic_cast_connected_white_24dp.png")}.vjs-chromecast-button.vjs-chromecast-casting-state:hover .vjs-icon-placeholder{background-image:url("images/ic_cast_connected_white_24dp.png")}.vjs-tech-chromecast{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;overflow:hidden}.vjs-tech-chromecast .vjs-tech-chromecast-poster::after{content:" ";display:block;height:2px;width:100px;background-color:#ccc;position:absolute;left:calc(50% - 50px)}.vjs-tech-chromecast .vjs-tech-chromecast-poster-img{max-height:180px;width:auto;border:2px solid #ccc}.vjs-tech-chromecast .vjs-tech-chromecast-poster-img.vjs-tech-chromecast-poster-img-empty{width:160px;height:90px}.vjs-tech-chromecast .vjs-tech-chromecast-title-container{position:absolute;bottom:50%;margin-bottom:100px;color:#ccc;text-align:center}.vjs-tech-chromecast .vjs-tech-chromecast-title{font-size:22px}.vjs-tech-chromecast .vjs-tech-chromecast-title.vjs-tech-chromecast-title-empty{display:none}.vjs-tech-chromecast .vjs-tech-chromecast-subtitle{font-size:18px;padding-top:.5em}.vjs-tech-chromecast .vjs-tech-chromecast-subtitle.vjs-tech-chromecast-subtitle-empty{display:none} .vjs-chromecast-button .vjs-icon-placeholder{background:url("images/ic_cast_white_24dp.png") center center no-repeat;background-size:contain;display:inline-block;width:12px;height:12px}.vjs-chromecast-button:hover{cursor:pointer}.vjs-chromecast-button:hover .vjs-icon-placeholder{background-image:url("images/ic_cast_white_24dp.png")}.vjs-chromecast-button.vjs-chromecast-casting-state .vjs-icon-placeholder{background-image:url("images/ic_cast_connected_white_24dp.png")}.vjs-chromecast-button.vjs-chromecast-casting-state:hover .vjs-icon-placeholder{background-image:url("images/ic_cast_connected_white_24dp.png")}.vjs-chromecast-button.vjs-chromecast-button-lg:not(.vjs-hidden){display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;width:auto;padding:0 4px}.vjs-chromecast-button.vjs-chromecast-button-lg:not(.vjs-hidden) .vjs-chromecast-button-label{-webkit-box-flex:1;flex-grow:1;margin-left:4px}.vjs-chromecast-button.vjs-chromecast-button-lg:not(.vjs-hidden) .vjs-icon-placeholder{-webkit-box-flex:1;flex-grow:1}.vjs-tech-chromecast{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;overflow:hidden}.vjs-tech-chromecast .vjs-tech-chromecast-poster::after{content:" ";display:block;height:2px;width:100px;background-color:#ccc;position:absolute;left:calc(50% - 50px)}.vjs-tech-chromecast .vjs-tech-chromecast-poster-img{max-height:180px;width:auto;border:2px solid #ccc}.vjs-tech-chromecast .vjs-tech-chromecast-poster-img.vjs-tech-chromecast-poster-img-empty{width:160px;height:90px}.vjs-tech-chromecast .vjs-tech-chromecast-title-container{position:absolute;bottom:50%;margin-bottom:100px;color:#ccc;text-align:center}.vjs-tech-chromecast .vjs-tech-chromecast-title{font-size:22px}.vjs-tech-chromecast .vjs-tech-chromecast-title.vjs-tech-chromecast-title-empty{display:none}.vjs-tech-chromecast .vjs-tech-chromecast-subtitle{font-size:18px;padding-top:.5em}.vjs-tech-chromecast .vjs-tech-chromecast-subtitle.vjs-tech-chromecast-subtitle-empty{display:none}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
{ {
"name": "@silvermine/videojs-chromecast", "name": "@silvermine/videojs-chromecast",
"version": "1.3.4", "version": "1.4.1",
"description": "video.js plugin for casting to chromecast", "description": "video.js plugin for casting to chromecast",
"main": "src/js/index.js", "main": "src/js/index.js",
"scripts": { "scripts": {
@ -37,8 +37,8 @@
"webcomponents.js": "git+https://git@github.com/webcomponents/webcomponentsjs.git#v0.7.24" "webcomponents.js": "git+https://git@github.com/webcomponents/webcomponentsjs.git#v0.7.24"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "7.13.16", "@babel/core": "7.20.7",
"@babel/preset-env": "7.13.15", "@babel/preset-env": "7.20.2",
"@commitlint/cli": "8.3.5", "@commitlint/cli": "8.3.5",
"@commitlint/travis-cli": "8.3.5", "@commitlint/travis-cli": "8.3.5",
"@silvermine/eslint-config": "3.0.1", "@silvermine/eslint-config": "3.0.1",
@ -68,6 +68,6 @@
"sinon": "2.3.5" "sinon": "2.3.5"
}, },
"peerDependencies": { "peerDependencies": {
"video.js": ">= 6 < 8" "video.js": ">= 6 < 9"
} }
} }

View file

@ -1,156 +1,181 @@
/**
* The ChromecastButton module contains both the ChromecastButton class definition and
* the function used to register the button as a Video.js Component.
*
* @module ChromecastButton
*/
var ChromecastButton;
/**
* The Video.js Button class is the base class for UI button components.
*
* @external Button
* @see {@link http://docs.videojs.com/Button.html|Button}
*/
/** @lends ChromecastButton.prototype */
ChromecastButton = {
/**
* This class is a button component designed to be displayed in the player UI's control
* bar. It opens the Chromecast menu when clicked.
*
* @constructs
* @extends external:Button
* @param player {Player} the video.js player instance
*/
constructor: function(player) {
this.constructor.super_.apply(this, arguments);
player.on('chromecastConnected', this._onChromecastConnected.bind(this));
player.on('chromecastDisconnected', this._onChromecastDisconnected.bind(this));
player.on('chromecastDevicesAvailable', this._onChromecastDevicesAvailable.bind(this));
player.on('chromecastDevicesUnavailable', this._onChromecastDevicesUnavailable.bind(this));
this.controlText('Open Chromecast menu');
// Use the initial state of `hasAvailableDevices` to call the corresponding event
// handlers because the corresponding events may have already been emitted before
// binding the listeners above.
if (player.chromecastSessionManager && player.chromecastSessionManager.hasAvailableDevices()) {
this._onChromecastDevicesAvailable();
} else {
this._onChromecastDevicesUnavailable();
}
},
/**
* Overrides Button#buildCSSClass to return the classes used on the button element.
*
* @param el {DOMElement}
* @see {@link http://docs.videojs.com/Button.html#buildCSSClass|Button#buildCSSClass}
*/
buildCSSClass: function() {
return 'vjs-chromecast-button ' + (this._isChromecastConnected ? 'vjs-chromecast-casting-state ' : '') +
this.constructor.super_.prototype.buildCSSClass();
},
/**
* Overrides Button#handleClick to handle button click events. Chromecast functionality
* is handled outside of this class, which should be limited to UI related logic. This
* function simply triggers an event on the player.
*
* @fires ChromecastButton#chromecastRequested
* @param el {DOMElement}
* @see {@link http://docs.videojs.com/Button.html#handleClick|Button#handleClick}
*/
handleClick: function() {
this.player().trigger('chromecastRequested');
},
/**
* Handles `chromecastConnected` player events.
*
* @private
*/
_onChromecastConnected: function() {
this._isChromecastConnected = true;
this._reloadCSSClasses();
},
/**
* Handles `chromecastDisconnected` player events.
*
* @private
*/
_onChromecastDisconnected: function() {
this._isChromecastConnected = false;
this._reloadCSSClasses();
},
/**
* Handles `chromecastDevicesAvailable` player events.
*
* @private
*/
_onChromecastDevicesAvailable: function() {
this.show();
},
/**
* Handles `chromecastDevicesUnavailable` player events.
*
* @private
*/
_onChromecastDevicesUnavailable: function() {
this.hide();
},
/**
* Re-calculates which CSS classes the button needs and sets them on the buttons'
* DOMElement.
*
* @private
*/
_reloadCSSClasses: function() {
if (!this.el_) {
return;
}
this.el_.className = this.buildCSSClass();
},
};
/**
* Registers the ChromecastButton Component with Video.js. Calls
* {@link http://docs.videojs.com/Component.html#.registerComponent}, which will add a
* component called `chromecastButton` to the list of globally registered Video.js
* components. The `chromecastButton` is added to the player's control bar UI
* automatically once {@link module:enableChromecast} has been called. If you would like
* to specify the order of the buttons that appear in the control bar, including this
* button, you can do so in the options that you pass to the `videojs` function when
* creating a player:
*
* ```
* videojs('playerID', {
* controlBar: {
* children: [
* 'playToggle',
* 'progressControl',
* 'volumePanel',
* 'fullscreenToggle',
* 'chromecastButton',
* ],
* }
* });
* ```
*
* @param videojs {object} A reference to {@link http://docs.videojs.com/module-videojs.html|Video.js}
* @see http://docs.videojs.com/module-videojs.html#~registerPlugin
*/
module.exports = function(videojs) { module.exports = function(videojs) {
var ChromecastButtonImpl;
ChromecastButtonImpl = videojs.extend(videojs.getComponent('Button'), ChromecastButton); /**
videojs.registerComponent('chromecastButton', ChromecastButtonImpl); * Registers the ChromecastButton Component with Video.js. Calls
* {@link http://docs.videojs.com/Component.html#.registerComponent}, which will add a
* component called `chromecastButton` to the list of globally registered Video.js
* components. The `chromecastButton` is added to the player's control bar UI
* automatically once {@link module:enableChromecast} has been called. If you would
* like to specify the order of the buttons that appear in the control bar, including
* this button, you can do so in the options that you pass to the `videojs` function
* when creating a player:
*
* ```
* videojs('playerID', {
* controlBar: {
* children: [
* 'playToggle',
* 'progressControl',
* 'volumePanel',
* 'fullscreenToggle',
* 'chromecastButton',
* ],
* }
* });
* ```
*
* @param videojs {object} A reference to {@link http://docs.videojs.com/module-videojs.html|Video.js}
* @see http://docs.videojs.com/module-videojs.html#~registerPlugin
*/
/**
* The Video.js Button class is the base class for UI button components.
*
* @external Button
* @see {@link http://docs.videojs.com/Button.html|Button}
*/
const ButtonComponent = videojs.getComponent('Button');
/**
* The ChromecastButton module contains both the ChromecastButton class definition and
* the function used to register the button as a Video.js Component.
* @module ChromecastButton
*/
/** @lends ChromecastButton.prototype **/
class ChromecastButton extends ButtonComponent {
/**
* This class is a button component designed to be displayed in the
* player UI's control bar. It opens the Chromecast menu when clicked.
*
* @constructs
* @extends external:Button
* @param player {Player} the video.js player instance
*/
constructor(player, options) {
super(player, options);
player.on('chromecastConnected', this._onChromecastConnected.bind(this));
player.on('chromecastDisconnected', this._onChromecastDisconnected.bind(this));
player.on('chromecastDevicesAvailable', this._onChromecastDevicesAvailable.bind(this));
player.on('chromecastDevicesUnavailable', this._onChromecastDevicesUnavailable.bind(this));
// Use the initial state of `hasAvailableDevices` to call the corresponding event
// handlers because the corresponding events may have already been emitted before
// binding the listeners above.
if (player.chromecastSessionManager && player.chromecastSessionManager.hasAvailableDevices()) {
this._onChromecastDevicesAvailable();
} else {
this._onChromecastDevicesUnavailable();
}
if (options.addCastLabelToButton) {
this.el().classList.add('vjs-chromecast-button-lg');
this._labelEl = document.createElement('span');
this._labelEl.classList.add('vjs-chromecast-button-label');
this._updateCastLabelText();
this.el().appendChild(this._labelEl);
} else {
this.controlText('Open Chromecast menu');
}
}
/**
* Overrides Button#buildCSSClass to return the classes used on the button element.
*
* @param el {DOMElement}
* @see {@link http://docs.videojs.com/Button.html#buildCSSClass|Button#buildCSSClass}
*/
buildCSSClass() {
return 'vjs-chromecast-button ' +
(this._isChromecastConnected ? 'vjs-chromecast-casting-state ' : '') +
(this.options_.addCastLabelToButton ? 'vjs-chromecast-button-lg ' : '') +
ButtonComponent.prototype.buildCSSClass();
}
/**
* Overrides Button#handleClick to handle button click events. Chromecast
* functionality is handled outside of this class, which should be limited
* to UI related logic. This function simply triggers an event on the player.
*
* @fires ChromecastButton#chromecastRequested
* @param el {DOMElement}
* @see {@link http://docs.videojs.com/Button.html#handleClick|Button#handleClick}
*/
handleClick() {
this.player().trigger('chromecastRequested');
}
/**
* Handles `chromecastConnected` player events.
*
* @private
*/
_onChromecastConnected() {
this._isChromecastConnected = true;
this._reloadCSSClasses();
this._updateCastLabelText();
}
/**
* Handles `chromecastDisconnected` player events.
*
* @private
*/
_onChromecastDisconnected() {
this._isChromecastConnected = false;
this._reloadCSSClasses();
this._updateCastLabelText();
}
/**
* Handles `chromecastDevicesAvailable` player events.
*
* @private
*/
_onChromecastDevicesAvailable() {
this.show();
}
/**
* Handles `chromecastDevicesUnavailable` player events.
*
* @private
*/
_onChromecastDevicesUnavailable() {
this.hide();
}
/**
* Re-calculates which CSS classes the button needs and sets them on the buttons'
* DOMElement.
*
* @private
*/
_reloadCSSClasses() {
if (!this.el_) {
return;
}
this.el_.className = this.buildCSSClass();
}
/**
* Updates the optional cast label text based on whether the chromecast is connected
* or disconnected.
*
* @private
*/
_updateCastLabelText() {
if (!this._labelEl) {
return;
}
this._labelEl.textContent = this._isChromecastConnected ? this.localize('Disconnect Cast') : this.localize('Cast');
}
}
videojs.registerComponent('chromecastButton', ChromecastButton);
}; };

File diff suppressed because it is too large Load diff

View file

@ -6,6 +6,7 @@ $icon-chromecast-casting--hover: 'images/ic_cast_connected_white_24dp.png' !defa
// Sizes // Sizes
$chromecast-icon-size: 12px !default; $chromecast-icon-size: 12px !default;
$chromecast-button-spacing: 4px !default;
.vjs-chromecast-button { .vjs-chromecast-button {
.vjs-icon-placeholder { .vjs-icon-placeholder {
@ -30,3 +31,18 @@ $chromecast-icon-size: 12px !default;
} }
} }
} }
.vjs-chromecast-button.vjs-chromecast-button-lg:not(.vjs-hidden) {
// Fits both the icon and the label on the same control
display: flex;
align-items: center;
width: auto;
padding: 0 $chromecast-button-spacing;
.vjs-chromecast-button-label {
flex-grow: 1;
margin-left: $chromecast-button-spacing;
}
.vjs-icon-placeholder {
flex-grow: 1;
}
}

View file

@ -1,3 +1,16 @@
<a name="7.21.4"></a>
## [7.21.4](https://github.com/videojs/video.js/compare/v7.21.3...v7.21.4) (2023-03-15)
### Bug Fixes
* **lang:** updated Japanese translations ([#8194](https://github.com/videojs/video.js/issues/8194)) ([7eed745](https://github.com/videojs/video.js/commit/7eed745))
* replay button broken for native playback ([#8142](https://github.com/videojs/video.js/issues/8142)) ([#8183](https://github.com/videojs/video.js/issues/8183)) ([bda2b06](https://github.com/videojs/video.js/commit/bda2b06))
### Chores
* **documentation:** Update release flow in collaborator guide md ([#8166](https://github.com/videojs/video.js/issues/8166)) ([2e939e2](https://github.com/videojs/video.js/commit/2e939e2))
* use next-7 tag instead of next tag for 7x version during npm publish ([#8164](https://github.com/videojs/video.js/issues/8164)) ([852493d](https://github.com/videojs/video.js/commit/852493d))
<a name="7.21.3"></a> <a name="7.21.3"></a>
## [7.21.3](https://github.com/videojs/video.js/compare/v7.21.2...v7.21.3) (2023-02-27) ## [7.21.3](https://github.com/videojs/video.js/compare/v7.21.2...v7.21.3) (2023-02-27)

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -22,7 +22,7 @@ import vtt from 'videojs-vtt.js';
import _construct from '@babel/runtime/helpers/construct'; import _construct from '@babel/runtime/helpers/construct';
import _inherits from '@babel/runtime/helpers/inherits'; import _inherits from '@babel/runtime/helpers/inherits';
var version = "7.21.3"; var version = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -24467,7 +24467,8 @@ var Player = /*#__PURE__*/function (_Component) {
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -24484,7 +24485,7 @@ var Player = /*#__PURE__*/function (_Component) {
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -24492,7 +24493,14 @@ var Player = /*#__PURE__*/function (_Component) {
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -38,7 +38,7 @@ var vtt__default = /*#__PURE__*/_interopDefaultLegacy(vtt);
var _construct__default = /*#__PURE__*/_interopDefaultLegacy(_construct); var _construct__default = /*#__PURE__*/_interopDefaultLegacy(_construct);
var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits); var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
var version = "7.21.3"; var version = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -24483,7 +24483,8 @@ var Player = /*#__PURE__*/function (_Component) {
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -24500,7 +24501,7 @@ var Player = /*#__PURE__*/function (_Component) {
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -24508,7 +24509,14 @@ var Player = /*#__PURE__*/function (_Component) {
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -16,7 +16,7 @@
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory()); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory());
}(this, (function () { 'use strict'; }(this, (function () { 'use strict';
var version = "7.21.3"; var version = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -26968,7 +26968,8 @@
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -26985,7 +26986,7 @@
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -26993,7 +26994,14 @@
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -16,7 +16,7 @@
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory()); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory());
}(this, (function () { 'use strict'; }(this, (function () { 'use strict';
var version = "7.21.3"; var version = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -25095,7 +25095,8 @@
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -25112,7 +25113,7 @@
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -25120,7 +25121,14 @@
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -16,7 +16,7 @@
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory()); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory());
}(this, (function () { 'use strict'; }(this, (function () { 'use strict';
var version$5 = "7.21.3"; var version$5 = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -26968,7 +26968,8 @@
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -26985,7 +26986,7 @@
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -26993,7 +26994,14 @@
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -16,7 +16,7 @@
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory()); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory());
}(this, (function () { 'use strict'; }(this, (function () { 'use strict';
var version$5 = "7.21.3"; var version$5 = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -25095,7 +25095,8 @@
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -25112,7 +25113,7 @@
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -25120,7 +25121,14 @@
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

File diff suppressed because one or more lines are too long

View file

@ -9,8 +9,8 @@ videojs.addLanguage('ja', {
"Remaining Time": "残りの時間", "Remaining Time": "残りの時間",
"Stream Type": "ストリームの種類", "Stream Type": "ストリームの種類",
"LIVE": "ライブ", "LIVE": "ライブ",
"Seek to live, currently behind live": "ライブまでシーク、現在、ライブより遅れています", "Seek to live, currently behind live": "ライブまで再生位置を指定、現在ライブが遅れています。",
"Seek to live, currently playing live": "ライブまでシーク、現在、ライブより遅れています", "Seek to live, currently playing live": "ライブまで再生位置を指定、現在ライブ中。",
"Loaded": "ロード済み", "Loaded": "ロード済み",
"Progress": "進行状況", "Progress": "進行状況",
"Progress Bar": "シークバー", "Progress Bar": "シークバー",

View file

@ -9,8 +9,8 @@
"Remaining Time": "残りの時間", "Remaining Time": "残りの時間",
"Stream Type": "ストリームの種類", "Stream Type": "ストリームの種類",
"LIVE": "ライブ", "LIVE": "ライブ",
"Seek to live, currently behind live": "ライブまでシーク、現在、ライブより遅れています", "Seek to live, currently behind live": "ライブまで再生位置を指定、現在ライブが遅れています。",
"Seek to live, currently playing live": "ライブまでシーク、現在、ライブより遅れています", "Seek to live, currently playing live": "ライブまで再生位置を指定、現在ライブ中。",
"Loaded": "ロード済み", "Loaded": "ロード済み",
"Progress": "進行状況", "Progress": "進行状況",
"Progress Bar": "シークバー", "Progress Bar": "シークバー",

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -52,7 +52,7 @@ var _resolveUrl__default = /*#__PURE__*/_interopDefaultLegacy(_resolveUrl);
var parseSidx__default = /*#__PURE__*/_interopDefaultLegacy(parseSidx); var parseSidx__default = /*#__PURE__*/_interopDefaultLegacy(parseSidx);
var _wrapNativeSuper__default = /*#__PURE__*/_interopDefaultLegacy(_wrapNativeSuper); var _wrapNativeSuper__default = /*#__PURE__*/_interopDefaultLegacy(_wrapNativeSuper);
var version$5 = "7.21.3"; var version$5 = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -24497,7 +24497,8 @@ var Player = /*#__PURE__*/function (_Component) {
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -24514,7 +24515,7 @@ var Player = /*#__PURE__*/function (_Component) {
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -24522,7 +24523,14 @@ var Player = /*#__PURE__*/function (_Component) {
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -33,7 +33,7 @@ import { detectContainerForBytes, isLikelyFmp4MediaSegment } from '@videojs/vhs-
import { ONE_SECOND_IN_TS } from 'mux.js/lib/utils/clock'; import { ONE_SECOND_IN_TS } from 'mux.js/lib/utils/clock';
import _wrapNativeSuper from '@babel/runtime/helpers/wrapNativeSuper'; import _wrapNativeSuper from '@babel/runtime/helpers/wrapNativeSuper';
var version$5 = "7.21.3"; var version$5 = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -24478,7 +24478,8 @@ var Player = /*#__PURE__*/function (_Component) {
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -24495,7 +24496,7 @@ var Player = /*#__PURE__*/function (_Component) {
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -24503,7 +24504,14 @@ var Player = /*#__PURE__*/function (_Component) {
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -16,7 +16,7 @@
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory()); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory());
}(this, (function () { 'use strict'; }(this, (function () { 'use strict';
var version$5 = "7.21.3"; var version$5 = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -26968,7 +26968,8 @@
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -26985,7 +26986,7 @@
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -26993,7 +26994,14 @@
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,7 @@
{ {
"name": "video.js", "name": "video.js",
"description": "An HTML5 video player that supports HLS and DASH with a common API and skin.", "description": "An HTML5 video player that supports HLS and DASH with a common API and skin.",
"version": "7.21.3", "version": "7.21.4",
"main": "./dist/video.cjs.js", "main": "./dist/video.cjs.js",
"module": "./dist/video.es.js", "module": "./dist/video.es.js",
"style": "./dist/video-js.css", "style": "./dist/video-js.css",

View file

@ -1,3 +1,16 @@
<a name="7.21.4"></a>
## [7.21.4](https://github.com/videojs/video.js/compare/v7.21.3...v7.21.4) (2023-03-15)
### Bug Fixes
* **lang:** updated Japanese translations ([#8194](https://github.com/videojs/video.js/issues/8194)) ([7eed745](https://github.com/videojs/video.js/commit/7eed745))
* replay button broken for native playback ([#8142](https://github.com/videojs/video.js/issues/8142)) ([#8183](https://github.com/videojs/video.js/issues/8183)) ([bda2b06](https://github.com/videojs/video.js/commit/bda2b06))
### Chores
* **documentation:** Update release flow in collaborator guide md ([#8166](https://github.com/videojs/video.js/issues/8166)) ([2e939e2](https://github.com/videojs/video.js/commit/2e939e2))
* use next-7 tag instead of next tag for 7x version during npm publish ([#8164](https://github.com/videojs/video.js/issues/8164)) ([852493d](https://github.com/videojs/video.js/commit/852493d))
<a name="7.21.3"></a> <a name="7.21.3"></a>
## [7.21.3](https://github.com/videojs/video.js/compare/v7.21.2...v7.21.3) (2023-02-27) ## [7.21.3](https://github.com/videojs/video.js/compare/v7.21.2...v7.21.3) (2023-02-27)

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -22,7 +22,7 @@ import vtt from 'videojs-vtt.js';
import _construct from '@babel/runtime/helpers/construct'; import _construct from '@babel/runtime/helpers/construct';
import _inherits from '@babel/runtime/helpers/inherits'; import _inherits from '@babel/runtime/helpers/inherits';
var version = "7.21.3"; var version = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -24467,7 +24467,8 @@ var Player = /*#__PURE__*/function (_Component) {
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -24484,7 +24485,7 @@ var Player = /*#__PURE__*/function (_Component) {
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -24492,7 +24493,14 @@ var Player = /*#__PURE__*/function (_Component) {
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -38,7 +38,7 @@ var vtt__default = /*#__PURE__*/_interopDefaultLegacy(vtt);
var _construct__default = /*#__PURE__*/_interopDefaultLegacy(_construct); var _construct__default = /*#__PURE__*/_interopDefaultLegacy(_construct);
var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits); var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
var version = "7.21.3"; var version = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -24483,7 +24483,8 @@ var Player = /*#__PURE__*/function (_Component) {
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -24500,7 +24501,7 @@ var Player = /*#__PURE__*/function (_Component) {
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -24508,7 +24509,14 @@ var Player = /*#__PURE__*/function (_Component) {
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -16,7 +16,7 @@
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory()); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory());
}(this, (function () { 'use strict'; }(this, (function () { 'use strict';
var version = "7.21.3"; var version = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -26968,7 +26968,8 @@
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -26985,7 +26986,7 @@
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -26993,7 +26994,14 @@
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -16,7 +16,7 @@
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory()); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory());
}(this, (function () { 'use strict'; }(this, (function () { 'use strict';
var version = "7.21.3"; var version = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -25095,7 +25095,8 @@
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -25112,7 +25113,7 @@
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -25120,7 +25121,14 @@
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -16,7 +16,7 @@
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory()); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory());
}(this, (function () { 'use strict'; }(this, (function () { 'use strict';
var version$5 = "7.21.3"; var version$5 = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -26968,7 +26968,8 @@
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -26985,7 +26986,7 @@
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -26993,7 +26994,14 @@
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -16,7 +16,7 @@
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory()); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory());
}(this, (function () { 'use strict'; }(this, (function () { 'use strict';
var version$5 = "7.21.3"; var version$5 = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -25095,7 +25095,8 @@
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -25112,7 +25113,7 @@
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -25120,7 +25121,14 @@
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

File diff suppressed because one or more lines are too long

View file

@ -9,8 +9,8 @@ videojs.addLanguage('ja', {
"Remaining Time": "残りの時間", "Remaining Time": "残りの時間",
"Stream Type": "ストリームの種類", "Stream Type": "ストリームの種類",
"LIVE": "ライブ", "LIVE": "ライブ",
"Seek to live, currently behind live": "ライブまでシーク、現在、ライブより遅れています", "Seek to live, currently behind live": "ライブまで再生位置を指定、現在ライブが遅れています。",
"Seek to live, currently playing live": "ライブまでシーク、現在、ライブより遅れています", "Seek to live, currently playing live": "ライブまで再生位置を指定、現在ライブ中。",
"Loaded": "ロード済み", "Loaded": "ロード済み",
"Progress": "進行状況", "Progress": "進行状況",
"Progress Bar": "シークバー", "Progress Bar": "シークバー",

View file

@ -9,8 +9,8 @@
"Remaining Time": "残りの時間", "Remaining Time": "残りの時間",
"Stream Type": "ストリームの種類", "Stream Type": "ストリームの種類",
"LIVE": "ライブ", "LIVE": "ライブ",
"Seek to live, currently behind live": "ライブまでシーク、現在、ライブより遅れています", "Seek to live, currently behind live": "ライブまで再生位置を指定、現在ライブが遅れています。",
"Seek to live, currently playing live": "ライブまでシーク、現在、ライブより遅れています", "Seek to live, currently playing live": "ライブまで再生位置を指定、現在ライブ中。",
"Loaded": "ロード済み", "Loaded": "ロード済み",
"Progress": "進行状況", "Progress": "進行状況",
"Progress Bar": "シークバー", "Progress Bar": "シークバー",

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -52,7 +52,7 @@ var _resolveUrl__default = /*#__PURE__*/_interopDefaultLegacy(_resolveUrl);
var parseSidx__default = /*#__PURE__*/_interopDefaultLegacy(parseSidx); var parseSidx__default = /*#__PURE__*/_interopDefaultLegacy(parseSidx);
var _wrapNativeSuper__default = /*#__PURE__*/_interopDefaultLegacy(_wrapNativeSuper); var _wrapNativeSuper__default = /*#__PURE__*/_interopDefaultLegacy(_wrapNativeSuper);
var version$5 = "7.21.3"; var version$5 = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -24497,7 +24497,8 @@ var Player = /*#__PURE__*/function (_Component) {
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -24514,7 +24515,7 @@ var Player = /*#__PURE__*/function (_Component) {
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -24522,7 +24523,14 @@ var Player = /*#__PURE__*/function (_Component) {
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -33,7 +33,7 @@ import { detectContainerForBytes, isLikelyFmp4MediaSegment } from '@videojs/vhs-
import { ONE_SECOND_IN_TS } from 'mux.js/lib/utils/clock'; import { ONE_SECOND_IN_TS } from 'mux.js/lib/utils/clock';
import _wrapNativeSuper from '@babel/runtime/helpers/wrapNativeSuper'; import _wrapNativeSuper from '@babel/runtime/helpers/wrapNativeSuper';
var version$5 = "7.21.3"; var version$5 = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -24478,7 +24478,8 @@ var Player = /*#__PURE__*/function (_Component) {
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -24495,7 +24496,7 @@ var Player = /*#__PURE__*/function (_Component) {
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -24503,7 +24504,14 @@ var Player = /*#__PURE__*/function (_Component) {
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

View file

@ -1,6 +1,6 @@
/** /**
* @license * @license
* Video.js 7.21.3 <http://videojs.com/> * Video.js 7.21.4 <http://videojs.com/>
* Copyright Brightcove, Inc. <https://www.brightcove.com/> * Copyright Brightcove, Inc. <https://www.brightcove.com/>
* Available under Apache License Version 2.0 * Available under Apache License Version 2.0
* <https://github.com/videojs/video.js/blob/main/LICENSE> * <https://github.com/videojs/video.js/blob/main/LICENSE>
@ -16,7 +16,7 @@
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory()); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory());
}(this, (function () { 'use strict'; }(this, (function () { 'use strict';
var version$5 = "7.21.3"; var version$5 = "7.21.4";
/** /**
* An Object that contains lifecycle hooks as keys which point to an array * An Object that contains lifecycle hooks as keys which point to an array
@ -26968,7 +26968,8 @@
} }
this.playCallbacks_.push(callback); this.playCallbacks_.push(callback);
var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); // treat calls to play_ somewhat like the `one` event function var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); // treat calls to play_ somewhat like the `one` event function
if (this.waitToPlay_) { if (this.waitToPlay_) {
this.off(['ready', 'loadstart'], this.waitToPlay_); this.off(['ready', 'loadstart'], this.waitToPlay_);
@ -26985,7 +26986,7 @@
this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod this.one(['ready', 'loadstart'], this.waitToPlay_); // if we are in Safari, there is a high chance that loadstart will trigger after the gesture timeperiod
// in that case, we need to prime the video element by calling load so it'll be ready in time // in that case, we need to prime the video element by calling load so it'll be ready in time
if (!isSrcReady && (IS_ANY_SAFARI || IS_IOS)) { if (!isSrcReady && isSafariOrIOS) {
this.load(); this.load();
} }
@ -26993,7 +26994,14 @@
} // If the player/tech is ready and we have a source, we can attempt playback. } // If the player/tech is ready and we have a source, we can attempt playback.
var val = this.techGet_('play'); // play was terminated if the returned value is null var val = this.techGet_('play'); // For native playback, reset the progress bar if we get a play call from a replay.
var isNativeReplay = isSafariOrIOS && this.hasClass('vjs-ended');
if (isNativeReplay) {
this.resetProgressBar_();
} // play was terminated if the returned value is null
if (val === null) { if (val === null) {
this.runPlayTerminatedQueue_(); this.runPlayTerminatedQueue_();

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,7 @@
{ {
"name": "video.js", "name": "video.js",
"description": "An HTML5 video player that supports HLS and DASH with a common API and skin.", "description": "An HTML5 video player that supports HLS and DASH with a common API and skin.",
"version": "7.21.3", "version": "7.21.4",
"main": "./dist/video.cjs.js", "main": "./dist/video.cjs.js",
"module": "./dist/video.es.js", "module": "./dist/video.es.js",
"style": "./dist/video-js.css", "style": "./dist/video-js.css",

4
node_modules/wow.js/.npmignore generated vendored
View file

@ -1,4 +0,0 @@
.DS_Store
.grunt/
node_modules/
_SpecRunner.html

3
node_modules/wow.js/.travis.yml generated vendored
View file

@ -1,3 +0,0 @@
language: node_js
node_js:
- 6

94
node_modules/wow.js/Gruntfile.js generated vendored
View file

@ -1,94 +0,0 @@
/*global module:false*/
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt);
mainTasks = [
'eslint', 'babel', 'coffee', 'growl:coffee', 'uglify', 'jasmine',
'growl:jasmine',
]
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
eslint: {
target: ['src/WOW.js']
},
uglify: {
dist: {
files: {
'dist/wow.min.js': 'dist/wow.js'
}
},
options: {
banner : '/*! <%= pkg.title %> wow.js - v<%= pkg.version %> - ' +
'<%= grunt.template.today("yyyy-mm-dd") %>\n' +
'<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' +
'* Copyright (c) <%= grunt.template.today("yyyy") %> Thomas Grainger;' +
' Licensed <%= pkg.license %> */',
report: 'gzip'
}
},
babel : {
options : {
presets: ['es2015', 'stage-1'],
plugins: [
'add-module-exports',
"transform-es2015-modules-umd"
]
},
dist: {
files: {
'dist/wow.js': 'src/WOW.js'
}
}
},
coffee : {
specs : {
files: [{
expand: true,
cwd: 'spec/coffeescripts/',
src: '*.coffee',
dest: 'spec/javascripts/',
ext: '.js'
}]
},
helpers : {
files: [{
expand: true,
cwd: 'spec/coffeescripts/helpers/',
src: '*.coffee',
dest: 'spec/javascripts/helpers/',
ext: '.js'
}]
}
},
jasmine : {
src : ['spec/javascripts/libs/*.js', 'dist/wow.min.js'],
options : {
specs : 'spec/javascripts/**/*.js',
helpers : 'spec/javascripts/helpers/**/*.js'
}
},
watch : {
files: [
'src/*',
'spec/coffeescripts/**/*.coffee'
],
tasks: mainTasks
},
growl : {
coffee : {
title : 'CoffeeScript',
message : 'Compiled successfully'
},
jasmine : {
title : 'Jasmine',
message : 'Tests passed successfully'
}
}
});
grunt.registerTask('default', mainTasks);
// Travis CI task.
grunt.registerTask('travis', ['eslint', 'babel', 'coffee', 'uglify', 'jasmine']);
};

34
node_modules/wow.js/LICENSE generated vendored
View file

@ -1,34 +0,0 @@
The MIT License (MIT)
Copyright (c) 2016 Thomas Grainger.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Portions of this wow.js Software may utilize the following copyrighted material, the use of which is hereby acknowledged.
WOW: https://github.com/matthieua/WOW/tree/20848c410fe32d161c2330e1d261b59512094f81
Copyright (C) 2014; Matthieu Aussaguel
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

140
node_modules/wow.js/README.md generated vendored
View file

@ -1,140 +0,0 @@
# WOW.js [![Build Status](https://secure.travis-ci.org/graingert/WOW.svg?branch=master)](http://travis-ci.org/graingert/WOW)
Reveal CSS animation as you scroll down a page.
By default, you can use it to trigger [animate.css](https://github.com/daneden/animate.css) animations.
But you can easily change the settings to your favorite animation library.
Advantages:
- 100% MIT Licensed, not GPL keep your code yours.
- Naturally Caffeine free
- Smaller than other JavaScript parallax plugins, like Scrollorama (they do fantastic things, but can be too heavy for simple needs)
- Super simple to install, and works with animate.css, so if you already use it, that will be very fast to setup
- Fast execution and lightweight code: the browser will like it ;-)
- You can change the settings - [see below](#advanced-usage)
### [LIVE DEMO ➫](https://graingert.co.uk/WOW/)
## Live examples
- [MaterialUp](http://www.materialup.com)
- [Fliplingo](https://www.fliplingo.com)
- [Streamline Icons](http://www.streamlineicons.com)
- [Microsoft Stories](http://www.microsoft.com/en-us/news/stories/garage/)
## Documentation
It just take seconds to install and use WOW.js!
[Read the documentation ➫](https://graingert.co.uk/WOW/docs.html)
### Dependencies
- [animate.css](https://github.com/daneden/animate.css)
### Installation
- Bower
```bash
bower install wow-mit
```
- NPM
```bash
npm install wow.js
```
### Basic usage
- HTML
```html
<section class="wow slideInLeft"></section>
<section class="wow slideInRight"></section>
```
- JavaScript
```javascript
new WOW().init();
```
### Advanced usage
- HTML
```html
<section class="wow slideInLeft" data-wow-duration="2s" data-wow-delay="5s"></section>
<section class="wow slideInRight" data-wow-offset="10" data-wow-iteration="10"></section>
```
- JavaScript
```javascript
var wow = new WOW(
{
boxClass: 'wow', // animated element css class (default is wow)
animateClass: 'animated', // animation css class (default is animated)
offset: 0, // distance to the element when triggering the animation (default is 0)
mobile: true, // trigger animations on mobile devices (default is true)
live: true, // act on asynchronously loaded content (default is true)
callback: function(box) {
// the callback is fired every time an animation is started
// the argument that is passed in is the DOM node being animated
},
scrollContainer: null // optional scroll container selector, otherwise use window
}
);
wow.init();
```
### Asynchronous content support
In IE 10+, Chrome 18+ and Firefox 14+, animations will be automatically
triggered for any DOM nodes you add after calling `wow.init()`. If you do not
like that, you can disable this by setting `live` to `false`.
If you want to support older browsers (e.g. IE9+), as a fallback, you can call
the `wow.sync()` method after you have added new DOM elements to animate (but
`live` should still be set to `true`). Calling `wow.sync()` has no side
effects.
## Contribute
The library is transpiled using Babel, please update `wow.js` file.
We use grunt to compile and minify the library:
Install needed libraries
```
npm install
```
Get the compilation running in the background
```
grunt watch
```
Enjoy!
## Bug tracker
If you find a bug, please report it [here on Github](https://github.com/graingert/WOW/issues)!
## Developer
Originally Developed by Matthieu Aussaguel, [mynameismatthieu.com](http://mynameismatthieu.com)
Forked to remain under the MIT license by Thomas Grainger, https://graingert.co.uk
+ [Github Profile](//github.com/graingert)
## Contributors
Thanks to everyone who has contributed to the project so far:
- Attila Oláh - [@attilaolah](//twitter.com/attilaolah) - [Github Profile](//github.com/attilaolah)
- [and many others](//github.com/graingert/WOW/graphs/contributors)
Initiated and designed by [Vincent Le Moign](//www.webalys.com/), [@webalys](//twitter.com/webalys)

25
node_modules/wow.js/bower.json generated vendored
View file

@ -1,25 +0,0 @@
{
"name": "wow",
"homepage": "https://github.com/graingert/WOW",
"authors": [
"Matthieu Aussaguel <matthieu.aussaguel@gmail.com>"
],
"authors": [
"Thomas Grainger <wow.js@graingert.co.uk>"
],
"description": "Reveal CSS animation as you scroll down a page.",
"main": "dist/wow.js",
"keywords": [
"scroll",
"animation",
"reveal"
],
"license": "MIT",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"test",
"tests"
]
}

File diff suppressed because it is too large Load diff

36
node_modules/wow.js/css/site.css generated vendored
View file

@ -1,36 +0,0 @@
h1 {
font-size: 72px;
line-height: 1.5;
color: #2c3e50;
font-weight: 100;
}
#container {
width: 980px;
margin: 0 auto;
}
section {
height: 300px;
margin: 60px 0;
}
.section--purple {
background-color: #9b59b6;
}
.section--blue {
background-color: #3498db;
}
.section--green {
background-color: #2ecc71;
}
#main {
text-align: center;
}
#more {
margin: 20px auto 48px;
}

52
node_modules/wow.js/demo.html generated vendored
View file

@ -1,52 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>WOW</title>
<link rel="stylesheet" href="css/libs/animate.css">
<link rel="stylesheet" href="css/site.css">
<style>
.wow:first-child {
visibility: hidden;
}
</style>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<div id="container">
<header>
<h1>WOW.js</h1>
</header>
<div id="main">
<section class="wow fadeInDown" style="background-color: #f1c40f;"></section>
<section class="wow pulse" style="background-color: #e74c3c;" data-wow-iteration="infinite" data-wow-duration="1500ms"></section>
<section class="section--purple wow slideInRight" data-wow-delay="2s"></section>
<section class="section--blue wow bounceInLeft" data-wow-offset="300"></section>
<section class="section--green wow slideInLeft" data-wow-duration="4s"></section>
<button id="moar">LOAD MOAR!!</button>
</div>
</div>
<script src="dist/wow.js"></script>
<script>
wow = new WOW(
{
animateClass: 'animated',
offset: 100,
callback: function(box) {
console.log("WOW: animating <" + box.tagName.toLowerCase() + ">")
}
}
);
wow.init();
document.getElementById('moar').onclick = function() {
var section = document.createElement('section');
section.className = 'section--purple wow fadeInDown';
this.parentNode.insertBefore(section, this);
};
</script>
</body>
</html>

533
node_modules/wow.js/dist/wow.js generated vendored
View file

@ -1,533 +0,0 @@
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(['module', 'exports'], factory);
} else if (typeof exports !== "undefined") {
factory(module, exports);
} else {
var mod = {
exports: {}
};
factory(mod, mod.exports);
global.WOW = mod.exports;
}
})(this, function (module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _class, _temp;
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var _createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
function isIn(needle, haystack) {
return haystack.indexOf(needle) >= 0;
}
function extend(custom, defaults) {
for (var key in defaults) {
if (custom[key] == null) {
var value = defaults[key];
custom[key] = value;
}
}
return custom;
}
function isMobile(agent) {
return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent)
);
}
function createEvent(event) {
var bubble = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
var cancel = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];
var detail = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];
var customEvent = void 0;
if (document.createEvent != null) {
// W3C DOM
customEvent = document.createEvent('CustomEvent');
customEvent.initCustomEvent(event, bubble, cancel, detail);
} else if (document.createEventObject != null) {
// IE DOM < 9
customEvent = document.createEventObject();
customEvent.eventType = event;
} else {
customEvent.eventName = event;
}
return customEvent;
}
function emitEvent(elem, event) {
if (elem.dispatchEvent != null) {
// W3C DOM
elem.dispatchEvent(event);
} else if (event in (elem != null)) {
elem[event]();
} else if ('on' + event in (elem != null)) {
elem['on' + event]();
}
}
function addEvent(elem, event, fn) {
if (elem.addEventListener != null) {
// W3C DOM
elem.addEventListener(event, fn, false);
} else if (elem.attachEvent != null) {
// IE DOM
elem.attachEvent('on' + event, fn);
} else {
// fallback
elem[event] = fn;
}
}
function removeEvent(elem, event, fn) {
if (elem.removeEventListener != null) {
// W3C DOM
elem.removeEventListener(event, fn, false);
} else if (elem.detachEvent != null) {
// IE DOM
elem.detachEvent('on' + event, fn);
} else {
// fallback
delete elem[event];
}
}
function getInnerHeight() {
if ('innerHeight' in window) {
return window.innerHeight;
}
return document.documentElement.clientHeight;
}
// Minimalistic WeakMap shim, just in case.
var WeakMap = window.WeakMap || window.MozWeakMap || function () {
function WeakMap() {
_classCallCheck(this, WeakMap);
this.keys = [];
this.values = [];
}
_createClass(WeakMap, [{
key: 'get',
value: function get(key) {
for (var i = 0; i < this.keys.length; i++) {
var item = this.keys[i];
if (item === key) {
return this.values[i];
}
}
return undefined;
}
}, {
key: 'set',
value: function set(key, value) {
for (var i = 0; i < this.keys.length; i++) {
var item = this.keys[i];
if (item === key) {
this.values[i] = value;
return this;
}
}
this.keys.push(key);
this.values.push(value);
return this;
}
}]);
return WeakMap;
}();
// Dummy MutationObserver, to avoid raising exceptions.
var MutationObserver = window.MutationObserver || window.WebkitMutationObserver || window.MozMutationObserver || (_temp = _class = function () {
function MutationObserver() {
_classCallCheck(this, MutationObserver);
if (typeof console !== 'undefined' && console !== null) {
console.warn('MutationObserver is not supported by your browser.');
console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.');
}
}
_createClass(MutationObserver, [{
key: 'observe',
value: function observe() {}
}]);
return MutationObserver;
}(), _class.notSupported = true, _temp);
// getComputedStyle shim, from http://stackoverflow.com/a/21797294
var getComputedStyle = window.getComputedStyle || function getComputedStyle(el) {
var getComputedStyleRX = /(\-([a-z]){1})/g;
return {
getPropertyValue: function getPropertyValue(prop) {
if (prop === 'float') {
prop = 'styleFloat';
}
if (getComputedStyleRX.test(prop)) {
prop.replace(getComputedStyleRX, function (_, _char) {
return _char.toUpperCase();
});
}
var currentStyle = el.currentStyle;
return (currentStyle != null ? currentStyle[prop] : void 0) || null;
}
};
};
var WOW = function () {
function WOW() {
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
_classCallCheck(this, WOW);
this.defaults = {
boxClass: 'wow',
animateClass: 'animated',
offset: 0,
mobile: true,
live: true,
callback: null,
scrollContainer: null
};
this.animate = function animateFactory() {
if ('requestAnimationFrame' in window) {
return function (callback) {
return window.requestAnimationFrame(callback);
};
}
return function (callback) {
return callback();
};
}();
this.vendors = ['moz', 'webkit'];
this.start = this.start.bind(this);
this.resetAnimation = this.resetAnimation.bind(this);
this.scrollHandler = this.scrollHandler.bind(this);
this.scrollCallback = this.scrollCallback.bind(this);
this.scrolled = true;
this.config = extend(options, this.defaults);
if (options.scrollContainer != null) {
this.config.scrollContainer = document.querySelector(options.scrollContainer);
}
// Map of elements to animation names:
this.animationNameCache = new WeakMap();
this.wowEvent = createEvent(this.config.boxClass);
}
_createClass(WOW, [{
key: 'init',
value: function init() {
this.element = window.document.documentElement;
if (isIn(document.readyState, ['interactive', 'complete'])) {
this.start();
} else {
addEvent(document, 'DOMContentLoaded', this.start);
}
this.finished = [];
}
}, {
key: 'start',
value: function start() {
var _this = this;
this.stopped = false;
this.boxes = [].slice.call(this.element.querySelectorAll('.' + this.config.boxClass));
this.all = this.boxes.slice(0);
if (this.boxes.length) {
if (this.disabled()) {
this.resetStyle();
} else {
for (var i = 0; i < this.boxes.length; i++) {
var box = this.boxes[i];
this.applyStyle(box, true);
}
}
}
if (!this.disabled()) {
addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
addEvent(window, 'resize', this.scrollHandler);
this.interval = setInterval(this.scrollCallback, 50);
}
if (this.config.live) {
var mut = new MutationObserver(function (records) {
for (var j = 0; j < records.length; j++) {
var record = records[j];
for (var k = 0; k < record.addedNodes.length; k++) {
var node = record.addedNodes[k];
_this.doSync(node);
}
}
return undefined;
});
mut.observe(document.body, {
childList: true,
subtree: true
});
}
}
}, {
key: 'stop',
value: function stop() {
this.stopped = true;
removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
removeEvent(window, 'resize', this.scrollHandler);
if (this.interval != null) {
clearInterval(this.interval);
}
}
}, {
key: 'sync',
value: function sync() {
if (MutationObserver.notSupported) {
this.doSync(this.element);
}
}
}, {
key: 'doSync',
value: function doSync(element) {
if (typeof element === 'undefined' || element === null) {
element = this.element;
}
if (element.nodeType !== 1) {
return;
}
element = element.parentNode || element;
var iterable = element.querySelectorAll('.' + this.config.boxClass);
for (var i = 0; i < iterable.length; i++) {
var box = iterable[i];
if (!isIn(box, this.all)) {
this.boxes.push(box);
this.all.push(box);
if (this.stopped || this.disabled()) {
this.resetStyle();
} else {
this.applyStyle(box, true);
}
this.scrolled = true;
}
}
}
}, {
key: 'show',
value: function show(box) {
this.applyStyle(box);
box.className = box.className + ' ' + this.config.animateClass;
if (this.config.callback != null) {
this.config.callback(box);
}
emitEvent(box, this.wowEvent);
addEvent(box, 'animationend', this.resetAnimation);
addEvent(box, 'oanimationend', this.resetAnimation);
addEvent(box, 'webkitAnimationEnd', this.resetAnimation);
addEvent(box, 'MSAnimationEnd', this.resetAnimation);
return box;
}
}, {
key: 'applyStyle',
value: function applyStyle(box, hidden) {
var _this2 = this;
var duration = box.getAttribute('data-wow-duration');
var delay = box.getAttribute('data-wow-delay');
var iteration = box.getAttribute('data-wow-iteration');
return this.animate(function () {
return _this2.customStyle(box, hidden, duration, delay, iteration);
});
}
}, {
key: 'resetStyle',
value: function resetStyle() {
for (var i = 0; i < this.boxes.length; i++) {
var box = this.boxes[i];
box.style.visibility = 'visible';
}
return undefined;
}
}, {
key: 'resetAnimation',
value: function resetAnimation(event) {
if (event.type.toLowerCase().indexOf('animationend') >= 0) {
var target = event.target || event.srcElement;
target.className = target.className.replace(this.config.animateClass, '').trim();
}
}
}, {
key: 'customStyle',
value: function customStyle(box, hidden, duration, delay, iteration) {
if (hidden) {
this.cacheAnimationName(box);
}
box.style.visibility = hidden ? 'hidden' : 'visible';
if (duration) {
this.vendorSet(box.style, { animationDuration: duration });
}
if (delay) {
this.vendorSet(box.style, { animationDelay: delay });
}
if (iteration) {
this.vendorSet(box.style, { animationIterationCount: iteration });
}
this.vendorSet(box.style, { animationName: hidden ? 'none' : this.cachedAnimationName(box) });
return box;
}
}, {
key: 'vendorSet',
value: function vendorSet(elem, properties) {
for (var name in properties) {
if (properties.hasOwnProperty(name)) {
var value = properties[name];
elem['' + name] = value;
for (var i = 0; i < this.vendors.length; i++) {
var vendor = this.vendors[i];
elem['' + vendor + name.charAt(0).toUpperCase() + name.substr(1)] = value;
}
}
}
}
}, {
key: 'vendorCSS',
value: function vendorCSS(elem, property) {
var style = getComputedStyle(elem);
var result = style.getPropertyCSSValue(property);
for (var i = 0; i < this.vendors.length; i++) {
var vendor = this.vendors[i];
result = result || style.getPropertyCSSValue('-' + vendor + '-' + property);
}
return result;
}
}, {
key: 'animationName',
value: function animationName(box) {
var aName = void 0;
try {
aName = this.vendorCSS(box, 'animation-name').cssText;
} catch (error) {
// Opera, fall back to plain property value
aName = getComputedStyle(box).getPropertyValue('animation-name');
}
if (aName === 'none') {
return ''; // SVG/Firefox, unable to get animation name?
}
return aName;
}
}, {
key: 'cacheAnimationName',
value: function cacheAnimationName(box) {
// https://bugzilla.mozilla.org/show_bug.cgi?id=921834
// box.dataset is not supported for SVG elements in Firefox
return this.animationNameCache.set(box, this.animationName(box));
}
}, {
key: 'cachedAnimationName',
value: function cachedAnimationName(box) {
return this.animationNameCache.get(box);
}
}, {
key: 'scrollHandler',
value: function scrollHandler() {
this.scrolled = true;
}
}, {
key: 'scrollCallback',
value: function scrollCallback() {
if (this.scrolled) {
this.scrolled = false;
var results = [];
for (var i = 0; i < this.boxes.length; i++) {
var box = this.boxes[i];
if (box) {
if (this.isVisible(box)) {
this.show(box);
continue;
}
results.push(box);
}
}
this.boxes = results;
if (!this.boxes.length && !this.config.live) {
this.stop();
}
}
}
}, {
key: 'offsetTop',
value: function offsetTop(element) {
// SVG elements don't have an offsetTop in Firefox.
// This will use their nearest parent that has an offsetTop.
// Also, using ('offsetTop' of element) causes an exception in Firefox.
while (element.offsetTop === undefined) {
element = element.parentNode;
}
var top = element.offsetTop;
while (element.offsetParent) {
element = element.offsetParent;
top += element.offsetTop;
}
return top;
}
}, {
key: 'isVisible',
value: function isVisible(box) {
var offset = box.getAttribute('data-wow-offset') || this.config.offset;
var viewTop = this.config.scrollContainer && this.config.scrollContainer.scrollTop || window.pageYOffset;
var viewBottom = viewTop + Math.min(this.element.clientHeight, getInnerHeight()) - offset;
var top = this.offsetTop(box);
var bottom = top + box.clientHeight;
return top <= viewBottom && bottom >= viewTop;
}
}, {
key: 'disabled',
value: function disabled() {
return !this.config.mobile && isMobile(navigator.userAgent);
}
}]);
return WOW;
}();
exports.default = WOW;
module.exports = exports['default'];
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

51
node_modules/wow.js/package.json generated vendored
View file

@ -1,51 +0,0 @@
{
"name": "wow.js",
"title": "WOW",
"version": "1.2.2",
"main": "dist/wow.js",
"description": "",
"keywords": [],
"homepage": "https://wowjs.uk",
"contributors": [
{
"name": "Matthieu Aussaguel",
"email": "matthieu.aussaguel@gmail.com",
"url": "http://mynameismatthieu.com/"
},
{
"name": "Thomas Grainger",
"email": "wow.js@graingert.co.uk",
"url": "https://graingert.co.uk/"
}
],
"repository": {
"type": "git",
"url": "git://github.com/graingert/WOW.git"
},
"bugs": {
"url": "https://github.com/graingert/WOW/issues"
},
"license": "MIT",
"devDependencies": {
"babel-eslint": "^6.0.4",
"babel-plugin-add-module-exports": "^0.2.0",
"babel-plugin-transform-es2015-modules-umd": "^6.8.0",
"babel-preset-es2015": "^6.6.0",
"babel-preset-stage-1": "^6.5.0",
"eslint-config-airbnb-base": "^3.0.0",
"eslint-plugin-import": "^1.7.0",
"grunt": "latest",
"grunt-babel": "^6.0.0",
"grunt-cli": "latest",
"grunt-contrib-coffee": "latest",
"grunt-contrib-jasmine": "latest",
"grunt-contrib-uglify": "latest",
"grunt-contrib-watch": "latest",
"grunt-eslint": "^18.1.0",
"grunt-growl": "latest",
"load-grunt-tasks": "^3.5.0"
},
"scripts": {
"test": "grunt travis"
}
}

View file

@ -1 +0,0 @@
beforeEach ->

View file

@ -1,334 +0,0 @@
describe 'WOW', ->
# Supress warnings:
window.console =
warn: ->
# Time to wait after each scroll event:
# (This should be >= the interval used by the plugin.)
timeout = 100
# Height of the PhantomJS window:
winHeight = 300
describe 'smoke test', ->
it 'exists', ->
expect WOW
.toBeDefined()
it "has an 'init' method", ->
expect new WOW().init
.toBeDefined()
describe 'simple test environment', ->
beforeEach ->
loadFixtures 'simple.html'
it 'emulates window height', ->
expect document.documentElement.clientHeight
.toBe winHeight
it 'has boxes set up for testing', ->
boxHeight = 200
boxCount = $ '#simple'
.children().length
# Check each box height
expect $('#simple').height()
.toBe boxHeight*boxCount
expect $('#simple-1').height()
.toBe boxHeight
expect $('#simple-2').height()
.toBe boxHeight
expect $('#simple-3').height()
.toBe boxHeight
expect $('#simple-4').height()
.toBe boxHeight
expect $('#simple-5').height()
.toBe boxHeight
# Check each box offset
offset = $('#simple').offset().top
expect $('#simple-1').offset().top
.toBe offset + boxHeight*0
expect $('#simple-2').offset().top
.toBe offset + boxHeight*1
expect $('#simple-3').offset().top
.toBe offset + boxHeight*2
expect $('#simple-4').offset().top
.toBe offset + boxHeight*3
expect $('#simple-5').offset().top
.toBe offset + boxHeight*4
style = $('#simple-5')[0].style
expect style.background
.toBe 'yellow'
expect style.color
.toBe 'red'
describe 'library behaviour', ->
wow = null
beforeEach (done) ->
loadFixtures 'simple.html'
(wow = new WOW).init()
setTimeout ->
done()
, timeout
it 'animates elements that are fully visible on the page', ->
expect $ '#simple-1'
.toHaveClass 'animated'
expect $('#simple-1').css 'visibility'
.toBe 'visible'
it "does not touch elements that don't have the marker class", ->
expect $ '#simple-2'
.not.toHaveClass 'animated'
expect $('#simple-2').css 'visibility'
.toBe 'visible'
it 'does not animate elements not yet visible on the page', ->
expect $ '#simple-3'
.not.toHaveClass 'animated'
expect $('#simple-3').css 'visibility'
.not.toBe 'visible'
expect $ '#simple-4'
.not.toHaveClass 'animated'
expect $('#simple-4').css 'visibility'
.not.toBe 'visible'
it 'animates elements after scrolling down and they become visible', (done) ->
# Scroll down so that 150px of #simple-3 becomes visible.
window.scrollTo 0, $('#simple-3').offset().top - winHeight + 150
setTimeout ->
expect $ '#simple-3'
.toHaveClass 'animated'
expect $('#simple-3').css 'visibility'
.toBe 'visible'
expect $ '#simple-4'
.not.toHaveClass 'animated'
expect $('#simple-4').css 'visibility'
.not.toBe 'visible'
# Scroll down so that 150px of #simple-4 becomes visible.
window.scrollTo 0, $('#simple-4').offset().top - winHeight + 150
setTimeout ->
expect $ '#simple-4'
.toHaveClass 'animated'
expect $('#simple-4').css 'visibility'
.toBe 'visible'
done()
, timeout
, timeout
it 'does not tamper with the style attribute', (done) ->
# Scroll down so that 150px of #simple-5 becomes visible.
window.scrollTo 0, $('#simple-5').offset().top - winHeight + 150
setTimeout ->
expect $ '#simple-5'
.toHaveClass 'animated'
expect $('#simple-5').css 'visibility'
.toBe 'visible'
expect $('#simple-5')[0].style.background
.toBe 'yellow'
expect $('#simple-5')[0].style.color
.toBe 'red'
done()
, timeout
it 'works with asynchronously loaded content', (done) ->
$ '#simple'
.append $ '<div/>',
id: 'simple-6'
class: 'wow'
wow.sync()
# Scroll down so that 150px of #simple-6 becomes visible.
window.scrollTo 0, $('#simple-6').offset().top - winHeight + 150
setTimeout ->
expect $ '#simple-6'
.toHaveClass 'animated'
expect $('#simple-6').css 'visibility'
.toBe 'visible'
done()
, timeout
it 'works with asynchronously loaded nested content', (done) ->
$ '#simple'
.append $ '<div/>'
.children()
.first()
.append $ '<div/>',
id: 'simple-7'
class: 'wow'
wow.sync()
# Scroll down so that 150px of #simple-7 becomes visible.
window.scrollTo 0, $('#simple-7').offset().top - winHeight + 150
setTimeout ->
expect $ '#simple-7'
.toHaveClass 'animated'
expect $('#simple-7').css 'visibility'
.toBe 'visible'
done()
, timeout
describe 'custom test environment', ->
beforeEach ->
loadFixtures 'custom.html'
it 'emulates window height', ->
expect document.documentElement.clientHeight
.toBe winHeight
it 'has boxes set up for testing', ->
# Check each box height
expect $('#custom').height()
.toBe 800
expect $('#custom-1').height()
.toBe 200
expect $('#custom-2').height()
.toBe 200
expect $('#custom-3').height()
.toBe 200
expect $('#custom-4').height()
.toBe 200
# Check each box offset
offset = $('#custom').offset().top
expect $('#custom-1').offset().top
.toBe offset + 200*0
expect $('#custom-2').offset().top
.toBe offset + 200*1
expect $('#custom-3').offset().top
.toBe offset + 200*2
expect $('#custom-4').offset().top
.toBe offset + 200*3
describe 'library behaviour with custom settings', ->
called = false
beforeEach (done) ->
called = false
loadFixtures 'custom.html'
new WOW
boxClass: 'block'
animateClass: 'fancy'
offset: 10
callback: ->
called = true
.init()
# Trigger custom event on dom object, event name is boxClass value
$('.block').on 'block', ->
$(this).addClass('triggered')
setTimeout ->
done()
, timeout
it "creates two instances of the WOW.js with different configs", ->
wow1 = new WOW
boxClass: 'block1'
animateClass: 'fancy1'
offset: 10
wow2 = new WOW
boxClass: 'block2'
animateClass: 'fancy2'
offset: 20
expect wow1.config.boxClass
.toBe "block1"
expect wow1.config.animateClass
.toBe "fancy1"
expect wow1.config.offset
.toBe 10
it "does not touch elements that don't have the marker class", (done) ->
# Scroll down so that 15px of #custom-1 becomes visible.
window.scrollTo 0, $('#custom-1').offset().top - winHeight + 15
setTimeout ->
expect $ '#custom-1'
.not.toHaveClass 'fancy'
done()
, timeout
it "animates elements that are partially visible on the page based on the 'offset' config", (done) ->
setTimeout ->
# Scroll down so that 5px of #custom-2 becomes visible.
window.scrollTo 0, $('#custom-2').offset().top - winHeight + 5
expect $ '#custom-2'
.not.toHaveClass 'fancy'
window.scrollTo 0, $('#custom-2').offset().top - winHeight + 15
setTimeout ->
# Scroll down so that 15px of #custom-2 becomes visible.
expect $ '#custom-2'
.toHaveClass 'fancy'
expect $('#custom-2').css 'visibility'
.toBe 'visible'
done()
, timeout
, timeout
it 'does not animate elements not yet visible on the page', ->
expect $ '#custom-3'
.not.toHaveClass 'fancy'
expect $ '#custom-4'
.not.toHaveClass 'fancy'
it 'animates elements after scrolling down and they become visible', (done) ->
# Scroll down so that 150px of #custom-3 becomes visible.
window.scrollTo 0, $('#custom-3').offset().top - winHeight + 150
setTimeout ->
expect $ '#custom-3'
.toHaveClass 'fancy'
expect $('#custom-3').css 'visibility'
.toBe 'visible'
expect $('#custom-3')[0].style.webkitAnimationIterationCount
.toBe '2'
expect $ '#custom-4'
.not.toHaveClass 'fancy'
# Scroll down so that 150px of #custom-4 becomes visible.
window.scrollTo 0, $('#custom-4').offset().top - winHeight + 150
setTimeout ->
expect $ '#custom-4'
.toHaveClass 'fancy'
expect $('#custom-4').css 'visibility'
.toBe 'visible'
expect $('#custom-4')[0].style.webkitAnimationIterationCount
.toBe 'infinite'
expect $('#custom-4')[0].style.webkitAnimationDuration
.toBe '2s'
expect $('#custom-4')[0].style.webkitAnimationDelay
.toBe '1s'
done()
, timeout
, timeout
it "fires the callback", (done) ->
called = false # reset
# Scroll down so that 150px of #custom-3 becomes visible.
window.scrollTo 0, $('#custom-3').offset().top - winHeight + 150
setTimeout ->
expect called
.toBe true
done()
, timeout
it 'fires the callback on the visible element', (done) ->
# Scroll down so that 150px of #custom-3 becomes visible.
window.scrollTo 0, $('#custom-3').offset().top - winHeight + 150
setTimeout ->
expect $ '#custom-3'
.toHaveClass 'triggered'
expect $ '#custom-4'
.not.toHaveClass 'triggered'
# Scroll down so that 150px of #custom-4 becomes visible.
window.scrollTo 0, $('#custom-4').offset().top - winHeight + 150
setTimeout ->
expect $ '#custom-3'
.toHaveClass 'triggered'
expect $ '#custom-4'
.toHaveClass 'triggered'
done()
, timeout
, timeout

View file

@ -1 +0,0 @@
<style scoped> #custom { position: relative; top: 100px; } #custom > div { height: 200px; } </style> <div id="custom"> <div id="custom-1" class="wow">Test 1</div> <div id="custom-2" class="block">Test 2</div> <div id="custom-3" class="block" data-wow-iteration="2">Test 3</div> <div id="custom-4" class="block" data-wow-iteration="infinite" data-wow-duration="2s" data-wow-delay="1s">Test 4</div> </div>

View file

@ -1 +0,0 @@
<style scoped> #simple { position: relative; top: 100px; } #simple > div { height: 200px; } .wow { visibility: hidden; } </style> <div id="simple"> <div id="simple-1" class="wow">Test 1</div> <div id="simple-2">Test 2</div> <div id="simple-3" class="wow">Test 3</div> <div id="simple-4" class="wow">Test 4</div> <div id="simple-5" class="wow" style="background: yellow; color: red;">Test 5</div> </div>

View file

@ -1,4 +0,0 @@
(function() {
beforeEach(function() {});
}).call(this);

View file

@ -1,812 +0,0 @@
/*!
Jasmine-jQuery: a set of jQuery helpers for Jasmine tests.
Version 2.0.2
https://github.com/velesin/jasmine-jquery
Copyright (c) 2010-2014 Wojciech Zawistowski, Travis Jeffery
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+function (window, jasmine, $) { "use strict";
jasmine.spiedEventsKey = function (selector, eventName) {
return [$(selector).selector, eventName].toString()
}
jasmine.getFixtures = function () {
return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures()
}
jasmine.getStyleFixtures = function () {
return jasmine.currentStyleFixtures_ = jasmine.currentStyleFixtures_ || new jasmine.StyleFixtures()
}
jasmine.Fixtures = function () {
this.containerId = 'jasmine-fixtures'
this.fixturesCache_ = {}
this.fixturesPath = 'spec/javascripts/fixtures'
}
jasmine.Fixtures.prototype.set = function (html) {
this.cleanUp()
return this.createContainer_(html)
}
jasmine.Fixtures.prototype.appendSet= function (html) {
this.addToContainer_(html)
}
jasmine.Fixtures.prototype.preload = function () {
this.read.apply(this, arguments)
}
jasmine.Fixtures.prototype.load = function () {
this.cleanUp()
this.createContainer_(this.read.apply(this, arguments))
}
jasmine.Fixtures.prototype.appendLoad = function () {
this.addToContainer_(this.read.apply(this, arguments))
}
jasmine.Fixtures.prototype.read = function () {
var htmlChunks = []
, fixtureUrls = arguments
for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]))
}
return htmlChunks.join('')
}
jasmine.Fixtures.prototype.clearCache = function () {
this.fixturesCache_ = {}
}
jasmine.Fixtures.prototype.cleanUp = function () {
$('#' + this.containerId).remove()
}
jasmine.Fixtures.prototype.sandbox = function (attributes) {
var attributesToSet = attributes || {}
return $('<div id="sandbox" />').attr(attributesToSet)
}
jasmine.Fixtures.prototype.createContainer_ = function (html) {
var container = $('<div>')
.attr('id', this.containerId)
.html(html)
$(document.body).append(container)
return container
}
jasmine.Fixtures.prototype.addToContainer_ = function (html){
var container = $(document.body).find('#'+this.containerId).append(html)
if (!container.length) {
this.createContainer_(html)
}
}
jasmine.Fixtures.prototype.getFixtureHtml_ = function (url) {
if (typeof this.fixturesCache_[url] === 'undefined') {
this.loadFixtureIntoCache_(url)
}
return this.fixturesCache_[url]
}
jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) {
var self = this
, url = this.makeFixtureUrl_(relativeUrl)
, htmlText = ''
, request = $.ajax({
async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
cache: false,
url: url,
success: function (data, status, $xhr) {
htmlText = $xhr.responseText
}
}).fail(function () {
throw new Error('Fixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')')
})
var scripts = $($.parseHTML(htmlText, true)).find('script[src]') || [];
scripts.each(function(){
$.ajax({
async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
cache: false,
dataType: 'script',
url: $(this).attr('src'),
success: function (data, status, $xhr) {
htmlText += '<script>' + $xhr.responseText + '</script>'
},
error: function (jqXHR, status, errorThrown) {
throw new Error('Script could not be loaded: ' + scriptSrc + ' (status: ' + status + ', message: ' + errorThrown.message + ')')
}
});
})
self.fixturesCache_[relativeUrl] = htmlText;
}
jasmine.Fixtures.prototype.makeFixtureUrl_ = function (relativeUrl){
return this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
}
jasmine.Fixtures.prototype.proxyCallTo_ = function (methodName, passedArguments) {
return this[methodName].apply(this, passedArguments)
}
jasmine.StyleFixtures = function () {
this.fixturesCache_ = {}
this.fixturesNodes_ = []
this.fixturesPath = 'spec/javascripts/fixtures'
}
jasmine.StyleFixtures.prototype.set = function (css) {
this.cleanUp()
this.createStyle_(css)
}
jasmine.StyleFixtures.prototype.appendSet = function (css) {
this.createStyle_(css)
}
jasmine.StyleFixtures.prototype.preload = function () {
this.read_.apply(this, arguments)
}
jasmine.StyleFixtures.prototype.load = function () {
this.cleanUp()
this.createStyle_(this.read_.apply(this, arguments))
}
jasmine.StyleFixtures.prototype.appendLoad = function () {
this.createStyle_(this.read_.apply(this, arguments))
}
jasmine.StyleFixtures.prototype.cleanUp = function () {
while(this.fixturesNodes_.length) {
this.fixturesNodes_.pop().remove()
}
}
jasmine.StyleFixtures.prototype.createStyle_ = function (html) {
var styleText = $('<div></div>').html(html).text()
, style = $('<style>' + styleText + '</style>')
this.fixturesNodes_.push(style)
$('head').append(style)
}
jasmine.StyleFixtures.prototype.clearCache = jasmine.Fixtures.prototype.clearCache
jasmine.StyleFixtures.prototype.read_ = jasmine.Fixtures.prototype.read
jasmine.StyleFixtures.prototype.getFixtureHtml_ = jasmine.Fixtures.prototype.getFixtureHtml_
jasmine.StyleFixtures.prototype.loadFixtureIntoCache_ = jasmine.Fixtures.prototype.loadFixtureIntoCache_
jasmine.StyleFixtures.prototype.makeFixtureUrl_ = jasmine.Fixtures.prototype.makeFixtureUrl_
jasmine.StyleFixtures.prototype.proxyCallTo_ = jasmine.Fixtures.prototype.proxyCallTo_
jasmine.getJSONFixtures = function () {
return jasmine.currentJSONFixtures_ = jasmine.currentJSONFixtures_ || new jasmine.JSONFixtures()
}
jasmine.JSONFixtures = function () {
this.fixturesCache_ = {}
this.fixturesPath = 'spec/javascripts/fixtures/json'
}
jasmine.JSONFixtures.prototype.load = function () {
this.read.apply(this, arguments)
return this.fixturesCache_
}
jasmine.JSONFixtures.prototype.read = function () {
var fixtureUrls = arguments
for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
this.getFixtureData_(fixtureUrls[urlIndex])
}
return this.fixturesCache_
}
jasmine.JSONFixtures.prototype.clearCache = function () {
this.fixturesCache_ = {}
}
jasmine.JSONFixtures.prototype.getFixtureData_ = function (url) {
if (!this.fixturesCache_[url]) this.loadFixtureIntoCache_(url)
return this.fixturesCache_[url]
}
jasmine.JSONFixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) {
var self = this
, url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
$.ajax({
async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
cache: false,
dataType: 'json',
url: url,
success: function (data) {
self.fixturesCache_[relativeUrl] = data
},
error: function (jqXHR, status, errorThrown) {
throw new Error('JSONFixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')')
}
})
}
jasmine.JSONFixtures.prototype.proxyCallTo_ = function (methodName, passedArguments) {
return this[methodName].apply(this, passedArguments)
}
jasmine.jQuery = function () {}
jasmine.jQuery.browserTagCaseIndependentHtml = function (html) {
return $('<div/>').append(html).html()
}
jasmine.jQuery.elementToString = function (element) {
return $(element).map(function () { return this.outerHTML; }).toArray().join(', ')
}
var data = {
spiedEvents: {}
, handlers: []
}
jasmine.jQuery.events = {
spyOn: function (selector, eventName) {
var handler = function (e) {
data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] = jasmine.util.argsToArray(arguments)
}
$(selector).on(eventName, handler)
data.handlers.push(handler)
return {
selector: selector,
eventName: eventName,
handler: handler,
reset: function (){
delete data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
}
}
},
args: function (selector, eventName) {
var actualArgs = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
if (!actualArgs) {
throw "There is no spy for " + eventName + " on " + selector.toString() + ". Make sure to create a spy using spyOnEvent."
}
return actualArgs
},
wasTriggered: function (selector, eventName) {
return !!(data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)])
},
wasTriggeredWith: function (selector, eventName, expectedArgs, util, customEqualityTesters) {
var actualArgs = jasmine.jQuery.events.args(selector, eventName).slice(1)
if (Object.prototype.toString.call(expectedArgs) !== '[object Array]')
actualArgs = actualArgs[0]
return util.equals(expectedArgs, actualArgs, customEqualityTesters)
},
wasPrevented: function (selector, eventName) {
var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
, e = args ? args[0] : undefined
return e && e.isDefaultPrevented()
},
wasStopped: function (selector, eventName) {
var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
, e = args ? args[0] : undefined
return e && e.isPropagationStopped()
},
cleanUp: function () {
data.spiedEvents = {}
data.handlers = []
}
}
var hasProperty = function (actualValue, expectedValue) {
if (expectedValue === undefined)
return actualValue !== undefined
return actualValue === expectedValue
}
beforeEach(function () {
jasmine.addMatchers({
toHaveClass: function () {
return {
compare: function (actual, className) {
return { pass: $(actual).hasClass(className) }
}
}
},
toHaveCss: function () {
return {
compare: function (actual, css) {
for (var prop in css){
var value = css[prop]
// see issue #147 on gh
;if (value === 'auto' && $(actual).get(0).style[prop] === 'auto') continue
if ($(actual).css(prop) !== value) return { pass: false }
}
return { pass: true }
}
}
},
toBeVisible: function () {
return {
compare: function (actual) {
return { pass: $(actual).is(':visible') }
}
}
},
toBeHidden: function () {
return {
compare: function (actual) {
return { pass: $(actual).is(':hidden') }
}
}
},
toBeSelected: function () {
return {
compare: function (actual) {
return { pass: $(actual).is(':selected') }
}
}
},
toBeChecked: function () {
return {
compare: function (actual) {
return { pass: $(actual).is(':checked') }
}
}
},
toBeEmpty: function () {
return {
compare: function (actual) {
return { pass: $(actual).is(':empty') }
}
}
},
toBeInDOM: function () {
return {
compare: function (actual) {
return { pass: $.contains(document.documentElement, $(actual)[0]) }
}
}
},
toExist: function () {
return {
compare: function (actual) {
return { pass: $(actual).length }
}
}
},
toHaveLength: function () {
return {
compare: function (actual, length) {
return { pass: $(actual).length === length }
}
}
},
toHaveAttr: function () {
return {
compare: function (actual, attributeName, expectedAttributeValue) {
return { pass: hasProperty($(actual).attr(attributeName), expectedAttributeValue) }
}
}
},
toHaveProp: function () {
return {
compare: function (actual, propertyName, expectedPropertyValue) {
return { pass: hasProperty($(actual).prop(propertyName), expectedPropertyValue) }
}
}
},
toHaveId: function () {
return {
compare: function (actual, id) {
return { pass: $(actual).attr('id') == id }
}
}
},
toHaveHtml: function () {
return {
compare: function (actual, html) {
return { pass: $(actual).html() == jasmine.jQuery.browserTagCaseIndependentHtml(html) }
}
}
},
toContainHtml: function () {
return {
compare: function (actual, html) {
var actualHtml = $(actual).html()
, expectedHtml = jasmine.jQuery.browserTagCaseIndependentHtml(html)
return { pass: (actualHtml.indexOf(expectedHtml) >= 0) }
}
}
},
toHaveText: function () {
return {
compare: function (actual, text) {
var trimmedText = $.trim($(actual).text())
if (text && $.isFunction(text.test)) {
return { pass: text.test(trimmedText) }
} else {
return { pass: trimmedText == text }
}
}
}
},
toContainText: function () {
return {
compare: function (actual, text) {
var trimmedText = $.trim($(actual).text())
if (text && $.isFunction(text.test)) {
return { pass: text.test(trimmedText) }
} else {
return { pass: trimmedText.indexOf(text) != -1 }
}
}
}
},
toHaveValue: function () {
return {
compare: function (actual, value) {
return { pass: $(actual).val() === value }
}
}
},
toHaveData: function () {
return {
compare: function (actual, key, expectedValue) {
return { pass: hasProperty($(actual).data(key), expectedValue) }
}
}
},
toContainElement: function () {
return {
compare: function (actual, selector) {
if (window.debug) debugger
return { pass: $(actual).find(selector).length }
}
}
},
toBeMatchedBy: function () {
return {
compare: function (actual, selector) {
return { pass: $(actual).filter(selector).length }
}
}
},
toBeDisabled: function () {
return {
compare: function (actual, selector) {
return { pass: $(actual).is(':disabled') }
}
}
},
toBeFocused: function (selector) {
return {
compare: function (actual, selector) {
return { pass: $(actual)[0] === $(actual)[0].ownerDocument.activeElement }
}
}
},
toHandle: function () {
return {
compare: function (actual, event) {
var events = $._data($(actual).get(0), "events")
if (!events || !event || typeof event !== "string") {
return { pass: false }
}
var namespaces = event.split(".")
, eventType = namespaces.shift()
, sortedNamespaces = namespaces.slice(0).sort()
, namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)")
if (events[eventType] && namespaces.length) {
for (var i = 0; i < events[eventType].length; i++) {
var namespace = events[eventType][i].namespace
if (namespaceRegExp.test(namespace))
return { pass: true }
}
} else {
return { pass: (events[eventType] && events[eventType].length > 0) }
}
return { pass: false }
}
}
},
toHandleWith: function () {
return {
compare: function (actual, eventName, eventHandler) {
var normalizedEventName = eventName.split('.')[0]
, stack = $._data($(actual).get(0), "events")[normalizedEventName]
for (var i = 0; i < stack.length; i++) {
if (stack[i].handler == eventHandler) return { pass: true }
}
return { pass: false }
}
}
},
toHaveBeenTriggeredOn: function () {
return {
compare: function (actual, selector) {
var result = { pass: jasmine.jQuery.events.wasTriggered(selector, actual) }
result.message = result.pass ?
"Expected event " + $(actual) + " not to have been triggered on " + selector :
"Expected event " + $(actual) + " to have been triggered on " + selector
return result;
}
}
},
toHaveBeenTriggered: function (){
return {
compare: function (actual) {
var eventName = actual.eventName
, selector = actual.selector
, result = { pass: jasmine.jQuery.events.wasTriggered(selector, eventName) }
result.message = result.pass ?
"Expected event " + eventName + " not to have been triggered on " + selector :
"Expected event " + eventName + " to have been triggered on " + selector
return result
}
}
},
toHaveBeenTriggeredOnAndWith: function (j$, customEqualityTesters) {
return {
compare: function (actual, selector, expectedArgs) {
var wasTriggered = jasmine.jQuery.events.wasTriggered(selector, actual)
, result = { pass: wasTriggered && jasmine.jQuery.events.wasTriggeredWith(selector, actual, expectedArgs, j$, customEqualityTesters) }
if (wasTriggered) {
var actualArgs = jasmine.jQuery.events.args(selector, actual, expectedArgs)[1]
result.message = result.pass ?
"Expected event " + actual + " not to have been triggered with " + jasmine.pp(expectedArgs) + " but it was triggered with " + jasmine.pp(actualArgs) :
"Expected event " + actual + " to have been triggered with " + jasmine.pp(expectedArgs) + " but it was triggered with " + jasmine.pp(actualArgs)
} else {
// todo check on this
result.message = result.pass ?
"Expected event " + actual + " not to have been triggered on " + selector :
"Expected event " + actual + " to have been triggered on " + selector
}
return result
}
}
},
toHaveBeenPreventedOn: function () {
return {
compare: function (actual, selector) {
var result = { pass: jasmine.jQuery.events.wasPrevented(selector, actual) }
result.message = result.pass ?
"Expected event " + actual + " not to have been prevented on " + selector :
"Expected event " + actual + " to have been prevented on " + selector
return result
}
}
},
toHaveBeenPrevented: function () {
return {
compare: function (actual) {
var eventName = actual.eventName
, selector = actual.selector
, result = { pass: jasmine.jQuery.events.wasPrevented(selector, eventName) }
result.message = result.pass ?
"Expected event " + eventName + " not to have been prevented on " + selector :
"Expected event " + eventName + " to have been prevented on " + selector
return result
}
}
},
toHaveBeenStoppedOn: function () {
return {
compare: function (actual, selector) {
var result = { pass: jasmine.jQuery.events.wasStopped(selector, actual) }
result.message = result.pass ?
"Expected event " + actual + " not to have been stopped on " + selector :
"Expected event " + actual + " to have been stopped on " + selector
return result;
}
}
},
toHaveBeenStopped: function () {
return {
compare: function (actual) {
var eventName = actual.eventName
, selector = actual.selector
, result = { pass: jasmine.jQuery.events.wasStopped(selector, eventName) }
result.message = result.pass ?
"Expected event " + eventName + " not to have been stopped on " + selector :
"Expected event " + eventName + " to have been stopped on " + selector
return result
}
}
}
})
jasmine.getEnv().addCustomEqualityTester(function(a, b) {
if (a && b) {
if (a instanceof $ || jasmine.isDomNode(a)) {
var $a = $(a)
if (b instanceof $)
return $a.length == b.length && a.is(b)
return $a.is(b);
}
if (b instanceof $ || jasmine.isDomNode(b)) {
var $b = $(b)
if (a instanceof jQuery)
return a.length == $b.length && $b.is(a)
return $(b).is(a);
}
}
})
jasmine.getEnv().addCustomEqualityTester(function (a, b) {
if (a instanceof jQuery && b instanceof jQuery && a.size() == b.size())
return a.is(b)
})
})
afterEach(function () {
jasmine.getFixtures().cleanUp()
jasmine.getStyleFixtures().cleanUp()
jasmine.jQuery.events.cleanUp()
})
window.readFixtures = function () {
return jasmine.getFixtures().proxyCallTo_('read', arguments)
}
window.preloadFixtures = function () {
jasmine.getFixtures().proxyCallTo_('preload', arguments)
}
window.loadFixtures = function () {
jasmine.getFixtures().proxyCallTo_('load', arguments)
}
window.appendLoadFixtures = function () {
jasmine.getFixtures().proxyCallTo_('appendLoad', arguments)
}
window.setFixtures = function (html) {
return jasmine.getFixtures().proxyCallTo_('set', arguments)
}
window.appendSetFixtures = function () {
jasmine.getFixtures().proxyCallTo_('appendSet', arguments)
}
window.sandbox = function (attributes) {
return jasmine.getFixtures().sandbox(attributes)
}
window.spyOnEvent = function (selector, eventName) {
return jasmine.jQuery.events.spyOn(selector, eventName)
}
window.preloadStyleFixtures = function () {
jasmine.getStyleFixtures().proxyCallTo_('preload', arguments)
}
window.loadStyleFixtures = function () {
jasmine.getStyleFixtures().proxyCallTo_('load', arguments)
}
window.appendLoadStyleFixtures = function () {
jasmine.getStyleFixtures().proxyCallTo_('appendLoad', arguments)
}
window.setStyleFixtures = function (html) {
jasmine.getStyleFixtures().proxyCallTo_('set', arguments)
}
window.appendSetStyleFixtures = function (html) {
jasmine.getStyleFixtures().proxyCallTo_('appendSet', arguments)
}
window.loadJSONFixtures = function () {
return jasmine.getJSONFixtures().proxyCallTo_('load', arguments)
}
window.getJSONFixture = function (url) {
return jasmine.getJSONFixtures().proxyCallTo_('read', arguments)[url]
}
}(window, window.jasmine, window.jQuery);

File diff suppressed because it is too large Load diff

View file

@ -1,244 +0,0 @@
(function() {
describe('WOW', function() {
var timeout, winHeight;
window.console = {
warn: function() {}
};
timeout = 100;
winHeight = 300;
describe('smoke test', function() {
it('exists', function() {
return expect(WOW).toBeDefined();
});
return it("has an 'init' method", function() {
return expect(new WOW().init).toBeDefined();
});
});
describe('simple test environment', function() {
beforeEach(function() {
return loadFixtures('simple.html');
});
it('emulates window height', function() {
return expect(document.documentElement.clientHeight).toBe(winHeight);
});
return it('has boxes set up for testing', function() {
var boxCount, boxHeight, offset, style;
boxHeight = 200;
boxCount = $('#simple').children().length;
expect($('#simple').height()).toBe(boxHeight * boxCount);
expect($('#simple-1').height()).toBe(boxHeight);
expect($('#simple-2').height()).toBe(boxHeight);
expect($('#simple-3').height()).toBe(boxHeight);
expect($('#simple-4').height()).toBe(boxHeight);
expect($('#simple-5').height()).toBe(boxHeight);
offset = $('#simple').offset().top;
expect($('#simple-1').offset().top).toBe(offset + boxHeight * 0);
expect($('#simple-2').offset().top).toBe(offset + boxHeight * 1);
expect($('#simple-3').offset().top).toBe(offset + boxHeight * 2);
expect($('#simple-4').offset().top).toBe(offset + boxHeight * 3);
expect($('#simple-5').offset().top).toBe(offset + boxHeight * 4);
style = $('#simple-5')[0].style;
expect(style.background).toBe('yellow');
return expect(style.color).toBe('red');
});
});
describe('library behaviour', function() {
var wow;
wow = null;
beforeEach(function(done) {
loadFixtures('simple.html');
(wow = new WOW).init();
return setTimeout(function() {
return done();
}, timeout);
});
it('animates elements that are fully visible on the page', function() {
expect($('#simple-1')).toHaveClass('animated');
return expect($('#simple-1').css('visibility')).toBe('visible');
});
it("does not touch elements that don't have the marker class", function() {
expect($('#simple-2')).not.toHaveClass('animated');
return expect($('#simple-2').css('visibility')).toBe('visible');
});
it('does not animate elements not yet visible on the page', function() {
expect($('#simple-3')).not.toHaveClass('animated');
expect($('#simple-3').css('visibility')).not.toBe('visible');
expect($('#simple-4')).not.toHaveClass('animated');
return expect($('#simple-4').css('visibility')).not.toBe('visible');
});
it('animates elements after scrolling down and they become visible', function(done) {
window.scrollTo(0, $('#simple-3').offset().top - winHeight + 150);
return setTimeout(function() {
expect($('#simple-3')).toHaveClass('animated');
expect($('#simple-3').css('visibility')).toBe('visible');
expect($('#simple-4')).not.toHaveClass('animated');
expect($('#simple-4').css('visibility')).not.toBe('visible');
window.scrollTo(0, $('#simple-4').offset().top - winHeight + 150);
return setTimeout(function() {
expect($('#simple-4')).toHaveClass('animated');
expect($('#simple-4').css('visibility')).toBe('visible');
return done();
}, timeout);
}, timeout);
});
it('does not tamper with the style attribute', function(done) {
window.scrollTo(0, $('#simple-5').offset().top - winHeight + 150);
return setTimeout(function() {
expect($('#simple-5')).toHaveClass('animated');
expect($('#simple-5').css('visibility')).toBe('visible');
expect($('#simple-5')[0].style.background).toBe('yellow');
expect($('#simple-5')[0].style.color).toBe('red');
return done();
}, timeout);
});
it('works with asynchronously loaded content', function(done) {
$('#simple').append($('<div/>', {
id: 'simple-6',
"class": 'wow'
}));
wow.sync();
window.scrollTo(0, $('#simple-6').offset().top - winHeight + 150);
return setTimeout(function() {
expect($('#simple-6')).toHaveClass('animated');
expect($('#simple-6').css('visibility')).toBe('visible');
return done();
}, timeout);
});
return it('works with asynchronously loaded nested content', function(done) {
$('#simple').append($('<div/>')).children().first().append($('<div/>', {
id: 'simple-7',
"class": 'wow'
}));
wow.sync();
window.scrollTo(0, $('#simple-7').offset().top - winHeight + 150);
return setTimeout(function() {
expect($('#simple-7')).toHaveClass('animated');
expect($('#simple-7').css('visibility')).toBe('visible');
return done();
}, timeout);
});
});
describe('custom test environment', function() {
beforeEach(function() {
return loadFixtures('custom.html');
});
it('emulates window height', function() {
return expect(document.documentElement.clientHeight).toBe(winHeight);
});
return it('has boxes set up for testing', function() {
var offset;
expect($('#custom').height()).toBe(800);
expect($('#custom-1').height()).toBe(200);
expect($('#custom-2').height()).toBe(200);
expect($('#custom-3').height()).toBe(200);
expect($('#custom-4').height()).toBe(200);
offset = $('#custom').offset().top;
expect($('#custom-1').offset().top).toBe(offset + 200 * 0);
expect($('#custom-2').offset().top).toBe(offset + 200 * 1);
expect($('#custom-3').offset().top).toBe(offset + 200 * 2);
return expect($('#custom-4').offset().top).toBe(offset + 200 * 3);
});
});
return describe('library behaviour with custom settings', function() {
var called;
called = false;
beforeEach(function(done) {
called = false;
loadFixtures('custom.html');
new WOW({
boxClass: 'block',
animateClass: 'fancy',
offset: 10,
callback: function() {
return called = true;
}
}).init();
$('.block').on('block', function() {
return $(this).addClass('triggered');
});
return setTimeout(function() {
return done();
}, timeout);
});
it("creates two instances of the WOW.js with different configs", function() {
var wow1, wow2;
wow1 = new WOW({
boxClass: 'block1',
animateClass: 'fancy1',
offset: 10
});
wow2 = new WOW({
boxClass: 'block2',
animateClass: 'fancy2',
offset: 20
});
expect(wow1.config.boxClass).toBe("block1");
expect(wow1.config.animateClass).toBe("fancy1");
return expect(wow1.config.offset).toBe(10);
});
it("does not touch elements that don't have the marker class", function(done) {
window.scrollTo(0, $('#custom-1').offset().top - winHeight + 15);
return setTimeout(function() {
expect($('#custom-1')).not.toHaveClass('fancy');
return done();
}, timeout);
});
it("animates elements that are partially visible on the page based on the 'offset' config", function(done) {
return setTimeout(function() {
window.scrollTo(0, $('#custom-2').offset().top - winHeight + 5);
expect($('#custom-2')).not.toHaveClass('fancy');
window.scrollTo(0, $('#custom-2').offset().top - winHeight + 15);
return setTimeout(function() {
expect($('#custom-2')).toHaveClass('fancy');
expect($('#custom-2').css('visibility')).toBe('visible');
return done();
}, timeout);
}, timeout);
});
it('does not animate elements not yet visible on the page', function() {
expect($('#custom-3')).not.toHaveClass('fancy');
return expect($('#custom-4')).not.toHaveClass('fancy');
});
it('animates elements after scrolling down and they become visible', function(done) {
window.scrollTo(0, $('#custom-3').offset().top - winHeight + 150);
return setTimeout(function() {
expect($('#custom-3')).toHaveClass('fancy');
expect($('#custom-3').css('visibility')).toBe('visible');
expect($('#custom-3')[0].style.webkitAnimationIterationCount).toBe('2');
expect($('#custom-4')).not.toHaveClass('fancy');
window.scrollTo(0, $('#custom-4').offset().top - winHeight + 150);
return setTimeout(function() {
expect($('#custom-4')).toHaveClass('fancy');
expect($('#custom-4').css('visibility')).toBe('visible');
expect($('#custom-4')[0].style.webkitAnimationIterationCount).toBe('infinite');
expect($('#custom-4')[0].style.webkitAnimationDuration).toBe('2s');
expect($('#custom-4')[0].style.webkitAnimationDelay).toBe('1s');
return done();
}, timeout);
}, timeout);
});
it("fires the callback", function(done) {
called = false;
window.scrollTo(0, $('#custom-3').offset().top - winHeight + 150);
return setTimeout(function() {
expect(called).toBe(true);
return done();
}, timeout);
});
return it('fires the callback on the visible element', function(done) {
window.scrollTo(0, $('#custom-3').offset().top - winHeight + 150);
return setTimeout(function() {
expect($('#custom-3')).toHaveClass('triggered');
expect($('#custom-4')).not.toHaveClass('triggered');
window.scrollTo(0, $('#custom-4').offset().top - winHeight + 150);
return setTimeout(function() {
expect($('#custom-3')).toHaveClass('triggered');
expect($('#custom-4')).toHaveClass('triggered');
return done();
}, timeout);
}, timeout);
});
});
});
}).call(this);

View file

@ -1,15 +0,0 @@
{
"parser": "babel-eslint",
"extends": "airbnb-base",
"rules": {
"arrow-parens": [2, "as-needed"],
"curly": [2, "all"],
"no-param-reassign": 0,
"no-restricted-syntax": [
2,
"DebuggerStatement",
"LabeledStatement",
"WithStatement"
]
}
}

412
node_modules/wow.js/src/WOW.js generated vendored
View file

@ -1,412 +0,0 @@
function isIn(needle, haystack) {
return haystack.indexOf(needle) >= 0;
}
function extend(custom, defaults) {
for (const key in defaults) {
if (custom[key] == null) {
const value = defaults[key];
custom[key] = value;
}
}
return custom;
}
function isMobile(agent) {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent);
}
function createEvent(event, bubble = false, cancel = false, detail = null) {
let customEvent;
if (document.createEvent != null) { // W3C DOM
customEvent = document.createEvent('CustomEvent');
customEvent.initCustomEvent(event, bubble, cancel, detail);
} else if (document.createEventObject != null) { // IE DOM < 9
customEvent = document.createEventObject();
customEvent.eventType = event;
} else {
customEvent.eventName = event;
}
return customEvent;
}
function emitEvent(elem, event) {
if (elem.dispatchEvent != null) { // W3C DOM
elem.dispatchEvent(event);
} else if (event in (elem != null)) {
elem[event]();
} else if (`on${event}` in (elem != null)) {
elem[`on${event}`]();
}
}
function addEvent(elem, event, fn) {
if (elem.addEventListener != null) { // W3C DOM
elem.addEventListener(event, fn, false);
} else if (elem.attachEvent != null) { // IE DOM
elem.attachEvent(`on${event}`, fn);
} else { // fallback
elem[event] = fn;
}
}
function removeEvent(elem, event, fn) {
if (elem.removeEventListener != null) { // W3C DOM
elem.removeEventListener(event, fn, false);
} else if (elem.detachEvent != null) { // IE DOM
elem.detachEvent(`on${event}`, fn);
} else { // fallback
delete elem[event];
}
}
function getInnerHeight() {
if ('innerHeight' in window) {
return window.innerHeight;
}
return document.documentElement.clientHeight;
}
// Minimalistic WeakMap shim, just in case.
const WeakMap = window.WeakMap || window.MozWeakMap ||
class WeakMap {
constructor() {
this.keys = [];
this.values = [];
}
get(key) {
for (let i = 0; i < this.keys.length; i++) {
const item = this.keys[i];
if (item === key) {
return this.values[i];
}
}
return undefined;
}
set(key, value) {
for (let i = 0; i < this.keys.length; i++) {
const item = this.keys[i];
if (item === key) {
this.values[i] = value;
return this;
}
}
this.keys.push(key);
this.values.push(value);
return this;
}
};
// Dummy MutationObserver, to avoid raising exceptions.
const MutationObserver =
window.MutationObserver || window.WebkitMutationObserver ||
window.MozMutationObserver ||
class MutationObserver {
constructor() {
if (typeof console !== 'undefined' && console !== null) {
console.warn('MutationObserver is not supported by your browser.');
console.warn(
'WOW.js cannot detect dom mutations, please call .sync() after loading new content.'
);
}
}
static notSupported = true;
observe() {}
};
// getComputedStyle shim, from http://stackoverflow.com/a/21797294
const getComputedStyle = window.getComputedStyle ||
function getComputedStyle(el) {
const getComputedStyleRX = /(\-([a-z]){1})/g;
return {
getPropertyValue(prop) {
if (prop === 'float') { prop = 'styleFloat'; }
if (getComputedStyleRX.test(prop)) {
prop.replace(getComputedStyleRX, (_, _char) => _char.toUpperCase());
}
const { currentStyle } = el;
return (currentStyle != null ? currentStyle[prop] : void 0) || null;
},
};
};
export default class WOW {
defaults = {
boxClass: 'wow',
animateClass: 'animated',
offset: 0,
mobile: true,
live: true,
callback: null,
scrollContainer: null,
};
constructor(options = {}) {
this.start = this.start.bind(this);
this.resetAnimation = this.resetAnimation.bind(this);
this.scrollHandler = this.scrollHandler.bind(this);
this.scrollCallback = this.scrollCallback.bind(this);
this.scrolled = true;
this.config = extend(options, this.defaults);
if (options.scrollContainer != null) {
this.config.scrollContainer = document.querySelector(options.scrollContainer);
}
// Map of elements to animation names:
this.animationNameCache = new WeakMap();
this.wowEvent = createEvent(this.config.boxClass);
}
init() {
this.element = window.document.documentElement;
if (isIn(document.readyState, ['interactive', 'complete'])) {
this.start();
} else {
addEvent(document, 'DOMContentLoaded', this.start);
}
this.finished = [];
}
start() {
this.stopped = false;
this.boxes = [].slice.call(this.element.querySelectorAll(`.${this.config.boxClass}`));
this.all = this.boxes.slice(0);
if (this.boxes.length) {
if (this.disabled()) {
this.resetStyle();
} else {
for (let i = 0; i < this.boxes.length; i++) {
const box = this.boxes[i];
this.applyStyle(box, true);
}
}
}
if (!this.disabled()) {
addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
addEvent(window, 'resize', this.scrollHandler);
this.interval = setInterval(this.scrollCallback, 50);
}
if (this.config.live) {
const mut = new MutationObserver(records => {
for (let j = 0; j < records.length; j++) {
const record = records[j];
for (let k = 0; k < record.addedNodes.length; k++) {
const node = record.addedNodes[k];
this.doSync(node);
}
}
return undefined;
});
mut.observe(document.body, {
childList: true,
subtree: true,
});
}
}
// unbind the scroll event
stop() {
this.stopped = true;
removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
removeEvent(window, 'resize', this.scrollHandler);
if (this.interval != null) {
clearInterval(this.interval);
}
}
sync() {
if (MutationObserver.notSupported) {
this.doSync(this.element);
}
}
doSync(element) {
if (typeof element === 'undefined' || element === null) { ({ element } = this); }
if (element.nodeType !== 1) { return; }
element = element.parentNode || element;
const iterable = element.querySelectorAll(`.${this.config.boxClass}`);
for (let i = 0; i < iterable.length; i++) {
const box = iterable[i];
if (!isIn(box, this.all)) {
this.boxes.push(box);
this.all.push(box);
if (this.stopped || this.disabled()) {
this.resetStyle();
} else {
this.applyStyle(box, true);
}
this.scrolled = true;
}
}
}
// show box element
show(box) {
this.applyStyle(box);
box.className = `${box.className} ${this.config.animateClass}`;
if (this.config.callback != null) { this.config.callback(box); }
emitEvent(box, this.wowEvent);
addEvent(box, 'animationend', this.resetAnimation);
addEvent(box, 'oanimationend', this.resetAnimation);
addEvent(box, 'webkitAnimationEnd', this.resetAnimation);
addEvent(box, 'MSAnimationEnd', this.resetAnimation);
return box;
}
applyStyle(box, hidden) {
const duration = box.getAttribute('data-wow-duration');
const delay = box.getAttribute('data-wow-delay');
const iteration = box.getAttribute('data-wow-iteration');
return this.animate(() => this.customStyle(box, hidden, duration, delay, iteration));
}
animate = (function animateFactory() {
if ('requestAnimationFrame' in window) {
return callback => window.requestAnimationFrame(callback);
}
return callback => callback();
}());
resetStyle() {
for (let i = 0; i < this.boxes.length; i++) {
const box = this.boxes[i];
box.style.visibility = 'visible';
}
return undefined;
}
resetAnimation(event) {
if (event.type.toLowerCase().indexOf('animationend') >= 0) {
const target = event.target || event.srcElement;
target.className = target.className.replace(this.config.animateClass, '').trim();
}
}
customStyle(box, hidden, duration, delay, iteration) {
if (hidden) { this.cacheAnimationName(box); }
box.style.visibility = hidden ? 'hidden' : 'visible';
if (duration) { this.vendorSet(box.style, { animationDuration: duration }); }
if (delay) { this.vendorSet(box.style, { animationDelay: delay }); }
if (iteration) { this.vendorSet(box.style, { animationIterationCount: iteration }); }
this.vendorSet(box.style, { animationName: hidden ? 'none' : this.cachedAnimationName(box) });
return box;
}
vendors = ['moz', 'webkit'];
vendorSet(elem, properties) {
for (const name in properties) {
if (properties.hasOwnProperty(name)) {
const value = properties[name];
elem[`${name}`] = value;
for (let i = 0; i < this.vendors.length; i++) {
const vendor = this.vendors[i];
elem[`${vendor}${name.charAt(0).toUpperCase()}${name.substr(1)}`] = value;
}
}
}
}
vendorCSS(elem, property) {
const style = getComputedStyle(elem);
let result = style.getPropertyCSSValue(property);
for (let i = 0; i < this.vendors.length; i++) {
const vendor = this.vendors[i];
result = result || style.getPropertyCSSValue(`-${vendor}-${property}`);
}
return result;
}
animationName(box) {
let aName;
try {
aName = this.vendorCSS(box, 'animation-name').cssText;
} catch (error) { // Opera, fall back to plain property value
aName = getComputedStyle(box).getPropertyValue('animation-name');
}
if (aName === 'none') {
return ''; // SVG/Firefox, unable to get animation name?
}
return aName;
}
cacheAnimationName(box) {
// https://bugzilla.mozilla.org/show_bug.cgi?id=921834
// box.dataset is not supported for SVG elements in Firefox
return this.animationNameCache.set(box, this.animationName(box));
}
cachedAnimationName(box) {
return this.animationNameCache.get(box);
}
// fast window.scroll callback
scrollHandler() {
this.scrolled = true;
}
scrollCallback() {
if (this.scrolled) {
this.scrolled = false;
const results = [];
for (let i = 0; i < this.boxes.length; i++) {
const box = this.boxes[i];
if (box) {
if (this.isVisible(box)) {
this.show(box);
continue;
}
results.push(box);
}
}
this.boxes = results;
if (!this.boxes.length && !this.config.live) {
this.stop();
}
}
}
// Calculate element offset top
offsetTop(element) {
// SVG elements don't have an offsetTop in Firefox.
// This will use their nearest parent that has an offsetTop.
// Also, using ('offsetTop' of element) causes an exception in Firefox.
while (element.offsetTop === undefined) {
element = element.parentNode;
}
let top = element.offsetTop;
while (element.offsetParent) {
element = element.offsetParent;
top += element.offsetTop;
}
return top;
}
// check if box is visible
isVisible(box) {
const offset = box.getAttribute('data-wow-offset') || this.config.offset;
const viewTop = (
this.config.scrollContainer && this.config.scrollContainer.scrollTop
) || window.pageYOffset;
const viewBottom =
viewTop + Math.min(this.element.clientHeight, getInnerHeight()) - offset;
const top = this.offsetTop(box);
const bottom = top + box.clientHeight;
return top <= viewBottom && bottom >= viewTop;
}
disabled() {
return !this.config.mobile && isMobile(navigator.userAgent);
}
}

54
package-lock.json generated
View file

@ -5,7 +5,7 @@
"packages": { "packages": {
"": { "": {
"dependencies": { "dependencies": {
"@silvermine/videojs-chromecast": "^1.3.4", "@silvermine/videojs-chromecast": "^1.4.1",
"animate.css": "^4.1.1", "animate.css": "^4.1.1",
"bootstrap": "^5.3.0", "bootstrap": "^5.3.0",
"chart.js": "^4.3.0", "chart.js": "^4.3.0",
@ -38,8 +38,7 @@
"videojs-font": "^4.1.0", "videojs-font": "^4.1.0",
"videojs-ima": "^2.1.0", "videojs-ima": "^2.1.0",
"videojs-landscape-fullscreen": "^11.1111.0", "videojs-landscape-fullscreen": "^11.1111.0",
"videojs-seek-buttons": "^4.0.3", "videojs-seek-buttons": "^4.0.3"
"wow.js": "^1.2.2"
} }
}, },
"node_modules/@babel/runtime": { "node_modules/@babel/runtime": {
@ -190,14 +189,14 @@
} }
}, },
"node_modules/@silvermine/videojs-chromecast": { "node_modules/@silvermine/videojs-chromecast": {
"version": "1.3.4", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/@silvermine/videojs-chromecast/-/videojs-chromecast-1.3.4.tgz", "resolved": "https://registry.npmjs.org/@silvermine/videojs-chromecast/-/videojs-chromecast-1.4.1.tgz",
"integrity": "sha512-4VC/WEXb18Iex2Tf679RRUR+oSJhNq7+SyMGIsawFglET0IebXnwYKtO6x4t+dVd3be/iN1p5Ny6/iUnny4ljA==", "integrity": "sha512-tXeikkWoNC3WIl2WSkIag1CLMbGsgn+26LM4LoB4qx0TQ8mkg7pgpldCTkvXxLVaDluQ/uEm2uxrgrMmjOc6sw==",
"dependencies": { "dependencies": {
"webcomponents.js": "git+https://git@github.com/webcomponents/webcomponentsjs.git#v0.7.24" "webcomponents.js": "git+https://git@github.com/webcomponents/webcomponentsjs.git#v0.7.24"
}, },
"peerDependencies": { "peerDependencies": {
"video.js": ">= 6 < 8" "video.js": ">= 6 < 9"
} }
}, },
"node_modules/@videojs/http-streaming": { "node_modules/@videojs/http-streaming": {
@ -1954,9 +1953,9 @@
} }
}, },
"node_modules/videojs-ima/node_modules/@videojs/http-streaming/node_modules/video.js": { "node_modules/videojs-ima/node_modules/@videojs/http-streaming/node_modules/video.js": {
"version": "7.21.3", "version": "7.21.4",
"resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.3.tgz", "resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.4.tgz",
"integrity": "sha512-fIboXbSDCT3P8eVzIEC3hnLDKC/y+6QftcHdFGUVGn5a7qmH62Mh0Bt/SrBAgdmKDQM1qdZXfXAxPg5+IaiIXQ==", "integrity": "sha512-R5e57M/5uqxQMQpFpybNbd8GtiRwFJPqkHjrhv0QTJ2tqnesbjETbck5kU5dhFr1FevsJRFhjBG4hAnvRGnXbw==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
"@videojs/http-streaming": "2.16.2", "@videojs/http-streaming": "2.16.2",
@ -2028,9 +2027,9 @@
} }
}, },
"node_modules/videojs-ima/node_modules/videojs-contrib-ads/node_modules/video.js": { "node_modules/videojs-ima/node_modules/videojs-contrib-ads/node_modules/video.js": {
"version": "7.21.3", "version": "7.21.4",
"resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.3.tgz", "resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.4.tgz",
"integrity": "sha512-fIboXbSDCT3P8eVzIEC3hnLDKC/y+6QftcHdFGUVGn5a7qmH62Mh0Bt/SrBAgdmKDQM1qdZXfXAxPg5+IaiIXQ==", "integrity": "sha512-R5e57M/5uqxQMQpFpybNbd8GtiRwFJPqkHjrhv0QTJ2tqnesbjETbck5kU5dhFr1FevsJRFhjBG4hAnvRGnXbw==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
"@videojs/http-streaming": "2.16.2", "@videojs/http-streaming": "2.16.2",
@ -2115,12 +2114,6 @@
"webidl-conversions": "^3.0.0" "webidl-conversions": "^3.0.0"
} }
}, },
"node_modules/wow.js": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/wow.js/-/wow.js-1.2.2.tgz",
"integrity": "sha512-YTW9eiZimHCJDWofsiz2507txaPteUiQD461I/D8533AiRAn3+Y68/1LDuQ3OTgPjagGZLPYKrpoSgjzeQrO6A==",
"deprecated": "deprecated in favour of aos (Animate On Scroll)"
},
"node_modules/wrappy": { "node_modules/wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@ -2301,9 +2294,9 @@
"peer": true "peer": true
}, },
"@silvermine/videojs-chromecast": { "@silvermine/videojs-chromecast": {
"version": "1.3.4", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/@silvermine/videojs-chromecast/-/videojs-chromecast-1.3.4.tgz", "resolved": "https://registry.npmjs.org/@silvermine/videojs-chromecast/-/videojs-chromecast-1.4.1.tgz",
"integrity": "sha512-4VC/WEXb18Iex2Tf679RRUR+oSJhNq7+SyMGIsawFglET0IebXnwYKtO6x4t+dVd3be/iN1p5Ny6/iUnny4ljA==", "integrity": "sha512-tXeikkWoNC3WIl2WSkIag1CLMbGsgn+26LM4LoB4qx0TQ8mkg7pgpldCTkvXxLVaDluQ/uEm2uxrgrMmjOc6sw==",
"requires": { "requires": {
"webcomponents.js": "git+https://git@github.com/webcomponents/webcomponentsjs.git#v0.7.24" "webcomponents.js": "git+https://git@github.com/webcomponents/webcomponentsjs.git#v0.7.24"
} }
@ -3606,9 +3599,9 @@
}, },
"dependencies": { "dependencies": {
"video.js": { "video.js": {
"version": "7.21.3", "version": "7.21.4",
"resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.3.tgz", "resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.4.tgz",
"integrity": "sha512-fIboXbSDCT3P8eVzIEC3hnLDKC/y+6QftcHdFGUVGn5a7qmH62Mh0Bt/SrBAgdmKDQM1qdZXfXAxPg5+IaiIXQ==", "integrity": "sha512-R5e57M/5uqxQMQpFpybNbd8GtiRwFJPqkHjrhv0QTJ2tqnesbjETbck5kU5dhFr1FevsJRFhjBG4hAnvRGnXbw==",
"requires": { "requires": {
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
"@videojs/http-streaming": "2.16.2", "@videojs/http-streaming": "2.16.2",
@ -3668,9 +3661,9 @@
}, },
"dependencies": { "dependencies": {
"video.js": { "video.js": {
"version": "7.21.3", "version": "7.21.4",
"resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.3.tgz", "resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.4.tgz",
"integrity": "sha512-fIboXbSDCT3P8eVzIEC3hnLDKC/y+6QftcHdFGUVGn5a7qmH62Mh0Bt/SrBAgdmKDQM1qdZXfXAxPg5+IaiIXQ==", "integrity": "sha512-R5e57M/5uqxQMQpFpybNbd8GtiRwFJPqkHjrhv0QTJ2tqnesbjETbck5kU5dhFr1FevsJRFhjBG4hAnvRGnXbw==",
"requires": { "requires": {
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
"@videojs/http-streaming": "2.16.2", "@videojs/http-streaming": "2.16.2",
@ -3748,11 +3741,6 @@
"webidl-conversions": "^3.0.0" "webidl-conversions": "^3.0.0"
} }
}, },
"wow.js": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/wow.js/-/wow.js-1.2.2.tgz",
"integrity": "sha512-YTW9eiZimHCJDWofsiz2507txaPteUiQD461I/D8533AiRAn3+Y68/1LDuQ3OTgPjagGZLPYKrpoSgjzeQrO6A=="
},
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",

View file

@ -1,6 +1,6 @@
{ {
"dependencies": { "dependencies": {
"@silvermine/videojs-chromecast": "^1.3.4", "@silvermine/videojs-chromecast": "^1.4.1",
"animate.css": "^4.1.1", "animate.css": "^4.1.1",
"bootstrap": "^5.3.0", "bootstrap": "^5.3.0",
"chart.js": "^4.3.0", "chart.js": "^4.3.0",
@ -33,7 +33,6 @@
"videojs-font": "^4.1.0", "videojs-font": "^4.1.0",
"videojs-ima": "^2.1.0", "videojs-ima": "^2.1.0",
"videojs-landscape-fullscreen": "^11.1111.0", "videojs-landscape-fullscreen": "^11.1111.0",
"videojs-seek-buttons": "^4.0.3", "videojs-seek-buttons": "^4.0.3"
"wow.js": "^1.2.2"
} }
} }