diff --git a/.bunyipconfig.js.example b/.bunyipconfig.js.example
deleted file mode 100644
index 672db73107..0000000000
--- a/.bunyipconfig.js.example
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-Bunyip is a tool for multi-browser/device testing
- https://github.com/ryanseddon/bunyip
-It uses a few service under the hood including:
- Browsertack - http://browserstack.com
- Pagekite https://pagekite.net
-You'll need accounts at both to use bunyip
-You'll also need to download and install pagekite.py
-*/
-var config = {
- "browserstack": {
- "username": "your-browserstack-email@example.com",
- "password": "your browserstack password",
- "timeout": 300
- },
- "port": 9000,
- "tunnellink": "your-subdomain.pagekite.me",
- "tunnel": "pagekite.py your-subdomain.pagekite.me"
-};
-
-module.exports = config;
diff --git a/.gitignore b/.gitignore
index def61f8e96..16cb8952b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,9 +15,6 @@ npm-debug.log
sandbox/*
!sandbox/*.example
-# ignore any Karma conf.js files in the test/ directory
-test/*.conf.js
-
*.swp
*.swo
diff --git a/.jshintrc b/.jshintrc
index 874627e730..007cd48f4d 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -22,6 +22,7 @@
"define",
"module",
"exports",
+ "process",
"PlayerTest",
"asyncTest",
@@ -38,6 +39,7 @@
"start",
"stop",
"strictEqual",
- "test"
+ "test",
+ "sinon"
]
}
diff --git a/.travis.yml b/.travis.yml
index c2ba3f90b8..0890b1c10e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,3 +1,14 @@
language: node_js
node_js:
- - 0.8
\ No newline at end of file
+- 0.10
+before_script:
+- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then curl https://gist.githubusercontent.com/santiycr/5139565/raw/sauce_connect_setup.sh | bash; fi
+notifications:
+ irc:
+ channels:
+ - "chat.freenode.net#videojs"
+ use_notice: true
+env:
+ global:
+ - secure: K6JpKwMkfNaJix3Bb0tLjVMzHMJgtBXdd/dvfw1BMb9DCBpd81PqXbDs7yXCddUxnUPTBPxZCrQgWsw71Wn+qEoIG5MU3uOT5A2rBbx/yZonVAGv5ed/9w0xk0OzO383CmPMFqwqtp9YmdmqGjQBkYXVXJjTvNTOAExFSdhO+3U=
+ - secure: GIbhjUJapvC70nIZVlhVyK+3KAD2TVKpiY/q412OO7V2izbvcM1tvU3LBoMZbROzrt5TT84tCoJDvHnrpL0OvxPwrzL5CUU7h4UTxhTOyQkEinbYAnWlW9wdrvtdczsEvANkFPqBZ53B3hVHZHMLOG8QRWaTBicF68vSHEJFqb4=
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 55f2319b48..008d1adc86 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,24 @@ 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)]
+* Fixed an issue with the loadstart event order that caused the big play button to not hide [[view](https://github.com/videojs/video.js/pull/1209)]
--------------------
diff --git a/Gruntfile.js b/Gruntfile.js
index 8be864b609..6ebfa895b5 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -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'
}
},
@@ -135,16 +135,97 @@ module.exports = function(grunt) {
}
},
karma: {
+ // this config file applies to all following configs except if overwritten
options: {
configFile: 'test/karma.conf.js'
},
+
+ // this only runs on PRs from the mainrepo on saucelabs
+ saucelabs: {
+ browsers: ['chrome_sl', 'ipad_sl']
+ },
+
+ // these are run locally on local browsers
dev: {
- configFile: 'test/karma.conf.js',
- autoWatch: true
+ browsers: ['Chrome', 'Firefox', 'Safari']
+ },
+ chromecanary: {
+ browsers: ['ChromeCanary']
+ },
+ chrome: {
+ browsers: ['Chrome']
+ },
+ firefox: {
+ browsers: ['Firefox']
+ },
+ safari: {
+ browsers: ['Safari']
+ },
+ ie: {
+ browsers: ['IE']
+ },
+ phantomjs: {
+ browsers: ['PhantomJS']
+ },
+
+ // This is all the minified tests run locally on local browsers
+ minified_dev: {
+ browsers: ['Chrome', 'Firefox', 'Safari'],
+ configFile: 'test/karma.minified.conf.js'
+ },
+ minified_chromecanary: {
+ browsers: ['ChromeCanary'],
+ configFile: 'test/karma.minified.conf.js'
+ },
+ minified_chrome: {
+ browsers: ['Chrome'],
+ configFile: 'test/karma.minified.conf.js'
+ },
+ minified_firefox: {
+ browsers: ['Firefox'],
+ configFile: 'test/karma.minified.conf.js'
+ },
+ minified_safari: {
+ browsers: ['Safari'],
+ configFile: 'test/karma.minified.conf.js'
+ },
+ minified_ie: {
+ browsers: ['IE'],
+ configFile: 'test/karma.minified.conf.js'
+ },
+ minified_phantomjs: {
+ browsers: ['PhantomJS'],
+ configFile: 'test/karma.minified.conf.js'
+ },
+
+ // This is all the minified api tests run locally on local browsers
+ minified_api_dev: {
+ browsers: ['Chrome', 'Firefox', 'Safari'],
+ configFile: 'test/karma.minified.api.conf.js'
},
- ci: {
- configFile: 'test/karma.conf.js',
- autoWatch: false
+ minified_api_chromecanary: {
+ browsers: ['ChromeCanary'],
+ configFile: 'test/karma.minified.api.conf.js'
+ },
+ minified_api_chrome: {
+ browsers: ['Chrome'],
+ configFile: 'test/karma.minified.api.conf.js'
+ },
+ minified_api_firefox: {
+ browsers: ['Firefox'],
+ configFile: 'test/karma.minified.api.conf.js'
+ },
+ minified_api_safari: {
+ browsers: ['Safari'],
+ configFile: 'test/karma.minified.api.conf.js'
+ },
+ minified_api_ie: {
+ browsers: ['IE'],
+ configFile: 'test/karma.minified.api.conf.js'
+ },
+ minified_api_phantomjs: {
+ browsers: ['PhantomJS'],
+ configFile: 'test/karma.minified.api.conf.js'
}
},
vjsdocs: {
@@ -231,11 +312,66 @@ module.exports = function(grunt) {
// grunt.loadTasks('./docs/tasks/');
// grunt.loadTasks('../videojs-doc-generator/tasks/');
+ grunt.registerTask('pretask', ['jshint', 'less', 'build', 'minify', 'usebanner']);
// Default task.
- grunt.registerTask('default', ['jshint', 'less', 'build', 'minify', 'usebanner', 'dist']);
+ grunt.registerTask('default', ['pretask', 'dist']);
// Development watch task
grunt.registerTask('dev', ['jshint', 'less', 'build', 'qunit:source']);
- grunt.registerTask('test', ['jshint', 'less', 'build', 'minify', 'usebanner', 'qunit']);
+ grunt.registerTask('test-qunit', ['pretask', 'qunit']);
+
+ // The test task will run `karma:saucelabs` when running in travis,
+ // when running via a PR from a fork, it'll run qunit tests in phantom using
+ // karma otherwise, it'll run the tests in chrome via karma
+ // You can specify which browsers to build with by using grunt-style arguments
+ // or separating them with a comma:
+ // grunt test:chrome:firefox # grunt-style
+ // grunt test:chrome,firefox # comma-separated
+ grunt.registerTask('test', function() {
+ var tasks = this.args,
+ tasksMinified,
+ tasksMinifiedApi;
+
+ grunt.task.run(['pretask']);
+
+ if (process.env.TRAVIS_PULL_REQUEST) {
+ grunt.task.run(['karma:phantomjs', 'karma:minified_phantomjs', 'karma:minified_api_phantomjs']);
+ } else if (process.env.TRAVIS) {
+ grunt.task.run(['karma:saucelabs']);
+ } else {
+ // if we aren't running this in a CI, but running it manually, we can
+ // supply arguments to this task. These arguments are either colon (`:`)
+ // separated which is the default grunt separator for arguments, or they
+ // are comma (`,`) separated to make it easier.
+ // The arguments are the names of which browsers you want. It'll then
+ // make sure you have the `minified` and `minified_api` for those browsers
+ // as well.
+ if (tasks.length === 0) {
+ tasks.push('chrome');
+ }
+ if (tasks.length === 1) {
+ tasks = tasks[0].split(',');
+ }
+
+ tasksMinified = tasks.slice();
+ tasksMinifiedApi = tasks.slice();
+
+ tasksMinified = tasksMinified.map(function(task) {
+ return 'minified_' + task;
+ });
+
+ tasksMinifiedApi = tasksMinifiedApi.map(function(task) {
+ return 'minified_api_' + task;
+ });
+
+ tasks = tasks.concat(tasksMinified).concat(tasksMinifiedApi);
+ tasks = tasks.map(function(task) {
+ return 'karma:' + task;
+ });
+
+
+ grunt.task.run(tasks);
+ }
+ });
var fs = require('fs'),
gzip = require('zlib').gzip;
diff --git a/browsers.json b/browsers.json
deleted file mode 100644
index 9bc75f98c0..0000000000
--- a/browsers.json
+++ /dev/null
@@ -1,37 +0,0 @@
-[
- {
- "os": "win",
- "browser": "chrome",
- "version": "27.0"
- },
- {
- "os": "win",
- "browser": "firefox",
- "version": "20.0"
- },
- {
- "os": "win",
- "browser": "ie",
- "version": "9.0"
- },
- {
- "os": "win",
- "browser": "ie",
- "version": "10.0"
- },
- {
- "os": "ios",
- "device": "iPhone 5",
- "version": "6.0"
- },
- {
- "os": "ios",
- "device": "iPad 3rd (6.0)",
- "version": "6.0"
- },
- {
- "os": "android",
- "device": "Samsung Galaxy Tab 2 10.1",
- "version": "4.0"
- }
-]
diff --git a/build/demo-files/demo.html b/build/demo-files/demo.html
index b2b3fa44d6..8093718565 100644
--- a/build/demo-files/demo.html
+++ b/build/demo-files/demo.html
@@ -25,6 +25,7 @@
+ To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video
-
-
-
-
diff --git a/build/source-loader.js b/build/source-loader.js
index a1890929bb..84ee8cdff5 100644
--- a/build/source-loader.js
+++ b/build/source-loader.js
@@ -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",
diff --git a/dist/video-js/demo.captions.vtt b/dist/video-js/demo.captions.vtt
deleted file mode 100644
index e598be1982..0000000000
--- a/dist/video-js/demo.captions.vtt
+++ /dev/null
@@ -1,41 +0,0 @@
-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 ]
\ No newline at end of file
diff --git a/dist/video-js/demo.html b/dist/video-js/demo.html
deleted file mode 100644
index b2b3fa44d6..0000000000
--- a/dist/video-js/demo.html
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-