Comparar commits
161 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 97567144ce | |||
| da0389b695 | |||
| dc4096338e | |||
| be4ddbf854 | |||
| c455c9ebcc | |||
| bad5130c8f | |||
| 8dfe0a4d06 | |||
| 047bd8f618 | |||
| d7f840a969 | |||
| 01567428b0 | |||
| 4235a3d8c1 | |||
| 4bb3a23331 | |||
| 7782eda524 | |||
| 92eac13caa | |||
| bcb69a0b23 | |||
| 3fd0c92c95 | |||
| a6718913be | |||
| 1df28ff311 | |||
| dbff62e3f0 | |||
| ef25557577 | |||
| 269f7b15c0 | |||
| adf4e507c1 | |||
| a5bc6884e2 | |||
| e7617bfdd4 | |||
| 27f0f789e0 | |||
| 3e5ef19212 | |||
| d96e008978 | |||
| 227700a236 | |||
| 923ce038f7 | |||
| 16eea0a1df | |||
| f4704ee74f | |||
| 8c9a4cc434 | |||
| f98012a471 | |||
| 65833f5231 | |||
| e8722ff522 | |||
| c1029eab16 | |||
| 46605739e2 | |||
| 31918fc46d | |||
| 3bafdeef51 | |||
| 2473d5bf7a | |||
| 4242fe3857 | |||
| da45dad831 | |||
| 2fca84435d | |||
| d8f721abf5 | |||
| 9d258742c5 | |||
| 35d7258973 | |||
| 4e0c2b366d | |||
| aa8d50b219 | |||
| 95c29e684f | |||
| c7e35e51de | |||
| d784f9d0d9 | |||
| 6a097c0236 | |||
| efe25c0b13 | |||
| 06e141df58 | |||
| 848cfd6620 | |||
| d3af3e0e07 | |||
| af50b8ee29 | |||
| aeb4aa3ada | |||
| 825de43819 | |||
| 066438670f | |||
| e8d36e0fab | |||
| a9ad77aa00 | |||
| b3b42e3822 | |||
| 88403221a9 | |||
| 2079af7320 | |||
| c8bd862e3e | |||
| 74c73969cd | |||
| c286c826db | |||
| 33f388366d | |||
| f363523551 | |||
| e87fe460cc | |||
| 2c12ed98a7 | |||
| 87ee28e6cb | |||
| e39557e790 | |||
| e2a1cac136 | |||
| d21019ad78 | |||
| 94ec725a66 | |||
| 75bd76f55c | |||
| fef6282d55 | |||
| f1d2aef048 | |||
| d1d97bfe9b | |||
| 0a1d4b2645 | |||
| 0c856ce9a4 | |||
| 817253b74f | |||
| f86e073f03 | |||
| 86c3f94c87 | |||
| d48d6cf99d | |||
| 0f2aadcfcd | |||
| 4daf1f173c | |||
| 61eb54afa8 | |||
| 799f1762ff | |||
| 416ee1b2a0 | |||
| 204bb84ecb | |||
| 5381f70d1c | |||
| 252ad3f466 | |||
| 80d7b5014a | |||
| 32e4d4c9d0 | |||
| d289a336b8 | |||
| e35083bc28 | |||
| 4051a9cbee | |||
| 26f6f4b0ea | |||
| cbefd37acf | |||
| 378d6ef482 | |||
| 02155c6b13 | |||
| 7a4c602be0 | |||
| b7cc2a8a4c | |||
| e7b1098563 | |||
| a64a5e27cf | |||
| bdeaae1c92 | |||
| e2b2d14f48 | |||
| 96c274de63 | |||
| 6244c39129 | |||
| e4b269e294 | |||
| f3166ad082 | |||
| 54609dc3f5 | |||
| 2005fe2136 | |||
| efd4822c6b | |||
| d538debb1d | |||
| 48230ea1a1 | |||
| 661cbd1eb0 | |||
| fe2b702e32 | |||
| d47435a18f | |||
| 7c772fbf3e | |||
| 4116d9ec14 | |||
| f155814cd9 | |||
| a0f929dd57 | |||
| cc5e515360 | |||
| 2e26703162 | |||
| 0ad8abfef1 | |||
| 61883ab4e2 | |||
| 0f854c751b | |||
| 5b133823e5 | |||
| 3e19d7621a | |||
| b0a6cf335a | |||
| ed78764379 | |||
| 7f44942c9b | |||
| e9da3350d4 | |||
| c6c49ac580 | |||
| 4b0db76d77 | |||
| 6b28ba268a | |||
| 5146c1fa4a | |||
| b98d719564 | |||
| 7aefee5d7d | |||
| c1e623bed7 | |||
| 333db84510 | |||
| 8f40fa4548 | |||
| 9c282811e1 | |||
| d68f5a93a5 | |||
| 1dd8a15655 | |||
| 3336f1fe02 | |||
| 4fe74d52a9 | |||
| 0d58df8edb | |||
| f135b97ce0 | |||
| 051657334f | |||
| 7be94c3882 | |||
| 4f66e09595 | |||
| 1bb2c7ed57 | |||
| 1e781d14df | |||
| ee9a18d5ac | |||
| ce0c4b12d2 | |||
| 7184cb4b49 |
+2
-1
@@ -38,6 +38,7 @@
|
||||
"start",
|
||||
"stop",
|
||||
"strictEqual",
|
||||
"test"
|
||||
"test",
|
||||
"sinon"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
# Exclude everything but the contents of the dist directory.
|
||||
**/*
|
||||
!dist/**
|
||||
+42
-2
@@ -2,11 +2,51 @@ CHANGELOG
|
||||
=========
|
||||
|
||||
## HEAD (Unreleased)
|
||||
_(none)_
|
||||
* Updated the UI to support live video ([view](https://github.com/videojs/video.js/pull/1121))
|
||||
* The UI now resets after a source change ([view](https://github.com/videojs/video.js/pull/1124))
|
||||
* Now assuming smart CSS defaults for sliders to prevent reflow on player init ([view](https://github.com/videojs/video.js/pull/1122))
|
||||
* Fixed the title element placement in menus [[view](https://github.com/videojs/video.js/pull/1114)]
|
||||
* Fixed title support for menu buttons ([view](https://github.com/videojs/video.js/pull/1128))
|
||||
* Fixed extra mousemove events on Windows caused by certain apps, not users [[view](https://github.com/videojs/video.js/pull/1068)]
|
||||
* Fixed error due to undefined tech when no source is supported [[view](https://github.com/videojs/video.js/pull/1172)]
|
||||
* Fixed the progress bar not finishing when manual timeupdate events are used [[view](https://github.com/videojs/video.js/pull/1173)]
|
||||
* Added a more informative and styled fallback message for non-html5 browsers [[view](https://github.com/videojs/video.js/pull/1181)]
|
||||
* Added the option to provide an array of child components instead of an object [[view](https://github.com/videojs/video.js/pull/1093)]
|
||||
* Fixed casing on webkitRequestFullscreen [[view](https://github.com/videojs/video.js/pull/1101)]
|
||||
* Made tap events on mobile less sensitive to touch moves [[view](https://github.com/videojs/video.js/pull/1111)]
|
||||
* Fixed the default flag for captions/subtitles tracks [[view](https://github.com/videojs/video.js/pull/1153)]
|
||||
* Fixed compilation failures with LESS v1.7.0 and GRUNT v0.4.4 [[view](https://github.com/videojs/video.js/pull/1180)]
|
||||
* Added better error handling across the library [[view](https://github.com/videojs/video.js/pull/1197)]
|
||||
* Updated captions/subtiles file fetching to support cross-origin requests in older IE browsers [[view](https://github.com/videojs/video.js/pull/1095)]
|
||||
* Added support for playback rate switching [[view](https://github.com/videojs/video.js/pull/1132)]
|
||||
|
||||
--------------------
|
||||
|
||||
## 4.5.0 (2014-02-18)
|
||||
## 4.5.2 (2014-04-12)
|
||||
* Updated release versioning to include bower.json and component.json
|
||||
|
||||
## 4.5.1 (2014-03-27)
|
||||
* Fixed a bug from the last release where canPlaySource was no longer exported
|
||||
|
||||
## 4.5.0 (2014-03-27)
|
||||
* Added component(1) support ([view](https://github.com/videojs/video.js/pull/1032))
|
||||
* Captions now move down when controls are hidden ([view](https://github.com/videojs/video.js/pull/1053))
|
||||
* Added the .less source file to the distribution files ([view](https://github.com/videojs/video.js/pull/1056))
|
||||
* Changed src() to return the current selected source ([view](https://github.com/videojs/video.js/pull/968))
|
||||
* Added a grunt task for opening the next issue that needs addressing ([view](https://github.com/videojs/video.js/pull/1059))
|
||||
* Fixed Android 4.0+ devices' check for HLS support ([view](https://github.com/videojs/video.js/pull/1084))
|
||||
|
||||
## 4.4.3 (2014-03-06)
|
||||
* Fixed bugs in IE9 Windows 7N with no Media Player ([view](https://github.com/videojs/video.js/pull/1060))
|
||||
* Fixed a bug with setPoster() in the minified version ([view](https://github.com/videojs/video.js/pull/1062))
|
||||
|
||||
## 4.4.2 (2014-02-24)
|
||||
* Fixed module.exports in minified version ([view](https://github.com/videojs/video.js/pull/1038))
|
||||
|
||||
## 4.4.1 (2014-02-18)
|
||||
* Added .npmignore so dist files wouldn't be ignored in packages
|
||||
|
||||
## 4.4.0 (2014-02-18)
|
||||
* Made the poster updateable after initialization ([view](https://github.com/videojs/video.js/pull/838))
|
||||
* Exported more textTrack functions ([view](https://github.com/videojs/video.js/pull/815))
|
||||
* Moved player ID generation to support video tags with no IDs ([view](https://github.com/videojs/video.js/pull/845))
|
||||
|
||||
+13
-4
@@ -183,15 +183,24 @@ cp sandbox/index.html.example sandbox/index.html
|
||||
open sandbox/index.html
|
||||
```
|
||||
|
||||
> #### NOTE: Testing Flash Locally in Chrome
|
||||
> Chrome 21+ (as of 2013/01/01) doens't run Flash files that are local and loaded into a locally accessed page (file:///).
|
||||
|
||||
### Testing Locally
|
||||
A simple Connect server is available via the Grunt plugin. The commands below will allow you to setup a test sandbox and begin development.
|
||||
|
||||
```bash
|
||||
cp sandbox/index.html.example sandbox/index.html
|
||||
grunt connect
|
||||
open http://localhost:9999/sandbox/index.html
|
||||
```
|
||||
|
||||
> NOTES regarding local testing in Chrome 21+ (as of 2013/01/01)
|
||||
> Flash files that are local and loaded into a locally accessed page (file:///) will NOT run.
|
||||
> To get around this you can do either of the following:
|
||||
>
|
||||
> 1. Do your development and testing using a local HTTP server.
|
||||
> 1. Do your development and testing using a local HTTP server. See Grunt commands above.
|
||||
>
|
||||
> 2. [Disable the version of Flash included with Chrome](http://helpx.adobe.com/flash-player/kb/flash-player-google-chrome.html#How_can_I_run_debugger_or_alternate_versions_of_Flash_Player_in_Google_Chrome) and enable a system-wide version of Flash instead.
|
||||
|
||||
|
||||
Commit and push changes as you go (using git directly). Write thorough descriptions of your changes in your commit messages.
|
||||
|
||||
```bash
|
||||
|
||||
+134
-6
@@ -57,7 +57,7 @@ module.exports = function(grunt) {
|
||||
},
|
||||
tests: {
|
||||
src: ['build/files/combined.video.js', 'build/compiler/goog.base.js', 'src/js/exports.js', 'test/unit/*.js'],
|
||||
externs: ['src/js/player.externs.js', 'src/js/media/flash.externs.js', 'test/qunit-externs.js'],
|
||||
externs: ['src/js/player.externs.js', 'src/js/media/flash.externs.js', 'test/qunit-externs.js', 'test/sinon-externs.js'],
|
||||
dest: 'build/files/test.minified.video.js'
|
||||
}
|
||||
},
|
||||
@@ -71,6 +71,14 @@ module.exports = function(grunt) {
|
||||
files: [ 'src/**/*', 'test/unit/*.js', 'Gruntfile.js' ],
|
||||
tasks: 'dev'
|
||||
},
|
||||
connect: {
|
||||
dev: {
|
||||
options: {
|
||||
port: 9999,
|
||||
keepalive: true
|
||||
}
|
||||
}
|
||||
},
|
||||
copy: {
|
||||
minor: {
|
||||
files: [
|
||||
@@ -154,7 +162,7 @@ module.exports = function(grunt) {
|
||||
var path = require('path');
|
||||
return path.relative('dist', filepath);
|
||||
},
|
||||
compression: 'DEFLATE',
|
||||
// compression: 'DEFLATE',
|
||||
src: ['dist/video-js/**/*'],
|
||||
dest: 'dist/video-js-' + version.full + '.zip'
|
||||
}
|
||||
@@ -171,9 +179,28 @@ module.exports = function(grunt) {
|
||||
}
|
||||
}
|
||||
},
|
||||
bump: {
|
||||
files: ['package.json'],
|
||||
updateConfigs: ['pkg']
|
||||
version: {
|
||||
options: {
|
||||
pkg: 'package.json'
|
||||
},
|
||||
major: {
|
||||
options: {
|
||||
release: 'major'
|
||||
},
|
||||
src: ['package.json', 'bower.json', 'component.json']
|
||||
},
|
||||
minor: {
|
||||
options: {
|
||||
release: 'minor'
|
||||
},
|
||||
src: ['package.json', 'bower.json', 'component.json']
|
||||
},
|
||||
patch: {
|
||||
options: {
|
||||
release: 'patch'
|
||||
},
|
||||
src: ['package.json', 'bower.json', 'component.json']
|
||||
}
|
||||
},
|
||||
tagrelease: {
|
||||
file: 'package.json',
|
||||
@@ -183,6 +210,7 @@ module.exports = function(grunt) {
|
||||
}
|
||||
});
|
||||
|
||||
grunt.loadNpmTasks('grunt-contrib-connect');
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks('grunt-contrib-qunit');
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
@@ -196,7 +224,7 @@ module.exports = function(grunt) {
|
||||
grunt.loadNpmTasks('videojs-doc-generator');
|
||||
grunt.loadNpmTasks('grunt-zip');
|
||||
grunt.loadNpmTasks('grunt-banner');
|
||||
grunt.loadNpmTasks('grunt-bump');
|
||||
grunt.loadNpmTasks('grunt-version');
|
||||
grunt.loadNpmTasks('grunt-tagrelease');
|
||||
grunt.loadNpmTasks('chg');
|
||||
|
||||
@@ -314,6 +342,8 @@ module.exports = function(grunt) {
|
||||
grunt.file.copy('node_modules/videojs-swf/dist/video-js.swf', 'dist/video-js/video-js.swf');
|
||||
grunt.file.copy('build/demo-files/demo.html', 'dist/video-js/demo.html');
|
||||
grunt.file.copy('build/demo-files/demo.captions.vtt', 'dist/video-js/demo.captions.vtt');
|
||||
grunt.file.copy('src/css/video-js.less', 'dist/video-js/video-js.less');
|
||||
|
||||
|
||||
// Copy over font files
|
||||
grunt.file.recurse('build/files/font', function(absdir, rootdir, subdir, filename) {
|
||||
@@ -323,6 +353,11 @@ module.exports = function(grunt) {
|
||||
}
|
||||
});
|
||||
|
||||
// ds_store files sometime find their way in
|
||||
if (grunt.file.exists('dist/video-js/.DS_Store')) {
|
||||
grunt.file['delete']('dist/video-js/.DS_Store');
|
||||
}
|
||||
|
||||
// CDN version uses already hosted font files
|
||||
// Minified version only, doesn't need demo files
|
||||
grunt.file.copy('build/files/minified.video.js', 'dist/cdn/video.js');
|
||||
@@ -343,6 +378,99 @@ module.exports = function(grunt) {
|
||||
grunt.file.write('dist/cdn/video.js', jsmin + cdnjs);
|
||||
});
|
||||
|
||||
grunt.registerTask('cdn-links', 'Update the version of CDN links in docs', function(){
|
||||
var doc = grunt.file.read('docs/guides/setup.md');
|
||||
var version = pkg.version;
|
||||
|
||||
// remove the patch version to point to the latest patch
|
||||
version = version.replace(/(\d\.\d)\.\d/, '$1');
|
||||
|
||||
// update the version in http://vjs.zencdn.net/4.3/video.js
|
||||
doc = doc.replace(/(\/\/vjs\.zencdn\.net\/)\d\.\d(\.\d)?/g, '$1'+version);
|
||||
grunt.file.write('docs/guides/setup.md', doc);
|
||||
});
|
||||
|
||||
grunt.registerTask('dist', 'Creating distribution', ['dist-copy', 'zip:dist']);
|
||||
|
||||
grunt.registerTask('next-issue', 'Get the next issue that needs a response', function(){
|
||||
var done = this.async();
|
||||
var GitHubApi = require('github');
|
||||
var open = require('open');
|
||||
|
||||
var github = new GitHubApi({
|
||||
// required
|
||||
version: '3.0.0',
|
||||
// optional
|
||||
debug: true,
|
||||
protocol: 'https',
|
||||
// host: 'github.my-GHE-enabled-company.com',
|
||||
// pathPrefix: '/api/v3', // for some GHEs
|
||||
timeout: 5000
|
||||
});
|
||||
|
||||
github.issues.repoIssues({
|
||||
// optional:
|
||||
// headers: {
|
||||
// 'cookie': 'blahblah'
|
||||
// },
|
||||
user: 'videojs',
|
||||
repo: 'video.js',
|
||||
sort: 'updated',
|
||||
direction: 'asc',
|
||||
state: 'open',
|
||||
per_page: 100
|
||||
}, function(err, res) {
|
||||
var issueToOpen;
|
||||
var usersWithWrite = ['heff', 'mmcc'];
|
||||
var categoryLabels = ['enhancement', 'bug', 'question', 'feature'];
|
||||
|
||||
console.log('Number of issues: '+res.length);
|
||||
|
||||
// TODO: Find the best way to exclude an issue where a question has been asked of the
|
||||
// issue owner/submitter that hasn't been answerd yet.
|
||||
// A stupid simple first step would be to check for the needs: more info label
|
||||
// and exactly one comment (the question)
|
||||
|
||||
// find issues that need categorizing, no category labels
|
||||
res.some(function(issue){
|
||||
if (issue.labels.length === 0) {
|
||||
return issueToOpen = issue; // break
|
||||
}
|
||||
// look for category labels
|
||||
var categorized = issue.labels.some(function(label){
|
||||
return categoryLabels.indexOf(label.name) >= 0;
|
||||
});
|
||||
if (!categorized) {
|
||||
return issueToOpen = issue; // break
|
||||
}
|
||||
});
|
||||
if (issueToOpen) {
|
||||
open(issueToOpen.html_url);
|
||||
return done();
|
||||
}
|
||||
|
||||
// find issues that need confirming or answering
|
||||
res.some(function(issue){
|
||||
// look for confirmed label
|
||||
var confirmed = issue.labels.some(function(label){
|
||||
return label.name === 'confirmed';
|
||||
});
|
||||
// Was exluding questions, but that might leave a lot of people hanging
|
||||
// var question = issue.labels.some(function(label){
|
||||
// return label.name === 'question';
|
||||
// });
|
||||
if (!confirmed) { // && !question
|
||||
return issueToOpen = issue; // break
|
||||
}
|
||||
});
|
||||
if (issueToOpen) {
|
||||
open(issueToOpen.html_url);
|
||||
return done();
|
||||
}
|
||||
|
||||
grunt.log.writeln('No next issue found');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
+1
-2
@@ -1,4 +1,3 @@
|
||||
|
||||
# [Video.js - HTML5 Video Player](http://videojs.com) [](https://travis-ci.org/zencoder/video-js)
|
||||
|
||||
> Video.js is a web video player built from the ground up for an HTML5 world. It supports HTML5 and Flash video, as well as YouTube and Vimeo (through [plugins](https://github.com/videojs/video.js/wiki/Plugins)). It supports video playback on desktops and mobile devices. This project was started mid 2010, and the player is now used on over 50,000 websites.
|
||||
@@ -15,4 +14,4 @@ To build your own custom version read the section on [contributing code](CONTRIB
|
||||
|
||||
Video.js is licensed under the Apache License, Version 2.0. [View the license file](LICENSE)
|
||||
|
||||
Copyright 2013 Brightcove, Inc.
|
||||
Copyright 2014 Brightcove, Inc.
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"name": "video.js",
|
||||
"description": "An HTML5 and Flash video player with a common API and skin for both.",
|
||||
"version": "4.4.0",
|
||||
"version": "4.5.2",
|
||||
"main": [
|
||||
"dist/video-js/video.js",
|
||||
"dist/video-js/video.js",
|
||||
"dist/video-js/video-js.css"
|
||||
],
|
||||
"keywords": [
|
||||
@@ -13,4 +13,4 @@
|
||||
"video",
|
||||
"player"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
<source src="http://video-js.zencoder.com/oceans-clip.ogv" type='video/ogg' />
|
||||
<track kind="captions" src="demo.captions.vtt" srclang="en" label="English"></track><!-- Tracks need an ending tag thanks to IE9 -->
|
||||
<track kind="subtitles" src="demo.captions.vtt" srclang="en" label="English"></track><!-- Tracks need an ending tag thanks to IE9 -->
|
||||
<p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
|
||||
</video>
|
||||
|
||||
</body>
|
||||
|
||||
@@ -24,8 +24,10 @@ var sourceFiles = [
|
||||
"src/js/button.js",
|
||||
"src/js/slider.js",
|
||||
"src/js/menu.js",
|
||||
"src/js/media-error.js",
|
||||
"src/js/player.js",
|
||||
"src/js/control-bar/control-bar.js",
|
||||
"src/js/control-bar/live-display.js",
|
||||
"src/js/control-bar/play-toggle.js",
|
||||
"src/js/control-bar/time-display.js",
|
||||
"src/js/control-bar/fullscreen-toggle.js",
|
||||
@@ -33,9 +35,11 @@ var sourceFiles = [
|
||||
"src/js/control-bar/volume-control.js",
|
||||
"src/js/control-bar/mute-toggle.js",
|
||||
"src/js/control-bar/volume-menu-button.js",
|
||||
"src/js/control-bar/playback-rate-menu-button.js",
|
||||
"src/js/poster.js",
|
||||
"src/js/loading-spinner.js",
|
||||
"src/js/big-play-button.js",
|
||||
"src/js/error-display.js",
|
||||
"src/js/media/media.js",
|
||||
"src/js/media/html5.js",
|
||||
"src/js/media/flash.js",
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "video.js",
|
||||
"description": "An HTML5 and Flash video player with a common API and skin for both.",
|
||||
"version": "4.5.2",
|
||||
"keywords": [
|
||||
"videojs",
|
||||
"html5",
|
||||
"flash",
|
||||
"video",
|
||||
"player"
|
||||
],
|
||||
"scripts": ["dist/video-js/video.dev.js"],
|
||||
"styles": ["dist/video-js/video-js.css"],
|
||||
"files": ["dist/video-js/video-js.swf"],
|
||||
"fonts": [
|
||||
"dist/video-js/font/vjs.eot",
|
||||
"dist/video-js/font/vjs.svg",
|
||||
"dist/video-js/font/vjs.ttf",
|
||||
"dist/video-js/font/vjs.woff"
|
||||
],
|
||||
"main": "dist/video-js/video.dev.js"
|
||||
}
|
||||
+316
-12
@@ -2,6 +2,9 @@
|
||||
"project": {
|
||||
"owner": "videojs",
|
||||
"name": "video.js",
|
||||
"urls": {
|
||||
"git": "https://github.com/videojs/video.js.git"
|
||||
},
|
||||
"requirements": [
|
||||
{
|
||||
"name": "git",
|
||||
@@ -16,13 +19,302 @@
|
||||
]
|
||||
},
|
||||
|
||||
"install": {
|
||||
"steps": [
|
||||
{
|
||||
"desc": "Get all git branches",
|
||||
"exec": "git fetch origin"
|
||||
},
|
||||
{
|
||||
"desc": "Create the stable branch for patches",
|
||||
"exec": "git checkout -b stable origin/stable"
|
||||
},
|
||||
{
|
||||
"desc": "Add the upstream project as a remote so new changes can be pulled",
|
||||
"exec": "git remote add upstream <%= project.urls.git %>"
|
||||
},
|
||||
{
|
||||
"desc": "Get all upstream branches and changes",
|
||||
"exec": "git fetch upstream"
|
||||
},
|
||||
{
|
||||
"contrib": "update"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"update": {
|
||||
"steps": [
|
||||
{
|
||||
"desc": "Switch to the development branch",
|
||||
"exec": "git checkout master"
|
||||
},
|
||||
{
|
||||
"desc": "Get any changes to master in the main project",
|
||||
"exec": "git pull upstream master"
|
||||
},
|
||||
{
|
||||
"desc": "Switch to the release branch",
|
||||
"exec": "git checkout stable"
|
||||
},
|
||||
{
|
||||
"desc": "Get any changes to stable in the main project",
|
||||
"exec": "git pull upstream stable"
|
||||
},
|
||||
{
|
||||
"desc": "Install dependencies",
|
||||
"exec": "npm install"
|
||||
},
|
||||
{
|
||||
"desc": "Build the distribution",
|
||||
"exec": "grunt"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"test": {
|
||||
"desc": "Run automated tests",
|
||||
"steps": ["grunt test"]
|
||||
"steps": [
|
||||
{
|
||||
"desc": "Run automated tests",
|
||||
"exec": "grunt test"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"contributions": {
|
||||
|
||||
"feature": {
|
||||
"desc": "Create a new feature or general enhancement",
|
||||
"start": {
|
||||
"desc": "Start a new feature",
|
||||
"steps": [
|
||||
{
|
||||
"id": "name",
|
||||
"desc": "Name the feature branch",
|
||||
"prompt": {
|
||||
"type": "text",
|
||||
"message": "name"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Check out the development branch and get any updates",
|
||||
"exec": "git checkout master && git pull upstream master"
|
||||
},
|
||||
{
|
||||
"desc": "Create the patch branch",
|
||||
"exec": "git checkout -b feature/<%= name %>"
|
||||
},
|
||||
{
|
||||
"desc": "Push the branch to the origin repo",
|
||||
"exec": "git push -u origin feature/<%= name %>"
|
||||
}
|
||||
]
|
||||
},
|
||||
"submit": {
|
||||
"desc": "Submit a pull request for a feature when it's finished",
|
||||
"steps": [
|
||||
{
|
||||
"desc": "Test for unadded changes <%= args[0] %>",
|
||||
"exec": "git diff --exit-code",
|
||||
"fail": "Make sure all changes have been added and committed, or stashed, before switching branches"
|
||||
},
|
||||
{
|
||||
"desc": "Test for uncommitted changes",
|
||||
"exec": "git diff --cached --exit-code",
|
||||
"fail": "Make sure all changes have been added and committed, or stashed, before switching branches"
|
||||
},
|
||||
{
|
||||
"contrib": "test"
|
||||
},
|
||||
{
|
||||
"id": "branch",
|
||||
"desc": "Get the current branch",
|
||||
"exec": "git rev-parse --abbrev-ref HEAD"
|
||||
},
|
||||
{
|
||||
"desc": "Are you sure <%= branch %> is the branch you want to submit",
|
||||
"confirm": "confirm"
|
||||
},
|
||||
{
|
||||
"id": "user",
|
||||
"desc": "Which github user or org are you submitting from?",
|
||||
"prompt": {
|
||||
"type": "text",
|
||||
"message": "user"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Open the github pull request page",
|
||||
"open": "https://github.com/videojs/video.js/compare/videojs:master...<%= user %>:<%= branch %>"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
"patch": {
|
||||
"desc": "Create an urgent fix for the latest stable version",
|
||||
"new": {
|
||||
"desc": "Start a new patch",
|
||||
"steps": [
|
||||
{
|
||||
"id": "name",
|
||||
"desc": "Name the patch branch",
|
||||
"prompt": {
|
||||
"type": "text",
|
||||
"message": "name"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Check out the release branch and get any updates",
|
||||
"exec": "git checkout stable && git pull upstream stable"
|
||||
},
|
||||
{
|
||||
"desc": "Create the patch branch",
|
||||
"exec": "git checkout -b patch/<%= name %>"
|
||||
},
|
||||
{
|
||||
"desc": "Push the branch to the origin repo",
|
||||
"exec": "git push -u origin patch/<%= name %>"
|
||||
}
|
||||
]
|
||||
},
|
||||
"submit": {
|
||||
"desc": "Submit a pull request for a patch when it's finished",
|
||||
"steps": [
|
||||
{
|
||||
"contrib": "test"
|
||||
},
|
||||
{
|
||||
"desc": "Test for unadded changes",
|
||||
"exec": "git diff --exit-code",
|
||||
"fail": "Make sure all changes have been added and committed, or stashed, before switching branches"
|
||||
},
|
||||
{
|
||||
"desc": "Test for uncommitted changes",
|
||||
"exec": "git diff --cached --exit-code",
|
||||
"fail": "Make sure all changes have been added and committed, or stashed, before switching branches"
|
||||
},
|
||||
{
|
||||
"id": "branch",
|
||||
"desc": "Get the current branch",
|
||||
"exec": "git rev-parse --abbrev-ref HEAD"
|
||||
},
|
||||
{
|
||||
"desc": "Are you sure <%= branch %> is the branch you want to submit",
|
||||
"confirm": "confirm"
|
||||
},
|
||||
{
|
||||
"id": "user",
|
||||
"desc": "Which github user or org are you submitting from?",
|
||||
"prompt": {
|
||||
"type": "text",
|
||||
"message": "user"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Open the github pull request page",
|
||||
"open": "https://github.com/videojs/video.js/compare/videojs:stable...<%= user %>:<%= branch %>"
|
||||
}
|
||||
]
|
||||
},
|
||||
"delete": {
|
||||
"desc": "Delete the current patch branch",
|
||||
"steps": [
|
||||
{
|
||||
"id": "name",
|
||||
"guide": false,
|
||||
"desc": "Get the current branch name",
|
||||
"exec": "git rev-parse --abbrev-ref HEAD"
|
||||
},
|
||||
{
|
||||
"desc": "Confirm you are deleting the correct branch",
|
||||
"confirm": "Delete branch '<%= name %>'?"
|
||||
},
|
||||
{
|
||||
"desc": "Delete the local copy of the branch",
|
||||
"exec": "git branch -D <%= name %>"
|
||||
},
|
||||
{
|
||||
"desc": "Delete the remote copy of the branch",
|
||||
"exec": "git push origin :<%= name %>"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
"bug": {
|
||||
"desc": "Submit a bug report",
|
||||
"steps": [
|
||||
{
|
||||
"id": "title",
|
||||
"prompt": "Title your bug report"
|
||||
},
|
||||
{
|
||||
"id": "reproduce",
|
||||
"prompt": "What did you do? (steps to reproduce)"
|
||||
},
|
||||
{
|
||||
"id": "expected",
|
||||
"prompt": "What did you expect to happen?"
|
||||
},
|
||||
{
|
||||
"id": "actual",
|
||||
"prompt": "What actually happened?"
|
||||
},
|
||||
{
|
||||
"id": "version",
|
||||
"prompt": "What version of video.js are you using?"
|
||||
},
|
||||
{
|
||||
"id": "plugins",
|
||||
"prompt": "Are you using any video.js plugins?"
|
||||
},
|
||||
{
|
||||
"id": "browsers",
|
||||
"prompt": "What browsers/platforms did you experience this in (e.g. Win 7, IE10; Android 4, Chrome;)?"
|
||||
},
|
||||
{
|
||||
"id": "example",
|
||||
"prompt": "Is there a URL to a live example, or a jsbin (e.g. http://jsbin.com/axedog/9999/edit)?"
|
||||
},
|
||||
{
|
||||
"id": "details",
|
||||
"prompt": "Are there any other details you'd like to provide?"
|
||||
},
|
||||
{
|
||||
"open": "https://github.com/videojs/video.js/issues/new?title=<%= title %>&body=**Steps to reproduce:**\n> <%= reproduce %>\n\n**What was expected:**\n> <%= expected %>\n\n**What Happened:**\n> <%= actual %>\n\n**Video.js Version:**\n> <%= version %>\n\n**Plugins:**\n> <%= plugins %>\n\n**Browsers experienced on:**\n> <%= browsers %>\n\n**Example:**\n> <%= example %>\n\n**Other details:**\n> <%= details %>"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"request": {
|
||||
"desc": "Submit a feature/enhancement request",
|
||||
"steps": [
|
||||
{
|
||||
"id": "title",
|
||||
"prompt": "Title your request"
|
||||
},
|
||||
{
|
||||
"id": "describe",
|
||||
"prompt": "Describe the feature/enhancement (be as detailed as possible so it's clear who, why, and how it would be used)"
|
||||
},
|
||||
{
|
||||
"id": "docs",
|
||||
"prompt": "Is there any existing documentation or related specifications?"
|
||||
},
|
||||
{
|
||||
"id": "examples",
|
||||
"prompt": "Are there any existing examples?"
|
||||
},
|
||||
{
|
||||
"confirm": "You will be redirected to Github where you can submit this issue, OK?"
|
||||
},
|
||||
{
|
||||
"open": "https://github.com/videojs/video.js/issues/new?title=<%= title %>&body=**Describe the feature/enhancement:**\n> <%= describe %>\n\n**Existing docs/specs:**\n> <%= docs %>\n\n**Existing examples:**\n> <%= examples %>"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"release": {
|
||||
"desc": "Create and publish a release",
|
||||
"steps": [
|
||||
@@ -36,12 +328,12 @@
|
||||
},
|
||||
{
|
||||
"desc": "Have the changes been merged into the release branch (stable)?",
|
||||
"prompt": "confirm"
|
||||
"confirm": "confirm"
|
||||
},
|
||||
{
|
||||
"id": "type",
|
||||
"desc": "Provide the release type",
|
||||
"prompt": {
|
||||
"id": "type",
|
||||
"message": "release type",
|
||||
"default": "patch",
|
||||
"type": "text"
|
||||
@@ -56,15 +348,19 @@
|
||||
"exec": "grunt test"
|
||||
},
|
||||
{
|
||||
"desc": "Bump the package version",
|
||||
"exec": "grunt bump-only:<%= type %>"
|
||||
"desc": "Update the changelog with the new release",
|
||||
"exec": "grunt chg-release:<%= type %>"
|
||||
},
|
||||
{
|
||||
"desc": "Bump package versions",
|
||||
"exec": "grunt version:<%= type %>"
|
||||
},
|
||||
{
|
||||
"desc": "Build the release",
|
||||
"exec": "grunt dist"
|
||||
"exec": "grunt"
|
||||
},
|
||||
{
|
||||
"desc": "Add the release files",
|
||||
"desc": "Add the (otherwise ignored) release files",
|
||||
"exec": "git add dist/video-js --force"
|
||||
},
|
||||
{
|
||||
@@ -72,8 +368,8 @@
|
||||
"exec": "grunt vjsdocs"
|
||||
},
|
||||
{
|
||||
"desc": "Update the changelog with the new release",
|
||||
"exec": "grunt chg-release:<%= type %>"
|
||||
"desc": "Update the cdn urls in the docs",
|
||||
"exec": "grunt cdn-links"
|
||||
},
|
||||
{
|
||||
"desc": "Tag the release",
|
||||
@@ -81,7 +377,7 @@
|
||||
},
|
||||
{
|
||||
"desc": "Push changes to the remote",
|
||||
"exec": "git push stable"
|
||||
"exec": "git push origin stable"
|
||||
},
|
||||
{
|
||||
"desc": "Push tags to the remote",
|
||||
@@ -95,9 +391,17 @@
|
||||
"desc": "Checkout the development branch (master) and merge changes",
|
||||
"exec": "git checkout master && git merge stable"
|
||||
},
|
||||
{
|
||||
"desc": "Remove built dist files to re-ignore them",
|
||||
"exec": "grunt clean:dist"
|
||||
},
|
||||
{
|
||||
"desc": "Commit the removed dist files",
|
||||
"exec": "git add -u && git commit -m 'Removed dist files'"
|
||||
},
|
||||
{
|
||||
"desc": "Push development branch changes",
|
||||
"exec": "git push master"
|
||||
"exec": "git push origin master"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
externo
+41
@@ -0,0 +1,41 @@
|
||||
WEBVTT
|
||||
|
||||
00:00.700 --> 00:04.110
|
||||
Captions describe all relevant audio for the hearing impaired.
|
||||
[ Heroic music playing for a seagull ]
|
||||
|
||||
00:04.500 --> 00:05.000
|
||||
[ Splash!!! ]
|
||||
|
||||
00:05.100 --> 00:06.000
|
||||
[ Sploosh!!! ]
|
||||
|
||||
00:08.000 --> 00:09.225
|
||||
[ Splash...splash...splash splash splash ]
|
||||
|
||||
00:10.525 --> 00:11.255
|
||||
[ Splash, Sploosh again ]
|
||||
|
||||
00:13.500 --> 00:14.984
|
||||
Dolphin: eeeEEEEEeeee!
|
||||
|
||||
00:14.984 --> 00:16.984
|
||||
Dolphin: Squawk! eeeEEE?
|
||||
|
||||
00:25.000 --> 00:28.284
|
||||
[ A whole ton of splashes ]
|
||||
|
||||
00:29.500 --> 00:31.000
|
||||
Mine. Mine. Mine.
|
||||
|
||||
00:34.300 --> 00:36.000
|
||||
Shark: Chomp
|
||||
|
||||
00:36.800 --> 00:37.900
|
||||
Shark: CHOMP!!!
|
||||
|
||||
00:37.861 --> 00:41.193
|
||||
EEEEEEOOOOOOOOOOWHALENOISE
|
||||
|
||||
00:42.593 --> 00:45.611
|
||||
[ BIG SPLASH ]
|
||||
externo
+32
@@ -0,0 +1,32 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Video.js | HTML5 Video Player</title>
|
||||
|
||||
<!-- Chang URLs to wherever Video.js files will be hosted -->
|
||||
<link href="video-js.css" rel="stylesheet" type="text/css">
|
||||
<!-- video.js must be in the <head> for older IEs to work. -->
|
||||
<script src="video.js"></script>
|
||||
|
||||
<!-- Unless using the CDN hosted version, update the URL to the Flash SWF -->
|
||||
<script>
|
||||
videojs.options.flash.swf = "video-js.swf";
|
||||
</script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<video id="example_video_1" class="video-js vjs-default-skin" controls preload="none" width="640" height="264"
|
||||
poster="http://video-js.zencoder.com/oceans-clip.png"
|
||||
data-setup="{}">
|
||||
<source src="http://video-js.zencoder.com/oceans-clip.mp4" type='video/mp4' />
|
||||
<source src="http://video-js.zencoder.com/oceans-clip.webm" type='video/webm' />
|
||||
<source src="http://video-js.zencoder.com/oceans-clip.ogv" type='video/ogg' />
|
||||
<track kind="captions" src="demo.captions.vtt" srclang="en" label="English"></track><!-- Tracks need an ending tag thanks to IE9 -->
|
||||
<track kind="subtitles" src="demo.captions.vtt" srclang="en" label="English"></track><!-- Tracks need an ending tag thanks to IE9 -->
|
||||
<p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
|
||||
</video>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
externo
+5
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
externo
BIN
Arquivo binário não exibido.
externo
+148
@@ -0,0 +1,148 @@
|
||||
/*! Video.js v4.6.0-b Copyright 2014 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE */
|
||||
(function() {var b=void 0,f=!0,j=null,l=!1;function m(){return function(){}}function p(a){return function(){return this[a]}}function r(a){return function(){return a}}var t;document.createElement("video");document.createElement("audio");document.createElement("track");function u(a,c,d){if("string"===typeof a){0===a.indexOf("#")&&(a=a.slice(1));if(u.Aa[a])return u.Aa[a];a=u.v(a)}if(!a||!a.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return a.player||new u.Player(a,c,d)}
|
||||
var videojs=u;window.me=window.ne=u;u.Yb="4.6";u.Rc="https:"==document.location.protocol?"https://":"http://";u.options={techOrder:["html5","flash"],html5:{},flash:{},width:300,height:150,defaultVolume:0,playbackRates:[],children:{mediaLoader:{},posterImage:{},textTrackDisplay:{},loadingSpinner:{},bigPlayButton:{},controlBar:{},errorDisplay:{}},notSupportedMessage:"No compatible source was found for this video."};"GENERATED_CDN_VSN"!==u.Yb&&(videojs.options.flash.swf=u.Rc+"vjs.zencdn.net/"+u.Yb+"/video-js.swf");
|
||||
u.Aa={};"function"===typeof define&&define.amd?define([],function(){return videojs}):"object"===typeof exports&&"object"===typeof module&&(module.exports=videojs);u.pa=u.CoreObject=m();u.pa.extend=function(a){var c,d;a=a||{};c=a.init||a.h||this.prototype.init||this.prototype.h||m();d=function(){c.apply(this,arguments)};d.prototype=u.l.create(this.prototype);d.prototype.constructor=d;d.extend=u.pa.extend;d.create=u.pa.create;for(var e in a)a.hasOwnProperty(e)&&(d.prototype[e]=a[e]);return d};
|
||||
u.pa.create=function(){var a=u.l.create(this.prototype);this.apply(a,arguments);return a};u.d=function(a,c,d){var e=u.getData(a);e.D||(e.D={});e.D[c]||(e.D[c]=[]);d.u||(d.u=u.u++);e.D[c].push(d);e.X||(e.disabled=l,e.X=function(c){if(!e.disabled){c=u.sc(c);var d=e.D[c.type];if(d)for(var d=d.slice(0),k=0,q=d.length;k<q&&!c.zc();k++)d[k].call(a,c)}});1==e.D[c].length&&(document.addEventListener?a.addEventListener(c,e.X,l):document.attachEvent&&a.attachEvent("on"+c,e.X))};
|
||||
u.p=function(a,c,d){if(u.wc(a)){var e=u.getData(a);if(e.D)if(c){var g=e.D[c];if(g){if(d){if(d.u)for(e=0;e<g.length;e++)g[e].u===d.u&&g.splice(e--,1)}else e.D[c]=[];u.nc(a,c)}}else for(g in e.D)c=g,e.D[c]=[],u.nc(a,c)}};u.nc=function(a,c){var d=u.getData(a);0===d.D[c].length&&(delete d.D[c],document.removeEventListener?a.removeEventListener(c,d.X,l):document.detachEvent&&a.detachEvent("on"+c,d.X));u.Eb(d.D)&&(delete d.D,delete d.X,delete d.disabled);u.Eb(d)&&u.Fc(a)};
|
||||
u.sc=function(a){function c(){return f}function d(){return l}if(!a||!a.Fb){var e=a||window.event;a={};for(var g in e)"layerX"!==g&&("layerY"!==g&&"keyboardEvent.keyLocation"!==g)&&("returnValue"==g&&e.preventDefault||(a[g]=e[g]));a.target||(a.target=a.srcElement||document);a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;a.preventDefault=function(){e.preventDefault&&e.preventDefault();a.returnValue=l;a.td=c;a.defaultPrevented=f};a.td=d;a.defaultPrevented=l;a.stopPropagation=function(){e.stopPropagation&&
|
||||
e.stopPropagation();a.cancelBubble=f;a.Fb=c};a.Fb=d;a.stopImmediatePropagation=function(){e.stopImmediatePropagation&&e.stopImmediatePropagation();a.zc=c;a.stopPropagation()};a.zc=d;if(a.clientX!=j){g=document.documentElement;var h=document.body;a.pageX=a.clientX+(g&&g.scrollLeft||h&&h.scrollLeft||0)-(g&&g.clientLeft||h&&h.clientLeft||0);a.pageY=a.clientY+(g&&g.scrollTop||h&&h.scrollTop||0)-(g&&g.clientTop||h&&h.clientTop||0)}a.which=a.charCode||a.keyCode;a.button!=j&&(a.button=a.button&1?0:a.button&
|
||||
4?1:a.button&2?2:0)}return a};u.k=function(a,c){var d=u.wc(a)?u.getData(a):{},e=a.parentNode||a.ownerDocument;"string"===typeof c&&(c={type:c,target:a});c=u.sc(c);d.X&&d.X.call(a,c);if(e&&!c.Fb()&&c.bubbles!==l)u.k(e,c);else if(!e&&!c.defaultPrevented&&(d=u.getData(c.target),c.target[c.type])){d.disabled=f;if("function"===typeof c.target[c.type])c.target[c.type]();d.disabled=l}return!c.defaultPrevented};
|
||||
u.W=function(a,c,d){function e(){u.p(a,c,e);d.apply(this,arguments)}e.u=d.u=d.u||u.u++;u.d(a,c,e)};var v=Object.prototype.hasOwnProperty;u.e=function(a,c){var d,e;d=document.createElement(a||"div");for(e in c)v.call(c,e)&&(-1!==e.indexOf("aria-")||"role"==e?d.setAttribute(e,c[e]):d[e]=c[e]);return d};u.$=function(a){return a.charAt(0).toUpperCase()+a.slice(1)};u.l={};u.l.create=Object.create||function(a){function c(){}c.prototype=a;return new c};
|
||||
u.l.wa=function(a,c,d){for(var e in a)v.call(a,e)&&c.call(d||this,e,a[e])};u.l.B=function(a,c){if(!c)return a;for(var d in c)v.call(c,d)&&(a[d]=c[d]);return a};u.l.hd=function(a,c){var d,e,g;a=u.l.copy(a);for(d in c)v.call(c,d)&&(e=a[d],g=c[d],a[d]=u.l.Ra(e)&&u.l.Ra(g)?u.l.hd(e,g):c[d]);return a};u.l.copy=function(a){return u.l.B({},a)};u.l.Ra=function(a){return!!a&&"object"===typeof a&&"[object Object]"===a.toString()&&a.constructor===Object};
|
||||
u.bind=function(a,c,d){function e(){return c.apply(a,arguments)}c.u||(c.u=u.u++);e.u=d?d+"_"+c.u:c.u;return e};u.ta={};u.u=1;u.expando="vdata"+(new Date).getTime();u.getData=function(a){var c=a[u.expando];c||(c=a[u.expando]=u.u++,u.ta[c]={});return u.ta[c]};u.wc=function(a){a=a[u.expando];return!(!a||u.Eb(u.ta[a]))};u.Fc=function(a){var c=a[u.expando];if(c){delete u.ta[c];try{delete a[u.expando]}catch(d){a.removeAttribute?a.removeAttribute(u.expando):a[u.expando]=j}}};
|
||||
u.Eb=function(a){for(var c in a)if(a[c]!==j)return l;return f};u.o=function(a,c){-1==(" "+a.className+" ").indexOf(" "+c+" ")&&(a.className=""===a.className?c:a.className+" "+c)};u.r=function(a,c){var d,e;if(-1!=a.className.indexOf(c)){d=a.className.split(" ");for(e=d.length-1;0<=e;e--)d[e]===c&&d.splice(e,1);a.className=d.join(" ")}};u.A=u.e("video");u.M=navigator.userAgent;u.Wc=/iPhone/i.test(u.M);u.Vc=/iPad/i.test(u.M);u.Xc=/iPod/i.test(u.M);u.Uc=u.Wc||u.Vc||u.Xc;var aa=u,w;var x=u.M.match(/OS (\d+)_/i);
|
||||
w=x&&x[1]?x[1]:b;aa.ae=w;u.Tc=/Android/i.test(u.M);var ba=u,y;var z=u.M.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i),A,B;z?(A=z[1]&&parseFloat(z[1]),B=z[2]&&parseFloat(z[2]),y=A&&B?parseFloat(z[1]+"."+z[2]):A?A:j):y=j;ba.Xb=y;u.Yc=u.Tc&&/webkit/i.test(u.M)&&2.3>u.Xb;u.ac=/Firefox/i.test(u.M);u.be=/Chrome/i.test(u.M);u.ic=!!("ontouchstart"in window||window.Sc&&document instanceof window.Sc);
|
||||
u.Bb=function(a){var c,d,e,g;c={};if(a&&a.attributes&&0<a.attributes.length){d=a.attributes;for(var h=d.length-1;0<=h;h--){e=d[h].name;g=d[h].value;if("boolean"===typeof a[e]||-1!==",autoplay,controls,loop,muted,default,".indexOf(","+e+","))g=g!==j?f:l;c[e]=g}}return c};
|
||||
u.fe=function(a,c){var d="";document.defaultView&&document.defaultView.getComputedStyle?d=document.defaultView.getComputedStyle(a,"").getPropertyValue(c):a.currentStyle&&(d=a["client"+c.substr(0,1).toUpperCase()+c.substr(1)]+"px");return d};u.Db=function(a,c){c.firstChild?c.insertBefore(a,c.firstChild):c.appendChild(a)};u.Ub={};u.v=function(a){0===a.indexOf("#")&&(a=a.slice(1));return document.getElementById(a)};
|
||||
u.ya=function(a,c){c=c||a;var d=Math.floor(a%60),e=Math.floor(a/60%60),g=Math.floor(a/3600),h=Math.floor(c/60%60),k=Math.floor(c/3600);if(isNaN(a)||Infinity===a)g=e=d="-";g=0<g||0<k?g+":":"";return g+(((g||10<=h)&&10>e?"0"+e:e)+":")+(10>d?"0"+d:d)};u.dd=function(){document.body.focus();document.onselectstart=r(l)};u.Vd=function(){document.onselectstart=r(f)};u.trim=function(a){return(a+"").replace(/^\s+|\s+$/g,"")};u.round=function(a,c){c||(c=0);return Math.round(a*Math.pow(10,c))/Math.pow(10,c)};
|
||||
u.yb=function(a,c){return{length:1,start:function(){return a},end:function(){return c}}};
|
||||
u.get=function(a,c,d,e){var g,h,k,q;d=d||m();"undefined"===typeof XMLHttpRequest&&(window.XMLHttpRequest=function(){try{return new window.ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new window.ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new window.ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw Error("This browser does not support XMLHttpRequest.");});h=new XMLHttpRequest;k=u.Hd(a);q=window.location;k.protocol+k.host!==q.protocol+q.host&&window.XDomainRequest&&!("withCredentials"in
|
||||
h)?(h=new window.XDomainRequest,h.onload=function(){c(h.responseText)},h.onerror=d,h.onprogress=m(),h.ontimeout=d):(g="file:"==k.protocol||"file:"==q.protocol,h.onreadystatechange=function(){4===h.readyState&&(200===h.status||g&&0===h.status?c(h.responseText):d(h.responseText))});try{h.open("GET",a,f),e&&(h.withCredentials=f)}catch(n){d(n);return}try{h.send()}catch(s){d(s)}};
|
||||
u.Md=function(a){try{var c=window.localStorage||l;c&&(c.volume=a)}catch(d){22==d.code||1014==d.code?u.log("LocalStorage Full (VideoJS)",d):18==d.code?u.log("LocalStorage not allowed (VideoJS)",d):u.log("LocalStorage Error (VideoJS)",d)}};u.uc=function(a){a.match(/^https?:\/\//)||(a=u.e("div",{innerHTML:'<a href="'+a+'">x</a>'}).firstChild.href);return a};
|
||||
u.Hd=function(a){var c,d,e,g;g="protocol hostname port pathname search hash host".split(" ");d=u.e("a",{href:a});if(e=""===d.host&&"file:"!==d.protocol)c=u.e("div"),c.innerHTML='<a href="'+a+'"></a>',d=c.firstChild,c.setAttribute("style","display:none; position:absolute;"),document.body.appendChild(c);a={};for(var h=0;h<g.length;h++)a[g[h]]=d[g[h]];e&&document.body.removeChild(c);return a};function C(){}var E=window.console||{log:C,warn:C,error:C};
|
||||
function F(a,c){var d=Array.prototype.slice.call(c);a?d.unshift(a.toUpperCase()+":"):a="log";u.log.history.push(d);d.unshift("VIDEOJS:");if(E[a].apply)E[a].apply(E,d);else E[a](d.join(" "))}u.log=function(){F(j,arguments)};u.log.history=[];u.log.error=function(){F("error",arguments)};u.log.warn=function(){F("warn",arguments)};
|
||||
u.qd=function(a){var c,d;a.getBoundingClientRect&&a.parentNode&&(c=a.getBoundingClientRect());if(!c)return{left:0,top:0};a=document.documentElement;d=document.body;return{left:u.round(c.left+(window.pageXOffset||d.scrollLeft)-(a.clientLeft||d.clientLeft||0)),top:u.round(c.top+(window.pageYOffset||d.scrollTop)-(a.clientTop||d.clientTop||0))}};u.oa={};u.oa.Jb=function(a,c){var d,e,g;a=u.l.copy(a);for(d in c)c.hasOwnProperty(d)&&(e=a[d],g=c[d],a[d]=u.l.Ra(e)&&u.l.Ra(g)?u.oa.Jb(e,g):c[d]);return a};
|
||||
u.b=u.pa.extend({h:function(a,c,d){this.c=a;this.j=u.l.copy(this.j);c=this.options(c);this.T=c.id||(c.el&&c.el.id?c.el.id:a.id()+"_component_"+u.u++);this.yd=c.name||j;this.a=c.el||this.e();this.N=[];this.Na={};this.Oa={};this.xc();this.I(d);if(c.Gc!==l){var e,g;e=u.bind(this.m(),this.m().reportUserActivity);this.d("touchstart",function(){e();clearInterval(g);g=setInterval(e,250)});a=function(){e();clearInterval(g)};this.d("touchmove",e);this.d("touchend",a);this.d("touchcancel",a)}}});t=u.b.prototype;
|
||||
t.dispose=function(){this.k({type:"dispose",bubbles:l});if(this.N)for(var a=this.N.length-1;0<=a;a--)this.N[a].dispose&&this.N[a].dispose();this.Oa=this.Na=this.N=j;this.p();this.a.parentNode&&this.a.parentNode.removeChild(this.a);u.Fc(this.a);this.a=j};t.c=f;t.m=p("c");t.options=function(a){return a===b?this.j:this.j=u.oa.Jb(this.j,a)};t.e=function(a,c){return u.e(a,c)};t.v=p("a");t.ia=function(){return this.z||this.a};t.id=p("T");t.name=p("yd");t.children=p("N");t.sd=function(a){return this.Na[a]};
|
||||
t.ja=function(a){return this.Oa[a]};t.V=function(a,c){var d,e;"string"===typeof a?(e=a,c=c||{},d=c.componentClass||u.$(e),c.name=e,d=new window.videojs[d](this.c||this,c)):d=a;this.N.push(d);"function"===typeof d.id&&(this.Na[d.id()]=d);(e=e||d.name&&d.name())&&(this.Oa[e]=d);"function"===typeof d.el&&d.el()&&this.ia().appendChild(d.el());return d};
|
||||
t.removeChild=function(a){"string"===typeof a&&(a=this.ja(a));if(a&&this.N){for(var c=l,d=this.N.length-1;0<=d;d--)if(this.N[d]===a){c=f;this.N.splice(d,1);break}c&&(this.Na[a.id]=j,this.Oa[a.name]=j,(c=a.v())&&c.parentNode===this.ia()&&this.ia().removeChild(a.v()))}};t.xc=function(){var a,c,d,e;a=this;if(c=this.options().children)if(c instanceof Array)for(var g=0;g<c.length;g++)d=c[g],"string"==typeof d?(e=d,d={}):e=d.name,a[e]=a.V(e,d);else u.l.wa(c,function(c,d){d!==l&&(a[c]=a.V(c,d))})};t.S=r("");
|
||||
t.d=function(a,c){u.d(this.a,a,u.bind(this,c));return this};t.p=function(a,c){u.p(this.a,a,c);return this};t.W=function(a,c){u.W(this.a,a,u.bind(this,c));return this};t.k=function(a,c){u.k(this.a,a,c);return this};t.I=function(a){a&&(this.ca?a.call(this):(this.Ya===b&&(this.Ya=[]),this.Ya.push(a)));return this};t.Ea=function(){this.ca=f;var a=this.Ya;if(a&&0<a.length){for(var c=0,d=a.length;c<d;c++)a[c].call(this);this.Ya=[];this.k("ready")}};t.o=function(a){u.o(this.a,a);return this};
|
||||
t.r=function(a){u.r(this.a,a);return this};t.show=function(){this.a.style.display="block";return this};t.G=function(){this.a.style.display="none";return this};function G(a){a.r("vjs-lock-showing")}t.disable=function(){this.G();this.show=m()};t.width=function(a,c){return H(this,"width",a,c)};t.height=function(a,c){return H(this,"height",a,c)};t.ld=function(a,c){return this.width(a,f).height(c)};
|
||||
function H(a,c,d,e){if(d!==b)return a.a.style[c]=-1!==(""+d).indexOf("%")||-1!==(""+d).indexOf("px")?d:"auto"===d?"":d+"px",e||a.k("resize"),a;if(!a.a)return 0;d=a.a.style[c];e=d.indexOf("px");return-1!==e?parseInt(d.slice(0,e),10):parseInt(a.a["offset"+u.$(c)],10)}
|
||||
function I(a){var c,d,e,g,h,k,q,n;c=0;d=j;a.d("touchstart",function(a){1===a.touches.length&&(d=a.touches[0],c=(new Date).getTime(),g=f)});a.d("touchmove",function(a){1<a.touches.length?g=l:d&&(k=a.touches[0].pageX-d.pageX,q=a.touches[0].pageY-d.pageY,n=Math.sqrt(k*k+q*q),22<n&&(g=l))});h=function(){g=l};a.d("touchleave",h);a.d("touchcancel",h);a.d("touchend",function(a){d=j;g===f&&(e=(new Date).getTime()-c,250>e&&(a.preventDefault(),this.k("tap")))})}
|
||||
u.s=u.b.extend({h:function(a,c){u.b.call(this,a,c);I(this);this.d("tap",this.q);this.d("click",this.q);this.d("focus",this.Ua);this.d("blur",this.Ta)}});t=u.s.prototype;t.e=function(a,c){c=u.l.B({className:this.S(),innerHTML:'<div class="vjs-control-content"><span class="vjs-control-text">'+(this.sa||"Need Text")+"</span></div>",role:"button","aria-live":"polite",tabIndex:0},c);return u.b.prototype.e.call(this,a,c)};t.S=function(){return"vjs-control "+u.b.prototype.S.call(this)};t.q=m();
|
||||
t.Ua=function(){u.d(document,"keyup",u.bind(this,this.da))};t.da=function(a){if(32==a.which||13==a.which)a.preventDefault(),this.q()};t.Ta=function(){u.p(document,"keyup",u.bind(this,this.da))};
|
||||
u.Q=u.b.extend({h:function(a,c){u.b.call(this,a,c);this.cd=this.ja(this.j.barName);this.handle=this.ja(this.j.handleName);this.d("mousedown",this.Va);this.d("touchstart",this.Va);this.d("focus",this.Ua);this.d("blur",this.Ta);this.d("click",this.q);this.c.d("controlsvisible",u.bind(this,this.update));a.d(this.Dc,u.bind(this,this.update));this.R={}}});t=u.Q.prototype;
|
||||
t.e=function(a,c){c=c||{};c.className+=" vjs-slider";c=u.l.B({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},c);return u.b.prototype.e.call(this,a,c)};t.Va=function(a){a.preventDefault();u.dd();this.R.move=u.bind(this,this.Kb);this.R.end=u.bind(this,this.Lb);u.d(document,"mousemove",this.R.move);u.d(document,"mouseup",this.R.end);u.d(document,"touchmove",this.R.move);u.d(document,"touchend",this.R.end);this.Kb(a)};
|
||||
t.Lb=function(){u.Vd();u.p(document,"mousemove",this.R.move,l);u.p(document,"mouseup",this.R.end,l);u.p(document,"touchmove",this.R.move,l);u.p(document,"touchend",this.R.end,l);this.update()};t.update=function(){if(this.a){var a,c=this.Cb(),d=this.handle,e=this.cd;isNaN(c)&&(c=0);a=c;if(d){a=this.a.offsetWidth;var g=d.v().offsetWidth;a=g?g/a:0;c*=1-a;a=c+a/2;d.v().style.left=u.round(100*c,2)+"%"}e.v().style.width=u.round(100*a,2)+"%"}};
|
||||
function J(a,c){var d,e,g,h;d=a.a;e=u.qd(d);h=g=d.offsetWidth;d=a.handle;if(a.j.Xd)return h=e.top,e=c.changedTouches?c.changedTouches[0].pageY:c.pageY,d&&(d=d.v().offsetHeight,h+=d/2,g-=d),Math.max(0,Math.min(1,(h-e+g)/g));g=e.left;e=c.changedTouches?c.changedTouches[0].pageX:c.pageX;d&&(d=d.v().offsetWidth,g+=d/2,h-=d);return Math.max(0,Math.min(1,(e-g)/h))}t.Ua=function(){u.d(document,"keyup",u.bind(this,this.da))};
|
||||
t.da=function(a){37==a.which?(a.preventDefault(),this.Ic()):39==a.which&&(a.preventDefault(),this.Jc())};t.Ta=function(){u.p(document,"keyup",u.bind(this,this.da))};t.q=function(a){a.stopImmediatePropagation();a.preventDefault()};u.Y=u.b.extend();u.Y.prototype.defaultValue=0;u.Y.prototype.e=function(a,c){c=c||{};c.className+=" vjs-slider-handle";c=u.l.B({innerHTML:'<span class="vjs-control-text">'+this.defaultValue+"</span>"},c);return u.b.prototype.e.call(this,"div",c)};u.ga=u.b.extend();
|
||||
function ca(a,c){a.V(c);c.d("click",u.bind(a,function(){G(this)}))}u.ga.prototype.e=function(){var a=this.options().oc||"ul";this.z=u.e(a,{className:"vjs-menu-content"});a=u.b.prototype.e.call(this,"div",{append:this.z,className:"vjs-menu"});a.appendChild(this.z);u.d(a,"click",function(a){a.preventDefault();a.stopImmediatePropagation()});return a};u.J=u.s.extend({h:function(a,c){u.s.call(this,a,c);this.selected(c.selected)}});
|
||||
u.J.prototype.e=function(a,c){return u.s.prototype.e.call(this,"li",u.l.B({className:"vjs-menu-item",innerHTML:this.j.label},c))};u.J.prototype.q=function(){this.selected(f)};u.J.prototype.selected=function(a){a?(this.o("vjs-selected"),this.a.setAttribute("aria-selected",f)):(this.r("vjs-selected"),this.a.setAttribute("aria-selected",l))};
|
||||
u.L=u.s.extend({h:function(a,c){u.s.call(this,a,c);this.za=this.va();this.V(this.za);this.O&&0===this.O.length&&this.G();this.d("keyup",this.da);this.a.setAttribute("aria-haspopup",f);this.a.setAttribute("role","button")}});t=u.L.prototype;t.ra=l;t.va=function(){var a=new u.ga(this.c);this.options().title&&a.ia().appendChild(u.e("li",{className:"vjs-menu-title",innerHTML:u.$(this.options().title),Td:-1}));if(this.O=this.createItems())for(var c=0;c<this.O.length;c++)ca(a,this.O[c]);return a};
|
||||
t.ua=m();t.S=function(){return this.className+" vjs-menu-button "+u.s.prototype.S.call(this)};t.Ua=m();t.Ta=m();t.q=function(){this.W("mouseout",u.bind(this,function(){G(this.za);this.a.blur()}));this.ra?K(this):L(this)};t.da=function(a){a.preventDefault();32==a.which||13==a.which?this.ra?K(this):L(this):27==a.which&&this.ra&&K(this)};function L(a){a.ra=f;a.za.o("vjs-lock-showing");a.a.setAttribute("aria-pressed",f);a.O&&0<a.O.length&&a.O[0].v().focus()}
|
||||
function K(a){a.ra=l;G(a.za);a.a.setAttribute("aria-pressed",l)}u.F=function(a){"number"==typeof a?this.code=a:"string"==typeof a?this.message=a:"object"==typeof a&&u.l.B(this,a);this.message||(this.message=u.F.jd[this.code]||"")};u.F.prototype.code=0;u.F.prototype.message="";u.F.prototype.status=j;u.F.Qa="MEDIA_ERR_CUSTOM MEDIA_ERR_ABORTED MEDIA_ERR_NETWORK MEDIA_ERR_DECODE MEDIA_ERR_SRC_NOT_SUPPORTED MEDIA_ERR_ENCRYPTED".split(" ");
|
||||
u.F.jd={1:"You aborted the video playback",2:"A network error caused the video download to fail part-way.",3:"The video playback was aborted due to a corruption problem or because the video used features your browser did not support.",4:"The video could not be loaded, either because the server or network failed or because the format is not supported.",5:"The video is encrypted and we do not have the keys to decrypt it."};for(var M=0;M<u.F.Qa.length;M++)u.F[u.F.Qa[M]]=M,u.F.prototype[u.F.Qa[M]]=M;
|
||||
u.Player=u.b.extend({h:function(a,c,d){this.P=a;a.id=a.id||"vjs_video_"+u.u++;c=u.l.B(da(a),c);this.w={};this.Ec=c.poster;this.xb=c.controls;a.controls=l;c.Gc=l;this.I(function(){this.d("loadstart",this.Dd);this.d("ended",this.zd);this.d("play",this.Nb);this.d("firstplay",this.Bd);this.d("pause",this.Mb);this.d("progress",this.Ed);this.d("durationchange",this.Bc);this.d("fullscreenchange",this.Cd)});u.b.call(this,this,c,d);this.controls()?this.o("vjs-controls-enabled"):this.o("vjs-controls-disabled");
|
||||
u.Aa[this.T]=this;c.plugins&&u.l.wa(c.plugins,function(a,c){this[a](c)},this);var e,g,h,k,q,n;e=u.bind(this,this.reportUserActivity);this.d("mousedown",function(){e();clearInterval(g);g=setInterval(e,250)});this.d("mousemove",function(a){if(a.screenX!=q||a.screenY!=n)q=a.screenX,n=a.screenY,e()});this.d("mouseup",function(){e();clearInterval(g)});this.d("keydown",e);this.d("keyup",e);h=setInterval(u.bind(this,function(){this.na&&(this.na=l,this.userActive(f),clearTimeout(k),k=setTimeout(u.bind(this,
|
||||
function(){this.na||this.userActive(l)}),2E3))}),250);this.d("dispose",function(){clearInterval(h);clearTimeout(k)})}});t=u.Player.prototype;t.j=u.options;t.dispose=function(){this.k("dispose");this.p("dispose");u.Aa[this.T]=j;this.P&&this.P.player&&(this.P.player=j);this.a&&this.a.player&&(this.a.player=j);clearInterval(this.Xa);this.Ba();this.g&&this.g.dispose();u.b.prototype.dispose.call(this)};
|
||||
function da(a){var c={sources:[],tracks:[]};u.l.B(c,u.Bb(a));if(a.hasChildNodes()){var d,e,g,h;a=a.childNodes;g=0;for(h=a.length;g<h;g++)d=a[g],e=d.nodeName.toLowerCase(),"source"===e?c.sources.push(u.Bb(d)):"track"===e&&c.tracks.push(u.Bb(d))}return c}
|
||||
t.e=function(){var a=this.a=u.b.prototype.e.call(this,"div"),c=this.P;c.removeAttribute("width");c.removeAttribute("height");if(c.hasChildNodes()){var d,e,g,h,k;d=c.childNodes;e=d.length;for(k=[];e--;)g=d[e],h=g.nodeName.toLowerCase(),"track"===h&&k.push(g);for(d=0;d<k.length;d++)c.removeChild(k[d])}a.id=c.id;a.className=c.className;c.id+="_html5_api";c.className="vjs-tech";c.player=a.player=this;this.o("vjs-paused");this.width(this.j.width,f);this.height(this.j.height,f);c.parentNode&&c.parentNode.insertBefore(a,
|
||||
c);u.Db(c,a);return a};
|
||||
function N(a,c,d){a.g&&(a.ca=l,a.g.dispose(),a.Hb&&(a.Hb=l,clearInterval(a.Xa)),a.Ib&&O(a),a.g=l);"Html5"!==c&&a.P&&(u.f.qc(a.P),a.P=j);a.Ca=c;a.ca=l;var e=u.l.B({source:d,parentEl:a.a},a.j[c.toLowerCase()]);d&&(d.src==a.w.src&&0<a.w.currentTime&&(e.startTime=a.w.currentTime),a.w.src=d.src);a.g=new window.videojs[c](a,e);a.g.I(function(){this.c.Ea();if(!this.n.progressEvents){var a=this.c;a.Hb=f;a.Xa=setInterval(u.bind(a,function(){this.w.sb<this.buffered().end(0)?this.k("progress"):1==this.bufferedPercent()&&
|
||||
(clearInterval(this.Xa),this.k("progress"))}),500);a.g&&a.g.W("progress",function(){this.n.progressEvents=f;var a=this.c;a.Hb=l;clearInterval(a.Xa)})}this.n.timeupdateEvents||(a=this.c,a.Ib=f,a.d("play",a.Mc),a.d("pause",a.Ba),a.g&&a.g.W("timeupdate",function(){this.n.timeupdateEvents=f;O(this.c)}))})}function O(a){a.Ib=l;a.Ba();a.p("play",a.Mc);a.p("pause",a.Ba)}t.Mc=function(){this.pc&&this.Ba();this.pc=setInterval(u.bind(this,function(){this.k("timeupdate")}),250)};
|
||||
t.Ba=function(){clearInterval(this.pc);this.k("timeupdate")};t.Dd=function(){this.p("play",P);this.W("play",P);this.error()&&this.error(j);u.r(this.a,"vjs-has-started")};function P(a){u.k(this.a,{type:"firstplay",target:this.a})||(a.preventDefault(),a.stopPropagation(),a.stopImmediatePropagation())}t.Nb=function(){u.r(this.a,"vjs-paused");u.o(this.a,"vjs-playing")};t.Bd=function(){this.j.starttime&&this.currentTime(this.j.starttime);this.o("vjs-has-started")};
|
||||
t.Mb=function(){u.r(this.a,"vjs-playing");u.o(this.a,"vjs-paused")};t.Ed=function(){1==this.bufferedPercent()&&this.k("loadedalldata")};t.zd=function(){this.j.loop&&(this.currentTime(0),this.play())};t.Bc=function(){var a=Q(this,"duration");a&&(0>a&&(a=Infinity),this.duration(a),Infinity===a?this.o("vjs-live"):this.r("vjs-live"))};t.Cd=function(){this.isFullScreen()?this.o("vjs-fullscreen"):this.r("vjs-fullscreen")};
|
||||
function R(a,c,d){if(a.g&&!a.g.ca)a.g.I(function(){this[c](d)});else try{a.g[c](d)}catch(e){throw u.log(e),e;}}function Q(a,c){if(a.g&&a.g.ca)try{return a.g[c]()}catch(d){throw a.g[c]===b?u.log("Video.js: "+c+" method not defined for "+a.Ca+" playback technology.",d):"TypeError"==d.name?(u.log("Video.js: "+c+" unavailable on "+a.Ca+" playback technology element.",d),a.g.ca=l):u.log(d),d;}}t.play=function(){this.error()||R(this,"play");return this};t.pause=function(){R(this,"pause");return this};
|
||||
t.paused=function(){return Q(this,"paused")===l?l:f};t.currentTime=function(a){return a!==b?(R(this,"setCurrentTime",a),this.Ib&&this.k("timeupdate"),this):this.w.currentTime=Q(this,"currentTime")||0};t.duration=function(a){if(a!==b)return this.w.duration=parseFloat(a),this;this.w.duration===b&&this.Bc();return this.w.duration||0};t.buffered=function(){var a=Q(this,"buffered"),c=a.length-1,d=this.w.sb=this.w.sb||0;a&&(0<=c&&a.end(c)!==d)&&(d=a.end(c),this.w.sb=d);return u.yb(0,d)};
|
||||
t.bufferedPercent=function(){return this.duration()?this.buffered().end(0)/this.duration():0};t.volume=function(a){if(a!==b)return a=Math.max(0,Math.min(1,parseFloat(a))),this.w.volume=a,R(this,"setVolume",a),u.Md(a),this;a=parseFloat(Q(this,"volume"));return isNaN(a)?1:a};t.muted=function(a){return a!==b?(R(this,"setMuted",a),this):Q(this,"muted")||l};t.$a=function(){return Q(this,"supportsFullScreen")||l};t.yc=l;t.isFullScreen=function(a){return a!==b?(this.yc=a,this):this.yc};
|
||||
t.requestFullScreen=function(){var a=u.Ub.requestFullScreen;this.isFullScreen(f);a?(u.d(document,a.zb,u.bind(this,function(c){this.isFullScreen(document[a.isFullScreen]);this.isFullScreen()===l&&u.p(document,a.zb,arguments.callee);this.k("fullscreenchange")})),this.a[a.Rb]()):this.g.$a()?R(this,"enterFullScreen"):(this.ud=f,this.md=document.documentElement.style.overflow,u.d(document,"keydown",u.bind(this,this.tc)),document.documentElement.style.overflow="hidden",u.o(document.body,"vjs-full-window"),
|
||||
this.k("enterFullWindow"),this.k("fullscreenchange"));return this};t.cancelFullScreen=function(){var a=u.Ub.requestFullScreen;this.isFullScreen(l);if(a)document[a.ub]();else this.g.$a()?R(this,"exitFullScreen"):(S(this),this.k("fullscreenchange"));return this};t.tc=function(a){27===a.keyCode&&(this.isFullScreen()===f?this.cancelFullScreen():S(this))};
|
||||
function S(a){a.ud=l;u.p(document,"keydown",a.tc);document.documentElement.style.overflow=a.md;u.r(document.body,"vjs-full-window");a.k("exitFullWindow")}
|
||||
t.src=function(a){if(a===b)return Q(this,"src");if(a instanceof Array){var c;a:{c=a;for(var d=0,e=this.j.techOrder;d<e.length;d++){var g=u.$(e[d]),h=window.videojs[g];if(h.isSupported())for(var k=0,q=c;k<q.length;k++){var n=q[k];if(h.canPlaySource(n)){c={source:n,g:g};break a}}}c=l}c?(a=c.source,c=c.g,c==this.Ca?this.src(a):N(this,c,a)):(this.error({code:4,message:this.options().notSupportedMessage}),this.Ea())}else a instanceof Object?window.videojs[this.Ca].canPlaySource(a)?this.src(a.src):this.src([a]):
|
||||
(this.w.src=a,this.ca?(R(this,"src",a),"auto"==this.j.preload&&this.load(),this.j.autoplay&&this.play()):this.I(function(){this.src(a)}));return this};t.load=function(){R(this,"load");return this};t.currentSrc=function(){return Q(this,"currentSrc")||this.w.src||""};t.Wa=function(a){return a!==b?(R(this,"setPreload",a),this.j.preload=a,this):Q(this,"preload")};t.autoplay=function(a){return a!==b?(R(this,"setAutoplay",a),this.j.autoplay=a,this):Q(this,"autoplay")};
|
||||
t.loop=function(a){return a!==b?(R(this,"setLoop",a),this.j.loop=a,this):Q(this,"loop")};t.poster=function(a){if(a===b)return this.Ec;this.Ec=a;R(this,"setPoster",a);this.k("posterchange")};t.controls=function(a){return a!==b?(a=!!a,this.xb!==a&&((this.xb=a)?(this.r("vjs-controls-disabled"),this.o("vjs-controls-enabled"),this.k("controlsenabled")):(this.r("vjs-controls-enabled"),this.o("vjs-controls-disabled"),this.k("controlsdisabled"))),this):this.xb};u.Player.prototype.Wb;t=u.Player.prototype;
|
||||
t.usingNativeControls=function(a){return a!==b?(a=!!a,this.Wb!==a&&((this.Wb=a)?(this.o("vjs-using-native-controls"),this.k("usingnativecontrols")):(this.r("vjs-using-native-controls"),this.k("usingcustomcontrols"))),this):this.Wb};t.ba=j;t.error=function(a){if(a===b)return this.ba;if(a===j)return this.ba=a,this.r("vjs-error"),this;this.ba=a instanceof u.F?a:new u.F(a);this.k("error");this.o("vjs-error");u.log.error("(CODE:"+this.ba.code+" "+u.F.Qa[this.ba.code]+")",this.ba.message,this.ba);return this};
|
||||
t.ended=function(){return Q(this,"ended")};t.seeking=function(){return Q(this,"seeking")};t.na=f;t.reportUserActivity=function(){this.na=f};t.Vb=f;t.userActive=function(a){return a!==b?(a=!!a,a!==this.Vb&&((this.Vb=a)?(this.na=f,this.r("vjs-user-inactive"),this.o("vjs-user-active"),this.k("useractive")):(this.na=l,this.g&&this.g.W("mousemove",function(a){a.stopPropagation();a.preventDefault()}),this.r("vjs-user-active"),this.o("vjs-user-inactive"),this.k("userinactive"))),this):this.Vb};
|
||||
t.playbackRate=function(a){return a!==b?(R(this,"setPlaybackRate",a),this):this.g&&this.g.n&&this.g.n.playbackRate?Q(this,"playbackRate"):1};var T,U,V;V=document.createElement("div");U={};
|
||||
V.ce!==b?(U.Rb="requestFullscreen",U.ub="exitFullscreen",U.zb="fullscreenchange",U.isFullScreen="fullScreen"):(document.mozCancelFullScreen?(T="moz",U.isFullScreen=T+"FullScreen",U.Rb=T+"RequestFullScreen"):(T="webkit",U.isFullScreen=T+"IsFullScreen",U.Rb=T+"RequestFullscreen"),V[T+"RequestFullScreen"]&&(U.ub=T+"CancelFullScreen"),U.zb=T+"fullscreenchange");document[U.ub]&&(u.Ub.requestFullScreen=U);u.Ha=u.b.extend();
|
||||
u.Ha.prototype.j={he:"play",children:{playToggle:{},currentTimeDisplay:{},timeDivider:{},durationDisplay:{},remainingTimeDisplay:{},liveDisplay:{},progressControl:{},fullscreenToggle:{},volumeControl:{},muteToggle:{},playbackRateMenuButton:{}}};u.Ha.prototype.e=function(){return u.e("div",{className:"vjs-control-bar"})};u.bc=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});
|
||||
u.bc.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-live-controls vjs-control"});this.z=u.e("div",{className:"vjs-live-display",innerHTML:'<span class="vjs-control-text">Stream Type </span>LIVE',"aria-live":"off"});a.appendChild(this.z);return a};u.ec=u.s.extend({h:function(a,c){u.s.call(this,a,c);a.d("play",u.bind(this,this.Nb));a.d("pause",u.bind(this,this.Mb))}});t=u.ec.prototype;t.sa="Play";t.S=function(){return"vjs-play-control "+u.s.prototype.S.call(this)};
|
||||
t.q=function(){this.c.paused()?this.c.play():this.c.pause()};t.Nb=function(){u.r(this.a,"vjs-paused");u.o(this.a,"vjs-playing");this.a.children[0].children[0].innerHTML="Pause"};t.Mb=function(){u.r(this.a,"vjs-playing");u.o(this.a,"vjs-paused");this.a.children[0].children[0].innerHTML="Play"};u.eb=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("timeupdate",u.bind(this,this.fa))}});
|
||||
u.eb.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-current-time vjs-time-controls vjs-control"});this.z=u.e("div",{className:"vjs-current-time-display",innerHTML:'<span class="vjs-control-text">Current Time </span>0:00',"aria-live":"off"});a.appendChild(this.z);return a};u.eb.prototype.fa=function(){var a=this.c.Za?this.c.w.currentTime:this.c.currentTime();this.z.innerHTML='<span class="vjs-control-text">Current Time </span>'+u.ya(a,this.c.duration())};
|
||||
u.fb=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("timeupdate",u.bind(this,this.fa))}});u.fb.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-duration vjs-time-controls vjs-control"});this.z=u.e("div",{className:"vjs-duration-display",innerHTML:'<span class="vjs-control-text">Duration Time </span>0:00',"aria-live":"off"});a.appendChild(this.z);return a};
|
||||
u.fb.prototype.fa=function(){var a=this.c.duration();a&&(this.z.innerHTML='<span class="vjs-control-text">Duration Time </span>'+u.ya(a))};u.kc=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.kc.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-time-divider",innerHTML:"<div><span>/</span></div>"})};u.mb=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("timeupdate",u.bind(this,this.fa))}});
|
||||
u.mb.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-remaining-time vjs-time-controls vjs-control"});this.z=u.e("div",{className:"vjs-remaining-time-display",innerHTML:'<span class="vjs-control-text">Remaining Time </span>-0:00',"aria-live":"off"});a.appendChild(this.z);return a};u.mb.prototype.fa=function(){this.c.duration()&&(this.z.innerHTML='<span class="vjs-control-text">Remaining Time </span>-'+u.ya(this.c.duration()-this.c.currentTime()))};
|
||||
u.Ia=u.s.extend({h:function(a,c){u.s.call(this,a,c)}});u.Ia.prototype.sa="Fullscreen";u.Ia.prototype.S=function(){return"vjs-fullscreen-control "+u.s.prototype.S.call(this)};u.Ia.prototype.q=function(){this.c.isFullScreen()?(this.c.cancelFullScreen(),this.a.children[0].children[0].innerHTML="Fullscreen"):(this.c.requestFullScreen(),this.a.children[0].children[0].innerHTML="Non-Fullscreen")};u.lb=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.lb.prototype.j={children:{seekBar:{}}};
|
||||
u.lb.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-progress-control vjs-control"})};u.gc=u.Q.extend({h:function(a,c){u.Q.call(this,a,c);a.d("timeupdate",u.bind(this,this.ma));a.I(u.bind(this,this.ma))}});t=u.gc.prototype;t.j={children:{loadProgressBar:{},playProgressBar:{},seekHandle:{}},barName:"playProgressBar",handleName:"seekHandle"};t.Dc="timeupdate";t.e=function(){return u.Q.prototype.e.call(this,"div",{className:"vjs-progress-holder","aria-label":"video progress bar"})};
|
||||
t.ma=function(){var a=this.c.Za?this.c.w.currentTime:this.c.currentTime();this.a.setAttribute("aria-valuenow",u.round(100*this.Cb(),2));this.a.setAttribute("aria-valuetext",u.ya(a,this.c.duration()))};t.Cb=function(){return this.c.currentTime()/this.c.duration()};t.Va=function(a){u.Q.prototype.Va.call(this,a);this.c.Za=f;this.Yd=!this.c.paused();this.c.pause()};t.Kb=function(a){a=J(this,a)*this.c.duration();a==this.c.duration()&&(a-=0.1);this.c.currentTime(a)};
|
||||
t.Lb=function(a){u.Q.prototype.Lb.call(this,a);this.c.Za=l;this.Yd&&this.c.play()};t.Jc=function(){this.c.currentTime(this.c.currentTime()+5)};t.Ic=function(){this.c.currentTime(this.c.currentTime()-5)};u.ib=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("progress",u.bind(this,this.update))}});u.ib.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-load-progress",innerHTML:'<span class="vjs-control-text">Loaded: 0%</span>'})};
|
||||
u.ib.prototype.update=function(){this.a.style&&(this.a.style.width=u.round(100*this.c.bufferedPercent(),2)+"%")};u.dc=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.dc.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-play-progress",innerHTML:'<span class="vjs-control-text">Progress: 0%</span>'})};u.Ka=u.Y.extend({h:function(a,c){u.Y.call(this,a,c);a.d("timeupdate",u.bind(this,this.fa))}});u.Ka.prototype.defaultValue="00:00";
|
||||
u.Ka.prototype.e=function(){return u.Y.prototype.e.call(this,"div",{className:"vjs-seek-handle","aria-live":"off"})};u.Ka.prototype.fa=function(){var a=this.c.Za?this.c.w.currentTime:this.c.currentTime();this.a.innerHTML='<span class="vjs-control-text">'+u.ya(a,this.c.duration())+"</span>"};u.ob=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.g&&(a.g.n&&a.g.n.volumeControl===l)&&this.o("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.g.n&&a.g.n.volumeControl===l?this.o("vjs-hidden"):this.r("vjs-hidden")}))}});
|
||||
u.ob.prototype.j={children:{volumeBar:{}}};u.ob.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-volume-control vjs-control"})};u.nb=u.Q.extend({h:function(a,c){u.Q.call(this,a,c);a.d("volumechange",u.bind(this,this.ma));a.I(u.bind(this,this.ma))}});t=u.nb.prototype;t.ma=function(){this.a.setAttribute("aria-valuenow",u.round(100*this.c.volume(),2));this.a.setAttribute("aria-valuetext",u.round(100*this.c.volume(),2)+"%")};
|
||||
t.j={children:{volumeLevel:{},volumeHandle:{}},barName:"volumeLevel",handleName:"volumeHandle"};t.Dc="volumechange";t.e=function(){return u.Q.prototype.e.call(this,"div",{className:"vjs-volume-bar","aria-label":"volume level"})};t.Kb=function(a){this.c.muted()&&this.c.muted(l);this.c.volume(J(this,a))};t.Cb=function(){return this.c.muted()?0:this.c.volume()};t.Jc=function(){this.c.volume(this.c.volume()+0.1)};t.Ic=function(){this.c.volume(this.c.volume()-0.1)};
|
||||
u.lc=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.lc.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-volume-level",innerHTML:'<span class="vjs-control-text"></span>'})};u.pb=u.Y.extend();u.pb.prototype.defaultValue="00:00";u.pb.prototype.e=function(){return u.Y.prototype.e.call(this,"div",{className:"vjs-volume-handle"})};
|
||||
u.ha=u.s.extend({h:function(a,c){u.s.call(this,a,c);a.d("volumechange",u.bind(this,this.update));a.g&&(a.g.n&&a.g.n.volumeControl===l)&&this.o("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.g.n&&a.g.n.volumeControl===l?this.o("vjs-hidden"):this.r("vjs-hidden")}))}});u.ha.prototype.e=function(){return u.s.prototype.e.call(this,"div",{className:"vjs-mute-control vjs-control",innerHTML:'<div><span class="vjs-control-text">Mute</span></div>'})};
|
||||
u.ha.prototype.q=function(){this.c.muted(this.c.muted()?l:f)};u.ha.prototype.update=function(){var a=this.c.volume(),c=3;0===a||this.c.muted()?c=0:0.33>a?c=1:0.67>a&&(c=2);this.c.muted()?"Unmute"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML="Unmute"):"Mute"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML="Mute");for(a=0;4>a;a++)u.r(this.a,"vjs-vol-"+a);u.o(this.a,"vjs-vol-"+c)};
|
||||
u.qa=u.L.extend({h:function(a,c){u.L.call(this,a,c);a.d("volumechange",u.bind(this,this.update));a.g&&(a.g.n&&a.g.n.Pc===l)&&this.o("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.g.n&&a.g.n.Pc===l?this.o("vjs-hidden"):this.r("vjs-hidden")}));this.o("vjs-menu-button")}});u.qa.prototype.va=function(){var a=new u.ga(this.c,{oc:"div"}),c=new u.nb(this.c,u.l.B({Xd:f},this.j.oe));a.V(c);return a};u.qa.prototype.q=function(){u.ha.prototype.q.call(this);u.L.prototype.q.call(this)};
|
||||
u.qa.prototype.e=function(){return u.s.prototype.e.call(this,"div",{className:"vjs-volume-menu-button vjs-menu-button vjs-control",innerHTML:'<div><span class="vjs-control-text">Mute</span></div>'})};u.qa.prototype.update=u.ha.prototype.update;u.fc=u.L.extend({h:function(a,c){u.L.call(this,a,c);this.Oc();this.Nc();a.d("loadstart",u.bind(this,this.Oc));a.d("ratechange",u.bind(this,this.Nc))}});t=u.fc.prototype;
|
||||
t.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-playback-rate vjs-menu-button vjs-control",innerHTML:'<div class="vjs-control-content"><span class="vjs-control-text">Playback Rate</span></div>'});this.Ac=u.e("div",{className:"vjs-playback-rate-value",innerHTML:1});a.appendChild(this.Ac);return a};t.va=function(){var a=new u.ga(this.m()),c=this.m().options().Ob;if(c)for(var d=c.length-1;0<=d;d--)a.V(new u.kb(this.m(),{Qb:c[d]+"x"}));return a};
|
||||
t.ma=function(){this.v().setAttribute("aria-valuenow",this.m().playbackRate())};t.q=function(){for(var a=this.m().playbackRate(),c=this.m().options().Ob,d=c[0],e=0;e<c.length;e++)if(c[e]>a){d=c[e];break}this.m().playbackRate(d)};function ea(a){return a.m().g&&a.m().g.n.playbackRate&&a.m().options().Ob&&0<a.m().options().Ob.length}t.Oc=function(){ea(this)?this.r("vjs-hidden"):this.o("vjs-hidden")};t.Nc=function(){ea(this)&&(this.Ac.innerHTML=this.m().playbackRate()+"x")};
|
||||
u.kb=u.J.extend({oc:"button",h:function(a,c){var d=this.label=c.rate,e=this.Qb=parseFloat(d,10);c.label=d;c.selected=1===e;u.J.call(this,a,c);this.m().d("ratechange",u.bind(this,this.update))}});u.kb.prototype.q=function(){u.J.prototype.q.call(this);this.m().playbackRate(this.Qb)};u.kb.prototype.update=function(){this.selected(this.m().playbackRate()==this.Qb)};
|
||||
u.Ja=u.s.extend({h:function(a,c){u.s.call(this,a,c);a.poster()&&this.src(a.poster());(!a.poster()||!a.controls())&&this.G();a.d("posterchange",u.bind(this,function(){this.src(a.poster())}));a.d("play",u.bind(this,this.G))}});var fa="backgroundSize"in u.A.style;u.Ja.prototype.e=function(){var a=u.e("div",{className:"vjs-poster",tabIndex:-1});fa||a.appendChild(u.e("img"));return a};u.Ja.prototype.src=function(a){var c=this.v();a!==b&&(fa?c.style.backgroundImage='url("'+a+'")':c.firstChild.src=a)};
|
||||
u.Ja.prototype.q=function(){this.m().controls()&&this.c.play()};u.cc=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("canplay",u.bind(this,this.G));a.d("canplaythrough",u.bind(this,this.G));a.d("playing",u.bind(this,this.G));a.d("seeking",u.bind(this,this.show));a.d("seeked",u.bind(this,this.G));a.d("ended",u.bind(this,this.G));a.d("waiting",u.bind(this,this.show))}});u.cc.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-loading-spinner"})};u.bb=u.s.extend();
|
||||
u.bb.prototype.e=function(){return u.s.prototype.e.call(this,"div",{className:"vjs-big-play-button",innerHTML:'<span aria-hidden="true"></span>',"aria-label":"play video"})};u.bb.prototype.q=function(){this.c.play()};u.gb=u.b.extend({h:function(a,c){u.b.call(this,a,c);this.update();a.d("error",u.bind(this,this.update))}});u.gb.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-error-display"});this.z=u.e("div");a.appendChild(this.z);return a};
|
||||
u.gb.prototype.update=function(){this.m().error()&&(this.z.innerHTML=this.m().error().message)};
|
||||
u.t=u.b.extend({h:function(a,c,d){c=c||{};c.Gc=l;u.b.call(this,a,c,d);var e,g;g=this;e=this.m();a=function(){if(e.controls()&&!e.usingNativeControls()){var a;g.d("mousedown",g.q);g.d("touchstart",function(c){c.preventDefault();a=this.c.userActive()});g.d("touchmove",function(){a&&this.m().reportUserActivity()});I(g);g.d("tap",g.Fd)}};c=u.bind(g,g.Jd);this.I(a);e.d("controlsenabled",a);e.d("controlsdisabled",c)}});t=u.t.prototype;
|
||||
t.Jd=function(){this.p("tap");this.p("touchstart");this.p("touchmove");this.p("touchleave");this.p("touchcancel");this.p("touchend");this.p("click");this.p("mousedown")};t.q=function(a){0===a.button&&this.m().controls()&&(this.m().paused()?this.m().play():this.m().pause())};t.Fd=function(){this.m().userActive(!this.m().userActive())};t.Sb=m();t.n={volumeControl:f,fullscreenResize:l,playbackRate:l,progressEvents:l,timeupdateEvents:l};u.media={};u.media.ab="play pause paused currentTime setCurrentTime duration buffered volume setVolume muted setMuted width height supportsFullScreen enterFullScreen src load currentSrc preload setPreload autoplay setAutoplay loop setLoop error networkState readyState seeking initialTime startOffsetTime played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks defaultPlaybackRate playbackRate mediaGroup controller controls defaultMuted".split(" ");
|
||||
function ga(){var a=u.media.ab[i];return function(){throw Error('The "'+a+"\" method is not available on the playback technology's API");}}for(var i=u.media.ab.length-1;0<=i;i--)u.t.prototype[u.media.ab[i]]=ga();
|
||||
u.f=u.t.extend({h:function(a,c,d){this.n.volumeControl=u.f.fd();this.n.playbackRate=u.f.ed();this.n.movingMediaElementInDOM=!u.Uc;this.n.fullscreenResize=f;u.t.call(this,a,c,d);for(d=u.f.hb.length-1;0<=d;d--)u.d(this.a,u.f.hb[d],u.bind(this,this.od));(c=c.source)&&this.a.currentSrc===c.src&&0<this.a.networkState?a.I(function(){a.k("loadstart")}):c&&(this.a.src=c.src);if(u.ic&&a.options().nativeControlsForTouch!==l){var e,g,h,k;e=this;g=this.m();c=g.controls();e.a.controls=!!c;h=function(){e.a.controls=
|
||||
f};k=function(){e.a.controls=l};g.d("controlsenabled",h);g.d("controlsdisabled",k);c=function(){g.p("controlsenabled",h);g.p("controlsdisabled",k)};e.d("dispose",c);g.d("usingcustomcontrols",c);g.usingNativeControls(f)}a.I(function(){this.P&&(this.j.autoplay&&this.paused())&&(delete this.P.poster,this.play())});this.Ea()}});t=u.f.prototype;t.dispose=function(){u.t.prototype.dispose.call(this)};
|
||||
t.e=function(){var a=this.c,c=a.P,d;if(!c||this.n.movingMediaElementInDOM===l)c?(d=c.cloneNode(l),u.f.qc(c),c=d,a.P=j):c=u.e("video",{id:a.id()+"_html5_api",className:"vjs-tech"}),c.player=a,u.Db(c,a.v());d=["autoplay","preload","loop","muted"];for(var e=d.length-1;0<=e;e--){var g=d[e];a.j[g]!==j&&(c[g]=a.j[g])}return c};t.od=function(a){"error"==a.type?this.m().error(this.error().code):(a.bubbles=l,this.m().k(a))};t.play=function(){this.a.play()};t.pause=function(){this.a.pause()};t.paused=function(){return this.a.paused};
|
||||
t.currentTime=function(){return this.a.currentTime};t.Ld=function(a){try{this.a.currentTime=a}catch(c){u.log(c,"Video is not ready. (Video.js)")}};t.duration=function(){return this.a.duration||0};t.buffered=function(){return this.a.buffered};t.volume=function(){return this.a.volume};t.Rd=function(a){this.a.volume=a};t.muted=function(){return this.a.muted};t.Od=function(a){this.a.muted=a};t.width=function(){return this.a.offsetWidth};t.height=function(){return this.a.offsetHeight};
|
||||
t.$a=function(){return"function"==typeof this.a.webkitEnterFullScreen&&(/Android/.test(u.M)||!/Chrome|Mac OS X 10.5/.test(u.M))?f:l};t.rc=function(){var a=this.a;a.paused&&a.networkState<=a.$d?(this.a.play(),setTimeout(function(){a.pause();a.webkitEnterFullScreen()},0)):a.webkitEnterFullScreen()};t.pd=function(){this.a.webkitExitFullScreen()};t.src=function(a){this.a.src=a};t.load=function(){this.a.load()};t.currentSrc=function(){return this.a.currentSrc};t.poster=function(){return this.a.poster};
|
||||
t.Sb=function(a){this.a.poster=a};t.Wa=function(){return this.a.Wa};t.Qd=function(a){this.a.Wa=a};t.autoplay=function(){return this.a.autoplay};t.Kd=function(a){this.a.autoplay=a};t.controls=function(){return this.a.controls};t.loop=function(){return this.a.loop};t.Nd=function(a){this.a.loop=a};t.error=function(){return this.a.error};t.seeking=function(){return this.a.seeking};t.ended=function(){return this.a.ended};t.playbackRate=function(){return this.a.playbackRate};
|
||||
t.Pd=function(a){this.a.playbackRate=a};u.f.isSupported=function(){try{u.A.volume=0.5}catch(a){return l}return!!u.A.canPlayType};u.f.tb=function(a){try{return!!u.A.canPlayType(a.type)}catch(c){return""}};u.f.fd=function(){var a=u.A.volume;u.A.volume=a/2+0.1;return a!==u.A.volume};u.f.ed=function(){var a=u.A.playbackRate;u.A.playbackRate=a/2+0.1;return a!==u.A.playbackRate};var W,ha=/^application\/(?:x-|vnd\.apple\.)mpegurl/i,ia=/^video\/mp4/i;
|
||||
u.f.Cc=function(){4<=u.Xb&&(W||(W=u.A.constructor.prototype.canPlayType),u.A.constructor.prototype.canPlayType=function(a){return a&&ha.test(a)?"maybe":W.call(this,a)});u.Yc&&(W||(W=u.A.constructor.prototype.canPlayType),u.A.constructor.prototype.canPlayType=function(a){return a&&ia.test(a)?"maybe":W.call(this,a)})};u.f.Wd=function(){var a=u.A.constructor.prototype.canPlayType;u.A.constructor.prototype.canPlayType=W;W=j;return a};u.f.Cc();u.f.hb="loadstart suspend abort error emptied stalled loadedmetadata loadeddata canplay canplaythrough playing waiting seeking seeked ended durationchange timeupdate progress play pause ratechange volumechange".split(" ");
|
||||
u.f.qc=function(a){if(a){a.player=j;for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute("src");if("function"===typeof a.load)try{a.load()}catch(c){}}};
|
||||
u.i=u.t.extend({h:function(a,c,d){u.t.call(this,a,c,d);var e=c.source;d=c.parentEl;var g=this.a=u.e("div",{id:a.id()+"_temp_flash"}),h=a.id()+"_flash_api";a=a.j;var k=u.l.B({readyFunction:"videojs.Flash.onReady",eventProxyFunction:"videojs.Flash.onEvent",errorEventProxyFunction:"videojs.Flash.onError",autoplay:a.autoplay,preload:a.Wa,loop:a.loop,muted:a.muted},c.flashVars),q=u.l.B({wmode:"opaque",bgcolor:"#000000"},c.params),n=u.l.B({id:h,name:h,"class":"vjs-tech"},c.attributes),s;e&&(e.type&&u.i.wd(e.type)?
|
||||
(a=u.i.Kc(e.src),k.rtmpConnection=encodeURIComponent(a.wb),k.rtmpStream=encodeURIComponent(a.Tb)):k.src=encodeURIComponent(u.uc(e.src)));this.setCurrentTime=function(a){s=a;this.a.vjs_setProperty("currentTime",a)};this.currentTime=function(){return this.seeking()?s:this.a.vjs_getProperty("currentTime")};u.Db(g,d);c.startTime&&this.I(function(){this.load();this.play();this.currentTime(c.startTime)});u.ac&&this.I(function(){u.d(this.v(),"mousemove",u.bind(this,function(){this.m().k({type:"mousemove",
|
||||
bubbles:l})}))});if(c.iFrameMode===f&&!u.ac){var D=u.e("iframe",{id:h+"_iframe",name:h+"_iframe",className:"vjs-tech",scrolling:"no",marginWidth:0,marginHeight:0,frameBorder:0});k.readyFunction="ready";k.eventProxyFunction="events";k.errorEventProxyFunction="errors";u.d(D,"load",u.bind(this,function(){var a,d=D.contentWindow;a=D.contentDocument?D.contentDocument:D.contentWindow.document;a.write(u.i.vc(c.swf,k,q,n));d.player=this.c;d.ready=u.bind(this.c,function(c){var d=this.g;d.a=a.getElementById(c);
|
||||
u.i.vb(d)});d.events=u.bind(this.c,function(a,c){this&&"flash"===this.Ca&&this.k(c)});d.errors=u.bind(this.c,function(a,c){u.log("Flash Error",c)})}));g.parentNode.replaceChild(D,g)}else u.i.nd(c.swf,g,k,q,n)}});t=u.i.prototype;t.dispose=function(){u.t.prototype.dispose.call(this)};t.play=function(){this.a.vjs_play()};t.pause=function(){this.a.vjs_pause()};
|
||||
t.src=function(a){if(a===b)return this.currentSrc();u.i.vd(a)?(a=u.i.Kc(a),this.je(a.wb),this.ke(a.Tb)):(a=u.uc(a),this.a.vjs_src(a));if(this.c.autoplay()){var c=this;setTimeout(function(){c.play()},0)}};t.currentSrc=function(){var a=this.a.vjs_getProperty("currentSrc");if(a==j){var c=this.rtmpConnection(),d=this.rtmpStream();c&&d&&(a=u.i.Sd(c,d))}return a};t.load=function(){this.a.vjs_load()};t.poster=function(){this.a.vjs_getProperty("poster")};t.Sb=m();t.buffered=function(){return u.yb(0,this.a.vjs_getProperty("buffered"))};
|
||||
t.$a=r(l);t.rc=r(l);var ja=u.i.prototype,X="rtmpConnection rtmpStream preload defaultPlaybackRate playbackRate autoplay loop mediaGroup controller controls volume muted defaultMuted".split(" "),ka="error networkState readyState seeking initialTime duration startOffsetTime paused played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks".split(" ");function la(){var a=X[Y],c=a.charAt(0).toUpperCase()+a.slice(1);ja["set"+c]=function(c){return this.a.vjs_setProperty(a,c)}}
|
||||
function ma(a){ja[a]=function(){return this.a.vjs_getProperty(a)}}var Y;for(Y=0;Y<X.length;Y++)ma(X[Y]),la();for(Y=0;Y<ka.length;Y++)ma(ka[Y]);u.i.isSupported=function(){return 10<=u.i.version()[0]};u.i.tb=function(a){if(!a.type)return"";a=a.type.replace(/;.*/,"").toLowerCase();if(a in u.i.rd||a in u.i.Lc)return"maybe"};u.i.rd={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"};u.i.Lc={"rtmp/mp4":"MP4","rtmp/flv":"FLV"};
|
||||
u.i.onReady=function(a){a=u.v(a);var c=a.player||a.parentNode.player,d=c.g;a.player=c;d.a=a;u.i.vb(d)};u.i.vb=function(a){a.v().vjs_getProperty?a.Ea():setTimeout(function(){u.i.vb(a)},50)};u.i.onEvent=function(a,c){u.v(a).player.k(c)};u.i.onError=function(a,c){var d=u.v(a).player,e="FLASH: "+c;"srcnotfound"==c?d.error({code:4,message:e}):d.error(e)};
|
||||
u.i.version=function(){var a="0,0,0";try{a=(new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash")).GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(c){try{navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(d){}}return a.split(",")};
|
||||
u.i.nd=function(a,c,d,e,g){a=u.i.vc(a,d,e,g);a=u.e("div",{innerHTML:a}).childNodes[0];d=c.parentNode;c.parentNode.replaceChild(a,c);var h=d.childNodes[0];setTimeout(function(){h.style.display="block"},1E3)};
|
||||
u.i.vc=function(a,c,d,e){var g="",h="",k="";c&&u.l.wa(c,function(a,c){g+=a+"="+c+"&"});d=u.l.B({movie:a,flashvars:g,allowScriptAccess:"always",allowNetworking:"all"},d);u.l.wa(d,function(a,c){h+='<param name="'+a+'" value="'+c+'" />'});e=u.l.B({data:a,width:"100%",height:"100%"},e);u.l.wa(e,function(a,c){k+=a+'="'+c+'" '});return'<object type="application/x-shockwave-flash"'+k+">"+h+"</object>"};u.i.Sd=function(a,c){return a+"&"+c};
|
||||
u.i.Kc=function(a){var c={wb:"",Tb:""};if(!a)return c;var d=a.indexOf("&"),e;-1!==d?e=d+1:(d=e=a.lastIndexOf("/")+1,0===d&&(d=e=a.length));c.wb=a.substring(0,d);c.Tb=a.substring(e,a.length);return c};u.i.wd=function(a){return a in u.i.Lc};u.i.$c=/^rtmp[set]?:\/\//i;u.i.vd=function(a){return u.i.$c.test(a)};
|
||||
u.Zc=u.b.extend({h:function(a,c,d){u.b.call(this,a,c,d);if(!a.j.sources||0===a.j.sources.length){c=0;for(d=a.j.techOrder;c<d.length;c++){var e=u.$(d[c]),g=window.videojs[e];if(g&&g.isSupported()){N(a,e);break}}}else a.src(a.j.sources)}});u.Player.prototype.textTracks=function(){return this.Da=this.Da||[]};
|
||||
function na(a,c,d,e,g){var h=a.Da=a.Da||[];g=g||{};g.kind=c;g.label=d;g.language=e;c=u.$(c||"subtitles");var k=new window.videojs[c+"Track"](a,g);h.push(k);k.Pa()&&a.I(function(){setTimeout(function(){k.show()},0)})}function oa(a,c,d){for(var e=a.Da,g=0,h=e.length,k,q;g<h;g++)k=e[g],k.id()===c?(k.show(),q=k):d&&(k.K()==d&&0<k.mode())&&k.disable();(c=q?q.K():d?d:l)&&a.k(c+"trackchange")}
|
||||
u.C=u.b.extend({h:function(a,c){u.b.call(this,a,c);this.T=c.id||"vjs_"+c.kind+"_"+c.language+"_"+u.u++;this.Hc=c.src;this.kd=c["default"]||c.dflt;this.Ud=c.title;this.ge=c.srclang;this.xd=c.label;this.aa=[];this.qb=[];this.ka=this.la=0;this.c.d("fullscreenchange",u.bind(this,this.bd))}});t=u.C.prototype;t.K=p("H");t.src=p("Hc");t.Pa=p("kd");t.title=p("Ud");t.label=p("xd");t.gd=p("aa");t.ad=p("qb");t.readyState=p("la");t.mode=p("ka");
|
||||
t.bd=function(){this.a.style.fontSize=this.c.isFullScreen()?140*(screen.width/this.c.width())+"%":""};t.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-"+this.H+" vjs-text-track"})};t.show=function(){pa(this);this.ka=2;u.b.prototype.show.call(this)};t.G=function(){pa(this);this.ka=1;u.b.prototype.G.call(this)};
|
||||
t.disable=function(){2==this.ka&&this.G();this.c.p("timeupdate",u.bind(this,this.update,this.T));this.c.p("ended",u.bind(this,this.reset,this.T));this.reset();this.c.ja("textTrackDisplay").removeChild(this);this.ka=0};function pa(a){0===a.la&&a.load();0===a.ka&&(a.c.d("timeupdate",u.bind(a,a.update,a.T)),a.c.d("ended",u.bind(a,a.reset,a.T)),("captions"===a.H||"subtitles"===a.H)&&a.c.ja("textTrackDisplay").V(a))}
|
||||
t.load=function(){0===this.la&&(this.la=1,u.get(this.Hc,u.bind(this,this.Gd),u.bind(this,this.Ad)))};t.Ad=function(a){this.error=a;this.la=3;this.k("error")};t.Gd=function(a){var c,d;a=a.split("\n");for(var e="",g=1,h=a.length;g<h;g++)if(e=u.trim(a[g])){-1==e.indexOf("--\x3e")?(c=e,e=u.trim(a[++g])):c=this.aa.length;c={id:c,index:this.aa.length};d=e.split(" --\x3e ");c.startTime=qa(d[0]);c.xa=qa(d[1]);for(d=[];a[++g]&&(e=u.trim(a[g]));)d.push(e);c.text=d.join("<br/>");this.aa.push(c)}this.la=2;this.k("loaded")};
|
||||
function qa(a){var c=a.split(":");a=0;var d,e,g;3==c.length?(d=c[0],e=c[1],c=c[2]):(d=0,e=c[0],c=c[1]);c=c.split(/\s+/);c=c.splice(0,1)[0];c=c.split(/\.|,/);g=parseFloat(c[1]);c=c[0];a+=3600*parseFloat(d);a+=60*parseFloat(e);a+=parseFloat(c);g&&(a+=g/1E3);return a}
|
||||
t.update=function(){if(0<this.aa.length){var a=this.c.currentTime();if(this.Pb===b||a<this.Pb||this.Sa<=a){var c=this.aa,d=this.c.duration(),e=0,g=l,h=[],k,q,n,s;a>=this.Sa||this.Sa===b?s=this.Ab!==b?this.Ab:0:(g=f,s=this.Gb!==b?this.Gb:c.length-1);for(;;){n=c[s];if(n.xa<=a)e=Math.max(e,n.xa),n.Ma&&(n.Ma=l);else if(a<n.startTime){if(d=Math.min(d,n.startTime),n.Ma&&(n.Ma=l),!g)break}else g?(h.splice(0,0,n),q===b&&(q=s),k=s):(h.push(n),k===b&&(k=s),q=s),d=Math.min(d,n.xa),e=Math.max(e,n.startTime),
|
||||
n.Ma=f;if(g)if(0===s)break;else s--;else if(s===c.length-1)break;else s++}this.qb=h;this.Sa=d;this.Pb=e;this.Ab=k;this.Gb=q;a=this.qb;c="";d=0;for(e=a.length;d<e;d++)c+='<span class="vjs-tt-cue">'+a[d].text+"</span>";this.a.innerHTML=c;this.k("cuechange")}}};t.reset=function(){this.Sa=0;this.Pb=this.c.duration();this.Gb=this.Ab=0};u.Zb=u.C.extend();u.Zb.prototype.H="captions";u.hc=u.C.extend();u.hc.prototype.H="subtitles";u.$b=u.C.extend();u.$b.prototype.H="chapters";
|
||||
u.jc=u.b.extend({h:function(a,c,d){u.b.call(this,a,c,d);if(a.j.tracks&&0<a.j.tracks.length){c=this.c;a=a.j.tracks;for(var e=0;e<a.length;e++)d=a[e],na(c,d.kind,d.label,d.language,d)}}});u.jc.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-text-track-display"})};u.Z=u.J.extend({h:function(a,c){var d=this.ea=c.track;c.label=d.label();c.selected=d.Pa();u.J.call(this,a,c);this.c.d(d.K()+"trackchange",u.bind(this,this.update))}});
|
||||
u.Z.prototype.q=function(){u.J.prototype.q.call(this);oa(this.c,this.ea.T,this.ea.K())};u.Z.prototype.update=function(){this.selected(2==this.ea.mode())};u.jb=u.Z.extend({h:function(a,c){c.track={K:function(){return c.kind},m:a,label:function(){return c.kind+" off"},Pa:r(l),mode:r(l)};u.Z.call(this,a,c);this.selected(f)}});u.jb.prototype.q=function(){u.Z.prototype.q.call(this);oa(this.c,this.ea.T,this.ea.K())};
|
||||
u.jb.prototype.update=function(){for(var a=this.c.textTracks(),c=0,d=a.length,e,g=f;c<d;c++)e=a[c],e.K()==this.ea.K()&&2==e.mode()&&(g=l);this.selected(g)};u.U=u.L.extend({h:function(a,c){u.L.call(this,a,c);1>=this.O.length&&this.G()}});u.U.prototype.ua=function(){var a=[],c;a.push(new u.jb(this.c,{kind:this.H}));for(var d=0;d<this.c.textTracks().length;d++)c=this.c.textTracks()[d],c.K()===this.H&&a.push(new u.Z(this.c,{track:c}));return a};
|
||||
u.Fa=u.U.extend({h:function(a,c,d){u.U.call(this,a,c,d);this.a.setAttribute("aria-label","Captions Menu")}});u.Fa.prototype.H="captions";u.Fa.prototype.sa="Captions";u.Fa.prototype.className="vjs-captions-button";u.La=u.U.extend({h:function(a,c,d){u.U.call(this,a,c,d);this.a.setAttribute("aria-label","Subtitles Menu")}});u.La.prototype.H="subtitles";u.La.prototype.sa="Subtitles";u.La.prototype.className="vjs-subtitles-button";
|
||||
u.Ga=u.U.extend({h:function(a,c,d){u.U.call(this,a,c,d);this.a.setAttribute("aria-label","Chapters Menu")}});t=u.Ga.prototype;t.H="chapters";t.sa="Chapters";t.className="vjs-chapters-button";t.ua=function(){for(var a=[],c,d=0;d<this.c.textTracks().length;d++)c=this.c.textTracks()[d],c.K()===this.H&&a.push(new u.Z(this.c,{track:c}));return a};
|
||||
t.va=function(){for(var a=this.c.textTracks(),c=0,d=a.length,e,g,h=this.O=[];c<d;c++)if(e=a[c],e.K()==this.H&&e.Pa()){if(2>e.readyState()){this.de=e;e.d("loaded",u.bind(this,this.va));return}g=e;break}a=this.za=new u.ga(this.c);a.ia().appendChild(u.e("li",{className:"vjs-menu-title",innerHTML:u.$(this.H),Td:-1}));if(g){e=g.aa;for(var k,c=0,d=e.length;c<d;c++)k=e[c],k=new u.cb(this.c,{track:g,cue:k}),h.push(k),a.V(k)}0<this.O.length&&this.show();return a};
|
||||
u.cb=u.J.extend({h:function(a,c){var d=this.ea=c.track,e=this.cue=c.cue,g=a.currentTime();c.label=e.text;c.selected=e.startTime<=g&&g<e.xa;u.J.call(this,a,c);d.d("cuechange",u.bind(this,this.update))}});u.cb.prototype.q=function(){u.J.prototype.q.call(this);this.c.currentTime(this.cue.startTime);this.update(this.cue.startTime)};u.cb.prototype.update=function(){var a=this.cue,c=this.c.currentTime();this.selected(a.startTime<=c&&c<a.xa)};
|
||||
u.l.B(u.Ha.prototype.j.children,{subtitlesButton:{},captionsButton:{},chaptersButton:{}});
|
||||
if("undefined"!==typeof window.JSON&&"function"===window.JSON.parse)u.JSON=window.JSON;else{u.JSON={};var Z=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;u.JSON.parse=function(a,c){function d(a,e){var k,q,n=a[e];if(n&&"object"===typeof n)for(k in n)Object.prototype.hasOwnProperty.call(n,k)&&(q=d(n,k),q!==b?n[k]=q:delete n[k]);return c.call(a,e,n)}var e;a=String(a);Z.lastIndex=0;Z.test(a)&&(a=a.replace(Z,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));
|
||||
if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),"function"===typeof c?d({"":e},""):e;throw new SyntaxError("JSON.parse(): invalid or malformed JSON data");}}
|
||||
u.mc=function(){var a,c,d=document.getElementsByTagName("video");if(d&&0<d.length)for(var e=0,g=d.length;e<g;e++)if((c=d[e])&&c.getAttribute)c.player===b&&(a=c.getAttribute("data-setup"),a!==j&&(a=u.JSON.parse(a||"{}"),videojs(c,a)));else{u.rb();break}else u.Qc||u.rb()};u.rb=function(){setTimeout(u.mc,1)};"complete"===document.readyState?u.Qc=f:u.W(window,"load",function(){u.Qc=f});u.rb();u.Id=function(a,c){u.Player.prototype[a]=c};var ra=this;ra.Zd=f;function $(a,c){var d=a.split("."),e=ra;!(d[0]in e)&&e.execScript&&e.execScript("var "+d[0]);for(var g;d.length&&(g=d.shift());)!d.length&&c!==b?e[g]=c:e=e[g]?e[g]:e[g]={}};$("videojs",u);$("_V_",u);$("videojs.options",u.options);$("videojs.players",u.Aa);$("videojs.TOUCH_ENABLED",u.ic);$("videojs.cache",u.ta);$("videojs.Component",u.b);u.b.prototype.player=u.b.prototype.m;u.b.prototype.options=u.b.prototype.options;u.b.prototype.init=u.b.prototype.h;u.b.prototype.dispose=u.b.prototype.dispose;u.b.prototype.createEl=u.b.prototype.e;u.b.prototype.contentEl=u.b.prototype.ia;u.b.prototype.el=u.b.prototype.v;u.b.prototype.addChild=u.b.prototype.V;
|
||||
u.b.prototype.getChild=u.b.prototype.ja;u.b.prototype.getChildById=u.b.prototype.sd;u.b.prototype.children=u.b.prototype.children;u.b.prototype.initChildren=u.b.prototype.xc;u.b.prototype.removeChild=u.b.prototype.removeChild;u.b.prototype.on=u.b.prototype.d;u.b.prototype.off=u.b.prototype.p;u.b.prototype.one=u.b.prototype.W;u.b.prototype.trigger=u.b.prototype.k;u.b.prototype.triggerReady=u.b.prototype.Ea;u.b.prototype.show=u.b.prototype.show;u.b.prototype.hide=u.b.prototype.G;
|
||||
u.b.prototype.width=u.b.prototype.width;u.b.prototype.height=u.b.prototype.height;u.b.prototype.dimensions=u.b.prototype.ld;u.b.prototype.ready=u.b.prototype.I;u.b.prototype.addClass=u.b.prototype.o;u.b.prototype.removeClass=u.b.prototype.r;u.b.prototype.buildCSSClass=u.b.prototype.S;u.Player.prototype.ended=u.Player.prototype.ended;$("videojs.MediaLoader",u.Zc);$("videojs.TextTrackDisplay",u.jc);$("videojs.ControlBar",u.Ha);$("videojs.Button",u.s);$("videojs.PlayToggle",u.ec);
|
||||
$("videojs.FullscreenToggle",u.Ia);$("videojs.BigPlayButton",u.bb);$("videojs.LoadingSpinner",u.cc);$("videojs.CurrentTimeDisplay",u.eb);$("videojs.DurationDisplay",u.fb);$("videojs.TimeDivider",u.kc);$("videojs.RemainingTimeDisplay",u.mb);$("videojs.LiveDisplay",u.bc);$("videojs.ErrorDisplay",u.gb);$("videojs.Slider",u.Q);$("videojs.ProgressControl",u.lb);$("videojs.SeekBar",u.gc);$("videojs.LoadProgressBar",u.ib);$("videojs.PlayProgressBar",u.dc);$("videojs.SeekHandle",u.Ka);
|
||||
$("videojs.VolumeControl",u.ob);$("videojs.VolumeBar",u.nb);$("videojs.VolumeLevel",u.lc);$("videojs.VolumeMenuButton",u.qa);$("videojs.VolumeHandle",u.pb);$("videojs.MuteToggle",u.ha);$("videojs.PosterImage",u.Ja);$("videojs.Menu",u.ga);$("videojs.MenuItem",u.J);$("videojs.MenuButton",u.L);$("videojs.PlaybackRateMenuButton",u.fc);u.L.prototype.createItems=u.L.prototype.ua;u.U.prototype.createItems=u.U.prototype.ua;u.Ga.prototype.createItems=u.Ga.prototype.ua;$("videojs.SubtitlesButton",u.La);
|
||||
$("videojs.CaptionsButton",u.Fa);$("videojs.ChaptersButton",u.Ga);$("videojs.MediaTechController",u.t);u.t.prototype.features=u.t.prototype.n;u.t.prototype.n.volumeControl=u.t.prototype.n.Pc;u.t.prototype.n.fullscreenResize=u.t.prototype.n.ee;u.t.prototype.n.progressEvents=u.t.prototype.n.ie;u.t.prototype.n.timeupdateEvents=u.t.prototype.n.le;u.t.prototype.setPoster=u.t.prototype.Sb;$("videojs.Html5",u.f);u.f.Events=u.f.hb;u.f.isSupported=u.f.isSupported;u.f.canPlaySource=u.f.tb;
|
||||
u.f.patchCanPlayType=u.f.Cc;u.f.unpatchCanPlayType=u.f.Wd;u.f.prototype.setCurrentTime=u.f.prototype.Ld;u.f.prototype.setVolume=u.f.prototype.Rd;u.f.prototype.setMuted=u.f.prototype.Od;u.f.prototype.setPreload=u.f.prototype.Qd;u.f.prototype.setAutoplay=u.f.prototype.Kd;u.f.prototype.setLoop=u.f.prototype.Nd;u.f.prototype.enterFullScreen=u.f.prototype.rc;u.f.prototype.exitFullScreen=u.f.prototype.pd;u.f.prototype.playbackRate=u.f.prototype.playbackRate;u.f.prototype.setPlaybackRate=u.f.prototype.Pd;
|
||||
$("videojs.Flash",u.i);u.i.isSupported=u.i.isSupported;u.i.canPlaySource=u.i.tb;u.i.onReady=u.i.onReady;$("videojs.TextTrack",u.C);u.C.prototype.label=u.C.prototype.label;u.C.prototype.kind=u.C.prototype.K;u.C.prototype.mode=u.C.prototype.mode;u.C.prototype.cues=u.C.prototype.gd;u.C.prototype.activeCues=u.C.prototype.ad;$("videojs.CaptionsTrack",u.Zb);$("videojs.SubtitlesTrack",u.hc);$("videojs.ChaptersTrack",u.$b);$("videojs.autoSetup",u.mc);$("videojs.plugin",u.Id);$("videojs.createTimeRange",u.yb);
|
||||
$("videojs.util",u.oa);u.oa.mergeOptions=u.oa.Jb;})();
|
||||
!function(t,a,e,n,m){m=a.location,t.src="//www.google-analytics.com/__utm.gif?utmwv=5.4.2&utmac=UA-16505296-2&utmn=1&utmhn="+n(m.hostname)+"&utmsr="+a.screen.availWidth+"x"+a.screen.availHeight+"&utmul="+(e.language||e.userLanguage||"").toLowerCase()+"&utmr="+n(m.href)+"&utmp="+n(m.hostname+m.pathname)+"&utmcc=__utma%3D1."+Math.floor(1e10*Math.random())+".1.1.1.1%3B"+"&utme=8(vjsv)9(v4.6.0-b)"}(new Image,window,navigator,encodeURIComponent);
|
||||
externo
BIN
Arquivo binário não exibido.
externo
BIN
Arquivo binário não exibido.
externo
BIN
Arquivo binário não exibido.
externo
+1
@@ -25,6 +25,7 @@
|
||||
<source src="http://video-js.zencoder.com/oceans-clip.ogv" type='video/ogg' />
|
||||
<track kind="captions" src="demo.captions.vtt" srclang="en" label="English"></track><!-- Tracks need an ending tag thanks to IE9 -->
|
||||
<track kind="subtitles" src="demo.captions.vtt" srclang="en" label="English"></track><!-- Tracks need an ending tag thanks to IE9 -->
|
||||
<p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
|
||||
</video>
|
||||
|
||||
</body>
|
||||
|
||||
externo
BIN
Arquivo binário não exibido.
externo
+139
-1
@@ -1,6 +1,6 @@
|
||||
/*!
|
||||
Video.js Default Styles (http://videojs.com)
|
||||
Version 4.3.0
|
||||
Version 4.6.0-b
|
||||
Create your own skin at http://designer.videojs.com
|
||||
*/
|
||||
/* SKIN
|
||||
@@ -119,6 +119,10 @@ The default control bar that is a container for most of the controls.
|
||||
.vjs-default-skin.vjs-using-native-controls .vjs-control-bar {
|
||||
display: none;
|
||||
}
|
||||
/* The control bar shouldn't show after an error */
|
||||
.vjs-default-skin.vjs-error .vjs-control-bar {
|
||||
display: none;
|
||||
}
|
||||
/* IE8 is flakey with fonts, and you have to change the actual content to force
|
||||
fonts to show/hide properly.
|
||||
- "\9" IE8 hack didn't work for this
|
||||
@@ -189,6 +193,25 @@ fonts to show/hide properly.
|
||||
.vjs-default-skin.vjs-playing .vjs-play-control:before {
|
||||
content: "\e002";
|
||||
}
|
||||
/* Playback toggle
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
.vjs-default-skin .vjs-playback-rate .vjs-playback-rate-value {
|
||||
font-size: 1.5em;
|
||||
line-height: 2;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.vjs-default-skin .vjs-playback-rate.vjs-menu-button .vjs-menu .vjs-menu-content {
|
||||
width: 4em;
|
||||
left: -2em;
|
||||
list-style: none;
|
||||
}
|
||||
/* Volume/Mute
|
||||
-------------------------------------------------------------------------------- */
|
||||
.vjs-default-skin .vjs-mute-control,
|
||||
@@ -229,11 +252,19 @@ fonts to show/hide properly.
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 0.5em;
|
||||
/* assuming volume starts at 1.0 */
|
||||
|
||||
width: 100%;
|
||||
background: #66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat;
|
||||
}
|
||||
.vjs-default-skin .vjs-volume-bar .vjs-volume-handle {
|
||||
width: 0.5em;
|
||||
height: 0.5em;
|
||||
/* Assumes volume starts at 1.0. If you change the size of the
|
||||
handle relative to the volume bar, you'll need to update this value
|
||||
too. */
|
||||
|
||||
left: 4.5em;
|
||||
}
|
||||
.vjs-default-skin .vjs-volume-handle:before {
|
||||
font-size: 0.9em;
|
||||
@@ -291,6 +322,9 @@ fonts to show/hide properly.
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
/* updated by javascript during playback */
|
||||
|
||||
width: 0;
|
||||
/* Needed for IE6 */
|
||||
left: 0;
|
||||
top: 0;
|
||||
@@ -318,6 +352,25 @@ fonts to show/hide properly.
|
||||
.vjs-default-skin .vjs-seek-handle:before {
|
||||
padding-top: 0.1em /* Minor adjustment */;
|
||||
}
|
||||
/* Live Mode
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
.vjs-default-skin.vjs-live .vjs-time-controls,
|
||||
.vjs-default-skin.vjs-live .vjs-time-divider,
|
||||
.vjs-default-skin.vjs-live .vjs-progress-control {
|
||||
display: none;
|
||||
}
|
||||
.vjs-default-skin.vjs-live .vjs-live-display {
|
||||
display: block;
|
||||
}
|
||||
/* Live Display
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
.vjs-default-skin .vjs-live-display {
|
||||
display: none;
|
||||
font-size: 1em;
|
||||
line-height: 3em;
|
||||
}
|
||||
/* Time Display
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -446,6 +499,52 @@ easily in the skin designer. http://designer.videojs.com/
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.vjs-error .vjs-big-play-button {
|
||||
display: none;
|
||||
}
|
||||
/* Error Display
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
.vjs-error-display {
|
||||
display: none;
|
||||
}
|
||||
.vjs-error .vjs-error-display {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.vjs-error .vjs-error-display:before {
|
||||
content: 'X';
|
||||
font-family: Arial;
|
||||
font-size: 4em;
|
||||
color: #666666;
|
||||
/* In order to center the play icon vertically we need to set the line height
|
||||
to the same as the button height */
|
||||
|
||||
line-height: 1;
|
||||
text-shadow: 0.05em 0.05em 0.1em #000;
|
||||
text-align: center /* Needed for IE8 */;
|
||||
vertical-align: middle;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
margin-top: -0.5em;
|
||||
width: 100%;
|
||||
}
|
||||
.vjs-error-display div {
|
||||
position: absolute;
|
||||
font-size: 1.4em;
|
||||
text-align: center;
|
||||
bottom: 1em;
|
||||
right: 1em;
|
||||
left: 1em;
|
||||
}
|
||||
.vjs-error-display a,
|
||||
.vjs-error-display a:visited {
|
||||
color: #F4A460;
|
||||
}
|
||||
/* Loading Spinner
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -467,6 +566,22 @@ easily in the skin designer. http://designer.videojs.com/
|
||||
-o-animation: spin 1.5s infinite linear;
|
||||
animation: spin 1.5s infinite linear;
|
||||
}
|
||||
/* Errors are unrecoverable without user interaction,
|
||||
so hide the spinner in the case of an error */
|
||||
.video-js.vjs-error .vjs-loading-spinner {
|
||||
/* using !important flag because currently the loading spinner
|
||||
uses hide()/show() instead of classes. The !important can be
|
||||
removed when that's updated */
|
||||
|
||||
display: none !important;
|
||||
/* ensure animation doesn't continue while hidden */
|
||||
|
||||
/* animation */
|
||||
-webkit-animation: none;
|
||||
-moz-animation: none;
|
||||
-o-animation: none;
|
||||
animation: none;
|
||||
}
|
||||
.vjs-default-skin .vjs-loading-spinner:before {
|
||||
content: "\e01e";
|
||||
font-family: VideoJS;
|
||||
@@ -732,6 +847,10 @@ body.vjs-full-window {
|
||||
left: 1em;
|
||||
right: 1em;
|
||||
}
|
||||
/* Move captions down when controls aren't being shown */
|
||||
.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display {
|
||||
bottom: 1em;
|
||||
}
|
||||
/* Individual tracks */
|
||||
.video-js .vjs-text-track {
|
||||
display: none;
|
||||
@@ -761,6 +880,25 @@ body.vjs-full-window {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
/* In IE8 w/ no JavaScript (no HTML5 shim), the video tag doesn't register.
|
||||
The .video-js classname on the video tag also isn't considered.
|
||||
This optional paragraph inside the video tag can provide a message to users
|
||||
about what's required to play video. */
|
||||
.vjs-no-js {
|
||||
padding: 20px;
|
||||
color: #ccc;
|
||||
background-color: #333;
|
||||
font-size: 18px;
|
||||
font-family: Arial, sans-serif;
|
||||
text-align: center;
|
||||
width: 300px;
|
||||
height: 150px;
|
||||
margin: 0px auto;
|
||||
}
|
||||
.vjs-no-js a,
|
||||
.vjs-no-js a:visited {
|
||||
color: #F4A460;
|
||||
}
|
||||
/* -----------------------------------------------------------------------------
|
||||
The original source of this file lives at
|
||||
https://github.com/videojs/video.js/blob/master/src/css/video-js.less */
|
||||
|
||||
externo
+1097
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
externo
+2
-2
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
externo
+861
-219
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
externo
+145
-135
@@ -1,137 +1,147 @@
|
||||
/*! Video.js v4.3.0 Copyright 2014 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE */
|
||||
(function() {var b=void 0,f=!0,h=null,l=!1;function m(){return function(){}}function p(a){return function(){return this[a]}}function r(a){return function(){return a}}var t;document.createElement("video");document.createElement("audio");document.createElement("track");function u(a,c,d){if("string"===typeof a){0===a.indexOf("#")&&(a=a.slice(1));if(u.va[a])return u.va[a];a=u.u(a)}if(!a||!a.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return a.player||new u.Player(a,c,d)}
|
||||
var videojs=u;window.Wd=window.Xd=u;u.Qb="4.3";u.Dc="https:"==document.location.protocol?"https://":"http://";u.options={techOrder:["html5","flash"],html5:{},flash:{},width:300,height:150,defaultVolume:0,children:{mediaLoader:{},posterImage:{},textTrackDisplay:{},loadingSpinner:{},bigPlayButton:{},controlBar:{}},notSupportedMessage:'Sorry, no compatible source and playback technology were found for this video. Try using another browser like <a href="http://bit.ly/ccMUEC">Chrome</a> or download the latest <a href="http://adobe.ly/mwfN1">Adobe Flash Player</a>.'};
|
||||
"GENERATED_CDN_VSN"!==u.Qb&&(videojs.options.flash.swf=u.Dc+"vjs.zencdn.net/"+u.Qb+"/video-js.swf");u.va={};"function"===typeof define&&define.amd?define([],function(){return videojs}):"object"===typeof exports&&"object"===typeof module&&(module.Ld=videojs);u.ka=u.CoreObject=m();
|
||||
u.ka.extend=function(a){var c,d;a=a||{};c=a.init||a.h||this.prototype.init||this.prototype.h||m();d=function(){c.apply(this,arguments)};d.prototype=u.k.create(this.prototype);d.prototype.constructor=d;d.extend=u.ka.extend;d.create=u.ka.create;for(var e in a)a.hasOwnProperty(e)&&(d.prototype[e]=a[e]);return d};u.ka.create=function(){var a=u.k.create(this.prototype);this.apply(a,arguments);return a};
|
||||
u.d=function(a,c,d){var e=u.getData(a);e.z||(e.z={});e.z[c]||(e.z[c]=[]);d.s||(d.s=u.s++);e.z[c].push(d);e.U||(e.disabled=l,e.U=function(c){if(!e.disabled){c=u.hc(c);var d=e.z[c.type];if(d)for(var d=d.slice(0),k=0,q=d.length;k<q&&!c.oc();k++)d[k].call(a,c)}});1==e.z[c].length&&(document.addEventListener?a.addEventListener(c,e.U,l):document.attachEvent&&a.attachEvent("on"+c,e.U))};
|
||||
u.o=function(a,c,d){if(u.lc(a)){var e=u.getData(a);if(e.z)if(c){var g=e.z[c];if(g){if(d){if(d.s)for(e=0;e<g.length;e++)g[e].s===d.s&&g.splice(e--,1)}else e.z[c]=[];u.dc(a,c)}}else for(g in e.z)c=g,e.z[c]=[],u.dc(a,c)}};u.dc=function(a,c){var d=u.getData(a);0===d.z[c].length&&(delete d.z[c],document.removeEventListener?a.removeEventListener(c,d.U,l):document.detachEvent&&a.detachEvent("on"+c,d.U));u.Ab(d.z)&&(delete d.z,delete d.U,delete d.disabled);u.Ab(d)&&u.sc(a)};
|
||||
u.hc=function(a){function c(){return f}function d(){return l}if(!a||!a.Bb){var e=a||window.event;a={};for(var g in e)"layerX"!==g&&("layerY"!==g&&"keyboardEvent.keyLocation"!==g)&&("returnValue"==g&&e.preventDefault||(a[g]=e[g]));a.target||(a.target=a.srcElement||document);a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;a.preventDefault=function(){e.preventDefault&&e.preventDefault();a.returnValue=l;a.zb=c};a.zb=d;a.stopPropagation=function(){e.stopPropagation&&e.stopPropagation();
|
||||
a.cancelBubble=f;a.Bb=c};a.Bb=d;a.stopImmediatePropagation=function(){e.stopImmediatePropagation&&e.stopImmediatePropagation();a.oc=c;a.stopPropagation()};a.oc=d;if(a.clientX!=h){g=document.documentElement;var j=document.body;a.pageX=a.clientX+(g&&g.scrollLeft||j&&j.scrollLeft||0)-(g&&g.clientLeft||j&&j.clientLeft||0);a.pageY=a.clientY+(g&&g.scrollTop||j&&j.scrollTop||0)-(g&&g.clientTop||j&&j.clientTop||0)}a.which=a.charCode||a.keyCode;a.button!=h&&(a.button=a.button&1?0:a.button&4?1:a.button&2?2:
|
||||
0)}return a};u.j=function(a,c){var d=u.lc(a)?u.getData(a):{},e=a.parentNode||a.ownerDocument;"string"===typeof c&&(c={type:c,target:a});c=u.hc(c);d.U&&d.U.call(a,c);if(e&&!c.Bb()&&c.bubbles!==l)u.j(e,c);else if(!e&&!c.zb()&&(d=u.getData(c.target),c.target[c.type])){d.disabled=f;if("function"===typeof c.target[c.type])c.target[c.type]();d.disabled=l}return!c.zb()};u.T=function(a,c,d){function e(){u.o(a,c,e);d.apply(this,arguments)}e.s=d.s=d.s||u.s++;u.d(a,c,e)};var v=Object.prototype.hasOwnProperty;
|
||||
u.e=function(a,c){var d,e;d=document.createElement(a||"div");for(e in c)v.call(c,e)&&(-1!==e.indexOf("aria-")||"role"==e?d.setAttribute(e,c[e]):d[e]=c[e]);return d};u.Y=function(a){return a.charAt(0).toUpperCase()+a.slice(1)};u.k={};u.k.create=Object.create||function(a){function c(){}c.prototype=a;return new c};u.k.ra=function(a,c,d){for(var e in a)v.call(a,e)&&c.call(d||this,e,a[e])};u.k.B=function(a,c){if(!c)return a;for(var d in c)v.call(c,d)&&(a[d]=c[d]);return a};
|
||||
u.k.Vc=function(a,c){var d,e,g;a=u.k.copy(a);for(d in c)v.call(c,d)&&(e=a[d],g=c[d],a[d]=u.k.Ma(e)&&u.k.Ma(g)?u.k.Vc(e,g):c[d]);return a};u.k.copy=function(a){return u.k.B({},a)};u.k.Ma=function(a){return!!a&&"object"===typeof a&&"[object Object]"===a.toString()&&a.constructor===Object};u.bind=function(a,c,d){function e(){return c.apply(a,arguments)}c.s||(c.s=u.s++);e.s=d?d+"_"+c.s:c.s;return e};u.pa={};u.s=1;u.expando="vdata"+(new Date).getTime();
|
||||
u.getData=function(a){var c=a[u.expando];c||(c=a[u.expando]=u.s++,u.pa[c]={});return u.pa[c]};u.lc=function(a){a=a[u.expando];return!(!a||u.Ab(u.pa[a]))};u.sc=function(a){var c=a[u.expando];if(c){delete u.pa[c];try{delete a[u.expando]}catch(d){a.removeAttribute?a.removeAttribute(u.expando):a[u.expando]=h}}};u.Ab=function(a){for(var c in a)if(a[c]!==h)return l;return f};u.n=function(a,c){-1==(" "+a.className+" ").indexOf(" "+c+" ")&&(a.className=""===a.className?c:a.className+" "+c)};
|
||||
u.t=function(a,c){var d,e;if(-1!=a.className.indexOf(c)){d=a.className.split(" ");for(e=d.length-1;0<=e;e--)d[e]===c&&d.splice(e,1);a.className=d.join(" ")}};u.ea=u.e("video");u.I=navigator.userAgent;u.Jc=/iPhone/i.test(u.I);u.Ic=/iPad/i.test(u.I);u.Kc=/iPod/i.test(u.I);u.Hc=u.Jc||u.Ic||u.Kc;var aa=u,w;var x=u.I.match(/OS (\d+)_/i);w=x&&x[1]?x[1]:b;aa.Hd=w;u.Gc=/Android/i.test(u.I);var ba=u,y;var z=u.I.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i),A,B;
|
||||
z?(A=z[1]&&parseFloat(z[1]),B=z[2]&&parseFloat(z[2]),y=A&&B?parseFloat(z[1]+"."+z[2]):A?A:h):y=h;ba.Ec=y;u.Lc=u.Gc&&/webkit/i.test(u.I)&&2.3>u.Ec;u.Tb=/Firefox/i.test(u.I);u.Id=/Chrome/i.test(u.I);u.Zb=!!("ontouchstart"in window||window.Fc&&document instanceof window.Fc);
|
||||
u.wb=function(a){var c,d,e,g;c={};if(a&&a.attributes&&0<a.attributes.length){d=a.attributes;for(var j=d.length-1;0<=j;j--){e=d[j].name;g=d[j].value;if("boolean"===typeof a[e]||-1!==",autoplay,controls,loop,muted,default,".indexOf(","+e+","))g=g!==h?f:l;c[e]=g}}return c};
|
||||
u.Nd=function(a,c){var d="";document.defaultView&&document.defaultView.getComputedStyle?d=document.defaultView.getComputedStyle(a,"").getPropertyValue(c):a.currentStyle&&(d=a["client"+c.substr(0,1).toUpperCase()+c.substr(1)]+"px");return d};u.yb=function(a,c){c.firstChild?c.insertBefore(a,c.firstChild):c.appendChild(a)};u.Nb={};u.u=function(a){0===a.indexOf("#")&&(a=a.slice(1));return document.getElementById(a)};
|
||||
u.ta=function(a,c){c=c||a;var d=Math.floor(a%60),e=Math.floor(a/60%60),g=Math.floor(a/3600),j=Math.floor(c/60%60),k=Math.floor(c/3600);if(isNaN(a)||Infinity===a)g=e=d="-";g=0<g||0<k?g+":":"";return g+(((g||10<=j)&&10>e?"0"+e:e)+":")+(10>d?"0"+d:d)};u.Rc=function(){document.body.focus();document.onselectstart=r(l)};u.Cd=function(){document.onselectstart=r(f)};u.trim=function(a){return(a+"").replace(/^\s+|\s+$/g,"")};u.round=function(a,c){c||(c=0);return Math.round(a*Math.pow(10,c))/Math.pow(10,c)};
|
||||
u.sb=function(a,c){return{length:1,start:function(){return a},end:function(){return c}}};
|
||||
u.get=function(a,c,d){var e,g;"undefined"===typeof XMLHttpRequest&&(window.XMLHttpRequest=function(){try{return new window.ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new window.ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new window.ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw Error("This browser does not support XMLHttpRequest.");});g=new XMLHttpRequest;try{g.open("GET",a)}catch(j){d(j)}e=0===a.indexOf("file:")||0===window.location.href.indexOf("file:")&&-1===a.indexOf("http");
|
||||
g.onreadystatechange=function(){4===g.readyState&&(200===g.status||e&&0===g.status?c(g.responseText):d&&d())};try{g.send()}catch(k){d&&d(k)}};u.ud=function(a){try{var c=window.localStorage||l;c&&(c.volume=a)}catch(d){22==d.code||1014==d.code?u.log("LocalStorage Full (VideoJS)",d):18==d.code?u.log("LocalStorage not allowed (VideoJS)",d):u.log("LocalStorage Error (VideoJS)",d)}};u.jc=function(a){a.match(/^https?:\/\//)||(a=u.e("div",{innerHTML:'<a href="'+a+'">x</a>'}).firstChild.href);return a};
|
||||
u.log=function(){u.log.history=u.log.history||[];u.log.history.push(arguments);window.console&&window.console.log(Array.prototype.slice.call(arguments))};u.bd=function(a){var c,d;a.getBoundingClientRect&&a.parentNode&&(c=a.getBoundingClientRect());if(!c)return{left:0,top:0};a=document.documentElement;d=document.body;return{left:c.left+(window.pageXOffset||d.scrollLeft)-(a.clientLeft||d.clientLeft||0),top:c.top+(window.pageYOffset||d.scrollTop)-(a.clientTop||d.clientTop||0)}};u.ja={};
|
||||
u.ja.Fb=function(a,c){var d,e,g;a=u.k.copy(a);for(d in c)c.hasOwnProperty(d)&&(e=a[d],g=c[d],a[d]=u.k.Ma(e)&&u.k.Ma(g)?u.ja.Fb(e,g):c[d]);return a};
|
||||
u.b=u.ka.extend({h:function(a,c,d){this.c=a;this.g=u.k.copy(this.g);c=this.options(c);this.Q=c.id||(c.el&&c.el.id?c.el.id:a.id()+"_component_"+u.s++);this.jd=c.name||h;this.a=c.el||this.e();this.J=[];this.Ia={};this.Ja={};this.mc();this.H(d);if(c.tc!==l){var e,g;e=u.bind(this.C(),this.C().reportUserActivity);this.d("touchstart",function(){e();clearInterval(g);g=setInterval(e,250)});a=function(){e();clearInterval(g)};this.d("touchmove",e);this.d("touchend",a);this.d("touchcancel",a)}}});t=u.b.prototype;
|
||||
t.dispose=function(){this.j({type:"dispose",bubbles:l});if(this.J)for(var a=this.J.length-1;0<=a;a--)this.J[a].dispose&&this.J[a].dispose();this.Ja=this.Ia=this.J=h;this.o();this.a.parentNode&&this.a.parentNode.removeChild(this.a);u.sc(this.a);this.a=h};t.c=f;t.C=p("c");t.options=function(a){return a===b?this.g:this.g=u.ja.Fb(this.g,a)};t.e=function(a,c){return u.e(a,c)};t.u=p("a");t.Ka=function(){return this.F||this.a};t.id=p("Q");t.name=p("jd");t.children=p("J");t.dd=function(a){return this.Ia[a]};
|
||||
t.fa=function(a){return this.Ja[a]};t.X=function(a,c){var d,e;"string"===typeof a?(e=a,c=c||{},d=c.componentClass||u.Y(e),c.name=e,d=new window.videojs[d](this.c||this,c)):d=a;this.J.push(d);"function"===typeof d.id&&(this.Ia[d.id()]=d);(e=e||d.name&&d.name())&&(this.Ja[e]=d);"function"===typeof d.el&&d.el()&&this.Ka().appendChild(d.el());return d};
|
||||
t.removeChild=function(a){"string"===typeof a&&(a=this.fa(a));if(a&&this.J){for(var c=l,d=this.J.length-1;0<=d;d--)if(this.J[d]===a){c=f;this.J.splice(d,1);break}c&&(this.Ia[a.id]=h,this.Ja[a.name]=h,(c=a.u())&&c.parentNode===this.Ka()&&this.Ka().removeChild(a.u()))}};t.mc=function(){var a=this.g;if(a&&a.children){var c=this;u.k.ra(a.children,function(a,e){e!==l&&!e.loadEvent&&(c[a]=c.X(a,e))})}};t.P=r("");t.d=function(a,c){u.d(this.a,a,u.bind(this,c));return this};
|
||||
t.o=function(a,c){u.o(this.a,a,c);return this};t.T=function(a,c){u.T(this.a,a,u.bind(this,c));return this};t.j=function(a,c){u.j(this.a,a,c);return this};t.H=function(a){a&&(this.$?a.call(this):(this.Ta===b&&(this.Ta=[]),this.Ta.push(a)));return this};t.Wa=function(){this.$=f;var a=this.Ta;if(a&&0<a.length){for(var c=0,d=a.length;c<d;c++)a[c].call(this);this.Ta=[];this.j("ready")}};t.n=function(a){u.n(this.a,a);return this};t.t=function(a){u.t(this.a,a);return this};
|
||||
t.show=function(){this.a.style.display="block";return this};t.D=function(){this.a.style.display="none";return this};function D(a){a.t("vjs-lock-showing")}t.disable=function(){this.D();this.show=m()};t.width=function(a,c){return E(this,"width",a,c)};t.height=function(a,c){return E(this,"height",a,c)};t.Xc=function(a,c){return this.width(a,f).height(c)};
|
||||
function E(a,c,d,e){if(d!==b)return a.a.style[c]=-1!==(""+d).indexOf("%")||-1!==(""+d).indexOf("px")?d:"auto"===d?"":d+"px",e||a.j("resize"),a;if(!a.a)return 0;d=a.a.style[c];e=d.indexOf("px");return-1!==e?parseInt(d.slice(0,e),10):parseInt(a.a["offset"+u.Y(c)],10)}
|
||||
u.q=u.b.extend({h:function(a,c){u.b.call(this,a,c);var d=l;this.d("touchstart",function(a){a.preventDefault();d=f});this.d("touchmove",function(){d=l});var e=this;this.d("touchend",function(a){d&&e.p(a);a.preventDefault()});this.d("click",this.p);this.d("focus",this.Pa);this.d("blur",this.Oa)}});t=u.q.prototype;
|
||||
t.e=function(a,c){c=u.k.B({className:this.P(),innerHTML:'<div class="vjs-control-content"><span class="vjs-control-text">'+(this.oa||"Need Text")+"</span></div>",role:"button","aria-live":"polite",tabIndex:0},c);return u.b.prototype.e.call(this,a,c)};t.P=function(){return"vjs-control "+u.b.prototype.P.call(this)};t.p=m();t.Pa=function(){u.d(document,"keyup",u.bind(this,this.aa))};t.aa=function(a){if(32==a.which||13==a.which)a.preventDefault(),this.p()};
|
||||
t.Oa=function(){u.o(document,"keyup",u.bind(this,this.aa))};u.N=u.b.extend({h:function(a,c){u.b.call(this,a,c);this.Qc=this.fa(this.g.barName);this.handle=this.fa(this.g.handleName);a.d(this.qc,u.bind(this,this.update));this.d("mousedown",this.Qa);this.d("touchstart",this.Qa);this.d("focus",this.Pa);this.d("blur",this.Oa);this.d("click",this.p);this.c.d("controlsvisible",u.bind(this,this.update));a.H(u.bind(this,this.update));this.O={}}});t=u.N.prototype;
|
||||
t.e=function(a,c){c=c||{};c.className+=" vjs-slider";c=u.k.B({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},c);return u.b.prototype.e.call(this,a,c)};t.Qa=function(a){a.preventDefault();u.Rc();this.O.move=u.bind(this,this.Hb);this.O.end=u.bind(this,this.Ib);u.d(document,"mousemove",this.O.move);u.d(document,"mouseup",this.O.end);u.d(document,"touchmove",this.O.move);u.d(document,"touchend",this.O.end);this.Hb(a)};
|
||||
t.Ib=function(){u.Cd();u.o(document,"mousemove",this.O.move,l);u.o(document,"mouseup",this.O.end,l);u.o(document,"touchmove",this.O.move,l);u.o(document,"touchend",this.O.end,l);this.update()};t.update=function(){if(this.a){var a,c=this.xb(),d=this.handle,e=this.Qc;isNaN(c)&&(c=0);a=c;if(d){a=this.a.offsetWidth;var g=d.u().offsetWidth;a=g?g/a:0;c*=1-a;a=c+a/2;d.u().style.left=u.round(100*c,2)+"%"}e.u().style.width=u.round(100*a,2)+"%"}};
|
||||
function F(a,c){var d,e,g,j;d=a.a;e=u.bd(d);j=g=d.offsetWidth;d=a.handle;if(a.g.Dd)return j=e.top,e=c.changedTouches?c.changedTouches[0].pageY:c.pageY,d&&(d=d.u().offsetHeight,j+=d/2,g-=d),Math.max(0,Math.min(1,(j-e+g)/g));g=e.left;e=c.changedTouches?c.changedTouches[0].pageX:c.pageX;d&&(d=d.u().offsetWidth,g+=d/2,j-=d);return Math.max(0,Math.min(1,(e-g)/j))}t.Pa=function(){u.d(document,"keyup",u.bind(this,this.aa))};
|
||||
t.aa=function(a){37==a.which?(a.preventDefault(),this.wc()):39==a.which&&(a.preventDefault(),this.xc())};t.Oa=function(){u.o(document,"keyup",u.bind(this,this.aa))};t.p=function(a){a.stopImmediatePropagation();a.preventDefault()};u.V=u.b.extend();u.V.prototype.defaultValue=0;u.V.prototype.e=function(a,c){c=c||{};c.className+=" vjs-slider-handle";c=u.k.B({innerHTML:'<span class="vjs-control-text">'+this.defaultValue+"</span>"},c);return u.b.prototype.e.call(this,"div",c)};u.la=u.b.extend();
|
||||
function ca(a,c){a.X(c);c.d("click",u.bind(a,function(){D(this)}))}u.la.prototype.e=function(){var a=this.options().Tc||"ul";this.F=u.e(a,{className:"vjs-menu-content"});a=u.b.prototype.e.call(this,"div",{append:this.F,className:"vjs-menu"});a.appendChild(this.F);u.d(a,"click",function(a){a.preventDefault();a.stopImmediatePropagation()});return a};u.M=u.q.extend({h:function(a,c){u.q.call(this,a,c);this.selected(c.selected)}});
|
||||
u.M.prototype.e=function(a,c){return u.q.prototype.e.call(this,"li",u.k.B({className:"vjs-menu-item",innerHTML:this.g.label},c))};u.M.prototype.p=function(){this.selected(f)};u.M.prototype.selected=function(a){a?(this.n("vjs-selected"),this.a.setAttribute("aria-selected",f)):(this.t("vjs-selected"),this.a.setAttribute("aria-selected",l))};
|
||||
u.R=u.q.extend({h:function(a,c){u.q.call(this,a,c);this.ua=this.La();this.X(this.ua);this.K&&0===this.K.length&&this.D();this.d("keyup",this.aa);this.a.setAttribute("aria-haspopup",f);this.a.setAttribute("role","button")}});t=u.R.prototype;t.na=l;t.La=function(){var a=new u.la(this.c);this.options().title&&a.u().appendChild(u.e("li",{className:"vjs-menu-title",innerHTML:u.Y(this.A),Ad:-1}));if(this.K=this.createItems())for(var c=0;c<this.K.length;c++)ca(a,this.K[c]);return a};t.qa=m();
|
||||
t.P=function(){return this.className+" vjs-menu-button "+u.q.prototype.P.call(this)};t.Pa=m();t.Oa=m();t.p=function(){this.T("mouseout",u.bind(this,function(){D(this.ua);this.a.blur()}));this.na?G(this):H(this)};t.aa=function(a){a.preventDefault();32==a.which||13==a.which?this.na?G(this):H(this):27==a.which&&this.na&&G(this)};function H(a){a.na=f;a.ua.n("vjs-lock-showing");a.a.setAttribute("aria-pressed",f);a.K&&0<a.K.length&&a.K[0].u().focus()}
|
||||
function G(a){a.na=l;D(a.ua);a.a.setAttribute("aria-pressed",l)}
|
||||
u.Player=u.b.extend({h:function(a,c,d){this.L=a;a.id=a.id||"vjs_video_"+u.s++;c=u.k.B(da(a),c);this.v={};this.rc=c.poster;this.rb=c.controls;a.controls=l;c.tc=l;u.b.call(this,this,c,d);this.controls()?this.n("vjs-controls-enabled"):this.n("vjs-controls-disabled");this.T("play",function(a){u.j(this.a,{type:"firstplay",target:this.a})||(a.preventDefault(),a.stopPropagation(),a.stopImmediatePropagation())});this.d("ended",this.kd);this.d("play",this.Kb);this.d("firstplay",this.ld);this.d("pause",this.Jb);
|
||||
this.d("progress",this.nd);this.d("durationchange",this.pc);this.d("error",this.Gb);this.d("fullscreenchange",this.md);u.va[this.Q]=this;c.plugins&&u.k.ra(c.plugins,function(a,c){this[a](c)},this);var e,g,j,k;e=u.bind(this,this.reportUserActivity);this.d("mousedown",function(){e();clearInterval(g);g=setInterval(e,250)});this.d("mousemove",e);this.d("mouseup",function(){e();clearInterval(g)});this.d("keydown",e);this.d("keyup",e);j=setInterval(u.bind(this,function(){this.ia&&(this.ia=l,this.userActive(f),
|
||||
clearTimeout(k),k=setTimeout(u.bind(this,function(){this.ia||this.userActive(l)}),2E3))}),250);this.d("dispose",function(){clearInterval(j);clearTimeout(k)})}});t=u.Player.prototype;t.g=u.options;t.dispose=function(){this.j("dispose");this.o("dispose");u.va[this.Q]=h;this.L&&this.L.player&&(this.L.player=h);this.a&&this.a.player&&(this.a.player=h);clearInterval(this.Sa);this.wa();this.i&&this.i.dispose();u.b.prototype.dispose.call(this)};
|
||||
function da(a){var c={sources:[],tracks:[]};u.k.B(c,u.wb(a));if(a.hasChildNodes()){var d,e,g,j;a=a.childNodes;g=0;for(j=a.length;g<j;g++)d=a[g],e=d.nodeName.toLowerCase(),"source"===e?c.sources.push(u.wb(d)):"track"===e&&c.tracks.push(u.wb(d))}return c}
|
||||
t.e=function(){var a=this.a=u.b.prototype.e.call(this,"div"),c=this.L;c.removeAttribute("width");c.removeAttribute("height");if(c.hasChildNodes()){var d,e,g,j,k;d=c.childNodes;e=d.length;for(k=[];e--;)g=d[e],j=g.nodeName.toLowerCase(),"track"===j&&k.push(g);for(d=0;d<k.length;d++)c.removeChild(k[d])}a.id=c.id;a.className=c.className;c.id+="_html5_api";c.className="vjs-tech";c.player=a.player=this;this.n("vjs-paused");this.width(this.g.width,f);this.height(this.g.height,f);c.parentNode&&c.parentNode.insertBefore(a,
|
||||
c);u.yb(c,a);return a};
|
||||
function I(a,c,d){a.i&&(a.$=l,a.i.dispose(),a.Db&&(a.Db=l,clearInterval(a.Sa)),a.Eb&&J(a),a.i=l);"Html5"!==c&&a.L&&(u.l.fc(a.L),a.L=h);a.xa=c;a.$=l;var e=u.k.B({source:d,parentEl:a.a},a.g[c.toLowerCase()]);d&&(d.src==a.v.src&&0<a.v.currentTime&&(e.startTime=a.v.currentTime),a.v.src=d.src);a.i=new window.videojs[c](a,e);a.i.H(function(){this.c.Wa();if(!this.m.progressEvents){var a=this.c;a.Db=f;a.Sa=setInterval(u.bind(a,function(){this.v.mb<this.buffered().end(0)?this.j("progress"):1==this.bufferedPercent()&&
|
||||
(clearInterval(this.Sa),this.j("progress"))}),500);a.i.T("progress",function(){this.m.progressEvents=f;var a=this.c;a.Db=l;clearInterval(a.Sa)})}this.m.timeupdateEvents||(a=this.c,a.Eb=f,a.d("play",a.Ac),a.d("pause",a.wa),a.i.T("timeupdate",function(){this.m.timeupdateEvents=f;J(this.c)}))})}function J(a){a.Eb=l;a.wa();a.o("play",a.Ac);a.o("pause",a.wa)}t.Ac=function(){this.ec&&this.wa();this.ec=setInterval(u.bind(this,function(){this.j("timeupdate")}),250)};t.wa=function(){clearInterval(this.ec)};
|
||||
t.Kb=function(){u.t(this.a,"vjs-paused");u.n(this.a,"vjs-playing")};t.ld=function(){this.g.starttime&&this.currentTime(this.g.starttime);this.n("vjs-has-started")};t.Jb=function(){u.t(this.a,"vjs-playing");u.n(this.a,"vjs-paused")};t.nd=function(){1==this.bufferedPercent()&&this.j("loadedalldata")};t.kd=function(){this.g.loop&&(this.currentTime(0),this.play())};t.pc=function(){var a=K(this,"duration");a&&this.duration(a)};t.md=function(){this.isFullScreen()?this.n("vjs-fullscreen"):this.t("vjs-fullscreen")};
|
||||
t.Gb=function(a){u.log("Video Error",a)};function L(a,c,d){if(a.i&&!a.i.$)a.i.H(function(){this[c](d)});else try{a.i[c](d)}catch(e){throw u.log(e),e;}}function K(a,c){if(a.i&&a.i.$)try{return a.i[c]()}catch(d){throw a.i[c]===b?u.log("Video.js: "+c+" method not defined for "+a.xa+" playback technology.",d):"TypeError"==d.name?(u.log("Video.js: "+c+" unavailable on "+a.xa+" playback technology element.",d),a.i.$=l):u.log(d),d;}}t.play=function(){L(this,"play");return this};
|
||||
t.pause=function(){L(this,"pause");return this};t.paused=function(){return K(this,"paused")===l?l:f};t.currentTime=function(a){return a!==b?(L(this,"setCurrentTime",a),this.Eb&&this.j("timeupdate"),this):this.v.currentTime=K(this,"currentTime")||0};t.duration=function(a){if(a!==b)return this.v.duration=parseFloat(a),this;this.v.duration===b&&this.pc();return this.v.duration||0};
|
||||
t.buffered=function(){var a=K(this,"buffered"),c=a.length-1,d=this.v.mb=this.v.mb||0;a&&(0<=c&&a.end(c)!==d)&&(d=a.end(c),this.v.mb=d);return u.sb(0,d)};t.bufferedPercent=function(){return this.duration()?this.buffered().end(0)/this.duration():0};t.volume=function(a){if(a!==b)return a=Math.max(0,Math.min(1,parseFloat(a))),this.v.volume=a,L(this,"setVolume",a),u.ud(a),this;a=parseFloat(K(this,"volume"));return isNaN(a)?1:a};
|
||||
t.muted=function(a){return a!==b?(L(this,"setMuted",a),this):K(this,"muted")||l};t.Va=function(){return K(this,"supportsFullScreen")||l};t.nc=l;t.isFullScreen=function(a){return a!==b?(this.nc=a,this):this.nc};
|
||||
t.requestFullScreen=function(){var a=u.Nb.requestFullScreen;this.isFullScreen(f);a?(u.d(document,a.ub,u.bind(this,function(c){this.isFullScreen(document[a.isFullScreen]);this.isFullScreen()===l&&u.o(document,a.ub,arguments.callee);this.j("fullscreenchange")})),this.a[a.uc]()):this.i.Va()?L(this,"enterFullScreen"):(this.ed=f,this.Yc=document.documentElement.style.overflow,u.d(document,"keydown",u.bind(this,this.ic)),document.documentElement.style.overflow="hidden",u.n(document.body,"vjs-full-window"),
|
||||
this.j("enterFullWindow"),this.j("fullscreenchange"));return this};t.cancelFullScreen=function(){var a=u.Nb.requestFullScreen;this.isFullScreen(l);if(a)document[a.ob]();else this.i.Va()?L(this,"exitFullScreen"):(M(this),this.j("fullscreenchange"));return this};t.ic=function(a){27===a.keyCode&&(this.isFullScreen()===f?this.cancelFullScreen():M(this))};
|
||||
function M(a){a.ed=l;u.o(document,"keydown",a.ic);document.documentElement.style.overflow=a.Yc;u.t(document.body,"vjs-full-window");a.j("exitFullWindow")}
|
||||
t.src=function(a){if(a instanceof Array){var c;a:{c=a;for(var d=0,e=this.g.techOrder;d<e.length;d++){var g=u.Y(e[d]),j=window.videojs[g];if(j.isSupported())for(var k=0,q=c;k<q.length;k++){var n=q[k];if(j.canPlaySource(n)){c={source:n,i:g};break a}}}c=l}c?(a=c.source,c=c.i,c==this.xa?this.src(a):I(this,c,a)):this.a.appendChild(u.e("p",{innerHTML:this.options().notSupportedMessage}))}else a instanceof Object?window.videojs[this.xa].canPlaySource(a)?this.src(a.src):this.src([a]):(this.v.src=a,this.$?
|
||||
(L(this,"src",a),"auto"==this.g.preload&&this.load(),this.g.autoplay&&this.play()):this.H(function(){this.src(a)}));return this};t.load=function(){L(this,"load");return this};t.currentSrc=function(){return K(this,"currentSrc")||this.v.src||""};t.Ra=function(a){return a!==b?(L(this,"setPreload",a),this.g.preload=a,this):K(this,"preload")};t.autoplay=function(a){return a!==b?(L(this,"setAutoplay",a),this.g.autoplay=a,this):K(this,"autoplay")};
|
||||
t.loop=function(a){return a!==b?(L(this,"setLoop",a),this.g.loop=a,this):K(this,"loop")};t.poster=function(a){if(a===b)return this.rc;this.rc=a;L(this,"setPoster",a);this.j("posterchange")};t.controls=function(a){return a!==b?(a=!!a,this.rb!==a&&((this.rb=a)?(this.t("vjs-controls-disabled"),this.n("vjs-controls-enabled"),this.j("controlsenabled")):(this.t("vjs-controls-enabled"),this.n("vjs-controls-disabled"),this.j("controlsdisabled"))),this):this.rb};u.Player.prototype.Pb;t=u.Player.prototype;
|
||||
t.usingNativeControls=function(a){return a!==b?(a=!!a,this.Pb!==a&&((this.Pb=a)?(this.n("vjs-using-native-controls"),this.j("usingnativecontrols")):(this.t("vjs-using-native-controls"),this.j("usingcustomcontrols"))),this):this.Pb};t.error=function(){return K(this,"error")};t.ended=function(){return K(this,"ended")};t.seeking=function(){return K(this,"seeking")};t.ia=f;t.reportUserActivity=function(){this.ia=f};t.Ob=f;
|
||||
t.userActive=function(a){return a!==b?(a=!!a,a!==this.Ob&&((this.Ob=a)?(this.ia=f,this.t("vjs-user-inactive"),this.n("vjs-user-active"),this.j("useractive")):(this.ia=l,this.i.T("mousemove",function(a){a.stopPropagation();a.preventDefault()}),this.t("vjs-user-active"),this.n("vjs-user-inactive"),this.j("userinactive"))),this):this.Ob};var N,O,P;P=document.createElement("div");O={};
|
||||
P.Jd!==b?(O.uc="requestFullscreen",O.ob="exitFullscreen",O.ub="fullscreenchange",O.isFullScreen="fullScreen"):(document.mozCancelFullScreen?(N="moz",O.isFullScreen=N+"FullScreen"):(N="webkit",O.isFullScreen=N+"IsFullScreen"),P[N+"RequestFullScreen"]&&(O.uc=N+"RequestFullScreen",O.ob=N+"CancelFullScreen"),O.ub=N+"fullscreenchange");document[O.ob]&&(u.Nb.requestFullScreen=O);u.Ca=u.b.extend();
|
||||
u.Ca.prototype.g={Pd:"play",children:{playToggle:{},currentTimeDisplay:{},timeDivider:{},durationDisplay:{},remainingTimeDisplay:{},progressControl:{},fullscreenToggle:{},volumeControl:{},muteToggle:{}}};u.Ca.prototype.e=function(){return u.e("div",{className:"vjs-control-bar"})};u.Wb=u.q.extend({h:function(a,c){u.q.call(this,a,c);a.d("play",u.bind(this,this.Kb));a.d("pause",u.bind(this,this.Jb))}});t=u.Wb.prototype;t.oa="Play";t.P=function(){return"vjs-play-control "+u.q.prototype.P.call(this)};
|
||||
t.p=function(){this.c.paused()?this.c.play():this.c.pause()};t.Kb=function(){u.t(this.a,"vjs-paused");u.n(this.a,"vjs-playing");this.a.children[0].children[0].innerHTML="Pause"};t.Jb=function(){u.t(this.a,"vjs-playing");u.n(this.a,"vjs-paused");this.a.children[0].children[0].innerHTML="Play"};u.$a=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("timeupdate",u.bind(this,this.ca))}});
|
||||
u.$a.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-current-time vjs-time-controls vjs-control"});this.F=u.e("div",{className:"vjs-current-time-display",innerHTML:'<span class="vjs-control-text">Current Time </span>0:00',"aria-live":"off"});a.appendChild(this.F);return a};u.$a.prototype.ca=function(){var a=this.c.Ua?this.c.v.currentTime:this.c.currentTime();this.F.innerHTML='<span class="vjs-control-text">Current Time </span>'+u.ta(a,this.c.duration())};
|
||||
u.ab=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("timeupdate",u.bind(this,this.ca))}});u.ab.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-duration vjs-time-controls vjs-control"});this.F=u.e("div",{className:"vjs-duration-display",innerHTML:'<span class="vjs-control-text">Duration Time </span>0:00',"aria-live":"off"});a.appendChild(this.F);return a};
|
||||
u.ab.prototype.ca=function(){var a=this.c.duration();a&&(this.F.innerHTML='<span class="vjs-control-text">Duration Time </span>'+u.ta(a))};u.ac=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.ac.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-time-divider",innerHTML:"<div><span>/</span></div>"})};u.gb=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("timeupdate",u.bind(this,this.ca))}});
|
||||
u.gb.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-remaining-time vjs-time-controls vjs-control"});this.F=u.e("div",{className:"vjs-remaining-time-display",innerHTML:'<span class="vjs-control-text">Remaining Time </span>-0:00',"aria-live":"off"});a.appendChild(this.F);return a};u.gb.prototype.ca=function(){this.c.duration()&&(this.F.innerHTML='<span class="vjs-control-text">Remaining Time </span>-'+u.ta(this.c.duration()-this.c.currentTime()))};
|
||||
u.Da=u.q.extend({h:function(a,c){u.q.call(this,a,c)}});u.Da.prototype.oa="Fullscreen";u.Da.prototype.P=function(){return"vjs-fullscreen-control "+u.q.prototype.P.call(this)};u.Da.prototype.p=function(){this.c.isFullScreen()?(this.c.cancelFullScreen(),this.a.children[0].children[0].innerHTML="Fullscreen"):(this.c.requestFullScreen(),this.a.children[0].children[0].innerHTML="Non-Fullscreen")};u.fb=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.fb.prototype.g={children:{seekBar:{}}};
|
||||
u.fb.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-progress-control vjs-control"})};u.Xb=u.N.extend({h:function(a,c){u.N.call(this,a,c);a.d("timeupdate",u.bind(this,this.za));a.H(u.bind(this,this.za))}});t=u.Xb.prototype;t.g={children:{loadProgressBar:{},playProgressBar:{},seekHandle:{}},barName:"playProgressBar",handleName:"seekHandle"};t.qc="timeupdate";t.e=function(){return u.N.prototype.e.call(this,"div",{className:"vjs-progress-holder","aria-label":"video progress bar"})};
|
||||
t.za=function(){var a=this.c.Ua?this.c.v.currentTime:this.c.currentTime();this.a.setAttribute("aria-valuenow",u.round(100*this.xb(),2));this.a.setAttribute("aria-valuetext",u.ta(a,this.c.duration()))};t.xb=function(){return this.c.currentTime()/this.c.duration()};t.Qa=function(a){u.N.prototype.Qa.call(this,a);this.c.Ua=f;this.Ed=!this.c.paused();this.c.pause()};t.Hb=function(a){a=F(this,a)*this.c.duration();a==this.c.duration()&&(a-=0.1);this.c.currentTime(a)};
|
||||
t.Ib=function(a){u.N.prototype.Ib.call(this,a);this.c.Ua=l;this.Ed&&this.c.play()};t.xc=function(){this.c.currentTime(this.c.currentTime()+5)};t.wc=function(){this.c.currentTime(this.c.currentTime()-5)};u.cb=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("progress",u.bind(this,this.update))}});u.cb.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-load-progress",innerHTML:'<span class="vjs-control-text">Loaded: 0%</span>'})};
|
||||
u.cb.prototype.update=function(){this.a.style&&(this.a.style.width=u.round(100*this.c.bufferedPercent(),2)+"%")};u.Vb=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.Vb.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-play-progress",innerHTML:'<span class="vjs-control-text">Progress: 0%</span>'})};u.Fa=u.V.extend({h:function(a,c){u.V.call(this,a,c);a.d("timeupdate",u.bind(this,this.ca))}});u.Fa.prototype.defaultValue="00:00";
|
||||
u.Fa.prototype.e=function(){return u.V.prototype.e.call(this,"div",{className:"vjs-seek-handle","aria-live":"off"})};u.Fa.prototype.ca=function(){var a=this.c.Ua?this.c.v.currentTime:this.c.currentTime();this.a.innerHTML='<span class="vjs-control-text">'+u.ta(a,this.c.duration())+"</span>"};u.ib=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.i&&(a.i.m&&a.i.m.volumeControl===l)&&this.n("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.i.m&&a.i.m.volumeControl===l?this.n("vjs-hidden"):this.t("vjs-hidden")}))}});
|
||||
u.ib.prototype.g={children:{volumeBar:{}}};u.ib.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-volume-control vjs-control"})};u.hb=u.N.extend({h:function(a,c){u.N.call(this,a,c);a.d("volumechange",u.bind(this,this.za));a.H(u.bind(this,this.za));setTimeout(u.bind(this,this.update),0)}});t=u.hb.prototype;t.za=function(){this.a.setAttribute("aria-valuenow",u.round(100*this.c.volume(),2));this.a.setAttribute("aria-valuetext",u.round(100*this.c.volume(),2)+"%")};
|
||||
t.g={children:{volumeLevel:{},volumeHandle:{}},barName:"volumeLevel",handleName:"volumeHandle"};t.qc="volumechange";t.e=function(){return u.N.prototype.e.call(this,"div",{className:"vjs-volume-bar","aria-label":"volume level"})};t.Hb=function(a){this.c.muted()&&this.c.muted(l);this.c.volume(F(this,a))};t.xb=function(){return this.c.muted()?0:this.c.volume()};t.xc=function(){this.c.volume(this.c.volume()+0.1)};t.wc=function(){this.c.volume(this.c.volume()-0.1)};
|
||||
u.bc=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.bc.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-volume-level",innerHTML:'<span class="vjs-control-text"></span>'})};u.jb=u.V.extend();u.jb.prototype.defaultValue="00:00";u.jb.prototype.e=function(){return u.V.prototype.e.call(this,"div",{className:"vjs-volume-handle"})};
|
||||
u.da=u.q.extend({h:function(a,c){u.q.call(this,a,c);a.d("volumechange",u.bind(this,this.update));a.i&&(a.i.m&&a.i.m.volumeControl===l)&&this.n("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.i.m&&a.i.m.volumeControl===l?this.n("vjs-hidden"):this.t("vjs-hidden")}))}});u.da.prototype.e=function(){return u.q.prototype.e.call(this,"div",{className:"vjs-mute-control vjs-control",innerHTML:'<div><span class="vjs-control-text">Mute</span></div>'})};
|
||||
u.da.prototype.p=function(){this.c.muted(this.c.muted()?l:f)};u.da.prototype.update=function(){var a=this.c.volume(),c=3;0===a||this.c.muted()?c=0:0.33>a?c=1:0.67>a&&(c=2);this.c.muted()?"Unmute"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML="Unmute"):"Mute"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML="Mute");for(a=0;4>a;a++)u.t(this.a,"vjs-vol-"+a);u.n(this.a,"vjs-vol-"+c)};
|
||||
u.ma=u.R.extend({h:function(a,c){u.R.call(this,a,c);a.d("volumechange",u.bind(this,this.update));a.i&&(a.i.m&&a.i.m.Bc===l)&&this.n("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.i.m&&a.i.m.Bc===l?this.n("vjs-hidden"):this.t("vjs-hidden")}));this.n("vjs-menu-button")}});u.ma.prototype.La=function(){var a=new u.la(this.c,{Tc:"div"}),c=new u.hb(this.c,u.k.B({Dd:f},this.g.Yd));a.X(c);return a};u.ma.prototype.p=function(){u.da.prototype.p.call(this);u.R.prototype.p.call(this)};
|
||||
u.ma.prototype.e=function(){return u.q.prototype.e.call(this,"div",{className:"vjs-volume-menu-button vjs-menu-button vjs-control",innerHTML:'<div><span class="vjs-control-text">Mute</span></div>'})};u.ma.prototype.update=u.da.prototype.update;u.Ea=u.q.extend({h:function(a,c){u.q.call(this,a,c);a.poster()&&this.src(a.poster());(!a.poster()||!a.controls())&&this.D();a.d("posterchange",u.bind(this,function(){this.src(a.poster())}));a.d("play",u.bind(this,this.D))}});var Q="backgroundSize"in u.ea.style;
|
||||
u.Ea.prototype.e=function(){var a=u.e("div",{className:"vjs-poster",tabIndex:-1});Q||a.appendChild(u.e("img"));return a};u.Ea.prototype.src=function(a){var c=this.u();a!==b&&(Q?c.style.backgroundImage='url("'+a+'")':c.firstChild.src=a)};u.Ea.prototype.p=function(){this.C().controls()&&this.c.play()};
|
||||
u.Ub=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("canplay",u.bind(this,this.D));a.d("canplaythrough",u.bind(this,this.D));a.d("playing",u.bind(this,this.D));a.d("seeked",u.bind(this,this.D));a.d("seeking",u.bind(this,this.show));a.d("seeked",u.bind(this,this.D));a.d("error",u.bind(this,this.show));a.d("waiting",u.bind(this,this.show))}});u.Ub.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-loading-spinner"})};u.Ya=u.q.extend();
|
||||
u.Ya.prototype.e=function(){return u.q.prototype.e.call(this,"div",{className:"vjs-big-play-button",innerHTML:'<span aria-hidden="true"></span>',"aria-label":"play video"})};u.Ya.prototype.p=function(){this.c.play()};
|
||||
u.r=u.b.extend({h:function(a,c,d){c=c||{};c.tc=l;u.b.call(this,a,c,d);var e,g;g=this;e=this.C();a=function(){if(e.controls()&&!e.usingNativeControls()){var a;g.d("mousedown",g.p);g.d("touchstart",function(c){c.preventDefault();a=this.c.userActive()});g.d("touchmove",function(){a&&this.C().reportUserActivity()});var c,d,n,s;c=0;g.d("touchstart",function(){c=(new Date).getTime();n=f});s=function(){n=l};g.d("touchmove",s);g.d("touchleave",s);g.d("touchcancel",s);g.d("touchend",function(){n===f&&(d=(new Date).getTime()-
|
||||
c,250>d&&this.j("tap"))});g.d("tap",g.od)}};c=u.bind(g,g.rd);this.H(a);e.d("controlsenabled",a);e.d("controlsdisabled",c)}});u.r.prototype.rd=function(){this.o("tap");this.o("touchstart");this.o("touchmove");this.o("touchleave");this.o("touchcancel");this.o("touchend");this.o("click");this.o("mousedown")};u.r.prototype.p=function(a){0===a.button&&this.C().controls()&&(this.C().paused()?this.C().play():this.C().pause())};u.r.prototype.od=function(){this.C().userActive(!this.C().userActive())};
|
||||
u.r.prototype.m={volumeControl:f,fullscreenResize:l,progressEvents:l,timeupdateEvents:l};u.media={};u.media.Xa="play pause paused currentTime setCurrentTime duration buffered volume setVolume muted setMuted width height supportsFullScreen enterFullScreen src load currentSrc preload setPreload autoplay setAutoplay loop setLoop error networkState readyState seeking initialTime startOffsetTime played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks defaultPlaybackRate playbackRate mediaGroup controller controls defaultMuted".split(" ");
|
||||
function ea(){var a=u.media.Xa[i];return function(){throw Error('The "'+a+"\" method is not available on the playback technology's API");}}for(var i=u.media.Xa.length-1;0<=i;i--)u.r.prototype[u.media.Xa[i]]=ea();
|
||||
u.l=u.r.extend({h:function(a,c,d){this.m.volumeControl=u.l.Sc();this.m.movingMediaElementInDOM=!u.Hc;this.m.fullscreenResize=f;u.r.call(this,a,c,d);for(d=u.l.bb.length-1;0<=d;d--)u.d(this.a,u.l.bb[d],u.bind(this.c,this.$c));(c=c.source)&&this.a.currentSrc===c.src&&0<this.a.networkState?a.j("loadstart"):c&&(this.a.src=c.src);if(u.Zb&&a.options().nativeControlsForTouch!==l){var e,g,j,k;e=this;g=this.C();c=g.controls();e.a.controls=!!c;j=function(){e.a.controls=f};k=function(){e.a.controls=l};g.d("controlsenabled",
|
||||
j);g.d("controlsdisabled",k);c=function(){g.o("controlsenabled",j);g.o("controlsdisabled",k)};e.d("dispose",c);g.d("usingcustomcontrols",c);g.usingNativeControls(f)}a.H(function(){this.L&&(this.g.autoplay&&this.paused())&&(delete this.L.poster,this.play())});this.Wa()}});t=u.l.prototype;t.dispose=function(){u.r.prototype.dispose.call(this)};
|
||||
t.e=function(){var a=this.c,c=a.L,d;if(!c||this.m.movingMediaElementInDOM===l)c?(d=c.cloneNode(l),u.l.fc(c),c=d,a.L=h):c=u.e("video",{id:a.id()+"_html5_api",className:"vjs-tech"}),c.player=a,u.yb(c,a.u());d=["autoplay","preload","loop","muted"];for(var e=d.length-1;0<=e;e--){var g=d[e];a.g[g]!==h&&(c[g]=a.g[g])}return c};t.$c=function(a){this.j(a);a.stopPropagation()};t.play=function(){this.a.play()};t.pause=function(){this.a.pause()};t.paused=function(){return this.a.paused};t.currentTime=function(){return this.a.currentTime};
|
||||
t.td=function(a){try{this.a.currentTime=a}catch(c){u.log(c,"Video is not ready. (Video.js)")}};t.duration=function(){return this.a.duration||0};t.buffered=function(){return this.a.buffered};t.volume=function(){return this.a.volume};t.yd=function(a){this.a.volume=a};t.muted=function(){return this.a.muted};t.wd=function(a){this.a.muted=a};t.width=function(){return this.a.offsetWidth};t.height=function(){return this.a.offsetHeight};
|
||||
t.Va=function(){return"function"==typeof this.a.webkitEnterFullScreen&&(/Android/.test(u.I)||!/Chrome|Mac OS X 10.5/.test(u.I))?f:l};t.gc=function(){var a=this.a;a.paused&&a.networkState<=a.Gd?(this.a.play(),setTimeout(function(){a.pause();a.webkitEnterFullScreen()},0)):a.webkitEnterFullScreen()};t.ad=function(){this.a.webkitExitFullScreen()};t.src=function(a){this.a.src=a};t.load=function(){this.a.load()};t.currentSrc=function(){return this.a.currentSrc};t.poster=function(){return this.a.poster};
|
||||
t.Ra=function(){return this.a.Ra};t.xd=function(a){this.a.Ra=a};t.autoplay=function(){return this.a.autoplay};t.sd=function(a){this.a.autoplay=a};t.controls=function(){return this.a.controls};t.loop=function(){return this.a.loop};t.vd=function(a){this.a.loop=a};t.error=function(){return this.a.error};t.seeking=function(){return this.a.seeking};t.ended=function(){return this.a.ended};u.l.isSupported=function(){return!!u.ea.canPlayType};u.l.nb=function(a){try{return!!u.ea.canPlayType(a.type)}catch(c){return""}};
|
||||
u.l.Sc=function(){var a=u.ea.volume;u.ea.volume=a/2+0.1;return a!==u.ea.volume};u.l.bb="loadstart suspend abort error emptied stalled loadedmetadata loadeddata canplay canplaythrough playing waiting seeking seeked ended durationchange timeupdate progress play pause ratechange volumechange".split(" ");u.l.fc=function(a){if(a){a.player=h;for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute("src");"function"===typeof a.load&&a.load()}};
|
||||
u.Lc&&(document.createElement("video").constructor.prototype.canPlayType=function(a){return a&&-1!=a.toLowerCase().indexOf("video/mp4")?"maybe":""});
|
||||
u.f=u.r.extend({h:function(a,c,d){u.r.call(this,a,c,d);var e=c.source;d=c.parentEl;var g=this.a=u.e("div",{id:a.id()+"_temp_flash"}),j=a.id()+"_flash_api";a=a.g;var k=u.k.B({readyFunction:"videojs.Flash.onReady",eventProxyFunction:"videojs.Flash.onEvent",errorEventProxyFunction:"videojs.Flash.onError",autoplay:a.autoplay,preload:a.Ra,loop:a.loop,muted:a.muted},c.flashVars),q=u.k.B({wmode:"opaque",bgcolor:"#000000"},c.params),n=u.k.B({id:j,name:j,"class":"vjs-tech"},c.attributes),s;e&&(e.type&&u.f.gd(e.type)?
|
||||
(a=u.f.yc(e.src),k.rtmpConnection=encodeURIComponent(a.qb),k.rtmpStream=encodeURIComponent(a.Mb)):k.src=encodeURIComponent(u.jc(e.src)));this.setCurrentTime=function(a){s=a;this.a.vjs_setProperty("currentTime",a)};this.currentTime=function(){return this.seeking()?s:this.a.vjs_getProperty("currentTime")};u.yb(g,d);c.startTime&&this.H(function(){this.load();this.play();this.currentTime(c.startTime)});u.Tb&&this.H(function(){u.d(this.u(),"mousemove",u.bind(this,function(){this.C().j({type:"mousemove",
|
||||
bubbles:l})}))});if(c.iFrameMode===f&&!u.Tb){var C=u.e("iframe",{id:j+"_iframe",name:j+"_iframe",className:"vjs-tech",scrolling:"no",marginWidth:0,marginHeight:0,frameBorder:0});k.readyFunction="ready";k.eventProxyFunction="events";k.errorEventProxyFunction="errors";u.d(C,"load",u.bind(this,function(){var a,d=C.contentWindow;a=C.contentDocument?C.contentDocument:C.contentWindow.document;a.write(u.f.kc(c.swf,k,q,n));d.player=this.c;d.ready=u.bind(this.c,function(c){var d=this.i;d.a=a.getElementById(c);
|
||||
u.f.pb(d)});d.events=u.bind(this.c,function(a,c){this&&"flash"===this.xa&&this.j(c)});d.errors=u.bind(this.c,function(a,c){u.log("Flash Error",c)})}));g.parentNode.replaceChild(C,g)}else u.f.Zc(c.swf,g,k,q,n)}});t=u.f.prototype;t.dispose=function(){u.r.prototype.dispose.call(this)};t.play=function(){this.a.vjs_play()};t.pause=function(){this.a.vjs_pause()};
|
||||
t.src=function(a){u.f.fd(a)?(a=u.f.yc(a),this.Td(a.qb),this.Ud(a.Mb)):(a=u.jc(a),this.a.vjs_src(a));if(this.c.autoplay()){var c=this;setTimeout(function(){c.play()},0)}};t.currentSrc=function(){var a=this.a.vjs_getProperty("currentSrc");if(a==h){var c=this.Rd(),d=this.Sd();c&&d&&(a=u.f.zd(c,d))}return a};t.load=function(){this.a.vjs_load()};t.poster=function(){this.a.vjs_getProperty("poster")};t.buffered=function(){return u.sb(0,this.a.vjs_getProperty("buffered"))};t.Va=r(l);t.gc=r(l);
|
||||
var R=u.f.prototype,S="rtmpConnection rtmpStream preload defaultPlaybackRate playbackRate autoplay loop mediaGroup controller controls volume muted defaultMuted".split(" "),T="error currentSrc networkState readyState seeking initialTime duration startOffsetTime paused played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks".split(" ");function fa(){var a=S[U],c=a.charAt(0).toUpperCase()+a.slice(1);R["set"+c]=function(c){return this.a.vjs_setProperty(a,c)}}
|
||||
function V(a){R[a]=function(){return this.a.vjs_getProperty(a)}}var U;for(U=0;U<S.length;U++)V(S[U]),fa();for(U=0;U<T.length;U++)V(T[U]);u.f.isSupported=function(){return 10<=u.f.version()[0]};u.f.nb=function(a){if(!a.type)return"";a=a.type.replace(/;.*/,"").toLowerCase();if(a in u.f.cd||a in u.f.zc)return"maybe"};u.f.cd={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"};u.f.zc={"rtmp/mp4":"MP4","rtmp/flv":"FLV"};
|
||||
u.f.onReady=function(a){a=u.u(a);var c=a.player||a.parentNode.player,d=c.i;a.player=c;d.a=a;u.f.pb(d)};u.f.pb=function(a){a.u().vjs_getProperty?a.Wa():setTimeout(function(){u.f.pb(a)},50)};u.f.onEvent=function(a,c){u.u(a).player.j(c)};u.f.onError=function(a,c){u.u(a).player.j("error");u.log("Flash Error",c,a)};
|
||||
u.f.version=function(){var a="0,0,0";try{a=(new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash")).GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(c){try{navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(d){}}return a.split(",")};
|
||||
u.f.Zc=function(a,c,d,e,g){a=u.f.kc(a,d,e,g);a=u.e("div",{innerHTML:a}).childNodes[0];d=c.parentNode;c.parentNode.replaceChild(a,c);var j=d.childNodes[0];setTimeout(function(){j.style.display="block"},1E3)};
|
||||
u.f.kc=function(a,c,d,e){var g="",j="",k="";c&&u.k.ra(c,function(a,c){g+=a+"="+c+"&"});d=u.k.B({movie:a,flashvars:g,allowScriptAccess:"always",allowNetworking:"all"},d);u.k.ra(d,function(a,c){j+='<param name="'+a+'" value="'+c+'" />'});e=u.k.B({data:a,width:"100%",height:"100%"},e);u.k.ra(e,function(a,c){k+=a+'="'+c+'" '});return'<object type="application/x-shockwave-flash"'+k+">"+j+"</object>"};u.f.zd=function(a,c){return a+"&"+c};
|
||||
u.f.yc=function(a){var c={qb:"",Mb:""};if(!a)return c;var d=a.indexOf("&"),e;-1!==d?e=d+1:(d=e=a.lastIndexOf("/")+1,0===d&&(d=e=a.length));c.qb=a.substring(0,d);c.Mb=a.substring(e,a.length);return c};u.f.gd=function(a){return a in u.f.zc};u.f.Nc=/^rtmp[set]?:\/\//i;u.f.fd=function(a){return u.f.Nc.test(a)};
|
||||
u.Mc=u.b.extend({h:function(a,c,d){u.b.call(this,a,c,d);if(!a.g.sources||0===a.g.sources.length){c=0;for(d=a.g.techOrder;c<d.length;c++){var e=u.Y(d[c]),g=window.videojs[e];if(g&&g.isSupported()){I(a,e);break}}}else a.src(a.g.sources)}});u.Player.prototype.textTracks=function(){return this.ya=this.ya||[]};function W(a,c,d){for(var e=a.ya,g=0,j=e.length,k,q;g<j;g++)k=e[g],k.id()===c?(k.show(),q=k):d&&(k.G()==d&&0<k.mode())&&k.disable();(c=q?q.G():d?d:l)&&a.j(c+"trackchange")}
|
||||
u.w=u.b.extend({h:function(a,c){u.b.call(this,a,c);this.Q=c.id||"vjs_"+c.kind+"_"+c.language+"_"+u.s++;this.vc=c.src;this.Wc=c["default"]||c.dflt;this.Bd=c.title;this.Od=c.srclang;this.hd=c.label;this.Z=[];this.kb=[];this.ga=this.ha=0;this.c.d("fullscreenchange",u.bind(this,this.Pc))}});t=u.w.prototype;t.G=p("A");t.src=p("vc");t.tb=p("Wc");t.title=p("Bd");t.label=p("hd");t.Uc=p("Z");t.Oc=p("kb");t.readyState=p("ha");t.mode=p("ga");
|
||||
t.Pc=function(){this.a.style.fontSize=this.c.isFullScreen()?140*(screen.width/this.c.width())+"%":""};t.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-"+this.A+" vjs-text-track"})};t.show=function(){X(this);this.ga=2;u.b.prototype.show.call(this)};t.D=function(){X(this);this.ga=1;u.b.prototype.D.call(this)};
|
||||
t.disable=function(){2==this.ga&&this.D();this.c.o("timeupdate",u.bind(this,this.update,this.Q));this.c.o("ended",u.bind(this,this.reset,this.Q));this.reset();this.c.fa("textTrackDisplay").removeChild(this);this.ga=0};function X(a){0===a.ha&&a.load();0===a.ga&&(a.c.d("timeupdate",u.bind(a,a.update,a.Q)),a.c.d("ended",u.bind(a,a.reset,a.Q)),("captions"===a.A||"subtitles"===a.A)&&a.c.fa("textTrackDisplay").X(a))}
|
||||
t.load=function(){0===this.ha&&(this.ha=1,u.get(this.vc,u.bind(this,this.pd),u.bind(this,this.Gb)))};t.Gb=function(a){this.error=a;this.ha=3;this.j("error")};t.pd=function(a){var c,d;a=a.split("\n");for(var e="",g=1,j=a.length;g<j;g++)if(e=u.trim(a[g])){-1==e.indexOf("--\x3e")?(c=e,e=u.trim(a[++g])):c=this.Z.length;c={id:c,index:this.Z.length};d=e.split(" --\x3e ");c.startTime=Y(d[0]);c.sa=Y(d[1]);for(d=[];a[++g]&&(e=u.trim(a[g]));)d.push(e);c.text=d.join("<br/>");this.Z.push(c)}this.ha=2;this.j("loaded")};
|
||||
function Y(a){var c=a.split(":");a=0;var d,e,g;3==c.length?(d=c[0],e=c[1],c=c[2]):(d=0,e=c[0],c=c[1]);c=c.split(/\s+/);c=c.splice(0,1)[0];c=c.split(/\.|,/);g=parseFloat(c[1]);c=c[0];a+=3600*parseFloat(d);a+=60*parseFloat(e);a+=parseFloat(c);g&&(a+=g/1E3);return a}
|
||||
t.update=function(){if(0<this.Z.length){var a=this.c.currentTime();if(this.Lb===b||a<this.Lb||this.Na<=a){var c=this.Z,d=this.c.duration(),e=0,g=l,j=[],k,q,n,s;a>=this.Na||this.Na===b?s=this.vb!==b?this.vb:0:(g=f,s=this.Cb!==b?this.Cb:c.length-1);for(;;){n=c[s];if(n.sa<=a)e=Math.max(e,n.sa),n.Ha&&(n.Ha=l);else if(a<n.startTime){if(d=Math.min(d,n.startTime),n.Ha&&(n.Ha=l),!g)break}else g?(j.splice(0,0,n),q===b&&(q=s),k=s):(j.push(n),k===b&&(k=s),q=s),d=Math.min(d,n.sa),e=Math.max(e,n.startTime),n.Ha=
|
||||
f;if(g)if(0===s)break;else s--;else if(s===c.length-1)break;else s++}this.kb=j;this.Na=d;this.Lb=e;this.vb=k;this.Cb=q;a=this.kb;c="";d=0;for(e=a.length;d<e;d++)c+='<span class="vjs-tt-cue">'+a[d].text+"</span>";this.a.innerHTML=c;this.j("cuechange")}}};t.reset=function(){this.Na=0;this.Lb=this.c.duration();this.Cb=this.vb=0};u.Rb=u.w.extend();u.Rb.prototype.A="captions";u.Yb=u.w.extend();u.Yb.prototype.A="subtitles";u.Sb=u.w.extend();u.Sb.prototype.A="chapters";
|
||||
u.$b=u.b.extend({h:function(a,c,d){u.b.call(this,a,c,d);if(a.g.tracks&&0<a.g.tracks.length){c=this.c;a=a.g.tracks;var e;for(d=0;d<a.length;d++){e=a[d];var g=c,j=e.kind,k=e.label,q=e.language,n=e;e=g.ya=g.ya||[];n=n||{};n.kind=j;n.label=k;n.language=q;j=u.Y(j||"subtitles");g=new window.videojs[j+"Track"](g,n);e.push(g)}}}});u.$b.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-text-track-display"})};
|
||||
u.W=u.M.extend({h:function(a,c){var d=this.ba=c.track;c.label=d.label();c.selected=d.tb();u.M.call(this,a,c);this.c.d(d.G()+"trackchange",u.bind(this,this.update))}});u.W.prototype.p=function(){u.M.prototype.p.call(this);W(this.c,this.ba.Q,this.ba.G())};u.W.prototype.update=function(){this.selected(2==this.ba.mode())};u.eb=u.W.extend({h:function(a,c){c.track={G:function(){return c.kind},C:a,label:function(){return c.kind+" off"},tb:r(l),mode:r(l)};u.W.call(this,a,c);this.selected(f)}});
|
||||
u.eb.prototype.p=function(){u.W.prototype.p.call(this);W(this.c,this.ba.Q,this.ba.G())};u.eb.prototype.update=function(){for(var a=this.c.textTracks(),c=0,d=a.length,e,g=f;c<d;c++)e=a[c],e.G()==this.ba.G()&&2==e.mode()&&(g=l);this.selected(g)};u.S=u.R.extend({h:function(a,c){u.R.call(this,a,c);1>=this.K.length&&this.D()}});
|
||||
u.S.prototype.qa=function(){var a=[],c;a.push(new u.eb(this.c,{kind:this.A}));for(var d=0;d<this.c.textTracks().length;d++)c=this.c.textTracks()[d],c.G()===this.A&&a.push(new u.W(this.c,{track:c}));return a};u.Aa=u.S.extend({h:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute("aria-label","Captions Menu")}});u.Aa.prototype.A="captions";u.Aa.prototype.oa="Captions";u.Aa.prototype.className="vjs-captions-button";
|
||||
u.Ga=u.S.extend({h:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute("aria-label","Subtitles Menu")}});u.Ga.prototype.A="subtitles";u.Ga.prototype.oa="Subtitles";u.Ga.prototype.className="vjs-subtitles-button";u.Ba=u.S.extend({h:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute("aria-label","Chapters Menu")}});t=u.Ba.prototype;t.A="chapters";t.oa="Chapters";t.className="vjs-chapters-button";
|
||||
t.qa=function(){for(var a=[],c,d=0;d<this.c.textTracks().length;d++)c=this.c.textTracks()[d],c.G()===this.A&&a.push(new u.W(this.c,{track:c}));return a};
|
||||
t.La=function(){for(var a=this.c.textTracks(),c=0,d=a.length,e,g,j=this.K=[];c<d;c++)if(e=a[c],e.G()==this.A&&e.tb()){if(2>e.readyState()){this.Kd=e;e.d("loaded",u.bind(this,this.La));return}g=e;break}a=this.ua=new u.la(this.c);a.a.appendChild(u.e("li",{className:"vjs-menu-title",innerHTML:u.Y(this.A),Ad:-1}));if(g){e=g.Z;for(var k,c=0,d=e.length;c<d;c++)k=e[c],k=new u.Za(this.c,{track:g,cue:k}),j.push(k),a.X(k)}0<this.K.length&&this.show();return a};
|
||||
u.Za=u.M.extend({h:function(a,c){var d=this.ba=c.track,e=this.cue=c.cue,g=a.currentTime();c.label=e.text;c.selected=e.startTime<=g&&g<e.sa;u.M.call(this,a,c);d.d("cuechange",u.bind(this,this.update))}});u.Za.prototype.p=function(){u.M.prototype.p.call(this);this.c.currentTime(this.cue.startTime);this.update(this.cue.startTime)};u.Za.prototype.update=function(){var a=this.cue,c=this.c.currentTime();this.selected(a.startTime<=c&&c<a.sa)};
|
||||
u.k.B(u.Ca.prototype.g.children,{subtitlesButton:{},captionsButton:{},chaptersButton:{}});
|
||||
/*! Video.js v4.6.0-b Copyright 2014 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE */
|
||||
(function() {var b=void 0,f=!0,j=null,l=!1;function m(){return function(){}}function p(a){return function(){return this[a]}}function r(a){return function(){return a}}var t;document.createElement("video");document.createElement("audio");document.createElement("track");function u(a,c,d){if("string"===typeof a){0===a.indexOf("#")&&(a=a.slice(1));if(u.Aa[a])return u.Aa[a];a=u.v(a)}if(!a||!a.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return a.player||new u.Player(a,c,d)}
|
||||
var videojs=u;window.me=window.ne=u;u.Yb="4.6";u.Rc="https:"==document.location.protocol?"https://":"http://";u.options={techOrder:["html5","flash"],html5:{},flash:{},width:300,height:150,defaultVolume:0,playbackRates:[],children:{mediaLoader:{},posterImage:{},textTrackDisplay:{},loadingSpinner:{},bigPlayButton:{},controlBar:{},errorDisplay:{}},notSupportedMessage:"No compatible source was found for this video."};"GENERATED_CDN_VSN"!==u.Yb&&(videojs.options.flash.swf=u.Rc+"vjs.zencdn.net/"+u.Yb+"/video-js.swf");
|
||||
u.Aa={};"function"===typeof define&&define.amd?define([],function(){return videojs}):"object"===typeof exports&&"object"===typeof module&&(module.exports=videojs);u.pa=u.CoreObject=m();u.pa.extend=function(a){var c,d;a=a||{};c=a.init||a.h||this.prototype.init||this.prototype.h||m();d=function(){c.apply(this,arguments)};d.prototype=u.l.create(this.prototype);d.prototype.constructor=d;d.extend=u.pa.extend;d.create=u.pa.create;for(var e in a)a.hasOwnProperty(e)&&(d.prototype[e]=a[e]);return d};
|
||||
u.pa.create=function(){var a=u.l.create(this.prototype);this.apply(a,arguments);return a};u.d=function(a,c,d){var e=u.getData(a);e.D||(e.D={});e.D[c]||(e.D[c]=[]);d.u||(d.u=u.u++);e.D[c].push(d);e.X||(e.disabled=l,e.X=function(c){if(!e.disabled){c=u.sc(c);var d=e.D[c.type];if(d)for(var d=d.slice(0),k=0,q=d.length;k<q&&!c.zc();k++)d[k].call(a,c)}});1==e.D[c].length&&(document.addEventListener?a.addEventListener(c,e.X,l):document.attachEvent&&a.attachEvent("on"+c,e.X))};
|
||||
u.p=function(a,c,d){if(u.wc(a)){var e=u.getData(a);if(e.D)if(c){var g=e.D[c];if(g){if(d){if(d.u)for(e=0;e<g.length;e++)g[e].u===d.u&&g.splice(e--,1)}else e.D[c]=[];u.nc(a,c)}}else for(g in e.D)c=g,e.D[c]=[],u.nc(a,c)}};u.nc=function(a,c){var d=u.getData(a);0===d.D[c].length&&(delete d.D[c],document.removeEventListener?a.removeEventListener(c,d.X,l):document.detachEvent&&a.detachEvent("on"+c,d.X));u.Eb(d.D)&&(delete d.D,delete d.X,delete d.disabled);u.Eb(d)&&u.Fc(a)};
|
||||
u.sc=function(a){function c(){return f}function d(){return l}if(!a||!a.Fb){var e=a||window.event;a={};for(var g in e)"layerX"!==g&&("layerY"!==g&&"keyboardEvent.keyLocation"!==g)&&("returnValue"==g&&e.preventDefault||(a[g]=e[g]));a.target||(a.target=a.srcElement||document);a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;a.preventDefault=function(){e.preventDefault&&e.preventDefault();a.returnValue=l;a.td=c;a.defaultPrevented=f};a.td=d;a.defaultPrevented=l;a.stopPropagation=function(){e.stopPropagation&&
|
||||
e.stopPropagation();a.cancelBubble=f;a.Fb=c};a.Fb=d;a.stopImmediatePropagation=function(){e.stopImmediatePropagation&&e.stopImmediatePropagation();a.zc=c;a.stopPropagation()};a.zc=d;if(a.clientX!=j){g=document.documentElement;var h=document.body;a.pageX=a.clientX+(g&&g.scrollLeft||h&&h.scrollLeft||0)-(g&&g.clientLeft||h&&h.clientLeft||0);a.pageY=a.clientY+(g&&g.scrollTop||h&&h.scrollTop||0)-(g&&g.clientTop||h&&h.clientTop||0)}a.which=a.charCode||a.keyCode;a.button!=j&&(a.button=a.button&1?0:a.button&
|
||||
4?1:a.button&2?2:0)}return a};u.k=function(a,c){var d=u.wc(a)?u.getData(a):{},e=a.parentNode||a.ownerDocument;"string"===typeof c&&(c={type:c,target:a});c=u.sc(c);d.X&&d.X.call(a,c);if(e&&!c.Fb()&&c.bubbles!==l)u.k(e,c);else if(!e&&!c.defaultPrevented&&(d=u.getData(c.target),c.target[c.type])){d.disabled=f;if("function"===typeof c.target[c.type])c.target[c.type]();d.disabled=l}return!c.defaultPrevented};
|
||||
u.W=function(a,c,d){function e(){u.p(a,c,e);d.apply(this,arguments)}e.u=d.u=d.u||u.u++;u.d(a,c,e)};var v=Object.prototype.hasOwnProperty;u.e=function(a,c){var d,e;d=document.createElement(a||"div");for(e in c)v.call(c,e)&&(-1!==e.indexOf("aria-")||"role"==e?d.setAttribute(e,c[e]):d[e]=c[e]);return d};u.$=function(a){return a.charAt(0).toUpperCase()+a.slice(1)};u.l={};u.l.create=Object.create||function(a){function c(){}c.prototype=a;return new c};
|
||||
u.l.wa=function(a,c,d){for(var e in a)v.call(a,e)&&c.call(d||this,e,a[e])};u.l.B=function(a,c){if(!c)return a;for(var d in c)v.call(c,d)&&(a[d]=c[d]);return a};u.l.hd=function(a,c){var d,e,g;a=u.l.copy(a);for(d in c)v.call(c,d)&&(e=a[d],g=c[d],a[d]=u.l.Ra(e)&&u.l.Ra(g)?u.l.hd(e,g):c[d]);return a};u.l.copy=function(a){return u.l.B({},a)};u.l.Ra=function(a){return!!a&&"object"===typeof a&&"[object Object]"===a.toString()&&a.constructor===Object};
|
||||
u.bind=function(a,c,d){function e(){return c.apply(a,arguments)}c.u||(c.u=u.u++);e.u=d?d+"_"+c.u:c.u;return e};u.ta={};u.u=1;u.expando="vdata"+(new Date).getTime();u.getData=function(a){var c=a[u.expando];c||(c=a[u.expando]=u.u++,u.ta[c]={});return u.ta[c]};u.wc=function(a){a=a[u.expando];return!(!a||u.Eb(u.ta[a]))};u.Fc=function(a){var c=a[u.expando];if(c){delete u.ta[c];try{delete a[u.expando]}catch(d){a.removeAttribute?a.removeAttribute(u.expando):a[u.expando]=j}}};
|
||||
u.Eb=function(a){for(var c in a)if(a[c]!==j)return l;return f};u.o=function(a,c){-1==(" "+a.className+" ").indexOf(" "+c+" ")&&(a.className=""===a.className?c:a.className+" "+c)};u.r=function(a,c){var d,e;if(-1!=a.className.indexOf(c)){d=a.className.split(" ");for(e=d.length-1;0<=e;e--)d[e]===c&&d.splice(e,1);a.className=d.join(" ")}};u.A=u.e("video");u.M=navigator.userAgent;u.Wc=/iPhone/i.test(u.M);u.Vc=/iPad/i.test(u.M);u.Xc=/iPod/i.test(u.M);u.Uc=u.Wc||u.Vc||u.Xc;var aa=u,w;var x=u.M.match(/OS (\d+)_/i);
|
||||
w=x&&x[1]?x[1]:b;aa.ae=w;u.Tc=/Android/i.test(u.M);var ba=u,y;var z=u.M.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i),A,B;z?(A=z[1]&&parseFloat(z[1]),B=z[2]&&parseFloat(z[2]),y=A&&B?parseFloat(z[1]+"."+z[2]):A?A:j):y=j;ba.Xb=y;u.Yc=u.Tc&&/webkit/i.test(u.M)&&2.3>u.Xb;u.ac=/Firefox/i.test(u.M);u.be=/Chrome/i.test(u.M);u.ic=!!("ontouchstart"in window||window.Sc&&document instanceof window.Sc);
|
||||
u.Bb=function(a){var c,d,e,g;c={};if(a&&a.attributes&&0<a.attributes.length){d=a.attributes;for(var h=d.length-1;0<=h;h--){e=d[h].name;g=d[h].value;if("boolean"===typeof a[e]||-1!==",autoplay,controls,loop,muted,default,".indexOf(","+e+","))g=g!==j?f:l;c[e]=g}}return c};
|
||||
u.fe=function(a,c){var d="";document.defaultView&&document.defaultView.getComputedStyle?d=document.defaultView.getComputedStyle(a,"").getPropertyValue(c):a.currentStyle&&(d=a["client"+c.substr(0,1).toUpperCase()+c.substr(1)]+"px");return d};u.Db=function(a,c){c.firstChild?c.insertBefore(a,c.firstChild):c.appendChild(a)};u.Ub={};u.v=function(a){0===a.indexOf("#")&&(a=a.slice(1));return document.getElementById(a)};
|
||||
u.ya=function(a,c){c=c||a;var d=Math.floor(a%60),e=Math.floor(a/60%60),g=Math.floor(a/3600),h=Math.floor(c/60%60),k=Math.floor(c/3600);if(isNaN(a)||Infinity===a)g=e=d="-";g=0<g||0<k?g+":":"";return g+(((g||10<=h)&&10>e?"0"+e:e)+":")+(10>d?"0"+d:d)};u.dd=function(){document.body.focus();document.onselectstart=r(l)};u.Vd=function(){document.onselectstart=r(f)};u.trim=function(a){return(a+"").replace(/^\s+|\s+$/g,"")};u.round=function(a,c){c||(c=0);return Math.round(a*Math.pow(10,c))/Math.pow(10,c)};
|
||||
u.yb=function(a,c){return{length:1,start:function(){return a},end:function(){return c}}};
|
||||
u.get=function(a,c,d,e){var g,h,k,q;d=d||m();"undefined"===typeof XMLHttpRequest&&(window.XMLHttpRequest=function(){try{return new window.ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new window.ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new window.ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw Error("This browser does not support XMLHttpRequest.");});h=new XMLHttpRequest;k=u.Hd(a);q=window.location;k.protocol+k.host!==q.protocol+q.host&&window.XDomainRequest&&!("withCredentials"in
|
||||
h)?(h=new window.XDomainRequest,h.onload=function(){c(h.responseText)},h.onerror=d,h.onprogress=m(),h.ontimeout=d):(g="file:"==k.protocol||"file:"==q.protocol,h.onreadystatechange=function(){4===h.readyState&&(200===h.status||g&&0===h.status?c(h.responseText):d(h.responseText))});try{h.open("GET",a,f),e&&(h.withCredentials=f)}catch(n){d(n);return}try{h.send()}catch(s){d(s)}};
|
||||
u.Md=function(a){try{var c=window.localStorage||l;c&&(c.volume=a)}catch(d){22==d.code||1014==d.code?u.log("LocalStorage Full (VideoJS)",d):18==d.code?u.log("LocalStorage not allowed (VideoJS)",d):u.log("LocalStorage Error (VideoJS)",d)}};u.uc=function(a){a.match(/^https?:\/\//)||(a=u.e("div",{innerHTML:'<a href="'+a+'">x</a>'}).firstChild.href);return a};
|
||||
u.Hd=function(a){var c,d,e,g;g="protocol hostname port pathname search hash host".split(" ");d=u.e("a",{href:a});if(e=""===d.host&&"file:"!==d.protocol)c=u.e("div"),c.innerHTML='<a href="'+a+'"></a>',d=c.firstChild,c.setAttribute("style","display:none; position:absolute;"),document.body.appendChild(c);a={};for(var h=0;h<g.length;h++)a[g[h]]=d[g[h]];e&&document.body.removeChild(c);return a};function C(){}var E=window.console||{log:C,warn:C,error:C};
|
||||
function F(a,c){var d=Array.prototype.slice.call(c);a?d.unshift(a.toUpperCase()+":"):a="log";u.log.history.push(d);d.unshift("VIDEOJS:");if(E[a].apply)E[a].apply(E,d);else E[a](d.join(" "))}u.log=function(){F(j,arguments)};u.log.history=[];u.log.error=function(){F("error",arguments)};u.log.warn=function(){F("warn",arguments)};
|
||||
u.qd=function(a){var c,d;a.getBoundingClientRect&&a.parentNode&&(c=a.getBoundingClientRect());if(!c)return{left:0,top:0};a=document.documentElement;d=document.body;return{left:u.round(c.left+(window.pageXOffset||d.scrollLeft)-(a.clientLeft||d.clientLeft||0)),top:u.round(c.top+(window.pageYOffset||d.scrollTop)-(a.clientTop||d.clientTop||0))}};u.oa={};u.oa.Jb=function(a,c){var d,e,g;a=u.l.copy(a);for(d in c)c.hasOwnProperty(d)&&(e=a[d],g=c[d],a[d]=u.l.Ra(e)&&u.l.Ra(g)?u.oa.Jb(e,g):c[d]);return a};
|
||||
u.b=u.pa.extend({h:function(a,c,d){this.c=a;this.j=u.l.copy(this.j);c=this.options(c);this.T=c.id||(c.el&&c.el.id?c.el.id:a.id()+"_component_"+u.u++);this.yd=c.name||j;this.a=c.el||this.e();this.N=[];this.Na={};this.Oa={};this.xc();this.I(d);if(c.Gc!==l){var e,g;e=u.bind(this.m(),this.m().reportUserActivity);this.d("touchstart",function(){e();clearInterval(g);g=setInterval(e,250)});a=function(){e();clearInterval(g)};this.d("touchmove",e);this.d("touchend",a);this.d("touchcancel",a)}}});t=u.b.prototype;
|
||||
t.dispose=function(){this.k({type:"dispose",bubbles:l});if(this.N)for(var a=this.N.length-1;0<=a;a--)this.N[a].dispose&&this.N[a].dispose();this.Oa=this.Na=this.N=j;this.p();this.a.parentNode&&this.a.parentNode.removeChild(this.a);u.Fc(this.a);this.a=j};t.c=f;t.m=p("c");t.options=function(a){return a===b?this.j:this.j=u.oa.Jb(this.j,a)};t.e=function(a,c){return u.e(a,c)};t.v=p("a");t.ia=function(){return this.z||this.a};t.id=p("T");t.name=p("yd");t.children=p("N");t.sd=function(a){return this.Na[a]};
|
||||
t.ja=function(a){return this.Oa[a]};t.V=function(a,c){var d,e;"string"===typeof a?(e=a,c=c||{},d=c.componentClass||u.$(e),c.name=e,d=new window.videojs[d](this.c||this,c)):d=a;this.N.push(d);"function"===typeof d.id&&(this.Na[d.id()]=d);(e=e||d.name&&d.name())&&(this.Oa[e]=d);"function"===typeof d.el&&d.el()&&this.ia().appendChild(d.el());return d};
|
||||
t.removeChild=function(a){"string"===typeof a&&(a=this.ja(a));if(a&&this.N){for(var c=l,d=this.N.length-1;0<=d;d--)if(this.N[d]===a){c=f;this.N.splice(d,1);break}c&&(this.Na[a.id]=j,this.Oa[a.name]=j,(c=a.v())&&c.parentNode===this.ia()&&this.ia().removeChild(a.v()))}};t.xc=function(){var a,c,d,e;a=this;if(c=this.options().children)if(c instanceof Array)for(var g=0;g<c.length;g++)d=c[g],"string"==typeof d?(e=d,d={}):e=d.name,a[e]=a.V(e,d);else u.l.wa(c,function(c,d){d!==l&&(a[c]=a.V(c,d))})};t.S=r("");
|
||||
t.d=function(a,c){u.d(this.a,a,u.bind(this,c));return this};t.p=function(a,c){u.p(this.a,a,c);return this};t.W=function(a,c){u.W(this.a,a,u.bind(this,c));return this};t.k=function(a,c){u.k(this.a,a,c);return this};t.I=function(a){a&&(this.ca?a.call(this):(this.Ya===b&&(this.Ya=[]),this.Ya.push(a)));return this};t.Ea=function(){this.ca=f;var a=this.Ya;if(a&&0<a.length){for(var c=0,d=a.length;c<d;c++)a[c].call(this);this.Ya=[];this.k("ready")}};t.o=function(a){u.o(this.a,a);return this};
|
||||
t.r=function(a){u.r(this.a,a);return this};t.show=function(){this.a.style.display="block";return this};t.G=function(){this.a.style.display="none";return this};function G(a){a.r("vjs-lock-showing")}t.disable=function(){this.G();this.show=m()};t.width=function(a,c){return H(this,"width",a,c)};t.height=function(a,c){return H(this,"height",a,c)};t.ld=function(a,c){return this.width(a,f).height(c)};
|
||||
function H(a,c,d,e){if(d!==b)return a.a.style[c]=-1!==(""+d).indexOf("%")||-1!==(""+d).indexOf("px")?d:"auto"===d?"":d+"px",e||a.k("resize"),a;if(!a.a)return 0;d=a.a.style[c];e=d.indexOf("px");return-1!==e?parseInt(d.slice(0,e),10):parseInt(a.a["offset"+u.$(c)],10)}
|
||||
function I(a){var c,d,e,g,h,k,q,n;c=0;d=j;a.d("touchstart",function(a){1===a.touches.length&&(d=a.touches[0],c=(new Date).getTime(),g=f)});a.d("touchmove",function(a){1<a.touches.length?g=l:d&&(k=a.touches[0].pageX-d.pageX,q=a.touches[0].pageY-d.pageY,n=Math.sqrt(k*k+q*q),22<n&&(g=l))});h=function(){g=l};a.d("touchleave",h);a.d("touchcancel",h);a.d("touchend",function(a){d=j;g===f&&(e=(new Date).getTime()-c,250>e&&(a.preventDefault(),this.k("tap")))})}
|
||||
u.s=u.b.extend({h:function(a,c){u.b.call(this,a,c);I(this);this.d("tap",this.q);this.d("click",this.q);this.d("focus",this.Ua);this.d("blur",this.Ta)}});t=u.s.prototype;t.e=function(a,c){c=u.l.B({className:this.S(),innerHTML:'<div class="vjs-control-content"><span class="vjs-control-text">'+(this.sa||"Need Text")+"</span></div>",role:"button","aria-live":"polite",tabIndex:0},c);return u.b.prototype.e.call(this,a,c)};t.S=function(){return"vjs-control "+u.b.prototype.S.call(this)};t.q=m();
|
||||
t.Ua=function(){u.d(document,"keyup",u.bind(this,this.da))};t.da=function(a){if(32==a.which||13==a.which)a.preventDefault(),this.q()};t.Ta=function(){u.p(document,"keyup",u.bind(this,this.da))};
|
||||
u.Q=u.b.extend({h:function(a,c){u.b.call(this,a,c);this.cd=this.ja(this.j.barName);this.handle=this.ja(this.j.handleName);this.d("mousedown",this.Va);this.d("touchstart",this.Va);this.d("focus",this.Ua);this.d("blur",this.Ta);this.d("click",this.q);this.c.d("controlsvisible",u.bind(this,this.update));a.d(this.Dc,u.bind(this,this.update));this.R={}}});t=u.Q.prototype;
|
||||
t.e=function(a,c){c=c||{};c.className+=" vjs-slider";c=u.l.B({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},c);return u.b.prototype.e.call(this,a,c)};t.Va=function(a){a.preventDefault();u.dd();this.R.move=u.bind(this,this.Kb);this.R.end=u.bind(this,this.Lb);u.d(document,"mousemove",this.R.move);u.d(document,"mouseup",this.R.end);u.d(document,"touchmove",this.R.move);u.d(document,"touchend",this.R.end);this.Kb(a)};
|
||||
t.Lb=function(){u.Vd();u.p(document,"mousemove",this.R.move,l);u.p(document,"mouseup",this.R.end,l);u.p(document,"touchmove",this.R.move,l);u.p(document,"touchend",this.R.end,l);this.update()};t.update=function(){if(this.a){var a,c=this.Cb(),d=this.handle,e=this.cd;isNaN(c)&&(c=0);a=c;if(d){a=this.a.offsetWidth;var g=d.v().offsetWidth;a=g?g/a:0;c*=1-a;a=c+a/2;d.v().style.left=u.round(100*c,2)+"%"}e.v().style.width=u.round(100*a,2)+"%"}};
|
||||
function J(a,c){var d,e,g,h;d=a.a;e=u.qd(d);h=g=d.offsetWidth;d=a.handle;if(a.j.Xd)return h=e.top,e=c.changedTouches?c.changedTouches[0].pageY:c.pageY,d&&(d=d.v().offsetHeight,h+=d/2,g-=d),Math.max(0,Math.min(1,(h-e+g)/g));g=e.left;e=c.changedTouches?c.changedTouches[0].pageX:c.pageX;d&&(d=d.v().offsetWidth,g+=d/2,h-=d);return Math.max(0,Math.min(1,(e-g)/h))}t.Ua=function(){u.d(document,"keyup",u.bind(this,this.da))};
|
||||
t.da=function(a){37==a.which?(a.preventDefault(),this.Ic()):39==a.which&&(a.preventDefault(),this.Jc())};t.Ta=function(){u.p(document,"keyup",u.bind(this,this.da))};t.q=function(a){a.stopImmediatePropagation();a.preventDefault()};u.Y=u.b.extend();u.Y.prototype.defaultValue=0;u.Y.prototype.e=function(a,c){c=c||{};c.className+=" vjs-slider-handle";c=u.l.B({innerHTML:'<span class="vjs-control-text">'+this.defaultValue+"</span>"},c);return u.b.prototype.e.call(this,"div",c)};u.ga=u.b.extend();
|
||||
function ca(a,c){a.V(c);c.d("click",u.bind(a,function(){G(this)}))}u.ga.prototype.e=function(){var a=this.options().oc||"ul";this.z=u.e(a,{className:"vjs-menu-content"});a=u.b.prototype.e.call(this,"div",{append:this.z,className:"vjs-menu"});a.appendChild(this.z);u.d(a,"click",function(a){a.preventDefault();a.stopImmediatePropagation()});return a};u.J=u.s.extend({h:function(a,c){u.s.call(this,a,c);this.selected(c.selected)}});
|
||||
u.J.prototype.e=function(a,c){return u.s.prototype.e.call(this,"li",u.l.B({className:"vjs-menu-item",innerHTML:this.j.label},c))};u.J.prototype.q=function(){this.selected(f)};u.J.prototype.selected=function(a){a?(this.o("vjs-selected"),this.a.setAttribute("aria-selected",f)):(this.r("vjs-selected"),this.a.setAttribute("aria-selected",l))};
|
||||
u.L=u.s.extend({h:function(a,c){u.s.call(this,a,c);this.za=this.va();this.V(this.za);this.O&&0===this.O.length&&this.G();this.d("keyup",this.da);this.a.setAttribute("aria-haspopup",f);this.a.setAttribute("role","button")}});t=u.L.prototype;t.ra=l;t.va=function(){var a=new u.ga(this.c);this.options().title&&a.ia().appendChild(u.e("li",{className:"vjs-menu-title",innerHTML:u.$(this.options().title),Td:-1}));if(this.O=this.createItems())for(var c=0;c<this.O.length;c++)ca(a,this.O[c]);return a};
|
||||
t.ua=m();t.S=function(){return this.className+" vjs-menu-button "+u.s.prototype.S.call(this)};t.Ua=m();t.Ta=m();t.q=function(){this.W("mouseout",u.bind(this,function(){G(this.za);this.a.blur()}));this.ra?K(this):L(this)};t.da=function(a){a.preventDefault();32==a.which||13==a.which?this.ra?K(this):L(this):27==a.which&&this.ra&&K(this)};function L(a){a.ra=f;a.za.o("vjs-lock-showing");a.a.setAttribute("aria-pressed",f);a.O&&0<a.O.length&&a.O[0].v().focus()}
|
||||
function K(a){a.ra=l;G(a.za);a.a.setAttribute("aria-pressed",l)}u.F=function(a){"number"==typeof a?this.code=a:"string"==typeof a?this.message=a:"object"==typeof a&&u.l.B(this,a);this.message||(this.message=u.F.jd[this.code]||"")};u.F.prototype.code=0;u.F.prototype.message="";u.F.prototype.status=j;u.F.Qa="MEDIA_ERR_CUSTOM MEDIA_ERR_ABORTED MEDIA_ERR_NETWORK MEDIA_ERR_DECODE MEDIA_ERR_SRC_NOT_SUPPORTED MEDIA_ERR_ENCRYPTED".split(" ");
|
||||
u.F.jd={1:"You aborted the video playback",2:"A network error caused the video download to fail part-way.",3:"The video playback was aborted due to a corruption problem or because the video used features your browser did not support.",4:"The video could not be loaded, either because the server or network failed or because the format is not supported.",5:"The video is encrypted and we do not have the keys to decrypt it."};for(var M=0;M<u.F.Qa.length;M++)u.F[u.F.Qa[M]]=M,u.F.prototype[u.F.Qa[M]]=M;
|
||||
u.Player=u.b.extend({h:function(a,c,d){this.P=a;a.id=a.id||"vjs_video_"+u.u++;c=u.l.B(da(a),c);this.w={};this.Ec=c.poster;this.xb=c.controls;a.controls=l;c.Gc=l;this.I(function(){this.d("loadstart",this.Dd);this.d("ended",this.zd);this.d("play",this.Nb);this.d("firstplay",this.Bd);this.d("pause",this.Mb);this.d("progress",this.Ed);this.d("durationchange",this.Bc);this.d("fullscreenchange",this.Cd)});u.b.call(this,this,c,d);this.controls()?this.o("vjs-controls-enabled"):this.o("vjs-controls-disabled");
|
||||
u.Aa[this.T]=this;c.plugins&&u.l.wa(c.plugins,function(a,c){this[a](c)},this);var e,g,h,k,q,n;e=u.bind(this,this.reportUserActivity);this.d("mousedown",function(){e();clearInterval(g);g=setInterval(e,250)});this.d("mousemove",function(a){if(a.screenX!=q||a.screenY!=n)q=a.screenX,n=a.screenY,e()});this.d("mouseup",function(){e();clearInterval(g)});this.d("keydown",e);this.d("keyup",e);h=setInterval(u.bind(this,function(){this.na&&(this.na=l,this.userActive(f),clearTimeout(k),k=setTimeout(u.bind(this,
|
||||
function(){this.na||this.userActive(l)}),2E3))}),250);this.d("dispose",function(){clearInterval(h);clearTimeout(k)})}});t=u.Player.prototype;t.j=u.options;t.dispose=function(){this.k("dispose");this.p("dispose");u.Aa[this.T]=j;this.P&&this.P.player&&(this.P.player=j);this.a&&this.a.player&&(this.a.player=j);clearInterval(this.Xa);this.Ba();this.g&&this.g.dispose();u.b.prototype.dispose.call(this)};
|
||||
function da(a){var c={sources:[],tracks:[]};u.l.B(c,u.Bb(a));if(a.hasChildNodes()){var d,e,g,h;a=a.childNodes;g=0;for(h=a.length;g<h;g++)d=a[g],e=d.nodeName.toLowerCase(),"source"===e?c.sources.push(u.Bb(d)):"track"===e&&c.tracks.push(u.Bb(d))}return c}
|
||||
t.e=function(){var a=this.a=u.b.prototype.e.call(this,"div"),c=this.P;c.removeAttribute("width");c.removeAttribute("height");if(c.hasChildNodes()){var d,e,g,h,k;d=c.childNodes;e=d.length;for(k=[];e--;)g=d[e],h=g.nodeName.toLowerCase(),"track"===h&&k.push(g);for(d=0;d<k.length;d++)c.removeChild(k[d])}a.id=c.id;a.className=c.className;c.id+="_html5_api";c.className="vjs-tech";c.player=a.player=this;this.o("vjs-paused");this.width(this.j.width,f);this.height(this.j.height,f);c.parentNode&&c.parentNode.insertBefore(a,
|
||||
c);u.Db(c,a);return a};
|
||||
function N(a,c,d){a.g&&(a.ca=l,a.g.dispose(),a.Hb&&(a.Hb=l,clearInterval(a.Xa)),a.Ib&&O(a),a.g=l);"Html5"!==c&&a.P&&(u.f.qc(a.P),a.P=j);a.Ca=c;a.ca=l;var e=u.l.B({source:d,parentEl:a.a},a.j[c.toLowerCase()]);d&&(d.src==a.w.src&&0<a.w.currentTime&&(e.startTime=a.w.currentTime),a.w.src=d.src);a.g=new window.videojs[c](a,e);a.g.I(function(){this.c.Ea();if(!this.n.progressEvents){var a=this.c;a.Hb=f;a.Xa=setInterval(u.bind(a,function(){this.w.sb<this.buffered().end(0)?this.k("progress"):1==this.bufferedPercent()&&
|
||||
(clearInterval(this.Xa),this.k("progress"))}),500);a.g&&a.g.W("progress",function(){this.n.progressEvents=f;var a=this.c;a.Hb=l;clearInterval(a.Xa)})}this.n.timeupdateEvents||(a=this.c,a.Ib=f,a.d("play",a.Mc),a.d("pause",a.Ba),a.g&&a.g.W("timeupdate",function(){this.n.timeupdateEvents=f;O(this.c)}))})}function O(a){a.Ib=l;a.Ba();a.p("play",a.Mc);a.p("pause",a.Ba)}t.Mc=function(){this.pc&&this.Ba();this.pc=setInterval(u.bind(this,function(){this.k("timeupdate")}),250)};
|
||||
t.Ba=function(){clearInterval(this.pc);this.k("timeupdate")};t.Dd=function(){this.p("play",P);this.W("play",P);this.error()&&this.error(j);u.r(this.a,"vjs-has-started")};function P(a){u.k(this.a,{type:"firstplay",target:this.a})||(a.preventDefault(),a.stopPropagation(),a.stopImmediatePropagation())}t.Nb=function(){u.r(this.a,"vjs-paused");u.o(this.a,"vjs-playing")};t.Bd=function(){this.j.starttime&&this.currentTime(this.j.starttime);this.o("vjs-has-started")};
|
||||
t.Mb=function(){u.r(this.a,"vjs-playing");u.o(this.a,"vjs-paused")};t.Ed=function(){1==this.bufferedPercent()&&this.k("loadedalldata")};t.zd=function(){this.j.loop&&(this.currentTime(0),this.play())};t.Bc=function(){var a=Q(this,"duration");a&&(0>a&&(a=Infinity),this.duration(a),Infinity===a?this.o("vjs-live"):this.r("vjs-live"))};t.Cd=function(){this.isFullScreen()?this.o("vjs-fullscreen"):this.r("vjs-fullscreen")};
|
||||
function R(a,c,d){if(a.g&&!a.g.ca)a.g.I(function(){this[c](d)});else try{a.g[c](d)}catch(e){throw u.log(e),e;}}function Q(a,c){if(a.g&&a.g.ca)try{return a.g[c]()}catch(d){throw a.g[c]===b?u.log("Video.js: "+c+" method not defined for "+a.Ca+" playback technology.",d):"TypeError"==d.name?(u.log("Video.js: "+c+" unavailable on "+a.Ca+" playback technology element.",d),a.g.ca=l):u.log(d),d;}}t.play=function(){this.error()||R(this,"play");return this};t.pause=function(){R(this,"pause");return this};
|
||||
t.paused=function(){return Q(this,"paused")===l?l:f};t.currentTime=function(a){return a!==b?(R(this,"setCurrentTime",a),this.Ib&&this.k("timeupdate"),this):this.w.currentTime=Q(this,"currentTime")||0};t.duration=function(a){if(a!==b)return this.w.duration=parseFloat(a),this;this.w.duration===b&&this.Bc();return this.w.duration||0};t.buffered=function(){var a=Q(this,"buffered"),c=a.length-1,d=this.w.sb=this.w.sb||0;a&&(0<=c&&a.end(c)!==d)&&(d=a.end(c),this.w.sb=d);return u.yb(0,d)};
|
||||
t.bufferedPercent=function(){return this.duration()?this.buffered().end(0)/this.duration():0};t.volume=function(a){if(a!==b)return a=Math.max(0,Math.min(1,parseFloat(a))),this.w.volume=a,R(this,"setVolume",a),u.Md(a),this;a=parseFloat(Q(this,"volume"));return isNaN(a)?1:a};t.muted=function(a){return a!==b?(R(this,"setMuted",a),this):Q(this,"muted")||l};t.$a=function(){return Q(this,"supportsFullScreen")||l};t.yc=l;t.isFullScreen=function(a){return a!==b?(this.yc=a,this):this.yc};
|
||||
t.requestFullScreen=function(){var a=u.Ub.requestFullScreen;this.isFullScreen(f);a?(u.d(document,a.zb,u.bind(this,function(c){this.isFullScreen(document[a.isFullScreen]);this.isFullScreen()===l&&u.p(document,a.zb,arguments.callee);this.k("fullscreenchange")})),this.a[a.Rb]()):this.g.$a()?R(this,"enterFullScreen"):(this.ud=f,this.md=document.documentElement.style.overflow,u.d(document,"keydown",u.bind(this,this.tc)),document.documentElement.style.overflow="hidden",u.o(document.body,"vjs-full-window"),
|
||||
this.k("enterFullWindow"),this.k("fullscreenchange"));return this};t.cancelFullScreen=function(){var a=u.Ub.requestFullScreen;this.isFullScreen(l);if(a)document[a.ub]();else this.g.$a()?R(this,"exitFullScreen"):(S(this),this.k("fullscreenchange"));return this};t.tc=function(a){27===a.keyCode&&(this.isFullScreen()===f?this.cancelFullScreen():S(this))};
|
||||
function S(a){a.ud=l;u.p(document,"keydown",a.tc);document.documentElement.style.overflow=a.md;u.r(document.body,"vjs-full-window");a.k("exitFullWindow")}
|
||||
t.src=function(a){if(a===b)return Q(this,"src");if(a instanceof Array){var c;a:{c=a;for(var d=0,e=this.j.techOrder;d<e.length;d++){var g=u.$(e[d]),h=window.videojs[g];if(h.isSupported())for(var k=0,q=c;k<q.length;k++){var n=q[k];if(h.canPlaySource(n)){c={source:n,g:g};break a}}}c=l}c?(a=c.source,c=c.g,c==this.Ca?this.src(a):N(this,c,a)):(this.error({code:4,message:this.options().notSupportedMessage}),this.Ea())}else a instanceof Object?window.videojs[this.Ca].canPlaySource(a)?this.src(a.src):this.src([a]):
|
||||
(this.w.src=a,this.ca?(R(this,"src",a),"auto"==this.j.preload&&this.load(),this.j.autoplay&&this.play()):this.I(function(){this.src(a)}));return this};t.load=function(){R(this,"load");return this};t.currentSrc=function(){return Q(this,"currentSrc")||this.w.src||""};t.Wa=function(a){return a!==b?(R(this,"setPreload",a),this.j.preload=a,this):Q(this,"preload")};t.autoplay=function(a){return a!==b?(R(this,"setAutoplay",a),this.j.autoplay=a,this):Q(this,"autoplay")};
|
||||
t.loop=function(a){return a!==b?(R(this,"setLoop",a),this.j.loop=a,this):Q(this,"loop")};t.poster=function(a){if(a===b)return this.Ec;this.Ec=a;R(this,"setPoster",a);this.k("posterchange")};t.controls=function(a){return a!==b?(a=!!a,this.xb!==a&&((this.xb=a)?(this.r("vjs-controls-disabled"),this.o("vjs-controls-enabled"),this.k("controlsenabled")):(this.r("vjs-controls-enabled"),this.o("vjs-controls-disabled"),this.k("controlsdisabled"))),this):this.xb};u.Player.prototype.Wb;t=u.Player.prototype;
|
||||
t.usingNativeControls=function(a){return a!==b?(a=!!a,this.Wb!==a&&((this.Wb=a)?(this.o("vjs-using-native-controls"),this.k("usingnativecontrols")):(this.r("vjs-using-native-controls"),this.k("usingcustomcontrols"))),this):this.Wb};t.ba=j;t.error=function(a){if(a===b)return this.ba;if(a===j)return this.ba=a,this.r("vjs-error"),this;this.ba=a instanceof u.F?a:new u.F(a);this.k("error");this.o("vjs-error");u.log.error("(CODE:"+this.ba.code+" "+u.F.Qa[this.ba.code]+")",this.ba.message,this.ba);return this};
|
||||
t.ended=function(){return Q(this,"ended")};t.seeking=function(){return Q(this,"seeking")};t.na=f;t.reportUserActivity=function(){this.na=f};t.Vb=f;t.userActive=function(a){return a!==b?(a=!!a,a!==this.Vb&&((this.Vb=a)?(this.na=f,this.r("vjs-user-inactive"),this.o("vjs-user-active"),this.k("useractive")):(this.na=l,this.g&&this.g.W("mousemove",function(a){a.stopPropagation();a.preventDefault()}),this.r("vjs-user-active"),this.o("vjs-user-inactive"),this.k("userinactive"))),this):this.Vb};
|
||||
t.playbackRate=function(a){return a!==b?(R(this,"setPlaybackRate",a),this):this.g&&this.g.n&&this.g.n.playbackRate?Q(this,"playbackRate"):1};var T,U,V;V=document.createElement("div");U={};
|
||||
V.ce!==b?(U.Rb="requestFullscreen",U.ub="exitFullscreen",U.zb="fullscreenchange",U.isFullScreen="fullScreen"):(document.mozCancelFullScreen?(T="moz",U.isFullScreen=T+"FullScreen",U.Rb=T+"RequestFullScreen"):(T="webkit",U.isFullScreen=T+"IsFullScreen",U.Rb=T+"RequestFullscreen"),V[T+"RequestFullScreen"]&&(U.ub=T+"CancelFullScreen"),U.zb=T+"fullscreenchange");document[U.ub]&&(u.Ub.requestFullScreen=U);u.Ha=u.b.extend();
|
||||
u.Ha.prototype.j={he:"play",children:{playToggle:{},currentTimeDisplay:{},timeDivider:{},durationDisplay:{},remainingTimeDisplay:{},liveDisplay:{},progressControl:{},fullscreenToggle:{},volumeControl:{},muteToggle:{},playbackRateMenuButton:{}}};u.Ha.prototype.e=function(){return u.e("div",{className:"vjs-control-bar"})};u.bc=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});
|
||||
u.bc.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-live-controls vjs-control"});this.z=u.e("div",{className:"vjs-live-display",innerHTML:'<span class="vjs-control-text">Stream Type </span>LIVE',"aria-live":"off"});a.appendChild(this.z);return a};u.ec=u.s.extend({h:function(a,c){u.s.call(this,a,c);a.d("play",u.bind(this,this.Nb));a.d("pause",u.bind(this,this.Mb))}});t=u.ec.prototype;t.sa="Play";t.S=function(){return"vjs-play-control "+u.s.prototype.S.call(this)};
|
||||
t.q=function(){this.c.paused()?this.c.play():this.c.pause()};t.Nb=function(){u.r(this.a,"vjs-paused");u.o(this.a,"vjs-playing");this.a.children[0].children[0].innerHTML="Pause"};t.Mb=function(){u.r(this.a,"vjs-playing");u.o(this.a,"vjs-paused");this.a.children[0].children[0].innerHTML="Play"};u.eb=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("timeupdate",u.bind(this,this.fa))}});
|
||||
u.eb.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-current-time vjs-time-controls vjs-control"});this.z=u.e("div",{className:"vjs-current-time-display",innerHTML:'<span class="vjs-control-text">Current Time </span>0:00',"aria-live":"off"});a.appendChild(this.z);return a};u.eb.prototype.fa=function(){var a=this.c.Za?this.c.w.currentTime:this.c.currentTime();this.z.innerHTML='<span class="vjs-control-text">Current Time </span>'+u.ya(a,this.c.duration())};
|
||||
u.fb=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("timeupdate",u.bind(this,this.fa))}});u.fb.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-duration vjs-time-controls vjs-control"});this.z=u.e("div",{className:"vjs-duration-display",innerHTML:'<span class="vjs-control-text">Duration Time </span>0:00',"aria-live":"off"});a.appendChild(this.z);return a};
|
||||
u.fb.prototype.fa=function(){var a=this.c.duration();a&&(this.z.innerHTML='<span class="vjs-control-text">Duration Time </span>'+u.ya(a))};u.kc=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.kc.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-time-divider",innerHTML:"<div><span>/</span></div>"})};u.mb=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("timeupdate",u.bind(this,this.fa))}});
|
||||
u.mb.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-remaining-time vjs-time-controls vjs-control"});this.z=u.e("div",{className:"vjs-remaining-time-display",innerHTML:'<span class="vjs-control-text">Remaining Time </span>-0:00',"aria-live":"off"});a.appendChild(this.z);return a};u.mb.prototype.fa=function(){this.c.duration()&&(this.z.innerHTML='<span class="vjs-control-text">Remaining Time </span>-'+u.ya(this.c.duration()-this.c.currentTime()))};
|
||||
u.Ia=u.s.extend({h:function(a,c){u.s.call(this,a,c)}});u.Ia.prototype.sa="Fullscreen";u.Ia.prototype.S=function(){return"vjs-fullscreen-control "+u.s.prototype.S.call(this)};u.Ia.prototype.q=function(){this.c.isFullScreen()?(this.c.cancelFullScreen(),this.a.children[0].children[0].innerHTML="Fullscreen"):(this.c.requestFullScreen(),this.a.children[0].children[0].innerHTML="Non-Fullscreen")};u.lb=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.lb.prototype.j={children:{seekBar:{}}};
|
||||
u.lb.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-progress-control vjs-control"})};u.gc=u.Q.extend({h:function(a,c){u.Q.call(this,a,c);a.d("timeupdate",u.bind(this,this.ma));a.I(u.bind(this,this.ma))}});t=u.gc.prototype;t.j={children:{loadProgressBar:{},playProgressBar:{},seekHandle:{}},barName:"playProgressBar",handleName:"seekHandle"};t.Dc="timeupdate";t.e=function(){return u.Q.prototype.e.call(this,"div",{className:"vjs-progress-holder","aria-label":"video progress bar"})};
|
||||
t.ma=function(){var a=this.c.Za?this.c.w.currentTime:this.c.currentTime();this.a.setAttribute("aria-valuenow",u.round(100*this.Cb(),2));this.a.setAttribute("aria-valuetext",u.ya(a,this.c.duration()))};t.Cb=function(){return this.c.currentTime()/this.c.duration()};t.Va=function(a){u.Q.prototype.Va.call(this,a);this.c.Za=f;this.Yd=!this.c.paused();this.c.pause()};t.Kb=function(a){a=J(this,a)*this.c.duration();a==this.c.duration()&&(a-=0.1);this.c.currentTime(a)};
|
||||
t.Lb=function(a){u.Q.prototype.Lb.call(this,a);this.c.Za=l;this.Yd&&this.c.play()};t.Jc=function(){this.c.currentTime(this.c.currentTime()+5)};t.Ic=function(){this.c.currentTime(this.c.currentTime()-5)};u.ib=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("progress",u.bind(this,this.update))}});u.ib.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-load-progress",innerHTML:'<span class="vjs-control-text">Loaded: 0%</span>'})};
|
||||
u.ib.prototype.update=function(){this.a.style&&(this.a.style.width=u.round(100*this.c.bufferedPercent(),2)+"%")};u.dc=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.dc.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-play-progress",innerHTML:'<span class="vjs-control-text">Progress: 0%</span>'})};u.Ka=u.Y.extend({h:function(a,c){u.Y.call(this,a,c);a.d("timeupdate",u.bind(this,this.fa))}});u.Ka.prototype.defaultValue="00:00";
|
||||
u.Ka.prototype.e=function(){return u.Y.prototype.e.call(this,"div",{className:"vjs-seek-handle","aria-live":"off"})};u.Ka.prototype.fa=function(){var a=this.c.Za?this.c.w.currentTime:this.c.currentTime();this.a.innerHTML='<span class="vjs-control-text">'+u.ya(a,this.c.duration())+"</span>"};u.ob=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.g&&(a.g.n&&a.g.n.volumeControl===l)&&this.o("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.g.n&&a.g.n.volumeControl===l?this.o("vjs-hidden"):this.r("vjs-hidden")}))}});
|
||||
u.ob.prototype.j={children:{volumeBar:{}}};u.ob.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-volume-control vjs-control"})};u.nb=u.Q.extend({h:function(a,c){u.Q.call(this,a,c);a.d("volumechange",u.bind(this,this.ma));a.I(u.bind(this,this.ma))}});t=u.nb.prototype;t.ma=function(){this.a.setAttribute("aria-valuenow",u.round(100*this.c.volume(),2));this.a.setAttribute("aria-valuetext",u.round(100*this.c.volume(),2)+"%")};
|
||||
t.j={children:{volumeLevel:{},volumeHandle:{}},barName:"volumeLevel",handleName:"volumeHandle"};t.Dc="volumechange";t.e=function(){return u.Q.prototype.e.call(this,"div",{className:"vjs-volume-bar","aria-label":"volume level"})};t.Kb=function(a){this.c.muted()&&this.c.muted(l);this.c.volume(J(this,a))};t.Cb=function(){return this.c.muted()?0:this.c.volume()};t.Jc=function(){this.c.volume(this.c.volume()+0.1)};t.Ic=function(){this.c.volume(this.c.volume()-0.1)};
|
||||
u.lc=u.b.extend({h:function(a,c){u.b.call(this,a,c)}});u.lc.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-volume-level",innerHTML:'<span class="vjs-control-text"></span>'})};u.pb=u.Y.extend();u.pb.prototype.defaultValue="00:00";u.pb.prototype.e=function(){return u.Y.prototype.e.call(this,"div",{className:"vjs-volume-handle"})};
|
||||
u.ha=u.s.extend({h:function(a,c){u.s.call(this,a,c);a.d("volumechange",u.bind(this,this.update));a.g&&(a.g.n&&a.g.n.volumeControl===l)&&this.o("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.g.n&&a.g.n.volumeControl===l?this.o("vjs-hidden"):this.r("vjs-hidden")}))}});u.ha.prototype.e=function(){return u.s.prototype.e.call(this,"div",{className:"vjs-mute-control vjs-control",innerHTML:'<div><span class="vjs-control-text">Mute</span></div>'})};
|
||||
u.ha.prototype.q=function(){this.c.muted(this.c.muted()?l:f)};u.ha.prototype.update=function(){var a=this.c.volume(),c=3;0===a||this.c.muted()?c=0:0.33>a?c=1:0.67>a&&(c=2);this.c.muted()?"Unmute"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML="Unmute"):"Mute"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML="Mute");for(a=0;4>a;a++)u.r(this.a,"vjs-vol-"+a);u.o(this.a,"vjs-vol-"+c)};
|
||||
u.qa=u.L.extend({h:function(a,c){u.L.call(this,a,c);a.d("volumechange",u.bind(this,this.update));a.g&&(a.g.n&&a.g.n.Pc===l)&&this.o("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.g.n&&a.g.n.Pc===l?this.o("vjs-hidden"):this.r("vjs-hidden")}));this.o("vjs-menu-button")}});u.qa.prototype.va=function(){var a=new u.ga(this.c,{oc:"div"}),c=new u.nb(this.c,u.l.B({Xd:f},this.j.oe));a.V(c);return a};u.qa.prototype.q=function(){u.ha.prototype.q.call(this);u.L.prototype.q.call(this)};
|
||||
u.qa.prototype.e=function(){return u.s.prototype.e.call(this,"div",{className:"vjs-volume-menu-button vjs-menu-button vjs-control",innerHTML:'<div><span class="vjs-control-text">Mute</span></div>'})};u.qa.prototype.update=u.ha.prototype.update;u.fc=u.L.extend({h:function(a,c){u.L.call(this,a,c);this.Oc();this.Nc();a.d("loadstart",u.bind(this,this.Oc));a.d("ratechange",u.bind(this,this.Nc))}});t=u.fc.prototype;
|
||||
t.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-playback-rate vjs-menu-button vjs-control",innerHTML:'<div class="vjs-control-content"><span class="vjs-control-text">Playback Rate</span></div>'});this.Ac=u.e("div",{className:"vjs-playback-rate-value",innerHTML:1});a.appendChild(this.Ac);return a};t.va=function(){var a=new u.ga(this.m()),c=this.m().options().Ob;if(c)for(var d=c.length-1;0<=d;d--)a.V(new u.kb(this.m(),{Qb:c[d]+"x"}));return a};
|
||||
t.ma=function(){this.v().setAttribute("aria-valuenow",this.m().playbackRate())};t.q=function(){for(var a=this.m().playbackRate(),c=this.m().options().Ob,d=c[0],e=0;e<c.length;e++)if(c[e]>a){d=c[e];break}this.m().playbackRate(d)};function ea(a){return a.m().g&&a.m().g.n.playbackRate&&a.m().options().Ob&&0<a.m().options().Ob.length}t.Oc=function(){ea(this)?this.r("vjs-hidden"):this.o("vjs-hidden")};t.Nc=function(){ea(this)&&(this.Ac.innerHTML=this.m().playbackRate()+"x")};
|
||||
u.kb=u.J.extend({oc:"button",h:function(a,c){var d=this.label=c.rate,e=this.Qb=parseFloat(d,10);c.label=d;c.selected=1===e;u.J.call(this,a,c);this.m().d("ratechange",u.bind(this,this.update))}});u.kb.prototype.q=function(){u.J.prototype.q.call(this);this.m().playbackRate(this.Qb)};u.kb.prototype.update=function(){this.selected(this.m().playbackRate()==this.Qb)};
|
||||
u.Ja=u.s.extend({h:function(a,c){u.s.call(this,a,c);a.poster()&&this.src(a.poster());(!a.poster()||!a.controls())&&this.G();a.d("posterchange",u.bind(this,function(){this.src(a.poster())}));a.d("play",u.bind(this,this.G))}});var fa="backgroundSize"in u.A.style;u.Ja.prototype.e=function(){var a=u.e("div",{className:"vjs-poster",tabIndex:-1});fa||a.appendChild(u.e("img"));return a};u.Ja.prototype.src=function(a){var c=this.v();a!==b&&(fa?c.style.backgroundImage='url("'+a+'")':c.firstChild.src=a)};
|
||||
u.Ja.prototype.q=function(){this.m().controls()&&this.c.play()};u.cc=u.b.extend({h:function(a,c){u.b.call(this,a,c);a.d("canplay",u.bind(this,this.G));a.d("canplaythrough",u.bind(this,this.G));a.d("playing",u.bind(this,this.G));a.d("seeking",u.bind(this,this.show));a.d("seeked",u.bind(this,this.G));a.d("ended",u.bind(this,this.G));a.d("waiting",u.bind(this,this.show))}});u.cc.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-loading-spinner"})};u.bb=u.s.extend();
|
||||
u.bb.prototype.e=function(){return u.s.prototype.e.call(this,"div",{className:"vjs-big-play-button",innerHTML:'<span aria-hidden="true"></span>',"aria-label":"play video"})};u.bb.prototype.q=function(){this.c.play()};u.gb=u.b.extend({h:function(a,c){u.b.call(this,a,c);this.update();a.d("error",u.bind(this,this.update))}});u.gb.prototype.e=function(){var a=u.b.prototype.e.call(this,"div",{className:"vjs-error-display"});this.z=u.e("div");a.appendChild(this.z);return a};
|
||||
u.gb.prototype.update=function(){this.m().error()&&(this.z.innerHTML=this.m().error().message)};
|
||||
u.t=u.b.extend({h:function(a,c,d){c=c||{};c.Gc=l;u.b.call(this,a,c,d);var e,g;g=this;e=this.m();a=function(){if(e.controls()&&!e.usingNativeControls()){var a;g.d("mousedown",g.q);g.d("touchstart",function(c){c.preventDefault();a=this.c.userActive()});g.d("touchmove",function(){a&&this.m().reportUserActivity()});I(g);g.d("tap",g.Fd)}};c=u.bind(g,g.Jd);this.I(a);e.d("controlsenabled",a);e.d("controlsdisabled",c)}});t=u.t.prototype;
|
||||
t.Jd=function(){this.p("tap");this.p("touchstart");this.p("touchmove");this.p("touchleave");this.p("touchcancel");this.p("touchend");this.p("click");this.p("mousedown")};t.q=function(a){0===a.button&&this.m().controls()&&(this.m().paused()?this.m().play():this.m().pause())};t.Fd=function(){this.m().userActive(!this.m().userActive())};t.Sb=m();t.n={volumeControl:f,fullscreenResize:l,playbackRate:l,progressEvents:l,timeupdateEvents:l};u.media={};u.media.ab="play pause paused currentTime setCurrentTime duration buffered volume setVolume muted setMuted width height supportsFullScreen enterFullScreen src load currentSrc preload setPreload autoplay setAutoplay loop setLoop error networkState readyState seeking initialTime startOffsetTime played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks defaultPlaybackRate playbackRate mediaGroup controller controls defaultMuted".split(" ");
|
||||
function ga(){var a=u.media.ab[i];return function(){throw Error('The "'+a+"\" method is not available on the playback technology's API");}}for(var i=u.media.ab.length-1;0<=i;i--)u.t.prototype[u.media.ab[i]]=ga();
|
||||
u.f=u.t.extend({h:function(a,c,d){this.n.volumeControl=u.f.fd();this.n.playbackRate=u.f.ed();this.n.movingMediaElementInDOM=!u.Uc;this.n.fullscreenResize=f;u.t.call(this,a,c,d);for(d=u.f.hb.length-1;0<=d;d--)u.d(this.a,u.f.hb[d],u.bind(this,this.od));(c=c.source)&&this.a.currentSrc===c.src&&0<this.a.networkState?a.I(function(){a.k("loadstart")}):c&&(this.a.src=c.src);if(u.ic&&a.options().nativeControlsForTouch!==l){var e,g,h,k;e=this;g=this.m();c=g.controls();e.a.controls=!!c;h=function(){e.a.controls=
|
||||
f};k=function(){e.a.controls=l};g.d("controlsenabled",h);g.d("controlsdisabled",k);c=function(){g.p("controlsenabled",h);g.p("controlsdisabled",k)};e.d("dispose",c);g.d("usingcustomcontrols",c);g.usingNativeControls(f)}a.I(function(){this.P&&(this.j.autoplay&&this.paused())&&(delete this.P.poster,this.play())});this.Ea()}});t=u.f.prototype;t.dispose=function(){u.t.prototype.dispose.call(this)};
|
||||
t.e=function(){var a=this.c,c=a.P,d;if(!c||this.n.movingMediaElementInDOM===l)c?(d=c.cloneNode(l),u.f.qc(c),c=d,a.P=j):c=u.e("video",{id:a.id()+"_html5_api",className:"vjs-tech"}),c.player=a,u.Db(c,a.v());d=["autoplay","preload","loop","muted"];for(var e=d.length-1;0<=e;e--){var g=d[e];a.j[g]!==j&&(c[g]=a.j[g])}return c};t.od=function(a){"error"==a.type?this.m().error(this.error().code):(a.bubbles=l,this.m().k(a))};t.play=function(){this.a.play()};t.pause=function(){this.a.pause()};t.paused=function(){return this.a.paused};
|
||||
t.currentTime=function(){return this.a.currentTime};t.Ld=function(a){try{this.a.currentTime=a}catch(c){u.log(c,"Video is not ready. (Video.js)")}};t.duration=function(){return this.a.duration||0};t.buffered=function(){return this.a.buffered};t.volume=function(){return this.a.volume};t.Rd=function(a){this.a.volume=a};t.muted=function(){return this.a.muted};t.Od=function(a){this.a.muted=a};t.width=function(){return this.a.offsetWidth};t.height=function(){return this.a.offsetHeight};
|
||||
t.$a=function(){return"function"==typeof this.a.webkitEnterFullScreen&&(/Android/.test(u.M)||!/Chrome|Mac OS X 10.5/.test(u.M))?f:l};t.rc=function(){var a=this.a;a.paused&&a.networkState<=a.$d?(this.a.play(),setTimeout(function(){a.pause();a.webkitEnterFullScreen()},0)):a.webkitEnterFullScreen()};t.pd=function(){this.a.webkitExitFullScreen()};t.src=function(a){this.a.src=a};t.load=function(){this.a.load()};t.currentSrc=function(){return this.a.currentSrc};t.poster=function(){return this.a.poster};
|
||||
t.Sb=function(a){this.a.poster=a};t.Wa=function(){return this.a.Wa};t.Qd=function(a){this.a.Wa=a};t.autoplay=function(){return this.a.autoplay};t.Kd=function(a){this.a.autoplay=a};t.controls=function(){return this.a.controls};t.loop=function(){return this.a.loop};t.Nd=function(a){this.a.loop=a};t.error=function(){return this.a.error};t.seeking=function(){return this.a.seeking};t.ended=function(){return this.a.ended};t.playbackRate=function(){return this.a.playbackRate};
|
||||
t.Pd=function(a){this.a.playbackRate=a};u.f.isSupported=function(){try{u.A.volume=0.5}catch(a){return l}return!!u.A.canPlayType};u.f.tb=function(a){try{return!!u.A.canPlayType(a.type)}catch(c){return""}};u.f.fd=function(){var a=u.A.volume;u.A.volume=a/2+0.1;return a!==u.A.volume};u.f.ed=function(){var a=u.A.playbackRate;u.A.playbackRate=a/2+0.1;return a!==u.A.playbackRate};var W,ha=/^application\/(?:x-|vnd\.apple\.)mpegurl/i,ia=/^video\/mp4/i;
|
||||
u.f.Cc=function(){4<=u.Xb&&(W||(W=u.A.constructor.prototype.canPlayType),u.A.constructor.prototype.canPlayType=function(a){return a&&ha.test(a)?"maybe":W.call(this,a)});u.Yc&&(W||(W=u.A.constructor.prototype.canPlayType),u.A.constructor.prototype.canPlayType=function(a){return a&&ia.test(a)?"maybe":W.call(this,a)})};u.f.Wd=function(){var a=u.A.constructor.prototype.canPlayType;u.A.constructor.prototype.canPlayType=W;W=j;return a};u.f.Cc();u.f.hb="loadstart suspend abort error emptied stalled loadedmetadata loadeddata canplay canplaythrough playing waiting seeking seeked ended durationchange timeupdate progress play pause ratechange volumechange".split(" ");
|
||||
u.f.qc=function(a){if(a){a.player=j;for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute("src");if("function"===typeof a.load)try{a.load()}catch(c){}}};
|
||||
u.i=u.t.extend({h:function(a,c,d){u.t.call(this,a,c,d);var e=c.source;d=c.parentEl;var g=this.a=u.e("div",{id:a.id()+"_temp_flash"}),h=a.id()+"_flash_api";a=a.j;var k=u.l.B({readyFunction:"videojs.Flash.onReady",eventProxyFunction:"videojs.Flash.onEvent",errorEventProxyFunction:"videojs.Flash.onError",autoplay:a.autoplay,preload:a.Wa,loop:a.loop,muted:a.muted},c.flashVars),q=u.l.B({wmode:"opaque",bgcolor:"#000000"},c.params),n=u.l.B({id:h,name:h,"class":"vjs-tech"},c.attributes),s;e&&(e.type&&u.i.wd(e.type)?
|
||||
(a=u.i.Kc(e.src),k.rtmpConnection=encodeURIComponent(a.wb),k.rtmpStream=encodeURIComponent(a.Tb)):k.src=encodeURIComponent(u.uc(e.src)));this.setCurrentTime=function(a){s=a;this.a.vjs_setProperty("currentTime",a)};this.currentTime=function(){return this.seeking()?s:this.a.vjs_getProperty("currentTime")};u.Db(g,d);c.startTime&&this.I(function(){this.load();this.play();this.currentTime(c.startTime)});u.ac&&this.I(function(){u.d(this.v(),"mousemove",u.bind(this,function(){this.m().k({type:"mousemove",
|
||||
bubbles:l})}))});if(c.iFrameMode===f&&!u.ac){var D=u.e("iframe",{id:h+"_iframe",name:h+"_iframe",className:"vjs-tech",scrolling:"no",marginWidth:0,marginHeight:0,frameBorder:0});k.readyFunction="ready";k.eventProxyFunction="events";k.errorEventProxyFunction="errors";u.d(D,"load",u.bind(this,function(){var a,d=D.contentWindow;a=D.contentDocument?D.contentDocument:D.contentWindow.document;a.write(u.i.vc(c.swf,k,q,n));d.player=this.c;d.ready=u.bind(this.c,function(c){var d=this.g;d.a=a.getElementById(c);
|
||||
u.i.vb(d)});d.events=u.bind(this.c,function(a,c){this&&"flash"===this.Ca&&this.k(c)});d.errors=u.bind(this.c,function(a,c){u.log("Flash Error",c)})}));g.parentNode.replaceChild(D,g)}else u.i.nd(c.swf,g,k,q,n)}});t=u.i.prototype;t.dispose=function(){u.t.prototype.dispose.call(this)};t.play=function(){this.a.vjs_play()};t.pause=function(){this.a.vjs_pause()};
|
||||
t.src=function(a){if(a===b)return this.currentSrc();u.i.vd(a)?(a=u.i.Kc(a),this.je(a.wb),this.ke(a.Tb)):(a=u.uc(a),this.a.vjs_src(a));if(this.c.autoplay()){var c=this;setTimeout(function(){c.play()},0)}};t.currentSrc=function(){var a=this.a.vjs_getProperty("currentSrc");if(a==j){var c=this.rtmpConnection(),d=this.rtmpStream();c&&d&&(a=u.i.Sd(c,d))}return a};t.load=function(){this.a.vjs_load()};t.poster=function(){this.a.vjs_getProperty("poster")};t.Sb=m();t.buffered=function(){return u.yb(0,this.a.vjs_getProperty("buffered"))};
|
||||
t.$a=r(l);t.rc=r(l);var ja=u.i.prototype,X="rtmpConnection rtmpStream preload defaultPlaybackRate playbackRate autoplay loop mediaGroup controller controls volume muted defaultMuted".split(" "),ka="error networkState readyState seeking initialTime duration startOffsetTime paused played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks".split(" ");function la(){var a=X[Y],c=a.charAt(0).toUpperCase()+a.slice(1);ja["set"+c]=function(c){return this.a.vjs_setProperty(a,c)}}
|
||||
function ma(a){ja[a]=function(){return this.a.vjs_getProperty(a)}}var Y;for(Y=0;Y<X.length;Y++)ma(X[Y]),la();for(Y=0;Y<ka.length;Y++)ma(ka[Y]);u.i.isSupported=function(){return 10<=u.i.version()[0]};u.i.tb=function(a){if(!a.type)return"";a=a.type.replace(/;.*/,"").toLowerCase();if(a in u.i.rd||a in u.i.Lc)return"maybe"};u.i.rd={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"};u.i.Lc={"rtmp/mp4":"MP4","rtmp/flv":"FLV"};
|
||||
u.i.onReady=function(a){a=u.v(a);var c=a.player||a.parentNode.player,d=c.g;a.player=c;d.a=a;u.i.vb(d)};u.i.vb=function(a){a.v().vjs_getProperty?a.Ea():setTimeout(function(){u.i.vb(a)},50)};u.i.onEvent=function(a,c){u.v(a).player.k(c)};u.i.onError=function(a,c){var d=u.v(a).player,e="FLASH: "+c;"srcnotfound"==c?d.error({code:4,message:e}):d.error(e)};
|
||||
u.i.version=function(){var a="0,0,0";try{a=(new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash")).GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(c){try{navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(d){}}return a.split(",")};
|
||||
u.i.nd=function(a,c,d,e,g){a=u.i.vc(a,d,e,g);a=u.e("div",{innerHTML:a}).childNodes[0];d=c.parentNode;c.parentNode.replaceChild(a,c);var h=d.childNodes[0];setTimeout(function(){h.style.display="block"},1E3)};
|
||||
u.i.vc=function(a,c,d,e){var g="",h="",k="";c&&u.l.wa(c,function(a,c){g+=a+"="+c+"&"});d=u.l.B({movie:a,flashvars:g,allowScriptAccess:"always",allowNetworking:"all"},d);u.l.wa(d,function(a,c){h+='<param name="'+a+'" value="'+c+'" />'});e=u.l.B({data:a,width:"100%",height:"100%"},e);u.l.wa(e,function(a,c){k+=a+'="'+c+'" '});return'<object type="application/x-shockwave-flash"'+k+">"+h+"</object>"};u.i.Sd=function(a,c){return a+"&"+c};
|
||||
u.i.Kc=function(a){var c={wb:"",Tb:""};if(!a)return c;var d=a.indexOf("&"),e;-1!==d?e=d+1:(d=e=a.lastIndexOf("/")+1,0===d&&(d=e=a.length));c.wb=a.substring(0,d);c.Tb=a.substring(e,a.length);return c};u.i.wd=function(a){return a in u.i.Lc};u.i.$c=/^rtmp[set]?:\/\//i;u.i.vd=function(a){return u.i.$c.test(a)};
|
||||
u.Zc=u.b.extend({h:function(a,c,d){u.b.call(this,a,c,d);if(!a.j.sources||0===a.j.sources.length){c=0;for(d=a.j.techOrder;c<d.length;c++){var e=u.$(d[c]),g=window.videojs[e];if(g&&g.isSupported()){N(a,e);break}}}else a.src(a.j.sources)}});u.Player.prototype.textTracks=function(){return this.Da=this.Da||[]};
|
||||
function na(a,c,d,e,g){var h=a.Da=a.Da||[];g=g||{};g.kind=c;g.label=d;g.language=e;c=u.$(c||"subtitles");var k=new window.videojs[c+"Track"](a,g);h.push(k);k.Pa()&&a.I(function(){setTimeout(function(){k.show()},0)})}function oa(a,c,d){for(var e=a.Da,g=0,h=e.length,k,q;g<h;g++)k=e[g],k.id()===c?(k.show(),q=k):d&&(k.K()==d&&0<k.mode())&&k.disable();(c=q?q.K():d?d:l)&&a.k(c+"trackchange")}
|
||||
u.C=u.b.extend({h:function(a,c){u.b.call(this,a,c);this.T=c.id||"vjs_"+c.kind+"_"+c.language+"_"+u.u++;this.Hc=c.src;this.kd=c["default"]||c.dflt;this.Ud=c.title;this.ge=c.srclang;this.xd=c.label;this.aa=[];this.qb=[];this.ka=this.la=0;this.c.d("fullscreenchange",u.bind(this,this.bd))}});t=u.C.prototype;t.K=p("H");t.src=p("Hc");t.Pa=p("kd");t.title=p("Ud");t.label=p("xd");t.gd=p("aa");t.ad=p("qb");t.readyState=p("la");t.mode=p("ka");
|
||||
t.bd=function(){this.a.style.fontSize=this.c.isFullScreen()?140*(screen.width/this.c.width())+"%":""};t.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-"+this.H+" vjs-text-track"})};t.show=function(){pa(this);this.ka=2;u.b.prototype.show.call(this)};t.G=function(){pa(this);this.ka=1;u.b.prototype.G.call(this)};
|
||||
t.disable=function(){2==this.ka&&this.G();this.c.p("timeupdate",u.bind(this,this.update,this.T));this.c.p("ended",u.bind(this,this.reset,this.T));this.reset();this.c.ja("textTrackDisplay").removeChild(this);this.ka=0};function pa(a){0===a.la&&a.load();0===a.ka&&(a.c.d("timeupdate",u.bind(a,a.update,a.T)),a.c.d("ended",u.bind(a,a.reset,a.T)),("captions"===a.H||"subtitles"===a.H)&&a.c.ja("textTrackDisplay").V(a))}
|
||||
t.load=function(){0===this.la&&(this.la=1,u.get(this.Hc,u.bind(this,this.Gd),u.bind(this,this.Ad)))};t.Ad=function(a){this.error=a;this.la=3;this.k("error")};t.Gd=function(a){var c,d;a=a.split("\n");for(var e="",g=1,h=a.length;g<h;g++)if(e=u.trim(a[g])){-1==e.indexOf("--\x3e")?(c=e,e=u.trim(a[++g])):c=this.aa.length;c={id:c,index:this.aa.length};d=e.split(" --\x3e ");c.startTime=qa(d[0]);c.xa=qa(d[1]);for(d=[];a[++g]&&(e=u.trim(a[g]));)d.push(e);c.text=d.join("<br/>");this.aa.push(c)}this.la=2;this.k("loaded")};
|
||||
function qa(a){var c=a.split(":");a=0;var d,e,g;3==c.length?(d=c[0],e=c[1],c=c[2]):(d=0,e=c[0],c=c[1]);c=c.split(/\s+/);c=c.splice(0,1)[0];c=c.split(/\.|,/);g=parseFloat(c[1]);c=c[0];a+=3600*parseFloat(d);a+=60*parseFloat(e);a+=parseFloat(c);g&&(a+=g/1E3);return a}
|
||||
t.update=function(){if(0<this.aa.length){var a=this.c.currentTime();if(this.Pb===b||a<this.Pb||this.Sa<=a){var c=this.aa,d=this.c.duration(),e=0,g=l,h=[],k,q,n,s;a>=this.Sa||this.Sa===b?s=this.Ab!==b?this.Ab:0:(g=f,s=this.Gb!==b?this.Gb:c.length-1);for(;;){n=c[s];if(n.xa<=a)e=Math.max(e,n.xa),n.Ma&&(n.Ma=l);else if(a<n.startTime){if(d=Math.min(d,n.startTime),n.Ma&&(n.Ma=l),!g)break}else g?(h.splice(0,0,n),q===b&&(q=s),k=s):(h.push(n),k===b&&(k=s),q=s),d=Math.min(d,n.xa),e=Math.max(e,n.startTime),
|
||||
n.Ma=f;if(g)if(0===s)break;else s--;else if(s===c.length-1)break;else s++}this.qb=h;this.Sa=d;this.Pb=e;this.Ab=k;this.Gb=q;a=this.qb;c="";d=0;for(e=a.length;d<e;d++)c+='<span class="vjs-tt-cue">'+a[d].text+"</span>";this.a.innerHTML=c;this.k("cuechange")}}};t.reset=function(){this.Sa=0;this.Pb=this.c.duration();this.Gb=this.Ab=0};u.Zb=u.C.extend();u.Zb.prototype.H="captions";u.hc=u.C.extend();u.hc.prototype.H="subtitles";u.$b=u.C.extend();u.$b.prototype.H="chapters";
|
||||
u.jc=u.b.extend({h:function(a,c,d){u.b.call(this,a,c,d);if(a.j.tracks&&0<a.j.tracks.length){c=this.c;a=a.j.tracks;for(var e=0;e<a.length;e++)d=a[e],na(c,d.kind,d.label,d.language,d)}}});u.jc.prototype.e=function(){return u.b.prototype.e.call(this,"div",{className:"vjs-text-track-display"})};u.Z=u.J.extend({h:function(a,c){var d=this.ea=c.track;c.label=d.label();c.selected=d.Pa();u.J.call(this,a,c);this.c.d(d.K()+"trackchange",u.bind(this,this.update))}});
|
||||
u.Z.prototype.q=function(){u.J.prototype.q.call(this);oa(this.c,this.ea.T,this.ea.K())};u.Z.prototype.update=function(){this.selected(2==this.ea.mode())};u.jb=u.Z.extend({h:function(a,c){c.track={K:function(){return c.kind},m:a,label:function(){return c.kind+" off"},Pa:r(l),mode:r(l)};u.Z.call(this,a,c);this.selected(f)}});u.jb.prototype.q=function(){u.Z.prototype.q.call(this);oa(this.c,this.ea.T,this.ea.K())};
|
||||
u.jb.prototype.update=function(){for(var a=this.c.textTracks(),c=0,d=a.length,e,g=f;c<d;c++)e=a[c],e.K()==this.ea.K()&&2==e.mode()&&(g=l);this.selected(g)};u.U=u.L.extend({h:function(a,c){u.L.call(this,a,c);1>=this.O.length&&this.G()}});u.U.prototype.ua=function(){var a=[],c;a.push(new u.jb(this.c,{kind:this.H}));for(var d=0;d<this.c.textTracks().length;d++)c=this.c.textTracks()[d],c.K()===this.H&&a.push(new u.Z(this.c,{track:c}));return a};
|
||||
u.Fa=u.U.extend({h:function(a,c,d){u.U.call(this,a,c,d);this.a.setAttribute("aria-label","Captions Menu")}});u.Fa.prototype.H="captions";u.Fa.prototype.sa="Captions";u.Fa.prototype.className="vjs-captions-button";u.La=u.U.extend({h:function(a,c,d){u.U.call(this,a,c,d);this.a.setAttribute("aria-label","Subtitles Menu")}});u.La.prototype.H="subtitles";u.La.prototype.sa="Subtitles";u.La.prototype.className="vjs-subtitles-button";
|
||||
u.Ga=u.U.extend({h:function(a,c,d){u.U.call(this,a,c,d);this.a.setAttribute("aria-label","Chapters Menu")}});t=u.Ga.prototype;t.H="chapters";t.sa="Chapters";t.className="vjs-chapters-button";t.ua=function(){for(var a=[],c,d=0;d<this.c.textTracks().length;d++)c=this.c.textTracks()[d],c.K()===this.H&&a.push(new u.Z(this.c,{track:c}));return a};
|
||||
t.va=function(){for(var a=this.c.textTracks(),c=0,d=a.length,e,g,h=this.O=[];c<d;c++)if(e=a[c],e.K()==this.H&&e.Pa()){if(2>e.readyState()){this.de=e;e.d("loaded",u.bind(this,this.va));return}g=e;break}a=this.za=new u.ga(this.c);a.ia().appendChild(u.e("li",{className:"vjs-menu-title",innerHTML:u.$(this.H),Td:-1}));if(g){e=g.aa;for(var k,c=0,d=e.length;c<d;c++)k=e[c],k=new u.cb(this.c,{track:g,cue:k}),h.push(k),a.V(k)}0<this.O.length&&this.show();return a};
|
||||
u.cb=u.J.extend({h:function(a,c){var d=this.ea=c.track,e=this.cue=c.cue,g=a.currentTime();c.label=e.text;c.selected=e.startTime<=g&&g<e.xa;u.J.call(this,a,c);d.d("cuechange",u.bind(this,this.update))}});u.cb.prototype.q=function(){u.J.prototype.q.call(this);this.c.currentTime(this.cue.startTime);this.update(this.cue.startTime)};u.cb.prototype.update=function(){var a=this.cue,c=this.c.currentTime();this.selected(a.startTime<=c&&c<a.xa)};
|
||||
u.l.B(u.Ha.prototype.j.children,{subtitlesButton:{},captionsButton:{},chaptersButton:{}});
|
||||
if("undefined"!==typeof window.JSON&&"function"===window.JSON.parse)u.JSON=window.JSON;else{u.JSON={};var Z=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;u.JSON.parse=function(a,c){function d(a,e){var k,q,n=a[e];if(n&&"object"===typeof n)for(k in n)Object.prototype.hasOwnProperty.call(n,k)&&(q=d(n,k),q!==b?n[k]=q:delete n[k]);return c.call(a,e,n)}var e;a=String(a);Z.lastIndex=0;Z.test(a)&&(a=a.replace(Z,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));
|
||||
if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),"function"===typeof c?d({"":e},""):e;throw new SyntaxError("JSON.parse(): invalid or malformed JSON data");}}
|
||||
u.cc=function(){var a,c,d=document.getElementsByTagName("video");if(d&&0<d.length)for(var e=0,g=d.length;e<g;e++)if((c=d[e])&&c.getAttribute)c.player===b&&(a=c.getAttribute("data-setup"),a!==h&&(a=u.JSON.parse(a||"{}"),videojs(c,a)));else{u.lb();break}else u.Cc||u.lb()};u.lb=function(){setTimeout(u.cc,1)};"complete"===document.readyState?u.Cc=f:u.T(window,"load",function(){u.Cc=f});u.lb();u.qd=function(a,c){u.Player.prototype[a]=c};var ga=this;ga.Fd=f;function $(a,c){var d=a.split("."),e=ga;!(d[0]in e)&&e.execScript&&e.execScript("var "+d[0]);for(var g;d.length&&(g=d.shift());)!d.length&&c!==b?e[g]=c:e=e[g]?e[g]:e[g]={}};$("videojs",u);$("_V_",u);$("videojs.options",u.options);$("videojs.players",u.va);$("videojs.TOUCH_ENABLED",u.Zb);$("videojs.cache",u.pa);$("videojs.Component",u.b);u.b.prototype.player=u.b.prototype.C;u.b.prototype.options=u.b.prototype.options;u.b.prototype.init=u.b.prototype.h;u.b.prototype.dispose=u.b.prototype.dispose;u.b.prototype.createEl=u.b.prototype.e;u.b.prototype.contentEl=u.b.prototype.Ka;u.b.prototype.el=u.b.prototype.u;u.b.prototype.addChild=u.b.prototype.X;
|
||||
u.b.prototype.getChild=u.b.prototype.fa;u.b.prototype.getChildById=u.b.prototype.dd;u.b.prototype.children=u.b.prototype.children;u.b.prototype.initChildren=u.b.prototype.mc;u.b.prototype.removeChild=u.b.prototype.removeChild;u.b.prototype.on=u.b.prototype.d;u.b.prototype.off=u.b.prototype.o;u.b.prototype.one=u.b.prototype.T;u.b.prototype.trigger=u.b.prototype.j;u.b.prototype.triggerReady=u.b.prototype.Wa;u.b.prototype.show=u.b.prototype.show;u.b.prototype.hide=u.b.prototype.D;
|
||||
u.b.prototype.width=u.b.prototype.width;u.b.prototype.height=u.b.prototype.height;u.b.prototype.dimensions=u.b.prototype.Xc;u.b.prototype.ready=u.b.prototype.H;u.b.prototype.addClass=u.b.prototype.n;u.b.prototype.removeClass=u.b.prototype.t;u.b.prototype.buildCSSClass=u.b.prototype.P;u.Player.prototype.ended=u.Player.prototype.ended;$("videojs.MediaLoader",u.Mc);$("videojs.TextTrackDisplay",u.$b);$("videojs.ControlBar",u.Ca);$("videojs.Button",u.q);$("videojs.PlayToggle",u.Wb);
|
||||
$("videojs.FullscreenToggle",u.Da);$("videojs.BigPlayButton",u.Ya);$("videojs.LoadingSpinner",u.Ub);$("videojs.CurrentTimeDisplay",u.$a);$("videojs.DurationDisplay",u.ab);$("videojs.TimeDivider",u.ac);$("videojs.RemainingTimeDisplay",u.gb);$("videojs.Slider",u.N);$("videojs.ProgressControl",u.fb);$("videojs.SeekBar",u.Xb);$("videojs.LoadProgressBar",u.cb);$("videojs.PlayProgressBar",u.Vb);$("videojs.SeekHandle",u.Fa);$("videojs.VolumeControl",u.ib);$("videojs.VolumeBar",u.hb);
|
||||
$("videojs.VolumeLevel",u.bc);$("videojs.VolumeMenuButton",u.ma);$("videojs.VolumeHandle",u.jb);$("videojs.MuteToggle",u.da);$("videojs.PosterImage",u.Ea);$("videojs.Menu",u.la);$("videojs.MenuItem",u.M);$("videojs.MenuButton",u.R);u.R.prototype.createItems=u.R.prototype.qa;u.S.prototype.createItems=u.S.prototype.qa;u.Ba.prototype.createItems=u.Ba.prototype.qa;$("videojs.SubtitlesButton",u.Ga);$("videojs.CaptionsButton",u.Aa);$("videojs.ChaptersButton",u.Ba);$("videojs.MediaTechController",u.r);
|
||||
u.r.prototype.features=u.r.prototype.m;u.r.prototype.m.volumeControl=u.r.prototype.m.Bc;u.r.prototype.m.fullscreenResize=u.r.prototype.m.Md;u.r.prototype.m.progressEvents=u.r.prototype.m.Qd;u.r.prototype.m.timeupdateEvents=u.r.prototype.m.Vd;$("videojs.Html5",u.l);u.l.Events=u.l.bb;u.l.isSupported=u.l.isSupported;u.l.canPlaySource=u.l.nb;u.l.prototype.setCurrentTime=u.l.prototype.td;u.l.prototype.setVolume=u.l.prototype.yd;u.l.prototype.setMuted=u.l.prototype.wd;u.l.prototype.setPreload=u.l.prototype.xd;
|
||||
u.l.prototype.setAutoplay=u.l.prototype.sd;u.l.prototype.setLoop=u.l.prototype.vd;u.l.prototype.enterFullScreen=u.l.prototype.gc;u.l.prototype.exitFullScreen=u.l.prototype.ad;$("videojs.Flash",u.f);u.f.isSupported=u.f.isSupported;u.f.canPlaySource=u.f.nb;u.f.onReady=u.f.onReady;$("videojs.TextTrack",u.w);u.w.prototype.label=u.w.prototype.label;u.w.prototype.kind=u.w.prototype.G;u.w.prototype.mode=u.w.prototype.mode;u.w.prototype.cues=u.w.prototype.Uc;u.w.prototype.activeCues=u.w.prototype.Oc;
|
||||
$("videojs.CaptionsTrack",u.Rb);$("videojs.SubtitlesTrack",u.Yb);$("videojs.ChaptersTrack",u.Sb);$("videojs.autoSetup",u.cc);$("videojs.plugin",u.qd);$("videojs.createTimeRange",u.sb);$("videojs.util",u.ja);u.ja.mergeOptions=u.ja.Fb;})();
|
||||
u.mc=function(){var a,c,d=document.getElementsByTagName("video");if(d&&0<d.length)for(var e=0,g=d.length;e<g;e++)if((c=d[e])&&c.getAttribute)c.player===b&&(a=c.getAttribute("data-setup"),a!==j&&(a=u.JSON.parse(a||"{}"),videojs(c,a)));else{u.rb();break}else u.Qc||u.rb()};u.rb=function(){setTimeout(u.mc,1)};"complete"===document.readyState?u.Qc=f:u.W(window,"load",function(){u.Qc=f});u.rb();u.Id=function(a,c){u.Player.prototype[a]=c};var ra=this;ra.Zd=f;function $(a,c){var d=a.split("."),e=ra;!(d[0]in e)&&e.execScript&&e.execScript("var "+d[0]);for(var g;d.length&&(g=d.shift());)!d.length&&c!==b?e[g]=c:e=e[g]?e[g]:e[g]={}};$("videojs",u);$("_V_",u);$("videojs.options",u.options);$("videojs.players",u.Aa);$("videojs.TOUCH_ENABLED",u.ic);$("videojs.cache",u.ta);$("videojs.Component",u.b);u.b.prototype.player=u.b.prototype.m;u.b.prototype.options=u.b.prototype.options;u.b.prototype.init=u.b.prototype.h;u.b.prototype.dispose=u.b.prototype.dispose;u.b.prototype.createEl=u.b.prototype.e;u.b.prototype.contentEl=u.b.prototype.ia;u.b.prototype.el=u.b.prototype.v;u.b.prototype.addChild=u.b.prototype.V;
|
||||
u.b.prototype.getChild=u.b.prototype.ja;u.b.prototype.getChildById=u.b.prototype.sd;u.b.prototype.children=u.b.prototype.children;u.b.prototype.initChildren=u.b.prototype.xc;u.b.prototype.removeChild=u.b.prototype.removeChild;u.b.prototype.on=u.b.prototype.d;u.b.prototype.off=u.b.prototype.p;u.b.prototype.one=u.b.prototype.W;u.b.prototype.trigger=u.b.prototype.k;u.b.prototype.triggerReady=u.b.prototype.Ea;u.b.prototype.show=u.b.prototype.show;u.b.prototype.hide=u.b.prototype.G;
|
||||
u.b.prototype.width=u.b.prototype.width;u.b.prototype.height=u.b.prototype.height;u.b.prototype.dimensions=u.b.prototype.ld;u.b.prototype.ready=u.b.prototype.I;u.b.prototype.addClass=u.b.prototype.o;u.b.prototype.removeClass=u.b.prototype.r;u.b.prototype.buildCSSClass=u.b.prototype.S;u.Player.prototype.ended=u.Player.prototype.ended;$("videojs.MediaLoader",u.Zc);$("videojs.TextTrackDisplay",u.jc);$("videojs.ControlBar",u.Ha);$("videojs.Button",u.s);$("videojs.PlayToggle",u.ec);
|
||||
$("videojs.FullscreenToggle",u.Ia);$("videojs.BigPlayButton",u.bb);$("videojs.LoadingSpinner",u.cc);$("videojs.CurrentTimeDisplay",u.eb);$("videojs.DurationDisplay",u.fb);$("videojs.TimeDivider",u.kc);$("videojs.RemainingTimeDisplay",u.mb);$("videojs.LiveDisplay",u.bc);$("videojs.ErrorDisplay",u.gb);$("videojs.Slider",u.Q);$("videojs.ProgressControl",u.lb);$("videojs.SeekBar",u.gc);$("videojs.LoadProgressBar",u.ib);$("videojs.PlayProgressBar",u.dc);$("videojs.SeekHandle",u.Ka);
|
||||
$("videojs.VolumeControl",u.ob);$("videojs.VolumeBar",u.nb);$("videojs.VolumeLevel",u.lc);$("videojs.VolumeMenuButton",u.qa);$("videojs.VolumeHandle",u.pb);$("videojs.MuteToggle",u.ha);$("videojs.PosterImage",u.Ja);$("videojs.Menu",u.ga);$("videojs.MenuItem",u.J);$("videojs.MenuButton",u.L);$("videojs.PlaybackRateMenuButton",u.fc);u.L.prototype.createItems=u.L.prototype.ua;u.U.prototype.createItems=u.U.prototype.ua;u.Ga.prototype.createItems=u.Ga.prototype.ua;$("videojs.SubtitlesButton",u.La);
|
||||
$("videojs.CaptionsButton",u.Fa);$("videojs.ChaptersButton",u.Ga);$("videojs.MediaTechController",u.t);u.t.prototype.features=u.t.prototype.n;u.t.prototype.n.volumeControl=u.t.prototype.n.Pc;u.t.prototype.n.fullscreenResize=u.t.prototype.n.ee;u.t.prototype.n.progressEvents=u.t.prototype.n.ie;u.t.prototype.n.timeupdateEvents=u.t.prototype.n.le;u.t.prototype.setPoster=u.t.prototype.Sb;$("videojs.Html5",u.f);u.f.Events=u.f.hb;u.f.isSupported=u.f.isSupported;u.f.canPlaySource=u.f.tb;
|
||||
u.f.patchCanPlayType=u.f.Cc;u.f.unpatchCanPlayType=u.f.Wd;u.f.prototype.setCurrentTime=u.f.prototype.Ld;u.f.prototype.setVolume=u.f.prototype.Rd;u.f.prototype.setMuted=u.f.prototype.Od;u.f.prototype.setPreload=u.f.prototype.Qd;u.f.prototype.setAutoplay=u.f.prototype.Kd;u.f.prototype.setLoop=u.f.prototype.Nd;u.f.prototype.enterFullScreen=u.f.prototype.rc;u.f.prototype.exitFullScreen=u.f.prototype.pd;u.f.prototype.playbackRate=u.f.prototype.playbackRate;u.f.prototype.setPlaybackRate=u.f.prototype.Pd;
|
||||
$("videojs.Flash",u.i);u.i.isSupported=u.i.isSupported;u.i.canPlaySource=u.i.tb;u.i.onReady=u.i.onReady;$("videojs.TextTrack",u.C);u.C.prototype.label=u.C.prototype.label;u.C.prototype.kind=u.C.prototype.K;u.C.prototype.mode=u.C.prototype.mode;u.C.prototype.cues=u.C.prototype.gd;u.C.prototype.activeCues=u.C.prototype.ad;$("videojs.CaptionsTrack",u.Zb);$("videojs.SubtitlesTrack",u.hc);$("videojs.ChaptersTrack",u.$b);$("videojs.autoSetup",u.mc);$("videojs.plugin",u.Id);$("videojs.createTimeRange",u.yb);
|
||||
$("videojs.util",u.oa);u.oa.mergeOptions=u.oa.Jb;})();
|
||||
|
||||
@@ -42,6 +42,7 @@ Flash Media Controller - Wrapper for fallback SWF API
|
||||
- [removeChild](#removechild-component-) _`inherited`_
|
||||
- [removeClass](#removeclass-classtoremove-) _`inherited`_
|
||||
- [removeControlsListeners](#removecontrolslisteners) _`inherited`_
|
||||
- [setPoster](#setposter) _`inherited`_
|
||||
- [show](#show) _`inherited`_
|
||||
- [trigger](#trigger-type-event-) _`inherited`_
|
||||
- [triggerReady](#triggerready) _`inherited`_
|
||||
@@ -515,6 +516,16 @@ _inherited from_: [src/js/media/media.js#L102](https://github.com/videojs/video.
|
||||
|
||||
---
|
||||
|
||||
### setPoster()
|
||||
> Provide a default setPoster method for techs
|
||||
>
|
||||
> Poster support for techs should be optional, so we don't want techs to
|
||||
> break if they don't have a way to set a poster.
|
||||
|
||||
_inherited from_: [src/js/media/media.js#L148](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L148)
|
||||
|
||||
---
|
||||
|
||||
### show()
|
||||
> Show the component element if hidden
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ HTML5 Media Controller - Wrapper for HTML5 Media API
|
||||
- [removeChild](#removechild-component-) _`inherited`_
|
||||
- [removeClass](#removeclass-classtoremove-) _`inherited`_
|
||||
- [removeControlsListeners](#removecontrolslisteners) _`inherited`_
|
||||
- [setPoster](#setposter) _`inherited`_
|
||||
- [show](#show) _`inherited`_
|
||||
- [trigger](#trigger-type-event-) _`inherited`_
|
||||
- [triggerReady](#triggerready) _`inherited`_
|
||||
@@ -515,6 +516,16 @@ _inherited from_: [src/js/media/media.js#L102](https://github.com/videojs/video.
|
||||
|
||||
---
|
||||
|
||||
### setPoster()
|
||||
> Provide a default setPoster method for techs
|
||||
>
|
||||
> Poster support for techs should be optional, so we don't want techs to
|
||||
> break if they don't have a way to set a poster.
|
||||
|
||||
_inherited from_: [src/js/media/media.js#L148](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L148)
|
||||
|
||||
---
|
||||
|
||||
### show()
|
||||
> Show the component element if hidden
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ Base class for media (HTML5 Video, Flash) controllers
|
||||
- [onClick](#onclick-event-)
|
||||
- [onTap](#ontap)
|
||||
- [removeControlsListeners](#removecontrolslisteners)
|
||||
- [setPoster](#setposter)
|
||||
- [addChild](#addchild-child-options-) _`inherited`_
|
||||
- [addClass](#addclass-classtoadd-) _`inherited`_
|
||||
- [buildCSSClass](#buildcssclass) _`inherited`_
|
||||
@@ -515,6 +516,16 @@ _defined in_: [src/js/media/media.js#L102](https://github.com/videojs/video.js/b
|
||||
|
||||
---
|
||||
|
||||
### setPoster()
|
||||
> Provide a default setPoster method for techs
|
||||
>
|
||||
> Poster support for techs should be optional, so we don't want techs to
|
||||
> break if they don't have a way to set a poster.
|
||||
|
||||
_defined in_: [src/js/media/media.js#L148](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L148)
|
||||
|
||||
---
|
||||
|
||||
### show()
|
||||
> Show the component element if hidden
|
||||
|
||||
|
||||
@@ -234,7 +234,7 @@ _inherited from_: [src/js/component.js#L224](https://github.com/videojs/video.js
|
||||
##### RETURNS:
|
||||
* `Boolean` Controls are showing
|
||||
|
||||
_defined in_: [src/js/player.js#L1167](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1167)
|
||||
_defined in_: [src/js/player.js#L1174](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1174)
|
||||
|
||||
---
|
||||
|
||||
@@ -673,7 +673,7 @@ _inherited from_: [src/js/component.js#L120](https://github.com/videojs/video.js
|
||||
* `String` poster URL when getting
|
||||
* `vjs.Player` self when setting
|
||||
|
||||
_defined in_: [src/js/player.js#L1140](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1140)
|
||||
_defined in_: [src/js/player.js#L1147](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1147)
|
||||
|
||||
---
|
||||
|
||||
@@ -778,9 +778,10 @@ _inherited from_: [src/js/component.js#L653](https://github.com/videojs/video.js
|
||||
* __source__ `String|Object|Array` _(OPTIONAL)_ The source URL, object, or array of sources
|
||||
|
||||
##### RETURNS:
|
||||
* `vjs.Player` self
|
||||
* `String` The current video source when getting
|
||||
* `String` The player when setting
|
||||
|
||||
_defined in_: [src/js/player.js#L1024](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1024)
|
||||
_defined in_: [src/js/player.js#L1025](https://github.com/videojs/video.js/blob/master/src/js/player.js#L1025)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
### ApiMethods
|
||||
> List of default API methods for any MediaTechController
|
||||
|
||||
_defined in_: [src/js/media/media.js#L160](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L160)
|
||||
_defined in_: [src/js/media/media.js#L168](https://github.com/videojs/video.js/blob/master/src/js/media/media.js#L168)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@ You can download the Video.js source and host it on your own servers, or use the
|
||||
|
||||
### CDN Version ###
|
||||
```html
|
||||
<link href="//vjs.zencdn.net/4.3/video-js.css" rel="stylesheet">
|
||||
<script src="//vjs.zencdn.net/4.3/video.js"></script>
|
||||
<link href="//vjs.zencdn.net/4.5/video-js.css" rel="stylesheet">
|
||||
<script src="//vjs.zencdn.net/4.5/video.js"></script>
|
||||
```
|
||||
|
||||
### Self Hosted. ###
|
||||
@@ -39,7 +39,7 @@ Step 2: Add an HTML5 video tag to your page.
|
||||
--------------------------------------------
|
||||
With Video.js you just use an HTML5 video tag to embed a video. Video.js will then read the tag and make it work in all browsers, not just ones that support HTML5 video. Beyond the basic markup, Video.js needs a few extra pieces.
|
||||
|
||||
1. The 'data-setup' Atrribute tells Video.js to automatically set up the video when the page is ready, and read any options (in JSON format) from the attribute (see [options](options.md)). There are other methods for initializing the player, but this is the easiest.
|
||||
1. The 'data-setup' Attribute tells Video.js to automatically set up the video when the page is ready, and read any options (in JSON format) from the attribute (see [options](options.md)). There are other methods for initializing the player, but this is the easiest.
|
||||
|
||||
2. The 'id' Attribute: Should be used and unique for every video on the same page.
|
||||
|
||||
@@ -47,8 +47,7 @@ With Video.js you just use an HTML5 video tag to embed a video. Video.js will th
|
||||
- `video-js` applies styles that are required for Video.js functionality, like fullscreen and subtitles.
|
||||
- `vjs-default-skin` applies the default skin to the HTML controls, and can be removed or overridden to create your own controls design.
|
||||
|
||||
Otherwise include/exclude attributes, settings, sources, and tracks exactly as you would for HTML5 video.
|
||||
|
||||
Otherwise include/exclude attributes, settings, sources, and tracks exactly as you would for HTML5 video.*
|
||||
```html
|
||||
<video id="example_video_1" class="video-js vjs-default-skin"
|
||||
controls preload="auto" width="640" height="264"
|
||||
@@ -57,6 +56,7 @@ Otherwise include/exclude attributes, settings, sources, and tracks exactly as y
|
||||
<source src="http://video-js.zencoder.com/oceans-clip.mp4" type='video/mp4' />
|
||||
<source src="http://video-js.zencoder.com/oceans-clip.webm" type='video/webm' />
|
||||
<source src="http://video-js.zencoder.com/oceans-clip.ogv" type='video/ogg' />
|
||||
<p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
|
||||
</video>
|
||||
```
|
||||
|
||||
@@ -89,14 +89,16 @@ The third argument is a 'ready' callback. Once Video.js has initialized it will
|
||||
Instead of using an element ID, you can also pass a reference to the element itself.
|
||||
|
||||
```js
|
||||
videojs(document.getElementsById('example_video_1')), {}, function()) {
|
||||
videojs(document.getElementById('example_video_1'), {}, function() {
|
||||
// This is functionally the same as the previous example.
|
||||
});
|
||||
```
|
||||
|
||||
```js
|
||||
videojs(document.getElementsByClassName('awesome_video_class')[0], {}, function()) {
|
||||
videojs(document.getElementsByClassName('awesome_video_class')[0], {}, function() {
|
||||
// You can grab an element by class if you'd like, just make sure
|
||||
// if it's an array that you pick one (here we chose the first).
|
||||
});
|
||||
```
|
||||
|
||||
\* If you have trouble playing back content you know is in the [correct format](http://blog.zencoder.com/2013/09/13/what-formats-do-i-need-for-html5-video/), your HTTP server might not be delivering the content with the correct [MIME type](http://en.wikipedia.org/wiki/Internet_media_type#Type_video). Please double check your content's headers before opening an [issue](https://github.com/videojs/video.js/blob/master/CONTRIBUTING.md).
|
||||
|
||||
+8
-4
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "video.js",
|
||||
"description": "An HTML5 and Flash video player with a common API and skin for both.",
|
||||
"version": "4.4.0",
|
||||
"version": "4.6.1-b",
|
||||
"copyright": "Copyright 2014 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE",
|
||||
"keywords": [
|
||||
"videojs",
|
||||
@@ -25,7 +25,8 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"grunt-cli": "~0.1.0",
|
||||
"grunt": "~0.4",
|
||||
"grunt": "0.4.2",
|
||||
"grunt-contrib-connect": "~0.7.1",
|
||||
"grunt-contrib-jshint": "~0.4.3",
|
||||
"grunt-contrib-watch": "~0.1.4",
|
||||
"grunt-contrib-qunit": "~0.2.1",
|
||||
@@ -53,7 +54,10 @@
|
||||
"grunt-zip": "0.10.2",
|
||||
"grunt-banner": "~0.2.0",
|
||||
"chg": "~0.1.8",
|
||||
"grunt-bump": "0.0.13",
|
||||
"grunt-tagrelease": "~0.3.3"
|
||||
"grunt-tagrelease": "~0.3.3",
|
||||
"github": "~0.1.14",
|
||||
"open": "0.0.4",
|
||||
"grunt-version": "~0.3.0",
|
||||
"sinon": "~1.9.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<source src="http://video-js.zencoder.com/oceans-clip.webm" type='video/webm'>
|
||||
<source src="http://video-js.zencoder.com/oceans-clip.ogv" type='video/ogg'>
|
||||
<track kind="captions" src="../build/demo-files/demo.captions.vtt" srclang="en" label="English"></track><!-- Tracks need an ending tag thanks to IE9 -->
|
||||
<p>Video Playback Not Supported</p>
|
||||
<p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
|
||||
</video>
|
||||
|
||||
<script>
|
||||
|
||||
+154
-6
@@ -193,6 +193,11 @@ The default control bar that is a container for most of the controls.
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* The control bar shouldn't show after an error */
|
||||
.vjs-default-skin.vjs-error .vjs-control-bar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* IE8 is flakey with fonts, and you have to change the actual content to force
|
||||
fonts to show/hide properly.
|
||||
- "\9" IE8 hack didn't work for this
|
||||
@@ -260,6 +265,27 @@ fonts to show/hide properly.
|
||||
content: @pause-icon;
|
||||
}
|
||||
|
||||
/* Playback toggle
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
.vjs-default-skin .vjs-playback-rate .vjs-playback-rate-value {
|
||||
font-size: 1.5em;
|
||||
line-height: 2;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.vjs-default-skin .vjs-playback-rate.vjs-menu-button .vjs-menu .vjs-menu-content {
|
||||
width: 4em;
|
||||
left: -2em;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
/* Volume/Mute
|
||||
-------------------------------------------------------------------------------- */
|
||||
.vjs-default-skin .vjs-mute-control,
|
||||
@@ -303,6 +329,8 @@ fonts to show/hide properly.
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 0.5em;
|
||||
/* assuming volume starts at 1.0 */
|
||||
width: 100%;
|
||||
|
||||
background: @slider-bar-color
|
||||
url(@slider-bar-pattern)
|
||||
@@ -311,6 +339,10 @@ fonts to show/hide properly.
|
||||
.vjs-default-skin .vjs-volume-bar .vjs-volume-handle {
|
||||
width: 0.5em;
|
||||
height: 0.5em;
|
||||
/* Assumes volume starts at 1.0. If you change the size of the
|
||||
handle relative to the volume bar, you'll need to update this value
|
||||
too. */
|
||||
left: 4.5em;
|
||||
}
|
||||
|
||||
.vjs-default-skin .vjs-volume-handle:before {
|
||||
@@ -368,6 +400,8 @@ fonts to show/hide properly.
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
/* updated by javascript during playback */
|
||||
width: 0;
|
||||
/* Needed for IE6 *///
|
||||
left: 0;
|
||||
top: 0;
|
||||
@@ -400,6 +434,27 @@ fonts to show/hide properly.
|
||||
padding-top: 0.1em /* Minor adjustment */;
|
||||
}
|
||||
|
||||
/* Live Mode
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
.vjs-default-skin.vjs-live .vjs-time-controls,
|
||||
.vjs-default-skin.vjs-live .vjs-time-divider,
|
||||
.vjs-default-skin.vjs-live .vjs-progress-control {
|
||||
display: none;
|
||||
}
|
||||
.vjs-default-skin.vjs-live .vjs-live-display {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Live Display
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
.vjs-default-skin .vjs-live-display {
|
||||
display: none;
|
||||
font-size: 1em;
|
||||
line-height: 3em;
|
||||
}
|
||||
|
||||
/* Time Display
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -437,8 +492,8 @@ easily in the skin designer. http://designer.videojs.com/
|
||||
*/
|
||||
.vjs-default-skin .vjs-big-play-button {
|
||||
// Calculate total width/height so we're able to center the button
|
||||
@total-width: @big-play-width + (@big-play-border-width * 2);
|
||||
@total-height: @big-play-height + (@big-play-border-width * 2);
|
||||
@total-width: (@big-play-width + (@big-play-border-width * 2));
|
||||
@total-height: (@big-play-height + (@big-play-border-width * 2));
|
||||
// Position the button using the absolute-align mixin (bottom of page)
|
||||
.absolute-align(@big-play-align, @big-play-margin, @total-width);
|
||||
.absolute-align(@big-play-vertical-align, @big-play-margin, @total-height);
|
||||
@@ -466,8 +521,8 @@ easily in the skin designer. http://designer.videojs.com/
|
||||
|
||||
/* Optionally center */
|
||||
.vjs-default-skin.vjs-big-play-centered .vjs-big-play-button {
|
||||
@total-width: @big-play-width + (@big-play-border-width * 2);
|
||||
@total-height: @big-play-height + (@big-play-border-width * 2);
|
||||
@total-width: (@big-play-width + (@big-play-border-width * 2));
|
||||
@total-height: (@big-play-height + (@big-play-border-width * 2));
|
||||
|
||||
.absolute-align(center, @big-play-margin, @total-width);
|
||||
.absolute-align(middle, @big-play-margin, @total-height);
|
||||
@@ -514,6 +569,59 @@ easily in the skin designer. http://designer.videojs.com/
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.vjs-error .vjs-big-play-button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Error Display
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
.vjs-error-display {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.vjs-error .vjs-error-display {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.vjs-error .vjs-error-display:before {
|
||||
content: 'X';
|
||||
font-family: Arial;
|
||||
font-size: 4em;
|
||||
color: #666666;
|
||||
/* In order to center the play icon vertically we need to set the line height
|
||||
to the same as the button height */
|
||||
line-height: 1;
|
||||
text-shadow: 0.05em 0.05em 0.1em #000;
|
||||
text-align: center /* Needed for IE8 */;
|
||||
vertical-align: middle;
|
||||
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
margin-top: -0.5em;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.vjs-error-display div {
|
||||
position: absolute;
|
||||
|
||||
font-size: 1.4em;
|
||||
text-align: center;
|
||||
bottom: 1em;
|
||||
right: 1em;
|
||||
left: 1em;
|
||||
}
|
||||
|
||||
.vjs-error-display a, .vjs-error-display a:visited {
|
||||
color: #F4A460;
|
||||
}
|
||||
|
||||
/* Loading Spinner
|
||||
--------------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -537,6 +645,18 @@ easily in the skin designer. http://designer.videojs.com/
|
||||
.animation(spin 1.5s infinite linear);
|
||||
}
|
||||
|
||||
/* Errors are unrecoverable without user interaction,
|
||||
so hide the spinner in the case of an error */
|
||||
.video-js.vjs-error .vjs-loading-spinner {
|
||||
/* using !important flag because currently the loading spinner
|
||||
uses hide()/show() instead of classes. The !important can be
|
||||
removed when that's updated */
|
||||
display: none !important;
|
||||
|
||||
/* ensure animation doesn't continue while hidden */
|
||||
.animation(none);
|
||||
}
|
||||
|
||||
.vjs-default-skin .vjs-loading-spinner:before {
|
||||
content: @spinner3-icon;
|
||||
font-family: VideoJS;
|
||||
@@ -770,6 +890,12 @@ body.vjs-full-window {
|
||||
left: 1em;
|
||||
right: 1em;
|
||||
}
|
||||
|
||||
/* Move captions down when controls aren't being shown */
|
||||
.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display {
|
||||
bottom: 1em;
|
||||
}
|
||||
|
||||
/* Individual tracks */
|
||||
.video-js .vjs-text-track {
|
||||
display: none;
|
||||
@@ -792,6 +918,26 @@ body.vjs-full-window {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
/* In IE8 w/ no JavaScript (no HTML5 shim), the video tag doesn't register.
|
||||
The .video-js classname on the video tag also isn't considered.
|
||||
This optional paragraph inside the video tag can provide a message to users
|
||||
about what's required to play video. */
|
||||
.vjs-no-js {
|
||||
padding: 20px;
|
||||
color: #ccc;
|
||||
background-color: #333;
|
||||
font-size: 18px;
|
||||
font-family: Arial, sans-serif;
|
||||
text-align: center;
|
||||
width: 300px;
|
||||
height: 150px;
|
||||
margin: 0px auto;
|
||||
}
|
||||
|
||||
.vjs-no-js a, .vjs-no-js a:visited {
|
||||
color: #F4A460;
|
||||
}
|
||||
|
||||
// MIXINS
|
||||
// =============================================================================
|
||||
// Mixins are a LESS feature and are used to add vendor prefixes to CSS rules
|
||||
@@ -891,12 +1037,14 @@ body.vjs-full-window {
|
||||
.absolute-align (@align, @margin, @length) when (@align = center) {
|
||||
/* Center it horizontally *///
|
||||
left: 50%;
|
||||
margin-left: -(@length / 2);
|
||||
margin-left: (-(@length/2));
|
||||
// margin-left: ((@length*-1)/2);
|
||||
}
|
||||
.absolute-align (@align, @margin, @length) when (@align = middle) {
|
||||
/* Center it vertically *///
|
||||
top: 50%;
|
||||
margin-top: -(@length / 2);
|
||||
margin-top: (-(@length/2));
|
||||
// margin-top: ((@length*-1)/2);
|
||||
}
|
||||
|
||||
// http://stackoverflow.com/questions/637921/opacity-of-background-but-not-the-text
|
||||
|
||||
+2
-16
@@ -15,23 +15,9 @@ vjs.Button = vjs.Component.extend({
|
||||
init: function(player, options){
|
||||
vjs.Component.call(this, player, options);
|
||||
|
||||
var touchstart = false;
|
||||
this.on('touchstart', function(event) {
|
||||
// Stop click and other mouse events from triggering also
|
||||
event.preventDefault();
|
||||
touchstart = true;
|
||||
});
|
||||
this.on('touchmove', function() {
|
||||
touchstart = false;
|
||||
});
|
||||
var self = this;
|
||||
this.on('touchend', function(event) {
|
||||
if (touchstart) {
|
||||
self.onClick(event);
|
||||
}
|
||||
event.preventDefault();
|
||||
});
|
||||
this.emitTapEvents();
|
||||
|
||||
this.on('tap', this.onClick);
|
||||
this.on('click', this.onClick);
|
||||
this.on('focus', this.onFocus);
|
||||
this.on('blur', this.onBlur);
|
||||
|
||||
+81
-24
@@ -439,31 +439,62 @@ vjs.Component.prototype.removeChild = function(component){
|
||||
* myChildOption: true
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* // Or when creating the component
|
||||
* var myComp = new MyComponent(player, {
|
||||
* children: {
|
||||
* myChildComponent: {
|
||||
* myChildOption: true
|
||||
* }
|
||||
* }
|
||||
* });
|
||||
*
|
||||
* The children option can also be an Array of child names or
|
||||
* child options objects (that also include a 'name' key).
|
||||
*
|
||||
* var myComp = new MyComponent(player, {
|
||||
* children: [
|
||||
* 'button',
|
||||
* {
|
||||
* name: 'button',
|
||||
* someOtherOption: true
|
||||
* }
|
||||
* ]
|
||||
* });
|
||||
*
|
||||
*/
|
||||
vjs.Component.prototype.initChildren = function(){
|
||||
var options = this.options_;
|
||||
var parent, children, child, name, opts;
|
||||
|
||||
if (options && options['children']) {
|
||||
var self = this;
|
||||
parent = this;
|
||||
children = this.options()['children'];
|
||||
|
||||
// Loop through components and add them to the player
|
||||
vjs.obj.each(options['children'], function(name, opts){
|
||||
// Allow for disabling default components
|
||||
// e.g. vjs.options['children']['posterImage'] = false
|
||||
if (opts === false) return;
|
||||
if (children) {
|
||||
// Allow for an array of children details to passed in the options
|
||||
if (children instanceof Array) {
|
||||
for (var i = 0; i < children.length; i++) {
|
||||
child = children[i];
|
||||
|
||||
// Allow waiting to add components until a specific event is called
|
||||
var tempAdd = function(){
|
||||
// Set property name on player. Could cause conflicts with other prop names, but it's worth making refs easy.
|
||||
self[name] = self.addChild(name, opts);
|
||||
};
|
||||
if (typeof child == 'string') {
|
||||
name = child;
|
||||
opts = {};
|
||||
} else {
|
||||
name = child.name;
|
||||
opts = child;
|
||||
}
|
||||
|
||||
if (opts['loadEvent']) {
|
||||
// this.one(opts.loadEvent, tempAdd)
|
||||
} else {
|
||||
tempAdd();
|
||||
parent[name] = parent.addChild(name, opts);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
vjs.obj.each(children, function(name, opts){
|
||||
// Allow for disabling default components
|
||||
// e.g. vjs.options['children']['posterImage'] = false
|
||||
if (opts === false) return;
|
||||
|
||||
// Set property name on player. Could cause conflicts with other prop names, but it's worth making refs easy.
|
||||
parent[name] = parent.addChild(name, opts);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -833,35 +864,61 @@ vjs.Component.prototype.onResize;
|
||||
* @private
|
||||
*/
|
||||
vjs.Component.prototype.emitTapEvents = function(){
|
||||
var touchStart, touchTime, couldBeTap, noTap;
|
||||
var touchStart, firstTouch, touchTime, couldBeTap, noTap,
|
||||
xdiff, ydiff, touchDistance, tapMovementThreshold;
|
||||
|
||||
// Track the start time so we can determine how long the touch lasted
|
||||
touchStart = 0;
|
||||
firstTouch = null;
|
||||
|
||||
// Maximum movement allowed during a touch event to still be considered a tap
|
||||
tapMovementThreshold = 22;
|
||||
|
||||
this.on('touchstart', function(event) {
|
||||
// Record start time so we can detect a tap vs. "touch and hold"
|
||||
touchStart = new Date().getTime();
|
||||
// Reset couldBeTap tracking
|
||||
couldBeTap = true;
|
||||
// If more than one finger, don't consider treating this as a click
|
||||
if (event.touches.length === 1) {
|
||||
firstTouch = event.touches[0];
|
||||
// Record start time so we can detect a tap vs. "touch and hold"
|
||||
touchStart = new Date().getTime();
|
||||
// Reset couldBeTap tracking
|
||||
couldBeTap = true;
|
||||
}
|
||||
});
|
||||
|
||||
this.on('touchmove', function(event) {
|
||||
// If more than one finger, don't consider treating this as a click
|
||||
if (event.touches.length > 1) {
|
||||
couldBeTap = false;
|
||||
} else if (firstTouch) {
|
||||
// Some devices will throw touchmoves for all but the slightest of taps.
|
||||
// So, if we moved only a small distance, this could still be a tap
|
||||
xdiff = event.touches[0].pageX - firstTouch.pageX;
|
||||
ydiff = event.touches[0].pageY - firstTouch.pageY;
|
||||
touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);
|
||||
if (touchDistance > tapMovementThreshold) {
|
||||
couldBeTap = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
noTap = function(){
|
||||
couldBeTap = false;
|
||||
};
|
||||
// TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s
|
||||
this.on('touchmove', noTap);
|
||||
this.on('touchleave', noTap);
|
||||
this.on('touchcancel', noTap);
|
||||
|
||||
// When the touch ends, measure how long it took and trigger the appropriate
|
||||
// event
|
||||
this.on('touchend', function(event) {
|
||||
firstTouch = null;
|
||||
// Proceed only if the touchmove/leave/cancel event didn't happen
|
||||
if (couldBeTap === true) {
|
||||
// Measure how long the touch lasted
|
||||
touchTime = new Date().getTime() - touchStart;
|
||||
// The touch needs to be quick in order to consider it a tap
|
||||
if (touchTime < 250) {
|
||||
event.preventDefault(); // Don't let browser turn this into a click
|
||||
this.trigger('tap');
|
||||
// It may be good to copy the touchend event object and change the
|
||||
// type to tap, if the other event properties aren't exact after
|
||||
|
||||
@@ -16,11 +16,13 @@ vjs.ControlBar.prototype.options_ = {
|
||||
'timeDivider': {},
|
||||
'durationDisplay': {},
|
||||
'remainingTimeDisplay': {},
|
||||
'liveDisplay': {},
|
||||
'progressControl': {},
|
||||
'fullscreenToggle': {},
|
||||
'volumeControl': {},
|
||||
'muteToggle': {}
|
||||
// 'volumeMenuButton': {}
|
||||
'muteToggle': {},
|
||||
// 'volumeMenuButton': {},
|
||||
'playbackRateMenuButton': {}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* Displays the live indicator
|
||||
* TODO - Future make it click to snap to live
|
||||
* @param {vjs.Player|Object} player
|
||||
* @param {Object=} options
|
||||
* @constructor
|
||||
*/
|
||||
vjs.LiveDisplay = vjs.Component.extend({
|
||||
init: function(player, options){
|
||||
vjs.Component.call(this, player, options);
|
||||
}
|
||||
});
|
||||
|
||||
vjs.LiveDisplay.prototype.createEl = function(){
|
||||
var el = vjs.Component.prototype.createEl.call(this, 'div', {
|
||||
className: 'vjs-live-controls vjs-control'
|
||||
});
|
||||
|
||||
this.contentEl_ = vjs.createEl('div', {
|
||||
className: 'vjs-live-display',
|
||||
innerHTML: '<span class="vjs-control-text">Stream Type </span>LIVE',
|
||||
'aria-live': 'off'
|
||||
});
|
||||
|
||||
el.appendChild(this.contentEl_);
|
||||
|
||||
return el;
|
||||
};
|
||||
@@ -0,0 +1,129 @@
|
||||
/**
|
||||
* The component for controlling the playback rate
|
||||
*
|
||||
* @param {vjs.Player|Object} player
|
||||
* @param {Object=} options
|
||||
* @constructor
|
||||
*/
|
||||
vjs.PlaybackRateMenuButton = vjs.MenuButton.extend({
|
||||
/** @constructor */
|
||||
init: function(player, options){
|
||||
vjs.MenuButton.call(this, player, options);
|
||||
|
||||
this.updateVisibility();
|
||||
this.updateLabel();
|
||||
|
||||
player.on('loadstart', vjs.bind(this, this.updateVisibility));
|
||||
player.on('ratechange', vjs.bind(this, this.updateLabel));
|
||||
}
|
||||
});
|
||||
|
||||
vjs.PlaybackRateMenuButton.prototype.createEl = function(){
|
||||
var el = vjs.Component.prototype.createEl.call(this, 'div', {
|
||||
className: 'vjs-playback-rate vjs-menu-button vjs-control',
|
||||
innerHTML: '<div class="vjs-control-content"><span class="vjs-control-text">Playback Rate</span></div>'
|
||||
});
|
||||
|
||||
this.labelEl_ = vjs.createEl('div', {
|
||||
className: 'vjs-playback-rate-value',
|
||||
innerHTML: 1.0
|
||||
});
|
||||
|
||||
el.appendChild(this.labelEl_);
|
||||
|
||||
return el;
|
||||
};
|
||||
|
||||
// Menu creation
|
||||
vjs.PlaybackRateMenuButton.prototype.createMenu = function(){
|
||||
var menu = new vjs.Menu(this.player());
|
||||
var rates = this.player().options().playbackRates;
|
||||
|
||||
if (rates) {
|
||||
for (var i = rates.length - 1; i >= 0; i--) {
|
||||
menu.addChild(
|
||||
new vjs.PlaybackRateMenuItem(this.player(), {rate: rates[i] + 'x'})
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
return menu;
|
||||
};
|
||||
|
||||
vjs.PlaybackRateMenuButton.prototype.updateARIAAttributes = function(){
|
||||
// Current playback rate
|
||||
this.el().setAttribute('aria-valuenow', this.player().playbackRate());
|
||||
};
|
||||
|
||||
vjs.PlaybackRateMenuButton.prototype.onClick = function(){
|
||||
// select next rate option
|
||||
var currentRate = this.player().playbackRate();
|
||||
var rates = this.player().options().playbackRates;
|
||||
// this will select first one if the last one currently selected
|
||||
var newRate = rates[0];
|
||||
for (var i = 0; i <rates.length ; i++) {
|
||||
if (rates[i] > currentRate) {
|
||||
newRate = rates[i];
|
||||
break;
|
||||
}
|
||||
};
|
||||
this.player().playbackRate(newRate);
|
||||
};
|
||||
|
||||
vjs.PlaybackRateMenuButton.prototype.playbackRateSupported = function(){
|
||||
return this.player().tech
|
||||
&& this.player().tech.features['playbackRate']
|
||||
&& this.player().options().playbackRates
|
||||
&& this.player().options().playbackRates.length > 0
|
||||
;
|
||||
};
|
||||
|
||||
/**
|
||||
* Hide playback rate controls when they're no playback rate options to select
|
||||
*/
|
||||
vjs.PlaybackRateMenuButton.prototype.updateVisibility = function(){
|
||||
if (this.playbackRateSupported()) {
|
||||
this.removeClass('vjs-hidden');
|
||||
} else {
|
||||
this.addClass('vjs-hidden');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Update button label when rate changed
|
||||
*/
|
||||
vjs.PlaybackRateMenuButton.prototype.updateLabel = function(){
|
||||
if (this.playbackRateSupported()) {
|
||||
this.labelEl_.innerHTML = this.player().playbackRate() + 'x';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* The specific menu item type for selecting a playback rate
|
||||
*
|
||||
* @constructor
|
||||
*/
|
||||
vjs.PlaybackRateMenuItem = vjs.MenuItem.extend({
|
||||
contentElType: 'button',
|
||||
/** @constructor */
|
||||
init: function(player, options){
|
||||
var label = this.label = options['rate'];
|
||||
var rate = this.rate = parseFloat(label, 10);
|
||||
|
||||
// Modify options for parent MenuItem class's init.
|
||||
options['label'] = label;
|
||||
options['selected'] = rate === 1;
|
||||
vjs.MenuItem.call(this, player, options);
|
||||
|
||||
this.player().on('ratechange', vjs.bind(this, this.update));
|
||||
}
|
||||
});
|
||||
|
||||
vjs.PlaybackRateMenuItem.prototype.onClick = function(){
|
||||
vjs.MenuItem.prototype.onClick.call(this);
|
||||
this.player().playbackRate(this.rate);
|
||||
};
|
||||
|
||||
vjs.PlaybackRateMenuItem.prototype.update = function(){
|
||||
this.selected(this.player().playbackRate() == this.rate);
|
||||
};
|
||||
@@ -49,7 +49,6 @@ vjs.VolumeBar = vjs.Slider.extend({
|
||||
vjs.Slider.call(this, player, options);
|
||||
player.on('volumechange', vjs.bind(this, this.updateARIAAttributes));
|
||||
player.ready(vjs.bind(this, this.updateARIAAttributes));
|
||||
setTimeout(vjs.bind(this, this.update), 0); // update when elements is in DOM
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
+9
-6
@@ -88,6 +88,11 @@ vjs.options = {
|
||||
// defaultVolume: 0.85,
|
||||
'defaultVolume': 0.00, // The freakin seaguls are driving me crazy!
|
||||
|
||||
// default playback rates
|
||||
'playbackRates': [],
|
||||
// Add playback rate selection by adding rates
|
||||
// 'playbackRates': [0.5, 1, 1.5, 2],
|
||||
|
||||
// Included control sets
|
||||
'children': {
|
||||
'mediaLoader': {},
|
||||
@@ -95,14 +100,12 @@ vjs.options = {
|
||||
'textTrackDisplay': {},
|
||||
'loadingSpinner': {},
|
||||
'bigPlayButton': {},
|
||||
'controlBar': {}
|
||||
'controlBar': {},
|
||||
'errorDisplay': {}
|
||||
},
|
||||
|
||||
// Default message to show when a video cannot be played.
|
||||
'notSupportedMessage': 'Sorry, no compatible source and playback ' +
|
||||
'technology were found for this video. Try using another browser ' +
|
||||
'like <a href="http://bit.ly/ccMUEC">Chrome</a> or download the ' +
|
||||
'latest <a href="http://adobe.ly/mwfN1">Adobe Flash Player</a>.'
|
||||
'notSupportedMessage': 'No compatible source was found for this video.'
|
||||
};
|
||||
|
||||
// Set CDN Version of swf
|
||||
@@ -129,5 +132,5 @@ if (typeof define === 'function' && define['amd']) {
|
||||
|
||||
// checking that module is an object too because of umdjs/umd#35
|
||||
} else if (typeof exports === 'object' && typeof module === 'object') {
|
||||
module.exports = videojs;
|
||||
module['exports'] = videojs;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Display that an error has occurred making the video unplayable
|
||||
* @param {vjs.Player|Object} player
|
||||
* @param {Object=} options
|
||||
* @constructor
|
||||
*/
|
||||
vjs.ErrorDisplay = vjs.Component.extend({
|
||||
init: function(player, options){
|
||||
vjs.Component.call(this, player, options);
|
||||
|
||||
this.update();
|
||||
player.on('error', vjs.bind(this, this.update));
|
||||
}
|
||||
});
|
||||
|
||||
vjs.ErrorDisplay.prototype.createEl = function(){
|
||||
var el = vjs.Component.prototype.createEl.call(this, 'div', {
|
||||
className: 'vjs-error-display'
|
||||
});
|
||||
|
||||
this.contentEl_ = vjs.createEl('div');
|
||||
el.appendChild(this.contentEl_);
|
||||
|
||||
return el;
|
||||
};
|
||||
|
||||
vjs.ErrorDisplay.prototype.update = function(){
|
||||
if (this.player().error()) {
|
||||
this.contentEl_.innerHTML = this.player().error().message;
|
||||
}
|
||||
};
|
||||
+4
-2
@@ -206,9 +206,11 @@ vjs.fixEvent = function(event) {
|
||||
}
|
||||
event.returnValue = false;
|
||||
event.isDefaultPrevented = returnTrue;
|
||||
event.defaultPrevented = true;
|
||||
};
|
||||
|
||||
event.isDefaultPrevented = returnFalse;
|
||||
event.defaultPrevented = false;
|
||||
|
||||
// Stop the event from bubbling
|
||||
event.stopPropagation = function () {
|
||||
@@ -293,7 +295,7 @@ vjs.trigger = function(elem, event) {
|
||||
vjs.trigger(parent, event);
|
||||
|
||||
// If at the top of the DOM, triggers the default action unless disabled.
|
||||
} else if (!parent && !event.isDefaultPrevented()) {
|
||||
} else if (!parent && !event.defaultPrevented) {
|
||||
var targetData = vjs.getData(event.target);
|
||||
|
||||
// Checks if the target has a default action for this event.
|
||||
@@ -310,7 +312,7 @@ vjs.trigger = function(elem, event) {
|
||||
}
|
||||
|
||||
// Inform the triggerer if the default was prevented by returning false
|
||||
return !event.isDefaultPrevented();
|
||||
return !event.defaultPrevented;
|
||||
/* Original version of js ninja events wasn't complete.
|
||||
* We've since updated to the latest version, but keeping this around
|
||||
* for now just in case.
|
||||
|
||||
@@ -84,6 +84,8 @@ goog.exportSymbol('videojs.CurrentTimeDisplay', vjs.CurrentTimeDisplay);
|
||||
goog.exportSymbol('videojs.DurationDisplay', vjs.DurationDisplay);
|
||||
goog.exportSymbol('videojs.TimeDivider', vjs.TimeDivider);
|
||||
goog.exportSymbol('videojs.RemainingTimeDisplay', vjs.RemainingTimeDisplay);
|
||||
goog.exportSymbol('videojs.LiveDisplay', vjs.LiveDisplay);
|
||||
goog.exportSymbol('videojs.ErrorDisplay', vjs.ErrorDisplay);
|
||||
goog.exportSymbol('videojs.Slider', vjs.Slider);
|
||||
goog.exportSymbol('videojs.ProgressControl', vjs.ProgressControl);
|
||||
goog.exportSymbol('videojs.SeekBar', vjs.SeekBar);
|
||||
@@ -100,6 +102,7 @@ goog.exportSymbol('videojs.PosterImage', vjs.PosterImage);
|
||||
goog.exportSymbol('videojs.Menu', vjs.Menu);
|
||||
goog.exportSymbol('videojs.MenuItem', vjs.MenuItem);
|
||||
goog.exportSymbol('videojs.MenuButton', vjs.MenuButton);
|
||||
goog.exportSymbol('videojs.PlaybackRateMenuButton', vjs.PlaybackRateMenuButton);
|
||||
goog.exportProperty(vjs.MenuButton.prototype, 'createItems', vjs.MenuButton.prototype.createItems);
|
||||
goog.exportProperty(vjs.TextTrackButton.prototype, 'createItems', vjs.TextTrackButton.prototype.createItems);
|
||||
goog.exportProperty(vjs.ChaptersButton.prototype, 'createItems', vjs.ChaptersButton.prototype.createItems);
|
||||
@@ -114,11 +117,15 @@ goog.exportProperty(vjs.MediaTechController.prototype.features, 'volumeControl',
|
||||
goog.exportProperty(vjs.MediaTechController.prototype.features, 'fullscreenResize', vjs.MediaTechController.prototype.features.fullscreenResize);
|
||||
goog.exportProperty(vjs.MediaTechController.prototype.features, 'progressEvents', vjs.MediaTechController.prototype.features.progressEvents);
|
||||
goog.exportProperty(vjs.MediaTechController.prototype.features, 'timeupdateEvents', vjs.MediaTechController.prototype.features.timeupdateEvents);
|
||||
goog.exportProperty(vjs.MediaTechController.prototype, 'setPoster', vjs.MediaTechController.prototype.setPoster);
|
||||
|
||||
|
||||
goog.exportSymbol('videojs.Html5', vjs.Html5);
|
||||
goog.exportProperty(vjs.Html5, 'Events', vjs.Html5.Events);
|
||||
goog.exportProperty(vjs.Html5, 'isSupported', vjs.Html5.isSupported);
|
||||
goog.exportProperty(vjs.Html5, 'canPlaySource', vjs.Html5.canPlaySource);
|
||||
goog.exportProperty(vjs.Html5, 'patchCanPlayType', vjs.Html5.patchCanPlayType);
|
||||
goog.exportProperty(vjs.Html5, 'unpatchCanPlayType', vjs.Html5.unpatchCanPlayType);
|
||||
|
||||
// Export non-standard HTML5 video API methods.
|
||||
// Standard method names already protected by default externs.
|
||||
@@ -130,6 +137,8 @@ goog.exportProperty(vjs.Html5.prototype, 'setAutoplay', vjs.Html5.prototype.setA
|
||||
goog.exportProperty(vjs.Html5.prototype, 'setLoop', vjs.Html5.prototype.setLoop);
|
||||
goog.exportProperty(vjs.Html5.prototype, 'enterFullScreen', vjs.Html5.prototype.enterFullScreen);
|
||||
goog.exportProperty(vjs.Html5.prototype, 'exitFullScreen', vjs.Html5.prototype.exitFullScreen);
|
||||
goog.exportProperty(vjs.Html5.prototype, 'playbackRate', vjs.Html5.prototype.playbackRate);
|
||||
goog.exportProperty(vjs.Html5.prototype, 'setPlaybackRate', vjs.Html5.prototype.setPlaybackRate);
|
||||
|
||||
goog.exportSymbol('videojs.Flash', vjs.Flash);
|
||||
goog.exportProperty(vjs.Flash, 'isSupported', vjs.Flash.isSupported);
|
||||
|
||||
+189
-55
@@ -60,7 +60,7 @@ vjs.obj = {};
|
||||
* @param {Object} obj Object to use as prototype
|
||||
* @private
|
||||
*/
|
||||
vjs.obj.create = Object.create || function(obj){
|
||||
vjs.obj.create = Object.create || function(obj){
|
||||
//Create a new function called 'F' which is just an empty object.
|
||||
function F() {}
|
||||
|
||||
@@ -566,15 +566,19 @@ vjs.createTimeRange = function(start, end){
|
||||
|
||||
/**
|
||||
* Simple http request for retrieving external files (e.g. text tracks)
|
||||
* @param {String} url URL of resource
|
||||
* @param {Function=} onSuccess Success callback
|
||||
* @param {Function=} onError Error callback
|
||||
* @param {String} url URL of resource
|
||||
* @param {Function} onSuccess Success callback
|
||||
* @param {Function=} onError Error callback
|
||||
* @param {Boolean=} withCredentials Flag which allow credentials
|
||||
* @private
|
||||
*/
|
||||
vjs.get = function(url, onSuccess, onError){
|
||||
var local, request;
|
||||
vjs.get = function(url, onSuccess, onError, withCredentials){
|
||||
var fileUrl, request, urlInfo, winLoc, crossOrigin;
|
||||
|
||||
onError = onError || function(){};
|
||||
|
||||
if (typeof XMLHttpRequest === 'undefined') {
|
||||
// Shim XMLHttpRequest for older IEs
|
||||
window.XMLHttpRequest = function () {
|
||||
try { return new window.ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (e) {}
|
||||
try { return new window.ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (f) {}
|
||||
@@ -584,32 +588,59 @@ vjs.get = function(url, onSuccess, onError){
|
||||
}
|
||||
|
||||
request = new XMLHttpRequest();
|
||||
try {
|
||||
request.open('GET', url);
|
||||
} catch(e) {
|
||||
onError(e);
|
||||
}
|
||||
|
||||
local = (url.indexOf('file:') === 0 || (window.location.href.indexOf('file:') === 0 && url.indexOf('http') === -1));
|
||||
urlInfo = vjs.parseUrl(url);
|
||||
winLoc = window.location;
|
||||
// check if url is for another domain/origin
|
||||
// ie8 doesn't know location.origin, so we won't rely on it here
|
||||
crossOrigin = (urlInfo.protocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);
|
||||
|
||||
request.onreadystatechange = function() {
|
||||
if (request.readyState === 4) {
|
||||
if (request.status === 200 || local && request.status === 0) {
|
||||
onSuccess(request.responseText);
|
||||
} else {
|
||||
if (onError) {
|
||||
onError();
|
||||
// Use XDomainRequest for IE if XMLHTTPRequest2 isn't available
|
||||
// 'withCredentials' is only available in XMLHTTPRequest2
|
||||
// Also XDomainRequest has a lot of gotchas, so only use if cross domain
|
||||
if(crossOrigin && window.XDomainRequest && !('withCredentials' in request)) {
|
||||
request = new window.XDomainRequest();
|
||||
request.onload = function() {
|
||||
onSuccess(request.responseText);
|
||||
};
|
||||
request.onerror = onError;
|
||||
// these blank handlers need to be set to fix ie9 http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/
|
||||
request.onprogress = function() {};
|
||||
request.ontimeout = onError;
|
||||
|
||||
// XMLHTTPRequest
|
||||
} else {
|
||||
fileUrl = (urlInfo.protocol == 'file:' || winLoc.protocol == 'file:');
|
||||
|
||||
request.onreadystatechange = function() {
|
||||
if (request.readyState === 4) {
|
||||
if (request.status === 200 || fileUrl && request.status === 0) {
|
||||
onSuccess(request.responseText);
|
||||
} else {
|
||||
onError(request.responseText);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
// open the connection
|
||||
try {
|
||||
// Third arg is async, or ignored by XDomainRequest
|
||||
request.open('GET', url, true);
|
||||
// withCredentials only supported by XMLHttpRequest2
|
||||
if(withCredentials) {
|
||||
request.withCredentials = true;
|
||||
}
|
||||
} catch(e) {
|
||||
onError(e);
|
||||
return;
|
||||
}
|
||||
|
||||
// send the request
|
||||
try {
|
||||
request.send();
|
||||
} catch(e) {
|
||||
if (onError) {
|
||||
onError(e);
|
||||
}
|
||||
onError(e);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -656,45 +687,148 @@ vjs.getAbsoluteURL = function(url){
|
||||
return url;
|
||||
};
|
||||
|
||||
// usage: log('inside coolFunc',this,arguments);
|
||||
// http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
|
||||
vjs.log = function(){
|
||||
vjs.log.history = vjs.log.history || []; // store logs to an array for reference
|
||||
vjs.log.history.push(arguments);
|
||||
if(window.console){
|
||||
window.console.log(Array.prototype.slice.call(arguments));
|
||||
|
||||
/**
|
||||
* Resolve and parse the elements of a URL
|
||||
* @param {String} url The url to parse
|
||||
* @return {Object} An object of url details
|
||||
*/
|
||||
vjs.parseUrl = function(url) {
|
||||
var div, a, addToBody, props, details;
|
||||
|
||||
props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];
|
||||
|
||||
// add the url to an anchor and let the browser parse the URL
|
||||
a = vjs.createEl('a', { href: url });
|
||||
|
||||
// IE8 (and 9?) Fix
|
||||
// ie8 doesn't parse the URL correctly until the anchor is actually
|
||||
// added to the body, and an innerHTML is needed to trigger the parsing
|
||||
addToBody = (a.host === '' && a.protocol !== 'file:');
|
||||
if (addToBody) {
|
||||
div = vjs.createEl('div');
|
||||
div.innerHTML = '<a href="'+url+'"></a>';
|
||||
a = div.firstChild;
|
||||
// prevent the div from affecting layout
|
||||
div.setAttribute('style', 'display:none; position:absolute;');
|
||||
document.body.appendChild(div);
|
||||
}
|
||||
|
||||
// Copy the specific URL properties to a new object
|
||||
// This is also needed for IE8 because the anchor loses its
|
||||
// properties when it's removed from the dom
|
||||
details = {};
|
||||
for (var i = 0; i < props.length; i++) {
|
||||
details[props[i]] = a[props[i]];
|
||||
}
|
||||
|
||||
if (addToBody) {
|
||||
document.body.removeChild(div);
|
||||
}
|
||||
|
||||
return details;
|
||||
};
|
||||
|
||||
// if there's no console then don't try to output messages
|
||||
// they will still be stored in vjs.log.history
|
||||
var _noop = function(){};
|
||||
var _console = window['console'] || {
|
||||
'log': _noop,
|
||||
'warn': _noop,
|
||||
'error': _noop
|
||||
};
|
||||
|
||||
/**
|
||||
* Log messags to the console and history based on the type of message
|
||||
*
|
||||
* @param {String} type The type of message, or `null` for `log`
|
||||
* @param {[type]} args The args to be passed to the log
|
||||
* @private
|
||||
*/
|
||||
function _logType(type, args){
|
||||
// convert args to an array to get array functions
|
||||
var argsArray = Array.prototype.slice.call(args);
|
||||
|
||||
if (type) {
|
||||
// add the type to the front of the message
|
||||
argsArray.unshift(type.toUpperCase()+':');
|
||||
} else {
|
||||
// default to log with no prefix
|
||||
type = 'log';
|
||||
}
|
||||
|
||||
// add to history
|
||||
vjs.log.history.push(argsArray);
|
||||
|
||||
// add console prefix after adding to history
|
||||
argsArray.unshift('VIDEOJS:');
|
||||
|
||||
// call appropriate log function
|
||||
if (_console[type].apply) {
|
||||
_console[type].apply(_console, argsArray);
|
||||
} else {
|
||||
// ie8 doesn't allow error.apply, but it will just join() the array anyway
|
||||
_console[type](argsArray.join(' '));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Log plain debug messages
|
||||
*/
|
||||
vjs.log = function(){
|
||||
_logType(null, arguments);
|
||||
};
|
||||
|
||||
/**
|
||||
* Keep a history of log messages
|
||||
* @type {Array}
|
||||
*/
|
||||
vjs.log.history = [];
|
||||
|
||||
/**
|
||||
* Log error messages
|
||||
*/
|
||||
vjs.log.error = function(){
|
||||
_logType('error', arguments);
|
||||
};
|
||||
|
||||
/**
|
||||
* Log warning messages
|
||||
*/
|
||||
vjs.log.warn = function(){
|
||||
_logType('warn', arguments);
|
||||
};
|
||||
|
||||
// Offset Left
|
||||
// getBoundingClientRect technique from John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/
|
||||
vjs.findPosition = function(el) {
|
||||
var box, docEl, body, clientLeft, scrollLeft, left, clientTop, scrollTop, top;
|
||||
var box, docEl, body, clientLeft, scrollLeft, left, clientTop, scrollTop, top;
|
||||
|
||||
if (el.getBoundingClientRect && el.parentNode) {
|
||||
box = el.getBoundingClientRect();
|
||||
}
|
||||
|
||||
if (!box) {
|
||||
return {
|
||||
left: 0,
|
||||
top: 0
|
||||
};
|
||||
}
|
||||
|
||||
docEl = document.documentElement;
|
||||
body = document.body;
|
||||
|
||||
clientLeft = docEl.clientLeft || body.clientLeft || 0;
|
||||
scrollLeft = window.pageXOffset || body.scrollLeft;
|
||||
left = box.left + scrollLeft - clientLeft;
|
||||
|
||||
clientTop = docEl.clientTop || body.clientTop || 0;
|
||||
scrollTop = window.pageYOffset || body.scrollTop;
|
||||
top = box.top + scrollTop - clientTop;
|
||||
if (el.getBoundingClientRect && el.parentNode) {
|
||||
box = el.getBoundingClientRect();
|
||||
}
|
||||
|
||||
if (!box) {
|
||||
return {
|
||||
left: left,
|
||||
top: top
|
||||
left: 0,
|
||||
top: 0
|
||||
};
|
||||
}
|
||||
|
||||
docEl = document.documentElement;
|
||||
body = document.body;
|
||||
|
||||
clientLeft = docEl.clientLeft || body.clientLeft || 0;
|
||||
scrollLeft = window.pageXOffset || body.scrollLeft;
|
||||
left = box.left + scrollLeft - clientLeft;
|
||||
|
||||
clientTop = docEl.clientTop || body.clientTop || 0;
|
||||
scrollTop = window.pageYOffset || body.scrollTop;
|
||||
top = box.top + scrollTop - clientTop;
|
||||
|
||||
// Android sometimes returns slightly off decimal values, so need to round
|
||||
return {
|
||||
left: vjs.round(left),
|
||||
top: vjs.round(top)
|
||||
};
|
||||
};
|
||||
|
||||
@@ -15,8 +15,6 @@ vjs.LoadingSpinner = vjs.Component.extend({
|
||||
player.on('canplay', vjs.bind(this, this.hide));
|
||||
player.on('canplaythrough', vjs.bind(this, this.hide));
|
||||
player.on('playing', vjs.bind(this, this.hide));
|
||||
player.on('seeked', vjs.bind(this, this.hide));
|
||||
|
||||
player.on('seeking', vjs.bind(this, this.show));
|
||||
|
||||
// in some browsers seeking does not trigger the 'playing' event,
|
||||
@@ -24,7 +22,7 @@ vjs.LoadingSpinner = vjs.Component.extend({
|
||||
// 'seeking' event
|
||||
player.on('seeked', vjs.bind(this, this.hide));
|
||||
|
||||
player.on('error', vjs.bind(this, this.show));
|
||||
player.on('ended', vjs.bind(this, this.hide));
|
||||
|
||||
// Not showing spinner on stalled any more. Browsers may stall and then not trigger any events that would remove the spinner.
|
||||
// Checked in Chrome 16 and Safari 5.1.2. http://help.videojs.com/discussions/problems/883-why-is-the-download-progress-showing
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* Custom MediaError to mimic the HTML5 MediaError
|
||||
* @param {Number} code The media error code
|
||||
*/
|
||||
vjs.MediaError = function(code){
|
||||
if (typeof code == 'number') {
|
||||
this.code = code;
|
||||
} else if (typeof code == 'string') {
|
||||
// default code is zero, so this is a custom error
|
||||
this.message = code;
|
||||
} else if (typeof code == 'object') { // object
|
||||
vjs.obj.merge(this, code);
|
||||
}
|
||||
|
||||
if (!this.message) {
|
||||
this.message = vjs.MediaError.defaultMessages[this.code] || '';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* The error code that refers two one of the defined
|
||||
* MediaError types
|
||||
* @type {Number}
|
||||
*/
|
||||
vjs.MediaError.prototype.code = 0;
|
||||
|
||||
/**
|
||||
* An optional message to be shown with the error.
|
||||
* Message is not part of the HTML5 video spec
|
||||
* but allows for more informative custom errors.
|
||||
* @type {String}
|
||||
*/
|
||||
vjs.MediaError.prototype.message = '';
|
||||
|
||||
/**
|
||||
* An optional status code that can be set by plugins
|
||||
* to allow even more detail about the error.
|
||||
* For example the HLS plugin might provide the specific
|
||||
* HTTP status code that was returned when the error
|
||||
* occurred, then allowing a custom error overlay
|
||||
* to display more information.
|
||||
* @type {[type]}
|
||||
*/
|
||||
vjs.MediaError.prototype.status = null;
|
||||
|
||||
vjs.MediaError.errorTypes = [
|
||||
'MEDIA_ERR_CUSTOM', // = 0
|
||||
'MEDIA_ERR_ABORTED', // = 1
|
||||
'MEDIA_ERR_NETWORK', // = 2
|
||||
'MEDIA_ERR_DECODE', // = 3
|
||||
'MEDIA_ERR_SRC_NOT_SUPPORTED', // = 4
|
||||
'MEDIA_ERR_ENCRYPTED' // = 5
|
||||
];
|
||||
|
||||
vjs.MediaError.defaultMessages = {
|
||||
1: 'You aborted the video playback',
|
||||
2: 'A network error caused the video download to fail part-way.',
|
||||
3: 'The video playback was aborted due to a corruption problem or because the video used features your browser did not support.',
|
||||
4: 'The video could not be loaded, either because the server or network failed or because the format is not supported.',
|
||||
5: 'The video is encrypted and we do not have the keys to decrypt it.'
|
||||
};
|
||||
|
||||
// Add types as properties on MediaError
|
||||
// e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
|
||||
for (var errNum = 0; errNum < vjs.MediaError.errorTypes.length; errNum++) {
|
||||
vjs.MediaError[vjs.MediaError.errorTypes[errNum]] = errNum;
|
||||
// values should be accessible on both the class and instance
|
||||
vjs.MediaError.prototype[vjs.MediaError.errorTypes[errNum]] = errNum;
|
||||
}
|
||||
+18
-9
@@ -258,12 +258,15 @@ vjs.Flash.prototype.pause = function(){
|
||||
};
|
||||
|
||||
vjs.Flash.prototype.src = function(src){
|
||||
if (src === undefined) {
|
||||
return this.currentSrc();
|
||||
}
|
||||
|
||||
if (vjs.Flash.isStreamingSrc(src)) {
|
||||
src = vjs.Flash.streamToParts(src);
|
||||
this.setRtmpConnection(src.connection);
|
||||
this.setRtmpStream(src.stream);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
// Make sure source URL is abosolute.
|
||||
src = vjs.getAbsoluteURL(src);
|
||||
this.el_.vjs_src(src);
|
||||
@@ -281,8 +284,8 @@ vjs.Flash.prototype.currentSrc = function(){
|
||||
var src = this.el_.vjs_getProperty('currentSrc');
|
||||
// no src, check and see if RTMP
|
||||
if (src == null) {
|
||||
var connection = this.rtmpConnection(),
|
||||
stream = this.rtmpStream();
|
||||
var connection = this['rtmpConnection'](),
|
||||
stream = this['rtmpStream']();
|
||||
|
||||
if (connection && stream) {
|
||||
src = vjs.Flash.streamFromParts(connection, stream);
|
||||
@@ -314,12 +317,11 @@ vjs.Flash.prototype.enterFullScreen = function(){
|
||||
return false;
|
||||
};
|
||||
|
||||
|
||||
// Create setters and getters for attributes
|
||||
var api = vjs.Flash.prototype,
|
||||
readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(','),
|
||||
readOnly = 'error,currentSrc,networkState,readyState,seeking,initialTime,duration,startOffsetTime,paused,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks'.split(',');
|
||||
// Overridden: buffered, currentTime
|
||||
readOnly = 'error,networkState,readyState,seeking,initialTime,duration,startOffsetTime,paused,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks'.split(',');
|
||||
// Overridden: buffered, currentTime, currentSrc
|
||||
|
||||
/**
|
||||
* @this {*}
|
||||
@@ -430,8 +432,15 @@ vjs.Flash['onEvent'] = function(swfID, eventName){
|
||||
// Log errors from the swf
|
||||
vjs.Flash['onError'] = function(swfID, err){
|
||||
var player = vjs.el(swfID)['player'];
|
||||
player.trigger('error');
|
||||
vjs.log('Flash Error', err, swfID);
|
||||
var msg = 'FLASH: '+err;
|
||||
|
||||
if (err == 'srcnotfound') {
|
||||
player.error({ code: 4, message: msg });
|
||||
|
||||
// errors we haven't categorized into the media errors
|
||||
} else {
|
||||
player.error(msg);
|
||||
}
|
||||
};
|
||||
|
||||
// Flash Version Check
|
||||
|
||||
+95
-20
@@ -15,6 +15,9 @@ vjs.Html5 = vjs.MediaTechController.extend({
|
||||
// volume cannot be changed from 1 on iOS
|
||||
this.features['volumeControl'] = vjs.Html5.canControlVolume();
|
||||
|
||||
// just in case; or is it excessively...
|
||||
this.features['playbackRate'] = vjs.Html5.canControlPlaybackRate();
|
||||
|
||||
// In iOS, if you move a video element in the DOM, it breaks video playback.
|
||||
this.features['movingMediaElementInDOM'] = !vjs.IS_IOS;
|
||||
|
||||
@@ -29,8 +32,10 @@ vjs.Html5 = vjs.MediaTechController.extend({
|
||||
// If the element source is already set, we may have missed the loadstart event, and want to trigger it.
|
||||
// We don't want to set the source again and interrupt playback.
|
||||
if (source && this.el_.currentSrc === source.src && this.el_.networkState > 0) {
|
||||
player.trigger('loadstart');
|
||||
|
||||
// wait for the player to be ready so the player listeners are attached
|
||||
player.ready(function(){
|
||||
player.trigger('loadstart');
|
||||
});
|
||||
// Otherwise set the source if one was provided.
|
||||
} else if (source) {
|
||||
this.el_.src = source.src;
|
||||
@@ -108,18 +113,26 @@ vjs.Html5.prototype.createEl = function(){
|
||||
|
||||
// Make video events trigger player events
|
||||
// May seem verbose here, but makes other APIs possible.
|
||||
// Triggers removed using this.off when disposed
|
||||
vjs.Html5.prototype.setupTriggers = function(){
|
||||
for (var i = vjs.Html5.Events.length - 1; i >= 0; i--) {
|
||||
vjs.on(this.el_, vjs.Html5.Events[i], vjs.bind(this.player_, this.eventHandler));
|
||||
vjs.on(this.el_, vjs.Html5.Events[i], vjs.bind(this, this.eventHandler));
|
||||
}
|
||||
};
|
||||
// Triggers removed using this.off when disposed
|
||||
|
||||
vjs.Html5.prototype.eventHandler = function(e){
|
||||
this.trigger(e);
|
||||
vjs.Html5.prototype.eventHandler = function(evt){
|
||||
// In the case of an error, set the error prop on the player
|
||||
// and let the player handle triggering the event.
|
||||
if (evt.type == 'error') {
|
||||
this.player().error(this.error().code);
|
||||
|
||||
// No need for media events to bubble up.
|
||||
e.stopPropagation();
|
||||
// in some cases we pass the event directly to the player
|
||||
} else {
|
||||
// No need for media events to bubble up.
|
||||
evt.bubbles = false;
|
||||
|
||||
this.player().trigger(evt);
|
||||
}
|
||||
};
|
||||
|
||||
vjs.Html5.prototype.useNativeControls = function(){
|
||||
@@ -223,8 +236,8 @@ vjs.Html5.prototype.setPreload = function(val){ this.el_.preload = val; };
|
||||
vjs.Html5.prototype.autoplay = function(){ return this.el_.autoplay; };
|
||||
vjs.Html5.prototype.setAutoplay = function(val){ this.el_.autoplay = val; };
|
||||
|
||||
vjs.Html5.prototype.controls = function(){ return this.el_.controls; }
|
||||
vjs.Html5.prototype.setControls = function(val){ this.el_.controls = !!val; }
|
||||
vjs.Html5.prototype.controls = function(){ return this.el_.controls; };
|
||||
vjs.Html5.prototype.setControls = function(val){ this.el_.controls = !!val; };
|
||||
|
||||
vjs.Html5.prototype.loop = function(){ return this.el_.loop; };
|
||||
vjs.Html5.prototype.setLoop = function(val){ this.el_.loop = val; };
|
||||
@@ -234,9 +247,19 @@ vjs.Html5.prototype.seeking = function(){ return this.el_.seeking; };
|
||||
vjs.Html5.prototype.ended = function(){ return this.el_.ended; };
|
||||
vjs.Html5.prototype.defaultMuted = function(){ return this.el_.defaultMuted; };
|
||||
|
||||
vjs.Html5.prototype.playbackRate = function(){ return this.el_.playbackRate; };
|
||||
vjs.Html5.prototype.setPlaybackRate = function(val){ this.el_.playbackRate = val; };
|
||||
|
||||
/* HTML5 Support Testing ---------------------------------------------------- */
|
||||
|
||||
vjs.Html5.isSupported = function(){
|
||||
// ie9 with no Media Player is a LIAR! (#984)
|
||||
try {
|
||||
vjs.TEST_VID['volume'] = 0.5;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !!vjs.TEST_VID.canPlayType;
|
||||
};
|
||||
|
||||
@@ -259,6 +282,59 @@ vjs.Html5.canControlVolume = function(){
|
||||
return volume !== vjs.TEST_VID.volume;
|
||||
};
|
||||
|
||||
vjs.Html5.canControlPlaybackRate = function(){
|
||||
var playbackRate = vjs.TEST_VID.playbackRate;
|
||||
vjs.TEST_VID.playbackRate = (playbackRate / 2) + 0.1;
|
||||
return playbackRate !== vjs.TEST_VID.playbackRate;
|
||||
};
|
||||
|
||||
// HTML5 Feature detection and Device Fixes --------------------------------- //
|
||||
(function() {
|
||||
var canPlayType,
|
||||
mpegurlRE = /^application\/(?:x-|vnd\.apple\.)mpegurl/i,
|
||||
mp4RE = /^video\/mp4/i;
|
||||
|
||||
vjs.Html5.patchCanPlayType = function() {
|
||||
// Android 4.0 and above can play HLS to some extent but it reports being unable to do so
|
||||
if (vjs.ANDROID_VERSION >= 4.0) {
|
||||
if (!canPlayType) {
|
||||
canPlayType = vjs.TEST_VID.constructor.prototype.canPlayType;
|
||||
}
|
||||
|
||||
vjs.TEST_VID.constructor.prototype.canPlayType = function(type) {
|
||||
if (type && mpegurlRE.test(type)) {
|
||||
return 'maybe';
|
||||
}
|
||||
return canPlayType.call(this, type);
|
||||
};
|
||||
}
|
||||
|
||||
// Override Android 2.2 and less canPlayType method which is broken
|
||||
if (vjs.IS_OLD_ANDROID) {
|
||||
if (!canPlayType) {
|
||||
canPlayType = vjs.TEST_VID.constructor.prototype.canPlayType;
|
||||
}
|
||||
|
||||
vjs.TEST_VID.constructor.prototype.canPlayType = function(type){
|
||||
if (type && mp4RE.test(type)) {
|
||||
return 'maybe';
|
||||
}
|
||||
return canPlayType.call(this, type);
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
vjs.Html5.unpatchCanPlayType = function() {
|
||||
var r = vjs.TEST_VID.constructor.prototype.canPlayType;
|
||||
vjs.TEST_VID.constructor.prototype.canPlayType = canPlayType;
|
||||
canPlayType = null;
|
||||
return r;
|
||||
};
|
||||
|
||||
// by default, patch the video element
|
||||
vjs.Html5.patchCanPlayType();
|
||||
})();
|
||||
|
||||
// List of all HTML5 events (various uses).
|
||||
vjs.Html5.Events = 'loadstart,suspend,abort,error,emptied,stalled,loadedmetadata,loadeddata,canplay,canplaythrough,playing,waiting,seeking,seeked,ended,durationchange,timeupdate,progress,play,pause,ratechange,volumechange'.split(',');
|
||||
|
||||
@@ -281,16 +357,15 @@ vjs.Html5.disposeMediaElement = function(el){
|
||||
el.removeAttribute('src');
|
||||
|
||||
// force the media element to update its loading state by calling load()
|
||||
// however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)
|
||||
if (typeof el.load === 'function') {
|
||||
el.load();
|
||||
// wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)
|
||||
(function() {
|
||||
try {
|
||||
el.load();
|
||||
} catch (e) {
|
||||
// not supported
|
||||
}
|
||||
})();
|
||||
}
|
||||
};
|
||||
|
||||
// HTML5 Feature detection and Device Fixes --------------------------------- //
|
||||
|
||||
// Override Android 2.2 and less canPlayType method which is broken
|
||||
if (vjs.IS_OLD_ANDROID) {
|
||||
document.createElement('video').constructor.prototype.canPlayType = function(type){
|
||||
return (type && type.toLowerCase().indexOf('video/mp4') != -1) ? 'maybe' : '';
|
||||
};
|
||||
}
|
||||
|
||||
@@ -139,11 +139,20 @@ vjs.MediaTechController.prototype.onTap = function(){
|
||||
this.player().userActive(!this.player().userActive());
|
||||
};
|
||||
|
||||
/**
|
||||
* Provide a default setPoster method for techs
|
||||
*
|
||||
* Poster support for techs should be optional, so we don't want techs to
|
||||
* break if they don't have a way to set a poster.
|
||||
*/
|
||||
vjs.MediaTechController.prototype.setPoster = function(){};
|
||||
|
||||
vjs.MediaTechController.prototype.features = {
|
||||
'volumeControl': true,
|
||||
|
||||
// Resizing plugins using request fullscreen reloads the plugin
|
||||
'fullscreenResize': false,
|
||||
'playbackRate': false,
|
||||
|
||||
// Optional events that we can manually mimic with timers
|
||||
// currently not triggered by video-js-swf
|
||||
|
||||
+2
-2
@@ -129,9 +129,9 @@ vjs.MenuButton.prototype.createMenu = function(){
|
||||
|
||||
// Add a title list item to the top
|
||||
if (this.options().title) {
|
||||
menu.el().appendChild(vjs.createEl('li', {
|
||||
menu.contentEl().appendChild(vjs.createEl('li', {
|
||||
className: 'vjs-menu-title',
|
||||
innerHTML: vjs.capitalize(this.kind_),
|
||||
innerHTML: vjs.capitalize(this.options().title),
|
||||
tabindex: -1
|
||||
}));
|
||||
}
|
||||
|
||||
+177
-67
@@ -58,6 +58,20 @@ vjs.Player = vjs.Component.extend({
|
||||
// see enableTouchActivity in Component
|
||||
options.reportTouchActivity = false;
|
||||
|
||||
// Make sure the event listeners are the first things to happen when
|
||||
// the player is ready. See #1208
|
||||
// If not, the tech might fire events before the listeners are attached.
|
||||
this.ready(function(){
|
||||
this.on('loadstart', this.onLoadStart);
|
||||
this.on('ended', this.onEnded);
|
||||
this.on('play', this.onPlay);
|
||||
this.on('firstplay', this.onFirstPlay);
|
||||
this.on('pause', this.onPause);
|
||||
this.on('progress', this.onProgress);
|
||||
this.on('durationchange', this.onDurationChange);
|
||||
this.on('fullscreenchange', this.onFullscreenChange);
|
||||
});
|
||||
|
||||
// Run base component initializing with new options.
|
||||
// Builds the element through createEl()
|
||||
// Inits and embeds any child components in opts
|
||||
@@ -77,29 +91,6 @@ vjs.Player = vjs.Component.extend({
|
||||
// this.addClass('vjs-touch-enabled');
|
||||
// }
|
||||
|
||||
// Firstplay event implimentation. Not sold on the event yet.
|
||||
// Could probably just check currentTime==0?
|
||||
this.one('play', function(e){
|
||||
var fpEvent = { type: 'firstplay', target: this.el_ };
|
||||
// Using vjs.trigger so we can check if default was prevented
|
||||
var keepGoing = vjs.trigger(this.el_, fpEvent);
|
||||
|
||||
if (!keepGoing) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
e.stopImmediatePropagation();
|
||||
}
|
||||
});
|
||||
|
||||
this.on('ended', this.onEnded);
|
||||
this.on('play', this.onPlay);
|
||||
this.on('firstplay', this.onFirstPlay);
|
||||
this.on('pause', this.onPause);
|
||||
this.on('progress', this.onProgress);
|
||||
this.on('durationchange', this.onDurationChange);
|
||||
this.on('error', this.onError);
|
||||
this.on('fullscreenchange', this.onFullscreenChange);
|
||||
|
||||
// Make player easily findable by ID
|
||||
vjs.players[this.id_] = this;
|
||||
|
||||
@@ -335,14 +326,16 @@ vjs.Player.prototype.manualProgressOn = function(){
|
||||
// In HTML5, some older versions don't support the progress event
|
||||
// So we're assuming they don't, and turning off manual progress if they do.
|
||||
// As opposed to doing user agent detection
|
||||
this.tech.one('progress', function(){
|
||||
if (this.tech) {
|
||||
this.tech.one('progress', function(){
|
||||
|
||||
// Update known progress support for this playback technology
|
||||
this.features['progressEvents'] = true;
|
||||
// Update known progress support for this playback technology
|
||||
this.features['progressEvents'] = true;
|
||||
|
||||
// Turn off manual progress tracking
|
||||
this.player_.manualProgressOff();
|
||||
});
|
||||
// Turn off manual progress tracking
|
||||
this.player_.manualProgressOff();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
vjs.Player.prototype.manualProgressOff = function(){
|
||||
@@ -375,12 +368,14 @@ vjs.Player.prototype.manualTimeUpdatesOn = function(){
|
||||
// timeupdate is also called by .currentTime whenever current time is set
|
||||
|
||||
// Watch for native timeupdate event
|
||||
this.tech.one('timeupdate', function(){
|
||||
// Update known progress support for this playback technology
|
||||
this.features['timeupdateEvents'] = true;
|
||||
// Turn off manual progress tracking
|
||||
this.player_.manualTimeUpdatesOff();
|
||||
});
|
||||
if (this.tech) {
|
||||
this.tech.one('timeupdate', function(){
|
||||
// Update known progress support for this playback technology
|
||||
this.features['timeupdateEvents'] = true;
|
||||
// Turn off manual progress tracking
|
||||
this.player_.manualTimeUpdatesOff();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
vjs.Player.prototype.manualTimeUpdatesOff = function(){
|
||||
@@ -398,8 +393,13 @@ vjs.Player.prototype.trackCurrentTime = function(){
|
||||
};
|
||||
|
||||
// Turn off play progress tracking (when paused or dragging)
|
||||
vjs.Player.prototype.stopTrackingCurrentTime = function(){ clearInterval(this.currentTimeInterval); };
|
||||
vjs.Player.prototype.stopTrackingCurrentTime = function(){
|
||||
clearInterval(this.currentTimeInterval);
|
||||
|
||||
// #1002 - if the video ends right before the next timeupdate would happen,
|
||||
// the progress bar won't make it all the way to the end
|
||||
this.trigger('timeupdate');
|
||||
};
|
||||
// /* Player event handlers (how the player reacts to certain events)
|
||||
// ================================================================================ */
|
||||
|
||||
@@ -407,7 +407,31 @@ vjs.Player.prototype.stopTrackingCurrentTime = function(){ clearInterval(this.cu
|
||||
* Fired when the user agent begins looking for media data
|
||||
* @event loadstart
|
||||
*/
|
||||
vjs.Player.prototype.onLoadStart;
|
||||
vjs.Player.prototype.onLoadStart = function() {
|
||||
// remove any first play listeners that weren't triggered from a previous video.
|
||||
this.off('play', initFirstPlay);
|
||||
this.one('play', initFirstPlay);
|
||||
|
||||
if (this.error()) {
|
||||
this.error(null);
|
||||
}
|
||||
|
||||
vjs.removeClass(this.el_, 'vjs-has-started');
|
||||
};
|
||||
|
||||
// Need to create this outside the scope of onLoadStart so it
|
||||
// can be added and removed (to avoid piling first play listeners).
|
||||
function initFirstPlay(e) {
|
||||
var fpEvent = { type: 'firstplay', target: this.el_ };
|
||||
// Using vjs.trigger so we can check if default was prevented
|
||||
var keepGoing = vjs.trigger(this.el_, fpEvent);
|
||||
|
||||
if (!keepGoing) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
e.stopImmediatePropagation();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fired when the player has initial duration and dimension information
|
||||
@@ -505,7 +529,16 @@ vjs.Player.prototype.onDurationChange = function(){
|
||||
// accidentally cause the stack to blow up.
|
||||
var duration = this.techGet('duration');
|
||||
if (duration) {
|
||||
if (duration < 0) {
|
||||
duration = Infinity;
|
||||
}
|
||||
this.duration(duration);
|
||||
// Determine if the stream is live and propagate styles down to UI.
|
||||
if (duration === Infinity) {
|
||||
this.addClass('vjs-live');
|
||||
} else {
|
||||
this.removeClass('vjs-live');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -527,14 +560,6 @@ vjs.Player.prototype.onFullscreenChange = function() {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Fired when there is an error in playback
|
||||
* @event error
|
||||
*/
|
||||
vjs.Player.prototype.onError = function(e) {
|
||||
vjs.log('Video Error', e);
|
||||
};
|
||||
|
||||
// /* Player API
|
||||
// ================================================================================ */
|
||||
|
||||
@@ -569,7 +594,6 @@ vjs.Player.prototype.techCall = function(method, arg){
|
||||
|
||||
// Get calls can't wait for the tech, and sometimes don't need to.
|
||||
vjs.Player.prototype.techGet = function(method){
|
||||
|
||||
if (this.tech && this.tech.isReady_) {
|
||||
|
||||
// Flash likes to die and reload when you hide or reposition it.
|
||||
@@ -605,7 +629,14 @@ vjs.Player.prototype.techGet = function(method){
|
||||
* @return {vjs.Player} self
|
||||
*/
|
||||
vjs.Player.prototype.play = function(){
|
||||
this.techCall('play');
|
||||
// In the case of an error, trying to play again wont fix the issue
|
||||
// so we're blocking calling play in this case.
|
||||
// We might log an error when this happpens, but this is probably too chatty.
|
||||
// vjs.log.error('The error must be resolved before attempting to play the video');
|
||||
if (!this.error()) {
|
||||
this.techCall('play');
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
@@ -1019,9 +1050,14 @@ vjs.Player.prototype.selectSource = function(sources){
|
||||
* ]);
|
||||
*
|
||||
* @param {String|Object|Array=} source The source URL, object, or array of sources
|
||||
* @return {vjs.Player} self
|
||||
* @return {String} The current video source when getting
|
||||
* @return {String} The player when setting
|
||||
*/
|
||||
vjs.Player.prototype.src = function(source){
|
||||
if (source === undefined) {
|
||||
return this.techGet('src');
|
||||
}
|
||||
|
||||
// Case: Array of source objects to choose from and pick the best to play
|
||||
if (source instanceof Array) {
|
||||
|
||||
@@ -1040,9 +1076,11 @@ vjs.Player.prototype.src = function(source){
|
||||
this.loadTech(techName, source);
|
||||
}
|
||||
} else {
|
||||
this.el_.appendChild(vjs.createEl('p', {
|
||||
innerHTML: this.options()['notSupportedMessage']
|
||||
}));
|
||||
// this.el_.appendChild(vjs.createEl('p', {
|
||||
// innerHTML: this.options()['notSupportedMessage']
|
||||
// }));
|
||||
this.error({ code: 4, message: this.options()['notSupportedMessage'] });
|
||||
this.triggerReady(); // we could not find an appropriate tech, but let's still notify the delegate that this is it
|
||||
}
|
||||
|
||||
// Case: Source object { src: '', type: '' ... }
|
||||
@@ -1074,6 +1112,7 @@ vjs.Player.prototype.src = function(source){
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
@@ -1236,7 +1275,51 @@ vjs.Player.prototype.usingNativeControls = function(bool){
|
||||
return this.usingNativeControls_;
|
||||
};
|
||||
|
||||
vjs.Player.prototype.error = function(){ return this.techGet('error'); };
|
||||
/**
|
||||
* Store the current media error
|
||||
* @type {Object}
|
||||
* @private
|
||||
*/
|
||||
vjs.Player.prototype.error_ = null;
|
||||
|
||||
/**
|
||||
* Set or get the current MediaError
|
||||
* @param {*} err A MediaError or a String/Number to be turned into a MediaError
|
||||
* @return {vjs.MediaError|null} when getting
|
||||
* @return {vjs.Player} when setting
|
||||
*/
|
||||
vjs.Player.prototype.error = function(err){
|
||||
if (err === undefined) {
|
||||
return this.error_;
|
||||
}
|
||||
|
||||
// restoring to default
|
||||
if (err === null) {
|
||||
this.error_ = err;
|
||||
this.removeClass('vjs-error');
|
||||
return this;
|
||||
}
|
||||
|
||||
// error instance
|
||||
if (err instanceof vjs.MediaError) {
|
||||
this.error_ = err;
|
||||
} else {
|
||||
this.error_ = new vjs.MediaError(err);
|
||||
}
|
||||
|
||||
// fire an error event on the player
|
||||
this.trigger('error');
|
||||
|
||||
// add the vjs-error classname to the player
|
||||
this.addClass('vjs-error');
|
||||
|
||||
// log the name of the error type and any message
|
||||
// ie8 just logs "[object object]" if you just log the error object
|
||||
vjs.log.error('(CODE:'+this.error_.code+' '+vjs.MediaError.errorTypes[this.error_.code]+')', this.error_.message, this.error_);
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
vjs.Player.prototype.ended = function(){ return this.techGet('ended'); };
|
||||
vjs.Player.prototype.seeking = function(){ return this.techGet('seeking'); };
|
||||
|
||||
@@ -1273,10 +1356,13 @@ vjs.Player.prototype.userActive = function(bool){
|
||||
//
|
||||
// When this gets resolved in ALL browsers it can be removed
|
||||
// https://code.google.com/p/chromium/issues/detail?id=103041
|
||||
this.tech.one('mousemove', function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
if(this.tech) {
|
||||
this.tech.one('mousemove', function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
}
|
||||
|
||||
this.removeClass('vjs-user-active');
|
||||
this.addClass('vjs-user-inactive');
|
||||
this.trigger('userinactive');
|
||||
@@ -1288,13 +1374,23 @@ vjs.Player.prototype.userActive = function(bool){
|
||||
};
|
||||
|
||||
vjs.Player.prototype.listenForUserActivity = function(){
|
||||
var onMouseActivity, onMouseDown, mouseInProgress, onMouseUp,
|
||||
activityCheck, inactivityTimeout;
|
||||
var onActivity, onMouseMove, onMouseDown, mouseInProgress, onMouseUp,
|
||||
activityCheck, inactivityTimeout, lastMoveX, lastMoveY;
|
||||
|
||||
onMouseActivity = vjs.bind(this, this.reportUserActivity);
|
||||
onActivity = vjs.bind(this, this.reportUserActivity);
|
||||
|
||||
onMouseMove = function(e) {
|
||||
// #1068 - Prevent mousemove spamming
|
||||
// Chrome Bug: https://code.google.com/p/chromium/issues/detail?id=366970
|
||||
if(e.screenX != lastMoveX || e.screenY != lastMoveY) {
|
||||
lastMoveX = e.screenX;
|
||||
lastMoveY = e.screenY;
|
||||
onActivity();
|
||||
}
|
||||
};
|
||||
|
||||
onMouseDown = function() {
|
||||
onMouseActivity();
|
||||
onActivity();
|
||||
// For as long as the they are touching the device or have their mouse down,
|
||||
// we consider them active even if they're not moving their finger or mouse.
|
||||
// So we want to continue to update that they are active
|
||||
@@ -1302,24 +1398,24 @@ vjs.Player.prototype.listenForUserActivity = function(){
|
||||
// Setting userActivity=true now and setting the interval to the same time
|
||||
// as the activityCheck interval (250) should ensure we never miss the
|
||||
// next activityCheck
|
||||
mouseInProgress = setInterval(onMouseActivity, 250);
|
||||
mouseInProgress = setInterval(onActivity, 250);
|
||||
};
|
||||
|
||||
onMouseUp = function(event) {
|
||||
onMouseActivity();
|
||||
onActivity();
|
||||
// Stop the interval that maintains activity if the mouse/touch is down
|
||||
clearInterval(mouseInProgress);
|
||||
};
|
||||
|
||||
// Any mouse movement will be considered user activity
|
||||
this.on('mousedown', onMouseDown);
|
||||
this.on('mousemove', onMouseActivity);
|
||||
this.on('mousemove', onMouseMove);
|
||||
this.on('mouseup', onMouseUp);
|
||||
|
||||
// Listen for keyboard navigation
|
||||
// Shouldn't need to use inProgress interval because of key repeat
|
||||
this.on('keydown', onMouseActivity);
|
||||
this.on('keyup', onMouseActivity);
|
||||
this.on('keydown', onActivity);
|
||||
this.on('keyup', onActivity);
|
||||
|
||||
// Run an interval every 250 milliseconds instead of stuffing everything into
|
||||
// the mousemove/touchmove function itself, to prevent performance degradation.
|
||||
@@ -1358,6 +1454,20 @@ vjs.Player.prototype.listenForUserActivity = function(){
|
||||
});
|
||||
};
|
||||
|
||||
vjs.Player.prototype.playbackRate = function(rate) {
|
||||
if (rate !== undefined) {
|
||||
this.techCall('setPlaybackRate', rate);
|
||||
return this;
|
||||
}
|
||||
|
||||
if (this.tech && this.tech.features && this.tech.features['playbackRate']) {
|
||||
return this.techGet('playbackRate');
|
||||
} else {
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// Methods to add support for
|
||||
// networkState: function(){ return this.techCall('networkState'); },
|
||||
// readyState: function(){ return this.techCall('readyState'); },
|
||||
@@ -1370,7 +1480,6 @@ vjs.Player.prototype.listenForUserActivity = function(){
|
||||
// videoWidth: function(){ return this.techCall('videoWidth'); },
|
||||
// videoHeight: function(){ return this.techCall('videoHeight'); },
|
||||
// defaultPlaybackRate: function(){ return this.techCall('defaultPlaybackRate'); },
|
||||
// playbackRate: function(){ return this.techCall('playbackRate'); },
|
||||
// mediaGroup: function(){ return this.techCall('mediaGroup'); },
|
||||
// controller: function(){ return this.techCall('controller'); },
|
||||
// defaultMuted: function(){ return this.techCall('defaultMuted'); }
|
||||
@@ -1407,13 +1516,14 @@ vjs.Player.prototype.listenForUserActivity = function(){
|
||||
if (document.mozCancelFullScreen) {
|
||||
prefix = 'moz';
|
||||
requestFS.isFullScreen = prefix + 'FullScreen';
|
||||
requestFS.requestFn = prefix + 'RequestFullScreen';
|
||||
} else {
|
||||
prefix = 'webkit';
|
||||
requestFS.isFullScreen = prefix + 'IsFullScreen';
|
||||
requestFS.requestFn = prefix + 'RequestFullscreen';
|
||||
}
|
||||
|
||||
if (div[prefix + 'RequestFullScreen']) {
|
||||
requestFS.requestFn = prefix + 'RequestFullScreen';
|
||||
requestFS.cancelFn = prefix + 'CancelFullScreen';
|
||||
}
|
||||
requestFS.eventName = prefix + 'fullscreenchange';
|
||||
|
||||
+1
-6
@@ -16,8 +16,6 @@ vjs.Slider = vjs.Component.extend({
|
||||
this.bar = this.getChild(this.options_['barName']);
|
||||
this.handle = this.getChild(this.options_['handleName']);
|
||||
|
||||
player.on(this.playerEvent, vjs.bind(this, this.update));
|
||||
|
||||
this.on('mousedown', this.onMouseDown);
|
||||
this.on('touchstart', this.onMouseDown);
|
||||
this.on('focus', this.onFocus);
|
||||
@@ -26,10 +24,7 @@ vjs.Slider = vjs.Component.extend({
|
||||
|
||||
this.player_.on('controlsvisible', vjs.bind(this, this.update));
|
||||
|
||||
// This is actually to fix the volume handle position. http://twitter.com/#!/gerritvanaaken/status/159046254519787520
|
||||
// this.player_.one('timeupdate', vjs.bind(this, this.update));
|
||||
|
||||
player.ready(vjs.bind(this, this.update));
|
||||
player.on(this.playerEvent, vjs.bind(this, this.update));
|
||||
|
||||
this.boundEvents = {};
|
||||
}
|
||||
|
||||
+10
-4
@@ -58,9 +58,15 @@ vjs.Player.prototype.addTextTrack = function(kind, label, language, options){
|
||||
// TODO: Add a process to deterime the best track to show for the specific kind
|
||||
// Incase there are mulitple defaulted tracks of the same kind
|
||||
// Or the user has a set preference of a specific language that should override the default
|
||||
// if (track.dflt()) {
|
||||
// this.ready(vjs.bind(track, track.show));
|
||||
// }
|
||||
// Note: The setTimeout is a workaround because with the html5 tech, the player is 'ready'
|
||||
// before it's child components (including the textTrackDisplay) have finished loading.
|
||||
if (track.dflt()) {
|
||||
this.ready(function(){
|
||||
setTimeout(function(){
|
||||
track.show();
|
||||
}, 0);
|
||||
});
|
||||
}
|
||||
|
||||
return track;
|
||||
};
|
||||
@@ -948,7 +954,7 @@ vjs.ChaptersButton.prototype.createMenu = function(){
|
||||
|
||||
var menu = this.menu = new vjs.Menu(this.player_);
|
||||
|
||||
menu.el_.appendChild(vjs.createEl('li', {
|
||||
menu.contentEl().appendChild(vjs.createEl('li', {
|
||||
className: 'vjs-menu-title',
|
||||
innerHTML: vjs.capitalize(this.kind_),
|
||||
tabindex: -1
|
||||
|
||||
+6
-4
@@ -3,9 +3,9 @@
|
||||
<head>
|
||||
<title>Video.js Test Suite</title>
|
||||
|
||||
<!--[if IE]>
|
||||
<script src="https://getfirebug.com/releases/lite/1.4/firebug-lite.js"></script>
|
||||
<!--<![endif]-->
|
||||
<!-- Sinon -->
|
||||
<script src="../node_modules/sinon/pkg/sinon.js"></script>
|
||||
<script src="../node_modules/sinon/pkg/sinon-ie.js"></script>
|
||||
|
||||
<!-- QUnit -->
|
||||
<link rel="stylesheet" href="../node_modules/qunitjs/qunit/qunit.css" />
|
||||
@@ -33,7 +33,9 @@
|
||||
'test/unit/poster.js',
|
||||
'test/unit/plugins.js',
|
||||
'test/unit/flash.js',
|
||||
'test/unit/api.js'
|
||||
'test/unit/api.js',
|
||||
'test/unit/menu.js',
|
||||
'test/unit/tracks.js'
|
||||
];
|
||||
|
||||
var projectRoot = '../';
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
<head>
|
||||
<title>Video.js Test Suite</title>
|
||||
|
||||
<!-- Sinon -->
|
||||
<script src="../node_modules/sinon/pkg/sinon.js"></script>
|
||||
<script src="../node_modules/sinon/pkg/sinon-ie.js"></script>
|
||||
|
||||
<!-- QUnit -->
|
||||
<link rel="stylesheet" href="../node_modules/qunitjs/qunit/qunit.css" />
|
||||
<script src="../node_modules/qunitjs/qunit/qunit.js"></script>
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
<head>
|
||||
<title>Video.js Test Suite</title>
|
||||
|
||||
<!-- Sinon -->
|
||||
<script src="../node_modules/sinon/pkg/sinon.js"></script>
|
||||
<script src="../node_modules/sinon/pkg/sinon-ie.js"></script>
|
||||
|
||||
<!-- QUnit -->
|
||||
<link rel="stylesheet" href="../node_modules/qunitjs/qunit/qunit.css" />
|
||||
<script src="../node_modules/qunitjs/qunit/qunit.js"></script>
|
||||
|
||||
@@ -81,4 +81,4 @@ function start(increment){}
|
||||
/**
|
||||
* @param {number=} increment
|
||||
*/
|
||||
function stop(increment){}
|
||||
function stop(increment){}
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* Sinon externs
|
||||
*/
|
||||
function sinon(){}
|
||||
|
||||
sinon.stub = function(){};
|
||||
sinon.spy = function(){};
|
||||
sinon.mock = function(){};
|
||||
|
||||
Function.prototype.alwaysCalledOn = function(){};
|
||||
Function.prototype.alwaysCalledWith = function(){};
|
||||
Function.prototype.alwaysCalledWithExactly = function(){};
|
||||
Function.prototype.alwaysCalledWithMatch = function(){};
|
||||
Function.prototype.alwaysCalledWithNew = function(){};
|
||||
Function.prototype.alwaysReturned = function(){};
|
||||
Function.prototype.alwaysThrew = function(){};
|
||||
Function.prototype.args;
|
||||
Function.prototype.arguments;
|
||||
Function.prototype.behaviors;
|
||||
Function.prototype.callArg = function(){};
|
||||
Function.prototype.callArgOn = function(){};
|
||||
Function.prototype.callArgOnWith = function(){};
|
||||
Function.prototype.callArgWith = function(){};
|
||||
Function.prototype.callCount;
|
||||
Function.prototype.callIds;
|
||||
Function.prototype.called;
|
||||
Function.prototype.calledAfter = function(){};
|
||||
Function.prototype.calledBefore = function(){};
|
||||
Function.prototype.calledOn = function(){};
|
||||
Function.prototype.calledOnce;
|
||||
Function.prototype.calledThrice;
|
||||
Function.prototype.calledTwice;
|
||||
Function.prototype.calledWith = function(){};
|
||||
Function.prototype.calledWithExactly = function(){};
|
||||
Function.prototype.calledWithMatch = function(){};
|
||||
Function.prototype.calledWithNew = function(){};
|
||||
Function.prototype.caller;
|
||||
Function.prototype.callsArg = function(){};
|
||||
Function.prototype.callsArgAsync = function(){};
|
||||
Function.prototype.callsArgOn = function(){};
|
||||
Function.prototype.callsArgOnAsync = function(){};
|
||||
Function.prototype.callsArgOnWith = function(){};
|
||||
Function.prototype.callsArgOnWithAsync = function(){};
|
||||
Function.prototype.callsArgWith = function(){};
|
||||
Function.prototype.callsArgWithAsync = function(){};
|
||||
Function.prototype.create = function(){};
|
||||
Function.prototype.defaultBehavior;
|
||||
Function.prototype.displayName;
|
||||
Function.prototype.exceptions;
|
||||
Function.prototype.firstCall;
|
||||
Function.prototype.formatters;
|
||||
Function.prototype.func;
|
||||
Function.prototype.getCall = function(){};
|
||||
Function.prototype.getCalls = function(){};
|
||||
Function.prototype.id;
|
||||
Function.prototype.invoke = function(){};
|
||||
Function.prototype.invokeCallback = function(){};
|
||||
Function.prototype.isPresent = function(){};
|
||||
Function.prototype.lastCall;
|
||||
Function.prototype.length;
|
||||
Function.prototype.matches = function(){};
|
||||
Function.prototype.name;
|
||||
Function.prototype.neverCalledWith = function(){};
|
||||
Function.prototype.neverCalledWithMatch = function(){};
|
||||
Function.prototype.notCalled;
|
||||
Function.prototype.onCall = function(){};
|
||||
Function.prototype.onFirstCall = function(){};
|
||||
Function.prototype.onSecondCall = function(){};
|
||||
Function.prototype.onThirdCall = function(){};
|
||||
Function.prototype.printf = function(){};
|
||||
Function.prototype.reset = function(){};
|
||||
Function.prototype.resetBehavior = function(){};
|
||||
Function.prototype.restore = function(){};
|
||||
Function.prototype.returnValues;
|
||||
Function.prototype.returned = function(){};
|
||||
Function.prototype.returns = function(){};
|
||||
Function.prototype.returnsArg = function(){};
|
||||
Function.prototype.returnsThis = function(){};
|
||||
Function.prototype.secondCall;
|
||||
Function.prototype.spyCall;
|
||||
Function.prototype.thirdCall;
|
||||
Function.prototype.thisValues;
|
||||
Function.prototype.threw = function(){};
|
||||
Function.prototype['throws'] = function(){};
|
||||
Function.prototype.throwsException = function(){};
|
||||
Function.prototype.toString = function(){};
|
||||
Function.prototype.withArgs = function(){};
|
||||
Function.prototype.yield = function(){};
|
||||
Function.prototype.yieldOn = function(){};
|
||||
Function.prototype.yieldTo = function(){};
|
||||
Function.prototype.yieldToOn = function(){};
|
||||
Function.prototype.yields = function(){};
|
||||
Function.prototype.yieldsAsync = function(){};
|
||||
Function.prototype.yieldsOn = function(){};
|
||||
Function.prototype.yieldsOnAsync = function(){};
|
||||
Function.prototype.yieldsTo = function(){};
|
||||
Function.prototype.yieldsToAsync = function(){};
|
||||
Function.prototype.yieldsToOn = function(){};
|
||||
Function.prototype.yieldsToOnAsync = function(){};
|
||||
@@ -27,6 +27,7 @@ test('should be able to access expected player API methods', function() {
|
||||
ok(player.textTracks, 'textTracks exists');
|
||||
ok(player.requestFullScreen, 'requestFullScreen exists');
|
||||
ok(player.cancelFullScreen, 'cancelFullScreen exists');
|
||||
ok(player.playbackRate, 'playbackRate exists');
|
||||
|
||||
// Unsupported Native HTML5 Methods
|
||||
// ok(player.canPlayType, 'canPlayType exists');
|
||||
@@ -83,6 +84,22 @@ test('should be able to access expected component API methods', function() {
|
||||
ok(comp.buildCSSClass, 'buildCSSClass exists');
|
||||
});
|
||||
|
||||
test('should be able to access expected MediaTech API methods', function() {
|
||||
var techProto = videojs.MediaTechController.prototype;
|
||||
var html5Proto = videojs.Html5.prototype;
|
||||
var flashProto = videojs.Flash.prototype;
|
||||
|
||||
ok(techProto.setPoster, 'setPoster should exist on the Media tech');
|
||||
ok(html5Proto.setPoster, 'setPoster should exist on the HTML5 tech');
|
||||
ok(flashProto.setPoster, 'setPoster should exist on the Flash tech');
|
||||
|
||||
ok(videojs.Html5.patchCanPlayType, 'patchCanPlayType should exist for HTML5');
|
||||
ok(videojs.Html5.unpatchCanPlayType, 'unpatchCanPlayType should exist for HTML5');
|
||||
|
||||
ok(videojs.Html5.canPlaySource, 'canPlaySource should exist for HTML5');
|
||||
ok(videojs.Flash.canPlaySource, 'canPlaySource should exist for Flash');
|
||||
});
|
||||
|
||||
test('should export ready api call to public', function() {
|
||||
var videoTag = PlayerTest.makeTag();
|
||||
|
||||
@@ -122,6 +139,7 @@ test('should export useful components to the public', function () {
|
||||
ok(videojs.Menu, 'Menu should be public');
|
||||
ok(videojs.MenuItem, 'MenuItem should be public');
|
||||
ok(videojs.MenuButton, 'MenuButton should be public');
|
||||
ok(videojs.PlaybackRateMenuButton, 'PlaybackRateMenuButton should be public');
|
||||
|
||||
ok(videojs.util, 'util namespace should be public');
|
||||
ok(videojs.util.mergeOptions, 'mergeOptions should be public');
|
||||
|
||||
@@ -26,7 +26,7 @@ test('should add a child component', function(){
|
||||
ok(comp.getChildById(child.id()) === child);
|
||||
});
|
||||
|
||||
test('should init child coponents from options', function(){
|
||||
test('should init child components from options', function(){
|
||||
var comp = new vjs.Component(getFakePlayer(), {
|
||||
children: {
|
||||
'component': true
|
||||
@@ -37,6 +37,32 @@ test('should init child coponents from options', function(){
|
||||
ok(comp.el().childNodes.length === 1);
|
||||
});
|
||||
|
||||
test('should init child components from simple children array', function(){
|
||||
var comp = new vjs.Component(getFakePlayer(), {
|
||||
children: [
|
||||
'component',
|
||||
'component',
|
||||
'component'
|
||||
]
|
||||
});
|
||||
|
||||
ok(comp.children().length === 3);
|
||||
ok(comp.el().childNodes.length === 3);
|
||||
});
|
||||
|
||||
test('should init child components from children array of objects', function(){
|
||||
var comp = new vjs.Component(getFakePlayer(), {
|
||||
children: [
|
||||
{ 'name': 'component' },
|
||||
{ 'name': 'component' },
|
||||
{ 'name': 'component' }
|
||||
]
|
||||
});
|
||||
|
||||
ok(comp.children().length === 3);
|
||||
ok(comp.el().childNodes.length === 3);
|
||||
});
|
||||
|
||||
test('should do a deep merge of child options', function(){
|
||||
// Create a default option for component
|
||||
vjs.Component.prototype.options_ = {
|
||||
@@ -229,7 +255,7 @@ test('should use a defined content el for appending children', function(){
|
||||
});
|
||||
|
||||
test('should emit a tap event', function(){
|
||||
expect(1);
|
||||
expect(2);
|
||||
|
||||
// Fake touch support. Real touch support isn't needed for this test.
|
||||
var origTouch = vjs.TOUCH_ENABLED;
|
||||
@@ -241,13 +267,27 @@ test('should emit a tap event', function(){
|
||||
comp.on('tap', function(){
|
||||
ok(true, 'Tap event emitted');
|
||||
});
|
||||
comp.trigger('touchstart');
|
||||
|
||||
// A touchstart followed by touchend should trigger a tap
|
||||
vjs.trigger(comp.el(), {type: 'touchstart', touches: [{}]});
|
||||
comp.trigger('touchend');
|
||||
|
||||
// This second test should not trigger another tap event because
|
||||
// a touchmove is happening
|
||||
comp.trigger('touchstart');
|
||||
comp.trigger('touchmove');
|
||||
// A touchmove with a lot of movement should not trigger a tap
|
||||
vjs.trigger(comp.el(), {type: 'touchstart', touches: [
|
||||
{ pageX: 0, pageY: 0 }
|
||||
]});
|
||||
vjs.trigger(comp.el(), {type: 'touchmove', touches: [
|
||||
{ pageX: 100, pageY: 100 }
|
||||
]});
|
||||
comp.trigger('touchend');
|
||||
|
||||
// A touchmove with not much movement should still allow a tap
|
||||
vjs.trigger(comp.el(), {type: 'touchstart', touches: [
|
||||
{ pageX: 0, pageY: 0 }
|
||||
]});
|
||||
vjs.trigger(comp.el(), {type: 'touchmove', touches: [
|
||||
{ pageX: 10, pageY: 10 }
|
||||
]});
|
||||
comp.trigger('touchend');
|
||||
|
||||
// Reset to orignial value
|
||||
|
||||
externo
+9
@@ -103,3 +103,12 @@ test('calculateDistance should use changedTouches, if available', function() {
|
||||
|
||||
equal(slider.calculateDistance(event), 0.5, 'we should have touched exactly in the center, so, the ratio should be half');
|
||||
});
|
||||
|
||||
test('should hide playback rate control if it\'s not supported', function(){
|
||||
expect(1);
|
||||
|
||||
var player = PlayerTest.makePlayer();
|
||||
var playbackRate = new vjs.PlaybackRateMenuButton(player);
|
||||
|
||||
ok(playbackRate.el().className.indexOf('vjs-hidden') >= 0, 'playbackRate is not hidden');
|
||||
});
|
||||
|
||||
@@ -114,3 +114,20 @@ test('should bubble up DOM unless bubbles == false', function(){
|
||||
});
|
||||
vjs.trigger(inner, { type:'nobub', target:inner, bubbles:false });
|
||||
});
|
||||
|
||||
test('should have a defaultPrevented property on an event that was prevent from doing default action', function() {
|
||||
expect(2);
|
||||
|
||||
var el = document.createElement('div');
|
||||
|
||||
vjs.on(el, 'test', function(e){
|
||||
ok(true, 'First listener fired');
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
vjs.on(el, 'test', function(e){
|
||||
ok(e.defaultPrevented, 'Should have `defaultPrevented` to signify preventDefault being called');
|
||||
});
|
||||
|
||||
vjs.trigger(el, 'test');
|
||||
});
|
||||
|
||||
@@ -243,6 +243,16 @@ test('should get an absolute URL', function(){
|
||||
ok(vjs.getAbsoluteURL('https://asdf.com/index.html') === 'https://asdf.com/index.html');
|
||||
});
|
||||
|
||||
test('should parse the details of a url correctly', function(){
|
||||
equal(vjs.parseUrl('#').protocol, window.location.protocol, 'parsed relative url protocol');
|
||||
equal(vjs.parseUrl('#').host, window.location.host, 'parsed relative url host');
|
||||
|
||||
equal(vjs.parseUrl('http://example.com').protocol, 'http:', 'parsed example url protocol');
|
||||
equal(vjs.parseUrl('http://example.com').hostname, 'example.com', 'parsed example url hostname');
|
||||
|
||||
equal(vjs.parseUrl('http://example.com:1234').port, '1234', 'parsed example url port');
|
||||
});
|
||||
|
||||
test('vjs.findPosition should find top and left position', function() {
|
||||
var d = document.createElement('div'),
|
||||
position = vjs.findPosition(d);
|
||||
@@ -260,3 +270,57 @@ test('vjs.findPosition should find top and left position', function() {
|
||||
position = vjs.findPosition(d);
|
||||
deepEqual(position, {left: 0, top: 0}, 'If there is no gBCR, we should get zeros');
|
||||
});
|
||||
|
||||
// LOG TESTS
|
||||
test('should confirm logging functions work', function() {
|
||||
var console = window['console'];
|
||||
var origLog = console.log;
|
||||
var origWarn = console.warn;
|
||||
var origError = console.error;
|
||||
|
||||
// in ie8 console.log is apparently not a 'function' so sinon chokes on it
|
||||
// https://github.com/cjohansen/Sinon.JS/issues/386
|
||||
// instead we'll temporarily replace them with functions
|
||||
if (typeof origLog === 'object') {
|
||||
console.log = function(){};
|
||||
console.warn = function(){};
|
||||
console.error = function(){};
|
||||
}
|
||||
|
||||
// stub the global log functions
|
||||
var log = sinon.stub(console, 'log');
|
||||
var error = sinon.stub(console, 'error');
|
||||
var warn = sinon.stub(console, 'warn');
|
||||
|
||||
vjs.log('asdf', 'fdsa');
|
||||
ok(log.called, 'log was called');
|
||||
equal(log.firstCall.args[0], 'VIDEOJS:');
|
||||
equal(log.firstCall.args[1], 'asdf');
|
||||
equal(log.firstCall.args[2], 'fdsa');
|
||||
|
||||
vjs.log.warn('asdf', 'fdsa');
|
||||
ok(warn.called, 'warn was called');
|
||||
equal(warn.firstCall.args[0], 'VIDEOJS:');
|
||||
equal(warn.firstCall.args[1], 'WARN:');
|
||||
equal(warn.firstCall.args[2], 'asdf');
|
||||
equal(warn.firstCall.args[3], 'fdsa');
|
||||
|
||||
vjs.log.error('asdf', 'fdsa');
|
||||
ok(error.called, 'error was called');
|
||||
equal(error.firstCall.args[0], 'VIDEOJS:');
|
||||
equal(error.firstCall.args[1], 'ERROR:');
|
||||
equal(error.firstCall.args[2], 'asdf');
|
||||
equal(error.firstCall.args[3], 'fdsa');
|
||||
|
||||
// tear down sinon
|
||||
log.restore();
|
||||
error.restore();
|
||||
warn.restore();
|
||||
|
||||
// restore ie8
|
||||
if (typeof origLog === 'object') {
|
||||
console.log = origLog;
|
||||
console.warn = origWarn;
|
||||
console.error = origError;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -38,3 +38,84 @@ test('should re-link the player if the tech is moved', function(){
|
||||
|
||||
strictEqual(player, tech.el()['player']);
|
||||
});
|
||||
|
||||
test('patchCanPlayType patches canplaytype with our function, conditionally', function() {
|
||||
// the patch runs automatically so we need to first unpatch
|
||||
vjs.Html5.unpatchCanPlayType();
|
||||
|
||||
var oldAV = vjs.ANDROID_VERSION,
|
||||
video = document.createElement('video'),
|
||||
canPlayType = vjs.TEST_VID.constructor.prototype.canPlayType,
|
||||
patchedCanPlayType,
|
||||
unpatchedCanPlayType;
|
||||
|
||||
vjs.ANDROID_VERSION = 4.0;
|
||||
vjs.Html5.patchCanPlayType();
|
||||
|
||||
notStrictEqual(video.canPlayType, canPlayType, 'original canPlayType and patched canPlayType should not be equal');
|
||||
|
||||
patchedCanPlayType = video.canPlayType;
|
||||
unpatchedCanPlayType = vjs.Html5.unpatchCanPlayType();
|
||||
|
||||
strictEqual(canPlayType, vjs.TEST_VID.constructor.prototype.canPlayType, 'original canPlayType and unpatched canPlayType should be equal');
|
||||
strictEqual(patchedCanPlayType, unpatchedCanPlayType, 'patched canPlayType and function returned from unpatch are equal');
|
||||
|
||||
vjs.ANDROID_VERSION = oldAV;
|
||||
vjs.Html5.unpatchCanPlayType();
|
||||
});
|
||||
|
||||
test('should return maybe for HLS urls on Android 4.0 or above', function() {
|
||||
var oldAV = vjs.ANDROID_VERSION,
|
||||
video = document.createElement('video');
|
||||
|
||||
vjs.ANDROID_VERSION = 4.0;
|
||||
vjs.Html5.patchCanPlayType();
|
||||
|
||||
strictEqual(video.canPlayType('application/x-mpegurl'), 'maybe', 'android version 4.0 or above should be a maybe for x-mpegurl');
|
||||
strictEqual(video.canPlayType('application/x-mpegURL'), 'maybe', 'android version 4.0 or above should be a maybe for x-mpegURL');
|
||||
strictEqual(video.canPlayType('application/vnd.apple.mpegurl'), 'maybe', 'android version 4.0 or above should be a maybe for vnd.apple.mpegurl');
|
||||
strictEqual(video.canPlayType('application/vnd.apple.mpegURL'), 'maybe', 'android version 4.0 or above should be a maybe for vnd.apple.mpegurl');
|
||||
|
||||
vjs.ANDROID_VERSION = oldAV;
|
||||
vjs.Html5.unpatchCanPlayType();
|
||||
});
|
||||
|
||||
test('should return a maybe for mp4 on OLD ANDROID', function() {
|
||||
var isOldAndroid = vjs.IS_OLD_ANDROID,
|
||||
video = document.createElement('video');
|
||||
|
||||
vjs.IS_OLD_ANDROID = true;
|
||||
vjs.Html5.patchCanPlayType();
|
||||
|
||||
strictEqual(video.canPlayType('video/mp4'), 'maybe', 'old android should return a maybe for video/mp4');
|
||||
|
||||
vjs.IS_OLD_ANDROID = isOldAndroid;
|
||||
vjs.Html5.unpatchCanPlayType();
|
||||
});
|
||||
|
||||
test('test playbackRate', function() {
|
||||
var el, player, playbackRate, tech;
|
||||
|
||||
el = document.createElement('div');
|
||||
el.innerHTML = '<div />';
|
||||
|
||||
player = {
|
||||
id: function(){ return 'id'; },
|
||||
el: function(){ return el; },
|
||||
options_: {},
|
||||
options: function(){ return {}; },
|
||||
controls: function(){ return false; },
|
||||
usingNativeControls: function(){ return false; },
|
||||
on: function(){ return this; },
|
||||
ready: function(){}
|
||||
};
|
||||
|
||||
tech = new vjs.Html5(player, {});
|
||||
tech.createEl();
|
||||
|
||||
tech.el_.playbackRate = 1.25;
|
||||
strictEqual(tech.playbackRate(), 1.25);
|
||||
|
||||
tech['setPlaybackRate'](0.75);
|
||||
strictEqual(tech.playbackRate(), 0.75);
|
||||
});
|
||||
|
||||
@@ -36,6 +36,7 @@ vjs.MediaFaker.prototype['setPoster'] = function(val){ this.el().poster = val; }
|
||||
|
||||
vjs.MediaFaker.prototype.currentTime = function(){ return 0; };
|
||||
vjs.MediaFaker.prototype.seeking = function(){ return false; };
|
||||
vjs.MediaFaker.prototype.src = function(){ return 'movie.mp4'; };
|
||||
vjs.MediaFaker.prototype.volume = function(){ return 0; };
|
||||
vjs.MediaFaker.prototype.muted = function(){ return false; };
|
||||
vjs.MediaFaker.prototype.pause = function(){ return false; };
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
module('MenuButton');
|
||||
|
||||
test('should place title list item into ul', function() {
|
||||
var player, menuButton;
|
||||
|
||||
player = PlayerTest.makePlayer();
|
||||
|
||||
menuButton = new vjs.MenuButton(player, {
|
||||
'title': 'testTitle'
|
||||
});
|
||||
|
||||
var menuContentElement = menuButton.el().getElementsByTagName('UL')[0];
|
||||
var titleElement = menuContentElement.children[0];
|
||||
|
||||
ok(titleElement.innerHTML === 'TestTitle', 'title element placed in ul');
|
||||
|
||||
player.dispose();
|
||||
});
|
||||
+103
-21
@@ -77,19 +77,19 @@ test('should get tag, source, and track settings', function(){
|
||||
|
||||
var fixture = document.getElementById('qunit-fixture');
|
||||
|
||||
var html = '<video id="example_1" class="video-js" autoplay preload="metadata">';
|
||||
var html = '<video id="example_1" class="video-js" autoplay preload="none">';
|
||||
html += '<source src="http://google.com" type="video/mp4">';
|
||||
html += '<source src="http://google.com" type="video/webm">';
|
||||
html += '<track src="http://google.com" kind="captions" default>';
|
||||
html += '<track src="http://google.com" kind="captions" attrtest>';
|
||||
html += '</video>';
|
||||
|
||||
fixture.innerHTML += html;
|
||||
|
||||
var tag = document.getElementById('example_1');
|
||||
var player = new vjs.Player(tag);
|
||||
var player = PlayerTest.makePlayer({}, tag);
|
||||
|
||||
ok(player.options_['autoplay'] === true);
|
||||
ok(player.options_['preload'] === 'metadata'); // No extern. Use string.
|
||||
ok(player.options_['preload'] === 'none'); // No extern. Use string.
|
||||
ok(player.options_['id'] === 'example_1');
|
||||
ok(player.options_['sources'].length === 2);
|
||||
ok(player.options_['sources'][0].src === 'http://google.com');
|
||||
@@ -97,7 +97,7 @@ test('should get tag, source, and track settings', function(){
|
||||
ok(player.options_['sources'][1].type === 'video/webm');
|
||||
ok(player.options_['tracks'].length === 1);
|
||||
ok(player.options_['tracks'][0]['kind'] === 'captions'); // No extern
|
||||
ok(player.options_['tracks'][0]['default'] === true);
|
||||
ok(player.options_['tracks'][0]['attrtest'] === '');
|
||||
|
||||
ok(player.el().className.indexOf('video-js') !== -1, 'transferred class from tag to player div');
|
||||
ok(player.el().id === 'example_1', 'transferred id from tag to player div');
|
||||
@@ -335,27 +335,27 @@ test('should allow for tracking when native controls are used', function(){
|
||||
player.dispose();
|
||||
});
|
||||
|
||||
test('should use custom message when encountering an unsupported video type',
|
||||
function() {
|
||||
videojs.options['notSupportedMessage'] = 'Video no go <a href="">link</a>';
|
||||
var fixture = document.getElementById('qunit-fixture');
|
||||
// test('should use custom message when encountering an unsupported video type',
|
||||
// function() {
|
||||
// videojs.options['notSupportedMessage'] = 'Video no go <a href="">link</a>';
|
||||
// var fixture = document.getElementById('qunit-fixture');
|
||||
|
||||
var html =
|
||||
'<video id="example_1">' +
|
||||
'<source src="fake.foo" type="video/foo">' +
|
||||
'</video>';
|
||||
// var html =
|
||||
// '<video id="example_1">' +
|
||||
// '<source src="fake.foo" type="video/foo">' +
|
||||
// '</video>';
|
||||
|
||||
fixture.innerHTML += html;
|
||||
// fixture.innerHTML += html;
|
||||
|
||||
var tag = document.getElementById('example_1');
|
||||
var player = new vjs.Player(tag);
|
||||
// var tag = document.getElementById('example_1');
|
||||
// var player = new vjs.Player(tag);
|
||||
|
||||
var incompatibilityMessage = player.el().getElementsByTagName('p')[0];
|
||||
// ie8 capitalizes tag names
|
||||
equal(incompatibilityMessage.innerHTML.toLowerCase(), 'video no go <a href="">link</a>');
|
||||
// var incompatibilityMessage = player.el().getElementsByTagName('p')[0];
|
||||
// // ie8 capitalizes tag names
|
||||
// equal(incompatibilityMessage.innerHTML.toLowerCase(), 'video no go <a href="">link</a>');
|
||||
|
||||
player.dispose();
|
||||
});
|
||||
// player.dispose();
|
||||
// });
|
||||
|
||||
test('should register players with generated ids', function(){
|
||||
var fixture, video, player, id;
|
||||
@@ -371,3 +371,85 @@ test('should register players with generated ids', function(){
|
||||
equal(player.el().id, player.id(), 'the player and element ids are equal');
|
||||
ok(vjs.players[id], 'the generated id is registered');
|
||||
});
|
||||
|
||||
test('should not add multiple first play events despite subsequent loads', function() {
|
||||
expect(1);
|
||||
|
||||
var player = PlayerTest.makePlayer({});
|
||||
|
||||
player.on('firstplay', function(){
|
||||
ok('First play should fire once.');
|
||||
});
|
||||
|
||||
// Checking to make sure onLoadStart removes first play listener before adding a new one.
|
||||
player.trigger('loadstart');
|
||||
player.trigger('loadstart');
|
||||
player.trigger('play');
|
||||
});
|
||||
|
||||
test('should remove vjs-has-started class', function(){
|
||||
expect(3);
|
||||
|
||||
var player = PlayerTest.makePlayer({});
|
||||
|
||||
player.trigger('loadstart');
|
||||
player.trigger('play');
|
||||
ok(player.el().className.indexOf('vjs-has-started') !== -1, 'vjs-has-started class added');
|
||||
|
||||
player.trigger('loadstart');
|
||||
ok(player.el().className.indexOf('vjs-has-started') === -1, 'vjs-has-started class removed');
|
||||
|
||||
player.trigger('play');
|
||||
ok(player.el().className.indexOf('vjs-has-started') !== -1, 'vjs-has-started class added again');
|
||||
});
|
||||
|
||||
test('player should handle different error types', function(){
|
||||
expect(8);
|
||||
var player = PlayerTest.makePlayer({});
|
||||
var testMsg = 'test message';
|
||||
|
||||
// prevent error log messages in the console
|
||||
sinon.stub(vjs.log, 'error');
|
||||
|
||||
// error code supplied
|
||||
function errCode(){
|
||||
equal(player.error().code, 1, 'error code is correct');
|
||||
}
|
||||
player.on('error', errCode);
|
||||
player.error(1);
|
||||
player.off('error', errCode);
|
||||
|
||||
// error instance supplied
|
||||
function errInst(){
|
||||
equal(player.error().code, 2, 'MediaError code is correct');
|
||||
equal(player.error().message, testMsg, 'MediaError message is correct');
|
||||
}
|
||||
player.on('error', errInst);
|
||||
player.error(new vjs.MediaError({ code: 2, message: testMsg }));
|
||||
player.off('error', errInst);
|
||||
|
||||
// error message supplied
|
||||
function errMsg(){
|
||||
equal(player.error().code, 0, 'error message code is correct');
|
||||
equal(player.error().message, testMsg, 'error message is correct');
|
||||
}
|
||||
player.on('error', errMsg);
|
||||
player.error(testMsg);
|
||||
player.off('error', errMsg);
|
||||
|
||||
// error config supplied
|
||||
function errConfig(){
|
||||
equal(player.error().code, 3, 'error config code is correct');
|
||||
equal(player.error().message, testMsg, 'error config message is correct');
|
||||
}
|
||||
player.on('error', errConfig);
|
||||
player.error({ code: 3, message: testMsg });
|
||||
player.off('error', errConfig);
|
||||
|
||||
// check for vjs-error classname
|
||||
ok(player.el().className.indexOf('vjs-error') >= 0, 'player does not have vjs-error classname');
|
||||
|
||||
// restore error logging
|
||||
vjs.log.error.restore();
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
module('Tracks');
|
||||
|
||||
test('should place title list item into ul', function() {
|
||||
var player, chaptersButton;
|
||||
|
||||
player = PlayerTest.makePlayer();
|
||||
|
||||
chaptersButton = new vjs.ChaptersButton(player);
|
||||
|
||||
var menuContentElement = chaptersButton.el().getElementsByTagName('UL')[0];
|
||||
var titleElement = menuContentElement.children[0];
|
||||
|
||||
ok(titleElement.innerHTML === 'Chapters', 'title element placed in ul');
|
||||
|
||||
player.dispose();
|
||||
});
|
||||
Referência em uma Nova Issue
Bloquear um usuário