From e7c146bc1fc472f1d2f08c6ac79e224d0387178d Mon Sep 17 00:00:00 2001 From: Steve Heffernan Date: Fri, 11 Jan 2013 23:02:20 -0800 Subject: [PATCH] Reorgnizing src files. Moving to grunt for build. --- .gitignore | 2 + .jshintrc | 5 +- Gruntfile.js | 148 ++ design/Icon Design.png | Bin 86601 -> 0 bytes design/loading.gif | Bin 3571 -> 0 bytes design/skin.old.css | 190 -- dev.html.example | 52 - package.json | 49 +- sandbox/index.html.example | 53 + {design => src/css}/video-js.css | 0 src/css/video-js.fw.png | Bin 0 -> 78899 bytes {design => src/css}/video-js.png | Bin src/{ => js}/component.js | 0 src/{ => js}/controls.js | 0 src/{ => js}/core.js | 0 src/{ => js}/events.js | 0 src/{ => js}/exports.js | 0 src/{ => js}/goog.base.js | 0 src/{ => js}/json.js | 0 src/{ => js}/lib.js | 0 src/{ => js}/media.flash.externs.js | 0 src/{ => js}/media.flash.js | 0 src/{ => js}/media.html5.js | 0 src/{ => js}/media.js | 0 src/{ => js}/player.js | 0 src/{ => js}/setup.js | 0 src/{ => js}/tracks.js | 0 {tech/flash => src/swf}/video-js.swf | Bin tech/flash/swfobject.js | 4 - tech/vimeo/vimeo.js | 603 ------- tech/youtube/youtube.html | 39 - tech/youtube/youtube.js | 369 ---- test/{unit => }/phantom-logging.js | 9 +- test/unit.html | 28 +- test/unit.js | 646 +++++++ test/video.compiled.js | 2111 ++--------------------- test/video.test.compiled.js | 2385 -------------------------- 37 files changed, 999 insertions(+), 5694 deletions(-) create mode 100644 Gruntfile.js delete mode 100644 design/Icon Design.png delete mode 100644 design/loading.gif delete mode 100644 design/skin.old.css delete mode 100644 dev.html.example create mode 100644 sandbox/index.html.example rename {design => src/css}/video-js.css (100%) create mode 100644 src/css/video-js.fw.png rename {design => src/css}/video-js.png (100%) rename src/{ => js}/component.js (100%) rename src/{ => js}/controls.js (100%) rename src/{ => js}/core.js (100%) rename src/{ => js}/events.js (100%) rename src/{ => js}/exports.js (100%) rename src/{ => js}/goog.base.js (100%) rename src/{ => js}/json.js (100%) rename src/{ => js}/lib.js (100%) rename src/{ => js}/media.flash.externs.js (100%) rename src/{ => js}/media.flash.js (100%) rename src/{ => js}/media.html5.js (100%) rename src/{ => js}/media.js (100%) rename src/{ => js}/player.js (100%) rename src/{ => js}/setup.js (100%) rename src/{ => js}/tracks.js (100%) rename {tech/flash => src/swf}/video-js.swf (100%) delete mode 100644 tech/flash/swfobject.js delete mode 100644 tech/vimeo/vimeo.js delete mode 100644 tech/youtube/youtube.html delete mode 100644 tech/youtube/youtube.js rename test/{unit => }/phantom-logging.js (71%) create mode 100644 test/unit.js delete mode 100644 test/video.test.compiled.js diff --git a/.gitignore b/.gitignore index 2b029badf0..eb5ce80503 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ test/*.map node_modules npm-debug.log +sandbox/* +!sandbox/*.example diff --git a/.jshintrc b/.jshintrc index 5acda60d6f..4835fca2bc 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,7 +1,4 @@ { - // Hopefully people are smart enough not to use eval - // But goog.base uses execScript so it throws an error. - // When compiled goog.base is stripped out completely. "evil" : true, "validthis": true, "browser" : true, @@ -14,7 +11,7 @@ "trailing" : true, "undef" : true, "laxbreak" : true, - "predef" : [ // Extra globals. + "predef" : [ "_V_", "videojs", "vjs", diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000000..e080af3d07 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,148 @@ +module.exports = function(grunt) { + + // Project configuration. + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + concat: { + dist: { + src: [ + 'src/js/goog.base.js', + 'src/js/core.js', + 'src/js/lib.js', + 'src/js/events.js', + 'src/js/component.js', + 'src/js/player.js', + 'src/js/media.js', + 'src/js/media.html5.js', + 'src/js/media.flash.js', + 'src/js/controls.js', + 'src/js/tracks.js', + 'src/js/setup.js', + 'src/js/json.js', + 'src/js/exports.js' + ], + dest: 'dist/video.js' + }, + test: { + src: [ + 'test/unit/phantom-logging.js', + 'test/unit/component.js', + 'test/unit/core.js', + 'test/unit/events.js', + 'test/unit/lib.js', + 'test/unit/media.html5.js', + 'test/unit/player.js', + 'test/unit/setup.js', + ], + dest: 'test/unit.js' + } + }, + // Current forEach issue: https://github.com/gruntjs/grunt/issues/610 + // npm install https://github.com/gruntjs/grunt-contrib-jshint/archive/7fd70e86c5a8d489095fa81589d95dccb8eb3a46.tar.gz + jshint: { + dist: { + src: ["dist/video.js"], + options: { + jshintrc: ".jshintrc" + } + } + }, + qunit: { + all: ['test/unit.html'] + }, + watch: { + files: [ "src/**/*.js" ], + tasks: "dev" + } + + }); + + // Default task. + // grunt.registerTask('default', 'lint:beforeconcat concat lint:afterconcat'); + // // Default task(s). + // grunt.registerTask('default', ['uglify']); + + grunt.loadNpmTasks("grunt-contrib-concat"); + grunt.loadNpmTasks("grunt-contrib-jshint"); + grunt.loadNpmTasks("grunt-contrib-qunit"); + grunt.loadNpmTasks("grunt-contrib-watch"); + + grunt.registerTask( "dev", [ "compile" ] ); // "build:*:*", "jshint" + // compiled += grunt.file.read( filepath ); + + var exec = require('child_process').exec, + fs = require('fs'), + gzip = require('zlib').gzip; + + grunt.registerMultiTask('build', 'Building Source', function(){ + grunt.log.writeln(this.target) + if (this.target === 'latest') { + var files = this.data.files; + var dist = ''; + + // for (prop in this.file) { + // grunt.log.writeln(prop + ":" + this.file[prop]) + // } + + files.forEach(function(file){ + dist += grunt.file.read('src/js/' + file) + }); + + grunt.file.write('dist/video.js', dist); + } else if (this.target === 'test') { + grunt.task.run('build:latest'); + } + + }); + + grunt.registerTask('compile', 'Minify JS files using Closure Compiler.', function() { + var done = this.async(); + + var command = 'java -jar build/compiler/compiler.jar'; + command += ' --compilation_level ADVANCED_OPTIMIZATIONS'; + + var files = [ + 'goog.base.js', + 'core.js', + 'lib.js', + 'events.js', + 'component.js', + 'player.js', + 'media.js', + 'media.html5.js', + 'media.flash.js', + 'controls.js', + 'tracks.js', + 'setup.js', + 'json.js', + 'exports.js' + ]; + + files.forEach(function(file){ + command += ' --js=src/js/'+file; + }); + + command += ' --externs src/js/media.flash.externs.js'; + // command += ' --formatting=pretty_print'; + command += ' --js_output_file=test/video.compiled.js'; + command += ' --create_source_map test/video.compiled.js.map --source_map_format=V3'; + // command += ' --externs test/qunit-externs.js'; + command += ' --output_wrapper "(function() {%output%})();//@ sourceMappingURL=video.compiled.js.map"'; + + exec(command, { maxBuffer: 500*1024 }, function(err, stdout, stderr){ + + if (err) { + grunt.warn(err); + done(false); + } + + if (stdout) { + grunt.log.writeln(stdout); + } + + grunt.log.writeln("done!") + done(); + }); + }); + +}; diff --git a/design/Icon Design.png b/design/Icon Design.png deleted file mode 100644 index ae1b79fe700aff2d25ccc8480f70c5b9b0b380ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86601 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 z 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 diff --git a/design/loading.gif b/design/loading.gif deleted file mode 100644 index 70b533298e5c3981aca6cad846aa5234cbffcfe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3571 zcmbuC=~t6y8i$jBY=SI-f`DLv6bm7lidwW_3o(Gn3nj8B6|9ItKwEZ42&f=fp$N3> z$QlS?k%T2IDkAE*fb2_HLMW?AmsF2%*g{qoB%DJdx#85!Bx*}1v791e%a;|T-QC?oLqlS*cxq~DdV2cl)2DNDbC{3%5Z+45 zD`3bN!oN2=(p;RW)=spYor>NO5IKfjR7;cyEI%db_Y^7uK`_}aP>F3*OahgVZoQRZ#Z zFfh%bD=RB?Dlu^w3{F}B=^94*`g$>p;St8z^f+yzi!A&6IT^RyzcPDZu2X(tL0T;7 z|9xV!+?#=|&sH7t_XaB9_&O@d`s$(c>Ut{oe#}&f$D5fj%YJRMakgYqjdfK{ey#p&z?OS6%~b|jgOB{ zN=iyiO-)Zv2edgkIRym;Wo2c2KEI}>2Bq83(9qJ-a_`=~`}gm+wY34=-rnBf;o;HI z(aFilnVFf7Mk_Pdx`xa@DQ5$+LxAj04M280fyRCn+D-7$%IyvA@(~0pwXnVp3cYFn zsHH4|6%vI+2SFDA>tkglArqUuUB`rJ5=nqH`!P0i!x7Znv#N=wTME3R|- z>D4vHb)4b`V+y~*rlufWNl~GKWU_-xSCH%KVv@+D0TR*;$jD=3?~(P*h-eet6wHE@ z6vaf`KTUtuC5@3<#B3d$9)C5VICIo4Fj^s8!jCph5p27QHM+?RQ6=W>i+LA|n7>&d zJp2J!QIf`}wcls{e|BGe^%ZEjfB$|vJG+Ai52ECKd=53gw1C4Yq40R+MU_>hf{dD4g0Q%x zkw6ht+SC?i$ZWz@5)BPX={Ov=2g@`zCJq`Q-Mu}?;P@azES8KDMaJ~0UJ98+TA~b! z=0x+)aeCx;%OsPR|0dpx|2mK(*{^BZ9`4QgDdyJMKgPIDS}F=c@5SxQ-h^1~ea9(! zFWIue@^_+$*#|&~_sp3yVPRox zHv9bf^C&%tDik$2IT1iZXekH>A^j9+8|y2x z*qRRV?MzDC08kqMhU}gP`J`;viAaY;-aOKZB;4}q?U_?Q;79HD{pdDYW9q^RK1RDB zgRt3QXX0c18Pc1)mEkBz zriKQqhNh#-BP%ao7_H)xFn5!5Z-k6H=9X#p9J>-MtNPB_i&NC9tkP-CwCm$TF#+BD zM3OR-?+>0{($5lnj zXJL%KOf(|ASlPbqwYV$Z5F4X!sf@{P68o-5$we%1NT_;GfKFYX)eifWcV@wVgCb zeq0(FFYS`-{M6r6sF&(SIAJNtIjp^+8Lo9pwe!!_&~xYI0~+00xE{%y!Xs#rrX)`% zvmavuW8)kWuO)kXK7xn&Q_aO{%j4j#p0-xm2L*W;|7qCF9+U&?*)cf{WI>bA@S ziX%qbE4Tkej`Y9CfpT!}fE?-@?36=?4t@Xq_g-FJsBh>Bg{cDMAeev+f|-zz0Ot;5 z%gV|Ec&Kb}>#C}%P;%hgty{N%-1<&|at;m-LN;N7e)OSRZ>G%Rw`=4ok}5X%mI1z{ z?v|703fX8ReUdC>?>du;g+5?&SmnlwKtqD%TTHD14Z zZrwV!U1D)gjKL+UL>D#@`x@NkECl1RvRjJn@thP+O4wZsw_H2Q%x}N0BKeA}^96(?U4DbFj)%MCQDjPEmp`WZY(Q@#Zr)_rKwRVE1jE1*U-RsJ#>=mmy?x6y6~f;$iO&b zw5LZhKF~2D##59Q7b&y9)8;!zRhE`Euk=s!bgON7GyJ6!Cb_LHbQM=?c!b|`HuvK`iYal0WK<-um1x9Hp$-r diff --git a/design/skin.old.css b/design/skin.old.css deleted file mode 100644 index 657ae32179..0000000000 --- a/design/skin.old.css +++ /dev/null @@ -1,190 +0,0 @@ -/* DEFAULT SKIN (override in another file) -================================================================================ -Using all CSS to draw the controls. Images could be used if desired. -Instead of editing this file, I recommend creating your own skin CSS file to be included after this file, -so you can upgrade to newer versions easier. */ - -.vjs-original-skin .vjs-controls { - position: absolute; margin: 0; opacity: 0.85; color: #fff; - display: block; /* Start hidden */ - left: 0; right: 0; /* 100% width of video-js-box */ - width: 100%; - bottom: 0px; /* Distance from the bottom of the box/video. Keep 0. Use height to add more bottom margin. */ - height: 35px; /* Including any margin you want above or below control items */ - padding: 0; /* Controls are absolutely position, so no padding necessary */ - -webkit-transition: opacity 0.5s linear; - -moz-transition: opacity 0.5s linear; - -o-transition: opacity 0.5s linear; - -ms-transition: opacity 0.5s linear; - transition: opacity 0.5s linear; -} - -.vjs-original-skin .vjs-control { - position: absolute; /* Use top, bottom, left, and right to specifically position the control. */ - text-align: center; margin: 0; padding: 0; - height: 25px; /* Default height of individual controls */ - top: 5px; /* Top margin to put space between video and controls when controls are below */ - - /* CSS Background Gradients - Using to give the aqua-ish look. */ - /* Default */ background-color: #0B151A; - /* Webkit */ background: #1F3744 -webkit-gradient(linear, left top, left bottom, from(#0B151A), to(#1F3744)) left 12px; - /* Firefox */ background: #1F3744 -moz-linear-gradient(top, #0B151A, #1F3744) left 12px; - - /* CSS Curved Corners */ - -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; - - /* CSS Shadows */ - -webkit-box-shadow: 1px 1px 2px #000; -moz-box-shadow: 1px 1px 2px #000; box-shadow: 1px 1px 2px #000; -} - -/* Placement of Control Items - - Left side of pogress bar, use left & width - - Rigth side of progress bar, use right & width - - Expand with the video (like progress bar) use left & right - (using div.x to make more specific than vjs-control style) -*/ -.vjs-original-skin div.vjs-play-control { left: 5px; width: 25px; } -.vjs-original-skin div.vjs-progress-control { left: 35px; right: 165px; } /* Using left & right so it expands with the width of the video */ -.vjs-original-skin div.vjs-time-control { width: 75px; right: 90px; } /* Time control and progress bar are combined to look like one */ -.vjs-original-skin div.vjs-volume-control { width: 50px; right: 35px; } -.vjs-original-skin div.vjs-fullscreen-control { width: 25px; right: 5px; } - -/* Removing curved corners on progress control and time control to join them. */ -.vjs-original-skin div.vjs-progress-control { - -webkit-border-top-right-radius: 0; -moz-border-radius-topright: 0; border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 0; -moz-border-radius-bottomright: 0; border-bottom-right-radius: 0; -} -.vjs-original-skin div.vjs-time-control { - -webkit-border-top-left-radius: 0; -moz-border-radius-topleft: 0; border-top-left-radius: 0; - -webkit-border-bottom-left-radius: 0; -moz-border-radius-bottomleft: 0; border-bottom-left-radius: 0; -} - -/* Play/Pause --------------------------------------------------------------------------------- */ -.vjs-original-skin .vjs-play-control { cursor: pointer !important; } -/* Play Icon */ -.vjs-original-skin .vjs-play-control span { display: block; font-size: 0; line-height: 0; } -.vjs-original-skin.vjs-paused .vjs-play-control span { - width: 0; height: 0; margin: 8px 0 0 8px; - /* Drawing the play triangle with borders - http://www.infimum.dk/HTML/slantinfo.html */ - border-left: 10px solid #fff; /* Width & Color of play icon */ - /* Height of play icon is total top & bottom border widths. Color is transparent. */ - border-top: 5px solid rgba(0,0,0,0); border-bottom: 5px solid rgba(0,0,0,0); -} -.vjs-original-skin.vjs-playing .vjs-play-control span { - width: 3px; height: 10px; margin: 8px auto 0; - /* Drawing the pause bars with borders */ - border-top: 0px; border-left: 3px solid #fff; border-bottom: 0px; border-right: 3px solid #fff; -} - -/* Progress --------------------------------------------------------------------------------- */ -.vjs-original-skin .vjs-progress-holder { /* Box containing play and load progresses */ - position: relative; padding: 0; overflow:hidden; cursor: pointer !important; - height: 9px; border: 1px solid #777; - margin: 7px 1px 0 5px; /* Placement within the progress control item */ - -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; -} -.vjs-original-skin .vjs-progress-holder div { /* Progress Bars */ - position: absolute; display: block; width: 0; height: 9px; margin: 0; padding: 0; - left: 0; top: 0; /*Needed for IE6*/ - -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; -} -.vjs-original-skin .vjs-play-progress { - /* CSS Gradient */ - /* Default */ background: #fff; - /* Webkit */ background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#777)); - /* Firefox */ background: -moz-linear-gradient(top, #fff, #777); -} -.vjs-original-skin .vjs-load-progress { - opacity: 0.8; - /* CSS Gradient */ - /* Default */ background-color: #555; - /* Webkit */ background: -webkit-gradient(linear, left top, left bottom, from(#555), to(#aaa)); - /* Firefox */ background: -moz-linear-gradient(top, #555, #aaa); -} - -/* Time Display --------------------------------------------------------------------------------- */ -.vjs-original-skin .vjs-time-control { font-size: 10px; line-height: 1; font-weight: normal; font-family: Helvetica, Arial, sans-serif; } -.vjs-original-skin .vjs-time-control span { line-height: 25px; /* Centering vertically */ } - -/* Volume --------------------------------------------------------------------------------- */ -.vjs-original-skin .vjs-volume-control { cursor: pointer !important; } -.vjs-original-skin .vjs-volume-control div { display: block; margin: 0 5px 0 5px; padding: 4px 0 0 0; } -/* Drawing the volume icon using 6 span elements */ -.vjs-original-skin .vjs-volume-control div span { /* Individual volume bars */ - float: left; padding: 0; font-size: 0; line-height: 0; - margin: 0 2px 0 0; /* Space between */ - width: 5px; height: 0px; /* Total height is height + bottom border */ - border-bottom: 18px solid #555; /* Default (off) color and height of visible portion */ -} -.vjs-original-skin .vjs-volume-control div span.vjs-volume-level-on { border-color: #fff; /* Volume on bar color */ } -/* Creating differnt bar heights through height (transparent) and bottom border (visible). */ -.vjs-original-skin .vjs-volume-control div span.vjs-vc-1 { border-bottom-width: 2px; height: 16px; } -.vjs-original-skin .vjs-volume-control div span.vjs-vc-2 { border-bottom-width: 4px; height: 14px; } -.vjs-original-skin .vjs-volume-control div span.vjs-vc-3 { border-bottom-width: 7px; height: 11px; } -.vjs-original-skin .vjs-volume-control div span.vjs-vc-4 { border-bottom-width: 10px; height: 8px; } -.vjs-original-skin .vjs-volume-control div span.vjs-vc-5 { border-bottom-width: 14px; height: 4px; } -.vjs-original-skin .vjs-volume-control div span.vjs-vc-6 { margin-right: 0; } - -/* Fullscreen --------------------------------------------------------------------------------- */ -.vjs-original-skin .vjs-fullscreen-control { cursor: pointer !important; } -.vjs-original-skin .vjs-fullscreen-control div { - padding: 0; text-align: left; vertical-align: top; cursor: pointer !important; - margin: 5px 0 0 5px; /* Placement within the fullscreen control item */ - width: 20px; height: 20px; -} -/* Drawing the fullscreen icon using 4 span elements */ -.vjs-original-skin .vjs-fullscreen-control div span { float: left; margin: 0; padding: 0; font-size: 0; line-height: 0; width: 0; text-align: left; vertical-align: top; } -.vjs-original-skin .vjs-fullscreen-control div span.vjs-fc-1 { /* Top-left triangle */ - margin-right: 3px; /* Space between top-left and top-right */ - margin-bottom: 3px; /* Space between top-left and bottom-left */ - border-top: 6px solid #fff; /* Height and color */ - border-right: 6px solid rgba(0,0,0,0); /* Width */ -} -.vjs-original-skin .vjs-fullscreen-control div span.vjs-fc-2 { border-top: 6px solid #fff; border-left: 6px solid rgba(0,0,0,0); } -.vjs-original-skin .vjs-fullscreen-control div span.vjs-fc-3 { clear: both; margin: 0 3px 0 0; border-bottom: 6px solid #fff; border-right: 6px solid rgba(0,0,0,0); } -.vjs-original-skin .vjs-fullscreen-control div span.vjs-fc-4 { border-bottom: 6px solid #fff; border-left: 6px solid rgba(0,0,0,0); } -/* Icon when video is in fullscreen mode */ -.vjs-original-skin.vjs-fullscreen .vjs-fullscreen-control div span.vjs-fc-1 { border: none; border-bottom: 6px solid #fff; border-left: 6px solid rgba(0,0,0,0); } -.vjs-original-skin.vjs-fullscreen .vjs-fullscreen-control div span.vjs-fc-2 { border: none; border-bottom: 6px solid #fff; border-right: 6px solid rgba(0,0,0,0); } -.vjs-original-skin.vjs-fullscreen .vjs-fullscreen-control div span.vjs-fc-3 { border: none; border-top: 6px solid #fff; border-left: 6px solid rgba(0,0,0,0); } -.vjs-original-skin.vjs-fullscreen .vjs-fullscreen-control div span.vjs-fc-4 { border: none; border-top: 6px solid #fff; border-right: 6px solid rgba(0,0,0,0); } - - - - - -/* Big Play Button (at start) ----------------------------------------------------------*/ -.vjs-original-skin .vjs-big-play-button { - display: block; /* Start hidden */ z-index: 2; - position: absolute; top: 50%; left: 50%; width: 80px; height: 80px; margin: -43px 0 0 -43px; text-align: center; vertical-align: center; cursor: pointer !important; - border: 3px solid #fff; opacity: 0.9; - -webkit-border-radius: 20px; -moz-border-radius: 20px; border-radius: 20px; - - /* CSS Background Gradients */ - /* Default */ background-color: #0B151A; - /* Webkit */ background: #1F3744 -webkit-gradient(linear, left top, left bottom, from(#0B151A), to(#1F3744)) left 40px; - /* Firefox */ background: #1F3744 -moz-linear-gradient(top, #0B151A, #1F3744) left 40px; - - /* CSS Shadows */ - -webkit-box-shadow: 4px 4px 8px #000; -moz-box-shadow: 4px 4px 8px #000; box-shadow: 4px 4px 8px #000; -} - -.vjs-original-skin div.vjs-big-play-button:hover { - -webkit-box-shadow: 0px 0px 80px #fff; -moz-box-shadow: 0px 0px 80px #fff; box-shadow: 0px 0px 80px #fff; -} - -.vjs-original-skin div.vjs-big-play-button span { - display: block; font-size: 0; line-height: 0; - width: 0; height: 0; margin: 20px 0 0 23px; - /* Drawing the play triangle with borders - http://www.infimum.dk/HTML/slantinfo.html */ - border-left: 40px solid #fff; /* Width & Color of play icon */ - /* Height of play icon is total top & bottom border widths. Color is transparent. */ - border-top: 20px solid rgba(0,0,0,0); border-bottom: 20px solid rgba(0,0,0,0); -} \ No newline at end of file diff --git a/dev.html.example b/dev.html.example deleted file mode 100644 index 1d78f163b8..0000000000 --- a/dev.html.example +++ /dev/null @@ -1,52 +0,0 @@ - - - - - HTML5 Video Player - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package.json b/package.json index 4e4f38f033..a36a671f98 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,33 @@ -{ "name": "Video.js" -, "description": "An HTML5 and Flash video player with a common API and skin for both." -, "version": "3.2.3" -, "keywords": ["html5", "flash", "video", "player"] -, "homepage": "http://videojs.com" -, "author": "Steve Heffernan" -, "scripts": { "test": "make test" } -, "repository": - { "type": "git" - , "url": "https://github.com/zencoder/video-js.git" - } -, "devDependencies": - { "jshint": "0.6.1" - , "connect": "2.1.3" - } -} \ No newline at end of file +{ + "name": "video.js", + "description": "An HTML5 and Flash video player with a common API and skin for both.", + "version": "3.2.3", + "keywords": [ + "html5", + "flash", + "video", + "player" + ], + "homepage": "http://videojs.com", + "author": "Steve Heffernan", + "scripts": { + "test": "grunt qunit" + }, + "repository": { + "type": "git", + "url": "https://github.com/zencoder/video-js.git" + }, + "devDependencies": { + "grunt-cli": "~0.1.0", + "grunt": "0.4.0rc4", + "grunt-contrib-jshint": "~0.1.0", + "grunt-contrib-nodeunit": "~0.1.0", + "jshint": "0.6.1", + "connect": "2.1.3", + "grunt-contrib-uglify": "~0.1.0", + "grunt-closure-compiler": "0.0.13", + "grunt-contrib-watch": "~0.1.4", + "grunt-contrib-concat": "~0.1.1", + "grunt-contrib-qunit": "~0.1.0" + } +} diff --git a/sandbox/index.html.example b/sandbox/index.html.example new file mode 100644 index 0000000000..b7be76f2ca --- /dev/null +++ b/sandbox/index.html.example @@ -0,0 +1,53 @@ + + + + + Video.js Sandbox + + + + + + + + + + + + + + + + + + + + + + + +

You can use /sandbox/ for writing and testing your own code. Nothing in /sandbox/ will get checked into the repo, except files that end in .example, so please don't edit or add those files. To get started make a copy of index.html.example and rename it to index.html.

+ + + + + + + diff --git a/design/video-js.css b/src/css/video-js.css similarity index 100% rename from design/video-js.css rename to src/css/video-js.css diff --git a/src/css/video-js.fw.png b/src/css/video-js.fw.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7f208c21813246bdd708fcd21db2863febe03b GIT binary patch literal 78899 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 literal 0 HcmV?d00001 diff --git a/design/video-js.png b/src/css/video-js.png similarity index 100% rename from design/video-js.png rename to src/css/video-js.png diff --git a/src/component.js b/src/js/component.js similarity index 100% rename from src/component.js rename to src/js/component.js diff --git a/src/controls.js b/src/js/controls.js similarity index 100% rename from src/controls.js rename to src/js/controls.js diff --git a/src/core.js b/src/js/core.js similarity index 100% rename from src/core.js rename to src/js/core.js diff --git a/src/events.js b/src/js/events.js similarity index 100% rename from src/events.js rename to src/js/events.js diff --git a/src/exports.js b/src/js/exports.js similarity index 100% rename from src/exports.js rename to src/js/exports.js diff --git a/src/goog.base.js b/src/js/goog.base.js similarity index 100% rename from src/goog.base.js rename to src/js/goog.base.js diff --git a/src/json.js b/src/js/json.js similarity index 100% rename from src/json.js rename to src/js/json.js diff --git a/src/lib.js b/src/js/lib.js similarity index 100% rename from src/lib.js rename to src/js/lib.js diff --git a/src/media.flash.externs.js b/src/js/media.flash.externs.js similarity index 100% rename from src/media.flash.externs.js rename to src/js/media.flash.externs.js diff --git a/src/media.flash.js b/src/js/media.flash.js similarity index 100% rename from src/media.flash.js rename to src/js/media.flash.js diff --git a/src/media.html5.js b/src/js/media.html5.js similarity index 100% rename from src/media.html5.js rename to src/js/media.html5.js diff --git a/src/media.js b/src/js/media.js similarity index 100% rename from src/media.js rename to src/js/media.js diff --git a/src/player.js b/src/js/player.js similarity index 100% rename from src/player.js rename to src/js/player.js diff --git a/src/setup.js b/src/js/setup.js similarity index 100% rename from src/setup.js rename to src/js/setup.js diff --git a/src/tracks.js b/src/js/tracks.js similarity index 100% rename from src/tracks.js rename to src/js/tracks.js diff --git a/tech/flash/video-js.swf b/src/swf/video-js.swf similarity index 100% rename from tech/flash/video-js.swf rename to src/swf/video-js.swf diff --git a/tech/flash/swfobject.js b/tech/flash/swfobject.js deleted file mode 100644 index 8eafe9dd83..0000000000 --- a/tech/flash/swfobject.js +++ /dev/null @@ -1,4 +0,0 @@ -/* SWFObject v2.2 - is released under the MIT License -*/ -var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab 0 ? callback.apply(null, params) : callback.call(); - } - - - /** - * Stores submitted callbacks for each iframe being tracked and each - * event for that iframe. - * - * @param eventName (String): Name of the event. Eg. api_onPlay - * @param callback (Function): Function that should get executed when the - * event is fired. - * @param target_id (String) [Optional]: If handling more than one iframe then - * it stores the different callbacks for different iframes based on the iframe's - * id. - */ - function storeCallback(eventName, callback, target_id) { - if (target_id) { - if (!eventCallbacks[target_id]) { - eventCallbacks[target_id] = {}; - } - eventCallbacks[target_id][eventName] = callback; - } - else { - eventCallbacks[eventName] = callback; - } - } - - /** - * Retrieves stored callbacks. - */ - function getCallback(eventName, target_id) { - if (target_id) { - return eventCallbacks[target_id][eventName]; - } - else { - return eventCallbacks[eventName]; - } - } - - function removeCallback(eventName, target_id) { - if (target_id && eventCallbacks[target_id]) { - if (!eventCallbacks[target_id][eventName]) { - return false; - } - eventCallbacks[target_id][eventName] = null; - } - else { - if (!eventCallbacks[eventName]) { - return false; - } - eventCallbacks[eventName] = null; - } - - return true; - } - - /** - * Returns a domain's root domain. - * Eg. returns http://vimeo.com when http://vimeo.com/channels is sbumitted - * - * @param url (String): Url to test against. - * @return url (String): Root domain of submitted url - */ - function getDomainFromUrl(url) { - if (url.substr(0, 2) === '//') { - url = window.location.protocol + url; - } - - var url_pieces = url.split('/'), - domain_str = ''; - - for(var i = 0, length = url_pieces.length; i < length; i++) { - if(i<3) {domain_str += url_pieces[i];} - else {break;} - if(i<2) {domain_str += '/';} - } - - return domain_str; - } - - function isFunction(obj) { - return !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isArray(obj) { - return toString.call(obj) === '[object Array]'; - } - - // Give the init function the Froogaloop prototype for later instantiation - Froogaloop.fn.init.prototype = Froogaloop.fn; - - // Listens for the message event. - // W3C - if (window.addEventListener) { - window.addEventListener('message', onMessageReceived, false); - } - // IE - else { - window.attachEvent('onmessage', onMessageReceived); - } - - // Expose froogaloop to the global object - return (window.Froogaloop = window.$f = Froogaloop); - -})(); diff --git a/tech/youtube/youtube.html b/tech/youtube/youtube.html deleted file mode 100644 index 33e5f73d57..0000000000 --- a/tech/youtube/youtube.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - YouTube Test - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tech/youtube/youtube.js b/tech/youtube/youtube.js deleted file mode 100644 index 8a4dfe070c..0000000000 --- a/tech/youtube/youtube.js +++ /dev/null @@ -1,369 +0,0 @@ - -/* VideoJS-YouTube - YouTube iFrame Wrapper -================================================================================ */ -_V_.youtube = _V_.PlaybackTech.extend({ - - init: function(player, options){ - this.player = player; - - var source = options.source; - - // Extract the YouTube videoID from the source - var videoId = this.getVideoId(source.src); - - // Which element to embed in - var parentEl = options.parentEl; - - // Generate ID for iFrame - var objId = player.el.id+"_youtube_api"; - - // Create an iFrame for the YouTube player - var iFrm = this.el = _V_.createElement("iframe", { - id: objId + "_iframe", - name: objId + "_iframe", - className: "vjs-tech", - scrolling: "no", - marginWidth: 0, - marginHeight: 0, - frameBorder: 0, - webkitAllowFullScreen: "", - mozallowfullscreen: "", - allowFullScreen: "" - }); - - // Store a global list of currently loading players - _V_.youtube.loadingEls = _V_.youtube.loadingEls || []; - _V_.youtube.loadingEls.push(parentEl); - - var playerOptions = player.options; - var optionsParams = options.params || {}; - - // Setup player parameters - var params = { - disablekb: 1, - enablejsapi: 1, - iv_load_policy: 3, - modestbranding: 1, - playerapiid: objId, - wmode: "opaque", // Opaque is needed to overlay controls, but can affect playback performance (Flash only) - rel: 0, - showinfo: 0, - showsearch: 0, - controls: this.toBoolInt(optionsParams.ytcontrols || playerOptions.ytcontrols), - autoplay: this.toBoolInt(optionsParams.autoplay || playerOptions.autoplay), - loop: this.toBoolInt(optionsParams.loop || playerOptions.loop), - hd: this.toBoolInt(optionsParams.hd || playerOptions.hd) - }; - - var p = (document.location.protocol == 'https:') ? 'https:' : 'http:'; - - if (document.domain != 'localhost' && document.location.protocol != 'file:') - params.origin = p + "//" + document.domain; - - this.player.apiArgs = { - videoId: videoId, - playerVars: params, - events: { - "onReady": _V_.youtube.onReady, - "onStateChange": _V_.youtube.onStateChange, - "onPlaybackQualityChange": _V_.youtube.onPlaybackQualityChange, - "onError": _V_.youtube.onError - } - }; - - _V_.addEvent(parentEl, "techready", _V_.proxy(this, function(){ - // YouTube JS API is ready, load the player - iFrm.src = p + "//www.youtube.com/embed/" + videoId + "?" + - this.makeQueryString(params); - // Initialize the YouTube Player object. Only pass events as arguments, - // since all of our other parameters went into the iFrame URL - this.youtube = new YT.Player(iFrm, { events: this.player.apiArgs.events }); - })); - - // Add iFrame to player div - _V_.insertFirst(iFrm, parentEl); - - _V_.youtube.updateVideoQuality(this.player, null); - - this.loadApi(); - }, - - destroy: function(){ - this.el.parentNode.removeChild(this.el); - this.youtube.destroy(); - delete this.youtube; - }, - - play: function(){ this.youtube.playVideo(); }, - pause: function(){ this.youtube.pauseVideo(); }, - paused: function(){ - var state = this.youtube.getPlayerState(); - return state !== YT.PlayerState.PLAYING && - state !== YT.PlayerState.BUFFERING; - }, - - src: function(src){ - delete this.player.error; - - // FIXME: Does this work or do we have to set the iFrame src again? - var videoId = this.getVideoId(src); - this.youtube.loadVideoById(videoId); - }, - load: function(){ }, - poster: function(){ - var videoId = this.getVideoId(this.youtube.getVideoUrl()); - return "http://img.youtube.com/vi/" + videoId + "/0.jpg"; - }, - - currentTime: function(){ return this.youtube.getCurrentTime() || 0; }, - setCurrentTime: function(seconds){ - this.youtube.seekTo(seconds, true); - this.player.triggerEvent("timeupdate"); - }, - - duration: function(){ return this.youtube.getDuration() || 0; }, - buffered: function(){ - var loadedBytes = this.youtube.getVideoBytesLoaded(); - var totalBytes = this.youtube.getVideoBytesTotal(); - if (!loadedBytes || !totalBytes) return 0; - - var duration = this.youtube.getDuration(); - var secondsBuffered = (loadedBytes / totalBytes) * duration; - var secondsOffset = (this.youtube.getVideoStartBytes() / totalBytes) * duration; - return _V_.createTimeRange(secondsOffset, secondsOffset + secondsBuffered); - }, - - volume: function(){ - if (isNaN(this.youtube.volumeVal)) - this.youtube.volumeVal = this.youtube.getVolume() / 100.0; - return this.youtube.volumeVal; - }, - setVolume: function(percentAsDecimal){ - if (percentAsDecimal != this.youtube.volumeVal) { - this.youtube.volumeVal = percentAsDecimal; - this.youtube.setVolume(percentAsDecimal * 100.0); - this.player.triggerEvent("volumechange"); - } - }, - muted: function(){ return this.youtube.isMuted(); }, - setMuted: function(muted){ - if (muted) - this.youtube.mute(); - else - this.youtube.unMute(); - - // Volume changes do not show up in the API immediately, so we need - // to wait for a moment - var self = this; - setTimeout(function() { self.player.triggerEvent("volumechange"); }, 50); - }, - - width: function(){ return this.el.offsetWidth; }, - height: function(){ return this.el.offsetHeight; }, - - currentSrc: function(){ return this.youtube.getVideoUrl(); }, - - preload: function(){ return false; }, - setPreload: function(val){ }, - autoplay: function(){ return !!this.player.apiArgs.playerVars.autoplay; }, - setAutoplay: function(val){ }, - loop: function(){ return !!this.player.apiArgs.playerVars.loop; }, - setLoop: function(val){ - this.player.apiArgs.playerVars.loop = (val ? 1 : 0); - // We handle looping manually - //this.youtube.setLoop(val); - }, - - supportsFullScreen: function(){ return false; }, - enterFullScreen: function(){ return false; }, - - error: function(){ return this.player.error; }, - seeking: function(){ return false; }, - ended: function(){ return this.youtube.getPlayerState() === YT.PlayerState.ENDED; }, - videoWidth: function(){ return this.player.videoWidth; }, - videoHeight: function(){ return this.player.videoHeight; }, - controls: function(){ return this.player.options.controls; }, - defaultMuted: function(){ return false; }, - - // Helpers ------------------------------------------------------------------ - - makeQueryString: function(args) { - var array = []; - for (var key in args) { - if (args.hasOwnProperty(key)) - array.push(encodeURIComponent(key) + "=" + encodeURIComponent(args[key])); - } - return array.join("&"); - }, - - getVideoId: function(url) { - return url.match(/v=([^&]+)/)[1]; - }, - - toBoolInt: function(val) { - return val ? 1 : 0; - }, - - loadApi: function() { - // Check if the YouTube JS API has already been loaded - var js, id = "youtube-jssdk", ref = document.getElementsByTagName("script")[0]; - if (_V_.el(id)) { - window.onYouTubePlayerAPIReady(); - return; - } - - // Asynchronously load the YouTube JS API - var p = (document.location.protocol == "https:") ? "https:" : "http:"; - js = _V_.createElement("script", { id: id, async: true, src: p + "//www.youtube.com/player_api" }); - ref.parentNode.insertBefore(js, ref); - } -}); - -// Event callbacks ------------------------------------------------------------ - -_V_.youtube.onReady = function(e){ - var player = e.target.getIframe().parentNode.player; - - player.tech.triggerReady(); - player.triggerReady(); - player.triggerEvent("durationchange"); - - _V_.youtube.hideOverlay(player); -}; - -_V_.youtube.onStateChange = function(e){ - var player = e.target.getIframe().parentNode.player; - - // Suppress any duplicate events from YouTube - if (player.lastState === e.data) - return; - - switch (e.data) { - case -1: // Unstarted - player.triggerEvent("durationchange"); - break; - case YT.PlayerState.CUED: - break; - case YT.PlayerState.ENDED: - player.triggerEvent("ended"); - _V_.youtube.hideOverlay(player); - - // YouTube looping doesn't seem to play well with VideoJS, so we need to - // implement it manually here - if (player.apiArgs.playerVars.loop) { - player.tech.youtube.seekTo(0, true); - player.tech.youtube.playVideo(); - } else { - player.tech.youtube.stopVideo(); - } - break; - case YT.PlayerState.PLAYING: - player.triggerEvent("timeupdate"); - player.triggerEvent("playing"); - player.triggerEvent("play"); - break; - case YT.PlayerState.PAUSED: - player.triggerEvent("pause"); - break; - case YT.PlayerState.BUFFERING: - player.triggerEvent("timeupdate"); - player.triggerEvent("waiting"); - // Hide the waiting spinner since YouTube has its own - player.loadingSpinner.hide(); - break; - } - - player.lastState = e.data; -}; - -_V_.youtube.onPlaybackQualityChange = function(e){ - var player = e.target.getIframe().parentNode.player; - _V_.youtube.updateVideoQuality(player, e.data); - player.triggerEvent("ratechange"); -}; - -_V_.youtube.onError = function(e){ - var player = e.target.getIframe().parentNode.player; - player.error = e.data; - player.triggerEvent("error"); -}; - -// Helpers -------------------------------------------------------------------- - -_V_.youtube.hideOverlay = function(player) { - // Hide the big play button and poster since YouTube provides these. Using - // our own prevents the video from playing on the first click in mobile - // devices - player.bigPlayButton.hide(); - player.posterImage.hide(); -}; - -_V_.youtube.updateVideoQuality = function(player, quality) { - switch (quality) { - case 'medium': - player.videoWidth = 480; - player.videoHeight = 360; - break; - case 'large': - player.videoWidth = 640; - player.videoHeight = 480; - break; - case 'hd720': - player.videoWidth = 960; - player.videoHeight = 720; - break; - case 'hd1080': - player.videoWidth = 1440; - player.videoHeight = 1080; - break; - case 'highres': - player.videoWidth = 1920; - player.videoHeight = 1080; - break; - case 'small': - player.videoWidth = 320; - player.videoHeight = 240; - break; - default: - player.videoWidth = 0; - player.videoHeight = 0; - break; - } -}; - -// Support testing ------------------------------------------------------------ - -_V_.youtube.isSupported = function(){ - return true; -}; - -_V_.youtube.canPlaySource = function(srcObj){ - return srcObj.type == "video/youtube"; -}; - -_V_.youtube.prototype.support = { - formats: { - "video/youtube": "YT" - }, - - // Optional events that we can manually mimic with timers - progressEvents: false, - timeupdateEvents: false, - - //fullscreen: true, - // In iOS, if you move a video element in the DOM, it breaks video playback. - movingElementInDOM: !_V_.isIOS(), - - fullscreenResize: true, - parentResize: true -}; - -// YouTube JS API load callback ----------------------------------------------- - -window.onYouTubePlayerAPIReady = function() { - // Fire a techready event for each loading player - var loadingEl; - while ((loadingEl = _V_.youtube.loadingEls.shift())) { - loadingEl.player.triggerEvent("techready"); - } -}; diff --git a/test/unit/phantom-logging.js b/test/phantom-logging.js similarity index 71% rename from test/unit/phantom-logging.js rename to test/phantom-logging.js index 0f5fd9e4f5..9e1c517609 100644 --- a/test/unit/phantom-logging.js +++ b/test/phantom-logging.js @@ -8,14 +8,15 @@ QUnit.begin = function () { QUnit.moduleDone = function (opts) { if (opts.failed === 0) { - console.log("\u2714 All tests passed in '" + opts.name + "' module") + console.log("\n\u2714 All tests passed in '" + opts.name + "' module") } else { - console.log("\u2716 " + opts.failed + " tests failed in '" + opts.name + "' module") + console.log("\n\u2716 " + opts.failed + " tests failed in '" + opts.name + "' module") } } -QUnit.done = function (opts) { +QUnit.done(function (opts) { console.log("\n================================================") console.log("Tests completed in " + opts.runtime + " milliseconds") console.log(opts.passed + " tests of " + opts.total + " passed, " + opts.failed + " failed.") -} \ No newline at end of file + return false; +}); diff --git a/test/unit.html b/test/unit.html index 02ca6adea6..c181694ea0 100644 --- a/test/unit.html +++ b/test/unit.html @@ -8,24 +8,24 @@ - + - + - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/test/unit.js b/test/unit.js new file mode 100644 index 0000000000..b69d90476a --- /dev/null +++ b/test/unit.js @@ -0,0 +1,646 @@ +module("Component"); + +test('should create an element', function(){ + var comp = new vjs.Component({}, {}); + + ok(comp.el().nodeName); +}); + +test('should add a child component', function(){ + var comp = new vjs.Component({}); + + var child = comp.addChild("component"); + + ok(comp.children().length === 1); + ok(comp.children()[0] === child); + ok(comp.el().childNodes[0] === child.el()); + ok(comp.getChild('component') === child); + ok(comp.getChildById(child.id()) === child); +}); + +test('should init child coponents from options', function(){ + var comp = new vjs.Component({}, { + children: { + 'component': true + } + }); + + ok(comp.children().length === 1); + ok(comp.el().childNodes.length === 1); +}); + +test('should dispose of component and children', function(){ + var comp = new vjs.Component({}); + + // Add a child + var child = comp.addChild("Component"); + ok(comp.children().length === 1); + + // Add a listener + comp.on('click', function(){ return true; }); + var data = vjs.getData(comp.el()); + var id = comp.el()[vjs.expando]; + + comp.dispose(); + + ok(!comp.children(), 'component children were deleted'); + ok(!comp.el(), 'component element was deleted'); + ok(!child.children(), 'child children were deleted'); + ok(!child.el(), 'child element was deleted'); + ok(!vjs.cache[id], 'listener cache nulled') + ok(vjs.isEmpty(data), 'original listener cache object was emptied') +}); + +test('should add and remove event listeners to element', function(){ + var comp = new vjs.Component({}, {}); + + // No need to make this async because we're triggering events inline. + // We're going to trigger the event after removing the listener, + // So if we get extra asserts that's a problem. + expect(2); + + var testListener = function(){ + ok(true, 'fired event once'); + ok(this === comp, 'listener has the component as context'); + }; + + comp.on('test-event', testListener); + comp.trigger('test-event'); + comp.off('test-event', testListener); + comp.trigger('test-event'); +}); + +test('should trigger a listener once using one()', function(){ + var comp = new vjs.Component({}, {}); + + expect(1); + + var testListener = function(){ + ok(true, 'fired event once'); + }; + + comp.one('test-event', testListener); + comp.trigger('test-event'); + comp.trigger('test-event'); +}); + +test('should trigger a listener when ready', function(){ + expect(2); + + var optionsReadyListener = function(){ + ok(true, 'options listener fired') + }; + var methodReadyListener = function(){ + ok(true, 'ready method listener fired') + }; + + var comp = new vjs.Component({}, {}, optionsReadyListener); + + comp.triggerReady(); + + comp.ready(methodReadyListener); + + // First two listeners should only be fired once and then removed + comp.triggerReady(); +}); + +test('should add and remove a CSS class', function(){ + var comp = new vjs.Component({}, {}); + + comp.addClass('test-class'); + ok(comp.el().className.indexOf('test-class') !== -1); + comp.removeClass('test-class'); + ok(comp.el().className.indexOf('test-class') === -1); +}); + +test('should show and hide an element', function(){ + var comp = new vjs.Component({}, {}); + + comp.hide(); + ok(comp.el().style.display === 'none'); + comp.show(); + ok(comp.el().style.display === 'block'); +}); + +test('should change the width and height of a component', function(){ + var container = document.createElement('div'); + var comp = new vjs.Component({}, {}); + var el = comp.el(); + var fixture = document.getElementById('qunit-fixture'); + + fixture.appendChild(container); + container.appendChild(el); + // Container of el needs dimensions or the component won't have dimensions + container.style.width = '1000px' + container.style.height = '1000px' + + comp.width('50%'); + comp.height('123px'); + + ok(comp.width() === 500, 'percent values working'); + ok(vjs.getComputedStyleValue(el, 'width') === comp.width() + 'px', 'matches computed style'); + ok(comp.height() === 123, 'px values working'); + + comp.width(321); + ok(comp.width() === 321, 'integer values working'); +}); + +module("Core"); + +test('should create a video tag and have access children in old IE', function(){ + var fixture = document.getElementById('qunit-fixture'); + + fixture.innerHTML += ""; + + vid = document.getElementById('test_vid_id'); + + ok(vid.childNodes.length === 1); + ok(vid.childNodes[0].getAttribute('type') === 'video/mp4'); +}); + +test('should return a video player instance', function(){ + var fixture = document.getElementById('qunit-fixture'); + fixture.innerHTML += ""; + + var player = videojs('test_vid_id'); + ok(player, 'created player from tag'); + ok(player.id() === 'test_vid_id'); + ok(videojs.players['test_vid_id'] === player, 'added player to global reference') + + var playerAgain = videojs('test_vid_id'); + ok(player === playerAgain, 'did not create a second player from same tag'); + + var tag2 = document.getElementById('test_vid_id2'); + var player2 = videojs(tag2); + ok(player2.id() === 'test_vid_id2', 'created player from element'); +}); + +module("Events"); + +test('should add and remove an event listener to an element', function(){ + expect(1); + + var el = document.createElement('div'); + var listener = function(){ + ok(true, 'Click Triggered'); + }; + + vjs.on(el, 'click', listener); + vjs.trigger(el, 'click'); // 1 click + vjs.off(el, 'click', listener) + vjs.trigger(el, 'click'); // No click should happen. +}); + +test('should remove all listeners of a type', function(){ + var el = document.createElement('div'); + var clicks = 0; + var listener = function(){ + clicks++; + }; + var listener2 = function(){ + clicks++; + }; + + vjs.on(el, 'click', listener); + vjs.on(el, 'click', listener2); + vjs.trigger(el, 'click'); // 2 clicks + + ok(clicks === 2, 'both click listeners fired') + + vjs.off(el, 'click') + vjs.trigger(el, 'click'); // No click should happen. + + ok(clicks === 2, 'no click listeners fired') +}); + +test('should remove all listeners from an element', function(){ + expect(2); + + var el = document.createElement('div'); + var listener = function(){ + ok(true, 'Fake1 Triggered'); + }; + var listener2 = function(){ + ok(true, 'Fake2 Triggered'); + }; + + vjs.on(el, 'fake1', listener); + vjs.on(el, 'fake2', listener2); + + vjs.trigger(el, 'fake1'); + vjs.trigger(el, 'fake2'); + + vjs.off(el); + + // No listener should happen. + vjs.trigger(el, 'fake1'); + vjs.trigger(el, 'fake2'); +}); + +test('should listen only once', function(){ + expect(1); + + var el = document.createElement('div'); + var listener = function(){ + ok(true, 'Click Triggered'); + }; + + vjs.one(el, 'click', listener); + vjs.trigger(el, 'click'); // 1 click + vjs.trigger(el, 'click'); // No click should happen. +}); + +module("Lib"); + +test('should create an element', function(){ + var div = vjs.createEl(); + var span = vjs.createEl('span', { "data-test": "asdf", innerHTML:'fdsa' }) + ok(div.nodeName === 'DIV'); + ok(span.nodeName === 'SPAN'); + ok(span['data-test'] === 'asdf'); + ok(span.innerHTML === "fdsa"); +}); + +test('should make a string start with an uppercase letter', function(){ + var foo = vjs.capitalize('bar') + ok(foo === 'Bar'); +}); + +test('should loop through each property on an object', function(){ + var asdf = { + a: 1, + b: 2, + 'c': 3 + } + + // Add 3 to each value + vjs.eachProp(asdf, function(key, value){ + asdf[key] = value + 3; + }); + + deepEqual(asdf,{a:4,b:5,'c':6}) +}); + +test('should add context to a function', function(){ + var newContext = { test: 'obj'}; + var asdf = function(){ + ok(this === newContext); + } + var fdsa = vjs.bind(newContext, asdf); + + fdsa(); +}); + +test('should add and remove a class name on an element', function(){ + var el = document.createElement('div'); + vjs.addClass(el, 'test-class') + ok(el.className === 'test-class', 'class added'); + vjs.addClass(el, 'test-class') + ok(el.className === 'test-class', 'same class not duplicated'); + vjs.addClass(el, 'test-class2') + ok(el.className === 'test-class test-class2', 'added second class'); + vjs.removeClass(el, 'test-class') + ok(el.className === 'test-class2', 'removed first class'); +}); + +test('should get and remove data from an element', function(){ + var el = document.createElement('div'); + var data = vjs.getData(el); + var id = el[vjs.expando]; + + ok(typeof data === 'object', 'data object created'); + + // Add data + var testData = { asdf: 'fdsa' }; + data.test = testData; + ok(vjs.getData(el).test === testData, 'data added'); + + // Remove all data + vjs.removeData(el); + + ok(!vjs.cache[id], 'cached item nulled') + ok(el[vjs.expando] === null || el[vjs.expando] === undefined, 'element data id removed') +}); + +test('should read tag attributes from elements, including HTML5 in all browsers', function(){ + var container = document.createElement('div'); + + var tags = ''; + tags += '