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 @@ - - - - Video.js | HTML5 Video Player - - - - - - - - - - - - - - - - - diff --git a/dist/video-js/font/.DS_Store b/dist/video-js/font/.DS_Store deleted file mode 100644 index 5008ddfcf5..0000000000 Binary files a/dist/video-js/font/.DS_Store and /dev/null differ diff --git a/dist/video-js/font/vjs.eot b/dist/video-js/font/vjs.eot deleted file mode 100644 index a075c19f0b..0000000000 Binary files a/dist/video-js/font/vjs.eot and /dev/null differ diff --git a/dist/video-js/font/vjs.svg b/dist/video-js/font/vjs.svg deleted file mode 100644 index f1af0e53b5..0000000000 --- a/dist/video-js/font/vjs.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - -This is a custom SVG font generated by IcoMoon. - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/dist/video-js/font/vjs.ttf b/dist/video-js/font/vjs.ttf deleted file mode 100644 index eb24637918..0000000000 Binary files a/dist/video-js/font/vjs.ttf and /dev/null differ diff --git a/dist/video-js/font/vjs.woff b/dist/video-js/font/vjs.woff deleted file mode 100644 index c3f0f1d807..0000000000 Binary files a/dist/video-js/font/vjs.woff and /dev/null differ diff --git a/dist/video-js/video-js.css b/dist/video-js/video-js.css deleted file mode 100644 index 3c19276f2f..0000000000 --- a/dist/video-js/video-js.css +++ /dev/null @@ -1,770 +0,0 @@ -/*! -Video.js Default Styles (http://videojs.com) -Version 4.5.2 -Create your own skin at http://designer.videojs.com -*/ -/* SKIN -================================================================================ -The main class name for all skin-specific styles. To make your own skin, -replace all occurances of 'vjs-default-skin' with a new name. Then add your new -skin name to your video tag instead of the default skin. -e.g.