Comparar commits

..

1078 Commits

Autor SHA1 Mensagem Data
Steve Heffernan 4242fe3857 Release 4.5.2 2014-04-12 14:03:18 -07:00
Steve Heffernan da45dad831 Updated versioning to bump bower and component json files also
fixes #1123, fixes #1140
2014-04-12 13:47:39 -07:00
Steve Heffernan 848cfd6620 Release 4.5.1 2014-03-27 14:31:36 -07:00
Steve Heffernan d3af3e0e07 Added line to the changelog 2014-03-27 14:29:46 -07:00
Steve Heffernan af50b8ee29 Fixed canPlaySource export that got lost in last release 2014-03-27 14:25:58 -07:00
Steve Heffernan 825de43819 Release 4.5.0 2014-03-27 13:35:51 -07:00
Steve Heffernan 066438670f Fixed the release type ID placement in contrib.json 2014-03-27 13:32:06 -07:00
Steve Heffernan e8d36e0fab Exported upatchCanPlayType and moved tests to api.js 2014-03-27 13:24:03 -07:00
Steve Heffernan a9ad77aa00 Removed a low value test that was causing a hang in testing 2014-03-27 11:53:06 -07:00
Steve Heffernan b3b42e3822 Made findPosition return rounded values to fix Android tests 2014-03-27 11:44:50 -07:00
Steve Heffernan 88403221a9 Fixed canPlayType patch tests on Android 2014-03-27 11:19:21 -07:00
Steve Heffernan 2079af7320 Merge pull request #1116 from dmlap/hotfix/gcc-currentSrc
Fix currentSrc when Flash returns null
2014-03-26 16:53:55 -07:00
David LaPalomento c8bd862e3e Fix currentSrc when Flash returns null
It looks like GCC was mangling `rtmpConnection` and `rtmpStream` before invoking them. Unfortunately, we define those methods as string literals so they do not have mangled equivalents. Invoke them using string literals so GCC never mangles the method names.
2014-03-26 19:45:42 -04:00
Steve Heffernan 74c73969cd Merge branch 'gkatsev-defaultprevented' 2014-03-26 14:45:53 -07:00
Steve Heffernan c286c826db Added line to changelog 2014-03-26 14:45:08 -07:00
Steve Heffernan 33f388366d Merge branch 'master' of github.com:videojs/video.js 2014-03-26 14:40:38 -07:00
Steve Heffernan f363523551 Switched to single quotes 2014-03-26 14:39:33 -07:00
Steve Heffernan e87fe460cc Merge branch 'monkeyhls' of git://github.com/gkatsev/video-js into gkatsev-monkeyhls 2014-03-26 14:37:20 -07:00
Steve Heffernan 2c12ed98a7 Merge branch 'defaultprevented' of git://github.com/gkatsev/video-js into gkatsev-defaultprevented 2014-03-26 14:32:50 -07:00
Steve Heffernan 87ee28e6cb Merge pull request #1112 from seniorflexdeveloper/feature/grunt-connect
Grunt Connect
2014-03-26 14:30:45 -07:00
Gary Katsevman e39557e790 Always unpatch canPlayType.
Fix up tests to not ignore some if canPlayType is not available since
unpatch is no longer broken.
2014-03-26 16:59:04 -04:00
Gary Katsevman e2a1cac136 fix typo for unpatchCanPlayType 2014-03-26 16:58:49 -04:00
Gary Katsevman d21019ad78 add existence test for patch and unpatch methods 2014-03-26 16:39:11 -04:00
Gary Katsevman 94ec725a66 update for IE8 and fixup stupid tests 2014-03-26 14:58:36 -04:00
Gary Katsevman 75bd76f55c return the patched function from unpatchCanPlayType 2014-03-26 14:58:20 -04:00
Gary Katsevman fef6282d55 remove unused var 2014-03-26 13:49:21 -04:00
Gary Katsevman f1d2aef048 Don't assume only mimetype available for matching 2014-03-26 13:41:49 -04:00
Tom Johnson d1d97bfe9b update contributing doc with grunt commands 2014-03-25 15:38:32 -07:00
Tom Johnson 0a1d4b2645 use grunt connect for development 2014-03-25 15:22:29 -07:00
Gary Katsevman 0c856ce9a4 call unpatchCanPlayType after tests 2014-03-25 15:32:03 -04:00
Gary Katsevman 817253b74f Also, switch out HTMLVideoElement to constructor reference in tests 2014-03-24 19:07:19 -04:00
Gary Katsevman f86e073f03 Switch HTMLVideoElement to constructor reference 2014-03-24 18:54:10 -04:00
Gary Katsevman 86c3f94c87 fix up jshint errors 2014-03-24 18:00:00 -04:00
Gary Katsevman d48d6cf99d add a test 2014-03-24 17:56:02 -04:00
Steve Heffernan 0f2aadcfcd Merge branch 'stable' 2014-03-24 13:53:54 -07:00
Steve Heffernan 4daf1f173c Merge pull request #1098 from arxpoetica/patch-1
Fix code in examples.
2014-03-24 13:52:37 -07:00
Robert Hall 416ee1b2a0 Fix code in examples.
The examples are broken with extra parentheses. Fixed.
2014-03-19 13:58:00 -04:00
Gary Katsevman 5381f70d1c + vjs.Html5.{patchCanPlayType,unpatchCanPlayType}
patchCanPlayType is called on load.
It patched video#canPlayType if needed.
unpatchCanPlayType will revert the patch and return the patch function.
There are also corresponding tests that test patchCanPlayType,
unpatchCanPlayType and also whether the patch functions themselves work
correctly.
2014-03-17 20:47:47 -04:00
Gary Katsevman 252ad3f466 be case insensitive 2014-03-13 18:25:03 -04:00
Matthew McClure 80d7b5014a Merge pull request #1075 from seniorflexdeveloper/hotfix/spinner
Loading Spinner Fixes
2014-03-13 14:26:20 -07:00
Matthew McClure 32e4d4c9d0 Merge pull request #1080 from tchakabam/master
Fixes null pointer exception and improves behavior of src() of when to trigger ready event
2014-03-13 14:18:36 -07:00
Stephan Hesse d289a336b8 Fix bower version (was 4.4.0 in bower.json but should be same as semver tag) 2014-03-13 22:16:39 +01:00
Gary Katsevman e35083bc28 Monkeypatch canPlayType on Android 4.0+ for HLS
Android devices starting with 4.0 can play HLS natively to some extent.
However, they do not say so in the canPlayType method. This commit
monkey patches canPlayType to respond with "maybe" for
"application/x-mpegURL" and "application/vnd.apple.mpegURL". Otherwise,
it'll fallback to the original canPlayType method.
2014-03-13 16:34:29 -04:00
Stephan Hesse 4051a9cbee Fixed compile: removed trailing whitespace 2014-03-13 18:59:51 +01:00
Stephan Hesse 26f6f4b0ea Enough to check for this.tech != null 2014-03-13 00:46:00 +01:00
Stephan Hesse cbefd37acf Added comment to triggerReady call 2014-03-13 00:45:06 +01:00
Tom Johnson 378d6ef482 - Bind hide on ended event to resolve issue #1028.
- Remove duplicate seeked event line.
2014-03-11 21:29:14 -07:00
tchakabam 02155c6b13 Trigger ready callback even when no tech available so client app can display custom fallback message 2014-03-11 16:47:51 +01:00
tchakabam 7a4c602be0 Fixes exception when userActive called but tech not initialized 2014-03-11 16:20:12 +01:00
Steve Heffernan e7b1098563 Merge branch 'master' of github.com:videojs/video.js 2014-03-06 13:18:58 -08:00
Steve Heffernan a64a5e27cf Merge branch 'stable'
Conflicts:
	dist/video-js/video-js.css
	dist/video-js/video-js.min.css
	dist/video-js/video.dev.js
	dist/video-js/video.js
2014-03-06 13:18:49 -08:00
Steve Heffernan bdeaae1c92 Release 4.4.3 2014-03-06 13:15:53 -08:00
Steve Heffernan e2b2d14f48 Added line to the changelog 2014-03-06 12:55:25 -08:00
Steve Heffernan 96c274de63 Merge branch 'patch/setposter-export' of git://github.com/heff/video-js into heff-patch/setposter-export 2014-03-06 12:49:36 -08:00
Steve Heffernan 6244c39129 Added line to the changelog 2014-03-06 12:48:12 -08:00
Steve Heffernan e4b269e294 Added an IIFE to prevent deoptimization 2014-03-06 12:36:36 -08:00
Gary Katsevman f3166ad082 Add speced event.defaultPrevented 2014-03-06 13:36:40 -05:00
Steve Heffernan 54609dc3f5 Merge pull request #1061 from frankhereford/master
Update the Readme.md file with the current year.
2014-03-05 16:16:04 -08:00
Steve Heffernan 2005fe2136 Exporting tech.setPoster(). Fixes #1028 2014-03-05 16:08:49 -08:00
frankhereford efd4822c6b Update the Readme.md file with the current year. 2014-03-05 17:44:07 -06:00
Steve Heffernan d538debb1d Added try/catch to protect against IE with no Media Player 2014-03-05 15:04:04 -08:00
Steve Heffernan 48230ea1a1 Added line to changelog 2014-03-05 13:42:32 -08:00
Steve Heffernan 661cbd1eb0 Close GH-1059: Added a grunt task for opening the next issue that needs to be addressed. 2014-03-05 13:41:26 -08:00
Steve Heffernan fe2b702e32 Merge branch 'stable' 2014-03-04 11:33:35 -08:00
Steve Heffernan d47435a18f Merge pull request #1057 from paolodina/patch-1
Update setup.md
2014-03-04 11:33:12 -08:00
Steve Heffernan 7c772fbf3e Merge branch 'bugfix/src-getter' of git://github.com/dmlap/video-js into dmlap-bugfix/src-getter
Conflicts:
	src/js/media/flash.js
2014-03-04 11:24:10 -08:00
Paolo Dina 4116d9ec14 Update setup.md 2014-03-04 20:13:14 +01:00
David LaPalomento f155814cd9 Merge pull request #1 from heff/bugfix/src-getter
Made the src method return the player when setting
2014-03-04 14:11:56 -05:00
Steve Heffernan a0f929dd57 Added line to the changelog 2014-03-04 09:32:28 -08:00
Lee Whitaker cc5e515360 Use .npmignore to package a smaller subset of videojs for distribution. Make sure to include the video-js.less file for the designer to use. 2014-03-04 09:50:58 -05:00
Steve Heffernan 2e26703162 Fixed captions positioning when player isn't playing 2014-03-03 13:47:16 -08:00
Steve Heffernan 0ad8abfef1 Added line to the change log 2014-03-03 13:37:46 -08:00
Steve Heffernan 61883ab4e2 Merge branch 'master' of git://github.com/harhoo/video.js into harhoo-master 2014-03-03 13:33:34 -08:00
Steve Heffernan 0f854c751b Merge branch 'stable' 2014-03-03 13:32:51 -08:00
Steve Heffernan 5b133823e5 Updated contrib.json with feature workflow 2014-03-03 13:32:21 -08:00
harhoo 3e19d7621a Whitespace changes 2014-03-03 15:31:47 +00:00
harhoo b0a6cf335a Move captions down when controls are inactive 2014-03-03 10:26:51 +00:00
Steve Heffernan ed78764379 Updated changelog 2014-02-27 17:57:20 -08:00
Steve Heffernan 7f44942c9b Merge branch 'add/component-support' of git://github.com/peteschaffner/video.js into peteschaffner-add/component-support 2014-02-27 17:55:29 -08:00
Steve Heffernan e9da3350d4 Made the src method return the player when setting, and made Flash return the current srouce for flash.src() 2014-02-27 17:34:01 -08:00
Steve Heffernan c6c49ac580 Merge pull request #1040 from ange007/patch-2
There was no semicolon
2014-02-25 16:03:00 -08:00
Pete Schaffner 4b0db76d77 Bump version 2014-02-25 15:32:45 +01:00
Vladimir B. 6b28ba268a There was no semicolon
There was no semicolon
2014-02-25 13:11:03 +02:00
Pete Schaffner 5146c1fa4a Add component.json file 2014-02-25 07:19:24 +01:00
Steve Heffernan b98d719564 Merge branch 'stable'
Conflicts:
	dist/video-js/video-js.css
	dist/video-js/video-js.min.css
	dist/video-js/video.dev.js
	dist/video-js/video.js
2014-02-24 22:03:34 -08:00
Steve Heffernan 7aefee5d7d Release 4.4.2 2014-02-24 21:57:43 -08:00
Steve Heffernan c1e623bed7 Added line to the changelog 2014-02-24 21:51:56 -08:00
Steve Heffernan 333db84510 Made module.exports a string key so it'd be exported. fixes #1033 2014-02-24 21:19:06 -08:00
Steve Heffernan 8f40fa4548 Merge branch 'stable' 2014-02-24 21:15:24 -08:00
Steve Heffernan 9c282811e1 Merge pull request #1037 from heff/patch/patch
Added patch process to contrib.json
2014-02-24 21:13:26 -08:00
Steve Heffernan d68f5a93a5 Updated contrib.json with patch commands 2014-02-24 21:10:29 -08:00
Steve Heffernan 1dd8a15655 Updated contrib patch process 2014-02-24 11:32:35 -08:00
Steve Heffernan 3336f1fe02 Merge branch 'stable' 2014-02-19 12:49:47 -08:00
Steve Heffernan 4fe74d52a9 Updated the CDN links in the setup guide 2014-02-19 12:49:29 -08:00
Steve Heffernan 0d58df8edb Merge branch 'stable' 2014-02-18 17:18:25 -08:00
Steve Heffernan f135b97ce0 Fixed the version numbers in the changelog 2014-02-18 17:17:58 -08:00
Steve Heffernan 051657334f Removed dist files 2014-02-18 17:04:21 -08:00
Steve Heffernan 7be94c3882 Release 4.4.1 2014-02-18 17:04:02 -08:00
Steve Heffernan 4f66e09595 Updated changelog 2014-02-18 16:58:11 -08:00
Steve Heffernan 1bb2c7ed57 Added .npmignore so dist/ files won't be ignored in packages 2014-02-18 16:57:14 -08:00
Steve Heffernan 1e781d14df Updated the release process to remove dist files after the release 2014-02-18 15:40:56 -08:00
Steve Heffernan ee9a18d5ac Removed dist files after publishing 2014-02-18 15:09:45 -08:00
Steve Heffernan ce0c4b12d2 Fixed contrib release branch pushes 2014-02-18 14:39:20 -08:00
Steve Heffernan 9e5dce5c14 Release 4.4.0 2014-02-18 13:43:40 -08:00
Steve Heffernan 88dca0a2e2 Fixed contrib release to use bump-only, so it doesn't tag and push 2014-02-18 13:41:56 -08:00
Steve Heffernan 8aa2eb4719 Updated package github url. fixes #1020 2014-02-18 13:31:18 -08:00
Steve Heffernan ecaf748e4f Added a bower.json 2014-02-18 13:27:02 -08:00
Steve Heffernan c9cad9ca1e Updated to the latest version of the swf 2014-02-18 13:19:35 -08:00
Steve Heffernan 956aaa0425 Added release process using contrib.json 2014-02-14 16:52:48 -08:00
Steve Heffernan e062dec423 Fixed grunt file error 2014-02-13 21:09:42 -08:00
Steve Heffernan 8b720ce45a Fixed a mistype 2014-02-13 19:28:13 -08:00
Steve Heffernan 5ab2504e90 Added line to changelog 2014-02-13 19:24:55 -08:00
Steve Heffernan 310a0630c9 Switched to custom universal module definition. closes #998 closes #847 closes #998 2014-02-13 19:20:30 -08:00
Steve Heffernan 468b07c651 Merge branch 'browserify' of git://github.com/gkatsev/video-js into gkatsev-browserify 2014-02-13 14:51:30 -08:00
Steve Heffernan 12c830049e Updated changelog 2014-02-11 17:21:24 -08:00
Steve Heffernan fe4c477da6 Switch this.content references to use the standard this.contentEl_
Also cleaned up some comments and formatting.
2014-02-11 17:20:07 -08:00
Steve Heffernan 24125bbb63 Merge branch 'patch-1' of git://github.com/MrAvenger/video.js into MrAvenger-patch-1 2014-02-11 15:36:06 -08:00
Steve Heffernan e73bb869ce Merge pull request #1005 from uniphil/patch-1
Create 'track' element in the HTML5 shiv sample
2014-02-10 17:30:41 -08:00
Steve Heffernan 5c907e1ce2 Added missing file from minified test suite 2014-02-10 17:24:48 -08:00
Steve Heffernan 8c59405d86 Added missing files from standard test suite 2014-02-10 17:14:46 -08:00
Steve Heffernan 7ade43d91d Merge branch 'bugfix/lastseek-cleanup' of git://github.com/dmlap/video-js into dmlap-bugfix/lastseek-cleanup 2014-02-10 16:17:30 -08:00
Steve Heffernan 49656ab013 Merge branch 'master' of github.com:videojs/video.js 2014-02-10 16:09:32 -08:00
Steve Heffernan 6f83d0b00e Merge branch 'karma-update' of git://github.com/christophercurrie/video.js into christophercurrie-karma-update
Conflicts:
	test/karma.conf.js.example
2014-02-10 16:08:47 -08:00
Phil Schleihauf 71ba5bb062 Create 'track' element in the HTML5 shiv sample
Matches the shiv to the one at [the start of `src/js/core.js`](https://github.com/videojs/video.js/blob/master/src/js/core.js#L8).

Right now it's missing `track`.
2014-02-10 15:40:32 -05:00
Steve Heffernan 11e7028c25 Merge pull request #999 from mmcc/document-passing-element
Update docs to reflect being able to pass an element instead of ID.
2014-02-07 16:53:19 -08:00
Matthew McClure 7926c2d9a6 syntax highlighting and some clarity 2014-02-07 16:52:15 -08:00
Matthew McClure 2b1291816f Update docs to reflect being able to pass an element instead of ID. Closes #844 2014-02-07 16:26:49 -08:00
Gary Katsevman 4d9d06e1c9 Enable building videojs with browserify.
This uses browserify-shim to get browserify to recognize videojs.
It uses dist/video-js/video.js for the main file of the module.
To build using browserify, you just run browserify on the module and
use --standalone (or -s) to make it produce a UMD file.
This seems to work just fine in the browser (and requirejs looks like
it'll work, though, I haven't tested it) but it won't work in node right
now because videojs is doing a lot of stuff with 'document' directly and
its causing problems in node.
2014-02-07 18:28:41 -05:00
Steve Heffernan 0fc76451f9 Adding line to CHANGELOG 2014-02-06 17:15:19 -08:00
Matthew McClure 3cb41c7786 Close GH-971: Quiet down deprecation warnings. 2014-02-06 17:15:01 -08:00
Steve Heffernan 2d5ca1ebc2 Adding line to CHANGELOG 2014-02-06 17:12:00 -08:00
Steve Heffernan 1b45195f9d Close GH-981: Stopped component's dispose event from bubbling up. 2014-02-06 17:11:33 -08:00
Steve Heffernan 04c893208e Added line to changelog 2014-02-06 17:01:49 -08:00
Steve Heffernan 453402a912 Added line to changelog 2014-02-06 17:01:23 -08:00
Steve Heffernan 849521ee66 Merge pull request #988 from golisandeep3/master
Fixed ARIA role attribute for button and slider
2014-02-06 17:00:33 -08:00
Steve Heffernan ef1b239b2a Removed unneeded option in tests 2014-02-06 16:58:25 -08:00
Steve Heffernan 4521c70173 Changed enableUserActivity to enableTouchActivity
Added back tracking of touch+hold
2014-02-06 16:54:35 -08:00
Gary Katsevman 28a4d29934 enable user activity on components by default 2014-02-06 17:04:58 -05:00
Gary Katsevman 9975ed407a Don't enable enableUserActivity on an option 2014-02-06 15:59:57 -05:00
Gary Katsevman 75a23135e6 Report user activity on touchmove if userWasActive 2014-02-06 15:59:10 -05:00
Gary Katsevman 4d2267c1bc use tap events. Report activity on touch move. 2014-02-06 15:40:20 -05:00
Gary Katsevman 44d6cac1b7 Test is for tap events and not user activity 2014-02-05 20:58:30 -05:00
Gary Katsevman e5294848f9 Remove listenToTouchMove. 2014-02-05 20:50:39 -05:00
Gary Katsevman 26c8d3f92c enableUserActivity on component
disableUserActivity on MediaTechController and Player.
MediaTechController does it manually.
2014-02-05 20:41:52 -05:00
Gary Katsevman a7d624affe stop immediate propagation on tap events
Make media tech controller only hide control bar.
2014-02-05 19:22:43 -05:00
Gary Katsevman 4b254a07df remove unused var 2014-02-05 19:19:14 -05:00
Gary Katsevman 07cd9800e8 Fix touch events.
Make components listen to touch events themselves.
Components can have a "listenToTouchMove" property that would report
user activity on touch moves.
Currently, the only problem left is that the MediaTechController emits
tap events to show/hide the controlbar but that causes the control bar
to not be hidden via a tap.
2014-02-05 18:26:44 -05:00
Sandeep Goli b23eba7c8c Fixed ARIA role attribute for button and slider 2014-02-04 11:18:51 -05:00
Steve Heffernan 70ed4fcbb2 Updated changelog 2014-02-03 13:20:03 -08:00
Aalekh Nigam d0f8b3e87e Close GH-977: Inserts Fullscreen events .fixes #688. 2014-02-03 13:17:47 -08:00
David LaPalomento 7184cb4b49 src() called as a getter should return the video src
It can be handy that src() returns the player object when it is invoked but it does not match the behavior of the corresponding property on the video element. Ignoring the spec however, while the video element is running the resource selection algorithm, currentSrc may be undefined. If the video source has been specified through an attribute on the video element, src() is the natural way to expose that URL programmatically. Without this change, it's necessary to bypass the player and interact with the tech directly to determine the value of the src attribute.
2014-01-25 23:16:35 -05:00
Steve Heffernan c597605afd Added line to the changelog 2014-01-23 17:50:23 -08:00
Steve Heffernan d73bfb80b7 Merge branch 'windows-dist' of git://github.com/christophercurrie/video.js into christophercurrie-windows-dist
Conflicts:
	package.json
2014-01-23 17:47:19 -08:00
Steve Heffernan 0dd210dcf3 Added line to changelog 2014-01-23 17:22:14 -08:00
Steve Heffernan e25a9f3207 Merge branch 'seniorflexdeveloper-feature/grunt-swf' 2014-01-23 17:20:19 -08:00
Steve Heffernan e4b4906198 Updated swf version and grunt file references 2014-01-23 17:15:41 -08:00
Steve Heffernan 4dd776c334 Added line to changelog 2014-01-23 16:46:24 -08:00
Steve Heffernan a8afe9c673 Merge pull request #906 from heff/feature/more-exports
Added missing component exports
2014-01-23 16:45:27 -08:00
Steve Heffernan 6a1c0bdd0c Added a line to the changelog 2014-01-23 16:42:48 -08:00
Steve Heffernan 65767f77f8 Merge pull request #948 from christophercurrie/karma-missing-util
Karma example is missing util
2014-01-23 16:40:54 -08:00
Steve Heffernan f5acb89d70 Added a changelog item 2014-01-23 15:47:37 -08:00
Steve Heffernan f152c6a4be Changed video-js swf location 2014-01-23 15:44:52 -08:00
Steve Heffernan cb78815e80 Merge pull request #962 from dmlap/bugfix/touch-detect-test
Fix touch detection test on non-touch devices
2014-01-23 15:43:06 -08:00
David LaPalomento ff1c9c5cf0 Fix touch detection test on non-touch devices
TOUCH_ENABLED is false on non-touch devices which causes our minified API test to fail when opened in a browser on a traditional destktop machine. It worked fine through the command line because apparanetly phantomjs supports touch events (ha!). Check to make sure the property is not undefined instead.
2014-01-23 18:28:46 -05:00
David LaPalomento dd8c25e8d5 Store last seek time in the Flash tech
Instead of caching the last seek time at the player level, cache it in the Flash tech. The only place this value was used was in the progress controls when Flash was loaded, so this simplifies the logic in that component and pushes the hack down into a single location at least.
2014-01-23 18:19:15 -05:00
Steve Heffernan 1cd81ad258 Merge pull request #959 from mmcc/update-setup-docs
Update setup guide
2014-01-23 14:04:49 -08:00
Matthew McClure bf7dd32ff6 update setup docs to reference 4.3 on the CDN 2014-01-23 14:01:48 -08:00
Christopher Currie 9088dfffc9 Use specific launcher versions 2014-01-21 08:45:59 -08:00
Christopher Currie a54d9cdae6 Add dependencies and configuration for all browser launchers 2014-01-21 08:42:40 -08:00
Christopher Currie 51b836d6be Update to karma 0.10/grunt-karma 0.6.
Current version of grunt-karma has ChromeLauncher bugs.
2014-01-17 14:18:09 -08:00
Christopher Currie 0a2167468c Karma example is missing util 2014-01-17 19:39:00 +00:00
Christopher Currie 02eb2d3ee3 Support dist target on Windows 2014-01-16 11:41:17 -08:00
Steve Heffernan 2825f74ba8 Merge branch 'feature/grunt-swf' of git://github.com/seniorflexdeveloper/video.js into seniorflexdeveloper-feature/grunt-swf 2014-01-15 13:52:33 -05:00
Tom Johnson 59a733f14e fix build task 2014-01-10 12:32:38 -08:00
Tom Johnson 0dae44988e use SWF grunt build project. Update gruntfile for dist task to use packaged SWF. Updated sandbox for reference to SWF. 2014-01-07 07:32:16 -08:00
Steve Heffernan dfe4543a0d Adding line to CHANGELOG 2013-12-20 14:14:35 -08:00
Steve Heffernan 0f38d27dcc Close GH-899: Fix firefox+flash mousemove bubbling. Fixes #37 2013-12-20 14:14:00 -08:00
Steve Heffernan 024b031646 Added missing component exports. fixes #903 2013-12-18 17:53:43 -08:00
MrAvenger ec1bea41a5 Update progress-control.js 2013-12-17 15:26:56 +00:00
MrAvenger b1f9450bb3 SeekHandle content
I wanted to use the SeekHandle to show the current time but as far as I could tell it only contained static content, I made this change to allow the content to be updated.

Is this its intended purpose or am I playing with something that has another a different job?
2013-12-17 15:05:03 +00:00
Steve Heffernan 950072ad97 Merge pull request #898 from tuchida/remove-global-userActivity_
Remove added userActivity_ to global
2013-12-16 15:52:08 -08:00
uchida_t 491b9b232b Remove added userActivity_ to global 2013-12-17 08:23:10 +09:00
Steve Heffernan a106924e6d Adding line to CHANGELOG 2013-12-11 13:28:32 -08:00
Benoit Tremblay 6b73df950e Close GH-887: Fix to reuse HTML5 tech (2). Fixes #884 2013-12-11 13:27:47 -08:00
Steve Heffernan 7b23576afc Adding line to CHANGELOG 2013-12-09 16:16:30 -08:00
Steve Heffernan 166cc9c1ef Close GH-878: Moved player exports to externs. 2013-12-09 16:16:09 -08:00
Steve Heffernan 81e49d4361 Merge pull request #875 from dmlap/hotfix/poster-fallback
Fix capability detection for poster image
2013-12-05 13:55:29 -08:00
David LaPalomento 090bc0d12a Fix capability detection for poster image
We were checking if `backgroundSize` was present on the video element, not the style property of the video element. That meant the IE fallback was being used on all platforms and breaks aspect-ratio preserving poster scaling for those browsers that support it.
2013-12-05 11:15:10 -05:00
David LaPalomento beb329ad71 Make textTracks an extern
TextTracks are queried during player initialization whether they're present or not so the method must be present on Player objects. Make sure the method name isn't minified so it's possible to create a Player object without having to extend videojs.Player directly.
2013-12-03 14:09:16 -05:00
Steve Heffernan 2066474096 Adding line to CHANGELOG 2013-12-02 17:37:49 -08:00
Gary Katsevman 432b60f22c Close GH-861: Bug/callstack gh 860. Fixes #860 2013-12-02 17:37:12 -08:00
Steve Heffernan 15a0d7dbb6 Added note to fullscreen externs test 2013-12-02 17:31:18 -08:00
Steve Heffernan c23ca5200c Merge branch 'hotfix/player-externs' of git://github.com/dmlap/video-js into dmlap-hotfix/player-externs
Conflicts:
	Gruntfile.js
2013-12-02 17:29:34 -08:00
Steve Heffernan 522f45f458 Exported util namespace and mergeOptions 2013-12-02 17:11:08 -08:00
Steve Heffernan df57b302da Adding line to CHANGELOG 2013-12-02 17:03:56 -08:00
Steve Heffernan 2aa09fd15a Close GH-862: Add util namespace. 2013-12-02 17:03:32 -08:00
Steve Heffernan 09f81c0c6c Adding line to CHANGELOG 2013-12-02 15:34:19 -08:00
David LaPalomento 75b2171051 Close GH-850: Use qunitjs through npm. 2013-12-02 15:34:00 -08:00
Steve Heffernan 3248bc1258 Adding line to CHANGELOG 2013-12-02 15:30:07 -08:00
David LaPalomento 1cab78347d Close GH-845: Move player id generation. 2013-12-02 15:29:41 -08:00
Steve Heffernan 0cbe95d615 Added a test for the posterImage source getter 2013-12-02 08:11:22 -08:00
Steve Heffernan dcc19dcf04 Adding line to CHANGELOG 2013-11-26 16:57:40 -08:00
Matthew McClure f3fcf9b5b8 Close GH-815: Export text tracks. 2013-11-26 16:57:20 -08:00
Steve Heffernan ef0d63b5ba Modified tests for #838 and updated changelog. closes #838 2013-11-26 16:53:23 -08:00
David LaPalomento 7efcbd5e19 Use externs to prevent obfuscation
Instead of using string literals, create an externs file for the player and use that to ensure fullscreen functionality is never minified.
2013-11-26 18:47:12 -05:00
David LaPalomento c69290c39f Don't use minifiable player methods in fullscreenToggle
Use string literals to lookup fullscreen-related methods on the player object in the fullscreenToggle component. Otherwise, closure compiler replaces them with minified method names and makes it impossible to supply a simpler "player" object with customized fullscreen logic for the fullscreenToggle to interact with.
2013-11-26 18:46:08 -05:00
David LaPalomento cb9447b2c3 Fix typo in test description
availble -> available
2013-11-26 18:45:58 -05:00
David LaPalomento 875fc2ff32 Allow poster to be changed after init. Fixes #525
When poster() is called with a URL, fire a `posterchange` event to update the PosterImage source and update the video element attribute.

Trigger posterchange after updating the tech
Wait until the tech has updated its poster image before alerting components so they don't see the intermediate state in event handlers. Remove unused variable from PosterImage.createEl.

Don't create new img elements each time the poster is set on ie8
Create the img fallback for the poster during PosterImage initialization on ie8 so we can avoid having to check and possibly create it each time the src is set. Add a test to ensure that new elements are not appended to the poster component when the img fallback is in use and the src attribute is modified.

fixing a broken IE8 test, and adding a negative test, for poster switching.

modified the poster-switching test to accomodate IE8
added a negative test for an undefined poster

fixed the assertion message in the 'undefined' image case

fixed test breakage in Firefox and IE10 (quotes were not being handled properly in the test data)

testing:
ran the tests at the command line, and in Chrome, Firefox, IE8, IE10, Firefox and Safari
all passed
2013-11-25 14:49:49 -08:00
Steve Heffernan 1f06a0c6b3 Merge pull request #826 from dsteinbrunner/patch-3
another bad player api link
2013-11-12 18:32:14 -08:00
Steve Heffernan 2f716cddf4 Merge pull request #825 from dsteinbrunner/patch-2
Fixing broken link with what I think it the correct one
2013-11-12 18:30:11 -08:00
David Steinbrunner d653c25025 another bad player api link 2013-11-08 09:42:36 -05:00
David Steinbrunner c2abbb7568 Fixing broken link with what I think it the correct one 2013-11-08 09:39:29 -05:00
Steve Heffernan 9662736766 Updated docs with recent changes 2013-11-05 17:12:20 -08:00
Steve Heffernan b6c902a7b3 Updated doc comments per comments on #801 2013-11-05 17:09:46 -08:00
Steve Heffernan 5308dd41d2 Fixed changelog version 2013-11-04 16:15:15 -08:00
Steve Heffernan 4e216cdddb Bump version to 4.3.0 2013-11-04 16:14:04 -08:00
Steve Heffernan 847472f286 Rotating CHANGELOG 2013-11-04 16:12:11 -08:00
Steve Heffernan df7c91ad92 Generated new API docs 2013-11-04 16:03:51 -08:00
Steve Heffernan 10c3e46e95 Updated demo.html to have a subtitles example. Added demo to CDN. 2013-11-04 15:35:44 -08:00
Steve Heffernan 48f6332f78 Updated to the latest version of the swf 2013-11-04 15:29:32 -08:00
Steve Heffernan d9bb81018b Merge branch 'master' of github.com:videojs/video.js 2013-11-04 15:18:31 -08:00
Steve Heffernan 4e0128bb3d Switched default spinner icon 2013-11-04 15:18:21 -08:00
Steve Heffernan 6c1adb79d2 Merge pull request #812 from nickarnold/bugfix-811
Loadeddata event doc fix. Fixes #811
2013-10-31 11:18:45 -07:00
Nick Arnold 7ee2f864b3 Add missing onLoadedData handler prototype. 2013-10-31 11:37:54 -06:00
Steve Heffernan c85d94a2ce Adding line to CHANGELOG 2013-10-29 11:01:12 -07:00
Matthew McClure 4c6a12898b Close GH-805: Flash - ignore codec info - added tests for #785. 2013-10-29 11:00:54 -07:00
Steve Heffernan 6e3eb5075e Adding line to CHANGELOG 2013-10-28 18:26:13 -07:00
Steve Heffernan f318eb9f1f Close GH-801: API Doc Generation 2. Fixes #747 2013-10-28 18:25:28 -07:00
Steve Heffernan 9bfbceb047 Updated grunt file to point to new CDN font folder 2013-10-17 16:38:13 -07:00
Steve Heffernan c56e6ed37c Adding line to CHANGELOG 2013-10-17 16:28:45 -07:00
Matthew McClure 7a8d808b0e Close GH-784: New loading icons and class to center big play button. 2013-10-17 16:28:21 -07:00
Steve Heffernan 124c62fe24 Adding line to CHANGELOG 2013-10-17 16:07:44 -07:00
Matthew McClure ba20239147 Close GH-783: Export userActive and reportUserActivity. 2013-10-17 16:07:33 -07:00
Steve Heffernan 0c4ab0b449 Adding line to CHANGELOG 2013-10-17 16:06:39 -07:00
J. Tangelder e0794cf4b4 Close GH-777: Fix aria-label big-play-button. 2013-10-17 16:06:16 -07:00
Steve Heffernan 3203c2c5ed Merge branch 'stable' 2013-10-15 13:39:32 -07:00
Steve Heffernan 9ec2556a7c Bump version to 4.2.2 2013-10-15 13:39:30 -07:00
Steve Heffernan d3efe4b04c Rotating CHANGELOG 2013-10-15 13:39:29 -07:00
Steve Heffernan f35ae5c44f Adding line to CHANGELOG 2013-10-15 13:39:27 -07:00
Steve Heffernan 14193c4308 Close GH-776: hotfix: source and duration loading after video element init. Fixes #756, Fixes #775 2013-10-15 13:38:48 -07:00
Steve Heffernan 1bef68a60b Merge pull request #774 from gkatsev/touch
Expand TOUCH_ENABLED and expose it publically
2013-10-10 13:09:55 -07:00
Gary Katsevman e37e870d42 Make sure that vjs.TOUCH_ENABLED is a boolean 2013-10-10 11:47:58 -04:00
Gary Katsevman c5a8cff129 Expand TOUCH_ENABLED and expose it publically 2013-10-09 15:32:01 -04:00
Steve Heffernan 61bc016637 Merge pull request #773 from mmcc/add-shiv-setup
Add instructions for creating your own shiv to setup
2013-10-08 13:06:25 -07:00
Matthew McClure acf41c4882 used "simply" too much 2013-10-08 11:53:15 -07:00
Matthew McClure da3550a6d8 added shiv instructions to setup 2013-10-08 11:51:01 -07:00
Steve Heffernan 3640623147 Merge pull request #680 from clayallsopp/docs_change
Change setup doc URLs to respect current protocol
2013-10-04 09:17:13 -07:00
Steve Heffernan a6198efaca Adding line to CHANGELOG 2013-10-01 17:55:18 -07:00
Jon f07caa2b97 Close GH-720: unmute if the user drags the volume bar slider. 2013-10-01 17:54:59 -07:00
Steve Heffernan 2662ad9c96 Adding line to CHANGELOG 2013-09-19 09:24:22 -07:00
BCJwhisenant 13dbf23c3c Close GH-714: Added support for running tests with Karma. 2013-09-19 09:24:06 -07:00
Steve Heffernan b2098e0efe Merge branch 'stable' 2013-09-09 12:21:53 -07:00
Steve Heffernan faea65a44e Bump version to 4.2.1 2013-09-09 12:21:51 -07:00
Steve Heffernan 50adf355af Rotating CHANGELOG 2013-09-09 12:21:51 -07:00
Steve Heffernan 1d05177627 Adding line to CHANGELOG 2013-09-09 12:21:47 -07:00
Jon Mumm a94259cc73 Close GH-727: Fixed windowLoaded not setting on async script load. Fixes #727 2013-09-09 12:21:00 -07:00
Steve Heffernan a49213e20c Removed sourcemap from compiled output. fixes #712 2013-09-05 13:03:16 -07:00
Steve Heffernan 7b73c2725e Added back in reverted #630 2013-09-04 13:33:27 -07:00
Steve Heffernan 8f53e514de Merge branch 'stable' of github.com:videojs/video.js into stable 2013-09-04 13:30:36 -07:00
Steve Heffernan c39dd5567e Fixed changelog version 2013-09-04 13:30:28 -07:00
Steve Heffernan 8e9db2d662 Rotating CHANGELOG 2013-09-04 13:28:12 -07:00
Steve Heffernan 52c577995c Bump version to 4.2.0 2013-09-04 13:26:45 -07:00
Steve Heffernan efe7a12ccb Fixed IE8 tests and flaky fonts 2013-09-04 11:48:19 -07:00
Steve Heffernan f146ebb179 Fixed the getAttributes test in ie8, which reports all attrs, whether or not they were set 2013-09-03 11:27:50 -07:00
Steve Heffernan 72bf48cf36 Fixed the custom fallback message test which would break when ie8 capitalized tag names 2013-09-03 10:48:48 -07:00
Steve Heffernan e6ecbfe824 Added a line to the changelog 2013-08-27 13:13:07 -07:00
Steve Heffernan 0ccb6dd156 Removed spinner gradient to improve performance 2013-08-27 13:11:08 -07:00
Steve Heffernan 62b4f799b9 Merge branch 'spinner-fixes' of git://github.com/ChALkeR/video.js into ChALkeR-spinner-fixes 2013-08-27 12:53:46 -07:00
Steve Heffernan bd789b8613 Added a line to the changelog 2013-08-27 10:27:41 -07:00
Steve Heffernan 4772e4680b Merge branch '636-incompatible' of git://github.com/jelbourn/video.js into jelbourn-636-incompatible
Conflicts:
	test/unit/player.js
2013-08-27 10:26:32 -07:00
Steve Heffernan 26cc24c59d Merge branch 'export-addremove-class' of git://github.com/theonion/video.js into theonion-export-addremove-class
Conflicts:
	src/js/exports.js
	test/unit/api.js
2013-08-26 16:40:40 -07:00
Steve Heffernan 4bc269992e Adding line to CHANGELOG 2013-08-26 16:31:57 -07:00
Trevor Cook 07351ada80 Close GH-632: Ensure tech is defined before checking tech.isReady_ fixes #631. 2013-08-26 16:31:07 -07:00
Steve Heffernan acb4a43d8a Minor modifications to #627 2013-08-26 16:23:33 -07:00
Steve Heffernan 75dd7c5a3c Adding line to CHANGELOG 2013-08-26 16:14:10 -07:00
David LaPalomento f515ac0236 Close GH-627: Use dashes to format invalid times. 2013-08-26 16:13:54 -07:00
Steve Heffernan 6418531d0c Merge pull request #702 from dmlap/feature/expose-volume-menu
Feature/expose volume menu
2013-08-26 08:54:39 -07:00
Steve Heffernan a04932eaf9 Adding line to CHANGELOG 2013-08-25 19:30:37 -07:00
Steve Heffernan 96f6c2388a Close GH-706: Minor code improvements for lib.js. closes #580. 2013-08-25 19:30:19 -07:00
Steve Heffernan 8721202ec1 Adding line to CHANGELOG 2013-08-25 18:51:24 -07:00
Steve Heffernan 92d16d6409 Close GH-705: Changed tech.feature keys to strings to support external techs. closes #466. 2013-08-25 18:50:59 -07:00
Steve Heffernan 7c2ae3f68c Adding line to CHANGELOG 2013-08-23 15:05:23 -07:00
Jeremy West 7ab3d190f2 Close GH-605: added RTMP support. fixes #559. 2013-08-23 15:05:04 -07:00
David LaPalomento 29668ec45b Fix issue with fractional computed dimensions on Chrome
Chrome 29 on OS X (at least) seems to report fractional dimensions occasionally when integer values are assigned. For example, '123px' might be translated to '123.999998458px'. Parse the value and round it to ignore this slight discrepancy.
2013-08-23 14:16:53 -04:00
David LaPalomento bd18f5b25f Export VolumeMenuButton
Add the volumemenubutton to the list of unminified properties for gcc. Create a test case to verify it doesn't get accidentally removed at some point.
2013-08-23 14:15:58 -04:00
Steve Heffernan 5a6fa37623 Adding line to CHANGELOG 2013-08-19 12:37:38 -07:00
Andrew Abramov e520e1eba4 Close GH-683: gruntfile: removed new line symbol from output_wrapper. fixes #679. 2013-08-19 12:36:43 -07:00
Сковорода Никита Андреевич 2f68bfc7c1 Fix spinner position. 2013-08-19 05:13:40 +04:00
Clay Allsopp 57c576f96c Change setup URLs to respect current protocol 2013-08-11 23:45:07 -07:00
Steve Heffernan acf6d67e0d Updated changelog note 2013-08-09 14:34:20 -07:00
Steve Heffernan d47f78f5d1 Adding line to CHANGELOG 2013-08-09 14:29:52 -07:00
Andy Niccolai 02de927043 Close GH-672: Control bar updates. Fixes #556, Fixes #500, Fixes #374, Fixes #403, Fixes #441, Fixes #193, Fixes #602, Fixes #561, Fixes #281 2013-08-09 14:29:22 -07:00
Jeremy Elbourn 20e2d4e984 Merge branch 'master' of https://github.com/videojs/video.js into 636-incompatible 2013-08-05 14:23:05 -04:00
Jeremy Elbourn ff9165b7da Default incompatibility msg w/ other global options fixes #636 2013-08-05 14:19:20 -04:00
Sean Bloomfield f7a72b1f20 exporting addClass and removeClass. added api existence tests for fadeIn,fadeOut,addClass,removeClass 2013-07-30 15:58:00 -05:00
Steve Heffernan 9030a5655e Revert "Close GH-630: prevent default action for simple html5 media events. fixes #573, fixes #620 (duplicate bug)."
This reverts commit 15544c3d05.
2013-07-30 11:31:33 -07:00
Steve Heffernan 699c476575 Merge pull request #660 from videojs/stable
Close GH-630: prevent default action for simple html5 media events. fixe...
2013-07-30 11:25:07 -07:00
Steve Heffernan b5b0f42888 Adding line to CHANGELOG 2013-07-30 11:12:45 -07:00
Cameron Tangney 15544c3d05 Close GH-630: prevent default action for simple html5 media events. fixes #573, fixes #620 (duplicate bug). 2013-07-30 11:12:30 -07:00
Steve Heffernan 8010b77eb3 Adding line to CHANGELOG 2013-07-30 10:43:27 -07:00
Dominic 15fab6df81 Close GH-654: Export createItems call to enable plugins to hook into process. Fixes #648 2013-07-30 10:43:11 -07:00
Steve Heffernan 89fb86bff7 Adding line to CHANGELOG 2013-07-29 15:49:30 -07:00
Mykhailo Stadnyk 75ff27307d Close GH-643: Fix Player.buffered() to more correct behavior. 2013-07-29 15:48:25 -07:00
Steve Heffernan 1d972a0686 Adding line to CHANGELOG 2013-07-29 15:33:30 -07:00
David Elner 334ff59ff0 Close GH-659: Allow event handlers registered with one() to be removed with off().. Fixes #658 2013-07-29 15:33:10 -07:00
Steve Heffernan a809954495 Exporting component.player. fixes #647 2013-07-29 10:48:10 -07:00
Steve Heffernan 7936d7967d Merge pull request #655 from johneke/master
Add player.dispose() API documentation to api.md
2013-07-29 08:15:43 -07:00
johneke aa64669ca3 Fixed due to feedback from code review
Fixed due to feedback from code review
2013-07-29 11:13:00 -04:00
johneke a726b07538 Add player.dispose() API documentation to api.md 2013-07-25 20:05:28 -04:00
Steve Heffernan ca96297ef9 Adding line to CHANGELOG 2013-07-22 12:14:56 -04:00
Dominic a38ce63474 Close GH-648: Added export for vjs.MenuButton. Fixes #647 2013-07-22 12:14:35 -04:00
Steve Heffernan c8ee76b80e Adding line to CHANGELOG 2013-07-19 20:19:13 -07:00
Steve Heffernan 1eca8add85 Close GH-644: LESS for CSS. 2013-07-19 20:18:39 -07:00
Steve Heffernan 2b1bb60f7e Merge branch 'master' of github.com:videojs/video.js 2013-07-19 10:47:41 -07:00
Steve Heffernan 5aa1ff59b3 Added block quote to readme. 2013-07-19 10:47:30 -07:00
Steve Heffernan 59af460ad4 Merge pull request #639 from eXon/patch-1
Fixed broken link
2013-07-18 16:11:23 -07:00
Jeremy West a449cb043a Close GH-614: added dispose event. fixes #613. 2013-07-18 14:39:14 -07:00
Steve Heffernan 9d424c61f4 Fixed broken on-page link
contribute-code -> contributing-code
2013-07-18 11:48:23 -07:00
Steve Heffernan 91da153c02 Updated readme and contrib guide. closes #645 close #397
With changes from @sh1ps and myself
2013-07-17 17:51:29 -07:00
Steve Heffernan 150facab44 Merge branch 'contrib-guide' of git://github.com/BCjwhisenant/video-js into BCjwhisenant-contrib-guide
Conflicts:
	CONTRIBUTING.md
2013-07-17 17:49:19 -07:00
Benoit Tremblay 3716f3b1f0 Fixed broken link 2013-07-14 11:34:25 -04:00
Jeremy Elbourn 918ee040e1 Allow setting a custom incompatible video message. fixes #636 2013-07-12 16:05:25 -04:00
BCJwhisenant 1c606779c3 Removed an extraneous section at the bottom about Pull Requests.
(since we recommend further up the page to use contribflow)
2013-07-10 12:05:38 -04:00
Steve Heffernan fdf7f4f228 Bump version to 4.1.0 2013-06-28 15:58:25 -07:00
Steve Heffernan c82611d506 Rotating CHANGELOG 2013-06-28 15:56:43 -07:00
Steve Heffernan ed8ed4dd94 Merge branch 'stable' into release/4-1
Conflicts:
	CHANGELOG.md
	contrib.json
	src/js/cdn.js
2013-06-28 15:48:33 -07:00
Steve Heffernan 9f647ef081 Fixed an issue where the tag player reference wasn't getting killed in the minified version 2013-06-28 15:42:47 -07:00
Steve Heffernan c616695e4d Fixed an issue where tag was undefined in iOS 2013-06-28 15:02:21 -07:00
Steve Heffernan 52751a0d67 Adding line to CHANGELOG 2013-06-28 13:07:05 -07:00
Steve Heffernan ffd308e305 Close GH-609: Captions fixes. Fixes #564, Fixes #542 2013-06-28 13:06:50 -07:00
Steve Heffernan b4a07a3d9d Adding line to CHANGELOG 2013-06-28 13:04:00 -07:00
Steve Heffernan db97df69dc Close GH-606: Fix IE9 canPlayType error. Fixes #519 2013-06-28 13:03:38 -07:00
BCJwhisenant 8f45f93c84 A small substitution 2013-06-27 15:21:19 -04:00
BCJwhisenant b6667dfaf6 changes to the contrib guide, based on Apurva's review. 2013-06-27 15:08:10 -04:00
Steve Heffernan 23fc4cca35 Adding line to CHANGELOG 2013-06-26 15:06:10 -07:00
Gary Katsevman 00a043f1e1 Close GH-470: Augment userAgent detection. 2013-06-26 15:05:50 -07:00
BCJwhisenant 9abe53a32e updated the contrib guide to use contribflow commands
fixed a typo
2013-06-26 16:02:34 -04:00
Steve Heffernan 8e5cf7a69d Fixed up some changelog issues 2013-06-24 13:00:19 -07:00
Steve Heffernan fd39878f8b Adding line to CHANGELOG 2013-06-24 12:48:11 -07:00
Steve Heffernan 1ddef27903 Close GH-588: Export bufferedPercent. 2013-06-24 12:47:47 -07:00
Steve Heffernan 19a33cc7c7 Adding line to CHANGELOG 2013-06-24 12:38:30 -07:00
Jon Zepernick 02a1057ff4 Close GH-593: When autoplay = true, delete tag.poster instead of setting to null. 2013-06-24 12:38:05 -07:00
Steve Heffernan a040ce61ad Adding line to CHANGELOG 2013-06-24 12:08:30 -07:00
Sean Bloomfield 042076043b Close GH-581: export Component.prototype.fadeIn/Out. 2013-06-24 12:07:39 -07:00
Steve Heffernan 38d119e75d Merge pull request #585 from fluf1024/patch-1
Changed VideoJS -> videojs in api.md
2013-06-24 11:40:39 -07:00
fluf1024 93c6645744 Changed VideoJS -> videojs in api.md
I think, it's the proper name of the component in the default set.
2013-06-20 08:13:02 +02:00
Steve Heffernan 85c6b46ec8 Merge pull request #576 from Mikhus/master
Some minor code improvements
2013-06-17 11:19:41 -07:00
mstadnyk 1e199da117 Code guidelines fixed 2013-06-17 01:02:29 +03:00
mstadnyk 3a40dcd883 Several minor code improvements.
Actually, tracks.js contains several pieces of code which could
be re-written more effectively. The problem is that in some places
there are conditional checks like this:

    if (condition) {
        call_setter( true);
    } else {
        call_setter( false);
    }

which could be re-written to:

    call_setter( condition);

This improvement saves some bytes of code length, traffic and should
also work more effectively by utilizing less machine resources
2013-06-17 00:18:21 +03:00
Steve Heffernan afc39f711f Normalized CDN language value 2013-06-12 14:44:14 -07:00
Steve Heffernan 8a728a80ac Added uglifyjs which somehow got dropped from #571 2013-06-11 15:35:14 -07:00
Steve Heffernan d932cffd50 Added line to changelog for 4.0.4 2013-06-11 15:29:20 -07:00
Steve Heffernan 6fe5513f30 Bump version to 4.0.4 2013-06-11 15:27:49 -07:00
Steve Heffernan 138b1381c2 Adding line to CHANGELOG 2013-06-11 15:25:40 -07:00
Steve Heffernan 60d389e1f8 Close GH-571: Add analtyics to current CDN version. Fixes #568 2013-06-11 15:25:19 -07:00
Steve Heffernan 93e3b38132 Adding line to CHANGELOG 2013-06-11 15:15:26 -07:00
Steve Heffernan b02f879bf3 Close GH-568: Google Analytics Tracking for CDN. 2013-06-11 15:14:36 -07:00
Steve Heffernan 9997d0a7ef Merge pull request #570 from nsufaisal/patch-1
Update api.md
2013-06-11 10:02:58 -07:00
nsufaisal 3dd0b1d234 Update api.md 2013-06-11 20:49:21 +06:00
Steve Heffernan d27c3102e9 Adding line to CHANGELOG 2013-06-05 10:28:13 -07:00
Steve Heffernan d5d97bd64f Close GH-560: Export global players object. 2013-06-05 10:27:38 -07:00
Steve Heffernan 0ddf8af452 Adding line to CHANGELOG 2013-06-03 13:20:47 -07:00
Steve Heffernan f6bd819c5c Close GH-555: Export requestFullScreen(). 2013-06-03 13:19:46 -07:00
Steve Heffernan 21cd77358a Adding line to CHANGELOG 2013-05-31 16:09:34 -07:00
Steve Heffernan 847e392e0c Close GH-524: Blocking user text selection by default on player components. fixes #46. 2013-05-31 16:09:07 -07:00
Steve Heffernan 8799984a8c Adding line to CHANGELOG 2013-05-31 10:31:57 -07:00
Steve Heffernan 0c4c30a3bd Close GH-553: Turn on tech method queuing. 2013-05-31 10:31:18 -07:00
Steve Heffernan 4db3dba068 Updated contrib.json to match new contribflow values 2013-05-31 09:50:16 -07:00
Steve Heffernan 46731c40c3 Merge branch 'master' of github.com:videojs/video.js 2013-05-31 09:48:18 -07:00
Steve Heffernan 5bc5c40f8a Updated changelog to match new contribflow template 2013-05-31 09:48:02 -07:00
Steve Heffernan d5fe1c40d8 Merge pull request #547 from DracoLi/patch-1
Updated API, changed `size` to `dimensions`
2013-05-29 10:47:01 -07:00
Draco Li 6251acdf56 Updated API, changed size to dimensions
There's no `size()` only `dimensions()`, so updated API to reflect this.
2013-05-29 12:03:40 -03:00
Steve Heffernan 0f21f86521 Merge branch 'stable' 2013-05-28 15:33:31 -07:00
Steve Heffernan ed5ac285c3 Adding line to CHANGELOG 2013-05-28 15:33:09 -07:00
Steve Heffernan 880be64f48 Bump version to 4.0.3 2013-05-28 15:31:11 -07:00
Steve Heffernan 753ce48e21 Close GH-546: Fix for exit-fullscreen bug in 4.0. fixes #497. 2013-05-28 15:29:42 -07:00
Philippe Normand 6b4d811b2f Close GH-515: createEl: dispose reference to cloned element. Fixes #514 2013-05-23 18:40:14 -07:00
Steve Heffernan baac2af4ab Merge branch 'stable' 2013-05-23 13:15:18 -07:00
Steve Heffernan 731ec4fa0b Adding line to CHANGELOG 2013-05-23 13:14:43 -07:00
Steve Heffernan 8dd88d1626 Bump version to 4.0.2 2013-05-23 13:12:43 -07:00
Steve Heffernan 0fe7348456 Close GH-535: Adding version numbers in build. Minifying CSS.. 2013-05-23 13:10:29 -07:00
Steve Heffernan a7dd81f82f Merge branch 'stable' 2013-05-22 18:36:12 -07:00
Steve Heffernan d4168cd2b6 Adding line to CHANGELOG 2013-05-22 18:34:50 -07:00
Steve Heffernan 36c92404c3 Bump version to 4.0.1 2013-05-22 18:16:13 -07:00
Steve Heffernan 1f23529cf0 Merge branch 'stable' 2013-05-22 17:25:12 -07:00
Steve Heffernan 68d5cb996a Close GH-532: Added ie fix to font loading.. 2013-05-22 17:01:55 -07:00
Steve Heffernan fe36ae172d Updated contrib.json to have org and project names. 2013-05-20 16:34:57 -07:00
Steve Heffernan a6a443bac3 Updated contrib.json to use new videojs org 2013-05-20 16:02:31 -07:00
Steve Heffernan b3d4ed6459 Added date to changelog 2013-05-20 15:02:26 -07:00
Steve Heffernan f4ac570297 Updated to new changelog layout. Deleted changelog2 test file. 2013-05-20 14:57:48 -07:00
Steve Heffernan 8c31278c2f Merge branch 'master' into stable 2013-05-20 13:27:47 -07:00
Steve Heffernan 623ea7bb0f Merge pull request #506 from martinduparc/patch-1
"addEvent" and "removeEvent" were replaced by "on" and "off"
2013-05-11 09:42:52 -07:00
Martin D. 9e65eb3618 "addEvent" and "removeEvent" were replaced by "on" and "off" 2013-05-11 08:18:16 -03:00
Steve Heffernan 0e4f3cfa08 Merge pull request #504 from dblandin/master
Update uncompressed default skin url
2013-05-10 10:41:29 -07:00
Devon Blandin c6c8cd1bd2 Update uncompressed default skin url 2013-05-10 12:34:36 -05:00
Steve Heffernan 07000db77d Updated swf location from /c to /4.0 2013-05-09 09:28:14 -07:00
Steve Heffernan 94c07756dc Updated docs. Changed _V_ to videojs. 2013-05-09 09:23:32 -07:00
Steve Heffernan 18c3853039 Merge pull request #495 from heff/feature/deploy
Feature/deploy
2013-05-08 22:37:07 -07:00
Steve Heffernan c59275583c Created a new deploy process for the new version 2013-05-08 22:30:52 -07:00
Steve Heffernan 65f4f1da96 Updated the font names to be shorter for the cdn. 2013-05-08 14:27:57 -07:00
Steve Heffernan 3acdb497d1 Updated version back to 4.0 2013-05-08 14:15:41 -07:00
Steve Heffernan 6c75c5ea34 Merge branch 'master' of git://github.com/videojs/video.js into feature/deploy
Conflicts:
	package.json
	src/css/video-js.css
2013-05-08 14:15:19 -07:00
Steve Heffernan d40bcc617d Updated deploy process and font icons. 2013-05-08 14:12:22 -07:00
Steve Heffernan 32519181c8 Merge pull request #493 from sh1ps/theme-changes
Style updates and updated license link in package.json
2013-05-08 14:11:39 -07:00
Matthew McClure 6eac0a44c4 added font files 2013-05-08 14:01:39 -07:00
Matthew McClure 55e2c99899 removed styles from pseudo elements to make broad styling possible. updated copyright link in package.json 2013-05-08 13:29:02 -07:00
Steve Heffernan 199b8f29da Bumped package version to 4.0.0 2013-05-06 11:45:42 -07:00
Steve Heffernan c02e1a4a99 Merge pull request #491 from heff/feature/fullscreen-fix
Triggering fullscreenchange again to fix fullscreen button status. fixes #388
2013-05-06 10:48:19 -07:00
Steve Heffernan d1def0bcca Triggering fullscreenchange again to fix fullscreen button status. fixes #388 2013-05-06 10:44:59 -07:00
Steve Heffernan 90ac799d57 Testing new changelog options 2013-05-06 10:24:18 -07:00
Steve Heffernan 7cc733a8df Rotating CHANGELOG 2013-05-03 23:05:33 -07:00
Steve Heffernan a799a506f4 Merge pull request #489 from heff/feature/position-fix
Fixed vjs.findPosition. fixes #488
2013-05-03 12:51:24 -07:00
Steve Heffernan d395f6e684 Fixed vjs.findPosition. fixes #488 2013-05-03 12:49:55 -07:00
Steve Heffernan 886d555a47 Merge pull request #487 from heff/feature/clean-files
Broke up controls.js into multiple files.
2013-05-02 19:06:54 -07:00
Steve Heffernan 05ab972a1a Broke up controls.js into multiple files.
Cleaned up media.js files also.
2013-05-02 19:03:29 -07:00
Steve Heffernan 997b327fcd Merge pull request #486 from heff/feature/no-controls
Make controls = false work as expected
2013-05-02 18:39:51 -07:00
Steve Heffernan 64f7729b72 Added a disable method on components.
Used it to hide the controls when player.controls is false.
Also hiding big play button and poster if controls are false.
2013-05-02 18:35:32 -07:00
Steve Heffernan d54f473670 Wrote a test for controls changes. 2013-05-02 17:15:37 -07:00
Steve Heffernan 4f319a2174 Fixed muted errors in tests from previous pull request. Removed error captureing that was preventing test breakage. 2013-05-02 17:07:05 -07:00
Steve Heffernan 0f115df0b6 Merge pull request #485 from heff/feature/swf
Updated to latest version of the swf. closes #390 closes #435
2013-05-02 15:54:29 -07:00
Steve Heffernan 6d1afd059f Updated to latest version of the swf. closes #390 closes #435 2013-05-02 15:52:15 -07:00
Steve Heffernan 78ec7f0f16 Merge pull request #482 from gkatsev/verticalVolumeMenu
Make Volume Menu Button default to vertical.
2013-05-02 15:20:44 -07:00
Gary Katsevman 5dc9c0f2ae Make volumeBar return 0% when muted. 2013-05-02 18:14:11 -04:00
Gary Katsevman 89b6f42e99 Make Volume Menu Button default to vertical.
This can be configured by giving the volumeMenuButton, an option like
`{volumeBar: {vertical: false}}`. This can also be used to pass other
options to the volumeBar.
2013-05-02 16:54:09 -04:00
Steve Heffernan b2539cb1ea Merge pull request #472 from drench/351-localStorage-catch
Catch localStorage security exceptions. Fixes #351
2013-05-01 16:33:07 -07:00
Steve Heffernan beb3a94135 Merge pull request #471 from sh1ps/master
Switched license from LGPLv3 to Apache2.0
2013-05-01 16:29:10 -07:00
Steve Heffernan f42c96e012 Updated to use vjs.USER_AGENT string. 2013-05-01 16:20:41 -07:00
Steve Heffernan 9c6dbea344 Merge pull request #469 from dmlap/android-fullscreen-pr
Android browsers support video element fullscreen
2013-05-01 16:18:19 -07:00
Steve Heffernan fa79564802 Merge pull request #477 from gkatsev/verticalSlider
Vertical slider
2013-05-01 16:13:00 -07:00
Steve Heffernan e21dd3649c Merge pull request #481 from heff/feature/skin
Updated to new skin design
2013-05-01 15:59:51 -07:00
Steve Heffernan c2f8930e99 Updated controls to not show by default. 2013-05-01 15:35:59 -07:00
Steve Heffernan fb603745dc Fixed some styles and menu element buildling. 2013-05-01 15:31:44 -07:00
Steve Heffernan 4faa411ece Added new CSS. Fixed slider classname issue. 2013-05-01 14:49:37 -07:00
Steve Heffernan 7ea76951c6 Updated track buttons to use new menu buttons class. 2013-05-01 14:39:00 -07:00
Steve Heffernan 5172875afb Updated player to use native controls on mobile devices. 2013-05-01 13:56:09 -07:00
Steve Heffernan 0633a93837 Removed multi-ball-specific spinner code. 2013-05-01 13:48:54 -07:00
Steve Heffernan c548229e73 Added volumeMenubutton class 2013-05-01 13:46:05 -07:00
Steve Heffernan e47850a152 Updated seekhandle and volume handle to use slider handle. 2013-05-01 13:34:40 -07:00
Steve Heffernan ae49f1efc8 Added a class to the button inner div. 2013-05-01 13:14:30 -07:00
Gary Katsevman fc96ef68ac fix jshint errors 2013-05-01 13:02:05 -04:00
Gary Katsevman b36665ebcd Add a few tests for vjs.findPosition 2013-05-01 12:03:10 -04:00
Gary Katsevman 9acacaac37 Null check gBCR 2013-05-01 12:02:51 -04:00
Steve Heffernan c92991e2fc Merge pull request #480 from heff/feature/menu
Added a menu button class as a super class to the track buttons and a vo...
2013-04-30 19:07:15 -07:00
Steve Heffernan 99373ce4b6 Added a menu button class as a super class to the track buttons and a volume button 2013-04-30 19:00:14 -07:00
Steve Heffernan 9c6c384704 Merge pull request #479 from heff/feature/slider
Added a new Slider Handle class to share code between subclass sliders
2013-04-30 18:17:54 -07:00
Steve Heffernan e7fa682976 Added a new Slider Handle class to share code between subclass sliders
Also added a click preventDefault to protect from triggering parent menu buttons.
2013-04-30 18:10:38 -07:00
Steve Heffernan d270a16b32 Merge pull request #478 from heff/feature/content-el
Added an optional contentEl for compontents.
2013-04-30 17:45:58 -07:00
Steve Heffernan f0d3680fe4 Added an optional contentEl for compontents.
This allows you to define a different element to append children to as opposed to the main component element. Because sometimes components require more than one element to create their structure. e.g. a menu button.
2013-04-30 17:27:36 -07:00
Gary Katsevman ff56061853 Make sure to return an object if box doesn't exist 2013-04-30 19:18:21 -04:00
Gary Katsevman 0154d04535 Make sliders able to handle vertical sliders in calculateDistance.
This takes a 'vertical' option on the slider bar itself. If set, it will
use the top and pageY values to calculate the slider positions.
2013-04-30 19:02:49 -04:00
Gary Katsevman 22bbd00ac9 Change vjs.findPosX to vjs.findPosition to return both left and top.
This also removes the fallback method that doesn't use the
getBoundingClientRect because according to MDN[1] and PPK[2], it should
be supported just about everywhere.

[1] https://developer.mozilla.org/en-US/docs/DOM/element.getBoundingClientRect#Browser_compatibility
[2] http://www.quirksmode.org/dom/w3c_cssom.html#documentview
2013-04-30 18:59:02 -04:00
Steve Heffernan 04feef9303 Merge branch 'issue424-pr' of git://github.com/dmlap/video-js into dmlap-issue424-pr
Conflicts:
	src/js/media.html5.js
2013-04-29 16:10:37 -07:00
Steve Heffernan c7823ceb68 Merge pull request #475 from gkatsev/fix/androidBrowser2
Dont enable onClick play state toggling on android via the MediaTechController
2013-04-29 15:25:34 -07:00
Gary Katsevman 85cf34017a forgot a semicolon >.< 2013-04-29 18:12:32 -04:00
Gary Katsevman a681d172f2 Dont enable onClick play state toggling on android via the MediaTechController 2013-04-29 17:54:21 -04:00
Steve Heffernan 8c52d02c21 Merge pull request #468 from mente/fullscreen
fixes fullscreen using html5 technology
2013-04-29 13:52:28 -07:00
David LaPalomento 7fab906843 Remove xEnterFullScreen fallback
Only the video element supports enterFullScreen() so don't use it as a fallback if requestFullScreen isn't available.
2013-04-29 14:44:07 -04:00
Danny Rench 90f975c20e Catch localStorage security exceptions. Fixes #351 2013-04-28 19:53:28 -05:00
Matthew McClure 247a725cad added license to readme 2013-04-28 17:35:21 -07:00
Matthew McClure 016e94f889 Merge remote-tracking branch 'upstream/master' 2013-04-28 17:34:08 -07:00
David LaPalomento 8524ad9817 Android browsers support video element fullscreen
Modify the UA check in media.html5 for whether a video element supports enterFullScreen to return true for Android WebKit/Chrome browsers.
2013-04-26 12:38:48 -04:00
Alex Vasilenko 01104ef2a4 fixes fullscreen using html5 technology 2013-04-26 18:52:23 +03:00
Steve Heffernan 7199b91f4d Merge pull request #459 from gkatsev/issue/fixEvents
Make preventDefault and stopPropagation call the corresponding methods on the actual event
2013-04-25 12:29:53 -07:00
Steve Heffernan 623bb75267 Merge pull request #458 from gkatsev/lockShowing
Make lockShowing apply a css class instead of modifying styles directly....
2013-04-25 12:29:28 -07:00
Gary Katsevman 83b007504f Make vjs-lock-showing less specific but with display !important 2013-04-25 15:13:23 -04:00
David LaPalomento 9576710b2f Update minify task to work with grunt-cli 0.1.6
It looks like the newer version of grunt-cli has changed how options objects are forwarded to tasks. The minify (Google closure compiler) task was looking for configuration in the wrong location and the new location no longer automatically expanded path wildcard patterns.
2013-04-23 10:45:05 -04:00
Matthew McClure 07d90fb6e0 grunt now adds copyright comment to top of video.js 2013-04-22 18:48:34 -07:00
David LaPalomento 7d67abdae8 Activate the video element when video-level fullscreen is requested. Fix #424
Prime the video element for programmatic access by quickly playing and pausing when entering fullscreen. Only attempt this if the video is paused and no content has been loaded yet. Do so in a setTimeout of 0 because iOS 6.1 devices go into a loop of continuously pausing and playing if you play and pause synchronously while attempting to enter fullscreen. Don't fire `fullscreenchange` if we're forced to use the video elements fullscreen mode because we don't properly detect when exiting fullscreen and it leaves the player stretched out to fill the entire browser window when the user returns from watching.
2013-04-22 18:45:42 -04:00
Gary Katsevman c4d07c402d Make preventDefault and stopPropagation call the corresponding methods on the actual event 2013-04-22 17:23:20 -04:00
Gary Katsevman c0726d20f0 Make lockShowing apply a css class instead of modifying styles directly. Adress #427 2013-04-22 16:07:41 -04:00
Steve Heffernan f81b369955 Merge pull request #457 from gkatsev/fix/calculateDistance
Fix calculateDistance on slider to work in iframes and all devices.
2013-04-22 11:26:51 -07:00
Steve Heffernan 229f5028e1 Merge pull request #456 from gkatsev/feature/issue448
Add videojs to window directly. Fix #448
2013-04-22 11:24:05 -07:00
Steve Heffernan 8494080c90 Merge pull request #454 from dmlap/issue453
Move html tech feature detection earlier than superclass constructor. Fix #453
2013-04-22 11:23:28 -07:00
Steve Heffernan ea792587d5 Merge pull request #449 from eXon/master
Let external libs use the extend
2013-04-22 11:20:50 -07:00
Gary Katsevman a8e87f80ed Make slider use changedTouches if available. Also, test to make sure we get the correct ratio for calculateDistance 2013-04-22 13:57:42 -04:00
Gary Katsevman b1b0ac0377 Add videojs to window directly. Fix #448 2013-04-22 11:32:17 -04:00
Matthew McClure 953ae8abec Added copyright banner to top of distribution video.js 2013-04-21 22:44:36 -07:00
Matthew McClure 23c647eecb switched license over from LGPLv3 to Apache2 2013-04-21 20:36:44 -07:00
David LaPalomento 99c982c103 Move html tech feature detection earlier than superclass constructor
The MediaTechController calls createEl during its initialization to construct the actual video element used for playback. On iOS, the video element must be recreated during this process so that it doesn't become unresponsive. Make sure that we determine whether recreating the video elemen is necessary before calling the superclass constructor.
2013-04-19 20:14:48 -04:00
Steve Heffernan 5ff2b1d061 Merge pull request #450 from gkatsev/feature/iife-wrapper
Make the minified output be wrapped in an IIFE, fix #402.
2013-04-18 14:02:49 -07:00
Gary Katsevman c172ed715b Make the minified output be wrapped in an IIFE, fix #402. 2013-04-18 15:27:14 -04:00
Benoit Tremblay fd798f3dac Fix script after video DOM
You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)
2013-04-18 00:49:59 -03:00
Benoit Tremblay 7a0155aa03 Check the unobfuscated init so we can extend outside the lib 2013-04-17 23:07:04 -03:00
Steve Heffernan a73f0ab6f0 Updated event fixing to support IE8 and Firefox 2013-04-16 16:25:12 -07:00
Steve Heffernan bdb4456c62 Fixed an issue where Firefox would lose the type of an event.
Because it returns false for event.hasOwnProperty('type');
2013-04-16 15:58:57 -07:00
Steve Heffernan 83553b6540 Merge pull request #444 from heff/feature/browser-tests
First pass at automated multi-browser/device testing. closes #419
2013-04-15 13:25:22 -07:00
Steve Heffernan 3b48be921e First pass at automated multi-browser/device testing. closes #419
I've got a way to run tests across every browser and device out there except for IE8, and IE8 should work except I'm running into a Browserstack bug that I've let them know about.

It uses a project called bunyip, which internallt uses Yeti (YUI), Pagekite, and Browserstack.

Next steps include:
  - Making it all automatic. Right now you have to wait for browsers to connect and then manually hit enter when they have.
  - Make it a grunt task
  - Document it all so others can use it

I think this is close enough for me to close the milestone 4.0 issue.
2013-04-12 16:51:04 -07:00
Steve Heffernan 2138d4f2a0 Close GH-425: Backing out goog.inherits and adding back the previous inheritance API. fixes #415. 2013-04-09 13:43:35 -07:00
Benoit Tremblay 3a32f44f23 Close GH-432: Additional exports for external techs. 2013-04-09 13:18:55 -07:00
Steve Heffernan c74f39318f Updated grunt and grunt-contrib versions to fix PhantomJS bug
Also changed some additional code to fix new jshint issues found by new jshint version.
2013-04-09 10:42:41 -07:00
Steve Heffernan 0aa814fae7 Fixed another issue blocking the play event from triggering in Flash 2013-04-08 19:20:53 -07:00
Steve Heffernan 896d0333c7 Fixed a bug where play event was no longer being triggered. 2013-04-08 18:53:19 -07:00
Steve Heffernan dbd02fb05a Close GH-437: Made IE updates from CorwinT. Closes #309. Closes #364.. 2013-04-08 16:23:41 -07:00
Steve Heffernan bafaf49e7e Close GH-433: Update contribflow version and add contrib.json. 2013-04-08 13:55:50 -07:00
Steve Heffernan 78a74536e5 Merge pull request #360 from mente/minified
correctly expose ready and dispose in minified version
2013-04-05 15:04:21 -07:00
Steve Heffernan a59822065d Merge pull request #417 from RavWar/controls_css_rework
Lock controls when video is paused
2013-04-05 14:56:01 -07:00
Alex Vasilenko 6e5407596e run grunt test only for travis 2013-04-06 00:14:12 +03:00
Alex Vasilenko 2ff8a2bba2 minify both source and tests for test grunt task 2013-04-06 00:12:41 +03:00
Steve Heffernan 496fa982e0 Merge pull request #426 from dmlap/feature/poster-attribute
Do not remove poster attribute when creating the player
2013-04-04 16:03:25 -07:00
David LaPalomento 6f5e49fc16 Use accessors to transfer the poster attribute
When transferring the poster attribute from the container to the tech in mediafaker, use the accessor methods instead of directly referencing the private properties.
2013-04-04 18:56:52 -04:00
Steve Heffernan a9352922d9 Merge pull request #399 from dmlap/issue398
Fix #398
2013-04-04 13:02:43 -07:00
Steve Heffernan 1faa39db5b Merge pull request #265 from EricR/patch-1
techOrder should be an array of strings
2013-04-04 12:48:13 -07:00
Steve Heffernan 143e53febc Added isReady = false on unloadTech. fixes #214, fixes #211 2013-04-04 11:06:13 -07:00
David LaPalomento 99a973e529 Do not remove poster attribute when creating the player
We use a div with a background image to simulate the poster image so that we can use a single poster implementation for flash and html. It may be desirable on some platforms to use the native poster image, however. On iPhones for instance, the simulated poster image covers up the native play button and can make it difficult to figure out where to touch to initiate playback. By keeping the poster attribute on the underlying video element, you can hide the simulated poster to get a native look-and-feel on that platform.
2013-04-04 09:55:27 -04:00
Steve Heffernan 6bd4651767 Merge pull request #421 from BCjwhisenant/contrib-guide-node
Fix for #411 - change to CONTRIBUTING.md about phantomjs and Node 0.10.x
2013-04-03 10:37:57 -07:00
Jim Whisenant ece4f7e5e9 Added a note about the known issue between phantomjs and Node 0.10.x 2013-04-02 21:58:37 -04:00
Ravwar baeff8030d Fix controls locking and unlocking functionality by:
1. Switch control bar default hiding styles
2. Fix typos
3. Remove duplicate function
2013-04-03 02:57:59 +04:00
David LaPalomento 65687aa3d0 Rename vjs-disabled to vjs-hidden
Disabled is a bit overloaded with visible but unusable controls, so use hidden instead. Re-arrange default styles a bit and use dom helper methods instead of the vjs-objection functions.
2013-04-02 16:17:30 -04:00
Steve Heffernan f1d957929c Merge pull request #404 from RavWar/fix_exports_duplicates
Remove duplicate code from exports
2013-04-01 16:26:14 -07:00
Steve Heffernan be63a06f54 Merge pull request #410 from dsteinbrunner/patch-1
typo fix
2013-04-01 16:00:40 -07:00
Jim Whisenant 7b7452ff9f added a note to advise users to stick with an earlier version of Node.js until the known issue with phantomjs is fixed.
fixes #477
2013-03-29 18:13:49 -04:00
David Steinbrunner 1e640b9790 typo fix 2013-03-29 17:23:38 -03:00
Steve Heffernan 22c3f47546 Merge pull request #407 from gkatsev/feature/duration-display
Make the Duration Display not display the duration as a negative number
2013-03-27 15:08:40 -07:00
Gary Katsevman e08851a2cc Make the Duration Display not display the duration as a negative number 2013-03-27 14:35:34 -04:00
Ravwar e41472f0e5 Remove duplicate code from exports 2013-03-27 13:43:11 +04:00
Steve Heffernan a703294275 Merge pull request #400 from heff/feature/contrib-flow-plugin
Adding contribflow as grunt module/package
2013-03-25 16:56:52 -07:00
Steve Heffernan e0b2e470f4 Added contribflow as a package. 2013-03-25 16:52:36 -07:00
David LaPalomento cf52750a57 Update tests
Check for the presence of `vjs-disabled` instead of whether the display is set to none for volume and mute control tests.
2013-03-24 18:51:09 -04:00
David LaPalomento e55e5a7313 Fix #398
Use a new CSS class 'vjs-disabled' to disable display of the volume controls. This allows custom styles the flexibility to use methods other than `display:block` to layout the controls.
2013-03-24 17:40:35 -04:00
Steve Heffernan 9b25484a92 Merge pull request #375 from gkatsev/touchevents
Touchevents support for the control bar and seekbar
2013-03-22 14:56:02 -07:00
BCjwhisenant c9bba46846 cleaned up more grammar and syntax. 2013-03-22 14:16:27 -04:00
BCjwhisenant d40c33cf65 another clarification to CONTRIBUTING.md 2013-03-22 14:14:22 -04:00
BCjwhisenant 30949a3c83 more updates to CONTRIBUTING.md 2013-03-22 14:11:03 -04:00
BCjwhisenant 5dbb9aabc7 more changes to the CONTRIBUTING.md guide
added guides for the grunt tasks for feature and issue management
2013-03-22 14:07:21 -04:00
Steve Heffernan 1bf4502766 Merge pull request #389 from tagawa/optimization
Reduced PNG filesize by ~4kb
2013-03-21 14:38:38 -07:00
Steve Heffernan 7c8af82c07 Merge pull request #392 from bitgirder/391-json-error-message
Adding more detail to JSON.parse() error
2013-03-21 14:28:59 -07:00
Gary Katsevman a6578d5a5d Remove changedTouches from fixEvent because it doesn't work currently. Add comment about it in the calculateDistance method 2013-03-20 15:27:42 -04:00
Gary Katsevman 37c463d37a Don't prevent mouse actions when paused to make sure Android's Play overlay is usable. 2013-03-20 15:19:18 -04:00
Gary Katsevman bae6fa1ab4 Remove showBigPlayButton 2013-03-20 15:18:05 -04:00
Jonathan Gold c71203bd56 Adding more detail to JSON.parse() error 2013-03-19 17:32:44 -07:00
BCjwhisenant dc9934b765 Fixed (hopefully) some minor list formatting 2013-03-19 14:03:05 -04:00
BCjwhisenant bf804d5571 Merge commit '80802e68d8f00ac27799a968295b11bd8c8ad19c' into contrib-guide 2013-03-19 13:58:55 -04:00
BCjwhisenant c17d5890d0 clarified some language
added a note about turning off npm colors for windows users
2013-03-19 12:32:13 -04:00
Gary Katsevman 5b324c05e1 Fix indentation 2013-03-19 11:48:13 -04:00
Gary Katsevman 452f9b3971 remove mouseOff 2013-03-19 11:40:09 -04:00
Gary Katsevman da4400f437 remove console.log 2013-03-18 16:36:55 -04:00
Gary Katsevman 9555b80cc0 Make buttons accept tap events as well as click. Prevent mouseevents when touch is available 2013-03-18 16:36:55 -04:00
Gary Katsevman f8706bbffe Make slider touch/mouse events removable 2013-03-18 16:36:55 -04:00
Gary Katsevman 85df20d736 Fix slider for android 2013-03-18 16:36:55 -04:00
Gary Katsevman cbcff6a168 Add { 2013-03-18 16:36:55 -04:00
Gary Katsevman c94ceca337 Make BigPlayButton show up when paused. Add 'showBigPlayButton' event to allow users to cancel that. 2013-03-18 16:36:55 -04:00
Gary Katsevman 57c5cefe0f initial support for toggling controlbar via touch 2013-03-18 16:36:55 -04:00
Gary Katsevman 95e87be2d2 make seekbar seekable on mobile devices. 2013-03-18 16:36:55 -04:00
tagawa 4d74fb3b7c Reduced PNG filesize by ~4kb 2013-03-18 15:28:34 +09:00
BCjwhisenant 80802e68d8 Fixed formatting in some of the instructions 2013-03-15 22:30:25 -03:00
BCjwhisenant ff957fa9f5 changes to the contributing guide. 2013-03-15 21:20:40 -04:00
Steve Heffernan 610974854c Merge pull request #383 from heff/feature/track-default
Adding default to 'off' for track lists from #190
2013-03-15 16:13:19 -07:00
Steve Heffernan 59cdd4edcd Adding default to 'off' on track menus from #190 2013-03-15 16:08:40 -07:00
Steve Heffernan 32755ca855 Merge branch 'master' of git://github.com/zencoder/video-js 2013-03-15 14:03:59 -07:00
Jake Harvey f3af77e985 Close GH-378: #376 Removing Helvetica from font-family declarations.. 2013-03-15 13:52:40 -07:00
Steve Heffernan 8c6138797a Merge branch 'master' of git://github.com/zencoder/video-js 2013-03-09 15:45:09 -08:00
Steve Heffernan 8bc5fb055e Merge branch 'master' of github.com:zencoder/video-js 2013-03-09 13:19:16 -08:00
Steve Heffernan d147b1ae2f Merge branch 'optional_resize' of git://github.com/mente/video-js into mente-optional_resize closes #359
Conflicts:
	test/unit/component.js
2013-03-09 13:18:07 -08:00
Alex Vasilenko a3b9b50e8b vjs.Component.dimension accepts 'auto' as value
test case for vjs.Component.dimension with 'auto'
2013-03-09 10:39:28 +02:00
Steve Heffernan de5acf4fe7 Merge pull request #368 from dmlap/issue367
Fixes #367
2013-03-08 14:45:18 -08:00
David LaPalomento 7e0ee0c799 Fix minified property access
Use a string literal to reference the tech's player property so the access isn't mangled by closure.
2013-03-08 10:13:01 -05:00
David LaPalomento 0ba7166636 Fixes #367
If you are quick, you could get videojs to wrap the HTML video element twice on iOS. The video element has to be recreated after moving on iOS but we weren't re-associating it with the player object. When autoSetup swung through, it would re-initialize the video element and create a player within a player.
2013-03-07 20:57:52 -05:00
Steve Heffernan bc723acb06 Merge pull request #361 from Axonn/fix-component-child-adding
Fix ability to add child after closure compiled
2013-03-07 16:39:18 -08:00
Alex Vasilenko dcc66cb14c recompile sources before starting tests via npm test 2013-03-07 23:32:00 +02:00
Alex Vasilenko e1409f8972 minified lib files renamed to minified api 2013-03-07 23:24:52 +02:00
Alex Vasilenko 264e3aeb38 expose vjs.Component.dispose 2013-03-07 23:23:02 +02:00
Alex Vasilenko 696097ca38 Merge branch 'optional_resize' of github.com:mente/video-js into optional_resize
* 'optional_resize' of github.com:mente/video-js:
  proper vertical-align on default skin
2013-03-07 23:21:23 +02:00
Alex Vasilenko cf2fd9cbe8 use {width: "auto", height: "auto"} to let css decide video dimensions 2013-03-07 23:21:08 +02:00
corwin.tomkinson 93f8737fc7 Fix ability to add child after closure compiled 2013-03-07 11:37:51 +00:00
Steve Heffernan f11c5d3ca9 Merge pull request #340 from Sundrique/fix-parent-el-option
Fix parentEl tech option.
2013-03-06 16:57:40 -08:00
Steve Heffernan eb3f1aca8a Merge pull request #348 from Wellming/master
fix iPhone and iPad detection.
2013-03-06 16:45:51 -08:00
Steve Heffernan 253c510da0 Merge pull request #354 from dmlap/issue347
Fix Issue #347
2013-03-06 16:36:59 -08:00
David LaPalomento 888f04484a Remove phantom UA check
The volume controls and mute toggle are guarding against not having a tech present, so it's no longer necessary to mock the tech for all command-line tests. Individual tests continue to do so using PlayerTest.makePlayer.
2013-03-06 09:45:18 -05:00
David LaPalomento f1e90d65f2 Block defineSetter test for older IE
__defineSetter__ doesn't work on some versions of IE, so just ignore the volume/mute toggle tests when run on those browsers.
2013-03-05 18:07:35 -05:00
Alex Vasilenko 1bceadf094 expose correct dispose method
testcase for correct dispose method
2013-03-05 23:23:01 +02:00
Alex Vasilenko 2de8ad6f63 ready method exposed in minified version
test case for minified lib and not minified code
2013-03-05 22:39:43 +02:00
David LaPalomento ad98bebf55 Reformat var statements
Declare them in a single line at the top of the function and initialize them later.
2013-03-05 13:38:47 -05:00
Alex Vasilenko e4c9588048 proper vertical-align on default skin 2013-03-05 19:02:59 +02:00
Alex Vasilenko 9b52edea07 do not force default 300x150 if no width/height found 2013-03-05 18:35:55 +02:00
Steve Heffernan 29297bd37b Merge pull request #356 from gkatsev/gitignore
add swp files to gitignore
2013-03-04 17:12:44 -08:00
Gary Katsevman 754f590778 add swp files to gitignore 2013-03-04 18:21:11 -05:00
David LaPalomento b662139708 Remove unused variable
Get rid of a variable that was copy-pasted along from a previous incarnation of this fix.
2013-03-04 14:53:27 -05:00
Steve Heffernan f72a90f4a8 Merge pull request #353 from bcjwilson/master
Poster image to stretch both horizontally and vertically while staying centered and maintaining aspect ratio.
2013-03-04 11:22:10 -08:00
David LaPalomento ab25a823b7 Fix 347
Hide volume slider and mute toggle when the current tech doesn't support adjusting video volume. Added controls specific test cases. Volume-related controls retest whether to display themselves whenever `loadstart` fires.
2013-03-02 00:00:23 -05:00
Jim R. Wilson f8385f06d0 changing poster image to div with backgroundImage
The existing poster implementation uses an <img> tag
stretched horizontally with capped max-height. This
works in some cases like pillar-boxing when the poster
is not as wide as the player. However it fails to
letter box when the player is taller than the poster.

This change uses a stretched div with background-image
and backround-size to create a vertically aligned
poster image which stretches in both directions to fit
while maintaining aspect ratio.

For browsers which do not support backgroundSize (IE8)
the original <img> based strategy is used as a fallback.
2013-03-01 17:45:07 -05:00
Steve Heffernan 6a6b46cbcf Merge branch 'master' of git://github.com/zencoder/video-js 2013-02-28 16:37:52 -08:00
Steve Heffernan 3d617476a5 Merge pull request #349 from bcjwilson/master
formatting and spelling connections readme
2013-02-25 15:08:18 -08:00
Jim R. Wilson 50e7fac830 revert excuse-our-dust message back to h3, looked better that way 2013-02-25 17:15:47 -05:00
Jim R. Wilson e005f1a505 normalizing markdown markup, whitespace, spelling 2013-02-25 17:13:58 -05:00
Jim R. Wilson b681af9cf8 sp, gettign->getting 2013-02-25 17:05:04 -05:00
Steve Heffernan 34dfaec5ca Merge branch 'master' of git://github.com/zencoder/video-js 2013-02-24 17:50:55 -08:00
Steve Heffernan 496c699298 Updated to specific version of grunt-contrib-qunit to fix travis CI build errors 2013-02-24 15:20:17 -08:00
Wellming Li c647b436aa fix iPhone and iPad detection. 2013-02-24 17:56:30 +08:00
Steve Heffernan fa29d9ac86 Merge remote-tracking branch 'upstream/master' 2013-02-22 22:56:09 -05:00
David LaPalomento 60f9b505f1 Close GH-346: Remove need for good.require/good.provide. 2013-02-22 22:26:58 -05:00
Steve Heffernan 191a9d671d Merge pull request #345 from Axonn/344-component-exports
Rename component method exports. Fixes #344
2013-02-20 07:45:05 -08:00
corwin.tomkinson 4f18a6bd97 Rename component method exports. Fixes #344 2013-02-20 14:59:22 +00:00
Steve Heffernan 6fffd7e77b Merge pull request #301 from gdkraus/291-accessibility
Accessibility improvements for the player
2013-02-15 16:22:05 -08:00
alexsandrovsky eda21b7b22 Fix parentEl tech option.
Player cannot find parentEl option after minification, so flash tech fails.
2013-02-15 23:31:31 +03:00
Greg Kraus dd9f1603a4 Provide more information to screen reader users about the duration time 2013-02-14 19:27:54 -05:00
Greg Kraus f5b4980718 resolved conflicts with upstream master 2013-02-14 18:11:43 -05:00
Steve Heffernan 4e5a85a24a Merge pull request #297 from ptrin/patch-1
Fixed a broken markdown link
2013-02-13 16:33:21 -08:00
Steve Heffernan 0373d15c2f Merge pull request #314 from Sundrique/313-attributes
313 Save all video tag attributes while moving media element in DOM
2013-02-13 16:27:48 -08:00
Steve Heffernan aa0ea90ee2 Merge pull request #316 from Sundrique/315-fullscreen-icon
315 Fullscreen button CSS rules for webkit and Firefox added
2013-02-13 16:23:10 -08:00
Steve Heffernan 7adede7b68 Merge pull request #320 from Sundrique/poster-visibility-fix
Fix poster component visibility
2013-02-13 16:20:39 -08:00
Steve Heffernan 1905e59bdb Merge pull request #321 from Sundrique/volume-handler-fix
Fix volume handler initial position
2013-02-13 16:19:21 -08:00
Steve Heffernan 2f3ef4099e Merge pull request #328 from BCjwhisenant/gruntfile-fix
Added code to replace Windows-style backslashes with Unix-style
2013-02-13 14:30:47 -08:00
BCjwhisenant 1da6396102 removed extraneous whitespace from Gruntfile
testing:
grunt and grunt test both successful
2013-02-13 15:32:48 -05:00
Greg Kraus 6c9e17dce2 Corrected duration time label to read 'time remaining' 2013-02-12 21:37:45 -05:00
Greg Kraus 07cda9583f Corrected the call to get the player width 2013-02-12 21:24:58 -05:00
Greg Kraus c6338728d8 Merge branch 'master' into 291-accessibility. Updating to the latest upstream code 2013-02-12 21:21:09 -05:00
jwhisenant f0f7c8917b Added code to replace Windows-style backslashes with Unix-style
forward-slashes

testing:
grunt successful
grunt test successful
2013-02-12 13:34:01 -05:00
Steve Heffernan deb28e63d9 Merge branch 'master' of github.com:heff/video-js 2013-02-11 17:24:28 -08:00
Gary Katsevman 2539f81bda fix test 2013-02-11 17:24:17 -08:00
Gary Katsevman 13327ce875 update plugins.js 2013-02-11 17:24:17 -08:00
David LaPalomento 0771e86338 Remove Up-Front Config Example
Get rid of the example code for configuring a plugin at creation time. There's already an example in the tutorial and it makes things a bit confusing.
2013-02-11 17:24:17 -08:00
David LaPalomento 9fed9241d0 Up-Front Plugin Config
Create an example of making a dynamic video element and loading a plugin. Add that example to the tutorial.
2013-02-11 17:24:17 -08:00
David LaPalomento d21df1bc12 Remove Extra Flash Switch
Get rid of the extra switching logic to force Flash tech. Worth noting: it has to exist as a separate script tag because we're using document.write to insert video.js scripts.
2013-02-11 17:24:17 -08:00
David LaPalomento 6df5d30dff Plugin Doc and Example
Added most of a doc on building plugins. Still missing a section on up-front plugins. Created an example page that shows how to load a plugin.
2013-02-11 17:24:17 -08:00
Steve Heffernan 41d4641cea Merge pull request #327 from gkatsev/jshint
update plugins.js to follow jshint.
2013-02-11 13:41:42 -08:00
Gary Katsevman b3f6aa0078 fix test 2013-02-11 16:35:43 -05:00
Gary Katsevman 964e50a9ee update plugins.js 2013-02-11 16:18:12 -05:00
Steve Heffernan a2d4262c56 Merge pull request #326 from dmlap/plugin-tutorial
Plugin tutorial
2013-02-11 13:03:58 -08:00
Steve Heffernan d096a7d33e Merge pull request #325 from gkatsev/jshint
Add gruntfile and tests to Jshint linting
2013-02-11 12:36:56 -08:00
David LaPalomento 1636677995 Remove Up-Front Config Example
Get rid of the example code for configuring a plugin at creation time. There's already an example in the tutorial and it makes things a bit confusing.
2013-02-11 13:05:39 -05:00
Steve Heffernan 24ff4b1321 Merge pull request #304 from Commander147/246-Custom-Start-Time-Offset-Support
246 custom start time offset support
2013-02-11 09:56:35 -08:00
Steve Heffernan eadaa2f800 Merge pull request #322 from gkatsev/plugin
Add plugin event ordering test
2013-02-11 09:05:04 -08:00
David LaPalomento f4cba1649d Up-Front Plugin Config
Create an example of making a dynamic video element and loading a plugin. Add that example to the tutorial.
2013-02-11 10:28:57 -05:00
David LaPalomento c6d3481470 Remove Extra Flash Switch
Get rid of the extra switching logic to force Flash tech. Worth noting: it has to exist as a separate script tag because we're using document.write to insert video.js scripts.
2013-02-11 10:28:22 -05:00
David LaPalomento 1579e623b0 Plugin Doc and Example
Added most of a doc on building plugins. Still missing a section on up-front plugins. Created an example page that shows how to load a plugin.
2013-02-11 10:28:03 -05:00
Joseph Afework e23cf4a1c0 Changed 'firstplay' to match event functions
Changed the 'firstplay' method to the same form as the other event
functions
2013-02-10 22:45:00 -08:00
Gary Katsevman 103adfc1a5 update test/unit/plugins to adhere to jshint 2013-02-08 17:30:00 -05:00
Gary Katsevman b52cf5889e update test/unit/player to adhere to jshint 2013-02-08 17:29:04 -05:00
Gary Katsevman 31f76092f8 update test/unit/{media.html5,setup}.js to adhere to jshint 2013-02-08 17:27:04 -05:00
Gary Katsevman c13b96acbb update test/unit/lib to adhere to jshint 2013-02-08 17:25:33 -05:00
Gary Katsevman e6478e96de Update test/unit/events to follow jshint 2013-02-08 17:20:46 -05:00
Gary Katsevman 8f6d408802 Update test/unit/core to jshint 2013-02-08 17:18:49 -05:00
Gary Katsevman e1d4b2c827 Update test/unit/component to conform to jshint 2013-02-08 17:14:36 -05:00
Gary Katsevman 5f2b8fb831 update gruntfile to pass jshint 2013-02-08 17:08:31 -05:00
Gary Katsevman 51a22adc6a Update grunt and jshint to lint the gruntfile and test files 2013-02-08 17:02:39 -05:00
Gary Katsevman 4cefbf6bac check how many events were triggered 2013-02-08 16:13:35 -05:00
Gary Katsevman b8b23d00de Add a test using stop Propagation 2013-02-08 16:13:35 -05:00
Gary Katsevman c6a855cf74 add plugin test for event order 2013-02-08 16:13:35 -05:00
Aleksandr Sandrovskiy 730b4723b0 Fix volume handler initial position 2013-02-08 16:06:15 +03:00
Aleksandr Sandrovskiy 701c1d210c Fix poster component visibility 2013-02-08 15:50:56 +03:00
Joseph Afework 3353b75327 Fixed Start Time Offset
Implementation has been modified to utilize the firstplay event to set
the custom start time offset of the video.

If in the data-setup array an attribute of "starttime" is specified,
then the video will start playback from the passed index in seconds.

Note: Video will only start from this index on first play only.
2013-02-07 15:24:49 -08:00
Joseph Afework bce339c405 Revert "Added Support for custom video start time"
This reverts commit ab5f977d62.
2013-02-07 15:06:16 -08:00
Joseph Afework 3865d44b0e Revert "Added Flag for loop support with custom start time"
This reverts commit 120790a34a.
2013-02-07 15:06:16 -08:00
Aleksandr Sandrovskiy ba110169f5 Adds (removes) 'vjs-fullscreen' class on fullscreenchange event fixes #315 2013-02-08 01:11:33 +03:00
Steve Heffernan 0206ba9469 Added details about including issues in pull requests. 2013-02-07 14:06:38 -08:00
Aleksandr Sandrovskiy 4b960849c7 Changed 'createElement' method to 'createEl' 2013-02-08 00:44:03 +03:00
Aleksandr Sandrovskiy 3e555d77ea Changed V to vjs 2013-02-08 00:36:54 +03:00
Steve Heffernan 9f2b869135 Added mocha for Testling 2013-02-05 11:42:59 -08:00
Steve Heffernan 7954af0ba3 Updated sandbox example to point to correct source list 2013-02-05 11:09:07 -08:00
Aleksandr Sandrovskiy 042b81e566 315 Fullscreen button CSS rules for webkit and Firefox added 2013-02-05 21:58:17 +03:00
Aleksandr Sandrovskiy ecb7fb6b3e 313 Save all video tag attributes while moving media element in DOM 2013-02-05 20:11:45 +03:00
Steve Heffernan a84d1f85b8 Merge branch 'feature/plugins' 2013-02-04 16:20:29 -08:00
Steve Heffernan 4c2b129947 Adding line to CHANGELOG: Added a plugins interface 2013-02-04 16:20:29 -08:00
Steve Heffernan d38620bc7e Added test for overwriting existing plugin 2013-02-04 16:13:37 -08:00
Steve Heffernan 6d90be9967 Removed global plugin reference object. Not needed. 2013-02-04 13:56:50 -08:00
Steve Heffernan 1d79a1fa26 Updated plugins loop to use obj.each context option 2013-02-04 10:54:47 -08:00
Steve Heffernan 1f3a9f117d Update plugin tests to support compiling 2013-02-04 10:43:16 -08:00
Steve Heffernan cb77fb337f Added code to pass plugins tests 2013-02-04 10:31:53 -08:00
Steve Heffernan 6f2597cc8d Added test for the plugin interface. 2013-02-04 07:55:31 -08:00
Joseph Afework 120790a34a Added Flag for loop support with custom start time
The flag is used to determine if loop video is set to true,
once the video starts, options_['loop'] will always be set to false.
This allows the onEnded event to always be fired and allows us to set
custom start-time for when the video loops.

(When loop is normally set the onEnd end onPlay events are never called
their for this flag is necessary)
2013-01-26 16:37:04 -08:00
Joseph Afework ab5f977d62 Added Support for custom video start time
1) The Start Time can be set via the data-setup array
2) If 'start-time' is not present defaut time of 0 seconds is used
3) To set a custom start time for a video simply set start-time to be
equal to the number of seconds from the start of the video you would
like to begin at.
For Example: "start-time":80 means that the video will start at
timecode 00:01:20 -> HH:MM:SS
2013-01-26 16:33:55 -08:00
Steve Heffernan 8671f1ff91 Trying to test testling 2013-01-25 18:17:20 -08:00
Steve Heffernan 2aaff4bf88 Attempting to use testling 2013-01-25 18:07:19 -08:00
Steve Heffernan dc18f475f8 Changed to vjs.obj.function naming for object related functions.
Updated mergeOptions to just options.
2013-01-25 17:36:40 -08:00
Steve Heffernan c7d3b9ebf9 Updated grunt script to add CSS/PNG/SWF files dist. Also did some renaming of files and folders. 2013-01-25 15:22:14 -08:00
Greg Kraus e284c88afa Make the caption, subtitle, and chapter buttons more usable by screen reader users diff --git a/src/css/video-js.css b/src/css/video-js.css
index daa7080..4ed6ea2 100644

Signed-off-by: Greg Kraus <gdkraus@ncsu.edu>
2013-01-23 00:48:05 -05:00
Greg Kraus 20e9a9feb5 Fix bug with getting the ID of the track
Signed-off-by: Greg Kraus <gdkraus@ncsu.edu>
2013-01-23 00:48:05 -05:00
Greg Kraus b0f1a8404c Adjust the font size of the text tracks to make them proportionally larger when switching to fullscreen mode
Signed-off-by: Greg Kraus <gdkraus@ncsu.edu>
2013-01-23 00:47:50 -05:00
Greg Kraus c74c4e2c3a Provide more information to screen reader users about the progress bar, current time, and time remaining diff --git a/src/js/controls.js b/src/js/controls.js
index bb050b9..504913c 100644

Signed-off-by: Greg Kraus <gdkraus@ncsu.edu>
2013-01-23 00:32:17 -05:00
Greg Kraus 00a508508e Provide additional information for screen reader users on the status of the volume bar diff --git a/src/js/controls.js b/src/js/controls.js
index 2d5ad21..bb050b9 100644

Signed-off-by: Greg Kraus <gdkraus@ncsu.edu>
2013-01-23 00:32:17 -05:00
Greg Kraus 1d6e93d990 Change the button text when the button state is toggled, and indicate to screen reader users that the text may change
Signed-off-by: Greg Kraus <gdkraus@ncsu.edu>
2013-01-22 23:23:00 -05:00
Greg Kraus 56ebe98386 Add a label for the big play button to aid screen reader users
Signed-off-by: Greg Kraus <gdkraus@ncsu.edu>
2013-01-22 23:22:57 -05:00
Greg Kraus 4fe808dcbc Change the creation order of the control UI elements to make the tab order more intuitive
Signed-off-by: Greg Kraus <gdkraus@ncsu.edu>
2013-01-22 23:22:53 -05:00
Greg Kraus ef260fca72 Show keyboard focus on UI elements for keyboard-only users
Signed-off-by: Greg Kraus <gdkraus@ncsu.edu>
2013-01-22 23:22:50 -05:00
Greg Kraus 803e2da691 Add support for writing aria-* and role attributes to elements.
Signed-off-by: Greg Kraus <gdkraus@ncsu.edu>
2013-01-22 23:22:46 -05:00
Steve Heffernan 1c6bcb0a5e Updated dispose to support children without the dispose method 2013-01-21 18:22:19 -08:00
Steve Heffernan b6ea80b67e Updated component children adding to allow no name, id, or el 2013-01-21 17:10:54 -08:00
Steve Heffernan 0364e281d1 Stopped big play button from showing on ended. 2013-01-21 16:43:03 -08:00
Steve Heffernan 9f566c0742 Updated player options to use component options_ settings and mergeOptions. 2013-01-21 16:19:46 -08:00
ptrin 273ec899a5 Fixed a broken markdown link
Fixed the link to caption formatting techniques.
2013-01-21 15:15:41 -05:00
Steve Heffernan fc97d6ece4 Created a combined sources file so people can pull into external projects. fixes #287 2013-01-21 10:54:36 -08:00
Steve Heffernan 07d03e1a27 Updated player API to support poster and controls 2013-01-18 18:06:15 -08:00
Steve Heffernan 2c28d44f92 Changed name of test file to test.video.js 2013-01-18 17:30:35 -08:00
Steve Heffernan ddb016e5b0 Deleted video.test.js...again 2013-01-18 17:20:04 -08:00
Steve Heffernan f82296b4c1 Putting video.test.js in dist/ now instead of test. Don't want to commit video.test.js because it will cause merge conflicts on pull requests. 2013-01-18 17:16:29 -08:00
Steve Heffernan 2effe5a8cc Removed video.test.js and added to gitignore to prevent merge conflicts 2013-01-18 17:05:39 -08:00
Steve Heffernan e840a27409 Merge branch 'master' of git://github.com/mchristopher/video-js into mchristopher-master
Conflicts:
	test/video.test.js
2013-01-18 17:03:17 -08:00
Michael Christopher 67c96304f2 Uppercase constants 2013-01-18 16:54:45 -08:00
Michael Christopher aece38716d Pass tests 2013-01-18 15:09:46 -08:00
Michael Christopher c6e23d772a Updating SSL support for new VJS 2013-01-18 14:57:57 -08:00
Michael Christopher df2fc221e3 Merge newest changes 2013-01-18 14:54:44 -08:00
Steve Heffernan 54737a8af2 Updated options to use underscore for private 2013-01-17 21:03:25 -05:00
Steve Heffernan 487fdc8511 Fixed instances where options was still using a non-string key 2013-01-17 20:45:22 -05:00
Steve Heffernan 70fbf7fc8a Updated events to support event.stopImmediatePropagation().
Added a first play event.
2013-01-17 20:33:53 -05:00
Steve Heffernan b208d63367 Adding compiling back with calcdeps. Testing travis CI. 2013-01-16 21:01:10 -05:00
Steve Heffernan 38e19282fd removed compile from grunt testing because can't install it on travis ci 2013-01-16 20:58:23 -05:00
Steve Heffernan 1189bbaa95 Added compiled tests to test runner. 2013-01-16 20:30:55 -05:00
Steve Heffernan 0b3e240999 Changed this.player to this.player_ to be more consistent with other private vars. 2013-01-16 20:24:38 -05:00
Steve Heffernan e17d1a2d85 Formatted install steps 2013-01-16 17:13:39 -05:00
Steve Heffernan fd7d53cb5a Updated contributing.md to have grunt-cli step 2013-01-16 17:09:46 -05:00
Steve Heffernan e4eb0d5ffe Added a method for doing a deep merge on options objects so individual options could be passed to children withoug overwriting all defaults.
Cleaned up vjs.merge.
2013-01-16 11:09:56 -05:00
Steve Heffernan a6f2161ca8 Updated index.html.example to use sourcelist.js. 2013-01-14 23:29:20 -05:00
Steve Heffernan 7f8acd2850 Updated readme and contrib.md 2013-01-14 22:51:01 -05:00
Steve Heffernan 6623919429 Merge branch 'feature/component-docs'
Conflicts:
	src/player.js
2013-01-14 22:40:19 -05:00
Steve Heffernan 6ad5e0dada Udpated contributing.md 2013-01-14 22:35:23 -05:00
Michael Christopher 3e7289f244 Add HTTPS support for CDN version 2013-01-14 13:11:20 -08:00
Steve Heffernan 921b783e40 Added phantom to package list. 2013-01-12 22:30:55 -08:00
Steve Heffernan 4c0d74b6c2 Removed unused node packages. 2013-01-12 22:26:10 -08:00
Steve Heffernan 0f0fccc312 Update grunt build script. 2013-01-12 22:23:22 -08:00
Steve Heffernan e7c146bc1f Reorgnizing src files.
Moving to grunt for build.
2013-01-11 23:02:20 -08:00
Steve Heffernan 675147645c Cleaning up repo. 2013-01-11 11:52:01 -08:00
Steve Heffernan 06e3ec9dce Cleaned up test logging. Added fallback message for no video support. 2013-01-10 13:48:41 -08:00
Steve Heffernan 77d9d34f91 Merge pull request #236 from lindstedt/master
Feedback message when user can't view video
2013-01-10 13:43:05 -08:00
Steve Heffernan 92855aaf8f Merge pull request #276 from tijptjik/patch-1
Simple typo
2013-01-10 13:40:49 -08:00
Steve Heffernan 68441c7141 Adding jshint back to testing 2013-01-10 13:10:48 -08:00
Steve Heffernan f267e27e36 Updated closure compiler advanced mode branch 2013-01-10 13:06:12 -08:00
Steve Heffernan 428203c466 Continued updating all library pieces to support closure compiler.
Renamed internal lib var to vjs instead of _V_.
2013-01-04 16:58:23 -08:00
Steve Heffernan e125ee878e Updated closure compiler build. Starting Flash support. 2012-12-31 15:25:56 -08:00
Steve Heffernan 688b5053ee Major rewrite to support Google Closure Compiler Advanced Optimization.
Still in process.
2012-12-30 21:45:50 -08:00
Mart van de Ven 90febd2bcf typo 2012-12-28 21:05:58 +08:00
Eric Rafaloff 74f055d125 techOrder should be an array of strings
- Correct the example where the value of techOrder is a hash when it should be an array.
- Make examples clearer that the elements of this array should be strings, not another array.
2012-12-17 15:07:28 -05:00
Steve Heffernan a34259860f Started components doc. 2012-12-17 11:18:31 -08:00
Steve Heffernan 21d2b2086f Merge pull request #249 from Menda/patch-1
Update docs/tech.md
2012-12-11 16:01:40 -08:00
Steve Heffernan d5e52b554c Merge pull request #254 from benfoxall/master
Document _V_(domElement) init
2012-12-11 15:27:20 -08:00
Steve Heffernan f7f7cb475e Added space to title 2012-12-11 15:02:47 -08:00
Steve Heffernan 55d02cf6d8 Added .editorconfig and travis CI badge 2012-12-11 14:33:42 -08:00
Steve Heffernan e77dd302e5 Trying to fix phantomjs running on travis CI 2012-12-11 13:54:16 -08:00
Steve Heffernan 53774c2f74 Fixed error in package info for Travis CI 2012-12-11 13:45:22 -08:00
Steve Heffernan b18bc876b0 Moved .values definition to support being used in width() 2012-12-11 13:39:15 -08:00
Steve Heffernan 6bb2a8cdda Fixed incorrect width and height returning. fixes 258 2012-12-11 13:34:13 -08:00
Steve Heffernan 60a70f94b2 Merge branch 'feature/test-buildout' 2012-12-10 18:54:48 -08:00
Steve Heffernan 4d7da6cb8a Adding line to CHANGELOG: Added automated test suite and support for Travis CI. 2012-12-10 18:54:48 -08:00
Steve Heffernan be0febaad9 Added Travis CI config, and also supporting package.json.
Removed flwplayer folder.
Added phantomjs for Travis CI test running, including temp makefile.
2012-12-10 18:51:48 -08:00
Steve Heffernan 0a8d967a3e Removed demo-subtitles.srt. Not using it. 2012-12-10 16:46:48 -08:00
Steve Heffernan d8ec3cbc87 Removed root source-list.js. Not sure what it was there for. 2012-12-10 16:44:41 -08:00
Steve Heffernan 9293076b75 Removed original build.sh. Was causing confusion. 2012-12-10 16:41:18 -08:00
Steve Heffernan e07f9172fa Updated tests to include unit and integration tests. 2012-12-10 16:40:12 -08:00
Ben Foxall 76740d93f1 api doc code blocks rendering in other markdowns 2012-12-03 12:00:21 +00:00
Ben Foxall ef65237774 documented referencing video with DOM object 2012-12-03 11:56:41 +00:00
Rafa Muñoz Cárdenas 409b1936c9 Update docs/tech.md
JSON syntax was bad and Chrome was throwing errors. Now it works properly.
2012-11-21 11:31:15 +01:00
Steve Heffernan b4b4d55767 Merge branch 'feature/docs-update' 2012-11-15 11:23:07 -08:00
Steve Heffernan a177931d71 Adding line to CHANGELOG: Updated docs to use Github markdown 2012-11-15 11:23:07 -08:00
Steve Heffernan 2a8a4342e0 Added newlines concat script to fix compiling issues. 2012-11-15 11:20:36 -08:00
Steve Heffernan 72b9203c8c Updated rakefile to support new dir structure 2012-11-14 19:45:48 -08:00
Steve Heffernan 0fe46d6c89 Fixed email link in skins doc 2012-11-14 19:29:03 -08:00
Steve Heffernan b2ad563545 fixed link to videojs.com on homepage 2012-11-14 15:57:06 -08:00
Steve Heffernan d91afcf987 Fixed some bugs in docs index 2012-11-14 15:52:32 -08:00
Steve Heffernan 34b104cfd2 Cleaned up docs index 2012-11-14 15:51:05 -08:00
Steve Heffernan 50d1bcb4ce Removed manual anchor links from glosarry page since github already supports them. 2012-11-14 15:33:21 -08:00
Steve Heffernan 5a697478f9 Updated docs links 2012-11-14 15:07:47 -08:00
Steve Heffernan c01676d2bb Cleaned up whitespace around docs code 2012-11-14 15:02:32 -08:00
Steve Heffernan c9d91f1d61 Fixed issue in api docs highlighting 2012-11-14 14:54:36 -08:00
Steve Heffernan caa4740b69 API docs highlighting updated 2012-11-14 14:53:46 -08:00
Steve Heffernan 31033659bc Updated code samples to support github highlighting 2012-11-14 14:51:31 -08:00
Steve Heffernan 2c3f7f7177 Testing code highlighting 2012-11-14 14:42:06 -08:00
Steve Heffernan dfbd21f111 Removed jekyll headers from docs. 2012-11-14 14:34:13 -08:00
Steve Heffernan fc6d1b1229 Merge branch 'hotfix/fix-chrome-seeking-spinner' fixes #240
Conflicts:
	src/controls.js
2012-11-12 17:32:44 -08:00
Steve Heffernan 54ef0a7758 Merge branch 'hotfix/fix-chrome-seeking-spinner' into stable 2012-11-12 17:29:12 -08:00
Steve Heffernan efb357f841 Adding line to CHANGELOG: Fixed chrome spinner continuing on seek 2012-11-12 17:29:12 -08:00
Steve Heffernan a3038226f1 Bumping version to 3.2.3. 2012-11-12 17:28:53 -08:00
Steve Heffernan a722498191 Merge branch 'dan/fix_chrome_seeking_spinner' of git://github.com/onyxrev/video-js into hotfix/fix-chrome-seeking-spinner 2012-11-12 17:18:07 -08:00
Dan Connor 180c75b3a2 fix for loading spinner persisting on screen after programatic seek in Chrome 2012-11-06 16:38:35 -08:00
Annika Lindstedt 609ecf1f10 Update src/player.js
A nice feedback message for users who don't have a compatible HTML5 browser or Flash Player.
2012-10-31 16:19:20 +01:00
Steve Heffernan 8eba022c0c Merge pull request #215 from heff/jhurliman-youtube
Jhurliman youtube
2012-08-13 13:50:08 -07:00
Steve Heffernan fffa9ddcab Updated youtube.html to work 2012-08-13 13:46:01 -07:00
Steve Heffernan 0edfae58eb Re-organized playback tech location in source. 2012-08-13 13:34:40 -07:00
Steve Heffernan d71b0858d4 Added jhurliman's YouTube updates. 2012-08-10 17:25:14 -07:00
Steve Heffernan 9343610596 Merge pull request #185 from program247365/patch-1
Updated firebug-lite to the latest release.
2012-08-07 16:27:06 -07:00
Steve Heffernan 5e8b6c8455 Merge pull request #192 from eikes/master
Make the components available in the "ready" callback
2012-08-07 16:12:15 -07:00
Steve Heffernan f18cbffaa5 Merge pull request #208 from caioariede/master
loadingSpinner is not showing off after seek
2012-08-07 15:47:29 -07:00
Steve Heffernan 9d49f1487d small change 2012-08-01 14:35:08 -07:00
Steve Heffernan 8827b4c9cb small test change 2012-08-01 14:24:33 -07:00
Caio Ariede 51181f6a5d Removes loadingSpinner when seek is complete 2012-07-26 10:08:55 -03:00
Steve Heffernan 5758472d2f Merge branch 'feature/disable-components' 2012-06-28 16:37:26 -07:00
Steve Heffernan c9fa0be0e0 Adding line to CHANGELOG: Allow disabling of default components 2012-06-28 16:37:25 -07:00
Steve Heffernan 94044afe74 Allow disabling of default components. 2012-06-28 16:36:40 -07:00
Steve Heffernan 448a70d2cc Added paused to docs. 2012-06-20 10:29:07 -07:00
Eike Send 7502785062 make the components available in the ready callback as well 2012-05-25 11:59:53 +02:00
Kevin Ridgway b98ecb7fbc Updated firebug-lite to the latest release. 2012-05-10 15:40:48 -03:00
Steve Heffernan c189332ca3 Removed merge file. 2012-05-03 12:35:14 -07:00
Steve Heffernan 11a9e88d42 Merge branch 'hotfix/multiple-control-fades-fix'
Conflicts:
	src/controls.js
2012-05-02 20:57:49 -07:00
Steve Heffernan 3540fcfee8 Merge branch 'hotfix/multiple-control-fades-fix' into stable 2012-05-02 20:55:57 -07:00
Steve Heffernan f82312e5fb Adding line to CHANGELOG: Fixed error with multiple controls fading listeners 2012-05-02 20:55:57 -07:00
Steve Heffernan aa7d5a2839 Bumping version to 3.2.2. 2012-05-02 20:55:35 -07:00
Steve Heffernan a787b5ca3a Fixed multiple event listeners added for controls fading on play event. fixes #173 2012-05-02 20:54:40 -07:00
Steve Heffernan 290d1c1ba4 Nothing. 2012-05-02 20:45:33 -07:00
Steve Heffernan 048b808153 Merge branch 'feature/duration-cacheing' 2012-04-25 15:20:07 -07:00
Steve Heffernan 8bd70b6060 Adding line to CHANGELOG: Duration is now setable (need ed for HLS m3u8 files) 2012-04-25 15:20:07 -07:00
Steve Heffernan 8c73d8f62c Made duration setable and cached. 2012-04-25 15:15:33 -07:00
Steve Heffernan b0061f0e30 Merge branch 'feature/event-binding-return-player' 2012-04-18 15:56:38 -07:00
Steve Heffernan 2ee7ae0448 Adding line to CHANGELOG: Event binders (on/off/one) now return the player instance 2012-04-18 15:56:38 -07:00
Steve Heffernan 610ad964d0 Made event binders return the player object. 2012-04-18 15:55:39 -07:00
Steve Heffernan 452669e80a Merge branch 'feature/stop-restart-on-ended' 2012-04-12 15:22:36 -07:00
Steve Heffernan cfd6b4d670 Adding line to CHANGELOG: Stopped player from going back to beginningg on ended event. 2012-04-12 15:22:36 -07:00
Steve Heffernan dd8c2a2140 Added pause back in on ended so play button goes back to triangle and playing event is fired again. 2012-04-12 15:21:30 -07:00
Steve Heffernan 7d9b0e2629 Stopped player from going back to the beginning on end. 2012-04-12 15:20:14 -07:00
Steve Heffernan 6658c51474 Merge branch 'feature/fluid-width' 2012-04-09 14:56:36 -07:00
Steve Heffernan 7839f2e427 Adding line to CHANGELOG: Added support for percent width/height and fluid layouts 2012-04-09 14:56:36 -07:00
Steve Heffernan 4fb7af6b53 Adjusted width/height to support percents. fixes #163 2012-04-09 14:53:03 -07:00
Steve Heffernan 937b52d9bf Fixed bug that was skipping width/height from tag attributes. 2012-04-09 11:02:51 -07:00
Steve Heffernan b3d16d1437 Removed unused values ref. 2012-04-06 17:16:16 -07:00
Steve Heffernan ec07398114 Merge branch 'feature/better-element-load' 2012-04-06 17:15:44 -07:00
Steve Heffernan 1a6c5ffcb9 Adding line to CHANGELOG: Improved load order of elements to reduce reflow. 2012-04-06 17:15:44 -07:00
Steve Heffernan 980b4738f4 Improved load order of page elements to protect againt reflows. 2012-04-06 17:14:45 -07:00
Steve Heffernan 9321a54cee Removed orig file 2012-04-06 16:52:54 -07:00
Steve Heffernan 2d2e7117b3 Merge branch 'hotfix/options-width-fix'
Conflicts:
	src/core.js
2012-04-06 16:52:18 -07:00
Steve Heffernan 5fc725c088 Merge branch 'hotfix/options-width-fix' into stable 2012-04-06 16:50:16 -07:00
Steve Heffernan 2ef7617c66 Adding line to CHANGELOG: Fixed setting width/height with javascript options 2012-04-06 16:50:16 -07:00
Steve Heffernan c222eb1381 Bumping version to 3.2.1. 2012-04-06 16:49:47 -07:00
Steve Heffernan dca5644878 Updated options loading to be better. 2012-04-06 16:42:09 -07:00
Steve Heffernan 1d680a9135 Fixed changeslog bullet. 2012-03-28 15:56:11 -07:00
Steve Heffernan a671e6b9d8 Merge branch 'feature/changing-addevent-to-on' 2012-03-26 11:24:41 -07:00
Steve Heffernan b52b9a1faf Adding line to CHANGELOG: Changed addEvent function name to 'on'. 2012-03-26 11:24:41 -07:00
Steve Heffernan 82e2322493 Updated remaining event listener function names. 2012-03-26 11:23:05 -07:00
Steve Heffernan eff300cebb Updated on/addevent names on components. 2012-03-26 11:19:26 -07:00
Steve Heffernan 9cad8bff38 Changed controls addevent to on 2012-03-26 11:14:48 -07:00
Steve Heffernan d907f4aac2 Added on/off/trigger events to replace addEvent/removeEvent/triggerEvent. 2012-03-26 11:12:31 -07:00
Steve Heffernan f8b43676ba Merge branch 'feature/remove-indexof' 2012-03-26 11:01:55 -07:00
Steve Heffernan 7bf9b5936f Adding line to CHANGELOG: Removed conflicting array.indexOf function 2012-03-26 11:01:55 -07:00
Steve Heffernan e1995350fe Removed refs to ecma.js 2012-03-26 10:58:20 -07:00
Steve Heffernan 15c360cd26 Removed ECMA file. No longer using any of these functions.
Removed remove function from lib. Was not being used and needed the indexOf function.
2012-03-26 10:56:38 -07:00
Steve Heffernan b1da28fe18 Merge branch 'stable' 2012-03-23 17:11:02 -07:00
Steve Heffernan 00567cff6c Spelling error. 2012-03-23 17:10:35 -07:00
Steve Heffernan 79cec32401 Updated docs 2012-03-23 15:39:23 -07:00
Steve Heffernan f96f63acca Updated docs index. 2012-03-22 16:50:17 -07:00
Steve Heffernan be48f1dd2e Udpated changelog 2012-03-22 15:07:57 -07:00
Steve Heffernan 3875321d9e Merge branch 'master' of github.com:zencoder/video-js 2012-03-22 15:01:02 -07:00
Steve Heffernan b01ca8e805 Merge pull request #143 from andchen/master
Added "exitFullScreen" in tech.js. For those browsers that have "supportsFullScreen"
2012-03-22 15:00:43 -07:00
Steve Heffernan 43fc61f74d Merge pull request #154 from sirudog/master
Fixed two bugs: Removing sources with changing source count. Checking element nodeName, IE doesn't force uppercase.
2012-03-20 17:25:54 -07:00
Steve Heffernan 09ed8b3b6a Merge branch 'stable' 2012-03-20 13:01:38 -07:00
Steve Heffernan a9567e2574 removed outline from button focus. 2012-03-20 13:01:10 -07:00
Steve Heffernan c17df5ab61 Merge branch 'release/baxter' 2012-03-20 11:17:30 -07:00
Steve Heffernan 352bd386c3 Merge branch 'release/baxter' into stable 2012-03-20 11:17:27 -07:00
Steve Heffernan 8e50338da3 Rotating CHANGELOG. 2012-03-20 11:17:27 -07:00
Steve Heffernan 150a1796b6 Bumping version to 3.2.0. 2012-03-20 11:17:27 -07:00
Steve Heffernan 4518fb0cef Merge branch 'stable' into release/baxter 2012-03-20 11:17:27 -07:00
Steve Heffernan 1ed4c36412 Updated release notes. 2012-03-20 11:14:33 -07:00
Steve Heffernan 0ad74d53f6 Cleaned up demo file. 2012-03-20 11:07:14 -07:00
Steve Heffernan 1fe7855ec7 Added note in demo about Flash SWF location. 2012-03-20 11:02:47 -07:00
Steve Heffernan 83dbc92a59 Updated menu button styles. 2012-03-20 10:55:00 -07:00
Steve Heffernan df72cc6eb1 Added captions file to release files. Added caption to demo.
Changed demo URLs to be local, so that they work with current release file, not old release on server.
2012-03-20 10:28:10 -07:00
Steve Heffernan 0657d3d118 Merge branch 'feature/update-docs' 2012-03-19 16:02:21 -07:00
Steve Heffernan bf16a832ef Adding line to CHANGELOG: Updated docs with more options. 2012-03-19 16:02:21 -07:00
Steve Heffernan 83ed670dc3 Fixed no-text-tracks error 2012-03-19 15:55:05 -07:00
Steve Heffernan 10ec069e71 Changed 'poster' component to 'posterImage' to prevent conflicts with API. 2012-03-19 15:50:05 -07:00
Steve Heffernan d06badf061 Updated tracks docs 2012-03-19 15:49:12 -07:00
Steve Heffernan 393973775c Removed dumb leftover log output. 2012-03-19 09:42:41 -07:00
sirudog 4df3d84358 Fixed bug of traversing video source/track child nodes by making nodeName comparison case-insensitive.
It caused the issue of flash-fallback not being able to discover the source of the video and embed it into flashvars.
2012-03-18 22:36:04 +01:00
sirudog 5c2a3cbbf8 Fix bug in loop for removing source/track nodes from video element.
"j.length" changed in each loop step, causing source/track nodes being left in DOM.
2012-03-18 22:25:19 +01:00
Steve Heffernan 10c4ef87a3 Made cues display block so they'd be on their own line. 2012-03-16 16:25:43 -07:00
Steve Heffernan d0b9903395 Started Adding tracks docs.
Added example captions track.
Updated webvtt parser to support no id line in captions.
Updated webvtt parser to support no hours place in the time.
2012-03-16 15:32:48 -07:00
Steve Heffernan 71a7e5f68a Update docs content. 2012-03-16 13:54:03 -07:00
Steve Heffernan 2fe90f9c5c Udpated changelog 2012-03-16 13:28:38 -07:00
Steve Heffernan 8d09420b6a Removed controls showing test. 2012-03-16 13:26:35 -07:00
Steve Heffernan 9943405289 Logging flash errors. 2012-03-16 13:25:15 -07:00
Steve Heffernan 6c44a19fba Logging Flash errors. 2012-03-16 13:17:42 -07:00
Steve Heffernan fd1e8e9edf Merge branch 'feature/tracks' 2012-03-16 12:55:16 -07:00
Steve Heffernan cae79a9fe0 Adding line to CHANGELOG: Overhauled HTML5 Track support. 2012-03-16 12:55:16 -07:00
Steve Heffernan 7aa70fe7be Cleaned up code from text track additions. 2012-03-16 12:45:51 -07:00
Steve Heffernan 2aa5a2ee09 Finishing off TextTrack support. 2012-03-16 12:29:38 -07:00
Steve Heffernan 72a423237c Updated track styles and make subtitles button work. 2012-03-10 08:54:46 -08:00
Steve Heffernan aeecc92194 Refactored tracks to better match HTML5 spec 2012-03-09 17:12:38 -08:00
Steve Heffernan 12816b8409 Added captions button and display styles. 2012-03-02 13:52:06 -08:00
Steve Heffernan 96a3b03fd7 Updated rake file with special case lib generation.
Added notes to changelog.
2012-02-15 13:31:54 -08:00
Steve Heffernan 043203781e Merge pull request #140 from carlocapocasa/master
Flash src api call autoplay fix
2012-02-14 16:56:19 -08:00
Steve Heffernan 5702380c16 Merge pull request #142 from GianlucaGuarini/patch-3
fix  localStorage context
2012-02-14 16:33:05 -08:00
Steve Heffernan 4d8316676f Merge branch 'feature/fullscreen-change-event-fix' 2012-02-13 17:53:16 -08:00
Steve Heffernan 4da9ae8d07 Adding line to CHANGELOG: Updated 'fullscreenchange' even to be calledd d even if the user presses escape to exit fullscreen. 2012-02-13 17:53:16 -08:00
Steve Heffernan b0ac995f26 Updated fullscreenchange event to work on user escape 2012-02-13 17:51:52 -08:00
Steve Heffernan 765ef8e93e Updated fullscreenchange event to trigger on users escape 2012-02-13 17:42:22 -08:00
Steve Heffernan 168ae2cbe8 Merge branch 'feature/relative-flash-urls' 2012-02-13 17:14:50 -08:00
Steve Heffernan 6932c64a18 Adding line to CHANGELOG: Automatically converting URsource URL to absolute for Flash fallback. 2012-02-13 17:14:50 -08:00
Steve Heffernan e4723240b6 Made src() update URL to absolute also. 2012-02-13 17:13:14 -08:00
Steve Heffernan c714781aef Added translation of Flash URL to absolute URL. 2012-02-13 16:59:57 -08:00
Steve Heffernan 6afb6d8e75 Added event comment 2012-02-13 13:23:06 -08:00
Steve Heffernan ca6a04acfe Merge branch 'feature/loadedalldata-event' 2012-02-13 13:16:53 -08:00
Steve Heffernan 842d761a37 Adding line to CHANGELOG: Created new 'loadedalldata' event for when the source is completely downloaded 2012-02-13 13:16:53 -08:00
Steve Heffernan df6d6647f7 Created new 'loadedalldata' event, and test. 2012-02-13 13:15:20 -08:00
Steve Heffernan 20ec85189c Fixed some docs text. 2012-02-13 13:00:13 -08:00
Steve Heffernan cc2d1e136c Fixed doc link.
Added tests.
2012-02-07 11:10:35 -08:00
Steve Heffernan c762accb39 Fixed issue with .one scope.
Improved destroy method.
Still building out tests.
2012-02-03 17:53:59 -08:00
Steve Heffernan 2751be7e0f Updated qUnit tests. 2012-02-03 15:22:57 -08:00
Steve Heffernan 0f45812b71 Merge branch 'feature/api-ready-refactor' 2012-02-03 10:51:38 -08:00
Steve Heffernan 4fdbf91222 Adding line to CHANGELOG: Refactored API to be more immediately available. 2012-02-03 10:51:38 -08:00
Steve Heffernan 45f519820a Updated techGet to handle common errors. 2012-02-03 10:28:00 -08:00
Steve Heffernan 5c4c2d30f2 Introduced techSet/techCall methods. techCall caches method calls if tech isn't ready. techGet provides defaults. 2012-02-02 19:16:45 -08:00
Steve Heffernan a839c89f0b Updated player API to be avialable immediately.
Moved auto setup code to setup.js.
2012-02-02 14:56:47 -08:00
Andy Chen 4bc04c2e45 Added "exitFullScreen" in tech.js. For those browsers that have "supportsFullScreen"
false, it would throw "undefined" error when calling "exitFullScreen".
2012-02-02 09:51:01 -05:00
Steve Heffernan 56355e572a Fixed an error in reporting no method name 2012-01-31 15:22:25 -08:00
Steve Heffernan 32c9ecf242 Updated video tag attribute setting to not include null values. 2012-01-31 11:51:37 -08:00
Gianluca Guarini 35eb539d00 fix localStorage context 2012-01-31 11:52:26 +01:00
Carlo Capocasa 62feb5ad5f Fix: Flash always autoplays on src api call 2012-01-31 08:28:34 +01:00
Steve Heffernan c4fbc914cb Merge branch 'master' into stable 2012-01-30 15:14:04 -08:00
Steve Heffernan 1eda892c86 Fixed a double declared var. 2012-01-30 15:13:18 -08:00
Steve Heffernan 3fb6a14bbd Merge branch 'release/leonardo' 2012-01-30 13:59:31 -08:00
Steve Heffernan 5337efb0e7 Merge branch 'release/leonardo' into stable 2012-01-30 13:59:29 -08:00
Steve Heffernan 05338dc704 Rotating CHANGELOG. 2012-01-30 13:59:29 -08:00
Steve Heffernan c3da40b3d8 Bumping version to 3.1.0. 2012-01-30 13:59:29 -08:00
Steve Heffernan c84f0386bb Merge branch 'stable' into release/leonardo 2012-01-30 13:59:28 -08:00
Steve Heffernan e9e1eeae63 Updated changelog with FF9 fullscreen fix. 2012-01-30 12:57:17 -08:00
Heff 2ecee69838 Merge pull request #139 from GianlucaGuarini/patch-1
fix for firefox9 fullscreen (only if it is enabled)
2012-01-30 12:54:24 -08:00
Steve Heffernan 69088f3c20 Merge branch 'feature/removing-swfobject' 2012-01-30 11:07:15 -08:00
Steve Heffernan 4e6c5bc539 Adding line to CHANGELOG: Replaced swfobject with custom embed to save file size. 2012-01-30 11:07:14 -08:00
Steve Heffernan 43f10ab655 Removed swfobject from build. Using custom Flash embed to save file size. 2012-01-30 11:05:55 -08:00
Steve Heffernan 234f7acf84 Merge branch 'feature/flash-iframe' 2012-01-30 11:01:02 -08:00
Steve Heffernan c40cd9b03c Adding line to CHANGELOG: Added flash iframe-mode, an experimental method for getting around flash reloading issues. 2012-01-30 11:01:02 -08:00
Steve Heffernan f5681765fd Swapped out swfobject version check for new custom version check. 2012-01-30 10:58:26 -08:00
Gianluca Guarini a0f06a5908 fix for firefox9 fullscreen (only if it is enabled) 2012-01-30 12:08:58 +01:00
Steve Heffernan f67c5d951c Made iframe mode no longer the default for further testing. 2012-01-29 20:04:58 -08:00
Steve Heffernan f5ab5d5c43 Tried to fix iframe mode for Firefox. Ended up having to rule it out.
Fixed an issue with fullscreen event calling.
2012-01-29 20:03:44 -08:00
Steve Heffernan 8719371e21 Updated iFrame mode 2012-01-28 18:56:28 -08:00
Steve Heffernan 372ec827a3 Merge branch 'master' into feature/flash-iframe 2012-01-28 17:27:45 -08:00
Steve Heffernan b994a177f9 Merge branch 'feature/slider-knobb-placement-fix' 2012-01-28 16:28:59 -08:00
Steve Heffernan 9bea1b768f Adding line to CHANGELOG: Fixed issue with volume knob position. Improved controls fading. 2012-01-28 16:28:59 -08:00
Steve Heffernan 52975871e1 Fixed issue with volume knob positioning.
Using visiblity for for hiding in IE6.
Updated controls fading.
2012-01-28 16:27:03 -08:00
Steve Heffernan ca9d044ae9 Working towards getting styles to work on controls 2012-01-27 16:57:24 -08:00
Steve Heffernan 84e1f508e7 Component lists are now objects that allow you to set options on. 2012-01-27 15:57:03 -08:00
Steve Heffernan 79d5694c99 Starting on new component loading. 2012-01-27 15:04:25 -08:00
Steve Heffernan fbadb72eb1 Merge branch 'feature/fullscreen-second-click-fix' 2012-01-27 12:27:56 -08:00
Steve Heffernan a4213763be Adding line to CHANGELOG: Fixed ian issue with triggering fullscreen a second time. 2012-01-27 12:27:55 -08:00
Steve Heffernan cd4f7e1945 Changed videoIsFullScreen to isFullScreen.
Watching for fullscreen event to update player status when escape key is used.
2012-01-27 12:22:05 -08:00
Steve Heffernan 58aaa100aa Cleaned up whitespace 2012-01-27 10:36:02 -08:00
Steve Heffernan 8437f704c7 Added feature note 2012-01-27 09:25:44 -08:00
Heff 375a201303 Merge pull request #138 from dready/ff3
Firefox 3.9 fixes
2012-01-27 09:23:25 -08:00
Thomas Subera ecd8fcc46e fix Attribute getters, ff3 needs getAttrobute instead of just the magic getter. 2012-01-27 09:47:52 +01:00
Thomas Subera 304921128c fix children in ff3
ff3 does not support children, only childNodes
2012-01-25 17:32:50 +01:00
Steve Heffernan 20d5342da2 Fixed a hotfix note. 2012-01-23 17:00:21 -08:00
Steve Heffernan 14e250cdf4 Merge branch 'master' of github.com:zencoder/video-js 2012-01-23 16:59:58 -08:00
Steve Heffernan 66068858d7 Added feature note. 2012-01-23 16:59:51 -08:00
Heff 17cec68bbb Merge pull request #131 from ykomatsu/master
Patch for issue #130
2012-01-23 16:59:04 -08:00
Steve Heffernan 740fca702c Merge branch 'hotfix/fix-ie-controls-hiding' 2012-01-23 16:02:53 -08:00
Steve Heffernan c4fb8b6fb4 Merge branch 'hotfix/fix-ie-controls-hiding' into stable 2012-01-23 16:02:50 -08:00
Steve Heffernan e967754c27 Adding line to CHANGELOG: CFixed issue with controls not hiding in IE due to no opacity support 2012-01-23 16:02:50 -08:00
Steve Heffernan 2b59be792d Bumping version to 3.0.8. 2012-01-23 16:01:39 -08:00
Steve Heffernan c0c6db7071 Added a fix for IE controls hiding 2012-01-23 16:00:51 -08:00
Steve Heffernan e14909468a Created new flash embed method. 2012-01-23 14:55:06 -08:00
Steve Heffernan 865f914dad Added flash version check 2012-01-20 18:20:00 -08:00
Steve Heffernan 7631edae24 commented out some currently unused code 2012-01-20 17:42:38 -08:00
Steve Heffernan 24bda85d73 Created iframe mode for getting around flash reloading issues. 2012-01-20 17:34:18 -08:00
Yoshito Komatsu 528fa52b29 Added encodeURIComponent to escape source.src 2012-01-18 23:24:02 +09:00
Steve Heffernan c6c63df7fd Fixed a check for current tech in source loading 2012-01-17 15:31:11 -08:00
Steve Heffernan fa9e97bb56 Fixed an error in the docs. 2012-01-17 11:02:18 -08:00
Steve Heffernan 0c2e3f5f5a Added line to feature list for Fullscreen edit pull request.
Added require.js for including individual source files during development.
2012-01-17 10:18:19 -08:00
Steve Heffernan 7106c005ed Removed compare code out of project. 2012-01-16 16:26:22 -08:00
Steve Heffernan fb446cd059 Merge branch 'feature/removing-stalled-spinner' 2012-01-16 15:44:09 -08:00
Steve Heffernan b9af34b33d Adding line to CHANGELOG: Stopped spinner from showing on 'stalled' events since browsers sometimes don't show that they've recovered. 2012-01-16 15:44:09 -08:00
Steve Heffernan baab54c560 Removed spinner on stall. 2012-01-16 15:42:31 -08:00
Steve Heffernan 244159d9e9 Added comment reference to mozFullScreenEnabled info 2012-01-16 15:03:38 -08:00
Heff 61aad619a8 Merge pull request #128 from rainboxx/patch-1
Changed checking whether fullscreen API is available or not.  Firefox 9 ...
2012-01-16 15:01:54 -08:00
Steve Heffernan a2249ddf3e Merge branch 'feature/fixing-cdn-version-var' 2012-01-14 18:15:29 -08:00
Steve Heffernan 23c219d0ce Adding line to CHANGELOG: Fixed CDN Version which was breaking dev.html 2012-01-14 18:15:29 -08:00
Steve Heffernan a6b549813e Moved setup.js to end of build file. 2012-01-14 18:14:17 -08:00
Steve Heffernan 4f34034c51 Fixed CDN Version that was breaking dev.html.
Fixed Double auto-setup
2012-01-14 18:13:13 -08:00
Steve Heffernan 9b881cdf13 Merge branch 'feature/independent-full-window' 2012-01-14 18:05:29 -08:00
Steve Heffernan 219f83e1f2 Adding line to CHANGELOG: Made full-window mode more independent 2012-01-14 18:05:29 -08:00
Steve Heffernan e6967528cc Made full window mode more independent 2012-01-14 18:03:37 -08:00
Steve Heffernan 3c21510d72 Merge branch 'feature/release-rakefile' 2012-01-13 11:37:17 -08:00
Steve Heffernan 24e6e72dc4 Adding line to CHANGELOG: Added rakefile for release generation 2012-01-13 11:37:17 -08:00
Steve Heffernan 34896d1f2c Fixed download version to include all files. 2012-01-13 11:35:44 -08:00
Steve Heffernan 18ef75afbb Added rakefile for generating releases.
Updated swf url to adjust based on CDN version.
2012-01-13 09:26:18 -08:00
Matthias Dietrich 16d9525fa8 Changed checking whether fullscreen API is available or not. Firefox 9 will be handled as "not possible" (document.mozFullScreenEnabled not implemented, fullscreen API deactivated by default) and Firefox 10 can be handled according its config (document.mozFullScreenEnabled represent the current config).
Additional info:
* https://bugzilla.mozilla.org/show_bug.cgi?id=694690
* https://developer.mozilla.org/en/DOM/document.mozFullScreenEnabled
2012-01-13 17:34:39 +01:00
Steve Heffernan 0deba6e673 Merge branch 'hotfix/fixing-ie8-poster-bug' 2012-01-12 17:40:46 -08:00
Steve Heffernan 3708b1b6a5 Merge branch 'hotfix/fixing-ie8-poster-bug' into stable 2012-01-12 17:40:44 -08:00
Steve Heffernan 386161c5b9 Adding line to CHANGELOG: Fixed an ie8 breaking bug with the poster 2012-01-12 17:40:44 -08:00
Steve Heffernan aa72d9b050 Bumping version to 3.0.7. 2012-01-12 17:40:24 -08:00
Steve Heffernan c345889535 Fixed an issue where ie8 was borking on a bad image attribute. 2012-01-12 17:39:25 -08:00
Steve Heffernan b7e7da427f Merge branch 'hotfix/docs-url-fix' 2012-01-12 16:35:18 -08:00
Steve Heffernan c6153f7556 Merge branch 'hotfix/docs-url-fix' into stable 2012-01-12 16:35:16 -08:00
Steve Heffernan 11a75fe74f Adding line to CHANGELOG: Fixed wrong URL for CDN in docs 2012-01-12 16:35:16 -08:00
Steve Heffernan 8a5f667159 Bumping version to 3.0.6. 2012-01-12 16:35:03 -08:00
Steve Heffernan a2651b9ab5 Fixed wrong url for CDN 2012-01-12 16:34:34 -08:00
Steve Heffernan 1fedf3c1b9 Merge branch 'hotfix/event-layer-x-deprecation-fix' 2012-01-12 15:44:53 -08:00
Steve Heffernan 2dc3de9de1 Merge branch 'hotfix/event-layer-x-deprecation-fix' into stable 2012-01-12 15:44:51 -08:00
Steve Heffernan d1824d7c28 Adding line to CHANGELOG: Removed deprecated event.layerX and layerY 2012-01-12 15:44:51 -08:00
Steve Heffernan a9c9722647 Bumping version to 3.0.5. 2012-01-12 15:44:34 -08:00
Steve Heffernan 534fb39e89 Removed event.layerX and layerY which weren't used and were throwing deprecation warnings. 2012-01-12 15:41:30 -08:00
Steve Heffernan 35dfa99e59 Merge branch 'hotfix/undefined-source-fix' 2012-01-12 14:30:16 -08:00
Steve Heffernan ff2d59fcf8 Merge branch 'hotfix/undefined-source-fix' into stable 2012-01-12 14:30:14 -08:00
Steve Heffernan 855f513d5f Adding line to CHANGELOG: Fixing an undefined source when no sources exist on load 2012-01-12 14:30:14 -08:00
Steve Heffernan 62bb873ddd Bumping version to 3.0.4. 2012-01-12 14:29:46 -08:00
Raymond Cohen 55ac829fb1 If there are no sources when the player is initialized, loadTech is called with an undefined source.
It would then error on source.src
2012-01-12 14:26:27 -08:00
Heff a4986cd5f9 Merge pull request #125 from raycohen/master
Check if source is defined in loadTech before accessing source.src
2012-01-12 14:18:03 -08:00
Raymond Cohen 2d8f283680 If there are no sources when the player is initialized, loadTech is called with an undefined source.
It would then error on source.src
2012-01-12 16:56:38 -05:00
Steve Heffernan f9c1905840 Merge branch 'hotfix/doc-change'
Conflicts:
	CHANGELOG.md
	VERSION.yml
2012-01-12 13:33:02 -08:00
Steve Heffernan 6def502496 Merge branch 'hotfix/doc-change' into stable 2012-01-12 13:30:59 -08:00
Steve Heffernan dff355dda9 Adding line to CHANGELOG: Added line to docs to test zenflow 2012-01-12 13:30:59 -08:00
Steve Heffernan 1d65860227 Bumping version to 3.0.3. 2012-01-12 13:29:23 -08:00
Steve Heffernan ee740c619f Added description of events. 2012-01-12 13:05:06 -08:00
Steve Heffernan a1a0e351c1 Set up zenflow workflow management config. 2012-01-12 12:59:53 -08:00
Steve Heffernan aca861a190 Set up zenflow workflow management config. 2012-01-12 12:58:02 -08:00
Steve Heffernan 44b02529ba Poster was wrongly removed from setup change. Fixed.
Upated docs.
2012-01-10 15:52:20 -08:00
Steve Heffernan a83433f655 Updated options docs.
Full URL to flash SWF.
2012-01-10 13:15:49 -08:00
Steve Heffernan d80e3e328a Updated version number. 2012-01-10 10:10:07 -08:00
Steve Heffernan 166bd0b44f Fixed an offset width bug with IE that was causing player to break. 2012-01-09 16:28:26 -08:00
Steve Heffernan 7b7c8a497f Updated skins doc 2012-01-09 13:32:10 -08:00
Steve Heffernan 42c9e43736 Removed beta references 2012-01-09 12:38:43 -08:00
Steve Heffernan 90956059f6 Updated to newest version of Flash player. Preparing for final release. 2012-01-09 12:18:08 -08:00
Steve Heffernan ab07612c05 Updated playback tech docs 2012-01-09 10:05:19 -08:00
Steve Heffernan 7ef5b15ae2 Updated api and setup docs 2012-01-05 23:25:09 -08:00
Steve Heffernan 9678c7717f Added manual poster image to get around flash cross domain issues.
Starting controls hidden.
Making tech elements clickable.
2012-01-02 16:57:17 -08:00
Steve Heffernan 8dd38fc747 Updated flash player 2012-01-02 15:37:37 -08:00
Steve Heffernan 242ff4c68b Fixed tech switching.
Fixed an issue where bigplaybutton was throwing an error when not preloading.
Fixed a bufferring issue when tech switching.
2012-01-02 13:02:04 -08:00
Steve Heffernan 38cc63c530 Merge branch 'master' of github.com:zencoder/video-js 2012-01-02 10:16:42 -08:00
Steve Heffernan 41b93513a2 Updated docs for site. Add 'projects' to gitignore. 2012-01-02 10:14:51 -08:00
Heff 359cde31c2 Merge pull request #111 from mchristopher/master
Maintain license block
2011-12-27 14:52:28 -08:00
Michael Christopher 1fba4f4b88 Added ! to first line of license block so YCompress doesn't strip it out 2011-12-27 16:50:32 -06:00
Steve Heffernan 16f6c229f3 Merge branch 'master' of github.com:zencoder/video-js 2011-12-21 18:16:12 -08:00
Steve Heffernan accdfcb02c Cleaned up spinner code. 2011-12-21 18:15:47 -08:00
Heff ee1a7dae99 Merge pull request #106 from tremby/master
Fix #105
2011-12-21 18:13:03 -08:00
Heff b31eba988b Merge pull request #103 from rkyrychuk/patch-3
Auto rewind on big button play click
2011-12-21 18:10:19 -08:00
Heff 20b36faf11 Merge pull request #102 from rkyrychuk/patch-2
Ensure that tracking progress and time progress will stop after destroy
2011-12-21 18:07:50 -08:00
Steve Heffernan 82142e2f54 Added loading spinner code from ZenJosh. 2011-12-21 17:59:36 -08:00
Bart Nagel 1c18578466 automatically create dist subdirectory 2011-12-16 01:06:00 -08:00
Bart Nagel 0e81c6b059 fixed cue search algorithm bug 2011-12-16 00:52:15 -08:00
rkyrychuk 99fa329bc5 Auto rewind on big button play click 2011-12-15 23:58:35 +02:00
rkyrychuk f13a2bf733 Ensure that tracking progress and time progress will stop and player deleted after calling destroy method 2011-12-15 23:17:10 +02:00
Steve Heffernan 6945be3d6e Updated volume display to automically set itself. 2011-12-08 17:33:44 -08:00
Steve Heffernan d1fb95ecbf Fixed another issue with passing vars to flash 2011-12-07 22:12:36 -08:00
Steve Heffernan 176eb1f559 Fixed an error with updating tech support. 2011-12-07 22:04:54 -08:00
Steve Heffernan 8babbb412c Cleaned up tech name 2011-12-07 22:02:40 -08:00
Steve Heffernan f4e68d1a47 Fix flashvar name 2011-12-07 21:41:28 -08:00
Steve Heffernan e0516a4c83 Added ability to pass options to flash fallback. 2011-12-07 21:29:21 -08:00
Steve Heffernan 1972528df7 Changed h5swf name to just Flash for ease of use. And lowercased tech object names. 2011-12-07 21:03:12 -08:00
Steve Heffernan 39f7bead50 Updated compare page. 2011-12-07 16:44:21 -08:00
Steve Heffernan e4f6bbb0b2 Optimized slider controls.
Fixed issue with fullscreen progress bar tracking (offset left wasn't working in new fullscreen)
2011-12-05 11:28:18 -08:00
Steve Heffernan afc9369849 Merge branch 'master' of github.com:zencoder/video-js
Conflicts:
	src/player.js
	src/tech.js
2011-12-01 16:52:23 -08:00
Steve Heffernan 325084c6a1 Updated swf code to auto play on new src. 2011-12-01 16:48:06 -08:00
Heff 2f99215f8d Merge pull request #98 from ZenJosh/master
Refactored fullscreen logic
2011-12-01 16:47:55 -08:00
Josh Pickett d90cee588a Removed try catch from requestFullScreen 2011-12-01 16:35:13 -08:00
Josh Pickett 00a38f76a7 Refactored fullscreen logic 2011-12-01 16:29:52 -08:00
Steve Heffernan b329dfd107 Merge branch 'master' of github.com:zencoder/video-js 2011-12-01 16:17:40 -08:00
Heff 11286190fa Merge pull request #97 from ZenJosh/master
Fixed Firefox/IE9 fullWindow bug
2011-12-01 16:17:28 -08:00
Josh Pickett 05d7a81885 Fixed Firefox/IE9 fullWindow bug 2011-12-01 16:07:19 -08:00
Josh Pickett 1dd70d1c77 Merge branch 'master' of http://github.com/zencoder/video-js 2011-12-01 15:47:53 -08:00
Steve Heffernan 437566740f Merge branch 'master' of github.com:zencoder/video-js 2011-12-01 15:47:52 -08:00
Steve Heffernan 7e747e95ab Updated swf object to newest version.
Optimizing player for later loaded sources.
2011-12-01 15:47:12 -08:00
Heff de6230644e Merge pull request #96 from ZenJosh/master
Added fullscreen controls to supported browsers
2011-12-01 15:46:32 -08:00
Josh Pickett 08aa73ccf6 Added fullscreen with controls to supported browsers 2011-12-01 15:38:15 -08:00
Josh Pickett 2607e82aaf Native fullscreen with controls added for supported browsers 2011-12-01 15:24:34 -08:00
Steve Heffernan ec145f6d4d Fixed an issue with ajax errors 2011-11-30 14:05:28 -08:00
Steve Heffernan 78a3b16e9c Cleaned up dev.html.example 2011-11-30 13:34:33 -08:00
Steve Heffernan 58cf933091 Updated readme to talk about dev.html 2011-11-30 13:27:21 -08:00
Steve Heffernan f8fc9a8d7b Renamed to dev.html.example 2011-11-30 13:14:39 -08:00
Steve Heffernan 5f4369e188 Added dev.html to gitignore 2011-11-30 13:13:35 -08:00
Steve Heffernan 4593421adb Removing dev.html and adding dev_example.html to allow for testing without pushing changes to dev.html 2011-11-30 13:12:28 -08:00
Steve Heffernan f0154eeab7 Added support for loading the player first and then setting the source later.
Fixed iOS loading issue.
2011-11-30 13:06:32 -08:00
Steve Heffernan 1e284827d7 Modified some comments 2011-11-30 11:53:08 -08:00
Steve Heffernan 3e99e630ea Added gitignore 2011-11-29 19:36:50 -08:00
Steve Heffernan 0c7334c861 Fixed some IE comma errors. Made ajax error clearer. Fixed a setup issue. 2011-11-29 16:39:43 -08:00
Steve Heffernan 82d55c45e7 Updated error with updating tech support 2011-11-29 12:12:13 -08:00
Steve Heffernan 7538241008 MAJOR REFACTOR: Restrcutured code into class-based components. Setup and configuring should still work the same, but controls and tech elements are now sub-classes for Component, which builds elements and applies event behaviors.
Removed demo source code from repository root. Was receiving pull requests for the release files instead of source files. This makes it more clear where to make changes.

Merge branch 'master' of github.com:zencoder/video-js

Conflicts:
	dev/src/api.js
2011-11-29 11:42:28 -08:00
Steve Heffernan 6193e01004 MAJOR REFACTOR: Restrcutured code into class-based components. Setup and configuring should still work the same, but controls and tech elements are now sub-classes for Component, which builds elements and applies event behaviors.
Removed demo source code from repository root. Was receiving pull requests for the release files instead of source files. This makes it more clear where to make changes.

Merge branch 'ui'

Conflicts:
	dev/flash/VideoJS.swf
2011-11-29 11:41:42 -08:00
Steve Heffernan ef321a8072 MAJOR REFACTOR: Restrcutured code into class-based components. Setup and configuring should still work the same, but controls and tech elements are now sub-classes for Component, which builds elements and applies event behaviors.
Removed demo source code from repository root. Was receiving pull requests for the release files instead of source files. This makes it more clear where to make changes.
2011-11-29 11:40:05 -08:00
Heff e5a44eef58 Merge pull request #92 from stevecochrane/master
Fixed a bug in api.js that would cause a JavaScript error when entering fullscreen, in HTML5 mode, for browsers that support fullscreen (Safari)
2011-11-29 10:48:42 -08:00
Steve Heffernan 5488570745 Update flash player 2011-11-21 19:44:39 -08:00
Steve Heffernan a314c0a242 Attempting new UI organization. 2011-11-21 17:19:31 -08:00
Steve Cochrane 53e1d0eb65 Fixed a bug with an enterFullScreen API call which was using a non-existant 'api()' method, when it should have been 'apiCall()'. This caused a JavaScript error which would break fullscreen in HTML5 mode for browsers that support it (Safari). 2011-11-21 14:35:58 -08:00
Steve Heffernan 193172498c Added fix for h5swf Flash version checking. (Issue 90)
Added fix for iPhone move in dom var. (Issue 84)
2011-11-18 15:53:00 -08:00
Steve Heffernan 7da9bdd073 Added licence info back to top of script. 2011-11-18 14:37:55 -08:00
Steve Heffernan df3718cd55 Updated to new version of SWF 2011-11-17 16:54:02 -08:00
Steve Heffernan c5a22081b4 Removed dist version. Minor changes/optimizations. 2011-11-17 16:28:49 -08:00
Steve Heffernan 3fc71d098d Added ready callback to setup.
Moved _V_.players storing to init.
2011-11-15 18:04:39 -08:00
Steve Heffernan 34c187cd9a Updated init script to allow for controls attribute to be false. 2011-11-15 13:27:37 -08:00
Steve Heffernan 3243b01e6c Added autoplay fix for Safari.
Added CSS updated to src files.
2011-11-14 17:32:10 -08:00
Steve Heffernan cc27d630c6 Merge branch 'master' of github.com:zencoder/video-js 2011-11-14 16:54:22 -08:00
Heff db0033ebe5 Merge pull request #81 from kristerkari/master
Simplify CSS gradient syntax & Drop units from zero values
2011-11-14 11:53:48 -08:00
Krister Kari c2b43903ab Simplify CSS gradient syntax 2011-10-14 23:03:33 +03:00
Krister Kari 2ea9c99f34 Drop units from zero values 2011-10-14 22:16:04 +03:00
Steve Heffernan 449c7014fb Merge branch 'master' of github.com:zencoder/video-js 2011-10-03 16:01:38 -07:00
Heff 6d59836b76 Merge pull request #79 from argami/master
Totally forgot to add the modification to src
2011-10-03 15:35:58 -07:00
Gamaliel A. Toro Herrera e703e1591e - combine_sources.sh last line didn't execute some character in the previous one removed
- re-generated video.js on the main
2011-10-03 22:56:12 +02:00
Gamaliel A. Toro Herrera c4f87649e4 - added technology order (source and dist) if everything fails last option flash 2011-10-03 21:20:09 +02:00
Steve Heffernan 6cccf594ad Added tagging notes 2011-10-03 11:12:21 -07:00
Steve Heffernan df41661f47 Moved youtube test file. 2011-10-03 10:32:07 -07:00
Steve Heffernan 3daa81f87e Merge branch 'master' of github.com:zencoder/video-js 2011-10-03 10:30:48 -07:00
Steve Heffernan 4f60eb896c Added YouTube support at video hack day SF. 2011-10-03 10:25:02 -07:00
Heff ee7318f6ae Merge pull request #78 from argami/master
New version is using flash all the time (sorry, was testing and forgot to switch back)
2011-10-03 10:24:08 -07:00
Gamaliel A. Toro Herrera d7aa9f9558 - change order of technologies to check first html5 over flash 2011-10-03 17:38:13 +02:00
245 arquivos alterados com 50463 adições e 13104 exclusões
+21
Ver Arquivo
@@ -0,0 +1,21 @@
/*
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 <port> your-subdomain.pagekite.me"
};
module.exports = config;
+11
Ver Arquivo
@@ -0,0 +1,11 @@
# editorconfig.org - unify code style
# plugins for text editors: editorconfig.org/#download
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
+27
Ver Arquivo
@@ -0,0 +1,27 @@
.DS_Store
dist/*
build/files/*
docs/api/*
dev.html
projects
.zenflow-log
test/*.map
.bunyipconfig.js
.s3config.json
node_modules
npm-debug.log
sandbox/*
!sandbox/*.example
# ignore any Karma conf.js files in the test/ directory
test/*.conf.js
*.swp
*.swo
*.orig
*results.xml
*.log
+43
Ver Arquivo
@@ -0,0 +1,43 @@
{
"evil" : true,
"validthis": true,
"browser" : true,
"debug" : true,
"boss" : true,
"expr" : true,
"eqnull" : true,
"quotmark" : "single",
"sub" : true,
"trailing" : true,
"undef" : true,
"laxbreak" : true,
"predef" : [
"_V_",
"videojs",
"vjs",
"goog",
"console",
"require",
"define",
"module",
"exports",
"PlayerTest",
"asyncTest",
"deepEqual",
"equal",
"expect",
"module",
"notDeepEqual",
"notEqual",
"notStrictEqual",
"ok",
"QUnit",
"raises",
"start",
"stop",
"strictEqual",
"test"
]
}
+3
Ver Arquivo
@@ -0,0 +1,3 @@
# Exclude everything but the contents of the dist directory.
**/*
!dist/**
+3
Ver Arquivo
@@ -0,0 +1,3 @@
language: node_js
node_js:
- 0.8
+177
Ver Arquivo
@@ -0,0 +1,177 @@
CHANGELOG
=========
## HEAD (Unreleased)
_(none)_
--------------------
## 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))
* Moved to using QUnit as a dependency ([view](https://github.com/videojs/video.js/pull/850))
* Added the util namespace for public utility functions ([view](https://github.com/videojs/video.js/pull/862))
* Fixed an issue with calling duration before Flash is loaded ([view](https://github.com/videojs/video.js/pull/861))
* Added player methods to externs so they can be overridden ([view](https://github.com/videojs/video.js/pull/878))
* Fixed html5 playback when switching between media techs ([view](https://github.com/videojs/video.js/pull/887))
* Fixed Firefox+Flash mousemove events so controls don't hide permanently ([view](https://github.com/videojs/video.js/pull/899))
* Fixed a test for touch detection ([view](https://github.com/videojs/video.js/pull/962))
* Updated the src file list for karma tests ([view](https://github.com/videojs/video.js/pull/948))
* Added more tests for API properties after minification ([view](https://github.com/videojs/video.js/pull/906))
* Updated projet to use npm version of videojs-swf ([view](https://github.com/videojs/video.js/pull/930))
* Added support for dist zipping on windows ([view](https://github.com/videojs/video.js/pull/944))
* Fixed iOS fullscreen issue ([view](https://github.com/videojs/video.js/pull/977))
* Fixed touch event bubbling ([view](https://github.com/videojs/video.js/pull/992))
* Fixed ARIA role attribute for button and slider ([view](https://github.com/videojs/video.js/pull/988))
* Fixed an issue where a component's dispose event would bubble up ([view](https://github.com/videojs/video.js/pull/981))
* Quieted down deprecation warnings ([view](https://github.com/videojs/video.js/pull/971))
* Updated the seek handle to contain the current time ([view](https://github.com/videojs/video.js/pull/902))
* Added requirejs and browserify support (UMD) ([view](https://github.com/videojs/video.js/pull/998))
## 4.3.0 (2013-11-04)
* Added Karma for cross-browser unit testing ([view](https://github.com/videojs/video.js/pull/714))
* Unmuting when the volume is changed ([view](https://github.com/videojs/video.js/pull/720))
* Fixed an accessibility issue with the big play button ([view](https://github.com/videojs/video.js/pull/777))
* Exported user activity methods ([view](https://github.com/videojs/video.js/pull/783))
* Added a classname to center the play button and new spinner options ([view](https://github.com/videojs/video.js/pull/784))
* Added API doc generation ([view](https://github.com/videojs/video.js/pull/801))
* Added support for codecs in Flash mime types ([view](https://github.com/videojs/video.js/pull/805))
## 4.2.2 (2013-10-15)
* Fixed a race condition that would cause videos to fail in Firefox ([view](https://github.com/videojs/video.js/pull/776))
## 4.2.1 (2013-09-09)
* Fixed an infinite loop caused by loading the library asynchronously ([view](https://github.com/videojs/video.js/pull/727))
## 4.2.0 (2013-09-04)
* Added LESS as a CSS preprocessor for the default skin ([view](https://github.com/videojs/video.js/pull/644))
* Exported MenuButtons for use in the API ([view](https://github.com/videojs/video.js/pull/648))
* Fixed ability to remove listeners added with one() ([view](https://github.com/videojs/video.js/pull/659))
* Updated buffered() to account for multiple loaded ranges ([view](https://github.com/videojs/video.js/pull/643))
* Exported createItems() for custom menus ([view](https://github.com/videojs/video.js/pull/654))
* Preventing media events from bubbling up the DOM ([view](https://github.com/videojs/video.js/pull/630))
* Major reworking of the control bar and many issues fixed ([view](https://github.com/videojs/video.js/pull/672))
* Fixed an issue with minifiying the code on Windows systems ([view](https://github.com/videojs/video.js/pull/683))
* Added support for RTMP streaming through Flash ([view](https://github.com/videojs/video.js/pull/605))
* Made tech.features available to external techs ([view](https://github.com/videojs/video.js/pull/705))
* Minor code improvements ([view](https://github.com/videojs/video.js/pull/706))
* Updated time formatting to support NaN and Infinity ([view](https://github.com/videojs/video.js/pull/627))
* Fixed an `undefined` error in cases where no tech is loaded ([view](https://github.com/videojs/video.js/pull/632))
* Exported addClass and removeClass for player components ([view](https://github.com/videojs/video.js/pull/661))
* Made the fallback message customizable ([view](https://github.com/videojs/video.js/pull/638))
* Fixed an issue with the loading spinner placement and rotation ([view](https://github.com/videojs/video.js/pull/694))
* Fixed an issue with fonts being flaky in IE8
## 4.1.0 (2013-06-28)
* Turned on method queuing for unready playback technologies (flash) [view](https://github.com/videojs/video.js/pull/553)
* Blocking user text selection on player components [view](https://github.com/videojs/video.js/pull/524)
* Exported requestFullScreen() and cancelFullScreen() in the minified version [view](https://github.com/videojs/video.js/pull/555)
* Exported the global players reference, videojs.players [view](https://github.com/videojs/video.js/pull/560)
* Added google analytics to the CDN version ([view](https://github.com/videojs/video.js/pull/568))
* Exported fadeIn/fadeOut for the Component API ([view](https://github.com/videojs/video.js/pull/581))
* Fixed an IE poster error when autoplaying ([view](https://github.com/videojs/video.js/pull/593))
* Exported bufferedPercent for the API ([view](https://github.com/videojs/video.js/pull/588))
* Augmented user agent detection, specifically for Android versions ([view](https://github.com/videojs/video.js/pull/470))
* Fixed IE9 canPlayType error ([view](https://github.com/videojs/video.js/pull/606))
* Fixed various issues with captions ([view](https://github.com/videojs/video.js/pull/609))
## 4.0.4 (2013-06-11)
* Added google analytics to current CDN version. ([view](https://github.com/videojs/video.js/pull/571))
## 4.0.3 (2013-05-28)
* Fixed an bug with exiting fullscreen. [view](https://github.com/videojs/video.js/pull/546)
## 4.0.2 (2013-05-23)
* Correct version number for CDN swf url. Minify CSS. [view](https://github.com/videojs/video.js/pull/535)
## 4.0.1 (2013-05-22)
* Fixed old IE font loading [view](https://github.com/videojs/video.js/pull/532)
## 4.0.0 (2013-05-09)
* Improved performance through an 18% size reduction using Google Closure Compiler in advanced mode
* Greater stability through an automated cross-browser/device test suite using TravisCI, Bunyip, and Browserstack.
* New plugin interface and plugin listing for extending Video.js
* New default skin design that uses font icons for greater customization
* Responsive design and retina display support
* Improved accessibility through better ARIA support
* Moved to Apache 2.0 license
* 100% JavaScript development tool set including Grunt
* Updated docs to use Github markdown
* Allow disabling of default components
* Duration is now setable (need ed for HLS m3u8 files)
* Event binders (on/off/one) now return the player instance
* Stopped player from going back to beginning on ended event
* Added support for percent width/height and fluid layouts
* Improved load order of elements to reduce reflow
* Changed addEvent function name to 'on'
* Removed conflicting array.indexOf function
* Added exitFullScreen to support BlackBerry devices (pull/143)
## 3.2.0 (2012-03-20)
* Updated docs with more options.
* Overhauled HTML5 Track support.
* Fixed Flash always autoplaying when setting source.
* Fixed localStorage context
* Updated 'fullscreenchange' event to be called even if the user presses escape to exit fullscreen.
* Automatically converting URsource URL to absolute for Flash fallback.
* Created new 'loadedalldata' event for when the source is completely downloaded
* Improved player.destroy(). Now removes elements and references.
* Refactored API to be more immediately available.
### Patches
* 3.2.1 (2012-04-06) Fixed setting width/height with javascript options
* 3.2.2 (2012-05-02) Fixed error with multiple controls fading listeners
* 3.2.3 (2012-11-12) Fixed chrome spinner continuing on seek
## 3.1.0 (2012-01-30)
* Added CSS fix for Firefox 9 fullscreen (in the rare case that it's enabled)
* Replaced swfobject with custom embed to save file size.
* Added flash iframe-mode, an experimental method for getting around flash reloading issues.
* Fixed issue with volume knob position. Improved controls fading.
* Fixed ian issue with triggering fullscreen a second time.
* Fixed issue with getting attributes in Firefox 3.0
* Escaping special characters in source URL for Flash
* Added a check for if Firefox is enabled which fixes a Firefox 9 issue
* Stopped spinner from showing on 'stalled' events since browsers sometimes don't show that they've recovered.
* Fixed CDN Version which was breaking dev.html
* Made full-window mode more independent
* Added rakefile for release generation
## 3.0.0 (2012-01-10)
* Same HTML/CSS Skin for both HTML5 and Flash video
* Super lightweight Flash fallback player for browsers that dont support HTML5 video
* Free CDN hosting
### Patches
* 3.0.2 (2012-01-12) Started tracking changes with zenflow
* 3.0.3 (2012-01-12) Added line to docs to test zenflow
* 3.0.4 (2012-01-12) Fixing an undefined source when no sources exist on load
* 3.0.5 (2012-01-12) Removed deprecated event.layerX and layerY
* 3.0.6 (2012-01-12) Fixed wrong URL for CDN in docs
* 3.0.7 (2012-01-12) Fixed an ie8 breaking bug with the poster
* 3.0.8 (2012-01-23) Fixed issue with controls not hiding in IE due to no opacity support
+279
Ver Arquivo
@@ -0,0 +1,279 @@
CONTRIBUTING
============
So you want to help out? Great! There's a number of ways you can get involved.
* [File and discuss issues](#filing-issues)
* [Contribute code](#contributing-code)
* [Build and share plugins](docs/plugins.md)
* [Answer questions on Stack Overflow](http://stackoverflow.com/questions/tagged/video.js)
There's also other Video.js projects where you can help. (check the [video.js org](https://github.com/videojs) for an up-to-date list of projects)
* [Videojs.com](https://github.com/videojs/videojs.com)
* [Video.js flash player](https://github.com/videojs/video-js-swf)
* [Player skin designer](https://github.com/videojs/designer)
* [Contribflow](https://github.com/zencoder/contribflow)
Filing issues
-------------
[GitHub Issues](https://github.com/videojs/video.js/issues) are used for all discussions around the codebase, including **bugs**, **features**, and other **enhancements**.
### Reporting a Bug
**A bug is a demonstrable problem** that is caused by the code in the repository. Good bug reports are extremely helpful. Thank You!
Guidelines for bug reports:
1. Use the [GitHub issue search](https://github.com/videojs/video.js/issues) &mdash; check if the issue has already been reported.
2. Check if the issue has already been fixed &mdash; try to reproduce it using the latest `master` branch in the repository.
3. Isolate the problem &mdash; **create a [reduced test case](http://css-tricks.com/6263-reduced-test-cases/)** with a live example. You can possibly use [this JSBin example](http://jsbin.com/axedog/7/edit) as a starting point.
A good bug report should be as detailed as possible, so that others won't have to follow up for the essential details.
Here's an example:
> Short yet concise Bug Summary
>
> Description:
> Happens on Windows 7 and OSX. Seen with IE9, Firefox 19 OSX, Chrome 21, Flash 11.6 and 11.2
>
> 1. This is the first step
> 2. This is the second step
> 3. Further steps, etc.
>
> Expected:
> (describe the expected outcome of the steps above)
>
> Actual:
> (describe what actually happens)
>
> `<url>` (a link to the reduced test case, if it exists)
>
> Any other information you want to share that is relevant to the issue being
> reported. This might include the lines of code that you have identified as
> causing the bug, and potential solutions (and your opinions on their
> merits).
**[File a bug report](https://github.com/videojs/video.js/issues/new)**
### Requesting a Feature
1. [Check the plugin list](https://github.com/videojs/video.js/wiki/Plugins) for any plugins that may already support the feature.
2. [Search the issues](https://github.com/videojs/video.js/issues) for any previous requests for the same feature, and give a thumbs up or +1 on existing requests.
2. If no previous requests exist, create a new issue. Please be as clear as possible about why the feautre is needed and the intended use case.
**[Request a feature](https://github.com/videojs/video.js/issues/new)**
Contributing code
-----------------
To contibute code you'll need to be able to build a copy of Video.js and run tests locally. There are a few requirements before getting started.
- Node.js -- Video.js uses Node for build and test automation. Node is available for Windows, Mac OS X, Linux, and SunOS, as well as source code if that doesn't scare you. [Download and install Node.js](http://nodejs.org/download/)
- grunt-cli -- Install grunt-cli globally so that you will have the correct version of grunt available for any project that needs it.
On Unix-based systems, you'll have to do this as a superuser:
```bash
sudo npm install -g grunt-cli
```
On Windows, you can just run:
```bash
npm install -g grunt-cli
```
- Contribflow -- A homegrown git workflow tool for managing feature/hotfix branches and submitting pull requests. If you have your own preferred git workflow, contribflow isn't required, but the following instructions will assume you're using it.
On Unix-based systems, you'll have to do this as a superuser:
```bash
sudo npm install -g contribflow
```
On Windows, you can just run:
```bash
npm install -g contribflow
```
### Building your own copy of Video.js
First, [fork](http://help.github.com/fork-a-repo/) the video.js git repository. At the top of every github page, there is a Fork button. Click it, and the forking process will copy Video.js into your own GitHub account.
Clone your fork of the repo into your code directory
```bash
git clone https://github.com/<your-username>/video.js.git
```
Navigate to the newly cloned directory
```bash
cd video.js
```
Assign the original repo to a remote called "upstream"
```
git remote add upstream https://github.com/videojs/video.js.git
```
>In the future, if you want to pull in updates to video.js that happened after you cloned the main repo, you can run:
>
> ```bash
> git checkout master
> git pull upstream master
> ```
Install the required node.js modules using node package manager
```bash
npm install
```
> A note to Windows developers: If you run npm commands, and you find that your command prompt colors have suddenly reversed, you can configure npm to set color to false to prevent this from happening.
> `npm config set color false`
> Note that this change takes effect when a new command prompt window is opened; the current window will not be affected.
Build a local copy of video.js and run tests
```bash
grunt
grunt test
```
Video.js is also configured to run tests with Karma. Karma is installed as a grunt plugin to run QUnit tests in real browsers, as opposed to simply running the tests in phantomjs, a headless browser.
To run the QUnit test suite in Karma, do the following:
1. Copy test/karma.conf.js.example and rename the copy test/karma.conf.js. Please note that if you decide to name the file something other than karma.conf.js, or if you decide to change the location of your conf.js file from the test/ folder, you will need to change references to karma.conf.js in Gruntfile and .gitignore to your new file name and location, so that you don't inadvertently add your conf.js file to any of your video.js pull requests.
2. Open test/karma.conf.js in an editor, and configure the properties in it as desired. At a minimum, you'll want to add the browsers that you want to run your tests in. The karma.conf.js.example file has detailed information on usage in the file itself.
After you've configured the desired properties in your karma.conf.js, run:
```bash
grunt karma:dev
```
At this point you should have a built copy of video.js in a directory named `dist`, and all tests should be passing.
### Making Changes
Whether you're adding something new, making something better, or fixing a bug, you'll first want to search the [GitHub issues](https://github.com/videojs/video.js/issues) and [plugins list](https://github.com/videojs/video.js/wiki/Plugins) to make sure you're aware of any previous discussion or work. If an unclaimed issue exists, claim it via a comment. If no issue exists for your change, submit one, follwing the [issue filing guidelines](#filing-issues).
There are two categories of changes in video.js land, features and hotfixes (Video.js follows a branching model similar to [gitflow](http://nvie.com/posts/a-successful-git-branching-model/)). Hotfixes are for urgent fixes that need to be released immediately as a patch. Features are for everything else (including non-urgent fixes). If you think you have a hotfix scenario, verify that (via comment) before starting the work. We'll focus on features here, but you can swap `hotfix` for `feature` in any command.
Start a new development branch
```bash
contrib feature start
```
You'll be prompted to name the branch. After that, contrib will create the branch locally, and use git to push it up to your origin, and track it. You're now ready to start building your feature or fixing that bug! Be sure to read the [Code Style Guide](#code-style-guide).
While you're developing, you can ensure your changes are working by writing tests (in the `test` directory) and running `grunt test`.
There's also a sandbox directory where you can add any file and it won't get tracked as a change. To start you can copy the example index file and see a working version of a player (using the local source code) by loading it in a browser.
```bash
cp sandbox/index.html.example sandbox/index.html
open sandbox/index.html
```
### 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. 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
git add .
git commit -av
git push
```
> GitHub allows you to close an issue through your commit message using the [fixes](https://github.com/blog/831-issues-2-0-the-next-generation) keyword.
>
> ```bash
> My commit message. fixes #123
> Testing: (briefly describe any testing here, for example, 'unit tests and cross-browser manual tests around playback and network interruption')
> ```
### Submitting your changes
First, thoroughly test your feature or fix, including writing tests to make sure your change doesn't get regressed in a future update. If you're fixing a bug, we recommend in addition to testing the fix itself, to do some testing around the areas that your fix has touched. For example, a brief smoketest of the player never hurts.
Make sure your changes are pushed to origin
```bash
git push
```
Use contrib to submit a a pull request (make sure you're in your feature branch)
```bash
contrib feature submit
```
You'll be prompted for title and description for the Pull Request. After that, contrib will use Git to submit your pull request to video.js.
You're Done! (except for cleanup.) To clean up your feature or hotfix branch:
First, checkout your feature or issue branch:
```bash
git checkout (branchname)
```
Run this command to clean up your feature:
```bash
contrib feature delete
```
Run this command to clean up your bug fix:
```bash
contrib hotfix delete
```
> PLEASE NOTE: THIS WILL DELETE YOUR LOCAL AND REMOTE COPIES OF THE FEATURE.
> This is meant to clean up your local and remote branches, so make sure any changes you don't want to lose have been pulled into the parent project or another branch first.
Code Style Guide
----------------
Please follow [Google's JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml) to the letter. If your editor supports [.editorconfig](http://editorconfig.org/#download) it will make it easier to manage differences from your own coding style.
### Style examples include:
* Two space indents.
* Delimit strings with single-quotes `'`, not double-quotes `"`.
* No trailing whitespace, except in markdown files where a linebreak must be forced.
* No more than [one assignment](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) per `var` statement.
* Prefer `if` and `else` to ["clever"](http://programmers.stackexchange.com/a/25281) uses of `? :` conditional or `||`, `&&` logical operators.
* **When in doubt, follow the conventions you see used in the source already.**
If you happen to find something in the codebase that does not follow the style guide, that's a good opportunity to make your first contribution!
---
### Doc Credit
This doc was inspired by some great contribution guide examples including [contribute.md template](https://github.com/contribute-md/contribute-md-template),
[grunt](https://github.com/gruntjs/grunt/wiki/Contributing),
[html5 boilerplate](https://github.com/h5bp/html5-boilerplate/blob/master/CONTRIBUTING.md),
[jquery](https://github.com/jquery/jquery/blob/master/CONTRIBUTING.md),
and [node.js](https://github.com/joyent/node/wiki/Contributing).
+476
Ver Arquivo
@@ -0,0 +1,476 @@
module.exports = function(grunt) {
var pkg, s3, semver, version, verParts, uglify;
semver = require('semver');
pkg = grunt.file.readJSON('package.json');
uglify = require('uglify-js');
try {
s3 = grunt.file.readJSON('.s3config.json');
} catch(e) {
s3 = {};
}
verParts = pkg.version.split('.');
version = {
full: pkg.version,
major: verParts[0],
minor: verParts[1],
patch: verParts[2]
};
version.majorMinor = version.major + '.' + version.minor;
// loading predefined source order from source-loader.js
// trust me, this is the easist way to do it so far
/*jshint undef:false, evil:true */
var blockSourceLoading = true;
var sourceFiles; // Needed to satisfy jshint
eval(grunt.file.read('./build/source-loader.js'));
// Project configuration.
grunt.initConfig({
pkg: pkg,
build: {
src: 'src/js/dependencies.js',
options: {
baseDir: 'src/js/'
}
},
clean: {
build: ['build/files/*'],
dist: ['dist/*']
},
jshint: {
src: {
src: ['src/js/*.js', 'Gruntfile.js', 'test/unit/*.js'],
options: {
jshintrc: '.jshintrc'
}
}
},
minify: {
source:{
src: ['build/files/combined.video.js', 'build/compiler/goog.base.js', 'src/js/exports.js'],
externs: ['src/js/player.externs.js', 'src/js/media/flash.externs.js'],
dest: 'build/files/minified.video.js'
},
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'],
dest: 'build/files/test.minified.video.js'
}
},
dist: {},
qunit: {
source: ['test/index.html'],
minified: ['test/minified.html'],
minified_api: ['test/minified-api.html']
},
watch: {
files: [ 'src/**/*', 'test/unit/*.js', 'Gruntfile.js' ],
tasks: 'dev'
},
connect: {
dev: {
options: {
port: 9999,
keepalive: true
}
}
},
copy: {
minor: {
files: [
{expand: true, cwd: 'build/files/', src: ['*'], dest: 'dist/'+version.majorMinor+'/', filter: 'isFile'} // includes files in path
]
},
patch: {
files: [
{expand: true, cwd: 'build/files/', src: ['*'], dest: 'dist/'+version.full+'/', filter: 'isFile'} // includes files in path
]
}
},
s3: {
options: s3,
minor: {
upload: [
{
src: 'dist/cdn/*',
dest: 'vjs/'+version.majorMinor+'/',
rel: 'dist/cdn/',
headers: {
'Cache-Control': 'public, max-age=2628000'
}
}
]
},
patch: {
upload: [
{
src: 'dist/cdn/*',
dest: 'vjs/'+version.full+'/',
rel: 'dist/cdn/',
headers: {
'Cache-Control': 'public, max-age=31536000'
}
}
]
}
},
cssmin: {
minify: {
expand: true,
cwd: 'build/files/',
src: ['video-js.css'],
dest: 'build/files/',
ext: '.min.css'
}
},
less: {
dev: {
files: {
'build/files/video-js.css': 'src/css/video-js.less'
}
}
},
karma: {
options: {
configFile: 'test/karma.conf.js'
},
dev: {
configFile: 'test/karma.conf.js',
autoWatch: true
},
ci: {
configFile: 'test/karma.conf.js',
autoWatch: false
}
},
vjsdocs: {
all: {
src: sourceFiles,
dest: 'docs/api',
options: {
baseURL: 'https://github.com/videojs/video.js/blob/master/'
}
}
},
zip: {
dist: {
router: function (filepath) {
var path = require('path');
return path.relative('dist', filepath);
},
// compression: 'DEFLATE',
src: ['dist/video-js/**/*'],
dest: 'dist/video-js-' + version.full + '.zip'
}
},
usebanner: {
dist: {
options: {
position: 'top',
banner: '/*! Video.js v' + version.full + ' <%= pkg.copyright %> */ ',
linebreak: true
},
files: {
src: [ 'build/files/minified.video.js']
}
}
},
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',
commit: true,
message: 'Release %version%',
prefix: 'v'
}
});
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-s3');
grunt.loadNpmTasks('contribflow');
grunt.loadNpmTasks('grunt-karma');
grunt.loadNpmTasks('videojs-doc-generator');
grunt.loadNpmTasks('grunt-zip');
grunt.loadNpmTasks('grunt-banner');
grunt.loadNpmTasks('grunt-version');
grunt.loadNpmTasks('grunt-tagrelease');
grunt.loadNpmTasks('chg');
// grunt.loadTasks('./docs/tasks/');
// grunt.loadTasks('../videojs-doc-generator/tasks/');
// Default task.
grunt.registerTask('default', ['jshint', 'less', 'build', 'minify', 'usebanner', 'dist']);
// Development watch task
grunt.registerTask('dev', ['jshint', 'less', 'build', 'qunit:source']);
grunt.registerTask('test', ['jshint', 'less', 'build', 'minify', 'usebanner', 'qunit']);
var fs = require('fs'),
gzip = require('zlib').gzip;
grunt.registerMultiTask('build', 'Building Source', function(){
// Fix windows file path delimiter issue
var i = sourceFiles.length;
while (i--) {
sourceFiles[i] = sourceFiles[i].replace(/\\/g, '/');
}
// Create a combined sources file. https://github.com/zencoder/video-js/issues/287
var combined = '';
sourceFiles.forEach(function(result){
combined += grunt.file.read(result);
});
// Replace CDN version ref in js. Use major/minor version.
combined = combined.replace(/GENERATED_CDN_VSN/g, version.majorMinor);
grunt.file.write('build/files/combined.video.js', combined);
// Copy over other files
// grunt.file.copy('src/css/video-js.png', 'build/files/video-js.png');
grunt.file.copy('node_modules/videojs-swf/dist/video-js.swf', 'build/files/video-js.swf');
// Inject version number into css file
var css = grunt.file.read('build/files/video-js.css');
css = css.replace(/GENERATED_AT_BUILD/g, version.full);
grunt.file.write('build/files/video-js.css', css);
// Copy over font files
grunt.file.recurse('src/css/font', function(absdir, rootdir, subdir, filename) {
// Block .DS_Store files
if ('filename'.substring(0,1) !== '.') {
grunt.file.copy(absdir, 'build/files/font/' + filename);
}
});
// Minify CSS
grunt.task.run(['cssmin']);
});
grunt.registerMultiTask('minify', 'Minify JS files using Closure Compiler.', function() {
var done = this.async();
var exec = require('child_process').exec;
var externs = this.data.externs || [];
var dest = this.data.dest;
var filePatterns = [];
// Make sure deeper directories exist for compiler
grunt.file.write(dest, '');
if (this.data.sourcelist) {
filePatterns = filePatterns.concat(grunt.file.read(this.data.sourcelist).split(','));
}
if (this.data.src) {
filePatterns = filePatterns.concat(this.data.src);
}
// Build closure compiler shell command
var command = 'java -jar build/compiler/compiler.jar'
+ ' --compilation_level ADVANCED_OPTIMIZATIONS'
// + ' --formatting=pretty_print'
+ ' --js_output_file=' + dest
+ ' --create_source_map ' + dest + '.map --source_map_format=V3'
+ ' --jscomp_warning=checkTypes --warning_level=VERBOSE'
+ ' --output_wrapper "(function() {%output%})();"';
//@ sourceMappingURL=video.js.map
// Add each js file
grunt.file.expand(filePatterns).forEach(function(file){
command += ' --js='+file;
});
// Add externs
externs.forEach(function(extern){
command += ' --externs='+extern;
});
// Run command
exec(command, { maxBuffer: 500*1024 }, function(err, stdout, stderr){
if (err) {
grunt.warn(err);
done(false);
}
if (stdout) {
grunt.log.writeln(stdout);
}
done();
});
});
grunt.registerTask('dist-copy', 'Assembling distribution', function(){
var css, jsmin, jsdev, cdnjs;
// Manually copy each source file
grunt.file.copy('build/files/minified.video.js', 'dist/video-js/video.js');
grunt.file.copy('build/files/combined.video.js', 'dist/video-js/video.dev.js');
grunt.file.copy('build/files/video-js.css', 'dist/video-js/video-js.css');
grunt.file.copy('build/files/video-js.min.css', 'dist/video-js/video-js.min.css');
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) {
// Block .DS_Store files
if ('filename'.substring(0,1) !== '.') {
grunt.file.copy(absdir, 'dist/video-js/font/' + filename);
}
});
// 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');
grunt.file.copy('build/files/video-js.min.css', 'dist/cdn/video-js.css');
grunt.file.copy('node_modules/videojs-swf/dist/video-js.swf', 'dist/cdn/video-js.swf');
grunt.file.copy('build/demo-files/demo.captions.vtt', 'dist/cdn/demo.captions.vtt');
grunt.file.copy('build/demo-files/demo.html', 'dist/cdn/demo.html');
// Replace font urls with CDN versions
css = grunt.file.read('dist/cdn/video-js.css');
css = css.replace(/font\//g, '../f/2/');
grunt.file.write('dist/cdn/video-js.css', css);
// Add CDN-specfic JS
jsmin = grunt.file.read('dist/cdn/video.js');
// GA Tracking Pixel (manually building the pixel URL)
cdnjs = uglify.minify('src/js/cdn.js').code.replace('v0.0.0', 'v'+version.full);
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();
});
});
};
+13
Ver Arquivo
@@ -0,0 +1,13 @@
Copyright 2013 Brightcove, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-165
Ver Arquivo
@@ -1,165 +0,0 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
+10 -146
Ver Arquivo
@@ -1,153 +1,17 @@
VideoJS - [HTML5 Video Player](http://videojs.com)
==================================================
Version 3.0 BETA
# [Video.js - HTML5 Video Player](http://videojs.com) [![Build Status](https://travis-ci.org/zencoder/video-js.png?branch=master)](https://travis-ci.org/zencoder/video-js)
---
BETA NOTES
Version 3 is almost a complete rewrite of the previous versions of VideoJS. New features includes:
> 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.
- HTML/CSS Controls and API now work for both the HTML5 and Flash versions.
- Custom Super-lightweight Flash Fallback
- Embed Code is much simpler.
- No more "vjs-box" div required, just use the video tag.
- No more embedding of Flash fallback within the video tag HTML.
Visit [videojs.com](http://videojs.com) for an overview, download options, and instructions on how to use the player on your site.
---
## Contributing
Video.js is a free and open source library, and we appreciate any help you're willing to give. Check out the [contributing guide](CONTRIBUTING.md).
View [VideoJS.com](http://videojs.com) for a demo and overview.
## Building your own Video.js from source
To build your own custom version read the section on [contributing code](CONTRIBUTING.md#contributing-code) and ["Building your own copy"](CONTRIBUTING.md#building-your-own-copy-of-videojs) in the contributing guide.
VideoJS is an HTML5 video player that uses the HTML5 video tag built into modern browsers, and uses javascript to add custom controls, new functionality, and to fix cross browser bugs. For browsers that don't support HTML5, it will fallback to a Flash player.
## License
View demo.html for an example of how to use it.
Video.js is licensed under the Apache License, Version 2.0. [View the license file](LICENSE)
Originally based on [this tutorial](http://blog.steveheffernan.com/2010/04/how-to-build-an-html5-video-player/).
Contributors (Github Username)
------------------------------
heff, dz0ny, sentientbit, tvdeyen, brandonarbini, gordonbrander, Shraymonks, albertogasparin, sandaru1, nicholasbs, majornista, Fredust85, @wonderboymusic, ellis-, emirpprime, eirikb, mbrubeck
Getting Started
---------------
### Step 1: Include the VideoJS Javascript and CSS files in the head of your page.
Change the file urls to point to the files on your server.
<script src="video.js"></script>
<link href="video-js.css" rel="stylesheet">
### Step 2: Add an HTML5 video tag to your page.
Use the video tag as normal, with a few extra pieces for VideoJS:
1. The 'data-setup' Atrribute tells VideoJS to automatically set up the video when the page is ready, and read any options (in JSON format) from the attribute.
2. The 'id' Attribute: Should be used and unique for every video on the same page.
3. The 'class' attribute contains two classes:
- 'video-js' applies styles that are required for VideoJS 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.
<video id="example_video_1" class="video-js vjs-default-skin" controls preload="auto" width="640" height="264"
poster="http://video-js.zencoder.com/oceans-clip.png"
data-setup='{"example_option":true}'>
<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' />
</video>
### Step 3: Nada!
That's all it take to get started. See the docs for more advanced uses.
Coming Next
-----------
- Stable Release
Changelog
---------
3.0b
- Complete rewrite in progress
2.0.3
- Feature: Made returning to the start at the end of the movie an option ("returnToStart").
- Feature: Added loop option to loop movie ("loop").
- Feature: Reorganized player API and listeners.
- Feature: Added option to disable controls. controlsEnabled: false
- Feature: Setup method now has a callback, so you can more easily work with the player after setup
- Feature: Added listeners for enter/exit full screen/window.
- Feature: Added a VideoJS.player(id) function for getting the player for a video ID
- Changes: setupAllWhenReady is now just setupAll (backward compatible)
- Fix: Check for Android browser now excludes firefox and opera
2.0.2 (2010-12-10)
- Feature: Rewrote and optimized subtitle code.
- Feature: Protecting against volume ranges outside of 1 and 0.
- Fix: Bug in Safari for Mac OS 10.5 (Leopard) that was breaking fullscreen.
2.0.1 (2010-11-22)
- Fix: Issue with big play button when multiple videos are on the page.
- Fix: Optimized play progress tracking.
- Fix: Optimized buffer progress checking.
- Fix: Firefox not showing Flash fallback object.
2.0.0 (2010-11-21)
- Feature: Created "behaviors" concept for adding behaviors to elements
- Feature: Switched back to divs for controls, for more portable styles
- Feature: Created playerFallbackOrder array option. ["html5", "flash", "links"]
- Feature: Created playerType concept, for initializing different platforms
- Feature: Added play button for Android
- Feature: Added spinner for iPad (non-fullscreen)
- Feature: Split into multiple files for easier development
- Feature: Combined VideoJS & _V_ into the same variable to reduce confusion
- Fix: Checking for m3u8 files (Apple HTTP Streaming)
- Fix: Catching error on localStorage full that safari seems to randomly throw
- Fix: Scrubbing to end doesn't trigger onEnded
1.1.5 (2010-11-09)
- Feature: Switched to track method for setting subtitles. Now works like spec.
- Feature: Created "players" concept for defining fallbacks and fallback order
- Fix: Android playback bug.
- Fix: Massive reorganization of code to make easier to navigate
1.1.4 (2010-11-06)
- Feature: Added loading spinner.
- Feature: Improved styles loaded checking.
- Feature: Added volume() function to get and set volume through the player.
- Fix: Fix issue where FF would loop video in background when ended.
- Fix: Bug in Chrome that shows poster & plays audio if you set currentTime too quickly.
- Fix: Bug in Safari where waiting is triggered and shows spinner when not needed
- Fix: Updated to show links if only unplayable sources and no Flash.
- Fix: Issue where if play button was loaded after play, it wouldn't hide.
1.1.3 (2010-10-19)
- Feature: Width/Height functions for resizing the player
- Feature: Made initial click & hold trigger new value on progress and volume
- Feature: Made controls not hide when hovering over them
- Feature: Added big play button as default starting control.
- Fix: Removed trailing comma that was breaking IE7
- Fix: Removed some vars from global scope
- Fix: Changed a document.onmousemove to an eventListener to prevent conflicts
- Fix: Added a unique ID to FlowPlayer demo object to fix a FlowPlayer bug. Thanks @emirpprime.
- Fix: Safari error on unloaded video
1.1.2 (2010-09-20)
- Added a fix for the poster bug in iPad/iPhone
- Added more specificity to styles
1.1.1 (2010-09-14)
- First Formally Versioned Release
1.0.0 (2010-05-18)
- First released
Copyright 2014 Brightcove, Inc.
+16
Ver Arquivo
@@ -0,0 +1,16 @@
{
"name": "video.js",
"description": "An HTML5 and Flash video player with a common API and skin for both.",
"version": "4.5.2",
"main": [
"dist/video-js/video.js",
"dist/video-js/video-js.css"
],
"keywords": [
"videojs",
"html5",
"flash",
"video",
"player"
]
}
+37
Ver Arquivo
@@ -0,0 +1,37 @@
[
{
"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"
}
]
+202
Ver Arquivo
@@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+292
Ver Arquivo
@@ -0,0 +1,292 @@
/*
* Copyright 2009 The Closure Compiler Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//
// Contents
//
The Closure Compiler performs checking, instrumentation, and
optimizations on JavaScript code. The purpose of this README is to
explain how to build and run the Closure Compiler.
The Closure Compiler requires Java 6 or higher.
http://www.java.com/
//
// Building The Closure Compiler
//
There are three ways to get a Closure Compiler executable.
1) Use one we built for you.
Pre-built Closure binaries can be found at
http://code.google.com/p/closure-compiler/downloads/list
2) Check out the source and build it with Apache Ant.
First, check out the full source tree of the Closure Compiler. There
are instructions on how to do this at the project site.
http://code.google.com/p/closure-compiler/source/checkout
Apache Ant is a cross-platform build tool.
http://ant.apache.org/
At the root of the source tree, there is an Ant file named
build.xml. To use it, navigate to the same directory and type the
command
ant jar
This will produce a jar file called "build/compiler.jar".
3) Check out the source and build it with Eclipse.
Eclipse is a cross-platform IDE.
http://www.eclipse.org/
Under Eclipse's File menu, click "New > Project ..." and create a
"Java Project." You will see an options screen. Give the project a
name, select "Create project from existing source," and choose the
root of the checked-out source tree as the existing directory. Verify
that you are using JRE version 6 or higher.
Eclipse can use the build.xml file to discover rules. When you
navigate to the build.xml file, you will see all the build rules in
the "Outline" pane. Run the "jar" rule to build the compiler in
build/compiler.jar.
//
// Running The Closure Compiler
//
Once you have the jar binary, running the Closure Compiler is straightforward.
On the command line, type
java -jar compiler.jar
This starts the compiler in interactive mode. Type
var x = 17 + 25;
then hit "Enter", then hit "Ctrl-Z" (on Windows) or "Ctrl-D" (on Mac or Linux)
and "Enter" again. The Compiler will respond:
var x=42;
The Closure Compiler has many options for reading input from a file,
writing output to a file, checking your code, and running
optimizations. To learn more, type
java -jar compiler.jar --help
You can read more detailed documentation about the many flags at
http://code.google.com/closure/compiler/docs/gettingstarted_app.html
//
// Compiling Multiple Scripts
//
If you have multiple scripts, you should compile them all together with
one compile command.
java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js
The Closure Compiler will concatenate the files in the order they're
passed at the command line.
If you need to compile many, many scripts together, you may start to
run into problems with managing dependencies between scripts. You
should check out the Closure Library. It contains functions for
enforcing dependencies between scripts, and a tool called calcdeps.py
that knows how to give scripts to the Closure Compiler in the right
order.
http://code.google.com/p/closure-library/
//
// Licensing
//
Unless otherwise stated, all source files are licensed under
the Apache License, Version 2.0.
-----
Code under:
src/com/google/javascript/rhino
test/com/google/javascript/rhino
URL: http://www.mozilla.org/rhino
Version: 1.5R3, with heavy modifications
License: Netscape Public License and MPL / GPL dual license
Description: A partial copy of Mozilla Rhino. Mozilla Rhino is an
implementation of JavaScript for the JVM. The JavaScript parser and
the parse tree data structures were extracted and modified
significantly for use by Google's JavaScript compiler.
Local Modifications: The packages have been renamespaced. All code not
relevant to parsing has been removed. A JsDoc parser and static typing
system have been added.
-----
Code in:
lib/rhino
Rhino
URL: http://www.mozilla.org/rhino
Version: Trunk
License: Netscape Public License and MPL / GPL dual license
Description: Mozilla Rhino is an implementation of JavaScript for the JVM.
Local Modifications: Minor changes to parsing JSDoc that usually get pushed
up-stream to Rhino trunk.
-----
Code in:
lib/args4j.jar
Args4j
URL: https://args4j.dev.java.net/
Version: 2.0.16
License: MIT
Description:
args4j is a small Java class library that makes it easy to parse command line
options/arguments in your CUI application.
Local Modifications: None.
-----
Code in:
lib/guava.jar
Guava Libraries
URL: http://code.google.com/p/guava-libraries/
Version: 13.0.1
License: Apache License 2.0
Description: Google's core Java libraries.
Local Modifications: None.
-----
Code in:
lib/jsr305.jar
Annotations for software defect detection
URL: http://code.google.com/p/jsr-305/
Version: svn revision 47
License: BSD License
Description: Annotations for software defect detection.
Local Modifications: None.
-----
Code in:
lib/jarjar.jar
Jar Jar Links
URL: http://jarjar.googlecode.com/
Version: 1.1
License: Apache License 2.0
Description:
A utility for repackaging Java libraries.
Local Modifications: None.
----
Code in:
lib/junit.jar
JUnit
URL: http://sourceforge.net/projects/junit/
Version: 4.10
License: Common Public License 1.0
Description: A framework for writing and running automated tests in Java.
Local Modifications: None.
---
Code in:
lib/protobuf-java.jar
Protocol Buffers
URL: http://code.google.com/p/protobuf/
Version: 2.4.1
License: New BSD License
Description: Supporting libraries for protocol buffers,
an encoding of structured data.
Local Modifications: None
---
Code in:
lib/ant.jar
lib/ant-launcher.jar
URL: http://ant.apache.org/bindownload.cgi
Version: 1.8.1
License: Apache License 2.0
Description:
Ant is a Java based build tool. In theory it is kind of like "make"
without make's wrinkles and with the full portability of pure java code.
Local Modifications: None
---
Code in:
lib/json.jar
URL: http://json.org/java/index.html
Version: JSON version 20090211
License: MIT license
Description:
JSON is a set of java files for use in transmitting data in JSON format.
Local Modifications: None
---
Code in:
tools/maven-ant-tasks-2.1.3.jar
URL: http://maven.apache.org
Version 2.1.3
License: Apache License 2.0
Description:
Maven Ant tasks are used to manage dependencies and to install/deploy to
maven repositories.
Local Modifications: None
Arquivo binário não exibido.
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+41
Ver Arquivo
@@ -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 ]
+31
Ver Arquivo
@@ -0,0 +1,31 @@
<!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 -->
</video>
</body>
</html>
+73
Ver Arquivo
@@ -0,0 +1,73 @@
// This file is used to load the video.js source files into a page
// in the correct order based on dependencies.
// When you create a new source file you will need to add
// it to the list below to use it in sandbox/index.html and
// test/index.html
// You can use the projectRoot variable to adjust relative urls
// that this script loads. By default it's "../", which is what /sandbox
// and /test need. If you had sandbox/newDir/index.html, in index.html you
// would set projectRoot = "../../"
// We could use somehting like requireJS to load files, and at one point
// we used goog.require/provide to load dependencies, but that seems like
// overkill with the small number of files we actually have.
// ADD NEW SOURCE FILES HERE
var sourceFiles = [
"src/js/core.js",
"src/js/core-object.js",
"src/js/events.js",
"src/js/lib.js",
"src/js/util.js",
"src/js/component.js",
"src/js/button.js",
"src/js/slider.js",
"src/js/menu.js",
"src/js/player.js",
"src/js/control-bar/control-bar.js",
"src/js/control-bar/play-toggle.js",
"src/js/control-bar/time-display.js",
"src/js/control-bar/fullscreen-toggle.js",
"src/js/control-bar/progress-control.js",
"src/js/control-bar/volume-control.js",
"src/js/control-bar/mute-toggle.js",
"src/js/control-bar/volume-menu-button.js",
"src/js/poster.js",
"src/js/loading-spinner.js",
"src/js/big-play-button.js",
"src/js/media/media.js",
"src/js/media/html5.js",
"src/js/media/flash.js",
"src/js/media/loader.js",
"src/js/tracks.js",
"src/js/json.js",
"src/js/setup.js",
"src/js/plugins.js"
];
// Allow overriding the default project root
var projectRoot = projectRoot || '../';
function loadScripts(scriptsArr){
for (var i = 0; i < scriptsArr.length; i++) {
// Using document.write because that's the easiest way to avoid triggering
// asynchrnous script loading
document.write( "<script src='" + projectRoot + scriptsArr[i] + "'><\/script>" );
}
}
// We use this file in the grunt build script to load the same source file list
// and don't want to load the scripts there.
if (typeof blockSourceLoading === 'undefined') {
loadScripts(sourceFiles);
// Allow for making Flash first
if (window.location.href.indexOf("?flash") !== -1) {
// Using doc.write to load this script to, otherwise when it runs videojs
// is undefined
document.write('<script>videojs.options.techOrder = ["flash"];videojs.options.flash.swf = "../src/swf/video-js.swf";</script>')
}
}
+22
Ver Arquivo
@@ -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"
}
+335
Ver Arquivo
@@ -0,0 +1,335 @@
{
"project": {
"owner": "videojs",
"name": "video.js",
"urls": {
"git": "https://github.com/videojs/video.js.git"
},
"requirements": [
{
"name": "git",
"info": "http://git-scm.com",
"test": "which git"
},
{
"name": "node.js",
"info": "http://nodejs.org",
"test": "which node"
}
]
},
"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": {
"steps": [
{
"desc": "Run automated tests",
"exec": "grunt test"
}
]
},
"contributions": {
"feature": {
"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",
"prompt": "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": "Urgent fixes 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",
"prompt": "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",
"prompt": "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 %>"
}
]
}
},
"release": {
"desc": "Create and publish a release",
"steps": [
{
"desc": "Ensure there's no unadded changes",
"exec": "git diff --exit-code"
},
{
"desc": "Ensure there's no added changes",
"exec": "git diff --cached --exit-code"
},
{
"desc": "Have the changes been merged into the release branch (stable)?",
"prompt": "confirm"
},
{
"id": "type",
"desc": "Provide the release type",
"prompt": {
"message": "release type",
"default": "patch",
"type": "text"
}
},
{
"desc": "Checkout and update the release branch",
"exec": "git checkout stable & git pull"
},
{
"desc": "Run tests",
"exec": "grunt test"
},
{
"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"
},
{
"desc": "Add the (otherwise ignored) release files",
"exec": "git add dist/video-js --force"
},
{
"desc": "Rebuild the docs",
"exec": "grunt vjsdocs"
},
{
"desc": "Update the cdn urls in the docs",
"exec": "grunt cdn-links"
},
{
"desc": "Tag the release",
"exec": "grunt tagrelease"
},
{
"desc": "Push changes to the remote",
"exec": "git push origin stable"
},
{
"desc": "Push tags to the remote",
"exec": "git push --tags"
},
{
"desc": "Publish to npm",
"exec": "npm publish"
},
{
"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 origin master"
}
]
}
}
}
-22
Ver Arquivo
@@ -1,22 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>VideoJS | HTML5 Video Player</title>
<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>
</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'>
</video>
</body>
</html>
-36
Ver Arquivo
@@ -1,36 +0,0 @@
#! /bin/csh
# Combines Source Files. In terminal, sh combine_sources.sh
# It will put a new video.js file under dist/
cat ../src/_begin.js > ../dist/video.js
cat ../src/core.js >> ../dist/video.js
cat ../src/api.js >> ../dist/video.js
cat ../src/lib.js >> ../dist/video.js
cat ../src/log.js >> ../dist/video.js
cat ../src/ecma.js >> ../dist/video.js
cat ../src/json.js >> ../dist/video.js
cat ../src/events.js >> ../dist/video.js
cat ../src/tracks.js >> ../dist/video.js
cat ../src/tech/html5.js >> ../dist/video.js
cat ../src/tech/flowplayer.js >> ../dist/video.js
# h5swf temporarily requires swfobject
cat ../src/tech/h5swf.js >> ../dist/video.js
cat ../flash/swfobject.js >> ../dist/video.js
cat ../src/behaviors/behaviors.js >> ../dist/video.js
cat ../src/behaviors/seekBar.js >> ../dist/video.js
cat ../src/behaviors/texttrackdisplays.js >> ../dist/video.js
cat ../src/behaviors/volume.js >> ../dist/video.js
cat ../src/controls/bar.js >> ../dist/video.js
cat ../src/controls/bigPlay.js >> ../dist/video.js
cat ../src/controls/subtitlesBox.js >> ../dist/video.js
cat ../src/autoload.js >> ../dist/video.js
cat ../src/_end.js >> ../dist/video.js
-6
Ver Arquivo
@@ -1,6 +0,0 @@
body { font-size: 11px; font-family: 'Helvetica Neue', helvetica, arial; }
td, th { text-align: left; vertical-align: top; }
td.info-col { width: 240px; }
td.data { text-align: right; }
span.na { color: red; }
span.undefined { color: #999; }
-102
Ver Arquivo
@@ -1,102 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>HTML5 Video Player</title>
<link rel="stylesheet" href="../design/video-js.css" type="text/css">
<!--[if lt IE 9]>
<script>
document.createElement("video"); // HTML5 Shiv. Must be in <head>.
</script>
<![endif]-->
<!--[if IE]>
<script src="https://getfirebug.com/firebug-lite.js" type="text/javascript" charset="utf-8"></script>
<![endif]-->
<script src="../src/core.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/lib.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/ecma.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/json.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/api.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/events.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/tracks.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/behaviors/behaviors.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/behaviors/seekBar.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/behaviors/volume.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/behaviors/texttrackdisplays.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/controls/bigPlay.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/controls/bar.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/controls/subtitlesBox.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/tech/html5.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/tech/flowplayer.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/autoload.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/log.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/tech/h5swf.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript" src="../flash/swfobject.js"></script>
<link rel="stylesheet" href="compare.css" type="text/css">
<script type="text/javascript" src="compare.js"></script>
</head>
<body>
<table border="0" cellspacing="5" cellpadding="5">
<tr><th colspan="2">HTML5</th><th colspan="2">H5Swf</th><th colspan="2">Flowplayer</th></tr>
<tr>
<td colspan="2">
<video id="vid1" class="video-js vjs-default-skin" preload="auto" width="480" height="198">
<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'>
</video>
</td>
<td colspan="2">
<video id="vid2" class="video-js vjs-default-skin" preload="auto" width="480" height="198">
<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'>
</video>
</td>
<td colspan="2">
<video id="vid3" class="video-js vjs-default-skin" preload="auto" width="480" height="198">
<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'>
</video>
</td>
</tr>
<tr>
<td class="info-col">
<table id="html5_props" border="0" cellspacing="0" cellpadding="0"></table>
</td>
<td class="info-col">
<div id="html5_events"></div>
</td>
<td class="info-col">
<table id="h5swf_props" border="0" cellspacing="0" cellpadding="0"></table>
</td>
<td class="info-col">
<div id="h5swf_events"></div>
</td>
<td class="info-col">
<table id="flowplayer_props" border="0" cellspacing="0" cellpadding="0"></table>
</td>
<td class="info-col">
<div id="flowplayer_events"></div>
</td>
</tr>
</table>
</body>
</html>
-55
Ver Arquivo
@@ -1,55 +0,0 @@
$(function(){
var tech, i,
techList = ["html5","h5swf","flowplayer"],
props = "error,currentSrc,networkState,buffered,readyState,seeking,initialTime,duration,startOffsetTime,paused,played,seekable,ended,videoWidth,videoHeight,textTracks,preload,currentTime,playbackRate,autoplay,loop,controls,volume,muted,defaultMuted".split(","),
methods = "play,pause,src,load,canPlayType,addTextTrack",
notUsed = "mediaGroup,controller,videoTracks,audioTracks,defaultPlaybackRate";
for (i=0; i < techList.length; i++) {
tech = techList[i];
var player = _V_("vid"+(i+1), { "techOrder":[tech] });
_V_.each(_V_.html5Events, function(evt){
player.addEvent(evt, _V_.proxy(tech, function(evt){
var eventsId = "#"+this+"_events",
type = evt.type,
prev = $(eventsId+" div").first();
if (prev && prev.html() && prev.html().indexOf(type + " ") === 0) {
var countSpan = prev.children(".count");
countSpan.html(parseInt(countSpan.html() || 1) + 1);
} else {
$("#"+this+"_events").prepend("<div>" + evt.type + " <span class='count'></span></div>");
}
}));
});
var propTable = $("#"+tech+"_props");
_V_.each(props, function(prop){
propTable.append("<tr><th>"+prop+"</th><td id='"+tech+prop+"' class='data'></td></tr>")
});
setInterval(_V_.proxy(player, function(){
_V_.each(props, _V_.proxy(this, function(prop){
var result = ""
try {
result = this[prop]();
if (result === false) result = "false";
if (result === true) result = "true";
if (result === "") result = "''";
if (result === null) result = "<span class='undefined'>null</span>";
if (result === undefined) result = "<span class='undefined'>undefined</span>";
if (typeof result.start == "function") {
result = (result.length > 0) ? "s:"+result.start(0)+" e:"+result.end(0) : "-";
}
} catch(e) {
result = "<span class='na'>N/A</span>";
}
$("#"+this.currentTechName+prop).html(result);
}));
}), 500);
};
});
-8
Ver Arquivo
@@ -1,8 +0,0 @@
Tracking/Polling CurrentTime Manually
-------------------------------------
- Necessary for most flash players and browsers that don't trigger timeupdate events.
- In VJS 1-2, we always tracked time because timeupdate was rare.
- Now most browsers support it well. There is a delay bug in the current Chrome.
http://code.google.com/p/chromium/issues/detail?id=92251
Andrew from Chrome told me it would be fix in an upcoming release.
Going to rely on browsers timeupdates when available now.
-13
Ver Arquivo
@@ -1,13 +0,0 @@
1
00:00:00,000 --> 00:00:07,200
[Background Music Playing]
2
00:00:16,000 --> 00:00:17,200
Welcome to this week's episode
3
00:00:17,400 --> 00:00:19,000
of explore California
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 85 KiB

-190
Ver Arquivo
@@ -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);
}
-307
Ver Arquivo
@@ -1,307 +0,0 @@
/*
VideoJS Default Styles (http://videojs.com)
Version 3.0
REQUIRED STYLES (be careful overriding)
================================================================================ */
/* When loading the player, the video tag is replaced with a DIV,
that will hold the video tag or object tag for other playback methods.
The div contains the video playback element (Flash or HTML5) and controls, and sets the width and height of the video.
** If you want to add some kind of border/padding (e.g. a frame), or special positioning, use another containing element.
Otherwise you risk messing up control positioning and full window mode. **
*/
.video-js {
background-color: #000; position: relative; padding: 0;
/* Start with 10px for base font size so other dimensions can be em based and easily calculable. */
font-size: 10px;
}
/* Playback technology elements expand to the width/height of the containing div. <video> or <object> */
.video-js .vjs-tech { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
/* Fullscreen Styles */
body.vjs-full-window {
padding: 0; margin: 0;
height: 100%; overflow-y: auto; /* Fix for IE6 full-window. http://www.cssplay.co.uk/layouts/fixed.html */
}
.video-js.vjs-fullscreen {
position: fixed; overflow: hidden; z-index: 1000; left: 0; top: 0; bottom: 0; right: 0; width: 100% !important; height: 100% !important;
_position: absolute; /* IE6 Full-window (underscore hack) */
}
/* Subtiles Style */
.video-js .vjs-subtitles { color: #fff; font-size: 20px; text-align: center; position: absolute; bottom: 40px; left: 0; right: 0; }
/* DEFAULT SKIN (override in another file)
================================================================================
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. You can remove all these styles by removing the 'vjs-default-skin' class from the tag. */
/* The default control bar. Created by bar.js */
.vjs-default-skin .vjs-controls {
position: absolute;
bottom: 0; /* Distance from the bottom of the box/video. Keep 0. Use height to add more bottom margin. */
left: 0; right: 0; /* 100% width of div */
opacity: 0.85; display: block; /* Start hidden */
margin: 0; padding: 0; /* Controls are absolutely position, so no padding necessary */
height: 2.6em; /* Including any margin you want above or below control items */
color: #fff; border-top: 1px solid #404040;
/* CSS Gradient */
/* Can use the Ultimate CSS Gradient Generator: http://www.colorzilla.com/gradient-editor/ */
background: #242424; /* Old browsers */
background: -moz-linear-gradient(top, #242424 50%, #1f1f1f 50%, #171717 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(50%,#242424), color-stop(50%,#1f1f1f), color-stop(100%,#171717)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #242424 50%,#1f1f1f 50%,#171717 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #242424 50%,#1f1f1f 50%,#171717 100%); /* Opera11.10+ */
background: -ms-linear-gradient(top, #242424 50%,#1f1f1f 50%,#171717 100%); /* IE10+ */
/* Filter was causing a lot of weird issues in IE. Elements would stop showing up, or other styles would break. */
/*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#242424', endColorstr='#171717',GradientType=0 );*/ /* IE6-9 */
background: linear-gradient(top, #242424 50%,#1f1f1f 50%,#171717 100%); /* W3C */
/* Fade-in using CSS Transitions */
-webkit-transition: opacity 0.3s linear;
-moz-transition: opacity 0.3s linear;
-o-transition: opacity 0.3s linear;
-ms-transition: opacity 0.3s linear;
transition: opacity 0.3s linear;
}
/* General styles for individual controls. */
.vjs-default-skin .vjs-control {
position: relative; float: left;
text-align: center; margin: 0; padding: 0;
height: 2.6em; width: 2.6em;
}
.vjs-default-skin .vjs-control:focus {
outline: 0;
}
/* Hide control text visually, but have it available for screenreaders: h5bp.com/v */
.vjs-default-skin .vjs-control-text { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
/* Play/Pause
-------------------------------------------------------------------------------- */
.vjs-default-skin .vjs-play-control { width: 5em; cursor: pointer !important; }
/* Play Icon */
.vjs-default-skin.vjs-paused .vjs-play-control div { width: 15px; height: 17px; background: url('video-js.png'); margin: 0.5em auto 0; }
.vjs-default-skin.vjs-playing .vjs-play-control div { width: 15px; height: 17px; background: url('video-js.png') -25px 0; margin: 0.5em auto 0; }
/* Rewind
-------------------------------------------------------------------------------- */
.vjs-default-skin .vjs-rewind-control { width: 5em; cursor: pointer !important; }
.vjs-default-skin .vjs-rewind-control div { width: 19px; height: 16px; background: url('video-js.png'); margin: 0.5em auto 0; }
/* Volume/Mute
-------------------------------------------------------------------------------- */
.vjs-default-skin .vjs-mute-control { width: 3.8em; cursor: pointer !important; float: right; }
.vjs-default-skin .vjs-mute-control div { width: 22px; height: 16px; background: url('video-js.png') -75px -25px; margin: 0.5em auto 0; }
.vjs-default-skin .vjs-mute-control.vjs-vol-0 div { background: url('video-js.png') 0 -25px; }
.vjs-default-skin .vjs-mute-control.vjs-vol-1 div { background: url('video-js.png') -25px -25px; }
.vjs-default-skin .vjs-mute-control.vjs-vol-2 div { background: url('video-js.png') -50px -25px; }
.vjs-default-skin .vjs-volume-control { width: 5em; float: right; }
.vjs-default-skin .vjs-volume-bar {
position: relative; width: 5em; height: 0.6em; margin: 1em auto 0; background: #666; cursor: pointer !important;
-moz-border-radius: 0.3em; -webkit-border-radius: 0.3em; border-radius: 0.3em;
background: #333;
background: -moz-linear-gradient(top, #333 0%, #666 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#333), color-stop(100%,#666));
background: -webkit-linear-gradient(top, #333 0%,#666 100%);
background: -o-linear-gradient(top, #333 0%,#666 100%);
background: -ms-linear-gradient(top, #333 0%,#666 100%);
background: linear-gradient(top, #333 0%,#666 100%);
}
.vjs-default-skin .vjs-volume-level {
position: absolute; top: 0; left: 0; height: 0.6em; background: #fff;
-moz-border-radius: 0.3em; -webkit-border-radius: 0.3em; border-radius: 0.3em;
background: #ffffff;
background: -moz-linear-gradient(top, #ffffff 0%, #cccccc 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#cccccc));
background: -webkit-linear-gradient(top, #ffffff 0%,#cccccc 100%);
background: -o-linear-gradient(top, #ffffff 0%,#cccccc 100%);
background: -ms-linear-gradient(top, #ffffff 0%,#cccccc 100%);
background: linear-gradient(top, #ffffff 0%,#cccccc 100%);
}
.vjs-default-skin .vjs-volume-handle {
position: absolute; top: -0.2em; width: 0.8em; height: 0.8em; background: #ccc; left: 0;
border: 1px solid #fff;
-moz-border-radius: 0.6em; -webkit-border-radius: 0.6em; border-radius: 0.6em;
}
/* Progress
-------------------------------------------------------------------------------- */
.vjs-default-skin div.vjs-progress-control {
position: absolute;
left: 4.8em; right: 4.8em; /* Leave room for time displays. */
height: 1.0em; width: auto;
top: -1.3em; /* Set above the rest of the controls. And leave room for 2px of borders (progress bottom and controls top). */
border-bottom: 1px solid #1F1F1F;
border-top: 1px solid #222;
/* CSS Gradient */
background: #333;
background: -moz-linear-gradient(top, #333 0%, #222 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#222), color-stop(100%,#333));
background: -webkit-linear-gradient(top, #222 0%,#333 100%);
background: -o-linear-gradient(top, #333 0%,#222 100%);
background: -ms-linear-gradient(top, #333 0%,#222 100%);
background: linear-gradient(top, #333 0%,#222 100%);
/* 1px top shadow */
/* -webkit-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15); -moz-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15); box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15);*/
}
/* Box containing play and load progresses. Also acts as seek scrubber. */
.vjs-default-skin .vjs-progress-holder {
position: relative; cursor: pointer !important; /*overflow: hidden;*/
padding: 0; margin: 0; /* Placement within the progress control item */
height: 1.0em;
-moz-border-radius: 0.6em; -webkit-border-radius: 0.6em; border-radius: 0.6em;
/* CSS Gradient */
background: #111;
background: -moz-linear-gradient(top, #111 0%, #262626 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#111), color-stop(100%,#262626));
background: -webkit-linear-gradient(top, #111 0%,#262626 100%);
background: -o-linear-gradient(top, #111 0%,#262626 100%);
background: -ms-linear-gradient(top, #111 0%,#262626 100%);
background: linear-gradient(top, #111 0%,#262626 100%);
}
.vjs-default-skin .vjs-progress-holder .vjs-play-progress,
.vjs-default-skin .vjs-progress-holder .vjs-load-progress { /* Progress Bars */
position: absolute; display: block; height: 1.0em; margin: 0; padding: 0;
left: 0; top: 0; /*Needed for IE6*/
-moz-border-radius: 0.6em; -webkit-border-radius: 0.6em; border-radius: 0.6em;
/*width: 0;*/
}
.vjs-default-skin .vjs-play-progress {
/* CSS Gradient. */
background: #fff; /* Old browsers */
background: -moz-linear-gradient(top, #fff 0%, #d6d6d6 50%, #fff 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fff), color-stop(50%,#d6d6d6), color-stop(100%,#fff));
background: -webkit-linear-gradient(top, #fff 0%,#d6d6d6 50%,#fff 100%);
background: -o-linear-gradient(top, #fff 0%,#d6d6d6 50%,#fff 100%);
background: -ms-linear-gradient(top, #fff 0%,#d6d6d6 50%,#fff 100%);
background: linear-gradient(top, #fff 0%,#d6d6d6 50%,#fff 100%);
background: #efefef;
background: -moz-linear-gradient(top, #efefef 0%, #f5f5f5 50%, #dbdbdb 50%, #f1f1f1 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#efefef), color-stop(50%,#f5f5f5), color-stop(50%,#dbdbdb), color-stop(100%,#f1f1f1));
background: -webkit-linear-gradient(top, #efefef 0%,#f5f5f5 50%,#dbdbdb 50%,#f1f1f1 100%);
background: -o-linear-gradient(top, #efefef 0%,#f5f5f5 50%,#dbdbdb 50%,#f1f1f1 100%);
background: -ms-linear-gradient(top, #efefef 0%,#f5f5f5 50%,#dbdbdb 50%,#f1f1f1 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef', endColorstr='#f1f1f1',GradientType=0 );
background: linear-gradient(top, #efefef 0%,#f5f5f5 50%,#dbdbdb 50%,#f1f1f1 100%);
}
.vjs-default-skin .vjs-load-progress {
opacity: 0.8;
/* CSS Gradient */
background: #666;
background: -moz-linear-gradient(top, #666 0%, #333 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#666), color-stop(100%,#333));
background: -webkit-linear-gradient(top, #666 0%,#333 100%);
background: -o-linear-gradient(top, #666 0%,#333 100%);
background: -ms-linear-gradient(top, #666 0%,#333 100%);
background: linear-gradient(top, #666 0%,#333 100%);
}
.vjs-default-skin div.vjs-seek-handle {
position: absolute;
width: 16px; height: 16px; /* Match img pixles */
margin-top: -0.3em;
left: 0; top: 0; /*Needed for IE6*/
background: url('video-js.png') 0px -50px;
/* CSS Curved Corners. Needed to make shadows curved. */
-moz-border-radius: 0.8em; -webkit-border-radius: 0.8em; border-radius: 0.8em;
/* CSS Shadows */
-webkit-box-shadow: 0px 2px 4px 0px #000; -moz-box-shadow: 0px 2px 4px 0px #000; box-shadow: 0px 2px 4px 0px #000;
}
/* Time Display
-------------------------------------------------------------------------------- */
.vjs-default-skin .vjs-time-controls {
position: absolute;
right: 0;
height: 1.0em; width: 4.8em;
top: -1.3em;
border-bottom: 1px solid #1F1F1F;
border-top: 1px solid #222;
background-color: #333;
font-size: 1em; line-height: 1.0em; font-weight: normal; font-family: Helvetica, Arial, sans-serif;
background: #333;
background: -moz-linear-gradient(top, #222 0%, #333 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#222), color-stop(100%,#333));
background: -webkit-linear-gradient(top, #222 0%,#333 100%);
background: -o-linear-gradient(top, #333 0%,#222 100%);
background: -ms-linear-gradient(top, #333 0%,#222 100%);
background: linear-gradient(top, #333 0%,#222 100%);
/* 1px top shadow */
/* -webkit-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15); -moz-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15); box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15);*/
}
.vjs-default-skin .vjs-current-time { left: 0; }
.vjs-default-skin .vjs-duration { right: 0; display: none; }
.vjs-default-skin .vjs-remaining-time { right: 0; }
.vjs-time-divider { display:none; }
.vjs-default-skin .vjs-time-control { font-size: 1em; line-height: 1; font-weight: normal; font-family: Helvetica, Arial, sans-serif; }
.vjs-default-skin .vjs-time-control span { line-height: 25px; /* Centering vertically */ }
/* Fullscreen
-------------------------------------------------------------------------------- */
.vjs-secondary-controls { float: right; }
.vjs-default-skin .vjs-fullscreen-control { width: 3.8em; cursor: pointer !important; float: right; }
.vjs-default-skin .vjs-fullscreen-control div { width: 16px; height: 16px; background: url('video-js.png') -50px 0; margin: 0.5em auto 0; }
.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control div { background: url('video-js.png') -75px 0; }
/* Big Play Button (at start)
---------------------------------------------------------*/
.vjs-default-skin .vjs-big-play-button {
display: block; /* Start hidden */ z-index: 2;
position: absolute; top: 50%; left: 50%; width: 8.0em; height: 8.0em; margin: -43px 0 0 -43px; text-align: center; vertical-align: center; cursor: pointer !important;
border: 0.3em solid #fff; opacity: 0.95;
-webkit-border-radius: 25px; -moz-border-radius: 25px; border-radius: 25px;
background: #454545;
background: -moz-linear-gradient(top, #454545 0%, #232323 50%, #161616 50%, #3f3f3f 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#454545), color-stop(50%,#232323), color-stop(50%,#161616), color-stop(100%,#3f3f3f));
background: -webkit-linear-gradient(top, #454545 0%,#232323 50%,#161616 50%,#3f3f3f 100%);
background: -o-linear-gradient(top, #454545 0%,#232323 50%,#161616 50%,#3f3f3f 100%);
background: -ms-linear-gradient(top, #454545 0%,#232323 50%,#161616 50%,#3f3f3f 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#454545', endColorstr='#3f3f3f',GradientType=0 );
background: linear-gradient(top, #454545 0%,#232323 50%,#161616 50%,#3f3f3f 100%);
/* CSS Shadows */
-webkit-box-shadow: 4px 4px 8px #000; -moz-box-shadow: 4px 4px 8px #000; box-shadow: 4px 4px 8px #000;
}
.vjs-default-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-default-skin div.vjs-big-play-button span {
position: absolute; top: 50%; left: 50%;
display: block; width: 35px; height: 42px;
margin: -20px 0 0 -15px; /* Using negative margin to center image. */
background: url('video-js.png') -100px 0;
}
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 7.3 KiB

-62
Ver Arquivo
@@ -1,62 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>HTML5 Video Player</title>
<link href="design/video-js.css" rel="stylesheet" type="text/css">
<!--[if IE]>
<script src="https://getfirebug.com/releases/lite/1.3/firebug-lite.js"></script>
<!--<![endif]-->
<!-- <script src="dist/video.js"></script> -->
<script src="src/core.js"></script>
<script src="src/lib.js"></script>
<script src="src/ecma.js"></script>
<script src="src/json.js"></script>
<script src="src/log.js"></script>
<script src="src/api.js"></script>
<script src="src/events.js"></script>
<script src="src/tracks.js"></script>
<script src="src/behaviors/behaviors.js"></script>
<script src="src/behaviors/seekBar.js"></script>
<script src="src/behaviors/volume.js"></script>
<script src="src/behaviors/texttrackdisplays.js"></script>
<script src="src/controls/bigPlay.js"></script>
<script src="src/controls/bar.js"></script>
<script src="src/controls/subtitlesBox.js"></script>
<script src="src/tech/html5.js"></script>
<script src="src/tech/flowplayer.js"></script>
<script src="src/tech/h5swf.js"></script>
<script src="src/autoload.js"></script>
<script type="text/javascript" src="flash/swfobject.js"></script>
</head>
<body>
<video id="vid1" class="video-js vjs-default-skin" controls preload="none" width="640" height="264" data-setup='{"example_option":true}' poster="http://video-js.zencoder.com/oceans-clip.png">
<!-- <source src="http://pseudo01.hddn.com/vod/demo.flowplayervod/flowplayer-700.flv" type='video/flv'> -->
<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://stg.video.howcookingworks.com/video/posts/e110d95f6770c62e8d3ba52ff221e7f7907683ac266939/e110d95f6770c62e8d3ba52ff221e7f7907683ac266939_high.webm" type='video/webm'> -->
<source src="http://video-js.zencoder.com/oceans-clip.ogv" type='video/ogg; codecs="theora, vorbis"'>
<!-- <track kind="subtitles" src="http://videojs.com/subtitles/demo-subtitles.srt" srclang="en-US" label="English"></track> -->
<!-- <track kind="subtitles" src="demo-subtitles.srt" srclang="en-US" label="English"></track> -->
</video>
<script>
// vid = document.getElementById("vid2");
</script>
</body>
</html>
Arquivo binário não exibido.
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
-4
Ver Arquivo
@@ -1,4 +0,0 @@
// Self-executing function to prevent global vars and help with minification
;(function(window, undefined){
var document = window.document;
-6
Ver Arquivo
@@ -1,6 +0,0 @@
// Expose to global
window.VideoJS = window._V_ = VideoJS;
// End self-executing function
})(window);
-294
Ver Arquivo
@@ -1,294 +0,0 @@
/* Player API
================================================================================ */
VideoJS.fn.extend({
apiCall: function(method, arg){
if (this.isReady) {
if (this.api[method]) {
return this.api[method].call(this, arg);
} else {
throw new Error("The '"+method+"' method is not available on the playback technology's API");
}
} else {
throw new Error("The playback technology API is not ready yet. Use player.ready(myFunction).");
}
},
/* Listener types: play, pause, timeupdate, bufferedupdate, ended, volumechange, error */
addEvent: function(type, fn){
return _V_.addEvent(this.box, type, _V_.proxy(this, fn));
},
removeEvent: function(type, fn){
return _V_.removeEvent(this.box, type, fn);
},
triggerEvent: function(type, e){
return _V_.triggerEvent(this.box, type, e);
},
play: function(){
this.apiCall("play"); return this;
},
pause: function(){
this.apiCall("pause"); return this;
},
paused: function(){
return this.apiCall("paused");
},
currentTime: function(seconds){
if (seconds !== undefined) {
this.values.currentTime = seconds; // Cache the last set value for smoother scrubbing.
this.apiCall("setCurrentTime", seconds);
if (this.manualTimeUpdates) { this.triggerEvent("timeupdate"); }
return this;
}
return this.apiCall("currentTime");
},
duration: function(){
return this.apiCall("duration");
},
remainingTime: function(){
return this.duration() - this.currentTime();
},
buffered: function(){
var buffered = this.apiCall("buffered"),
start = 0, end = this.values.bufferEnd = this.values.bufferEnd || 0,
timeRange;
if (buffered && buffered.length > 0 && buffered.end(0) > end) {
end = buffered.end(0);
// Storing values allows them be overridden by setBufferedFromProgress
this.values.bufferEnd = end;
}
return _V_.createTimeRange(start, end);
},
// Calculates amount of buffer is full
bufferedPercent: function(){
return (this.duration()) ? this.buffered().end(0) / this.duration() : 0;
},
volume: function(percentAsDecimal){
if (percentAsDecimal !== undefined) {
var vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1
this.values.volume = vol;
this.apiCall("setVolume", vol);
this.setLocalStorage("volume", vol);
return this;
}
// if (this.values.volume) { return this.values.volume; }
return this.apiCall("volume");
},
muted: function(muted){
if (muted !== undefined) {
this.apiCall("setMuted", muted);
return this;
}
return this.apiCall("muted");
},
width: function(width, skipListeners){
if (width !== undefined) {
this.box.width = width;
this.box.style.width = width+"px";
if (!skipListeners) { this.triggerEvent("resize"); }
return this;
}
return parseInt(this.box.getAttribute("width"));
},
height: function(height){
if (height !== undefined) {
this.box.height = height;
this.box.style.height = height+"px";
this.triggerEvent("resize");
return this;
}
return parseInt(this.box.getAttribute("height"));
},
size: function(width, height){
// Skip resize listeners on width for optimization
return this.width(width, true).height(height);
},
supportsFullScreen: function(){ return this.apiCall("supportsFullScreen"); },
// Turn on fullscreen (or window) mode
enterFullScreen: function(){
if (false && this.supportsFullScreen()) {
this.api("enterFullScreen");
} else {
this.enterFullWindow();
}
this.triggerEvent("enterFullScreen");
return this;
},
exitFullScreen: function(){
if (true || !this.supportsFullScreen()) {
this.exitFullWindow();
}
this.triggerEvent("exitFullScreen");
// Otherwise Shouldn't be called since native fullscreen uses own controls.
return this;
},
enterFullWindow: function(){
this.videoIsFullScreen = true;
// Storing original doc overflow value to return to when fullscreen is off
this.docOrigOverflow = document.documentElement.style.overflow;
// Add listener for esc key to exit fullscreen
_V_.addEvent(document, "keydown", _V_.proxy(this, this.fullscreenOnEscKey));
// Add listener for a window resize
_V_.addEvent(window, "resize", _V_.proxy(this, this.fullscreenOnWindowResize));
// Hide any scroll bars
document.documentElement.style.overflow = 'hidden';
// Apply fullscreen styles
_V_.addClass(document.body, "vjs-full-window");
_V_.addClass(this.box, "vjs-fullscreen");
this.triggerEvent("enterFullWindow");
},
exitFullWindow: function(){
this.videoIsFullScreen = false;
_V_.removeEvent(document, "keydown", this.fullscreenOnEscKey);
_V_.removeEvent(window, "resize", this.fullscreenOnWindowResize);
// Unhide scroll bars.
document.documentElement.style.overflow = this.docOrigOverflow;
// Remove fullscreen styles
_V_.removeClass(document.body, "vjs-full-window");
_V_.removeClass(this.box, "vjs-fullscreen");
// Resize the box, controller, and poster to original sizes
this.positionAll();
this.triggerEvent("exitFullWindow");
},
// src is a pretty powerful function
// If you pass it an array of source objects, it will find the best source to play and use that object.src
// If the new source requires a new playback technology, it will switch to that.
// If you pass it an object, it will set the source to object.src
// If you pass it anything else (url string) it will set the video source to that
src: function(source){
// Case: Array of source objects to choose from and pick the best to play
if (source instanceof Array) {
techLoop: // Named loop for breaking both loops
// Loop through each playback technology in the options order
for (var i=0,j=this.options.techOrder;i<j.length;i++) {
var techName = j[i],
tech = _V_.tech[techName];
// Check if the browser supports this technology
if (tech.supported()) {
// Loop through each source object
for (var a=0,b=this.options.sources;a<b.length;a++) {
var source = b[a];
// Check if source can be played with this technology
if (tech.canPlaySource.call(this, source)) {
// If this technology is already loaded, set source
if (techName == this.currentTechName) {
this.src(source); // Passing the source object
// Otherwise load this technology with chosen source
} else {
this.loadTech(techName, source);
}
break techLoop; // Break both loops
}
}
}
}
// Case: Source object { src: "", type: "" ... }
} else if (source instanceof Object) {
this.src(source.src);
// Case: URL String (http://myvideo...)
} else {
this.apiCall("src", source);
this.load();
}
return this;
},
// Begin loading the src data
load: function(){
this.apiCall("load");
return this;
},
currentSrc: function(){
return this.apiCall("currentSrc");
},
textTrackValue: function(kind, value){
if (value !== undefined) {
this.values[kind] = value;
this.triggerEvent(kind+"update");
return this;
}
return this.values[kind];
},
// Attributes/Options
preload: function(value){
if (value !== undefined) {
this.apiCall("setPreload", value);
this.options.preload = value;
return this;
}
return this.apiCall("preload", value);
},
autoplay: function(value){
if (value !== undefined) {
this.apiCall("setAutoplay", value);
this.options.autoplay = value;
return this;
}
return this.apiCall("autoplay", value);
},
loop: function(value){
if (value !== undefined) {
this.apiCall("setLoop", value);
this.options.loop = value;
return this;
}
return this.apiCall("loop", value);
},
controls: function(){ return this.options.controls; },
textTracks: function(){ return this.options.tracks; },
error: function(){ return this.apiCall("error"); },
networkState: function(){ return this.apiCall("networkState"); },
readyState: function(){ return this.apiCall("readyState"); },
seeking: function(){ return this.apiCall("seeking"); },
initialTime: function(){ return this.apiCall("initialTime"); },
startOffsetTime: function(){ return this.apiCall("startOffsetTime"); },
played: function(){ return this.apiCall("played"); },
seekable: function(){ return this.apiCall("seekable"); },
ended: function(){ return this.apiCall("ended"); },
videoTracks: function(){ return this.apiCall("videoTracks"); },
audioTracks: function(){ return this.apiCall("audioTracks"); },
videoWidth: function(){ return this.apiCall("videoWidth"); },
videoHeight: function(){ return this.apiCall("videoHeight"); },
defaultPlaybackRate: function(){ return this.apiCall("defaultPlaybackRate"); },
playbackRate: function(){ return this.apiCall("playbackRate"); },
mediaGroup: function(){ return this.apiCall("mediaGroup"); },
controller: function(){ return this.apiCall("controller"); },
controls: function(){ return this.apiCall("controls"); },
defaultMuted: function(){ return this.apiCall("defaultMuted"); }
});
-37
Ver Arquivo
@@ -1,37 +0,0 @@
_V_.loadPlayers = function(){
var vids = document.getElementsByTagName("video"),
options, vid;
if (vids && vids.length > 0) {
for (var i=0,j=vids.length; i<j; i++) {
vid = vids[i];
// Check if element exists, has getAttribute func.
// IE seems to consider typeof el.getAttribute == "object" instead of "function" like expected, at least when loading the player immediately.
if (vid && vid.getAttribute) {
// Check if this video has already been set up by video.js.
if (vid.player === undefined) {
options = vid.getAttribute("data-setup");
// Check if data-setup attr exists.
// We only auto-setup if they've added the data-setup attr.
if (options !== null) {
// Parse options JSON
// If empty string, make it a parsable json object.
options = JSON.parse(options || "{}");
// Create new video.js instance.
VideoJS.players[vid.id] = new VideoJS(vid, options);
}
}
// If getAttribute isn't defined, we need to wait for the DOM.
} else {
_V_.loadPlayerTimeout(1);
break;
}
}
} else {
_V_.loadPlayerTimeout(1);
}
};
_V_.loadPlayerTimeout = function(wait){
setTimeout(_V_.loadPlayers, wait);
};
_V_.loadPlayerTimeout(1); // Let vjs javascript finish executing
-310
Ver Arquivo
@@ -1,310 +0,0 @@
/* Box Behaviors - The primary container element
================================================================================ */
VideoJS.fn.newBehavior("box",
function(element){
_V_.addClass(element, "vjs-paused");
this.addEvent("play", this.boxOnVideoPlay);
this.addEvent("pause", this.boxOnVideoPause);
},
function(){},
{
boxOnVideoPlay: function(){
_V_.removeClass(this.box, "vjs-paused");
_V_.addClass(this.box, "vjs-playing");
},
boxOnVideoPause: function(){
_V_.removeClass(this.box, "vjs-playing");
_V_.addClass(this.box, "vjs-paused");
}
}
);
/* Playback Technology Element Behaviors
================================================================================ */
VideoJS.fn.newBehavior("tech",
function(element){
_V_.addEvent(element, "click", _V_.proxy(this, this.onPlayToggleClick));
},
function(element){
_V_.removeEvent(element, "click", this.onPlayToggleClick);
},
{}
);
/* Control Bar Behaviors
================================================================================ */
VideoJS.fn.newBehavior("controlBar",
function(element){
if (!this.bels.controlBars) {
this.bels.controlBars = [];
// this.addEvent("mouseover", this.showControlBars);
// this.addEvent("mouseout", this.hideControlBars);
}
this.bels.controlBars.push(element);
},
function(element){},
{
showControlBars: function(){
this.each(this.bels.controlBars, function(bar){
bar.style.opacity = 1;
// bar.style.display = "block";
});
},
hideControlBars: function(){
this.each(this.bels.controlBars, function(bar){
bar.style.opacity = 0;
// bar.style.display = "none";
});
}
}
);
/* PlayToggle, PlayButton, PauseButton Behaviors
================================================================================ */
// Play Toggle
VideoJS.fn.newBehavior("playToggle", function(element){
if (!this.bels.playToggles) {
this.bels.playToggles = [];
this.addEvent("play", this.playTogglesOnPlay);
this.addEvent("pause", this.playTogglesOnPause);
}
this.bels.playToggles.push(element);
_V_.addEvent(element, "click", _V_.proxy(this, this.onPlayToggleClick));
_V_.addEvent(element, "focus", _V_.proxy(this, this.onPlayToggleFocus));
_V_.addEvent(element, "blur", _V_.proxy(this, this.onPlayToggleBlur));
},
function(){},
{
onPlayToggleClick: function(event){
if (this.paused()) {
this.play();
} else {
this.pause();
}
},
playTogglesOnPlay: function(event){
this.each(this.bels.playToggles, function(toggle){
_V_.removeClass(toggle, "vjs-paused");
_V_.addClass(toggle, "vjs-playing");
});
},
playTogglesOnPause: function(event){
this.each(this.bels.playToggles, function(toggle){
_V_.removeClass(toggle, "vjs-playing");
_V_.addClass(toggle, "vjs-paused");
});
},
onPlayToggleFocus: function(event){
_V_.addEvent(document, "keyup", _V_.proxy(this, this.onPlayToggleKey));
},
onPlayToggleKey: function(event){
if (event.which == 32 || event.which == 13) {
event.preventDefault();
this.onPlayToggleClick();
}
},
onPlayToggleBlur: function(event){
_V_.removeEvent(document, "keyup", _V_.proxy(this, this.onPlayToggleKey));
}
}
);
// Play
VideoJS.fn.newBehavior("playButton", function(element){
_V_.addEvent(element, "click", _V_.proxy(this, this.onPlayButtonClick));
},
function(){},
{
onPlayButtonClick: function(event){ this.play(); }
}
);
// Pause
VideoJS.fn.newBehavior("pauseButton", function(element){
_V_.addEvent(element, "click", _V_.proxy(this, this.onPauseButtonClick));
},
function(){},
{
onPauseButtonClick: function(event){ this.pause(); }
}
);
/* Current Time Display Behaviors
================================================================================ */
VideoJS.fn.newBehavior("currentTimeDisplay", function(element){
if (!this.bels.currentTimeDisplays) {
this.bels.currentTimeDisplays = [];
this.addEvent("timeupdate", this.updateCurrentTimeDisplays);
}
this.bels.currentTimeDisplays.push(element);
},
function(){},
{
// Update the displayed time (00:00)
updateCurrentTimeDisplays: function(newTime){
// Allows for smooth scrubbing, when player can't keep up.
var time = (this.scrubbing) ? this.values.currentTime : this.currentTime();
this.each(this.bels.currentTimeDisplays, function(dis){
dis.innerHTML = _V_.formatTime(time, this.duration());
});
}
}
);
/* Duration Display Behaviors
================================================================================ */
VideoJS.fn.newBehavior("durationDisplay", function(element){
if (!this.bels.durationDisplays) {
this.bels.durationDisplays = [];
this.addEvent("timeupdate", this.updateDurationDisplays);
}
this.bels.durationDisplays.push(element);
},
function(){},
{
updateDurationDisplays: function(){
this.each(this.bels.durationDisplays, function(dis){
if (this.duration()) { dis.innerHTML = _V_.formatTime(this.duration()); }
});
}
}
);
/* Duration Display Behaviors
================================================================================ */
VideoJS.fn.newBehavior("remainingTimeDisplay", function(element){
if (!this.bels.remainingTimeDisplays) {
this.bels.remainingTimeDisplays = [];
this.addEvent("timeupdate", this.updateRemainingTimeDisplays);
}
this.bels.remainingTimeDisplays.push(element);
},
function(){},
{
updateRemainingTimeDisplays: function(){
this.each(this.bels.remainingTimeDisplays, function(dis){
if (this.duration()) { dis.innerHTML = "-"+_V_.formatTime(this.remainingTime()); }
});
}
}
);
/* Time Left (remaining) Display Behaviors
================================================================================ */
VideoJS.fn.newBehavior("timeLeftDisplay", function(element){
if (!this.bels.timeLeftDisplays) {
this.bels.timeLeftDisplays = [];
this.addEvent("timeupdate", this.updateTimeLeftDisplays);
}
this.bels.timeLeftDisplays.push(element);
},
function(){
this.removeEvent("timeupdate", this.updateTimeLeftDisplays);
delete this.bels.timeLeftDisplays;
},
{
updateTimeLeftDisplays: function(){
// Allows for smooth scrubbing, when player can't keep up.
var time = (this.scrubbing) ? this.values.currentTime : this.currentTime();
this.each(this.bels.timeLeftDisplays, function(dis){
dis.innerHTML = "-" + _V_.formatTime(this.duration() - time);
});
}
}
);
/* Volume Scrubber Behaviors
================================================================================ */
VideoJS.fn.newBehavior("volumeScrubber", function(element){
// Binding with element as 'this' so the progress holder element can be retrieved in IE.
// IE doesn't support the currentTarget event attr.
var player = this;
_V_.addEvent(element, "mousedown", _V_.proxy(element, function(e){
player.onVolumeScrubberMouseDown(e, this);
}));
},
function(){},
{
// Adjust the volume when the user drags on the volume control
onVolumeScrubberMouseDown: function(event, scrubber){
// event.preventDefault();
_V_.blockTextSelection();
this.currentScrubber = scrubber;
this.setVolumeWithScrubber(event);
_V_.addEvent(document, "mousemove", _V_.proxy(this, this.onVolumeScrubberMouseMove));
_V_.addEvent(document, "mouseup", _V_.proxy(this, this.onVolumeScrubberMouseUp));
},
onVolumeScrubberMouseMove: function(event){
this.setVolumeWithScrubber(event);
},
onVolumeScrubberMouseUp: function(event){
this.setVolumeWithScrubber(event);
_V_.unblockTextSelection();
_V_.removeEvent(document, "mousemove", this.onVolumeScrubberMouseMove, false);
_V_.removeEvent(document, "mouseup", this.onVolumeScrubberMouseUp, false);
},
setVolumeWithScrubber: function(event){
var newVol = _V_.getRelativePosition(event.pageX, this.currentScrubber);
this.volume(newVol);
}
}
);
/* Volume Display Behaviors
================================================================================ */
VideoJS.fn.newBehavior("volumeDisplay", function(element){
if (!this.bels.volumeDisplays) {
this.bels.volumeDisplays = [];
this.addEvent("volumechange", this.updateVolumeDisplays);
}
this.bels.volumeDisplays.push(element);
this.updateVolumeDisplay(element); // Set the display to the initial volume
},
function(){},
{
// Update the volume control display
// Unique to these default controls. Uses borders to create the look of bars.
updateVolumeDisplays: function(){
if (!this.bels.volumeDisplays) { return; }
this.each(this.bels.volumeDisplays, function(dis){
this.updateVolumeDisplay(dis);
});
},
updateVolumeDisplay: function(display){
var volNum = Math.ceil(this.volume() * 6);
this.each(display.children, function(child, num){
if (num < volNum) {
_V_.addClass(child, "vjs-volume-level-on");
} else {
_V_.removeClass(child, "vjs-volume-level-on");
}
});
}
}
);
/* Fullscreen Toggle Behaviors
================================================================================ */
VideoJS.fn.newBehavior("fullscreenToggle", function(element){
_V_.addEvent(element, "click", _V_.proxy(this, this.onFullscreenToggleClick));
},
function(){},
{
// When the user clicks on the fullscreen button, update fullscreen setting
onFullscreenToggleClick: function(event){
if (!this.videoIsFullScreen) {
this.enterFullScreen();
} else {
this.exitFullScreen();
}
},
fullscreenOnWindowResize: function(event){ // Removeable
// this.positionControlBars();
},
// Create listener for esc key while in full screen mode
fullscreenOnEscKey: function(event){ // Removeable
if (event.keyCode == 27) {
this.exitFullScreen();
}
}
}
);
-213
Ver Arquivo
@@ -1,213 +0,0 @@
/* Seek Bar Behaviors (Current Time Scrubber)
================================================================================ */
VideoJS.fn.newBehavior("seekBar",
function(element){
if (!this.bels.seekBars) {
this.bels.seekBars = [];
this.addEvent("timeupdate", this.updateSeekBars);
}
this.bels.seekBars.push(element);
// Get and store related child objects (progress bar & handle)
var data = _V_.getData(element);
this.each(element.childNodes, function(c){
if (c.className) {
if (c.className.indexOf("seek-handle") != -1) {
data.seekHandle = c;
} else if (c.className.indexOf("play-progress") != -1) {
data.playProgress = c;
}
}
});
// Binding with element as 'this' so the progress holder element can be retrieved in IE.
// IE doesn't support the currentTarget event attr.
var player = this;
_V_.addEvent(element, "mousedown", _V_.proxy(element, function(event){
player.onSeekBarMouseDown(event, this);
}));
_V_.addEvent(element, "focus", _V_.proxy(this, this.onSeekBarFocus));
_V_.addEvent(element, "blur", _V_.proxy(this, this.onSeekBarBlur));
},
function(){},
{
// Adjust the play position when the user drags on the progress bar
onSeekBarMouseDown: function(event, currentTarget){
event.preventDefault();
_V_.blockTextSelection();
this.currSeekBar = currentTarget;
this.currHandle = _V_.getData(currentTarget).seekHandle || false;
this.scrubbing = true;
this.videoWasPlaying = !this.paused();
this.pause();
this.setCurrentTimeWithScrubber(event);
_V_.addEvent(document, "mousemove", _V_.proxy(this, this.onSeekBarMouseMove));
_V_.addEvent(document, "mouseup", _V_.proxy(this, this.onSeekBarMouseUp));
},
onSeekBarMouseMove: function(event){ // Removeable
this.setCurrentTimeWithScrubber(event);
},
onSeekBarMouseUp: function(event){ // Removeable
_V_.unblockTextSelection();
_V_.removeEvent(document, "mousemove", this.onSeekBarMouseMove, false);
_V_.removeEvent(document, "mouseup", this.onSeekBarMouseUp, false);
this.scrubbing = false;
if (this.videoWasPlaying) {
this.play();
}
},
setCurrentTimeWithScrubber: function(event){
var bar = this.currSeekBar,
barX = _V_.findPosX(bar),
barW = bar.offsetWidth,
handle = this.currHandle,
handleW = (handle) ? handle.offsetWidth : 0;
// Adjusted X and Width, so handle doesn't go outside the bar
barAX = barX + (handleW / 2),
barAW = barW - handleW,
// Percent that the click is through the adjusted area
percent = Math.max(0, Math.min(1, (event.pageX - barAX) / barAW)),
// Percent translated to pixels
percentPix = percent * barAW,
// Percent translated to seconds
newTime = percent * this.duration();
// Don't let video end while scrubbing.
if (newTime == this.duration()) { newTime = newTime - 0.1; }
// Set new time (tell player to seek to new time)
this.currentTime(newTime);
},
getSeekBarAdjustedWidth: function(bar, handle){
var bar = this.currSeekBar,
barX = _V_.findPosX(bar),
barW = bar.offsetWidth,
handle = this.currHandle,
handleW = (handle) ? handle.offsetWidth : 0;
// Adjusted X and Width, so handle doesn't go outside the bar
barAX = barX + (handleW / 2),
barAW = barW - handleW;
},
updateSeekBars: function(){
// If scrubbing, use the cached currentTime value for speed
var progress = /* (this.scrubbing) ? this.scrubTime / this.duration() : */ this.currentTime() / this.duration();
// Protect against no duration and other division issues
if (isNaN(progress)) { progress = 0; }
this.each(this.bels.seekBars, function(bar){
var barData = _V_.getData(bar),
barX = _V_.findPosX(bar),
barW = bar.offsetWidth,
handle = barData.seekHandle,
progBar = barData.playProgress,
handleW = (handle) ? handle.offsetWidth : 0;
// Adjusted X and Width, so handle doesn't go outside the bar
barAX = barX + (handleW / 2),
barAW = barW - handleW;
// Percent that the click is through the adjusted area
// percent = Math.max(0, Math.min(1, (event.pageX - barAX) / barAW)),
// Percent translated to pixels
// percentPix = percent * barAW,
// Percent translated to seconds
// newTime = percent * this.duration();
progBarProgress = _V_.round(progress * barAW + handleW / 2) + "px";
if (progBar && progBar.style) { progBar.style.width = progBarProgress; }
handle.style.left = _V_.round(progress * barAW)+"px";
});
// Update bar length
// this.each(this.bels.playProgressBars, function(bar){
// if (bar.style) { bar.style.width = _V_.round(progress * 100, 2) + "%"; }
// });
// Move Handle
},
onSeekBarFocus: function(event){
_V_.addEvent(document, "keyup", _V_.proxy(this, this.onSeekBarKey));
},
onSeekBarKey: function(event){
if (event.which == 37) {
event.preventDefault();
this.currentTime(this.currentTime() - 1);
} else if (event.which == 39) {
event.preventDefault();
this.currentTime(this.currentTime() + 1);
}
},
onSeekBarBlur: function(event){
_V_.removeEvent(document, "keyup", _V_.proxy(this, this.onSeekBarKey));
}
}
);
/* Seek Handle Behaviors
================================================================================ */
VideoJS.fn.newBehavior("seekHandle",
function(element){
if (!this.bels.seekHandles) { this.bels.seekHandles = []; }
this.bels.seekHandles.push(element);
// Store references between seekbar and seekhandle
_V_.getData(element).seekBar = element.parentNode;
_V_.getData(element.parentNode).seekHandle = element;
},
function(){},
{}
);
/* Play Progress Bar Behaviors
================================================================================ */
VideoJS.fn.newBehavior("playProgressBar",
function(element){
if (!this.bels.playProgressBars) {
this.bels.playProgressBars = [];
this.addEvent("timeupdate", this.updatePlayProgressBars);
}
this.bels.playProgressBars.push(element);
},
function(){
// Remove
},
{
// Ajust the play progress bar's width based on the current play time
updatePlayProgressBars: function(){
// If scrubbing, use the cached currentTime value for speed
var progress = (this.scrubbing) ? this.values.currentTime / this.duration() : this.currentTime() / this.duration();
// Protect against no duration and other division issues
if (isNaN(progress)) { progress = 0; }
// Update bar length
this.each(this.bels.playProgressBars, function(bar){
if (bar.style) { bar.style.width = _V_.round(progress * 100, 2) + "%"; }
});
}
}
);
/* Load Progress Bar Behaviors
================================================================================ */
VideoJS.fn.newBehavior("loadProgressBar",
function(element){
if (!this.bels.loadProgressBars) { this.bels.loadProgressBars = []; }
this.bels.loadProgressBars.push(element);
this.addEvent("progress", this.updateLoadProgressBars);
},
function(){},
{
updateLoadProgressBars: function(event){
// log("updating progress bars", this.bufferedPercent());
this.each(this.bels.loadProgressBars, function(bar){
if (bar.style) { bar.style.width = _V_.round(this.bufferedPercent() * 100, 2) + "%"; }
});
}
}
);
-43
Ver Arquivo
@@ -1,43 +0,0 @@
/* Text Track Displays
================================================================================ */
// Create a behavior type for each text track type (subtitlesDisplay, captionsDisplay, etc.).
// Then you can easily do something like.
// player.addBehavior(myDiv, "subtitlesDisplay");
// And the myDiv's content will be updated with the text change.
_V_.each(["subtitles", "captions", "chapters", "descriptions"], function(type){
var add, remove,
name = type+"Display",
plural = name+"s",
updateFuncName = "update"+plural,
funcs = {};
// Add the behavior to an element
add = function(element){
if (!this.bels[plural]) {
this.bels[plural] = [];
this.addEvent(type+"update", this[updateFuncName]);
}
this.bels[plural].push(element);
};
// Remove the behavior from an element
remove = function(element){
if (this.bels[plural]) {
_V_.remove(element, this.bels[plural]);
if (this.bels[plural].length == 0) {
this.removeEvent(type+"update", this[updateFuncName]);
delete this.bels[plural];
}
}
};
// Addional needed funcitons (added directly to player)
funcs[updateFuncName] = function(){
var val = this.textTrackValue(type);
this.each(this.bels[plural], function(display){
display.innerHTML = val;
});
};
VideoJS.fn.newBehavior(name, add, remove, funcs);
});
-177
Ver Arquivo
@@ -1,177 +0,0 @@
/* Volume Behaviors
================================================================================ */
/* Seek Bar Behaviors (Current Time Scrubber)
================================================================================ */
VideoJS.fn.newBehavior("volumeBar",
function(element){
if (!this.bels.volumeBars) {
this.bels.volumeBars = [];
this.addEvent("volumechange", this.updateVolumeBars);
}
this.bels.volumeBars.push(element);
// Get and store related child objects (level & handle)
var data = _V_.getData(element);
this.each(element.childNodes, function(c){
if (c.className) {
if (c.className.indexOf("volume-handle") != -1) {
data.volumeHandle = c;
} else if (c.className.indexOf("volume-level") != -1) {
data.volumeLevel = c;
}
}
});
// Binding with element as 'this' so the holder element can be retrieved in IE.
// IE doesn't support the currentTarget event attr.
var player = this;
_V_.addEvent(element, "mousedown", _V_.proxy(element, function(event){
player.onVolumeBarMouseDown(event, this);
}));
// _V_.addEvent(element, "focus", _V_.proxy(this, this.onVolumeBarFocus));
// _V_.addEvent(element, "blur", _V_.proxy(this, this.onVolumeBarBlur));
},
function(){},
{
// Adjust the play position when the user drags on the progress bar
onVolumeBarMouseDown: function(event, currentTarget){
event.preventDefault();
_V_.blockTextSelection();
this.currVolumeBar = currentTarget;
this.currHandle = _V_.getData(currentTarget).volumeHandle || false;
this.setVolumeWithSlider(event);
_V_.addEvent(document, "mousemove", _V_.proxy(this, this.onVolumeBarMouseMove));
_V_.addEvent(document, "mouseup", _V_.proxy(this, this.onVolumeBarMouseUp));
},
onVolumeBarMouseMove: function(event){ // Removeable
this.setVolumeWithSlider(event);
},
onVolumeBarMouseUp: function(event){ // Removeable
_V_.unblockTextSelection();
_V_.removeEvent(document, "mousemove", this.onVolumeBarMouseMove, false);
_V_.removeEvent(document, "mouseup", this.onVolumeBarMouseUp, false);
},
setVolumeWithSlider: function(event){
var bar = this.currVolumeBar,
barX = _V_.findPosX(bar),
barW = bar.offsetWidth,
handle = this.currHandle,
handleW = (handle) ? handle.offsetWidth : 0;
// Adjusted X and Width, so handle doesn't go outside the bar
barAX = barX + (handleW / 2),
barAW = barW - handleW,
// Percent that the click is through the adjusted area
percent = Math.max(0, Math.min(1, (event.pageX - barAX) / barAW)),
// Percent translated to pixels
percentPix = percent * barAW,
// Percent translated to seconds
newTime = percent * this.duration();
this.volume(percent);
},
updateVolumeBars: function(){
var vol = this.volume();
this.each(this.bels.volumeBars, function(bar){
var barData = _V_.getData(bar),
barX = _V_.findPosX(bar),
barW = bar.offsetWidth,
handle = barData.volumeHandle,
progBar = barData.volumeLevel,
handleW = (handle) ? handle.offsetWidth : 0;
// Adjusted X and Width, so handle doesn't go outside the bar
barAX = barX + (handleW / 2),
barAW = barW - handleW;
// Percent that the click is through the adjusted area
// percent = Math.max(0, Math.min(1, (event.pageX - barAX) / barAW)),
// Percent translated to pixels
// percentPix = percent * barAW,
// Percent translated to seconds
// newTime = percent * this.duration();
progBarProgress = _V_.round(vol * barAW + handleW / 2) + "px";
if (progBar && progBar.style) { progBar.style.width = progBarProgress; }
handle.style.left = _V_.round(vol * barAW)+"px";
});
// Update bar length
// this.each(this.bels.playProgressBars, function(bar){
// if (bar.style) { bar.style.width = _V_.round(progress * 100, 2) + "%"; }
// });
// Move Handle
}// ,
// onVolumeBarFocus: function(event){
// _V_.addEvent(document, "keyup", _V_.proxy(this, this.onVolumeBarKey));
// },
// onVolumeBarKey: function(event){
// if (event.which == 37) {
// event.preventDefault();
// this.currentTime(this.currentTime() - 1);
// } else if (event.which == 39) {
// event.preventDefault();
// this.currentTime(this.currentTime() + 1);
// }
// },
// onVolumeBarBlur: function(event){
// _V_.removeEvent(document, "keyup", _V_.proxy(this, this.onVolumeBarKey));
// }
}
);
/* Mute Toggle
================================================================================ */
VideoJS.fn.newBehavior("muteToggle", function(element){
if (!this.bels.muteToggles) {
this.bels.muteToggles = [];
this.addEvent("volumechange", this.muteTogglesOnVolumeChange);
}
this.bels.muteToggles.push(element);
_V_.addEvent(element, "click", _V_.proxy(this, this.onMuteToggleClick));
// _V_.addEvent(element, "focus", _V_.proxy(this, this.onMuteToggleFocus));
// _V_.addEvent(element, "blur", _V_.proxy(this, this.onMuteToggleBlur));
},
function(){},
{
onMuteToggleClick: function(event){
this.muted( this.muted() ? false : true );
},
muteTogglesOnVolumeChange: function(event){
var vol = this.volume(),
level = 3;
if (vol == 0 || this.muted()) {
level = 0;
} else if (vol < 0.33) {
level = 1;
} else if (vol < 0.67) {
level = 2;
}
this.each(this.bels.muteToggles, function(toggle){
/* TODO improve muted icon classes */
_V_.each([0,1,2,3], function(i){
_V_.removeClass(toggle, "vjs-vol-"+i);
});
_V_.addClass(toggle, "vjs-vol-"+level);
});
}//,
// onMuteToggleFocus: function(event){
// _V_.addEvent(document, "keyup", _V_.proxy(this, this.onMuteToggleKey));
// },
// onMuteToggleKey: function(event){
// if (event.which == 32 || event.which == 13) {
// event.preventDefault();
// this.onMuteToggleClick();
// }
// },
// onMuteToggleBlur: function(event){
// _V_.removeEvent(document, "keyup", _V_.proxy(this, this.onMuteToggleKey));
// }
}
);
-153
Ver Arquivo
@@ -1,153 +0,0 @@
_V_.controlSets.bar = {
options: {},
add: function(){
/* See controls/controls.html to see the HTML this creates. */
// Create a reference to the controls elements
var bar = this.cels.bar = {};
// Control Bar Main Div ("main")
bar.main = _V_.createElement("div", { className: "vjs-controls" });
// Add the controls to the video's container
this.box.appendChild(bar.main);
this.addBehavior(bar.main, "controlBar");
// Play Control
bar.playControl = _V_.createElement("div", {
className: "vjs-play-control vjs-control",
innerHTML: '<div><span class="vjs-control-text">Play</span></div>',
role: "button", tabIndex: 0
});
bar.main.appendChild(bar.playControl);
this.addBehavior(bar.playControl, "playToggle");
/* Time -------------------------------------------------------------- */
// Time Display
bar.currentTime = _V_.createElement("div", {
className: "vjs-current-time vjs-time-controls vjs-control"
});
bar.currentTimeDisplay = _V_.createElement("span", {
className: "vjs-current-time-display",
innerHTML: '0:00'
});
// Put display inside div, inside control div, to follow control scheme.
bar.currentTime.appendChild(_V_.createElement("div").appendChild(bar.currentTimeDisplay));
bar.main.appendChild(bar.currentTime);
this.addBehavior(bar.currentTimeDisplay, "currentTimeDisplay");
// Time Separator (Not used in main skin, but still available, and could be used as a 'spare element')
bar.timeDivider = _V_.createElement("div", {
className: "vjs-time-divider",
innerHTML: '<div><span>/</span></div>'
});
bar.main.appendChild(bar.timeDivider);
// Duration Display
bar.duration = _V_.createElement("div", {
className: "vjs-duration vjs-time-controls vjs-control"
});
bar.durationDisplay = _V_.createElement("span", {
className: "vjs-duration-display",
innerHTML: '0:00'
});
// Put display inside div, inside control div, to follow control scheme.
bar.duration.appendChild(_V_.createElement("div").appendChild(bar.durationDisplay));
bar.main.appendChild(bar.duration);
this.addBehavior(bar.durationDisplay, "durationDisplay");
// Duration Display
bar.remainingTime = _V_.createElement("div", {
className: "vjs-remaining-time vjs-time-controls vjs-control"
});
bar.remainingTimeDisplay = _V_.createElement("span", {
className: "vjs-remaining-time-display",
innerHTML: '-0:00'
});
// Put display inside div, inside control div, to follow control scheme.
bar.remainingTime.appendChild(_V_.createElement("div").appendChild(bar.remainingTimeDisplay));
bar.main.appendChild(bar.remainingTime);
this.addBehavior(bar.remainingTime, "remainingTimeDisplay");
/* Progress -------------------------------------------------------------- */
// Progress Control: Seek, Load Progress, and Play Progress
bar.progressControl = _V_.createElement("div", { className: "vjs-progress-control vjs-control" });
bar.main.appendChild(bar.progressControl);
// Seek Bar and holder for the progress bars
bar.seekBar = _V_.createElement("div", { className: "vjs-progress-holder" });
bar.progressControl.appendChild(bar.seekBar);
// Load Progress Bar
bar.loadProgressBar = _V_.createElement("div", {
className: "vjs-load-progress",
innerHTML: '<span class="vjs-control-text">Loaded: 0%</span>'
});
bar.seekBar.appendChild(bar.loadProgressBar);
this.addBehavior(bar.loadProgressBar, "loadProgressBar");
// Play Progress Bar
bar.playProgressBar = _V_.createElement("div", {
className: "vjs-play-progress",
innerHTML: '<span class="vjs-control-text">Progress: 0%</span>'
});
bar.seekBar.appendChild(bar.playProgressBar);
// Seek Handle
bar.seekHandle = _V_.createElement("div", {
className: "vjs-seek-handle",
innerHTML: '<span class="vjs-control-text">00:00</span>',
tabIndex: 0,
role: "slider", "aria-valuenow": 0, "aria-valuemin": 0, "aria-valuemax": 100
});
bar.seekBar.appendChild(bar.seekHandle);
// SeekBar Behavior includes play progress bar, and seek handle
// Needed so it can determine seek position based on handle position/size
this.addBehavior(bar.seekBar, "seekBar");
/* Fullscreen -------------------------------------------------------------- */
// Fullscreen Button
bar.fullscreenControl = _V_.createElement("div", {
className: "vjs-fullscreen-control vjs-control",
innerHTML: '<div><span class="vjs-control-text">Fullscreen</span></div>',
role: "button", tabIndex: 0
});
bar.main.appendChild(bar.fullscreenControl);
this.addBehavior(bar.fullscreenControl, "fullscreenToggle");
/* Volume -------------------------------------------------------------- */
// Fullscreen Button
bar.volumeControl = _V_.createElement("div", { className: "vjs-volume-control vjs-control" });
bar.volumeBar = _V_.createElement("div", { className: "vjs-volume-bar" });
bar.volumeLevel = _V_.createElement("div", {
className: "vjs-volume-level",
innerHTML: '<span class="vjs-control-text"></span>'
});
bar.volumeHandle = _V_.createElement("div", {
className: "vjs-volume-handle",
innerHTML: '<span class="vjs-control-text"></span>',
tabindex: 0,
role: "slider", "aria-valuenow": 0, "aria-valuemin": 0, "aria-valuemax": 100
});
bar.volumeBar.appendChild(bar.volumeLevel);
bar.volumeBar.appendChild(bar.volumeHandle);
bar.volumeControl.appendChild(bar.volumeBar);
bar.main.appendChild(bar.volumeControl);
this.addBehavior(bar.volumeBar, "volumeBar");
// Mute Button
bar.muteControl = _V_.createElement("div", {
className: "vjs-mute-control vjs-control",
innerHTML: '<div><span class="vjs-control-text">Mute</span></div>',
role: "button", tabIndex: 0
});
bar.main.appendChild(bar.muteControl);
this.addBehavior(bar.muteControl, "muteToggle");
},
remove: function(){
this.box.removeChild(this.cels.bigPlayButton);
delete this.cels.bigPlayButton;
this.removeBehavior(this.cels.bigPlayButton, "bigPlayButton");
}
};
-52
Ver Arquivo
@@ -1,52 +0,0 @@
_V_.controlSets.bigPlayButton = {
options: {},
add: function(){
/* Creating this HTML
<div class="vjs-big-play-button"><span></span></div>
*/
this.cels.bigPlayButton = _V_.createElement("div", {
className: "vjs-big-play-button",
innerHTML: "<span></span>"
});
this.box.appendChild(this.cels.bigPlayButton);
this.addBehavior(this.cels.bigPlayButton, "bigPlayButton");
},
remove: function(){
this.removeBehavior(this.cels.bigPlayButton, "bigPlayButton");
this.box.removeChild(this.cels.bigPlayButton);
delete this.cels.bigPlayButton;
}
};
/* Big Play Button Behaviors
================================================================================ */
VideoJS.fn.newBehavior("bigPlayButton",
// Add Big Play Button Behavior
function(element){
if (!this.bels.bigPlayButtons) {
this.bels.bigPlayButtons = [];
this.addEvent("play", this.hideBigPlayButtons);
this.addEvent("ended", this.showBigPlayButtons);
}
this.bels.bigPlayButtons.push(element);
this.addBehavior(element, "playButton");
},
// Remove Big Play Button Behavior
function(element){
},
// Needed functions (added directly to player (this))
{
showBigPlayButtons: function(){
if (!this.options.controlsEnabled) { return; }
this.each(this.bels.bigPlayButtons, function(element){
element.style.display = "block";
});
},
hideBigPlayButtons: function(){
this.each(this.bels.bigPlayButtons, function(element){
element.style.display = "none";
});
}
}
);
-157
Ver Arquivo
@@ -1,157 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Controls HTML</title>
<link rel="stylesheet" href="../video-js.css" type="text/css">
</head>
<body>
<div class="video-js vjs-default-skin" style="width: 640px; height: 270px;">
<video id="vid1" class="" preload="none" width="640" height="264" data-setup="" poster="http://video-js.zencoder.com/oceans-clip.png">
<source src="http://pseudo01.hddn.com/vod/demo.flowplayervod/flowplayer-700.flv" type='video/flv'>
<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; codecs="vp8, vorbis"'>
<source src="http://video-js.zencoder.com/oceans-clip.ogv" type='video/ogg; codecs="theora, vorbis"'>
</video>
<div class="vjs-controls">
<!-- Play/Pause Button -->
<div class="vjs-play-control vjs-control" role="button" tabindex="0">
<div>
<span class="vjs-control-text">Play</span>
</div>
</div>
<!-- Current Time Display -->
<div class="vjs-current-time vjs-time-controls vjs-control">
<div>
<span class="vjs-current-time-display">00:00</span>
</div>
</div>
<!-- Optional Divider for Time -->
<div class="vjs-time-divider">
<div>
<span>/</span>
</div>
</div>
<!-- Duration Display -->
<div class="vjs-duration vjs-time-controls vjs-control">
<div>
<span class="vjs-duration-display">00:00</span>
</div>
</div>
<!-- Remaining Time Display -->
<div class="vjs-remaining-time vjs-time-controls vjs-control">
<div>
<span class="vjs-remaining-time-display">00:00</span>
</div>
</div>
<!-- Seek Slider and Load & Play Progress Bars -->
<div class="vjs-progress-control vjs-control" role="slider" tabindex="0" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
<!-- Seek Slider + Holds both progress bars. -->
<div class="vjs-progress-holder">
<!-- Load Progress -->
<div class="vjs-load-progress" title="Load Progress">
<span class="vjs-control-text">Loaded: 0%</span><!-- Support Multiple Load Progress Bars -->
</div>
<!-- Play Progress -->
<div class="vjs-play-progress" title="Play Progress">
<span class="vjs-control-text">Progress: 0%</span>
</div>
</div>
<!-- Seek Handle -->
<div class="vjs-seek-handle" title="Current Time">
<div>
<span class="vjs-control-text">00:00</span>
</div>
</div>
</div>
<!-- Fullscreen Control -->
<div class="vjs-fullscreen-control vjs-control" role="button" tabindex="0">
<div>
<span class="vjs-control-text">Fullscreen</span>
</div>
</div>
<!-- Volume Control -->
<div class="vjs-volume-control vjs-control">
<div class="vjs-volume-bar">
<!-- Volume Bar -->
<div class="vjs-volume-level">
<span class="vjs-control-text"></span>
</div>
<!-- Volume Handle -->
<div class="vjs-volume-handle" tabindex="0" role="slider" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
<span class="vjs-control-text"></span>
</div>
</div>
</div>
<!-- Mute Button -->
<div class="vjs-mute-control" role="button" tabindex="0">
<div>
<span class="vjs-control-text">Mute</span>
</div>
</div>
<!-- Rewind Button -->
<!-- <div class="vjs-rewind-control vjs-control" title="Rewind" role="button" tabindex="0">
<div>
<span class="vjs-control-text">Rewind</span>
</div>
</div> -->
<!-- Fast Forward Button -->
<!-- <div class="vjs-forward-control" title="Fast Forward" role="button" tabindex="0">
<div>
<span>Fast Forward</span>
</div>
</div> -->
<!-- Previous Video Button -->
<!-- <div class="vjs-previous-control" title="Previous Video" role="button" tabindex="0">
<div>
<span>Previous Video</span>
</div>
</div> -->
<!-- Next Video Button -->
<!-- <div class="vjs-next-control" title="Next Video" role="button" tabindex="0">
<div>
<span>Next Video</span>
</div>
</div> -->
<!-- Subtitles Button -->
<!-- <div class="vjs-subtitles-control" title="Subtitles On/Off" role="button" tabindex="0">
<div>
<span>Closed Captions</span>
</div>
</div> -->
<!-- Captions Button -->
<!-- <div class="vjs-captions-control" title="Captions On/Off" role="button" tabindex="0">
<div>
<span>Closed Captions</span>
</div>
</div> -->
</div>
</div>
</body>
</html>
-133
Ver Arquivo
@@ -1,133 +0,0 @@
_V_.controlSets.main = {
options: {},
add: function(){
/* Creating this HTML
<div class="vjs-controls">
<div class="vjs-play-control">
<span></span>
</div>
<div class="vjs-progress-control">
<div class="vjs-progress-holder">
<div class="vjs-load-progress"></div>
<div class="vjs-play-progress"></div>
</div>
</div>
<div class="vjs-time-control">
<span class="vjs-current-time-display">00:00</span><span> / </span><span class="vjs-duration-display">00:00</span>
</div>
<div class="vjs-volume-control">
<div>
<span></span><span></span><span></span><span></span><span></span><span></span>
</div>
</div>
<div class="vjs-fullscreen-control">
<div>
<span></span><span></span><span></span><span></span>
</div>
</div>
</div>
*/
this.cels.main = {};
// Create a div to hold the different controls
this.cels.main.bar = _V_.createElement("div", { className: "vjs-controls" });
// Add the controls to the video's container
this.box.appendChild(this.cels.main.bar);
this.addBehavior(this.cels.main.bar, "controlBar");
// Build the play control
this.cels.main.playControl = _V_.createElement("div", { className: "vjs-play-control vjs-control", innerHTML: "<span></span>" });
this.cels.main.bar.appendChild(this.cels.main.playControl);
this.addBehavior(this.cels.main.playControl, "playToggle");
// Build the progress control
this.cels.main.progressControl = _V_.createElement("div", { className: "vjs-progress-control vjs-control" });
this.cels.main.bar.appendChild(this.cels.main.progressControl);
// Create a holder for the progress bars
this.cels.main.progressHolder = _V_.createElement("div", { className: "vjs-progress-holder" });
this.cels.main.progressControl.appendChild(this.cels.main.progressHolder);
this.addBehavior(this.cels.main.progressHolder, "seekBar");
// Create the loading progress display
this.cels.main.loadProgressBar = _V_.createElement("div", { className: "vjs-load-progress" });
this.cels.main.progressHolder.appendChild(this.cels.main.loadProgressBar);
this.addBehavior(this.cels.main.loadProgressBar, "loadProgressBar");
// Create the playing progress display
this.cels.main.playProgressBar = _V_.createElement("div", { className: "vjs-play-progress" });
this.cels.main.progressHolder.appendChild(this.cels.main.playProgressBar);
this.addBehavior(this.cels.main.playProgressBar, "playProgressBar");
// Create the progress time display (00:00 / 00:00)
this.cels.main.timeControl = _V_.createElement("div", { className: "vjs-time-control vjs-control" });
this.cels.main.bar.appendChild(this.cels.main.timeControl);
// // Create the current play time display
this.cels.main.currentTimeDisplay = _V_.createElement("span", { className: "vjs-current-time-display", innerHTML: "00:00" });
this.cels.main.timeControl.appendChild(this.cels.main.currentTimeDisplay);
this.addBehavior(this.cels.main.currentTimeDisplay, "currentTimeDisplay");
// Add time separator
this.cels.main.timeSeparator = _V_.createElement("span", { innerHTML: " / " });
this.cels.main.timeControl.appendChild(this.cels.main.timeSeparator);
// Create the total duration display
this.cels.main.durationDisplay = _V_.createElement("span", { className: "vjs-duration-display", innerHTML: "00:00" });
this.cels.main.timeControl.appendChild(this.cels.main.durationDisplay);
this.addBehavior(this.cels.main.durationDisplay, "durationDisplay");
// Create the volumne control
this.cels.main.volumeControl = _V_.createElement("div", {
className: "vjs-volume-control vjs-control",
innerHTML: '<div><span class="vjs-vc-1"></span><span class="vjs-vc-2"></span><span class="vjs-vc-3"></span><span class="vjs-vc-4"></span><span class="vjs-vc-5"></span><span class="vjs-vc-6"></span></div>'
});
this.cels.main.bar.appendChild(this.cels.main.volumeControl);
this.addBehavior(this.cels.main.volumeControl, "volumeScrubber");
this.cels.main.volumeDisplay = this.cels.main.volumeControl.children[0];
this.addBehavior(this.cels.main.volumeDisplay, "volumeDisplay");
// Crete the fullscreen control
this.cels.main.fullscreenControl = _V_.createElement("div", {
className: "vjs-fullscreen-control vjs-control",
innerHTML: '<div><span class="vjs-fc-1"></span><span class="vjs-fc-2"></span><span class="vjs-fc-3"></span><span class="vjs-fc-4"></span></div>'
});
this.cels.main.bar.appendChild(this.cels.main.fullscreenControl);
this.addBehavior(this.cels.main.fullscreenControl, "fullscreenToggle");
},
remove: function(){
this.box.removeChild(this.cels.bigPlayButton);
delete this.cels.bigPlayButton;
this.removeBehavior(this.cels.bigPlayButton, "bigPlayButton");
}
}
/* Control Bar Behaviors
================================================================================ */
VideoJS.fn.newBehavior("controlBar",
function(element){
if (!this.bels.controlBars) {
this.bels.controlBars = [];
// this.addEvent("mouseover", this.showControlBars);
// this.addEvent("mouseout", this.hideControlBars);
}
this.bels.controlBars.push(element);
},
function(element){},
{
showControlBars: function(){
this.each(this.bels.controlBars, function(bar){
// bar.style.opacity = 1;
bar.style.display = "block";
});
},
hideControlBars: function(){
this.each(this.bels.controlBars, function(bar){
// bar.style.opacity = 0;
bar.style.display = "none";
});
}
}
);
-22
Ver Arquivo
@@ -1,22 +0,0 @@
_V_.controlSets.subtitlesBox = {
options: {},
add: function(){
/* Creating this HTML
<div class="vjs-subtitles"></div>
*/
// Create a reference to the element
var subs = this.cels.subtitlesBox = _V_.createElement("div", { className: "vjs-subtitles" });
// Add the controls to the video's container
this.box.appendChild(subs);
this.addBehavior(subs, "subtitlesDisplay");
},
remove: function(){
this.removeBehavior(this.cels.subtitlesBox, "subtitlesDisplay");
this.box.removeChild(this.cels.subtitlesBox);
delete this.cels.subtitlesBox;
}
};
-381
Ver Arquivo
@@ -1,381 +0,0 @@
// HTML5 Shiv. Must be in <head>.
document.createElement("video");document.createElement("audio");
var VideoJS = _V_ = function(id, options){
// Allow for element or ID to be passed in.
var tag = (typeof id == "string" ? _V_.el(id) : id);
if (!tag || !tag.nodeName) { // Could be a box div also
throw new TypeError("The element or ID supplied is not valid. (video.js)");
return;
}
// Check if (not) using "new" operator before the function to create new instance
if (!(this instanceof arguments.callee)) {
// Return the player attr on the element if it exists
// Otherwise set up a new player.
return tag.player || new VideoJS(id, options);
}
this.tag = tag;
var box = this.box = _V_.createElement("div"),
width = tag.width || 300,
height = tag.height || 150;
// Make player findable on elements
tag.player = box.player = this;
// Wrap video tag in div (box) container
tag.parentNode.insertBefore(box, tag);
box.appendChild(tag); // Breaks iPhone, fixed in HTML5 setup.
// Give video tag properties to box
box.id = tag.id; // ID will now reference box, not the video tag
box.className = tag.className;
box.setAttribute("width", width);
box.setAttribute("height", height);
box.style.width = width+"px";
box.style.height = height+"px";
// Strip tag of basic properties
tag.id += "_html5_api";
tag.className = "vjs-tech";
tag.removeAttribute("width");
tag.removeAttribute("height");
tag.removeAttribute("controls");
// Default Options
this.options = _V_.options; // Global Defaults
_V_.merge(this.options, this.getVideoTagSettings()); // Override with Video Tag Options
_V_.merge(this.options, options); // Override/extend with options from setup call
// Empty video tag sources and tracks so the built in player doesn't use them also.
if (tag.hasChildNodes()) {
for (var i=0,j=tag.childNodes;i<j.length;i++) {
if (j[i].nodeName == "SOURCE" || j[i].nodeName == "TRACK") {
tag.removeChild(j[i]);
}
}
}
// Store references to elements for different purposes
this.els = {};
// Tech (playback) Elements. Store playback tech objects for switching between them.
// ex. this.tels.html5 = videoTagElement; this.tels.flowplayer = swfObject;
this.tels = {};
// Behavior Elements. Store refs to elements that trigger/are triggered by a behavior.
// ex. this.bels.playButtons = [element1, element2]
this.bels = {};
// Control Elements. Store refs to elements that are part of control sets
// this.cels.mainControls.playButton = playButtonDiv;
this.cels = {};
// Cache for video property values.
this.values = {};
this.apiIsReady = false;
this.addBehavior(this.box, "box");
this.addEvent("ended", this.handleEnded);
// Build controls when the API is ready
this.addEvent("techready", _V_.proxy(this, function(){
this.each(this.options.controlSets, function(set){
_V_.controlSets[set].add.call(this);
});
}));
// Loop through playback technologies (HTML5, Flash) and check for support
// Then load the best source.
this.src(this.options.sources);
};
VideoJS.options = {
techOrder: ["h5swf","html5","flowplayer"],
controlSets: ["bigPlayButton", "bar", "subtitlesBox"/*, "replay"*/],
controlSetOptions: {
bigPlayButton: {},
bar: {},
replay: {}
},
width: "auto", // Default of web browser is 300x150. Should rely on source width/height.
height: "auto"
};
VideoJS.fn = VideoJS.prototype = {
getVideoTagSettings: function(){
var options = {
sources: [],
tracks: []
};
options.width = this.tag.width;
options.height = this.tag.height;
options.src = this.tag.src;
options.poster = this.tag.poster;
options.preload = this.tag.preload;
options.autoplay = this.tag.getAttribute("autoplay") !== null; // hasAttribute not IE <8 compatible
options.controls = this.tag.getAttribute("controls") !== null;
options.loop = this.tag.getAttribute("loop") !== null;
options.muted = this.tag.getAttribute("muted") !== null;
for (var c,i=0,j=this.tag.children;i<j.length;i++) {
c = j[i];
if (c.nodeName == "SOURCE") {
options.sources.push({
src: c.src,
type: c.type,
media: c.media,
title: c.title
});
}
if (c.nodeName == "TRACK") {
options.tracks.push(new _V_.Track({
src: c.getAttribute("src"),
kind: c.getAttribute("kind"),
srclang: c.getAttribute("srclang"),
label: c.getAttribute("label"),
'default': c.getAttribute("default") !== null,
title: c.getAttribute("title")
}, this));
}
}
return options;
},
/* PLayback Technology (tech)
================================================================================ */
loadTech: function(techName, source){
var tech = this.currentTech = _V_.tech[techName];
// Pause and remove current playback technology
if (this.currentTechName) {
this.removeTech(techName);
// If the first time loading, HTML5 tag will exist but won't be initialized
// So we need to remove it if we're not loading HTML5
} else if (!this.currentTechName && techName != "html5") {
this.removeTechElement(this.tag);
}
this.currentTechName = techName;
// Turn off API access because we're loading a new tech that might load asynchronously
this.isReady = false;
// Point all internal API calls to new playback tech's API.
this.api = tech.api;
// Finsh API Setup when tech is ready
this.addEvent("techready", _V_.proxy(this, function(){
// Reomve this so it's not called twice next load
this.removeEvent("techready", arguments.callee);
this.currentTechElement = this.tels[this.currentTechName];
// Set up playback technology's event triggers
this.api.setupTriggers.call(this);
this.triggerReady();
// Make playback element clickable
this.addBehavior(this.currentTechElement, "tech");
// Manually track progress in cases where the browser/flash player doesn't report it.
if (!_V_.techSupports(tech, "event", "progress")) { this.manualProgressOn(); }
// Manually track timeudpates in cases where the browser/flash player doesn't report it.
if (!_V_.techSupports(tech, "event", "timeupdate")) { this.manualTimeUpdatesOn(); }
}));
// Initialize new tech if it hasn't been yet
if (this.tels[techName] === undefined) {
tech.init.call(this, source);
} else {
_V_.insertFirst(this.tels[techName], this.box);
this.src(source);
}
},
removeTech: function(techName){
this.removeTechElement(this.tels[techName]);
// Should probably remove API listeners as well
},
removeTechElement: function(el){
this.box.removeChild(el);
},
/* Ready - Trigger functions when player is ready
================================================================================ */
readyQueue: [],
ready: function(fn){
if (this.isReady) {
fn.call(this);
} else {
this.readyQueue.push(fn);
}
},
triggerReady: function(){
if (this.isReady) return;
this.isReady = true;
if (this.readyQueue.length > 0) {
// Call all functions in ready queue
this.each(this.readyQueue, function(fn){
fn.call(this);
});
// Reset Ready Queue
this.readyQueue = [];
}
},
/* Behaviors - Make elements act like specific controls or displays
================================================================================ */
/* TODO - Make behavior classes. Use JR's simple inheritance for sub-classing. */
behaviors: {},
// New Behavior. Gets called in prototype scope (_V_.fn.newBehavior), so added to all instances.
newBehavior: function(name, add, remove, functions){
this.behaviors[name] = { add: add, remove: remove };
this.extend(functions);
},
addBehavior: function(element, behavior){
// Allow passing and ID string
if (typeof element == "string") { element = _V_.el(element); }
this.behaviors[behavior].add.call(this, element);
},
removeBehavior: function(element, behavior){
if (typeof element == "string") { element = _V_.el(element); }
this.behaviors[behavior].remove.call(this, element);
},
/* Fallbacks for unsupported event types
================================================================================ */
// Manually trigger progress events based on changes to the buffered amount
// Many flash players and older HTML5 browsers don't send progress or progress-like events
manualProgressOn: function(){
this.manualProgress = true;
// Trigger progress watching when a source begins loading
// this.addEvent("loadstart", _V_.proxy(this, this.trackProgress));
this.trackProgress();
// Set variables of closure
var tech = _V_.tech[this.currentTechName],
el = this.tels[this.currentTechName];
// Watch for native progress event
_V_.addEvent(el, "progress", _V_.proxy(this, function(){
// Remove this listener from the element
_V_.removeEvent(el, "progress", arguments.callee);
// Update known progress support for this playback technology
_V_.updateTechSupport(tech, "event", "progress", true);
// Turn off manual progress tracking
this.manualProgressOff();
}));
},
manualProgressOff: function(){
this.manualProgress = false;
this.removeEvent("loadstart", _V_.proxy(this, this.trackProgress));
this.stopTrackingProgress();
},
trackProgress: function(){
this.progressInterval = setInterval(_V_.proxy(this, function(){
// Don't trigger unless buffered amount is greater than last time
// log(this.values.bufferEnd, this.buffered().end(0), this.duration())
/* TODO: update for multiple buffered regions */
if (this.values.bufferEnd < this.buffered().end(0)) {
this.triggerEvent("progress");
} else if (this.bufferedPercent() == 1) {
this.stopTrackingProgress();
this.triggerEvent("progress"); // Last update
}
}), 500);
},
stopTrackingProgress: function(){ clearInterval(this.progressInterval); },
/* Time Tracking -------------------------------------------------------------- */
manualTimeUpdatesOn: function(){
this.manualTimeUpdates = true;
this.addEvent("play", this.trackCurrentTime);
this.addEvent("pause", this.stopTrackingCurrentTime);
// timeupdate is also called by .currentTime whenever current time is set
// Set variables of closure
var tech = _V_.tech[this.currentTechName],
el = this.tels[this.currentTechName];
// Watch for native timeupdate event
_V_.addEvent(el, "timeupdate", _V_.proxy(this, function(){
// Remove this listener from the element
_V_.removeEvent(el, "timeupdate", arguments.callee);
// Update known progress support for this playback technology
_V_.updateTechSupport(tech, "event", "timeupdate", true);
// Turn off manual progress tracking
this.manualTimeUpdatesOff();
}));
},
manualTimeUpdatesOff: function(){
this.manualTimeUpdates = false;
this.stopTrackingCurrentTime();
this.removeEvent("play", this.trackCurrentTime);
this.removeEvent("pause", this.stopTrackingCurrentTime);
},
trackCurrentTime: function(){
if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }
this.currentTimeInterval = setInterval(_V_.proxy(this, function(){
this.triggerEvent("timeupdate");
}), 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15
},
// Turn off play progress tracking (when paused or dragging)
stopTrackingCurrentTime: function(){ clearInterval(this.currentTimeInterval); },
/* Player event handlers (how the player reacts to certain events)
================================================================================ */
handleEnded: function(){
if (this.options.loop) {
this.currentTime(0);
this.play();
} else {
this.currentTime(0);
this.pause();
}
},
/* Utility
================================================================================ */
each: function(arr, fn){
if (!arr || arr.length === 0) { return; }
for (var i=0,j=arr.length; i<j; i++) {
if (fn.call(this, arr[i], i)) { break; }
}
},
extend: function(obj){
for (var attrname in obj) {
if (obj.hasOwnProperty(attrname)) { this[attrname]=obj[attrname]; }
}
},
/* Local Storage
================================================================================ */
setLocalStorage: function(key, value){
// IE was throwing errors referencing the var anywhere without this
var localStorage = localStorage || false;
if (!localStorage) { return; }
try {
localStorage[key] = value;
} catch(e) {
if (e.code == 22 || e.code == 1014) { // Webkit == 22 / Firefox == 1014
// this.warning(VideoJS.warnings.localStorageFull);
}
}
}
};
VideoJS.players = {};
-217
Ver Arquivo
@@ -1,217 +0,0 @@
// ECMA-262 is the standard for javascript.
// The following methods are impelemented EXACTLY as described in the standard (according to Mozilla Docs), and do not override the default method if one exists.
// This may conflict with other libraries that modify the array prototype, but those libs should update to use the standard.
// [].indexOf
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
if (this === void 0 || this === null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (len === 0) {
return -1;
}
var n = 0;
if (arguments.length > 0) {
n = Number(arguments[1]);
if (n !== n) { // shortcut for verifying if it's NaN
n = 0;
} else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
if (n >= len) {
return -1;
}
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t[k] === searchElement) {
return k;
}
}
return -1;
}
}
// NOT NEEDED YET
// [].lastIndexOf
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
// if (!Array.prototype.lastIndexOf)
// {
// Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/)
// {
// "use strict";
//
// if (this === void 0 || this === null)
// throw new TypeError();
//
// var t = Object(this);
// var len = t.length >>> 0;
// if (len === 0)
// return -1;
//
// var n = len;
// if (arguments.length > 1)
// {
// n = Number(arguments[1]);
// if (n !== n)
// n = 0;
// else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
// n = (n > 0 || -1) * Math.floor(Math.abs(n));
// }
//
// var k = n >= 0
// ? Math.min(n, len - 1)
// : len - Math.abs(n);
//
// for (; k >= 0; k--)
// {
// if (k in t && t[k] === searchElement)
// return k;
// }
// return -1;
// };
// }
// NOT NEEDED YET
// Array forEach per ECMA standard https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/foreach
// Production steps of ECMA-262, Edition 5, 15.4.4.18
// Reference: http://es5.github.com/#x15.4.4.18
// if ( !Array.prototype.forEach ) {
//
// Array.prototype.forEach = function( callback, thisArg ) {
//
// var T, k;
//
// if ( this == null ) {
// throw new TypeError( " this is null or not defined" );
// }
//
// // 1. Let O be the result of calling ToObject passing the |this| value as the argument.
// var O = Object(this);
//
// // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
// // 3. Let len be ToUint32(lenValue).
// var len = O.length >>> 0;
//
// // 4. If IsCallable(callback) is false, throw a TypeError exception.
// // See: http://es5.github.com/#x9.11
// if ( {}.toString.call(callback) != "[object Function]" ) {
// throw new TypeError( callback + " is not a function" );
// }
//
// // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
// if ( thisArg ) {
// T = thisArg;
// }
//
// // 6. Let k be 0
// k = 0;
//
// // 7. Repeat, while k < len
// while( k < len ) {
//
// var kValue;
//
// // a. Let Pk be ToString(k).
// // This is implicit for LHS operands of the in operator
// // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
// // This step can be combined with c
// // c. If kPresent is true, then
// if ( k in O ) {
//
// // i. Let kValue be the result of calling the Get internal method of O with argument Pk.
// kValue = O[ Pk ];
//
// // ii. Call the Call internal method of callback with T as the this value and
// // argument list containing kValue, k, and O.
// callback.call( T, kValue, k, O );
// }
// // d. Increase k by 1.
// k++;
// }
// // 8. return undefined
// };
// }
// NOT NEEDED YET
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map
// Production steps of ECMA-262, Edition 5, 15.4.4.19
// Reference: http://es5.github.com/#x15.4.4.19
// if (!Array.prototype.map) {
// Array.prototype.map = function(callback, thisArg) {
//
// var T, A, k;
//
// if (this == null) {
// throw new TypeError(" this is null or not defined");
// }
//
// // 1. Let O be the result of calling ToObject passing the |this| value as the argument.
// var O = Object(this);
//
// // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
// // 3. Let len be ToUint32(lenValue).
// var len = O.length >>> 0;
//
// // 4. If IsCallable(callback) is false, throw a TypeError exception.
// // See: http://es5.github.com/#x9.11
// if ({}.toString.call(callback) != "[object Function]") {
// throw new TypeError(callback + " is not a function");
// }
//
// // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
// if (thisArg) {
// T = thisArg;
// }
//
// // 6. Let A be a new array created as if by the expression new Array(len) where Array is
// // the standard built-in constructor with that name and len is the value of len.
// A = new Array(len);
//
// // 7. Let k be 0
// k = 0;
//
// // 8. Repeat, while k < len
// while(k < len) {
//
// var kValue, mappedValue;
//
// // a. Let Pk be ToString(k).
// // This is implicit for LHS operands of the in operator
// // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
// // This step can be combined with c
// // c. If kPresent is true, then
// if (k in O) {
//
// // i. Let kValue be the result of calling the Get internal method of O with argument Pk.
// kValue = O[ k ];
//
// // ii. Let mappedValue be the result of calling the Call internal method of callback
// // with T as the this value and argument list containing kValue, k, and O.
// mappedValue = callback.call(T, kValue, k, O);
//
// // iii. Call the DefineOwnProperty internal method of A with arguments
// // Pk, Property Descriptor {Value: mappedValue, Writable: true, Enumerable: true, Configurable: true},
// // and false.
//
// // In browsers that support Object.defineProperty, use the following:
// // Object.defineProperty(A, Pk, { value: mappedValue, writable: true, enumerable: true, configurable: true });
//
// // For best browser support, use the following:
// A[ k ] = mappedValue;
// }
// // d. Increase k by 1.
// k++;
// }
//
// // 9. return A
// return A;
// };
// }
-287
Ver Arquivo
@@ -1,287 +0,0 @@
// Event System (J.Resig - Secrets of a JS Ninja http://jsninja.com/ [Go buy it, really])
// (Book version isn't completely usable, so fixed some things and borrowed from jQuery where it's working)
//
// This should work very similarly to jQuery's events, however it's based off the book version which isn't as
// robust as jquery's, so there's probably some differences.
//
// When you add an event listener using _V_.addEvent,
// it stores the handler function in seperate cache object,
// and adds a generic handler to the element's event,
// along with a unique id (guid) to the element.
_V_.extend({
// Add an event listener to element
// It stores the handler function in a separate cache object
// and adds a generic handler to the element's event,
// along with a unique id (guid) to the element.
addEvent: function(elem, type, fn){
var data = _V_.getData(elem), handlers;
// We only need to generate one handler per element
if (data && !data.handler) {
// Our new meta-handler that fixes the event object and the context
data.handler = function(event){
event = _V_.fixEvent(event);
var handlers = _V_.getData(elem).events[event.type];
// Go through and call all the real bound handlers
if (handlers) {
for (var i = 0, l = handlers.length; i < l; i++) {
if (handlers[i]) handlers[i].call(elem, event); // Incase one's been removed
}
}
};
}
// We need a place to store all our event data
if (!data.events) { data.events = {}; }
// And a place to store the handlers for this event type
handlers = data.events[type];
if (!handlers) {
handlers = data.events[ type ] = [];
// Attach our meta-handler to the element, since one doesn't exist
if (document.addEventListener) {
elem.addEventListener(type, data.handler, false);
} else if (document.attachEvent) {
elem.attachEvent("on" + type, data.handler);
}
}
if (!fn.guid) { fn.guid = _V_.guid++; }
handlers.push(fn);
},
removeEvent: function(elem, type, fn) {
var data = _V_.getData(elem), handlers;
// If no events exist, nothing to unbind
if (!data.events) { return; }
// Are we removing all bound events?
if (!type) {
for (type in data.events) {
_V_.cleanUpEvents(elem, type);
}
return;
}
// And a place to store the handlers for this event type
handlers = data.events[type];
// If no handlers exist, nothing to unbind
if (!handlers) { return; }
// See if we're only removing a single handler
if (fn && fn.guid) {
for (var i = 0; i < handlers.length; i++) {
// We found a match (don't stop here, there could be a couple bound)
if (handlers[i].guid === fn.guid) {
// Remove the handler from the array of handlers
handlers.splice(i--, 1);
}
}
}
_V_.cleanUpEvents(elem, type);
},
cleanUpEvents: function(elem, type) {
var data = _V_.getData(elem);
// Remove the events of a particular type if there are none left
if (data.events[type].length === 0) {
delete data.events[type];
// Remove the meta-handler from the element
if (document.removeEventListener) {
elem.removeEventListener(type, data.handler, false);
} else if (document.detachEvent) {
elem.detachEvent("on" + type, data.handler);
}
}
// Remove the events object if there are no types left
if (_V_.isEmpty(data.events)) {
delete data.events;
delete data.handler;
}
// Finally remove the expando if there is no data left
if (_V_.isEmpty(data)) {
_V_.removeData(elem);
}
},
fixEvent: function(event) {
if (event[_V_.expando]) { return event; }
// store a copy of the original event object
// and "clone" to set read-only properties
var originalEvent = event;
event = new _V_.Event(originalEvent);
for ( var i = _V_.Event.props.length, prop; i; ) {
prop = _V_.Event.props[ --i ];
event[prop] = originalEvent[prop];
}
// Fix target property, if necessary
if (!event.target) { event.target = event.srcElement || document; }
// check if target is a textnode (safari)
if (event.target.nodeType === 3) { event.target = event.target.parentNode; }
// Add relatedTarget, if necessary
if (!event.relatedTarget && event.fromElement) {
event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
}
// Calculate pageX/Y if missing and clientX/Y available
if ( event.pageX == null && event.clientX != null ) {
var eventDocument = event.target.ownerDocument || document,
doc = eventDocument.documentElement,
body = eventDocument.body;
event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
}
// Add which for key events
if (event.which == null && (event.charCode != null || event.keyCode != null)) {
event.which = event.charCode != null ? event.charCode : event.keyCode;
}
// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
if ( !event.metaKey && event.ctrlKey ) {
event.metaKey = event.ctrlKey;
}
// Add which for click: 1 === left; 2 === middle; 3 === right
// Note: button is not normalized, so don't use it
if ( !event.which && event.button !== undefined ) {
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
}
return event;
},
triggerEvent: function(elem, event) {
var data = _V_.getData(elem),
parent = elem.parentNode || elem.ownerDocument,
type = event.type || event,
handler;
if (data) { handler = data.handler }
// Added in attion to book. Book code was broke.
event = typeof event === "object" ?
event[_V_.expando] ?
event :
new _V_.Event(type, event) :
new _V_.Event(type);
event.type = type;
if (handler) {
handler.call(elem, event);
}
// Clean up the event in case it is being reused
event.result = undefined;
event.target = elem;
// Bubble the event up the tree to the document,
// Unless it's been explicitly stopped
// if (parent && !event.isPropagationStopped()) {
// _V_.triggerEvent(parent, event);
//
// // We're at the top document so trigger the default action
// } else if (!parent && !event.isDefaultPrevented()) {
// // log(type);
// var targetData = _V_.getData(event.target);
// // log(targetData);
// var targetHandler = targetData.handler;
// // log("2");
// if (event.target[event.type]) {
// // Temporarily disable the bound handler,
// // don't want to execute it twice
// if (targetHandler) {
// targetData.handler = function(){};
// }
//
// // Trigger the native event (click, focus, blur)
// event.target[event.type]();
//
// // Restore the handler
// if (targetHandler) {
// targetData.handler = targetHandler;
// }
// }
// }
}
});
// Custom Event object for standardizing event objects between browsers.
_V_.Event = function(src, props){
// Event object
if (src && src.type) {
this.originalEvent = src;
this.type = src.type;
// Events bubbling up the document may have been marked as prevented
// by a handler lower down the tree; reflect the correct value.
this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
// Event type
} else {
this.type = src;
}
// Put explicitly provided properties onto the event object
if (props) { _V_.merge(this, props); }
this.timeStamp = (new Date).getTime();
// Mark it as fixed
this[_V_.expando] = true;
};
_V_.Event.prototype = {
preventDefault: function() {
this.isDefaultPrevented = returnTrue;
var e = this.originalEvent;
if (!e) { return; }
// if preventDefault exists run it on the original event
if (e.preventDefault) {
e.preventDefault();
// otherwise set the returnValue property of the original event to false (IE)
} else {
e.returnValue = false;
}
},
stopPropagation: function() {
this.isPropagationStopped = returnTrue;
var e = this.originalEvent;
if (!e) { return; }
// if stopPropagation exists run it on the original event
if (e.stopPropagation) { e.stopPropagation(); }
// otherwise set the cancelBubble property of the original event to true (IE)
e.cancelBubble = true;
},
stopImmediatePropagation: function() {
this.isImmediatePropagationStopped = returnTrue;
this.stopPropagation();
},
isDefaultPrevented: returnFalse,
isPropagationStopped: returnFalse,
isImmediatePropagationStopped: returnFalse
};
_V_.Event.props = "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" ");
function returnTrue(){ return true; }
function returnFalse(){ return false; }
-54
Ver Arquivo
@@ -1,54 +0,0 @@
// Javascript JSON implementation
// (Parse Method Only)
// https://github.com/douglascrockford/JSON-js/blob/master/json2.js
var JSON;
if (!JSON) { JSON = {}; }
(function(){
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
if (typeof JSON.parse !== 'function') {
JSON.parse = function (text, reviver) {
var j;
function walk(holder, key) {
var k, v, value = holder[key];
if (value && typeof value === 'object') {
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = walk(value, k);
if (v !== undefined) {
value[k] = v;
} else {
delete value[k];
}
}
}
}
return reviver.call(holder, key, value);
}
text = String(text);
cx.lastIndex = 0;
if (cx.test(text)) {
text = text.replace(cx, function (a) {
return '\\u' +
('0000' + a.charCodeAt(0).toString(16)).slice(-4);
});
}
if (/^[\],:{}\s]*$/
.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
j = eval('(' + text + ')');
return typeof reviver === 'function' ?
walk({'': j}, '') : j;
}
throw new SyntaxError('JSON.parse');
};
}
}());
-268
Ver Arquivo
@@ -1,268 +0,0 @@
_V_.merge = function(obj1, obj2, safe){
for (var attrname in obj2){
if (obj2.hasOwnProperty(attrname) && (!safe || !obj1.hasOwnProperty(attrname))) { obj1[attrname]=obj2[attrname]; }
}
return obj1;
};
_V_.extend = function(obj){ this.merge(this, obj, true); };
_V_.extend({
tech: {}, // Holder for playback technology settings
controlSets: {}, // Holder for control set definitions
techSupports: function(tech, type, name){
if (tech.supports[type]) {
return tech.supports[type][name];
}
return false;
},
updateTechSupport: function(tech, type, name, value){
if (!tech.supports[type]) { tech.supports[type] = {}; }
tech.supports[type][name] = value;
},
html5Events: "loadstart,suspend,abort,error,emptied,stalled,loadedmetadata,loadeddata,canplay,canplaythrough,playing,waiting,seeking,seeked,ended,durationchange,timeupdate,progress,play,pause,ratechange,volumechange".split(","),
// Device Checks
isIE: function(){ return !+"\v1"; },
isIPad: function(){ return navigator.userAgent.match(/iPad/i) !== null; },
isIPhone: function(){ return navigator.userAgent.match(/iPhone/i) !== null; },
isIOS: function(){ return VideoJS.isIPhone() || VideoJS.isIPad(); },
iOSVersion: function() {
var match = navigator.userAgent.match(/OS (\d+)_/i);
if (match && match[1]) { return match[1]; }
},
isAndroid: function(){ return navigator.userAgent.match(/Android.*AppleWebKit/i) !== null; },
androidVersion: function() {
var match = navigator.userAgent.match(/Android (\d+)\./i);
if (match && match[1]) { return match[1]; }
},
//isAndroidBrowser
each: function(arr, fn){
if (!arr || arr.length === 0) { return; }
for (var i=0,j=arr.length; i<j; i++) {
fn.call(this, arr[i], i);
}
},
el: function(id){ return document.getElementById(id); },
createElement: function(tagName, attributes){
var el = document.createElement(tagName),
attrname;
for (attrname in attributes){
if (attributes.hasOwnProperty(attrname)) {
if (attrname.indexOf("-") !== -1) {
el.setAttribute(attrname, attributes[attrname]);
} else {
el[attrname] = attributes[attrname];
}
}
}
return el;
},
insertFirst: function(node, parent){
if (parent.firstChild) {
parent.insertBefore(parent.firstChild, node);
} else {
parent.appendChild(node);
}
},
addClass: function(element, classToAdd){
if ((" "+element.className+" ").indexOf(" "+classToAdd+" ") == -1) {
element.className = element.className === "" ? classToAdd : element.className + " " + classToAdd;
}
},
removeClass: function(element, classToRemove){
if (element.className.indexOf(classToRemove) == -1) { return; }
var classNames = element.className.split(" ");
classNames.splice(classNames.indexOf(classToRemove),1);
element.className = classNames.join(" ");
},
remove: function(item, array){
if (!array) return;
var i = array.indexOf(item);
if (i != -1) {
return array.splice(i, 1)
};
},
// Attempt to block the ability to select text while dragging controls
blockTextSelection: function(){
document.body.focus();
document.onselectstart = function () { return false; };
},
// Turn off text selection blocking
unblockTextSelection: function(){ document.onselectstart = function () { return true; }; },
// Return seconds as H:MM:SS or M:SS
// Supplying a guide (in seconds) will include enough leading zeros to cover the length of the guide
formatTime: function(seconds, guide) {
var guide = guide || seconds, // Default to using seconds as guide
s = Math.floor(seconds % 60),
m = Math.floor(seconds / 60 % 60),
h = Math.floor(seconds / 3600),
gm = Math.floor(guide / 60 % 60),
gh = Math.floor(guide / 3600);
// Check if we need to show hours
h = (h > 0 || gh > 0) ? h + ":" : "";
// If hours are showing, we may need to add a leading zero.
// Always show at least one digit of minutes.
m = (((h || gm >= 10) && m < 10) ? "0" + m : m) + ":";
// Check if leading zero is need for seconds
s = (s < 10) ? "0" + s : s;
return h + m + s;
},
// Return the relative horizonal position of an event as a value from 0-1
getRelativePosition: function(x, relativeElement){
return Math.max(0, Math.min(1, (x - _V_.findPosX(relativeElement)) / relativeElement.offsetWidth));
},
// Get an objects position on the page
findPosX: function(obj) {
var curleft = obj.offsetLeft;
while(obj = obj.offsetParent) {
curleft += obj.offsetLeft;
}
return curleft;
},
getComputedStyleValue: function(element, style){
return window.getComputedStyle(element, null).getPropertyValue(style);
},
trim: function(string){ return string.toString().replace(/^\s+/, "").replace(/\s+$/, ""); },
round: function(num, dec) {
if (!dec) { dec = 0; }
return Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
},
isEmpty: function(object) {
for (var prop in object) {
return false;
}
return true;
},
// Mimic HTML5 TimeRange Spec.
createTimeRange: function(start, end){
return {
length: 1,
start: function() { return start; },
end: function() { return end; }
};
},
/* Element Data Store. Allows for binding data to an element without putting it directly on the element.
Ex. Event listneres are stored here.
(also from jsninja.com)
================================================================================ */
cache: {}, // Where the data is stored
guid: 1, // Unique ID for the element
expando: "vdata" + (new Date).getTime(), // Unique attribute to store element's guid in
// Returns the cache object where data for the element is stored
getData: function(elem){
var id = elem[_V_.expando];
if (!id) {
id = elem[_V_.expando] = _V_.guid++;
_V_.cache[id] = {};
}
return _V_.cache[id];
},
// Delete data for the element from the cache and the guid attr from element
removeData: function(elem){
var id = elem[_V_.expando];
if (!id) { return; }
// Remove all stored data
delete _V_.cache[id];
// Remove the expando property from the DOM node
try {
delete elem[_V_.expando];
} catch(e) {
if (elem.removeAttribute) {
elem.removeAttribute(_V_.expando);
} else {
// IE doesn't appear to support removeAttribute on the document element
elem[_V_.expando] = null;
}
}
},
/* Proxy (a.k.a Bind or Context). A simple method for changing the context of a function
It also stores a unique id on the function so it can be easily removed from events
================================================================================ */
proxy: function(context, fn) {
// Make sure the function has a unique ID
if (!fn.guid) { fn.guid = _V_.guid++; }
// Create the new function that changes the context
var ret = function() {
return fn.apply(context, arguments);
};
// Give the new function the same ID
// (so that they are equivalent and can be easily removed)
ret.guid = fn.guid;
return ret;
},
get: function(url, onSuccess, onError){
// if (netscape.security.PrivilegeManager.enablePrivilege) {
// netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
// }
var local = (url.indexOf("file:") == 0 || (window.location.href.indexOf("file:") == 0 && url.indexOf("http:") == -1));
if (typeof XMLHttpRequest == "undefined") {
XMLHttpRequest = function () {
try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (f) {}
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (g) {}
throw new Error("This browser does not support XMLHttpRequest.");
};
}
var request = new XMLHttpRequest();
try {
request.open("GET", url);
} catch(e) {
_V_.log(e);
// onError(e);
return false;
}
request.onreadystatechange = _V_.proxy(this, function() {
if (request.readyState == 4) {
if (request.status == 200 || local && request.status == 0) {
onSuccess(request.responseText);
} else {
onError();
}
}
});
try {
request.send();
} catch(e) {
_V_.log(e);
onError(e);
}
}
});
// /* Function Context Allows for binding context to functions when using in event listeners
// ================================================================================ */
// Function.prototype.context = function(obj){
// var method = this,
// temp = function(){
// return method.apply(obj, arguments);
// };
// return temp;
// };
-15
Ver Arquivo
@@ -1,15 +0,0 @@
// usage: log('inside coolFunc', this, arguments);
// paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
_V_.log = function(){
_V_.log.history = _V_.log.history || [];// store logs to an array for reference
_V_.log.history.push(arguments);
if(window.console) {
arguments.callee = arguments.callee.caller;
var newarr = [].slice.call(arguments);
(typeof console.log === 'object' ? _V_.log.apply.call(console.log, console, newarr) : console.log.apply(console, newarr));
}
};
// make it safe to use console.log always
(function(b){function c(){}for(var d="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,timeStamp,profile,profileEnd,time,timeEnd,trace,warn".split(","),a;a=d.pop();){b[a]=b[a]||c}})((function(){try
{console.log();return window.console;}catch(err){return window.console={};}})());
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
-152
Ver Arquivo
@@ -1,152 +0,0 @@
VideoJS.tech.h5swf = {
// swf: "flash/VideoJS.swf",
swf: "https://s3.amazonaws.com/video-js/3.0b/video-js.swf",
// swf: "http://video-js.zencoder.com/3.0b/video-js.swf",
supported: function(){
/* TODO Check for flash, etc. */
return true;
},
canPlaySource: function(sourceObj){
if (sourceObj.type in _V_.tech.h5swf.supports.format) { return "maybe"; }
},
supports: {
format: {
"video/flv": "FLV",
"video/x-flv": "FLV",
"video/mp4": "MP4",
"video/m4v": "MP4"
},
// Optional events that we can manually mimic with timers
event: {
progress: false,
timeupdate: false
}
},
// Init the swf object
init: function(sourceObj){
var player = this,
placeHolder = _V_.createElement("div", { id: player.box.id + "_temp_h5swf" }),
objId = player.box.id+"_h5swf_api"
h5swf = VideoJS.tech.h5swf,
flashvars = {
readyFunction: "_V_.tech.h5swf.onSWFReady",
eventProxyFunction: "_V_.tech.h5swf.onSWFEvent",
errorEventProxyFunction: "_V_.tech.h5swf.onSWFErrorEvent",
src: sourceObj.src,
autoplay: this.options.autoplay,
preload: this.options.preload,
loop: this.options.loop,
muted: this.options.muted
},
params = {
allowScriptAccess: "always",
wmode: "opaque",
bgcolor: "#000000"
},
attributes = {
id: objId,
name: objId,
'class': 'vjs-tech'
};
player.box.appendChild(placeHolder);
swfobject.embedSWF(_V_.tech.h5swf.swf, placeHolder.id, "480", "270", "9.0.124", "", flashvars, params, attributes);
},
onSWFReady: function(currSwf){
// Flash seems to be catching errors, so raising them manally
try {
// Delay for real swf ready.
setTimeout(function(){
var el = _V_.el(currSwf),
player = el.parentNode.player; // Get player from box
el.player = player;
// Update reference to playback technology element
player.tels.h5swf = el;
player.ready(function(){
// this.src("http://video-js.zencoder.com/oceans-clip.mp4");
});
player.triggerEvent("techready");
},0);
} catch(err) {
_V_.log(err);
}
},
onSWFEvent: function(swfID, eventName, other){
try {
var player = _V_.el(swfID).player;
if (player) {
player.triggerEvent(eventName);
}
} catch(err) {
_V_.log(err);
}
},
onSWFErrorEvent: function(swfID, eventName){
_V_.log("Error", eventName);
},
api: {
setupTriggers: function(){
// Using global onSWFEvent func to distribute events
},
play: function(){ this.tels.h5swf.vjs_play(); },
pause: function(){ this.tels.h5swf.vjs_pause(); },
src: function(src){ this.tels.h5swf.vjs_src(src); },
load: function(){ this.tels.h5swf.vjs_load(); },
buffered: function(){
return _V_.createTimeRange(0, this.tels.h5swf.vjs_getProperty("buffered"));
},
supportsFullScreen: function(){
return false; // Flash does not allow fullscreen through javascript
},
enterFullScreen: function(){ return false; }
}
};
// Create setters and getters for attributes
(function(){
var api = VideoJS.tech.h5swf.api,
readWrite = "src,preload,currentTime,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(","),
callOnly = "load,play,pause".split(",");
// Overridden: buffered
createSetter = function(attr){
var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);
api["set"+attrUpper] = function(val){ return this.tels.h5swf.vjs_setProperty(attr, val); };
},
createGetter = function(attr){
api[attr] = function(){ return this.tels.h5swf.vjs_getProperty(attr); };
};
// Create getter and setters for all read/write attributes
_V_.each(readWrite, function(attr){
createGetter(attr);
createSetter(attr);
});
// Create getters for read-only attributes
_V_.each(readOnly, function(attr){
createGetter(attr);
});
})();
// Special
// canPlayType
// addTextTrack
// textTracks
-157
Ver Arquivo
@@ -1,157 +0,0 @@
// Setup an API for the HTML5 playback technology
VideoJS.tech.html5 = {
supported: function(){
return !!document.createElement("video").canPlayType;
},
canPlaySource: function(srcObj){
return this.tag.canPlayType(srcObj.type); // Switch to global check
// Check Type
// If no Type, check ext
// Check Media Type
},
init: function(sourceObj){
var tag = this.tag, // Reuse original tag for HTML5 playback technology element
html5 = _V_.tech.html5,
options = this.options;
// Check if this browser supports moving the element into the box.
// On the iPhone video will break if you move the element,
// So we have to create a brand new element.
if (html5.supports.movingElementInDOM === false) {
var newTag = _V_.createElement("video", {
id: tag.id,
className: tag.className
});
this.box.removeChild(this.tag);
tag = this.tag = newTag;
this.box.appendChild(tag);
}
// Store reference to playback element
this.tels.html5 = tag;
// Update tag settings, in case they were overridden
_V_.each(["autoplay","preload","loop","muted","poster"], function(attr){
tag[attr] = options[attr];
}, this);
if (tag.currentSrc != sourceObj.src) {
tag.src = sourceObj.src;
} else {
this.triggerEvent("loadstart");
}
this.triggerEvent("techready");
},
supports: {
/* Will hold support info as it's discovered */
},
api: {
setupTriggers: function(){
// Make video events trigger player events
// May seem verbose here, but makes other APIs possible.
// ["play", "playing", "pause", "ended", "volumechange", "error", "progress", "seeking", "timeupdate"]
var types = _V_.html5Events,
i;
for (i = 0;i<types.length; i++) {
_V_.addEvent(this.tels.html5, types[i], _V_.proxy(this, function(e){
e.stopPropagation();
this.triggerEvent(e);
}));
}
},
removeTriggers: function(){},
play: function(){ this.tels.html5.play(); },
pause: function(){ this.tels.html5.pause(); },
paused: function(){ return this.tels.html5.paused; },
currentTime: function(){ return this.tels.html5.currentTime; },
setCurrentTime: function(seconds){
try { this.tels.html5.currentTime = seconds; }
catch(e) {
_V_.log(e);
// this.warning(VideoJS.warnings.videoNotReady);
}
},
duration: function(){ return this.tels.html5.duration || 0; },
buffered: function(){ return this.tels.html5.buffered; },
volume: function(){ return this.tels.html5.volume; },
setVolume: function(percentAsDecimal){ this.tels.html5.volume = percentAsDecimal; },
muted: function(){ return this.tels.html5.muted; },
setMuted: function(muted){ this.tels.html5.muted = muted },
width: function(){ return this.tels.html5.offsetWidth; },
height: function(){ return this.tels.html5.offsetHeight; },
supportsFullScreen: function(){
if(typeof this.tels.html5.webkitEnterFullScreen == 'function') {
// Seems to be broken in Chromium/Chrome && Safari in Leopard
if (!navigator.userAgent.match("Chrome") && !navigator.userAgent.match("Mac OS X 10.5")) {
return true;
}
}
return false;
},
enterFullScreen: function(){
try {
this.tels.html5.webkitEnterFullScreen();
} catch (e) {
if (e.code == 11) { this.warning(VideoJS.warnings.videoNotReady); }
}
},
src: function(src){ this.tels.html5.src = src; },
load: function(){ this.tels.html5.load(); },
currentSrc: function(){ return this.tels.html5.currentSrc; },
preload: function(){ return this.tels.html5.preload; },
setPreload: function(val){ this.tels.html5.preload = val; },
autoplay: function(){ return this.tels.html5.autoplay; },
setAutoplay: function(val){ this.tels.html5.autoplay = val; },
loop: function(){ return this.tels.html5.loop; },
setLoop: function(val){ this.tels.html5.loop = val; },
error: function(){ return this.tels.html5.error; },
networkState: function(){ return this.tels.html5.networkState; },
readyState: function(){ return this.tels.html5.readyState; },
seeking: function(){ return this.tels.html5.seeking; },
initialTime: function(){ return this.tels.html5.initialTime; },
startOffsetTime: function(){ return this.tels.html5.startOffsetTime; },
played: function(){ return this.tels.html5.played; },
seekable: function(){ return this.tels.html5.seekable; },
ended: function(){ return this.tels.html5.ended; },
videoTracks: function(){ return this.tels.html5.videoTracks; },
audioTracks: function(){ return this.tels.html5.audioTracks; },
videoWidth: function(){ return this.tels.html5.videoWidth; },
videoHeight: function(){ return this.tels.html5.videoHeight; },
textTracks: function(){ return this.tels.html5.textTracks; },
defaultPlaybackRate: function(){ return this.tels.html5.defaultPlaybackRate; },
playbackRate: function(){ return this.tels.html5.playbackRate; },
mediaGroup: function(){ return this.tels.html5.mediaGroup; },
controller: function(){ return this.tels.html5.controller; },
controls: function(){ return this.tels.html5.controls; },
defaultMuted: function(){ return this.tels.html5.defaultMuted; }
}
};
/* Device Fixes
================================================================================ */
// iOS
if (_V_.isIOS()) {
// If you move a video element in the DOM, it breaks video playback.
_V_.tech.supports.movingElementInDOM = false;
}
// Android
if (_V_.isAndroid()) {
// Override Android 2.2 and less canPlayType method which is broken
if (_V_.androidVersion() < 3) {
document.createElement("video").constructor.prototype.canPlayType = function(type){
return (type && type.toLowerCase().indexOf("video/mp4") != -1) ? "maybe" : "";
};
}
}
-131
Ver Arquivo
@@ -1,131 +0,0 @@
_V_.Track = function(attributes, player){
// Store reference to the parent player
this.player = player;
this.src = attributes.src;
this.kind = attributes.kind;
this.srclang = attributes.srclang;
this.label = attributes.label;
this["default"] = attributes["default"];
this.title = attributes.title;
this.cues = [];
this.currentCue = false;
this.lastCueIndex = 0;
// Update current cue on timeupdate
player.addEvent("timeupdate", _V_.proxy(this, this.update))
// Reset cue time on media end
player.addEvent("ended", _V_.proxy(this, function() { this.lastCueIndex = 0; }));
// Load Track File
_V_.get(attributes.src, _V_.proxy(this, this.parseCues));
};
_V_.Track.prototype = {
parseCues: function(srcContent) {
var cue, time, text,
lines = srcContent.split("\n"),
line = "";
for (var i=0; i<lines.length; i++) {
line = _V_.trim(lines[i]); // Trim whitespace and linebreaks
if (line) { // Loop until a line with content
// First line - Number
cue = {
id: line, // Cue Number
index: this.cues.length // Position in Array
};
// Second line - Time
line = _V_.trim(lines[++i]);
time = line.split(" --> ");
cue.startTime = this.parseCueTime(time[0]);
cue.endTime = this.parseCueTime(time[1]);
// Additional lines - Cue Text
text = [];
for (var j=i; j<lines.length; j++) { // Loop until a blank line or end of lines
line = _V_.trim(lines[++i]);
if (!line) { break; }
text.push(line);
}
cue.text = text.join('<br/>');
// Add this cue
this.cues.push(cue);
}
}
},
parseCueTime: function(timeText) {
var parts = timeText.split(':'),
time = 0;
// hours => seconds
time += parseFloat(parts[0])*60*60;
// minutes => seconds
time += parseFloat(parts[1])*60;
// get seconds
var seconds = parts[2].split(/\.|,/); // Either . or ,
time += parseFloat(seconds[0]);
// add miliseconds
ms = parseFloat(seconds[1]);
if (ms) { time += ms/1000; }
return time;
},
update: function(){
// Assuming all cues are in order by time, and do not overlap
if (this.cues && this.cues.length > 0) {
var time = this.player.currentTime();
// If current cue should stay showing, don't do anything. Otherwise, find new cue.
if (!this.currentCue || this.currentCue.startTime >= time || this.currentCue.endTime < time) {
var newSubIndex = false,
// Loop in reverse if lastCue is after current time (optimization)
// Meaning the user is scrubbing in reverse or rewinding
reverse = (this.cues[this.lastCueIndex].startTime > time),
// If reverse, step back 1 becase we know it's not the lastCue
i = this.lastCueIndex - (reverse) ? 1 : 0;
while (true) { // Loop until broken
if (reverse) { // Looping in reverse
// Stop if no more, or this cue ends before the current time (no earlier cues should apply)
if (i < 0 || this.cues[i].endTime < time) { break; }
// End is greater than time, so if start is less, show this cue
if (this.cues[i].startTime < time) {
newSubIndex = i;
break;
}
i--;
} else { // Looping forward
// Stop if no more, or this cue starts after time (no later cues should apply)
if (i >= this.cues.length || this.cues[i].startTime > time) { break; }
// Start is less than time, so if end is later, show this cue
if (this.cues[i].endTime > time) {
newSubIndex = i;
break;
}
i++;
}
}
// Set or clear current cue
if (newSubIndex !== false) {
this.currentCue = this.cues[newSubIndex];
this.lastCueIndex = newSubIndex;
this.updatePlayer(this.currentCue.text);
} else if (this.currentCue) {
this.currentCue = false;
this.updatePlayer("");
}
}
}
},
// Update the stored value for the current track kind
// and trigger an event to update all text track displays.
updatePlayer: function(text){
this.player.textTrackValue(this.kind, text);
}
};
-7
Ver Arquivo
@@ -1,7 +0,0 @@
.project
*~
*.diff
*.patch
.DS_Store
.settings
-27
Ver Arquivo
@@ -1,27 +0,0 @@
[QUnit](http://docs.jquery.com/QUnit) - A JavaScript Unit Testing framework.
================================
QUnit is a powerful, easy-to-use, JavaScript test suite. It's used by the jQuery
project to test its code and plugins but is capable of testing any generic
JavaScript code (and even capable of testing JavaScript code on the server-side).
QUnit is especially useful for regression testing: Whenever a bug is reported,
write a test that asserts the existence of that particular bug. Then fix it and
commit both. Every time you work on the code again, run the tests. If the bug
comes up again - a regression - you'll spot it immediately and know how to fix
it, because you know what code you just changed.
Having good unit test coverage makes safe refactoring easy and cheap. You can
run the tests after each small refactoring step and always know what change
broke something.
QUnit is similar to other unit testing frameworks like JUnit, but makes use of
the features JavaScript provides and helps with testing code in the browser, eg.
with it's stop/start facilities for testing asynchronous code.
If you are interested in helping developing QUnit, you are in the right place.
For related discussions, visit the
[QUnit and Testing forum](http://forum.jquery.com/qunit-and-testing).
Planning for a qunitjs.com site and other testing tools related work now happens
on the [jQuery Testing Team planning wiki](http://jquerytesting.pbworks.com/w/page/41556026/FrontPage).
-16
Ver Arquivo
@@ -1,16 +0,0 @@
Canvas - A QUnit Addon For Testing Canvas Rendering
================================
This addon for QUnit adds a pixelEqual method that allows you to assert
individual pixel values in a given canvas.
Usage:
pixelEqual(canvas, x, y, r, g, b, a, message)
Where:
* canvas: Reference to a canvas element
* x, y: Coordinates of the pixel to test
* r, g, b, a: The color and opacity value of the pixel that you except
* message: Optional message, same as for other assertions
-76
Ver Arquivo
@@ -1,76 +0,0 @@
test("Canvas pixels", function () {
var canvas = document.getElementById('qunit-canvas'), context;
try {
context = canvas.getContext('2d');
} catch(e) {
// propably no canvas support, just exit
return;
}
context.fillStyle = 'rgba(0, 0, 0, 0)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 0, 0, 0, 0, 0, 0);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(255, 0, 0, 0)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 0, 0, 0, 0, 0, 0);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(0, 255, 0, 0)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 0, 0, 0, 0, 0, 0);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(0, 0, 255, 0)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 0, 0, 0, 0, 0, 0);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(0, 0, 0, 0.5)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 0, 0, 0, 0, 0, 127);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(255, 0, 0, 0.5)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 0, 0, 255, 0, 0, 127);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(0, 255, 0, 0.5)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 0, 0, 0, 255, 0, 127);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(0, 0, 255, 0.5)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 0, 0, 0, 0, 255, 127);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(0, 0, 0, 0.5)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 2, 2, 0, 0, 0, 127);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(255, 0, 0, 0.5)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 2, 2, 255, 0, 0, 127);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(0, 255, 0, 0.5)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 2, 2, 0, 255, 0, 127);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(0, 0, 255, 0.5)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 2, 2, 0, 0, 255, 127);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(0, 0, 0, 1)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 4, 4, 0, 0, 0, 255);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(255, 0, 0, 1)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 4, 4, 255, 0, 0, 255);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(0, 255, 0, 1)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 4, 4, 0, 255, 0, 255);
context.clearRect(0,0,5,5);
context.fillStyle = 'rgba(0, 0, 255, 1)';
context.fillRect(0, 0, 5, 5);
QUnit.pixelEqual(canvas, 4, 4, 0, 0, 255, 255);
context.clearRect(0,0,5,5);
});
-19
Ver Arquivo
@@ -1,19 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>QUnit Test Suite - Canvas Addon</title>
<link rel="stylesheet" href="../../qunit/qunit.css" type="text/css" media="screen">
<script type="text/javascript" src="../../qunit/qunit.js"></script>
<script type="text/javascript" src="qunit-canvas.js"></script>
<script type="text/javascript" src="canvas-test.js"></script>
</head>
<body>
<h1 id="qunit-header">QUnit Test Suite - Canvas Addon</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<canvas id="qunit-canvas" width="5" height="5"></canvas>
</body>
</html>
@@ -1,6 +0,0 @@
QUnit.extend( QUnit, {
pixelEqual: function(canvas, x, y, r, g, b, a, message) {
var actual = Array.prototype.slice.apply(canvas.getContext('2d').getImageData(x, y, 1, 1).data), expected = [r, g, b, a];
QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
}
});
-17
Ver Arquivo
@@ -1,17 +0,0 @@
Close-Enough - A QUnit Addon For Number Approximations
================================
This addon for QUnit adds close and notClose assertion methods, to test that
numbers are close enough (or different enough) from an expected number, with
a specified accuracy.
Usage:
close(actual, expected, maxDifference, message)
notClose(actual, expected, minDifference, message)
Where:
* maxDifference: the maximum inclusive difference allowed between the actual and expected numbers
* minDifference: the minimum exclusive difference allowed between the actual and expected numbers
* actual, expected, message: The usual
@@ -1,37 +0,0 @@
test("Close Numbers", function () {
QUnit.close(7, 7, 0);
QUnit.close(7, 7.1, 0.1);
QUnit.close(7, 7.1, 0.2);
QUnit.close(3.141, Math.PI, 0.001);
QUnit.close(3.1, Math.PI, 0.1);
var halfPi = Math.PI / 2;
QUnit.close(halfPi, 1.57, 0.001);
var sqrt2 = Math.sqrt(2);
QUnit.close(sqrt2, 1.4142, 0.0001);
QUnit.close(Infinity, Infinity, 1);
});
test("Distant Numbers", function () {
QUnit.notClose(6, 7, 0);
QUnit.notClose(7, 7.2, 0.1);
QUnit.notClose(7, 7.2, 0.19999999999);
QUnit.notClose(3.141, Math.PI, 0.0001);
QUnit.notClose(3.1, Math.PI, 0.001);
var halfPi = Math.PI / 2;
QUnit.notClose(halfPi, 1.57, 0.0001);
var sqrt2 = Math.sqrt(2);
QUnit.notClose(sqrt2, 1.4142, 0.00001);
QUnit.notClose(Infinity, -Infinity, 5);
});
@@ -1,18 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>QUnit Test Suite - Close Enough Addon</title>
<link rel="stylesheet" href="../../qunit/qunit.css" type="text/css" media="screen">
<script type="text/javascript" src="../../qunit/qunit.js"></script>
<script type="text/javascript" src="qunit-close-enough.js"></script>
<script type="text/javascript" src="close-enough-test.js"></script>
</head>
<body>
<h1 id="qunit-header">QUnit Test Suite - Close Enough</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
</body>
</html>
@@ -1,32 +0,0 @@
QUnit.extend( QUnit, {
/**
* Checks that the first two arguments are equal, or are numbers close enough to be considered equal
* based on a specified maximum allowable difference.
*
* @example close(3.141, Math.PI, 0.001);
*
* @param Number actual
* @param Number expected
* @param Number maxDifference (the maximum inclusive difference allowed between the actual and expected numbers)
* @param String message (optional)
*/
close: function(actual, expected, maxDifference, message) {
var passes = (actual === expected) || Math.abs(actual - expected) <= maxDifference;
QUnit.push(passes, actual, expected, message);
},
/**
* Checks that the first two arguments are numbers with differences greater than the specified
* minimum difference.
*
* @example notClose(3.1, Math.PI, 0.001);
*
* @param Number actual
* @param Number expected
* @param Number minDifference (the minimum exclusive difference allowed between the actual and expected numbers)
* @param String message (optional)
*/
notClose: function(actual, expected, minDifference, message) {
QUnit.push(Math.abs(actual - expected) > minDifference, actual, expected, message);
}
});
-7
Ver Arquivo
@@ -1,7 +0,0 @@
Composite - A QUnit Addon For Running Multiple Test Files
================================
Composite is a QUnit addon that, when handed an array of files, will
open each of those files inside of an iframe, run the tests and
display the results as a single suite of QUnit tests.
@@ -1,33 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>QUnit SubsuiteRunner Test Suite</title>
<link rel="stylesheet" href="../../qunit/qunit.css" type="text/css" media="screen">
<link rel="stylesheet" href="qunit-composite.css">
<script src="../../qunit/qunit.js"></script>
<script src="qunit-composite.js"></script>
<script>
QUnit.testSuites([
"../../test/index.html",
"../canvas/canvas.html",
"../close-enough/close-enough.html",
"../step/step.html",
"composite-test.html"
]);
</script>
</head>
<body>
<h1 id="qunit-header">QUnit SubsuiteRunner Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">
</div>
</body>
</html>
@@ -1,20 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>QUnit Core Test Suite</title>
<link rel="stylesheet" href="../../qunit/qunit.css" type="text/css" media="screen">
<script src="../../qunit/qunit.js"></script>
<script src="qunit-composite.js"></script>
<script src="composite-test.js"></script>
</head>
<body>
<h1 id="qunit-header">QUnit Core Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup</div>
</body>
</html>
@@ -1,159 +0,0 @@
module( "testSuites tests", (function(){
var asyncTest = QUnit.asyncTest,
runSuite = QUnit.runSuite;
return {
setup: function(){
//proxy asyncTest and runSuite
QUnit.asyncTest = window.asyncTest = function( name, callback ){
ok( true, "asyncTestCalled for each suite" );
callback(); //don't acutally create tests, just call callback
};
QUnit.runSuite = window.runSuite = function(){
ok( true, "runSuite called for each suite" );
};
//ensure that subsuite's done doesn't run
this.oldDone = QUnit.done;
},
teardown: function(){
//restore
QUnit.asyncTest = window.asyncTest = asyncTest;
QUnit.runSuite = window.runSuite = runSuite;
QUnit.done = this.oldDone;
}
};
})());
test( "proper number of asyncTest and runSuite calls", function(){
expect( 6 );
QUnit.testSuites( ["one.html", "two.html", "three.html"] );
});
test( "done callback changed", function(){
QUnit.testSuites( ["dummy.html"] );
notEqual( this.oldDone, QUnit.done, "done callback should be set" );
});
module( "testStart tests", (function(){
var id = QUnit.id;
return {
setup: function(){
//proxy id
var fakeElem = this.fakeElem = document.createElement( "div" );
QUnit.id = function(){
return fakeElem;
}
},
teardown: function(){
QUnit.id = id;
}
};
})());
test( "running message printed", function(){
var hello = "hello world",
expected = "Running " + hello + "...<br>&nbsp;";
QUnit.testStart( {name: hello} );
equal( this.fakeElem.innerHTML, expected, "innerHTML was set correctly by testStart" );
});
module( "testDone tests", (function(){
var id = QUnit.id;
return {
setup: function(){
//proxy id
var fakeElem = this.fakeElem = document.createElement( "div" );
fakeElem.appendChild( document.createElement( "ol" ) );
fakeElem.appendChild( document.createElement( "ol" ) );
QUnit.id = function(){
return fakeElem;
}
},
teardown: function(){
QUnit.id = id;
}
};
})());
test( "test expansions are hidden", function(){
QUnit.testDone();
equal( this.fakeElem.children[0].style.display, "none", "first ol display is none" );
equal( this.fakeElem.children[1].style.display, "none", "second ol display is none" );
});
test( "non-ol elements aren't hidden", function(){
this.fakeElem.appendChild( document.createElement( "span" ) );
QUnit.testDone();
notEqual( this.fakeElem.children[2].style.display, "none", "first ol display is none" );
});
module( "runSuite tests", (function(){
var getElementsByTagName = document.getElementsByTagName,
createElement = document.createElement,
runSuite = QUnit.runSuite;
return {
setup: function(){
//proxy getElementsByTagName and createElement
var setAttributeCall = this.setAttributeCall = {},
appendChildCall = this.appendChildCall = {called: 0},
iframeLoad = this.iframeLoad = {},
iframeQUnitObject = this.iframeQUnitObject = {},
fakeElement = {
appendChild: function(){appendChildCall.called++},
setAttribute: function(){setAttributeCall.args = arguments},
addEventListener: function( type, callback ){iframeLoad.callback = callback;},
contentWindow: {QUnit: iframeQUnitObject},
className: "",
};
document.getElementsByTagName = function(){
return [fakeElement];
};
document.createElement = function(){
return fakeElement;
}
},
teardown: function(){
document.getElementsByTagName = getElementsByTagName;
document.createElement = createElement;
//must restore even though we didn't proxy; the runner overwrites upon first call
QUnit.runSuite = runSuite;
}
};
})());
test( "runSuite different after first run", function(){
var before = QUnit.runSuite,
after;
QUnit.runSuite();
after = QUnit.runSuite;
notEqual( before, after, "runSuite changed after initial run" );
});
test( "iframe only created once", function(){
QUnit.runSuite();
equal( this.appendChildCall.called, 1, "append child called once" );
QUnit.runSuite();
equal( this.appendChildCall.called, 1, "append child only ever called once" );
});
test( "iframe's QUnit object is modified when iframe source loads", function(){
var before = this.iframeQUnitObject,
after;
QUnit.runSuite();
this.iframeLoad.callback();
notEqual( before, after, "iframe's qunit object is modified upon load");
});
test( "iframe src set to suite passed", function(){
var pages = ["testing.html", "subsuiteRunner.html"];
QUnit.runSuite( pages[0] );
equal( this.setAttributeCall.args[0], "src", "src attribute set" );
equal( this.setAttributeCall.args[1], pages[0], "src attribute set" );
QUnit.runSuite( pages[1] );
equal( this.setAttributeCall.args[1], pages[1], "src attribute set" );
});
@@ -1,19 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>QUnit Core Test Suite</title>
<link rel="stylesheet" href="../../qunit/qunit.css" type="text/css" media="screen">
<script src="../../qunit/qunit.js"></script>
<script src="../../test/test.js"></script>
</head>
<body>
<h1 id="qunit-header">QUnit Core Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup</div>
</body>
</html>
@@ -1,19 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>QUnit Same Test Suite</title>
<link rel="stylesheet" href="../../qunit/qunit.css" type="text/css" media="screen">
<script src="../../qunit/qunit.js"></script>
<script src="../../test/same.js"></script>
</head>
<body>
<h1 id="qunit-header">QUnit Same Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup</div>
</body>
</html>
-35
Ver Arquivo
@@ -1,35 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Composite</title>
</head>
<body>
<h1>Composite</h1>
<h3>A QUnit Addon For Running Multiple Test Files</h3>
<p>Composite is a QUnit addon that, when handed an array of
files, will open each of those files inside of an iframe, run
the tests and display the results as a single suite of QUnit
tests.</p>
<h4>Using Composite</h4>
<p>To use Composite, setup a standard QUnit html page as you
would with other QUnit tests. Remember to include composite.js
and composite.css. Then, inside of either an external js file,
or a script block call the only new method that Composite
exposes, QUnit.testSuites().</p><p>QUnit.testSuites() is
passed an array of test files to run as follows:</p>
<pre>
QUnit.testSuites([
"test-file-1.html",
"test-file-2.html",
"test-file-3.html"
]);
</pre>
<h4>Tests</h4>
<p>Composite has tests of it's own.</p>
<p>
<a href="composite-test.html">Composite Test</a>: A suite which tests the implementation of composite.<br>
<a href="composite-demo-test.html">Composite Demo</a>: A suite which demoes how Compisite is bootstrapped and run.
</p>
</body>
</html>
@@ -1,13 +0,0 @@
iframe.qunit-subsuite{
position: fixed;
bottom: 0;
left: 0;
margin: 0;
padding: 0;
border-width: 1px 0 0;
height: 45%;
width: 100%;
background: #fff;
}
@@ -1,82 +0,0 @@
(function( QUnit ) {
var subsuiteFrame;
QUnit.extend( QUnit, {
testSuites: function( suites ) {
for ( var i = 0; i < suites.length; i++ ) {
(function( suite ) {
asyncTest( suite, function() {
QUnit.runSuite( suite );
});
}( suites[i] ) );
}
QUnit.done = function() {
subsuiteFrame.style.display = "none";
};
},
testStart: function( data ) {
// update the test status to show which test suite is running
QUnit.id( "qunit-testresult" ).innerHTML = "Running " + data.name + "...<br>&nbsp;";
},
testDone: function() {
var current = QUnit.id( this.config.current.id ),
children = current.children;
// undo the auto-expansion of failed tests
for ( var i = 0; i < children.length; i++ ) {
if ( children[i].nodeName === "OL" ) {
children[i].style.display = "none";
}
}
},
runSuite: function( suite ) {
var body = document.getElementsByTagName( "body" )[0],
iframe = subsuiteFrame = document.createElement( "iframe" ),
iframeWin;
iframe.className = "qunit-subsuite";
body.appendChild( iframe );
function onIframeLoad() {
var module, test,
count = 0;
QUnit.extend( iframeWin.QUnit, {
moduleStart: function( data ) {
// capture module name for messages
module = data.name;
},
testStart: function( data ) {
// capture test name for messages
test = data.name;
},
log: function( data ) {
// pass all test details through to the main page
var message = module + ": " + test + ": " + data.message;
expect( ++count );
QUnit.push( data.result, data.actual, data.expected, message );
},
done: function() {
// start the wrapper test from the main page
start();
}
});
}
QUnit.addEvent( iframe, "load", onIframeLoad );
iframeWin = iframe.contentWindow;
iframe.setAttribute( "src", suite );
this.runSuite = function( suite ) {
iframe.setAttribute( "src", suite );
};
}
});
}( QUnit ) );
-18
Ver Arquivo
@@ -1,18 +0,0 @@
QUnit.step() - A QUnit Addon For Testing execution in order
============================================================
This addon for QUnit adds a step method that allows you to assert
the proper sequence in which the code should execute.
Example:
test("example test", function () {
function x() {
QUnit.step(2, "function y should be called first");
}
function y() {
QUnit.step(1);
}
y();
x();
});
-25
Ver Arquivo
@@ -1,25 +0,0 @@
QUnit.extend( QUnit, {
/**
* Check the sequence/order
*
* @example step(1); setTimeout(function () { step(3); }, 100); step(2);
* @param Number expected The excepted step within the test()
* @param String message (optional)
*/
step: function (expected, message) {
this.config.current.step++; // increment internal step counter.
if (typeof message == "undefined") {
message = "step " + expected;
}
var actual = this.config.current.step;
QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
}
});
/**
* Reset the step counter for every test()
*/
QUnit.testStart(function () {
this.config.current.step = 0;
});
-13
Ver Arquivo
@@ -1,13 +0,0 @@
module('Step Addon');
test("step", 3, function () {
QUnit.step(1, "step starts at 1");
setTimeout(function () {
start();
QUnit.step(3);
}, 100);
QUnit.step(2, "before the setTimeout callback is run");
stop();
});
test("step counter", 1, function () {
QUnit.step(1, "each test has its own step counter");
});
-19
Ver Arquivo
@@ -1,19 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>QUnit Test Suite - Step Addon</title>
<link rel="stylesheet" href="../../qunit/qunit.css" type="text/css" media="screen">
<script type="text/javascript" src="../../qunit/qunit.js"></script>
<script type="text/javascript" src="qunit-step.js"></script>
<script type="text/javascript" src="step-test.js"></script>
</head>
<body>
<h1 id="qunit-header">QUnit Test Suite - Step Addon</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<canvas id="qunit-canvas" width="5" height="5"></canvas>
</body>
</html>
-27
Ver Arquivo
@@ -1,27 +0,0 @@
{
"name": "qunit",
"author": "The jQuery Project",
"contributors": [
{
"name": "John Resig",
"email": "jeresig@gmail.com",
"url": "http://ejohn.org/"
},
{
"name": "Jörn Zaefferer",
"email": "joern.zaefferer@googlemail.com",
"url": "http://bassistance.de/"
}],
"url": "http://docs.jquery.com/QUnit",
"repositories" : [{
"type": "git",
"url": "https://github.com/jquery/qunit.git"
}],
"license": {
"name": "MIT",
"url": "http://www.opensource.org/licenses/mit-license.php"
},
"description": "An easy-to-use JavaScript Unit Testing framework.",
"keywords": [ "testing", "unit", "jquery" ],
"main": "qunit/qunit.js"
}
-226
Ver Arquivo
@@ -1,226 +0,0 @@
/**
* QUnit - A JavaScript Unit Testing Framework
*
* http://docs.jquery.com/QUnit
*
* Copyright (c) 2011 John Resig, Jörn Zaefferer
* Dual licensed under the MIT (MIT-LICENSE.txt)
* or GPL (GPL-LICENSE.txt) licenses.
*/
/** Font Family and Sizes */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
}
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-tests { font-size: smaller; }
/** Resets */
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
margin: 0;
padding: 0;
}
/** Header */
#qunit-header {
padding: 0.5em 0 0.5em 1em;
color: #8699a4;
background-color: #0d3349;
font-size: 1.5em;
line-height: 1em;
font-weight: normal;
border-radius: 15px 15px 0 0;
-moz-border-radius: 15px 15px 0 0;
-webkit-border-top-right-radius: 15px;
-webkit-border-top-left-radius: 15px;
}
#qunit-header a {
text-decoration: none;
color: #c2ccd1;
}
#qunit-header a:hover,
#qunit-header a:focus {
color: #fff;
}
#qunit-banner {
height: 5px;
}
#qunit-testrunner-toolbar {
padding: 0.5em 0 0.5em 2em;
color: #5E740B;
background-color: #eee;
}
#qunit-userAgent {
padding: 0.5em 0 0.5em 2.5em;
background-color: #2b81af;
color: #fff;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}
/** Tests: Pass/Fail */
#qunit-tests {
list-style-position: inside;
}
#qunit-tests li {
padding: 0.4em 0.5em 0.4em 2.5em;
border-bottom: 1px solid #fff;
list-style-position: inside;
}
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
display: none;
}
#qunit-tests li strong {
cursor: pointer;
}
#qunit-tests li a {
padding: 0.5em;
color: #c2ccd1;
text-decoration: none;
}
#qunit-tests li a:hover,
#qunit-tests li a:focus {
color: #000;
}
#qunit-tests ol {
margin-top: 0.5em;
padding: 0.5em;
background-color: #fff;
border-radius: 15px;
-moz-border-radius: 15px;
-webkit-border-radius: 15px;
box-shadow: inset 0px 2px 13px #999;
-moz-box-shadow: inset 0px 2px 13px #999;
-webkit-box-shadow: inset 0px 2px 13px #999;
}
#qunit-tests table {
border-collapse: collapse;
margin-top: .2em;
}
#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 .5em 0 0;
}
#qunit-tests td {
vertical-align: top;
}
#qunit-tests pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
#qunit-tests del {
background-color: #e0f2be;
color: #374e0c;
text-decoration: none;
}
#qunit-tests ins {
background-color: #ffcaca;
color: #500;
text-decoration: none;
}
/*** Test Counts */
#qunit-tests b.counts { color: black; }
#qunit-tests b.passed { color: #5E740B; }
#qunit-tests b.failed { color: #710909; }
#qunit-tests li li {
margin: 0.5em;
padding: 0.4em 0.5em 0.4em 0.5em;
background-color: #fff;
border-bottom: none;
list-style-position: inside;
}
/*** Passing Styles */
#qunit-tests li li.pass {
color: #5E740B;
background-color: #fff;
border-left: 26px solid #C6E746;
}
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
#qunit-tests .pass .test-name { color: #366097; }
#qunit-tests .pass .test-actual,
#qunit-tests .pass .test-expected { color: #999999; }
#qunit-banner.qunit-pass { background-color: #C6E746; }
/*** Failing Styles */
#qunit-tests li li.fail {
color: #710909;
background-color: #fff;
border-left: 26px solid #EE5757;
white-space: pre;
}
#qunit-tests > li:last-child {
border-radius: 0 0 15px 15px;
-moz-border-radius: 0 0 15px 15px;
-webkit-border-bottom-right-radius: 15px;
-webkit-border-bottom-left-radius: 15px;
}
#qunit-tests .fail { color: #000000; background-color: #EE5757; }
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name { color: #000000; }
#qunit-tests .fail .test-actual { color: #EE5757; }
#qunit-tests .fail .test-expected { color: green; }
#qunit-banner.qunit-fail { background-color: #EE5757; }
/** Result */
#qunit-testresult {
padding: 0.5em 0.5em 0.5em 2.5em;
color: #2b81af;
background-color: #D2E0E6;
border-bottom: 1px solid white;
}
/** Fixture */
#qunit-fixture {
position: absolute;
top: -10000px;
left: -10000px;
}
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-24
Ver Arquivo
@@ -1,24 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>QUnit Test Suite</title>
<link rel="stylesheet" href="../qunit/qunit.css" type="text/css" media="screen">
<script type="text/javascript" src="../qunit/qunit.js"></script>
<script type="text/javascript" src="test.js"></script>
<script type="text/javascript" src="same.js"></script>
<script>
var logs = ["begin", "testStart", "testDone", "log", "moduleStart", "moduleDone", "done"];
for (var i = 0; i < logs.length; i++) {
(function() {
var log = logs[i];
QUnit[log] = function() {
console.log(log, arguments);
};
})();
}
</script>
</head>
<body>
<div id="qunit-fixture">test markup</div>
</body>
</html>
-19
Ver Arquivo
@@ -1,19 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>QUnit Test Suite</title>
<link rel="stylesheet" href="../qunit/qunit.css" type="text/css" media="screen">
<script type="text/javascript" src="../qunit/qunit.js"></script>
<script type="text/javascript" src="test.js"></script>
<script type="text/javascript" src="same.js"></script>
</head>
<body>
<h1 id="qunit-header">QUnit Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup</div>
</body>
</html>
-17
Ver Arquivo
@@ -1,17 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>QUnit Test Suite</title>
<link rel="stylesheet" href="../qunit/qunit.css" type="text/css" media="screen">
<script type="text/javascript" src="../qunit/qunit.js"></script>
<script type="text/javascript" src="logs.js"></script>
</head>
<body>
<h1 id="qunit-header">QUnit Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup</div>
</body>
</html>
-153
Ver Arquivo
@@ -1,153 +0,0 @@
// TODO disable reordering for this suite!
var begin = 0,
moduleStart = 0,
moduleDone = 0,
testStart = 0,
testDone = 0,
log = 0,
moduleContext,
moduleDoneContext,
testContext,
testDoneContext,
logContext;
QUnit.begin(function() {
begin++;
});
QUnit.done(function() {
});
QUnit.moduleStart(function(context) {
moduleStart++;
moduleContext = context;
});
QUnit.moduleDone(function(context) {
moduleDone++;
moduleDoneContext = context;
});
QUnit.testStart(function(context) {
testStart++;
testContext = context;
});
QUnit.testDone(function(context) {
testDone++;
testDoneContext = context;
});
QUnit.log(function(context) {
log++;
logContext = context;
});
var logs = ["begin", "testStart", "testDone", "log", "moduleStart", "moduleDone", "done"];
for (var i = 0; i < logs.length; i++) {
(function() {
var log = logs[i];
QUnit[log](function() {
console.log(log, arguments);
});
})();
}
module("logs1");
test("test1", 13, function() {
equal(begin, 1);
equal(moduleStart, 1);
equal(testStart, 1);
equal(testDone, 0);
equal(moduleDone, 0);
deepEqual(logContext, {
result: true,
message: undefined,
actual: 0,
expected: 0
});
equal("foo", "foo", "msg");
deepEqual(logContext, {
result: true,
message: "msg",
actual: "foo",
expected: "foo"
});
strictEqual(testDoneContext, undefined);
deepEqual(testContext, {
module: "logs1",
name: "test1"
});
strictEqual(moduleDoneContext, undefined);
deepEqual(moduleContext, {
name: "logs1"
});
equal(log, 12);
});
test("test2", 10, function() {
equal(begin, 1);
equal(moduleStart, 1);
equal(testStart, 2);
equal(testDone, 1);
equal(moduleDone, 0);
deepEqual(testDoneContext, {
module: "logs1",
name: "test1",
failed: 0,
passed: 13,
total: 13
});
deepEqual(testContext, {
module: "logs1",
name: "test2"
});
strictEqual(moduleDoneContext, undefined);
deepEqual(moduleContext, {
name: "logs1"
});
equal(log, 22);
});
module("logs2");
test("test1", 9, function() {
equal(begin, 1);
equal(moduleStart, 2);
equal(testStart, 3);
equal(testDone, 2);
equal(moduleDone, 1);
deepEqual(testContext, {
module: "logs2",
name: "test1"
});
deepEqual(moduleDoneContext, {
name: "logs1",
failed: 0,
passed: 23,
total: 23
});
deepEqual(moduleContext, {
name: "logs2"
});
equal(log, 31);
});
test("test2", 8, function() {
equal(begin, 1);
equal(moduleStart, 2);
equal(testStart, 4);
equal(testDone, 3);
equal(moduleDone, 1);
deepEqual(testContext, {
module: "logs2",
name: "test2"
});
deepEqual(moduleContext, {
name: "logs2"
});
equal(log, 39);
});
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-471
Ver Arquivo
@@ -1,471 +0,0 @@
test("module without setup/teardown (default)", function() {
expect(1);
ok(true);
});
test("expect in test", 3, function() {
ok(true);
ok(true);
ok(true);
});
test("expect in test", 1, function() {
ok(true);
});
module("setup test", {
setup: function() {
ok(true);
}
});
test("module with setup", function() {
expect(2);
ok(true);
});
test("module with setup, expect in test call", 2, function() {
ok(true);
});
var state;
module("setup/teardown test", {
setup: function() {
state = true;
ok(true);
},
teardown: function() {
ok(true);
}
});
test("module with setup/teardown", function() {
expect(3);
ok(true);
});
module("setup/teardown test 2");
test("module without setup/teardown", function() {
expect(1);
ok(true);
});
if (typeof setTimeout !== 'undefined') {
state = 'fail';
module("teardown and stop", {
teardown: function() {
equal(state, "done", "Test teardown.");
}
});
test("teardown must be called after test ended", function() {
expect(1);
stop();
setTimeout(function() {
state = "done";
start();
}, 13);
});
test("parameter passed to stop increments semaphore n times", function() {
expect(1);
stop(3);
setTimeout(function() {
state = "not enough starts";
start(), start();
}, 13);
setTimeout(function() {
state = "done";
start();
}, 15);
});
test("parameter passed to start decrements semaphore n times", function() {
expect(1);
stop(), stop(), stop();
setTimeout(function() {
state = "done";
start(3);
}, 18);
});
module("async setup test", {
setup: function() {
stop();
setTimeout(function(){
ok(true);
start();
}, 500);
}
});
asyncTest("module with async setup", function() {
expect(2);
ok(true);
start();
});
module("async teardown test", {
teardown: function() {
stop();
setTimeout(function(){
ok(true);
start();
}, 500);
}
});
asyncTest("module with async teardown", function() {
expect(2);
ok(true);
start();
});
module("asyncTest");
asyncTest("asyncTest", function() {
expect(2);
ok(true);
setTimeout(function() {
state = "done";
ok(true);
start();
}, 13);
});
asyncTest("asyncTest", 2, function() {
ok(true);
setTimeout(function() {
state = "done";
ok(true);
start();
}, 13);
});
test("sync", 2, function() {
stop();
setTimeout(function() {
ok(true);
start();
}, 13);
stop();
setTimeout(function() {
ok(true);
start();
}, 125);
});
test("test synchronous calls to stop", 2, function() {
stop();
setTimeout(function(){
ok(true, 'first');
start();
stop();
setTimeout(function(){
ok(true, 'second');
start();
}, 150);
}, 150);
});
}
module("save scope", {
setup: function() {
this.foo = "bar";
},
teardown: function() {
deepEqual(this.foo, "bar");
}
});
test("scope check", function() {
expect(2);
deepEqual(this.foo, "bar");
});
module("simple testEnvironment setup", {
foo: "bar",
bugid: "#5311" // example of meta-data
});
test("scope check", function() {
deepEqual(this.foo, "bar");
});
test("modify testEnvironment",function() {
this.foo="hamster";
});
test("testEnvironment reset for next test",function() {
deepEqual(this.foo, "bar");
});
module("testEnvironment with object", {
options:{
recipe:"soup",
ingredients:["hamster","onions"]
}
});
test("scope check", function() {
deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions"]}) ;
});
test("modify testEnvironment",function() {
// since we do a shallow copy, the testEnvironment can be modified
this.options.ingredients.push("carrots");
});
test("testEnvironment reset for next test",function() {
deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions","carrots"]}, "Is this a bug or a feature? Could do a deep copy") ;
});
module("testEnvironment tests");
function makeurl() {
var testEnv = QUnit.current_testEnvironment;
var url = testEnv.url || 'http://example.com/search';
var q = testEnv.q || 'a search test';
return url + '?q='+encodeURIComponent(q);
}
test("makeurl working",function() {
equal( QUnit.current_testEnvironment, this, 'The current testEnvironment is global');
equal( makeurl(), 'http://example.com/search?q=a%20search%20test', 'makeurl returns a default url if nothing specified in the testEnvironment');
});
module("testEnvironment with makeurl settings", {
url: 'http://google.com/',
q: 'another_search_test'
});
test("makeurl working with settings from testEnvironment", function() {
equal( makeurl(), 'http://google.com/?q=another_search_test', 'rather than passing arguments, we use test metadata to form the url');
});
test("each test can extend the module testEnvironment", {
q:'hamstersoup'
}, function() {
equal( makeurl(), 'http://google.com/?q=hamstersoup', 'url from module, q from test');
});
module("jsDump");
test("jsDump output", function() {
equals( QUnit.jsDump.parse([1, 2]), "[\n 1,\n 2\n]" );
equals( QUnit.jsDump.parse({top: 5, left: 0}), "{\n \"top\": 5,\n \"left\": 0\n}" );
if (typeof document !== 'undefined' && document.getElementById("qunit-header")) {
equals( QUnit.jsDump.parse(document.getElementById("qunit-header")), "<h1 id=\"qunit-header\"></h1>" );
equals( QUnit.jsDump.parse(document.getElementsByTagName("h1")), "[\n <h1 id=\"qunit-header\"></h1>\n]" );
}
});
module("assertions");
test("raises",function() {
function CustomError( message ) {
this.message = message;
}
CustomError.prototype.toString = function() {
return this.message;
};
raises(
function() {
throw "error"
}
);
raises(
function() {
throw "error"
},
'raises with just a message, no expected'
);
raises(
function() {
throw new CustomError();
},
CustomError,
'raised error is an instance of CustomError'
);
raises(
function() {
throw new CustomError("some error description");
},
/description/,
"raised error message contains 'description'"
);
raises(
function() {
throw new CustomError("some error description");
},
function( err ) {
if ( (err instanceof CustomError) && /description/.test(err) ) {
return true;
}
},
"custom validation function"
);
});
if (typeof document !== "undefined") {
module("fixture");
test("setup", function() {
document.getElementById("qunit-fixture").innerHTML = "foobar";
});
test("basics", function() {
equal( document.getElementById("qunit-fixture").innerHTML, "test markup", "automatically reset" );
});
}
module("custom assertions");
(function() {
function mod2(value, expected, message) {
var actual = value % 2;
QUnit.push(actual == expected, actual, expected, message);
}
test("mod2", function() {
mod2(2, 0, "2 % 2 == 0");
mod2(3, 1, "3 % 2 == 1");
})
})();
module("recursions");
function Wrap(x) {
this.wrap = x;
if (x == undefined) this.first = true;
}
function chainwrap(depth, first, prev) {
depth = depth || 0;
var last = prev || new Wrap();
first = first || last;
if (depth == 1) {
first.wrap = last;
}
if (depth > 1) {
last = chainwrap(depth-1, first, new Wrap(last));
}
return last;
}
test("check jsDump recursion", function() {
expect(4);
var noref = chainwrap(0);
var nodump = QUnit.jsDump.parse(noref);
equal(nodump, '{\n "wrap": undefined,\n "first": true\n}');
var selfref = chainwrap(1);
var selfdump = QUnit.jsDump.parse(selfref);
equal(selfdump, '{\n "wrap": recursion(-1),\n "first": true\n}');
var parentref = chainwrap(2);
var parentdump = QUnit.jsDump.parse(parentref);
equal(parentdump, '{\n "wrap": {\n "wrap": recursion(-2),\n "first": true\n }\n}');
var circref = chainwrap(10);
var circdump = QUnit.jsDump.parse(circref);
ok(new RegExp("recursion\\(-10\\)").test(circdump), "(" +circdump + ") should show -10 recursion level");
});
test("check (deep-)equal recursion", function() {
var noRecursion = chainwrap(0);
equal(noRecursion, noRecursion, "I should be equal to me.");
deepEqual(noRecursion, noRecursion, "... and so in depth.");
var selfref = chainwrap(1);
equal(selfref, selfref, "Even so if I nest myself.");
deepEqual(selfref, selfref, "... into the depth.");
var circref = chainwrap(10);
equal(circref, circref, "Or hide that through some levels of indirection.");
deepEqual(circref, circref, "... and checked on all levels!");
});
test('Circular reference with arrays', function() {
// pure array self-ref
var arr = [];
arr.push(arr);
var arrdump = QUnit.jsDump.parse(arr);
equal(arrdump, '[\n recursion(-1)\n]');
equal(arr, arr[0], 'no endless stack when trying to dump arrays with circular ref');
// mix obj-arr circular ref
var obj = {};
var childarr = [obj];
obj.childarr = childarr;
var objdump = QUnit.jsDump.parse(obj);
var childarrdump = QUnit.jsDump.parse(childarr);
equal(objdump, '{\n "childarr": [\n recursion(-2)\n ]\n}');
equal(childarrdump, '[\n {\n "childarr": recursion(-2)\n }\n]');
equal(obj.childarr, childarr, 'no endless stack when trying to dump array/object mix with circular ref');
equal(childarr[0], obj, 'no endless stack when trying to dump array/object mix with circular ref');
});
test('Circular reference - test reported by soniciq in #105', function() {
var MyObject = function() {};
MyObject.prototype.parent = function(obj) {
if (obj === undefined) { return this._parent; }
this._parent = obj;
};
MyObject.prototype.children = function(obj) {
if (obj === undefined) { return this._children; }
this._children = obj;
};
var a = new MyObject(),
b = new MyObject();
var barr = [b];
a.children(barr);
b.parent(a);
equal(a.children(), barr);
deepEqual(a.children(), [b]);
});
(function() {
var reset = QUnit.reset;
function afterTest() {
ok( false, "reset should not modify test status" );
}
module("reset");
test("reset runs assertions", function() {
QUnit.reset = function() {
afterTest();
reset.apply( this, arguments );
};
});
test("reset runs assertions2", function() {
QUnit.reset = reset;
});
})();
module("noglobals", {
teardown: function() {
delete window.badGlobalVariableIntroducedInTest;
}
});
test("let teardown clean up globals", function() {
// this test will always pass if run without ?noglobals=true
window.badGlobalVariableIntroducedInTest = true;
});
-56
Ver Arquivo
@@ -1,56 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>QUnit Test Suite</title>
<link rel="stylesheet" href="../design/video-js.css" type="text/css">
<!--[if lt IE 9]>
<script>
document.createElement("video"); // HTML5 Shiv. Must be in <head>.
</script>
<![endif]-->
<!--[if IE]>
<script src="https://getfirebug.com/firebug-lite.js" type="text/javascript" charset="utf-8"></script>
<![endif]-->
<script src="../src/core.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/lib.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/ecma.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/json.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/api.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/events.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/tracks.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/behaviors/behaviors.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/behaviors/seekBar.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/behaviors/volume.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/behaviors/texttrackdisplays.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/controls/bigPlay.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/controls/bar.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/controls/subtitlesBox.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/tech/html5.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/tech/flowplayer.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/autoload.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/log.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" href="qunit/qunit/qunit.css" type="text/css" media="screen">
<script type="text/javascript" src="qunit/qunit/qunit.js"></script>
<script type="text/javascript" src="test.js"></script>
</head>
<body>
<h1 id="qunit-header">QUnit Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup</div>
</body>
</html>
-154
Ver Arquivo
@@ -1,154 +0,0 @@
var tagCode = '<video id="vid1" class="video-js vjs-default-skin" preload="none" width="640" height="264" data-setup=\'{}\' poster="http://video-js.zencoder.com/oceans-clip.png">';
tagCode+= '<source src="http://video-js.zencoder.com/oceans-clip.mp4" type="video/mp4">';
tagCode+= '<source src="http://video-js.zencoder.com/oceans-clip.webm" type="video/webm">';
tagCode+= '<source src="http://video-js.zencoder.com/oceans-clip.ogv" type="video/ogg; codecs=\'theora, vorbis\'">';
tagCode+= '<track kind="subtitles" src="http://videojs.com/subtitles/demo-subtitles.srt" srclang="en-US" label="English"></track>';
tagCode+= '</video>';
function playerSetup(){
document.body.innerHTML += tagCode;
var vid = document.getElementById("vid1");
this.player = _V_(vid);
stop();
this.player.ready(_V_.proxy(this, function(){
start();
}));
}
function playerTeardown(){
document.body.removeChild(document.getElementById("vid1"));
ok(!document.getElementById("vid1"), "torndown");
}
module("video.js setup", {
setup: playerSetup,
teardown: playerTeardown
});
test("Player Set Up", function() {
ok(this.player);
});
/* Events
================================================================================ */
module("API Events", {
setup: playerSetup,
teardown: playerTeardown
});
// Play Event
test("play", function() {
this.player.addEvent("play", _V_.proxy(this, function(){
start();
ok(true);
}));
this.player.play();
});
// Playing Event
test("playing", function() {
this.player.addEvent("playing", _V_.proxy(this, function(){
start();
ok(true, "playing");
}));
this.player.play();
});
// Pause Event
test("pause", function() {
this.player.addEvent("pause", _V_.proxy(this, function(){
start();
ok(true);
}));
this.player.addEvent("playing", _V_.proxy(this, function(){
this.player.pause();
}));
this.player.play();
});
// Pause Event
test("timeupdate", function() {
this.player.addEvent("timeupdate", _V_.proxy(this, function(){
start();
ok(true);
}));
this.player.addEvent("playing", _V_.proxy(this, function(){
this.player.pause();
}));
this.player.play();
});
/* Methods
================================================================================ */
module("API Methods", {
setup: playerSetup,
teardown: playerTeardown
});
// Play Method
test("play()", function() {
this.player.addEvent("playing", _V_.proxy(this, function(){
start();
ok(true);
}));
this.player.play();
});
// Pause Method
test("pause()", function() {
this.player.addEvent("pause", _V_.proxy(this, function(){
start();
ok(true);
}));
this.player.addEvent("playing", _V_.proxy(this, function(){
this.player.pause();
}));
this.player.play();
});
test("currentTime()", function() {
// Need video loaded before we can call current time
this.player.addEvent("loadstart", _V_.proxy(this, function(){
start();
ok(true, "vid loading");
// Watch for timeudpate
this.player.addEvent("timeupdate", _V_.proxy(this, function(){
start();
equal(this.player.currentTime(), 0, "time is 0");
this.player.removeEvent("timeupdate", arguments.callee);
// Test again for later time
this.player.addEvent("timeupdate", _V_.proxy(this, function(){
start();
notEqual(this.player.currentTime(), 0, "time is not 0");
this.player.removeEvent("timeupdate", arguments.callee);
}));
// Stop and trigger time
stop();
this.player.currentTime(10);
}));
// Stop and trigger time
stop();
this.player.currentTime(0);
}));
stop();
this.player.load();
// Watch for timeudpate
this.player.addEvent("timeupdate", _V_.proxy(this, function(){
start();
notEqual(this.player.currentTime(), 0, "time is not 0");
this.player.removeEvent("timeupdate", arguments.callee);
}));
// Stop and trigger time
stop();
this.player.load();
});
+41
Ver Arquivo
@@ -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 ]
+31
Ver Arquivo
@@ -0,0 +1,31 @@
<!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 -->
</video>
</body>
</html>
Arquivo binário não exibido.
BIN
Ver Arquivo
Arquivo binário não exibido.
+65
Ver Arquivo
@@ -0,0 +1,65 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG font generated by IcoMoon.
<iconset grid="16"></iconset>
</metadata>
<defs>
<font id="VideoJS" horiz-adv-x="512" >
<font-face units-per-em="512" ascent="480" descent="-32" />
<missing-glyph horiz-adv-x="512" />
<glyph class="hidden" unicode="&#xf000;" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
<glyph unicode="&#xe002;" d="M 64,416L 224,416L 224,32L 64,32zM 288,416L 448,416L 448,32L 288,32z" />
<glyph unicode="&#xe003;" d="M 200.666,440.666 C 213.5,453.5 224,449.15 224,431 L 224,17 C 224-1.15 213.5-5.499 200.666,7.335 L 80,128 L 0,128 L 0,320 L 80,320 L 200.666,440.666 Z" />
<glyph unicode="&#xe004;" d="M 274.51,109.49c-6.143,0-12.284,2.343-16.971,7.029c-9.373,9.373-9.373,24.568,0,33.941
c 40.55,40.55, 40.55,106.529,0,147.078c-9.373,9.373-9.373,24.569,0,33.941c 9.373,9.372, 24.568,9.372, 33.941,0
c 59.265-59.265, 59.265-155.696,0-214.961C 286.794,111.833, 280.652,109.49, 274.51,109.49zM 200.666,440.666 C 213.5,453.5 224,449.15 224,431 L 224,17 C 224-1.15 213.5-5.499 200.666,7.335 L 80,128 L 0,128 L 0,320 L 80,320 L 200.666,440.666 Z" />
<glyph unicode="&#xe005;" d="M 359.765,64.235c-6.143,0-12.284,2.343-16.971,7.029c-9.372,9.372-9.372,24.568,0,33.941
c 65.503,65.503, 65.503,172.085,0,237.588c-9.372,9.373-9.372,24.569,0,33.941c 9.372,9.371, 24.569,9.372, 33.941,0
C 417.532,335.938, 440,281.696, 440,224c0-57.695-22.468-111.938-63.265-152.735C 372.049,66.578, 365.907,64.235, 359.765,64.235zM 274.51,109.49c-6.143,0-12.284,2.343-16.971,7.029c-9.373,9.373-9.373,24.568,0,33.941
c 40.55,40.55, 40.55,106.529,0,147.078c-9.373,9.373-9.373,24.569,0,33.941c 9.373,9.372, 24.568,9.372, 33.941,0
c 59.265-59.265, 59.265-155.696,0-214.961C 286.794,111.833, 280.652,109.49, 274.51,109.49zM 200.666,440.666 C 213.5,453.5 224,449.15 224,431 L 224,17 C 224-1.15 213.5-5.499 200.666,7.335 L 80,128 L 0,128 L 0,320 L 80,320 L 200.666,440.666 Z" />
<glyph unicode="&#xe006;" d="M 445.020,18.98c-6.143,0-12.284,2.343-16.971,7.029c-9.372,9.373-9.372,24.568,0,33.941
C 471.868,103.771, 496.001,162.030, 496.001,224c0,61.969-24.133,120.229-67.952,164.049c-9.372,9.373-9.372,24.569,0,33.941
c 9.372,9.372, 24.569,9.372, 33.941,0c 52.885-52.886, 82.011-123.2, 82.011-197.99c0-74.791-29.126-145.104-82.011-197.99
C 457.304,21.323, 451.162,18.98, 445.020,18.98zM 359.765,64.235c-6.143,0-12.284,2.343-16.971,7.029c-9.372,9.372-9.372,24.568,0,33.941
c 65.503,65.503, 65.503,172.085,0,237.588c-9.372,9.373-9.372,24.569,0,33.941c 9.372,9.371, 24.569,9.372, 33.941,0
C 417.532,335.938, 440,281.696, 440,224c0-57.695-22.468-111.938-63.265-152.735C 372.049,66.578, 365.907,64.235, 359.765,64.235zM 274.51,109.49c-6.143,0-12.284,2.343-16.971,7.029c-9.373,9.373-9.373,24.568,0,33.941
c 40.55,40.55, 40.55,106.529,0,147.078c-9.373,9.373-9.373,24.569,0,33.941c 9.373,9.372, 24.568,9.372, 33.941,0
c 59.265-59.265, 59.265-155.696,0-214.961C 286.794,111.833, 280.652,109.49, 274.51,109.49zM 200.666,440.666 C 213.5,453.5 224,449.15 224,431 L 224,17 C 224-1.15 213.5-5.499 200.666,7.335 L 80,128 L 0,128 L 0,320 L 80,320 L 200.666,440.666 Z" horiz-adv-x="544" />
<glyph unicode="&#xe007;" d="M 256,480L 96,224L 256-32L 416,224 z" />
<glyph unicode="&#xe008;" d="M 0,480 L 687.158,480 L 687.158-35.207 L 0-35.207 L 0,480 z M 622.731,224.638 C 621.878,314.664 618.46,353.922 597.131,381.656 C 593.291,387.629 586.038,391.042 580.065,395.304 C 559.158,410.669 460.593,416.211 346.247,416.211 C 231.896,416.211 128.642,410.669 108.162,395.304 C 101.762,391.042 94.504,387.629 90.242,381.656 C 69.331,353.922 66.349,314.664 65.069,224.638 C 66.349,134.607 69.331,95.353 90.242,67.62 C 94.504,61.22 101.762,58.233 108.162,53.967 C 128.642,38.18 231.896,33.060 346.247,32.207 C 460.593,33.060 559.158,38.18 580.065,53.967 C 586.038,58.233 593.291,61.22 597.131,67.62 C 618.46,95.353 621.878,134.607 622.731,224.638 z M 331.179,247.952 C 325.389,318.401 287.924,359.905 220.901,359.905 C 159.672,359.905 111.54,304.689 111.54,215.965 C 111.54,126.859 155.405,71.267 227.907,71.267 C 285.79,71.267 326.306,113.916 332.701,184.742 L 263.55,184.742 C 260.81,158.468 249.843,138.285 226.69,138.285 C 190.136,138.285 183.435,174.462 183.435,212.92 C 183.435,265.854 198.665,292.886 223.951,292.886 C 246.492,292.886 260.81,276.511 262.939,247.952 L 331.179,247.952 z M 570.013,247.952 C 564.228,318.401 526.758,359.905 459.74,359.905 C 398.507,359.905 350.379,304.689 350.379,215.965 C 350.379,126.859 394.244,71.267 466.746,71.267 C 524.625,71.267 565.14,113.916 571.536,184.742 L 502.384,184.742 C 499.649,158.468 488.682,138.285 465.529,138.285 C 428.971,138.285 422.27,174.462 422.27,212.92 C 422.27,265.854 437.504,292.886 462.785,292.886 C 485.327,292.886 499.649,276.511 501.778,247.952 L 570.013,247.952 z " horiz-adv-x="687.158" />
<glyph unicode="&#xe009;" d="M 64,416L 448,416L 448,32L 64,32z" />
<glyph unicode="&#xe00a;" d="M 192,416A64,64 12780 1 1 320,416A64,64 12780 1 1 192,416zM 327.765,359.765A64,64 12780 1 1 455.765,359.765A64,64 12780 1 1 327.765,359.765zM 416,224A32,32 12780 1 1 480,224A32,32 12780 1 1 416,224zM 359.765,88.235A32,32 12780 1 1 423.765,88.23500000000001A32,32 12780 1 1 359.765,88.23500000000001zM 224.001,32A32,32 12780 1 1 288.001,32A32,32 12780 1 1 224.001,32zM 88.236,88.235A32,32 12780 1 1 152.236,88.23500000000001A32,32 12780 1 1 88.236,88.23500000000001zM 72.236,359.765A48,48 12780 1 1 168.236,359.765A48,48 12780 1 1 72.236,359.765zM 28,224A36,36 12780 1 1 100,224A36,36 12780 1 1 28,224z" />
<glyph unicode="&#xe00b;" d="M 224,192 L 224-16 L 144,64 L 48-32 L 0,16 L 96,112 L 16,192 ZM 512,432 L 416,336 L 496,256 L 288,256 L 288,464 L 368,384 L 464,480 Z" />
<glyph unicode="&#xe00c;" d="M 256,448 C 397.385,448 512,354.875 512,240 C 512,125.124 397.385,32 256,32 C 242.422,32 229.095,32.867 216.088,34.522 C 161.099-20.467 95.463-30.328 32-31.776 L 32-18.318 C 66.268-1.529 96,29.052 96,64 C 96,68.877 95.621,73.665 94.918,78.348 C 37.020,116.48 0,174.725 0,240 C 0,354.875 114.615,448 256,448 Z" />
<glyph unicode="&#xe00d;" d="M 256,480C 114.615,480,0,365.385,0,224s 114.615-256, 256-256s 256,114.615, 256,256S 397.385,480, 256,480z M 256,352
c 70.692,0, 128-57.308, 128-128s-57.308-128-128-128s-128,57.308-128,128S 185.308,352, 256,352z M 408.735,71.265
C 367.938,30.468, 313.695,8, 256,8c-57.696,0-111.938,22.468-152.735,63.265C 62.468,112.062, 40,166.304, 40,224
c0,57.695, 22.468,111.938, 63.265,152.735l 33.941-33.941c0,0,0,0,0,0c-65.503-65.503-65.503-172.085,0-237.588
C 168.937,73.475, 211.125,56, 256,56c 44.874,0, 87.062,17.475, 118.794,49.206c 65.503,65.503, 65.503,172.084,0,237.588l 33.941,33.941
C 449.532,335.938, 472,281.695, 472,224C 472,166.304, 449.532,112.062, 408.735,71.265z" />
<glyph unicode="&#xe01e;" d="M 512,224c-0.639,33.431-7.892,66.758-21.288,97.231c-13.352,30.5-32.731,58.129-56.521,80.96
c-23.776,22.848-51.972,40.91-82.492,52.826C 321.197,466.979, 288.401,472.693, 256,472c-32.405-0.641-64.666-7.687-94.167-20.678
c-29.524-12.948-56.271-31.735-78.367-54.788c-22.112-23.041-39.58-50.354-51.093-79.899C 20.816,287.104, 15.309,255.375, 16,224
c 0.643-31.38, 7.482-62.574, 20.067-91.103c 12.544-28.55, 30.738-54.414, 53.055-75.774c 22.305-21.377, 48.736-38.252, 77.307-49.36
C 194.988-3.389, 225.652-8.688, 256-8c 30.354,0.645, 60.481,7.277, 88.038,19.457c 27.575,12.141, 52.558,29.74, 73.183,51.322
c 20.641,21.57, 36.922,47.118, 47.627,74.715c 6.517,16.729, 10.94,34.2, 13.271,51.899c 0.623-0.036, 1.249-0.060, 1.881-0.060
c 17.673,0, 32,14.326, 32,32c0,0.898-0.047,1.786-0.119,2.666L 512,223.999 z M 461.153,139.026c-11.736-26.601-28.742-50.7-49.589-70.59
c-20.835-19.905-45.5-35.593-72.122-45.895C 312.828,12.202, 284.297,7.315, 256,8c-28.302,0.649-56.298,6.868-81.91,18.237
c-25.625,11.333-48.842,27.745-67.997,47.856c-19.169,20.099-34.264,43.882-44.161,69.529C 51.997,169.264, 47.318,196.729, 48,224
c 0.651,27.276, 6.664,54.206, 17.627,78.845c 10.929,24.65, 26.749,46.985, 46.123,65.405c 19.365,18.434, 42.265,32.935, 66.937,42.428
C 203.356,420.208, 229.755,424.681, 256,424c 26.25-0.653, 52.114-6.459, 75.781-17.017c 23.676-10.525, 45.128-25.751, 62.812-44.391
c 17.698-18.629, 31.605-40.647, 40.695-64.344C 444.412,274.552, 448.679,249.219, 448,224l 0.119,0 c-0.072-0.88-0.119-1.768-0.119-2.666
c0-16.506, 12.496-30.087, 28.543-31.812C 473.431,172.111, 468.278,155.113, 461.153,139.026z" />
<glyph unicode="&#xe01f;" d="M 256,480 C 116.626,480 3.271,368.619 0.076,230.013 C 3.036,350.945 94.992,448 208,448 C 322.875,448 416,347.712 416,224 C 416,197.49 437.49,176 464,176 C 490.51,176 512,197.49 512,224 C 512,365.385 397.385,480 256,480 ZM 256-32 C 395.374-32 508.729,79.381 511.924,217.987 C 508.964,97.055 417.008,0 304,0 C 189.125,0 96,100.288 96,224 C 96,250.51 74.51,272 48,272 C 21.49,272 0,250.51 0,224 C 0,82.615 114.615-32 256-32 Z" />
<glyph unicode="&#xe00e;" d="M 432,128c-22.58,0-42.96-9.369-57.506-24.415L 158.992,211.336C 159.649,215.462, 160,219.689, 160,224
s-0.351,8.538-1.008,12.663l 215.502,107.751C 389.040,329.369, 409.42,320, 432,320c 44.183,0, 80,35.817, 80,80S 476.183,480, 432,480
s-80-35.817-80-80c0-4.311, 0.352-8.538, 1.008-12.663L 137.506,279.585C 122.96,294.63, 102.58,304, 80,304c-44.183,0-80-35.818-80-80
c0-44.184, 35.817-80, 80-80c 22.58,0, 42.96,9.369, 57.506,24.414l 215.502-107.751C 352.352,56.538, 352,52.311, 352,48
c0-44.184, 35.817-80, 80-80s 80,35.816, 80,80C 512,92.182, 476.183,128, 432,128z" />
<glyph unicode="&#xe001;" d="M 96,416L 416,224L 96,32 z" />
<glyph unicode="&#xe000;" d="M 512,480 L 512,272 L 432,352 L 336,256 L 288,304 L 384,400 L 304,480 ZM 224,144 L 128,48 L 208-32 L 0-32 L 0,176 L 80,96 L 176,192 Z" />
<glyph unicode="&#x20;" horiz-adv-x="256" />
</font></defs></svg>

Depois

Largura:  |  Altura:  |  Tamanho: 9.6 KiB

BIN
Ver Arquivo
Arquivo binário não exibido.

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais