videojs_rails 4.2.2 → 4.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/videojs_rails/version.rb +1 -1
- data/vendor/assets/flash/video-js.swf +0 -0
- data/vendor/assets/fonts/vjs.eot +0 -0
- data/vendor/assets/fonts/vjs.svg +52 -27
- data/vendor/assets/fonts/vjs.ttf +0 -0
- data/vendor/assets/fonts/vjs.woff +0 -0
- data/vendor/assets/images/video-js.png +0 -0
- data/vendor/assets/javascripts/video.js.erb +822 -200
- data/vendor/assets/stylesheets/video-js.css.erb +12 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38c49666ba70a870de23c626b4b0d274f1d25049
|
4
|
+
data.tar.gz: 48e4b0b947797a0724fd3b49a7f7eb6f4d22b83f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b72993e361b879b4d26107538eb92c9065fe0c9945f50d3016bc7a2e91decf69a6f96dc48728288ec122e2a248d3546ab4d8a99ec646561b7095bfb3fa64130d
|
7
|
+
data.tar.gz: 0f309eac136d9349258f6faf6fe55f0161a0e9fbd3506e21d6adc809a7266fb6112b21857a7ad0e563d4c12f35950ff4512897a284204a79847467c1bef54606
|
Binary file
|
data/vendor/assets/fonts/vjs.eot
CHANGED
Binary file
|
data/vendor/assets/fonts/vjs.svg
CHANGED
@@ -9,32 +9,57 @@ This is a custom SVG font generated by IcoMoon.
|
|
9
9
|
<font id="VideoJS" horiz-adv-x="512" >
|
10
10
|
<font-face units-per-em="512" ascent="480" descent="-32" />
|
11
11
|
<missing-glyph horiz-adv-x="512" />
|
12
|
-
<glyph unicode="" d="M 512.00,480.00 L 512.00,272.00 L 432.00,352.00 L 336.00,256.00 L 288.00,304.00 L 384.00,400.00 L 304.00,480.00 ZM 224.00,144.00 L 128.00,48.00 L 208.00-32.00 L 0.00-32.00 L 0.00,176.00 L 80.00,96.00 L 176.00,192.00 Z" />
|
13
|
-
<glyph unicode="" d="M 96.00,416.00L 416.00,224.00L 96.00,32.00 z" />
|
14
|
-
<glyph unicode="" d="M 64.00,416.00L 224.00,416.00L 224.00,32.00L 64.00,32.00zM 288.00,416.00L 448.00,416.00L 448.00,32.00L 288.00,32.00z" />
|
15
|
-
<glyph unicode="" d="M 200.666,440.666 C 213.50,453.50 224.00,449.15 224.00,431.00 L 224.00,17.00 C 224.00-1.15 213.50-5.499 200.666,7.335 L 80.00,128.00 L 0.00,128.00 L 0.00,320.00 L 80.00,320.00 L 200.666,440.666 Z" />
|
16
|
-
<glyph unicode="" d="M 274.51,109.49c-6.143,0.00-12.284,2.343-16.971,7.029c-9.373,9.373-9.373,24.568,0.00,33.941
|
17
|
-
c 40.55,40.55, 40.55,106.529,0.00,147.078c-9.373,9.373-9.373,24.569,0.00,33.941c 9.373,9.372, 24.568,9.372, 33.941,0.00
|
18
|
-
c 59.265-59.265, 59.265-155.696,0.00-214.961C 286.794,111.833, 280.652,109.49, 274.51,109.49zM 200.666,440.666 C 213.50,453.50 224.00,449.15 224.00,431.00 L 224.00,17.00 C 224.00-1.15 213.50-5.499 200.666,7.335 L 80.00,128.00 L 0.00,128.00 L 0.00,320.00 L 80.00,320.00 L 200.666,440.666 Z" />
|
19
|
-
<glyph unicode="" d="M 359.765,64.235c-6.143,0.00-12.284,2.343-16.971,7.029c-9.372,9.372-9.372,24.568,0.00,33.941
|
20
|
-
c 65.503,65.503, 65.503,172.085,0.00,237.588c-9.372,9.373-9.372,24.569,0.00,33.941c 9.372,9.371, 24.569,9.372, 33.941,0.00
|
21
|
-
C 417.532,335.938, 440.00,281.696, 440.00,224.00c0.00-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.00-12.284,2.343-16.971,7.029c-9.373,9.373-9.373,24.568,0.00,33.941
|
22
|
-
c 40.55,40.55, 40.55,106.529,0.00,147.078c-9.373,9.373-9.373,24.569,0.00,33.941c 9.373,9.372, 24.568,9.372, 33.941,0.00
|
23
|
-
c 59.265-59.265, 59.265-155.696,0.00-214.961C 286.794,111.833, 280.652,109.49, 274.51,109.49zM 200.666,440.666 C 213.50,453.50 224.00,449.15 224.00,431.00 L 224.00,17.00 C 224.00-1.15 213.50-5.499 200.666,7.335 L 80.00,128.00 L 0.00,128.00 L 0.00,320.00 L 80.00,320.00 L 200.666,440.666 Z" />
|
24
|
-
<glyph unicode="" d="M 445.02,18.98c-6.143,0.00-12.284,2.343-16.971,7.029c-9.372,9.373-9.372,24.568,0.00,33.941
|
25
|
-
C 471.868,103.771, 496.001,162.03, 496.001,224.00c0.00,61.969-24.133,120.229-67.952,164.049c-9.372,9.373-9.372,24.569,0.00,33.941
|
26
|
-
c 9.372,9.372, 24.569,9.372, 33.941,0.00c 52.885-52.886, 82.011-123.20, 82.011-197.99c0.00-74.791-29.126-145.104-82.011-197.99
|
27
|
-
C 457.304,21.323, 451.162,18.98, 445.02,18.98zM 359.765,64.235c-6.143,0.00-12.284,2.343-16.971,7.029c-9.372,9.372-9.372,24.568,0.00,33.941
|
28
|
-
c 65.503,65.503, 65.503,172.085,0.00,237.588c-9.372,9.373-9.372,24.569,0.00,33.941c 9.372,9.371, 24.569,9.372, 33.941,0.00
|
29
|
-
C 417.532,335.938, 440.00,281.696, 440.00,224.00c0.00-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.00-12.284,2.343-16.971,7.029c-9.373,9.373-9.373,24.568,0.00,33.941
|
30
|
-
c 40.55,40.55, 40.55,106.529,0.00,147.078c-9.373,9.373-9.373,24.569,0.00,33.941c 9.373,9.372, 24.568,9.372, 33.941,0.00
|
31
|
-
c 59.265-59.265, 59.265-155.696,0.00-214.961C 286.794,111.833, 280.652,109.49, 274.51,109.49zM 200.666,440.666 C 213.50,453.50 224.00,449.15 224.00,431.00 L 224.00,17.00 C 224.00-1.15 213.50-5.499 200.666,7.335 L 80.00,128.00 L 0.00,128.00 L 0.00,320.00 L 80.00,320.00 L 200.666,440.666 Z" horiz-adv-x="544" />
|
32
|
-
<glyph unicode="" d="M 256.00,480.00L 96.00,224.00L 256.00-32.00L 416.00,224.00 z" />
|
33
|
-
<glyph unicode="" d="M 0.00,480.00 L 687.158,480.00 L 687.158-35.207 L 0.00-35.207 L 0.00,480.00 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.06 346.247,32.207 C 460.593,33.06 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.1578947368421" />
|
34
|
-
<glyph unicode="" d="M 64.00,416.00L 448.00,416.00L 448.00,32.00L 64.00,32.00z" />
|
35
|
-
<glyph unicode="" d="M 192.00,416.00A64.00,64.00 12780.00 1 1 320.00,416A64.00,64.00 12780.00 1 1 192.00,416zM 327.765,359.765A64.00,64.00 12780.00 1 1 455.765,359.765A64.00,64.00 12780.00 1 1 327.765,359.765zM 416.00,224.00A32.00,32.00 12780.00 1 1 480.00,224A32.00,32.00 12780.00 1 1 416.00,224zM 359.765,88.235A32.00,32.00 12780.00 1 1 423.765,88.23500000000001A32.00,32.00 12780.00 1 1 359.765,88.23500000000001zM 224.001,32.00A32.00,32.00 12780.00 1 1 288.001,32A32.00,32.00 12780.00 1 1 224.001,32zM 88.236,88.235A32.00,32.00 12780.00 1 1 152.236,88.23500000000001A32.00,32.00 12780.00 1 1 88.236,88.23500000000001zM 72.236,359.765A48.00,48.00 12780.00 1 1 168.236,359.765A48.00,48.00 12780.00 1 1 72.236,359.765zM 28.00,224.00A36.00,36.00 12780.00 1 1 100.00,224A36.00,36.00 12780.00 1 1 28.00,224z" />
|
36
|
-
<glyph unicode="" d="M 224.00,192.00 L 224.00-16.00 L 144.00,64.00 L 48.00-32.00 L 0.00,16.00 L 96.00,112.00 L 16.00,192.00 ZM 512.00,432.00 L 416.00,336.00 L 496.00,256.00 L 288.00,256.00 L 288.00,464.00 L 368.00,384.00 L 464.00,480.00 Z" />
|
37
|
-
<glyph unicode="" d="M 256.00,448.00 C 397.385,448.00 512.00,354.875 512.00,240.00 C 512.00,125.124 397.385,32.00 256.00,32.00 C 242.422,32.00 229.095,32.867 216.088,34.522 C 161.099-20.467 95.463-30.328 32.00-31.776 L 32.00-18.318 C 66.268-1.529 96.00,29.052 96.00,64.00 C 96.00,68.877 95.621,73.665 94.918,78.348 C 37.02,116.48 0.00,174.725 0.00,240.00 C 0.00,354.875 114.615,448.00 256.00,448.00 Z" />
|
38
|
-
<glyph unicode=" " horiz-adv-x="256" />
|
39
12
|
<glyph class="hidden" unicode="" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
|
13
|
+
<glyph unicode="" d="M 64,416L 224,416L 224,32L 64,32zM 288,416L 448,416L 448,32L 288,32z" />
|
14
|
+
<glyph unicode="" 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" />
|
15
|
+
<glyph unicode="" 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
|
16
|
+
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
|
17
|
+
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" />
|
18
|
+
<glyph unicode="" 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
|
19
|
+
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
|
20
|
+
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
|
21
|
+
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
|
22
|
+
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" />
|
23
|
+
<glyph unicode="" 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
|
24
|
+
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
|
25
|
+
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
|
26
|
+
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
|
27
|
+
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
|
28
|
+
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
|
29
|
+
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
|
30
|
+
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" />
|
31
|
+
<glyph unicode="" d="M 256,480L 96,224L 256-32L 416,224 z" />
|
32
|
+
<glyph unicode="" 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" />
|
33
|
+
<glyph unicode="" d="M 64,416L 448,416L 448,32L 64,32z" />
|
34
|
+
<glyph unicode="" 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" />
|
35
|
+
<glyph unicode="" 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" />
|
36
|
+
<glyph unicode="" 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" />
|
37
|
+
<glyph unicode="" 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
|
38
|
+
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
|
39
|
+
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
|
40
|
+
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
|
41
|
+
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
|
42
|
+
C 449.532,335.938, 472,281.695, 472,224C 472,166.304, 449.532,112.062, 408.735,71.265z" />
|
43
|
+
<glyph unicode="" 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
|
44
|
+
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
|
45
|
+
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
|
46
|
+
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
|
47
|
+
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
|
48
|
+
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
|
49
|
+
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
|
50
|
+
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
|
51
|
+
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
|
52
|
+
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
|
53
|
+
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
|
54
|
+
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
|
55
|
+
c0-16.506, 12.496-30.087, 28.543-31.812C 473.431,172.111, 468.278,155.113, 461.153,139.026z" />
|
56
|
+
<glyph unicode="" 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" />
|
57
|
+
<glyph unicode="" 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
|
58
|
+
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
|
59
|
+
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
|
60
|
+
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
|
61
|
+
c0-44.184, 35.817-80, 80-80s 80,35.816, 80,80C 512,92.182, 476.183,128, 432,128z" />
|
62
|
+
<glyph unicode="" d="M 96,416L 416,224L 96,32 z" />
|
63
|
+
<glyph unicode="" 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" />
|
64
|
+
<glyph unicode=" " horiz-adv-x="256" />
|
40
65
|
</font></defs></svg>
|
data/vendor/assets/fonts/vjs.ttf
CHANGED
Binary file
|
Binary file
|
File without changes
|
@@ -11,10 +11,17 @@ document.createElement('track');
|
|
11
11
|
* Doubles as the main function for users to create a player instance and also
|
12
12
|
* the main library object.
|
13
13
|
*
|
14
|
+
* **ALIASES** videojs, _V_ (deprecated)
|
15
|
+
*
|
16
|
+
* The `vjs` function can be used to initialize or retrieve a player.
|
17
|
+
*
|
18
|
+
* var myPlayer = vjs('my_video_id');
|
19
|
+
*
|
14
20
|
* @param {String|Element} id Video element or video element ID
|
15
21
|
* @param {Object=} options Optional options object for config/settings
|
16
22
|
* @param {Function=} ready Optional ready callback
|
17
23
|
* @return {vjs.Player} A player instance
|
24
|
+
* @namespace
|
18
25
|
*/
|
19
26
|
var vjs = function(id, options, ready){
|
20
27
|
var tag; // Element of ID
|
@@ -57,7 +64,7 @@ var videojs = vjs;
|
|
57
64
|
window.videojs = window.vjs = vjs;
|
58
65
|
|
59
66
|
// CDN Version. Used to target right flash swf.
|
60
|
-
vjs.CDN_VERSION = '4.
|
67
|
+
vjs.CDN_VERSION = '4.3';
|
61
68
|
vjs.ACCESS_PROTOCOL = ('https:' == document.location.protocol ? 'https://' : 'http://');
|
62
69
|
|
63
70
|
/**
|
@@ -99,7 +106,7 @@ vjs.options = {
|
|
99
106
|
};
|
100
107
|
|
101
108
|
// Set CDN Version of swf
|
102
|
-
// The added (+) blocks the replace from changing this 4.
|
109
|
+
// The added (+) blocks the replace from changing this 4.3 string
|
103
110
|
if (vjs.CDN_VERSION !== 'GENERATED'+'_CDN_VSN') {
|
104
111
|
videojs.options['flash']['swf'] = vjs.ACCESS_PROTOCOL + 'vjs.zencdn.net/'+vjs.CDN_VERSION+'/video-js.swf';
|
105
112
|
}
|
@@ -111,6 +118,53 @@ if (vjs.CDN_VERSION !== 'GENERATED'+'_CDN_VSN') {
|
|
111
118
|
vjs.players = {};
|
112
119
|
/**
|
113
120
|
* Core Object/Class for objects that use inheritance + contstructors
|
121
|
+
*
|
122
|
+
* To create a class that can be subclassed itself, extend the CoreObject class.
|
123
|
+
*
|
124
|
+
* var Animal = CoreObject.extend();
|
125
|
+
* var Horse = Animal.extend();
|
126
|
+
*
|
127
|
+
* The constructor can be defined through the init property of an object argument.
|
128
|
+
*
|
129
|
+
* var Animal = CoreObject.extend({
|
130
|
+
* init: function(name, sound){
|
131
|
+
* this.name = name;
|
132
|
+
* }
|
133
|
+
* });
|
134
|
+
*
|
135
|
+
* Other methods and properties can be added the same way, or directly to the
|
136
|
+
* prototype.
|
137
|
+
*
|
138
|
+
* var Animal = CoreObject.extend({
|
139
|
+
* init: function(name){
|
140
|
+
* this.name = name;
|
141
|
+
* },
|
142
|
+
* getName: function(){
|
143
|
+
* return this.name;
|
144
|
+
* },
|
145
|
+
* sound: '...'
|
146
|
+
* });
|
147
|
+
*
|
148
|
+
* Animal.prototype.makeSound = function(){
|
149
|
+
* alert(this.sound);
|
150
|
+
* };
|
151
|
+
*
|
152
|
+
* To create an instance of a class, use the create method.
|
153
|
+
*
|
154
|
+
* var fluffy = Animal.create('Fluffy');
|
155
|
+
* fluffy.getName(); // -> Fluffy
|
156
|
+
*
|
157
|
+
* Methods and properties can be overridden in subclasses.
|
158
|
+
*
|
159
|
+
* var Horse = Animal.extend({
|
160
|
+
* sound: 'Neighhhhh!'
|
161
|
+
* });
|
162
|
+
*
|
163
|
+
* var horsey = Horse.create('Horsey');
|
164
|
+
* horsey.getName(); // -> Horsey
|
165
|
+
* horsey.makeSound(); // -> Alert: Neighhhhh!
|
166
|
+
*
|
167
|
+
* @class
|
114
168
|
* @constructor
|
115
169
|
*/
|
116
170
|
vjs.CoreObject = vjs['CoreObject'] = function(){};
|
@@ -122,9 +176,13 @@ vjs.CoreObject = vjs['CoreObject'] = function(){};
|
|
122
176
|
|
123
177
|
/**
|
124
178
|
* Create a new object that inherits from this Object
|
179
|
+
*
|
180
|
+
* var Animal = CoreObject.extend();
|
181
|
+
* var Horse = Animal.extend();
|
182
|
+
*
|
125
183
|
* @param {Object} props Functions and properties to be applied to the
|
126
184
|
* new object's prototype
|
127
|
-
* @return {vjs.CoreObject}
|
185
|
+
* @return {vjs.CoreObject} An object that inherits from CoreObject
|
128
186
|
* @this {*}
|
129
187
|
*/
|
130
188
|
vjs.CoreObject.extend = function(props){
|
@@ -171,7 +229,10 @@ vjs.CoreObject.extend = function(props){
|
|
171
229
|
|
172
230
|
/**
|
173
231
|
* Create a new instace of this Object class
|
174
|
-
*
|
232
|
+
*
|
233
|
+
* var myAnimal = Animal.create();
|
234
|
+
*
|
235
|
+
* @return {vjs.CoreObject} An instance of a CoreObject subclass
|
175
236
|
* @this {*}
|
176
237
|
*/
|
177
238
|
vjs.CoreObject.create = function(){
|
@@ -199,6 +260,7 @@ vjs.CoreObject.create = function(){
|
|
199
260
|
* @param {Element|Object} elem Element or object to bind listeners to
|
200
261
|
* @param {String} type Type of event to bind to.
|
201
262
|
* @param {Function} fn Event listener.
|
263
|
+
* @private
|
202
264
|
*/
|
203
265
|
vjs.on = function(elem, type, fn){
|
204
266
|
var data = vjs.getData(elem);
|
@@ -251,6 +313,7 @@ vjs.on = function(elem, type, fn){
|
|
251
313
|
* @param {Element|Object} elem Object to remove listeners from
|
252
314
|
* @param {String=} type Type of listener to remove. Don't include to remove all events from element.
|
253
315
|
* @param {Function} fn Specific listener to remove. Don't incldue to remove listeners for an event type.
|
316
|
+
* @private
|
254
317
|
*/
|
255
318
|
vjs.off = function(elem, type, fn) {
|
256
319
|
// Don't want to add a cache object through getData if not needed
|
@@ -300,6 +363,7 @@ vjs.off = function(elem, type, fn) {
|
|
300
363
|
* Clean up the listener cache and dispatchers
|
301
364
|
* @param {Element|Object} elem Element to clean up
|
302
365
|
* @param {String} type Type of event to clean up
|
366
|
+
* @private
|
303
367
|
*/
|
304
368
|
vjs.cleanUpEvents = function(elem, type) {
|
305
369
|
var data = vjs.getData(elem);
|
@@ -339,6 +403,7 @@ vjs.cleanUpEvents = function(elem, type) {
|
|
339
403
|
* Fix a native event to have standard property values
|
340
404
|
* @param {Object} event Event object to fix
|
341
405
|
* @return {Object}
|
406
|
+
* @private
|
342
407
|
*/
|
343
408
|
vjs.fixEvent = function(event) {
|
344
409
|
|
@@ -441,6 +506,7 @@ vjs.fixEvent = function(event) {
|
|
441
506
|
* Trigger an event for an element
|
442
507
|
* @param {Element|Object} elem Element to trigger an event on
|
443
508
|
* @param {String} event Type of event to trigger
|
509
|
+
* @private
|
444
510
|
*/
|
445
511
|
vjs.trigger = function(elem, event) {
|
446
512
|
// Fetches element data and a reference to the parent (for bubbling).
|
@@ -511,9 +577,9 @@ vjs.trigger = function(elem, event) {
|
|
511
577
|
/**
|
512
578
|
* Trigger a listener only once for an event
|
513
579
|
* @param {Element|Object} elem Element or object to
|
514
|
-
* @param {
|
515
|
-
* @param {Function} fn
|
516
|
-
* @
|
580
|
+
* @param {String} type
|
581
|
+
* @param {Function} fn
|
582
|
+
* @private
|
517
583
|
*/
|
518
584
|
vjs.one = function(elem, type, fn) {
|
519
585
|
var func = function(){
|
@@ -530,6 +596,7 @@ var hasOwnProp = Object.prototype.hasOwnProperty;
|
|
530
596
|
* @param {String=} tagName Name of tag to be created.
|
531
597
|
* @param {Object=} properties Element properties to be applied.
|
532
598
|
* @return {Element}
|
599
|
+
* @private
|
533
600
|
*/
|
534
601
|
vjs.createEl = function(tagName, properties){
|
535
602
|
var el, propName;
|
@@ -562,6 +629,7 @@ vjs.createEl = function(tagName, properties){
|
|
562
629
|
* Uppercase the first letter of a string
|
563
630
|
* @param {String} string String to be uppercased
|
564
631
|
* @return {String}
|
632
|
+
* @private
|
565
633
|
*/
|
566
634
|
vjs.capitalize = function(string){
|
567
635
|
return string.charAt(0).toUpperCase() + string.slice(1);
|
@@ -570,13 +638,18 @@ vjs.capitalize = function(string){
|
|
570
638
|
/**
|
571
639
|
* Object functions container
|
572
640
|
* @type {Object}
|
641
|
+
* @private
|
573
642
|
*/
|
574
643
|
vjs.obj = {};
|
575
644
|
|
576
645
|
/**
|
577
|
-
* Object.create shim for prototypal inheritance
|
646
|
+
* Object.create shim for prototypal inheritance
|
647
|
+
*
|
578
648
|
* https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create
|
649
|
+
*
|
650
|
+
* @function
|
579
651
|
* @param {Object} obj Object to use as prototype
|
652
|
+
* @private
|
580
653
|
*/
|
581
654
|
vjs.obj.create = Object.create || function(obj){
|
582
655
|
//Create a new function called 'F' which is just an empty object.
|
@@ -596,6 +669,7 @@ vjs.obj = {};
|
|
596
669
|
* @param {Object} obj Object of properties
|
597
670
|
* @param {Function} fn Function to be called on each property.
|
598
671
|
* @this {*}
|
672
|
+
* @private
|
599
673
|
*/
|
600
674
|
vjs.obj.each = function(obj, fn, context){
|
601
675
|
for (var key in obj) {
|
@@ -610,6 +684,7 @@ vjs.obj.each = function(obj, fn, context){
|
|
610
684
|
* @param {Object} obj1
|
611
685
|
* @param {Object} obj2
|
612
686
|
* @return {Object}
|
687
|
+
* @private
|
613
688
|
*/
|
614
689
|
vjs.obj.merge = function(obj1, obj2){
|
615
690
|
if (!obj2) { return obj1; }
|
@@ -628,6 +703,7 @@ vjs.obj.merge = function(obj1, obj2){
|
|
628
703
|
* @param {Object} obj1 Object to override
|
629
704
|
* @param {Object} obj2 Overriding object
|
630
705
|
* @return {Object} New object. Obj1 and Obj2 will be untouched.
|
706
|
+
* @private
|
631
707
|
*/
|
632
708
|
vjs.obj.deepMerge = function(obj1, obj2){
|
633
709
|
var key, val1, val2;
|
@@ -656,6 +732,7 @@ vjs.obj.deepMerge = function(obj1, obj2){
|
|
656
732
|
* Make a copy of the supplied object
|
657
733
|
* @param {Object} obj Object to copy
|
658
734
|
* @return {Object} Copy of object
|
735
|
+
* @private
|
659
736
|
*/
|
660
737
|
vjs.obj.copy = function(obj){
|
661
738
|
return vjs.obj.merge({}, obj);
|
@@ -665,6 +742,7 @@ vjs.obj.copy = function(obj){
|
|
665
742
|
* Check if an object is plain, and not a dom node or any object sub-instance
|
666
743
|
* @param {Object} obj Object to check
|
667
744
|
* @return {Boolean} True if plain, false otherwise
|
745
|
+
* @private
|
668
746
|
*/
|
669
747
|
vjs.obj.isPlain = function(obj){
|
670
748
|
return !!obj
|
@@ -680,6 +758,7 @@ vjs.obj.isPlain = function(obj){
|
|
680
758
|
* @param {Function} fn The function to be bound to a scope
|
681
759
|
* @param {Number=} uid An optional unique ID for the function to be set
|
682
760
|
* @return {Function}
|
761
|
+
* @private
|
683
762
|
*/
|
684
763
|
vjs.bind = function(context, fn, uid) {
|
685
764
|
// Make sure the function has a unique ID
|
@@ -706,12 +785,14 @@ vjs.bind = function(context, fn, uid) {
|
|
706
785
|
* Ex. Event listneres are stored here.
|
707
786
|
* (also from jsninja.com, slightly modified and updated for closure compiler)
|
708
787
|
* @type {Object}
|
788
|
+
* @private
|
709
789
|
*/
|
710
790
|
vjs.cache = {};
|
711
791
|
|
712
792
|
/**
|
713
793
|
* Unique ID for an element or function
|
714
794
|
* @type {Number}
|
795
|
+
* @private
|
715
796
|
*/
|
716
797
|
vjs.guid = 1;
|
717
798
|
|
@@ -719,6 +800,7 @@ vjs.guid = 1;
|
|
719
800
|
* Unique attribute name to store an element's guid in
|
720
801
|
* @type {String}
|
721
802
|
* @constant
|
803
|
+
* @private
|
722
804
|
*/
|
723
805
|
vjs.expando = 'vdata' + (new Date()).getTime();
|
724
806
|
|
@@ -726,6 +808,7 @@ vjs.expando = 'vdata' + (new Date()).getTime();
|
|
726
808
|
* Returns the cache object where data for an element is stored
|
727
809
|
* @param {Element} el Element to store data for.
|
728
810
|
* @return {Object}
|
811
|
+
* @private
|
729
812
|
*/
|
730
813
|
vjs.getData = function(el){
|
731
814
|
var id = el[vjs.expando];
|
@@ -740,6 +823,7 @@ vjs.getData = function(el){
|
|
740
823
|
* Returns the cache object where data for an element is stored
|
741
824
|
* @param {Element} el Element to store data for.
|
742
825
|
* @return {Object}
|
826
|
+
* @private
|
743
827
|
*/
|
744
828
|
vjs.hasData = function(el){
|
745
829
|
var id = el[vjs.expando];
|
@@ -749,6 +833,7 @@ vjs.hasData = function(el){
|
|
749
833
|
/**
|
750
834
|
* Delete data for the element from the cache and the guid attr from getElementById
|
751
835
|
* @param {Element} el Remove data for an element
|
836
|
+
* @private
|
752
837
|
*/
|
753
838
|
vjs.removeData = function(el){
|
754
839
|
var id = el[vjs.expando];
|
@@ -772,6 +857,12 @@ vjs.removeData = function(el){
|
|
772
857
|
}
|
773
858
|
};
|
774
859
|
|
860
|
+
/**
|
861
|
+
* Check if an object is empty
|
862
|
+
* @param {Object} obj The object to check for emptiness
|
863
|
+
* @return {Boolean}
|
864
|
+
* @private
|
865
|
+
*/
|
775
866
|
vjs.isEmpty = function(obj) {
|
776
867
|
for (var prop in obj) {
|
777
868
|
// Inlude null properties as empty.
|
@@ -786,6 +877,7 @@ vjs.isEmpty = function(obj) {
|
|
786
877
|
* Add a CSS class name to an element
|
787
878
|
* @param {Element} element Element to add class name to
|
788
879
|
* @param {String} classToAdd Classname to add
|
880
|
+
* @private
|
789
881
|
*/
|
790
882
|
vjs.addClass = function(element, classToAdd){
|
791
883
|
if ((' '+element.className+' ').indexOf(' '+classToAdd+' ') == -1) {
|
@@ -797,6 +889,7 @@ vjs.addClass = function(element, classToAdd){
|
|
797
889
|
* Remove a CSS class name from an element
|
798
890
|
* @param {Element} element Element to remove from class name
|
799
891
|
* @param {String} classToAdd Classname to remove
|
892
|
+
* @private
|
800
893
|
*/
|
801
894
|
vjs.removeClass = function(element, classToRemove){
|
802
895
|
var classNames, i;
|
@@ -819,6 +912,7 @@ vjs.removeClass = function(element, classToRemove){
|
|
819
912
|
* Element for testing browser HTML5 video capabilities
|
820
913
|
* @type {Element}
|
821
914
|
* @constant
|
915
|
+
* @private
|
822
916
|
*/
|
823
917
|
vjs.TEST_VID = vjs.createEl('video');
|
824
918
|
|
@@ -826,6 +920,7 @@ vjs.TEST_VID = vjs.createEl('video');
|
|
826
920
|
* Useragent for browser testing.
|
827
921
|
* @type {String}
|
828
922
|
* @constant
|
923
|
+
* @private
|
829
924
|
*/
|
830
925
|
vjs.USER_AGENT = navigator.userAgent;
|
831
926
|
|
@@ -833,6 +928,7 @@ vjs.USER_AGENT = navigator.userAgent;
|
|
833
928
|
* Device is an iPhone
|
834
929
|
* @type {Boolean}
|
835
930
|
* @constant
|
931
|
+
* @private
|
836
932
|
*/
|
837
933
|
vjs.IS_IPHONE = (/iPhone/i).test(vjs.USER_AGENT);
|
838
934
|
vjs.IS_IPAD = (/iPad/i).test(vjs.USER_AGENT);
|
@@ -873,7 +969,7 @@ vjs.IS_OLD_ANDROID = vjs.IS_ANDROID && (/webkit/i).test(vjs.USER_AGENT) && vjs.A
|
|
873
969
|
vjs.IS_FIREFOX = (/Firefox/i).test(vjs.USER_AGENT);
|
874
970
|
vjs.IS_CHROME = (/Chrome/i).test(vjs.USER_AGENT);
|
875
971
|
|
876
|
-
vjs.TOUCH_ENABLED = ('ontouchstart' in window);
|
972
|
+
vjs.TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);
|
877
973
|
|
878
974
|
/**
|
879
975
|
* Get an element's attribute values, as defined on the HTML tag
|
@@ -882,6 +978,7 @@ vjs.TOUCH_ENABLED = ('ontouchstart' in window);
|
|
882
978
|
* This will return true or false for boolean attributes.
|
883
979
|
* @param {Element} tag Element from which to get tag attributes
|
884
980
|
* @return {Object}
|
981
|
+
* @private
|
885
982
|
*/
|
886
983
|
vjs.getAttributeValues = function(tag){
|
887
984
|
var obj, knownBooleans, attrs, attrName, attrVal;
|
@@ -922,6 +1019,7 @@ vjs.getAttributeValues = function(tag){
|
|
922
1019
|
* @param {Element} el Element to get style value for
|
923
1020
|
* @param {String} strCssRule Style name
|
924
1021
|
* @return {String} Style value
|
1022
|
+
* @private
|
925
1023
|
*/
|
926
1024
|
vjs.getComputedDimension = function(el, strCssRule){
|
927
1025
|
var strValue = '';
|
@@ -939,6 +1037,7 @@ vjs.getComputedDimension = function(el, strCssRule){
|
|
939
1037
|
* Insert an element as the first child node of another
|
940
1038
|
* @param {Element} child Element to insert
|
941
1039
|
* @param {[type]} parent Element to insert child into
|
1040
|
+
* @private
|
942
1041
|
*/
|
943
1042
|
vjs.insertFirst = function(child, parent){
|
944
1043
|
if (parent.firstChild) {
|
@@ -951,6 +1050,7 @@ vjs.insertFirst = function(child, parent){
|
|
951
1050
|
/**
|
952
1051
|
* Object to hold browser support information
|
953
1052
|
* @type {Object}
|
1053
|
+
* @private
|
954
1054
|
*/
|
955
1055
|
vjs.support = {};
|
956
1056
|
|
@@ -959,6 +1059,7 @@ vjs.support = {};
|
|
959
1059
|
* Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.
|
960
1060
|
* @param {String} id Element ID
|
961
1061
|
* @return {Element} Element with supplied ID
|
1062
|
+
* @private
|
962
1063
|
*/
|
963
1064
|
vjs.el = function(id){
|
964
1065
|
if (id.indexOf('#') === 0) {
|
@@ -975,6 +1076,7 @@ vjs.el = function(id){
|
|
975
1076
|
* @param {Number} seconds Number of seconds to be turned into a string
|
976
1077
|
* @param {Number} guide Number (in seconds) to model the string after
|
977
1078
|
* @return {String} Time formatted as H:MM:SS or M:SS
|
1079
|
+
* @private
|
978
1080
|
*/
|
979
1081
|
vjs.formatTime = function(seconds, guide) {
|
980
1082
|
// Default to using seconds as guide
|
@@ -1017,6 +1119,7 @@ vjs.unblockTextSelection = function(){ document.onselectstart = function () { re
|
|
1017
1119
|
* Trim whitespace from the ends of a string.
|
1018
1120
|
* @param {String} string String to trim
|
1019
1121
|
* @return {String} Trimmed string
|
1122
|
+
* @private
|
1020
1123
|
*/
|
1021
1124
|
vjs.trim = function(str){
|
1022
1125
|
return (str+'').replace(/^\s+|\s+$/g, '');
|
@@ -1027,6 +1130,7 @@ vjs.trim = function(str){
|
|
1027
1130
|
* @param {Number} num Number to round
|
1028
1131
|
* @param {Number} dec Number of decimal places to round to
|
1029
1132
|
* @return {Number} Rounded number
|
1133
|
+
* @private
|
1030
1134
|
*/
|
1031
1135
|
vjs.round = function(num, dec) {
|
1032
1136
|
if (!dec) { dec = 0; }
|
@@ -1041,6 +1145,7 @@ vjs.round = function(num, dec) {
|
|
1041
1145
|
* @param {Number} start Start time in seconds
|
1042
1146
|
* @param {Number} end End time in seconds
|
1043
1147
|
* @return {Object} Fake TimeRange object
|
1148
|
+
* @private
|
1044
1149
|
*/
|
1045
1150
|
vjs.createTimeRange = function(start, end){
|
1046
1151
|
return {
|
@@ -1055,6 +1160,7 @@ vjs.createTimeRange = function(start, end){
|
|
1055
1160
|
* @param {String} url URL of resource
|
1056
1161
|
* @param {Function=} onSuccess Success callback
|
1057
1162
|
* @param {Function=} onError Error callback
|
1163
|
+
* @private
|
1058
1164
|
*/
|
1059
1165
|
vjs.get = function(url, onSuccess, onError){
|
1060
1166
|
var local, request;
|
@@ -1098,8 +1204,10 @@ vjs.get = function(url, onSuccess, onError){
|
|
1098
1204
|
}
|
1099
1205
|
};
|
1100
1206
|
|
1101
|
-
|
1102
|
-
|
1207
|
+
/**
|
1208
|
+
* Add to local storage (may removeable)
|
1209
|
+
* @private
|
1210
|
+
*/
|
1103
1211
|
vjs.setLocalStorage = function(key, value){
|
1104
1212
|
try {
|
1105
1213
|
// IE was throwing errors referencing the var anywhere without this
|
@@ -1124,6 +1232,7 @@ vjs.setLocalStorage = function(key, value){
|
|
1124
1232
|
* http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
|
1125
1233
|
* @param {String} url URL to make absolute
|
1126
1234
|
* @return {String} Absolute URL
|
1235
|
+
* @private
|
1127
1236
|
*/
|
1128
1237
|
vjs.getAbsoluteURL = function(url){
|
1129
1238
|
|
@@ -1187,12 +1296,39 @@ vjs.findPosition = function(el) {
|
|
1187
1296
|
|
1188
1297
|
/**
|
1189
1298
|
* Base UI Component class
|
1299
|
+
*
|
1300
|
+
* Components are embeddable UI objects that are represented by both a
|
1301
|
+
* javascript object and an element in the DOM. They can be children of other
|
1302
|
+
* components, and can have many children themselves.
|
1303
|
+
*
|
1304
|
+
* // adding a button to the player
|
1305
|
+
* var button = player.addChild('button');
|
1306
|
+
* button.el(); // -> button element
|
1307
|
+
*
|
1308
|
+
* <div class="video-js">
|
1309
|
+
* <div class="vjs-button">Button</div>
|
1310
|
+
* </div>
|
1311
|
+
*
|
1312
|
+
* Components are also event emitters.
|
1313
|
+
*
|
1314
|
+
* button.on('click', function(){
|
1315
|
+
* console.log('Button Clicked!');
|
1316
|
+
* });
|
1317
|
+
*
|
1318
|
+
* button.trigger('customevent');
|
1319
|
+
*
|
1190
1320
|
* @param {Object} player Main Player
|
1191
1321
|
* @param {Object=} options
|
1322
|
+
* @class
|
1192
1323
|
* @constructor
|
1324
|
+
* @extends vjs.CoreObject
|
1193
1325
|
*/
|
1194
1326
|
vjs.Component = vjs.CoreObject.extend({
|
1195
|
-
/**
|
1327
|
+
/**
|
1328
|
+
* the constructor funciton for the class
|
1329
|
+
*
|
1330
|
+
* @constructor
|
1331
|
+
*/
|
1196
1332
|
init: function(player, options, ready){
|
1197
1333
|
this.player_ = player;
|
1198
1334
|
|
@@ -1224,7 +1360,7 @@ vjs.Component = vjs.CoreObject.extend({
|
|
1224
1360
|
});
|
1225
1361
|
|
1226
1362
|
/**
|
1227
|
-
* Dispose of the component and all child components
|
1363
|
+
* Dispose of the component and all child components
|
1228
1364
|
*/
|
1229
1365
|
vjs.Component.prototype.dispose = function(){
|
1230
1366
|
this.trigger('dispose');
|
@@ -1256,14 +1392,16 @@ vjs.Component.prototype.dispose = function(){
|
|
1256
1392
|
};
|
1257
1393
|
|
1258
1394
|
/**
|
1259
|
-
* Reference to main player instance
|
1395
|
+
* Reference to main player instance
|
1396
|
+
*
|
1260
1397
|
* @type {vjs.Player}
|
1261
1398
|
* @private
|
1262
1399
|
*/
|
1263
|
-
vjs.Component.prototype.player_;
|
1400
|
+
vjs.Component.prototype.player_ = true;
|
1264
1401
|
|
1265
1402
|
/**
|
1266
|
-
* Return the component's player
|
1403
|
+
* Return the component's player
|
1404
|
+
*
|
1267
1405
|
* @return {vjs.Player}
|
1268
1406
|
*/
|
1269
1407
|
vjs.Component.prototype.player = function(){
|
@@ -1271,7 +1409,8 @@ vjs.Component.prototype.player = function(){
|
|
1271
1409
|
};
|
1272
1410
|
|
1273
1411
|
/**
|
1274
|
-
*
|
1412
|
+
* The component's options object
|
1413
|
+
*
|
1275
1414
|
* @type {Object}
|
1276
1415
|
* @private
|
1277
1416
|
*/
|
@@ -1279,6 +1418,7 @@ vjs.Component.prototype.options_;
|
|
1279
1418
|
|
1280
1419
|
/**
|
1281
1420
|
* Deep merge of options objects
|
1421
|
+
*
|
1282
1422
|
* Whenever a property is an object on both options objects
|
1283
1423
|
* the two properties will be merged using vjs.obj.deepMerge.
|
1284
1424
|
*
|
@@ -1286,36 +1426,36 @@ vjs.Component.prototype.options_;
|
|
1286
1426
|
* want it to be easy to override individual options on a child
|
1287
1427
|
* component without having to rewrite all the other default options.
|
1288
1428
|
*
|
1289
|
-
*
|
1290
|
-
*
|
1291
|
-
*
|
1292
|
-
*
|
1293
|
-
*
|
1294
|
-
*
|
1295
|
-
*
|
1296
|
-
*
|
1297
|
-
*
|
1298
|
-
*
|
1299
|
-
*
|
1300
|
-
*
|
1301
|
-
*
|
1302
|
-
*
|
1303
|
-
*
|
1304
|
-
*
|
1429
|
+
* Parent.prototype.options_ = {
|
1430
|
+
* children: {
|
1431
|
+
* 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },
|
1432
|
+
* 'childTwo': {},
|
1433
|
+
* 'childThree': {}
|
1434
|
+
* }
|
1435
|
+
* }
|
1436
|
+
* newOptions = {
|
1437
|
+
* children: {
|
1438
|
+
* 'childOne': { 'foo': 'baz', 'abc': '123' }
|
1439
|
+
* 'childTwo': null,
|
1440
|
+
* 'childFour': {}
|
1441
|
+
* }
|
1442
|
+
* }
|
1443
|
+
*
|
1444
|
+
* this.options(newOptions);
|
1305
1445
|
*
|
1306
1446
|
* RESULT
|
1307
1447
|
*
|
1308
|
-
*
|
1309
|
-
*
|
1310
|
-
*
|
1311
|
-
*
|
1312
|
-
*
|
1313
|
-
*
|
1314
|
-
*
|
1315
|
-
*
|
1448
|
+
* {
|
1449
|
+
* children: {
|
1450
|
+
* 'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },
|
1451
|
+
* 'childTwo': null, // Disabled. Won't be initialized.
|
1452
|
+
* 'childThree': {},
|
1453
|
+
* 'childFour': {}
|
1454
|
+
* }
|
1455
|
+
* }
|
1316
1456
|
*
|
1317
1457
|
* @param {Object} obj Object whose values will be overwritten
|
1318
|
-
* @return {Object}
|
1458
|
+
* @return {Object} NEW merged object. Does not return obj1.
|
1319
1459
|
*/
|
1320
1460
|
vjs.Component.prototype.options = function(obj){
|
1321
1461
|
if (obj === undefined) return this.options_;
|
@@ -1324,16 +1464,18 @@ vjs.Component.prototype.options = function(obj){
|
|
1324
1464
|
};
|
1325
1465
|
|
1326
1466
|
/**
|
1327
|
-
* The DOM element for the component
|
1467
|
+
* The DOM element for the component
|
1468
|
+
*
|
1328
1469
|
* @type {Element}
|
1329
1470
|
* @private
|
1330
1471
|
*/
|
1331
1472
|
vjs.Component.prototype.el_;
|
1332
1473
|
|
1333
1474
|
/**
|
1334
|
-
* Create the component's DOM element
|
1475
|
+
* Create the component's DOM element
|
1476
|
+
*
|
1335
1477
|
* @param {String=} tagName Element's node type. e.g. 'div'
|
1336
|
-
* @param {Object=} attributes An object of element attributes that should be set on the element
|
1478
|
+
* @param {Object=} attributes An object of element attributes that should be set on the element
|
1337
1479
|
* @return {Element}
|
1338
1480
|
*/
|
1339
1481
|
vjs.Component.prototype.createEl = function(tagName, attributes){
|
@@ -1341,7 +1483,10 @@ vjs.Component.prototype.createEl = function(tagName, attributes){
|
|
1341
1483
|
};
|
1342
1484
|
|
1343
1485
|
/**
|
1344
|
-
*
|
1486
|
+
* Get the component's DOM element
|
1487
|
+
*
|
1488
|
+
* var domEl = myComponent.el();
|
1489
|
+
*
|
1345
1490
|
* @return {Element}
|
1346
1491
|
*/
|
1347
1492
|
vjs.Component.prototype.el = function(){
|
@@ -1349,8 +1494,9 @@ vjs.Component.prototype.el = function(){
|
|
1349
1494
|
};
|
1350
1495
|
|
1351
1496
|
/**
|
1352
|
-
* An optional element where, if defined, children will be inserted
|
1353
|
-
*
|
1497
|
+
* An optional element where, if defined, children will be inserted instead of
|
1498
|
+
* directly in `el_`
|
1499
|
+
*
|
1354
1500
|
* @type {Element}
|
1355
1501
|
* @private
|
1356
1502
|
*/
|
@@ -1358,7 +1504,8 @@ vjs.Component.prototype.contentEl_;
|
|
1358
1504
|
|
1359
1505
|
/**
|
1360
1506
|
* Return the component's DOM element for embedding content.
|
1361
|
-
*
|
1507
|
+
* Will either be el_ or a new element defined in createEl.
|
1508
|
+
*
|
1362
1509
|
* @return {Element}
|
1363
1510
|
*/
|
1364
1511
|
vjs.Component.prototype.contentEl = function(){
|
@@ -1366,14 +1513,18 @@ vjs.Component.prototype.contentEl = function(){
|
|
1366
1513
|
};
|
1367
1514
|
|
1368
1515
|
/**
|
1369
|
-
* The ID for the component
|
1516
|
+
* The ID for the component
|
1517
|
+
*
|
1370
1518
|
* @type {String}
|
1371
1519
|
* @private
|
1372
1520
|
*/
|
1373
1521
|
vjs.Component.prototype.id_;
|
1374
1522
|
|
1375
1523
|
/**
|
1376
|
-
*
|
1524
|
+
* Get the component's ID
|
1525
|
+
*
|
1526
|
+
* var id = myComponent.id();
|
1527
|
+
*
|
1377
1528
|
* @return {String}
|
1378
1529
|
*/
|
1379
1530
|
vjs.Component.prototype.id = function(){
|
@@ -1382,13 +1533,17 @@ vjs.Component.prototype.id = function(){
|
|
1382
1533
|
|
1383
1534
|
/**
|
1384
1535
|
* The name for the component. Often used to reference the component.
|
1536
|
+
*
|
1385
1537
|
* @type {String}
|
1386
1538
|
* @private
|
1387
1539
|
*/
|
1388
1540
|
vjs.Component.prototype.name_;
|
1389
1541
|
|
1390
1542
|
/**
|
1391
|
-
*
|
1543
|
+
* Get the component's name. The name is often used to reference the component.
|
1544
|
+
*
|
1545
|
+
* var name = myComponent.name();
|
1546
|
+
*
|
1392
1547
|
* @return {String}
|
1393
1548
|
*/
|
1394
1549
|
vjs.Component.prototype.name = function(){
|
@@ -1397,14 +1552,18 @@ vjs.Component.prototype.name = function(){
|
|
1397
1552
|
|
1398
1553
|
/**
|
1399
1554
|
* Array of child components
|
1555
|
+
*
|
1400
1556
|
* @type {Array}
|
1401
1557
|
* @private
|
1402
1558
|
*/
|
1403
1559
|
vjs.Component.prototype.children_;
|
1404
1560
|
|
1405
1561
|
/**
|
1406
|
-
*
|
1407
|
-
*
|
1562
|
+
* Get an array of all child components
|
1563
|
+
*
|
1564
|
+
* var kids = myComponent.children();
|
1565
|
+
*
|
1566
|
+
* @return {Array} The children
|
1408
1567
|
*/
|
1409
1568
|
vjs.Component.prototype.children = function(){
|
1410
1569
|
return this.children_;
|
@@ -1412,40 +1571,64 @@ vjs.Component.prototype.children = function(){
|
|
1412
1571
|
|
1413
1572
|
/**
|
1414
1573
|
* Object of child components by ID
|
1574
|
+
*
|
1415
1575
|
* @type {Object}
|
1416
1576
|
* @private
|
1417
1577
|
*/
|
1418
1578
|
vjs.Component.prototype.childIndex_;
|
1419
1579
|
|
1420
1580
|
/**
|
1421
|
-
* Returns a child component with the provided ID
|
1422
|
-
*
|
1581
|
+
* Returns a child component with the provided ID
|
1582
|
+
*
|
1583
|
+
* @return {vjs.Component}
|
1423
1584
|
*/
|
1424
1585
|
vjs.Component.prototype.getChildById = function(id){
|
1425
1586
|
return this.childIndex_[id];
|
1426
1587
|
};
|
1427
1588
|
|
1428
1589
|
/**
|
1429
|
-
* Object of child components by
|
1590
|
+
* Object of child components by name
|
1591
|
+
*
|
1430
1592
|
* @type {Object}
|
1431
1593
|
* @private
|
1432
1594
|
*/
|
1433
1595
|
vjs.Component.prototype.childNameIndex_;
|
1434
1596
|
|
1435
1597
|
/**
|
1436
|
-
* Returns a child component with the provided ID
|
1437
|
-
*
|
1598
|
+
* Returns a child component with the provided ID
|
1599
|
+
*
|
1600
|
+
* @return {vjs.Component}
|
1438
1601
|
*/
|
1439
1602
|
vjs.Component.prototype.getChild = function(name){
|
1440
1603
|
return this.childNameIndex_[name];
|
1441
1604
|
};
|
1442
1605
|
|
1443
1606
|
/**
|
1444
|
-
* Adds a child component inside this component
|
1445
|
-
*
|
1446
|
-
*
|
1447
|
-
*
|
1448
|
-
*
|
1607
|
+
* Adds a child component inside this component
|
1608
|
+
*
|
1609
|
+
* myComponent.el();
|
1610
|
+
* // -> <div class='my-component'></div>
|
1611
|
+
* myComonent.children();
|
1612
|
+
* // [empty array]
|
1613
|
+
*
|
1614
|
+
* var myButton = myComponent.addChild('MyButton');
|
1615
|
+
* // -> <div class='my-component'><div class="my-button">myButton<div></div>
|
1616
|
+
* // -> myButton === myComonent.children()[0];
|
1617
|
+
*
|
1618
|
+
* Pass in options for child constructors and options for children of the child
|
1619
|
+
*
|
1620
|
+
* var myButton = myComponent.addChild('MyButton', {
|
1621
|
+
* text: 'Press Me',
|
1622
|
+
* children: {
|
1623
|
+
* buttonChildExample: {
|
1624
|
+
* buttonChildOption: true
|
1625
|
+
* }
|
1626
|
+
* }
|
1627
|
+
* });
|
1628
|
+
*
|
1629
|
+
* @param {String|vjs.Component} child The class name or instance of a child to add
|
1630
|
+
* @param {Object=} options Options, including options to be passed to children of the child.
|
1631
|
+
* @return {vjs.Component} The child component (created by this process if a string was used)
|
1449
1632
|
* @suppress {accessControls|checkRegExp|checkTypes|checkVars|const|constantProperty|deprecated|duplicate|es5Strict|fileoverviewTags|globalThis|invalidCasts|missingProperties|nonStandardJsDocs|strictModuleDepCheck|undefinedNames|undefinedVars|unknownDefines|uselessCode|visibility}
|
1450
1633
|
*/
|
1451
1634
|
vjs.Component.prototype.addChild = function(child, options){
|
@@ -1500,6 +1683,12 @@ vjs.Component.prototype.addChild = function(child, options){
|
|
1500
1683
|
return component;
|
1501
1684
|
};
|
1502
1685
|
|
1686
|
+
/**
|
1687
|
+
* Remove a child component from this component's list of children, and the
|
1688
|
+
* child component's element from this component's element
|
1689
|
+
*
|
1690
|
+
* @param {vjs.Component} component Component to remove
|
1691
|
+
*/
|
1503
1692
|
vjs.Component.prototype.removeChild = function(component){
|
1504
1693
|
if (typeof component === 'string') {
|
1505
1694
|
component = this.getChild(component);
|
@@ -1528,7 +1717,15 @@ vjs.Component.prototype.removeChild = function(component){
|
|
1528
1717
|
};
|
1529
1718
|
|
1530
1719
|
/**
|
1531
|
-
*
|
1720
|
+
* Add and initialize default child components from options
|
1721
|
+
*
|
1722
|
+
* // when an instance of MyComponent is created, all children in options
|
1723
|
+
* // will be added to the instance by their name strings and options
|
1724
|
+
* MyComponent.prototype.options_.children = {
|
1725
|
+
* myChildComponent: {
|
1726
|
+
* myChildOption: true
|
1727
|
+
* }
|
1728
|
+
* }
|
1532
1729
|
*/
|
1533
1730
|
vjs.Component.prototype.initChildren = function(){
|
1534
1731
|
var options = this.options_;
|
@@ -1557,6 +1754,11 @@ vjs.Component.prototype.initChildren = function(){
|
|
1557
1754
|
}
|
1558
1755
|
};
|
1559
1756
|
|
1757
|
+
/**
|
1758
|
+
* Allows sub components to stack CSS class names
|
1759
|
+
*
|
1760
|
+
* @return {String} The constructed class name
|
1761
|
+
*/
|
1560
1762
|
vjs.Component.prototype.buildCSSClass = function(){
|
1561
1763
|
// Child classes can include a function that does:
|
1562
1764
|
// return 'CLASS NAME' + this._super();
|
@@ -1567,10 +1769,20 @@ vjs.Component.prototype.buildCSSClass = function(){
|
|
1567
1769
|
============================================================================= */
|
1568
1770
|
|
1569
1771
|
/**
|
1570
|
-
* Add an event listener to this component's element
|
1571
|
-
*
|
1572
|
-
*
|
1573
|
-
*
|
1772
|
+
* Add an event listener to this component's element
|
1773
|
+
*
|
1774
|
+
* var myFunc = function(){
|
1775
|
+
* var myPlayer = this;
|
1776
|
+
* // Do something when the event is fired
|
1777
|
+
* };
|
1778
|
+
*
|
1779
|
+
* myPlayer.on("eventName", myFunc);
|
1780
|
+
*
|
1781
|
+
* The context will be the component.
|
1782
|
+
*
|
1783
|
+
* @param {String} type The event type e.g. 'click'
|
1784
|
+
* @param {Function} fn The event listener
|
1785
|
+
* @return {vjs.Component} self
|
1574
1786
|
*/
|
1575
1787
|
vjs.Component.prototype.on = function(type, fn){
|
1576
1788
|
vjs.on(this.el_, type, vjs.bind(this, fn));
|
@@ -1579,8 +1791,11 @@ vjs.Component.prototype.on = function(type, fn){
|
|
1579
1791
|
|
1580
1792
|
/**
|
1581
1793
|
* Remove an event listener from the component's element
|
1582
|
-
*
|
1583
|
-
*
|
1794
|
+
*
|
1795
|
+
* myComponent.off("eventName", myFunc);
|
1796
|
+
*
|
1797
|
+
* @param {String=} type Event type. Without type it will remove all listeners.
|
1798
|
+
* @param {Function=} fn Event listener. Without fn it will remove all listeners for a type.
|
1584
1799
|
* @return {vjs.Component}
|
1585
1800
|
*/
|
1586
1801
|
vjs.Component.prototype.off = function(type, fn){
|
@@ -1590,6 +1805,7 @@ vjs.Component.prototype.off = function(type, fn){
|
|
1590
1805
|
|
1591
1806
|
/**
|
1592
1807
|
* Add an event listener to be triggered only once and then removed
|
1808
|
+
*
|
1593
1809
|
* @param {String} type Event type
|
1594
1810
|
* @param {Function} fn Event listener
|
1595
1811
|
* @return {vjs.Component}
|
@@ -1601,9 +1817,12 @@ vjs.Component.prototype.one = function(type, fn) {
|
|
1601
1817
|
|
1602
1818
|
/**
|
1603
1819
|
* Trigger an event on an element
|
1604
|
-
*
|
1605
|
-
*
|
1606
|
-
*
|
1820
|
+
*
|
1821
|
+
* myComponent.trigger('eventName');
|
1822
|
+
*
|
1823
|
+
* @param {String} type The event type to trigger, e.g. 'click'
|
1824
|
+
* @param {Event|Object} event The event object to be passed to the listener
|
1825
|
+
* @return {vjs.Component} self
|
1607
1826
|
*/
|
1608
1827
|
vjs.Component.prototype.trigger = function(type, event){
|
1609
1828
|
vjs.trigger(this.el_, type, event);
|
@@ -1613,33 +1832,40 @@ vjs.Component.prototype.trigger = function(type, event){
|
|
1613
1832
|
/* Ready
|
1614
1833
|
================================================================================ */
|
1615
1834
|
/**
|
1616
|
-
* Is the component loaded
|
1617
|
-
*
|
1835
|
+
* Is the component loaded
|
1836
|
+
* This can mean different things depending on the component.
|
1837
|
+
*
|
1618
1838
|
* @private
|
1839
|
+
* @type {Boolean}
|
1619
1840
|
*/
|
1620
1841
|
vjs.Component.prototype.isReady_;
|
1621
1842
|
|
1622
1843
|
/**
|
1623
|
-
* Trigger ready as soon as initialization is finished
|
1624
|
-
*
|
1625
|
-
*
|
1626
|
-
*
|
1627
|
-
*
|
1628
|
-
*
|
1844
|
+
* Trigger ready as soon as initialization is finished
|
1845
|
+
*
|
1846
|
+
* Allows for delaying ready. Override on a sub class prototype.
|
1847
|
+
* If you set this.isReadyOnInitFinish_ it will affect all components.
|
1848
|
+
* Specially used when waiting for the Flash player to asynchrnously load.
|
1849
|
+
*
|
1850
|
+
* @type {Boolean}
|
1851
|
+
* @private
|
1629
1852
|
*/
|
1630
1853
|
vjs.Component.prototype.isReadyOnInitFinish_ = true;
|
1631
1854
|
|
1632
1855
|
/**
|
1633
1856
|
* List of ready listeners
|
1857
|
+
*
|
1634
1858
|
* @type {Array}
|
1635
1859
|
* @private
|
1636
1860
|
*/
|
1637
1861
|
vjs.Component.prototype.readyQueue_;
|
1638
1862
|
|
1639
1863
|
/**
|
1640
|
-
* Bind a listener to the component's ready state
|
1641
|
-
*
|
1642
|
-
*
|
1864
|
+
* Bind a listener to the component's ready state
|
1865
|
+
*
|
1866
|
+
* Different from event listeners in that if the ready event has already happend
|
1867
|
+
* it will trigger the function immediately.
|
1868
|
+
*
|
1643
1869
|
* @param {Function} fn Ready listener
|
1644
1870
|
* @return {vjs.Component}
|
1645
1871
|
*/
|
@@ -1659,6 +1885,7 @@ vjs.Component.prototype.ready = function(fn){
|
|
1659
1885
|
|
1660
1886
|
/**
|
1661
1887
|
* Trigger the ready listeners
|
1888
|
+
*
|
1662
1889
|
* @return {vjs.Component}
|
1663
1890
|
*/
|
1664
1891
|
vjs.Component.prototype.triggerReady = function(){
|
@@ -1685,6 +1912,7 @@ vjs.Component.prototype.triggerReady = function(){
|
|
1685
1912
|
|
1686
1913
|
/**
|
1687
1914
|
* Add a CSS class name to the component's element
|
1915
|
+
*
|
1688
1916
|
* @param {String} classToAdd Classname to add
|
1689
1917
|
* @return {vjs.Component}
|
1690
1918
|
*/
|
@@ -1695,6 +1923,7 @@ vjs.Component.prototype.addClass = function(classToAdd){
|
|
1695
1923
|
|
1696
1924
|
/**
|
1697
1925
|
* Remove a CSS class name from the component's element
|
1926
|
+
*
|
1698
1927
|
* @param {String} classToRemove Classname to remove
|
1699
1928
|
* @return {vjs.Component}
|
1700
1929
|
*/
|
@@ -1705,6 +1934,7 @@ vjs.Component.prototype.removeClass = function(classToRemove){
|
|
1705
1934
|
|
1706
1935
|
/**
|
1707
1936
|
* Show the component element if hidden
|
1937
|
+
*
|
1708
1938
|
* @return {vjs.Component}
|
1709
1939
|
*/
|
1710
1940
|
vjs.Component.prototype.show = function(){
|
@@ -1714,6 +1944,7 @@ vjs.Component.prototype.show = function(){
|
|
1714
1944
|
|
1715
1945
|
/**
|
1716
1946
|
* Hide the component element if hidden
|
1947
|
+
*
|
1717
1948
|
* @return {vjs.Component}
|
1718
1949
|
*/
|
1719
1950
|
vjs.Component.prototype.hide = function(){
|
@@ -1722,8 +1953,11 @@ vjs.Component.prototype.hide = function(){
|
|
1722
1953
|
};
|
1723
1954
|
|
1724
1955
|
/**
|
1725
|
-
* Lock an item in its visible state
|
1956
|
+
* Lock an item in its visible state
|
1957
|
+
* To be used with fadeIn/fadeOut.
|
1958
|
+
*
|
1726
1959
|
* @return {vjs.Component}
|
1960
|
+
* @private
|
1727
1961
|
*/
|
1728
1962
|
vjs.Component.prototype.lockShowing = function(){
|
1729
1963
|
this.addClass('vjs-lock-showing');
|
@@ -1731,8 +1965,11 @@ vjs.Component.prototype.lockShowing = function(){
|
|
1731
1965
|
};
|
1732
1966
|
|
1733
1967
|
/**
|
1734
|
-
* Unlock an item to be hidden
|
1968
|
+
* Unlock an item to be hidden
|
1969
|
+
* To be used with fadeIn/fadeOut.
|
1970
|
+
*
|
1735
1971
|
* @return {vjs.Component}
|
1972
|
+
* @private
|
1736
1973
|
*/
|
1737
1974
|
vjs.Component.prototype.unlockShowing = function(){
|
1738
1975
|
this.removeClass('vjs-lock-showing');
|
@@ -1748,35 +1985,38 @@ vjs.Component.prototype.disable = function(){
|
|
1748
1985
|
};
|
1749
1986
|
|
1750
1987
|
/**
|
1751
|
-
*
|
1752
|
-
*
|
1753
|
-
* http://dev.w3.org/html5/spec/dimension-attributes.html#attr-dim-height
|
1988
|
+
* Set or get the width of the component (CSS values)
|
1989
|
+
*
|
1754
1990
|
* Video tag width/height only work in pixels. No percents.
|
1755
1991
|
* But allowing limited percents use. e.g. width() will return number+%, not computed width
|
1992
|
+
*
|
1756
1993
|
* @param {Number|String=} num Optional width number
|
1757
|
-
* @param {
|
1758
|
-
* @return {vjs.Component
|
1759
|
-
*
|
1994
|
+
* @param {Boolean} skipListeners Skip the 'resize' event trigger
|
1995
|
+
* @return {vjs.Component} Returns 'this' if width was set
|
1996
|
+
* @return {Number|String} Returns the width if nothing was set
|
1760
1997
|
*/
|
1761
1998
|
vjs.Component.prototype.width = function(num, skipListeners){
|
1762
1999
|
return this.dimension('width', num, skipListeners);
|
1763
2000
|
};
|
1764
2001
|
|
1765
2002
|
/**
|
1766
|
-
* Get or set the height of the
|
1767
|
-
*
|
1768
|
-
* @param {
|
1769
|
-
* @
|
2003
|
+
* Get or set the height of the component (CSS values)
|
2004
|
+
*
|
2005
|
+
* @param {Number|String=} num New component height
|
2006
|
+
* @param {Boolean=} skipListeners Skip the resize event trigger
|
2007
|
+
* @return {vjs.Component} The component if the height was set
|
2008
|
+
* @return {Number|String} The height if it wasn't set
|
1770
2009
|
*/
|
1771
2010
|
vjs.Component.prototype.height = function(num, skipListeners){
|
1772
2011
|
return this.dimension('height', num, skipListeners);
|
1773
2012
|
};
|
1774
2013
|
|
1775
2014
|
/**
|
1776
|
-
* Set both width and height at the same time
|
2015
|
+
* Set both width and height at the same time
|
2016
|
+
*
|
1777
2017
|
* @param {Number|String} width
|
1778
2018
|
* @param {Number|String} height
|
1779
|
-
* @return {vjs.Component}
|
2019
|
+
* @return {vjs.Component} The component
|
1780
2020
|
*/
|
1781
2021
|
vjs.Component.prototype.dimensions = function(width, height){
|
1782
2022
|
// Skip resize listeners on width for optimization
|
@@ -1784,18 +2024,22 @@ vjs.Component.prototype.dimensions = function(width, height){
|
|
1784
2024
|
};
|
1785
2025
|
|
1786
2026
|
/**
|
1787
|
-
* Get or set width or height
|
2027
|
+
* Get or set width or height
|
2028
|
+
*
|
2029
|
+
* This is the shared code for the width() and height() methods.
|
1788
2030
|
* All for an integer, integer + 'px' or integer + '%';
|
1789
|
-
*
|
1790
|
-
*
|
1791
|
-
* which has the
|
1792
|
-
* Info, but probably not an efficient fix:
|
2031
|
+
*
|
2032
|
+
* Known issue: Hidden elements officially have a width of 0. We're defaulting
|
2033
|
+
* to the style.width value and falling back to computedStyle which has the
|
2034
|
+
* hidden element issue. Info, but probably not an efficient fix:
|
1793
2035
|
* http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/
|
1794
|
-
*
|
1795
|
-
* @param {
|
2036
|
+
*
|
2037
|
+
* @param {String} widthOrHeight 'width' or 'height'
|
2038
|
+
* @param {Number|String=} num New dimension
|
1796
2039
|
* @param {Boolean=} skipListeners Skip resize event trigger
|
1797
|
-
* @return {vjs.Component
|
1798
|
-
*
|
2040
|
+
* @return {vjs.Component} The component if a dimension was set
|
2041
|
+
* @return {Number|String} The dimension if nothing was set
|
2042
|
+
* @private
|
1799
2043
|
*/
|
1800
2044
|
vjs.Component.prototype.dimension = function(widthOrHeight, num, skipListeners){
|
1801
2045
|
if (num !== undefined) {
|
@@ -1850,12 +2094,20 @@ vjs.Component.prototype.dimension = function(widthOrHeight, num, skipListeners){
|
|
1850
2094
|
};
|
1851
2095
|
|
1852
2096
|
/**
|
1853
|
-
*
|
1854
|
-
*
|
1855
|
-
|
2097
|
+
* Fired when the width and/or height of the component changes
|
2098
|
+
* @event resize
|
2099
|
+
*/
|
2100
|
+
vjs.Component.prototype.onResize;
|
2101
|
+
|
2102
|
+
/**
|
2103
|
+
* Emit 'tap' events when touch events are supported
|
2104
|
+
*
|
2105
|
+
* This is used to support toggling the controls through a tap on the video.
|
1856
2106
|
*
|
1857
|
-
*
|
1858
|
-
*
|
2107
|
+
* We're requireing them to be enabled because otherwise every component would
|
2108
|
+
* have this extra overhead unnecessarily, on mobile devices where extra
|
2109
|
+
* overhead is especially bad.
|
2110
|
+
* @private
|
1859
2111
|
*/
|
1860
2112
|
vjs.Component.prototype.emitTapEvents = function(){
|
1861
2113
|
var touchStart, touchTime, couldBeTap, noTap;
|
@@ -1901,10 +2153,14 @@ vjs.Component.prototype.emitTapEvents = function(){
|
|
1901
2153
|
* Base class for all buttons
|
1902
2154
|
* @param {vjs.Player|Object} player
|
1903
2155
|
* @param {Object=} options
|
2156
|
+
* @class
|
1904
2157
|
* @constructor
|
1905
2158
|
*/
|
1906
2159
|
vjs.Button = vjs.Component.extend({
|
1907
|
-
/**
|
2160
|
+
/**
|
2161
|
+
* @constructor
|
2162
|
+
* @inheritDoc
|
2163
|
+
*/
|
1908
2164
|
init: function(player, options){
|
1909
2165
|
vjs.Component.call(this, player, options);
|
1910
2166
|
|
@@ -1973,7 +2229,8 @@ vjs.Button.prototype.onBlur = function(){
|
|
1973
2229
|
/* Slider
|
1974
2230
|
================================================================================ */
|
1975
2231
|
/**
|
1976
|
-
*
|
2232
|
+
* The base functionality for sliders like the volume bar and seek bar
|
2233
|
+
*
|
1977
2234
|
* @param {vjs.Player|Object} player
|
1978
2235
|
* @param {Object=} options
|
1979
2236
|
* @constructor
|
@@ -2184,7 +2441,9 @@ vjs.SliderHandle = vjs.Component.extend();
|
|
2184
2441
|
|
2185
2442
|
/**
|
2186
2443
|
* Default value of the slider
|
2444
|
+
*
|
2187
2445
|
* @type {Number}
|
2446
|
+
* @private
|
2188
2447
|
*/
|
2189
2448
|
vjs.SliderHandle.prototype.defaultValue = 0;
|
2190
2449
|
|
@@ -2202,9 +2461,12 @@ vjs.SliderHandle.prototype.createEl = function(type, props) {
|
|
2202
2461
|
/* Menu
|
2203
2462
|
================================================================================ */
|
2204
2463
|
/**
|
2205
|
-
* The
|
2464
|
+
* The Menu component is used to build pop up menus, including subtitle and
|
2465
|
+
* captions selection menus.
|
2466
|
+
*
|
2206
2467
|
* @param {vjs.Player|Object} player
|
2207
2468
|
* @param {Object=} options
|
2469
|
+
* @class
|
2208
2470
|
* @constructor
|
2209
2471
|
*/
|
2210
2472
|
vjs.Menu = vjs.Component.extend();
|
@@ -2243,9 +2505,11 @@ vjs.Menu.prototype.createEl = function(){
|
|
2243
2505
|
};
|
2244
2506
|
|
2245
2507
|
/**
|
2246
|
-
*
|
2508
|
+
* The component for a menu item. `<li>`
|
2509
|
+
*
|
2247
2510
|
* @param {vjs.Player|Object} player
|
2248
2511
|
* @param {Object=} options
|
2512
|
+
* @class
|
2249
2513
|
* @constructor
|
2250
2514
|
*/
|
2251
2515
|
vjs.MenuItem = vjs.Button.extend({
|
@@ -2264,7 +2528,9 @@ vjs.MenuItem.prototype.createEl = function(type, props){
|
|
2264
2528
|
}, props));
|
2265
2529
|
};
|
2266
2530
|
|
2267
|
-
/**
|
2531
|
+
/**
|
2532
|
+
* Handle a click on the menu item, and set it to selected
|
2533
|
+
*/
|
2268
2534
|
vjs.MenuItem.prototype.onClick = function(){
|
2269
2535
|
this.selected(true);
|
2270
2536
|
};
|
@@ -2314,6 +2580,7 @@ vjs.MenuButton = vjs.Button.extend({
|
|
2314
2580
|
/**
|
2315
2581
|
* Track the state of the menu button
|
2316
2582
|
* @type {Boolean}
|
2583
|
+
* @private
|
2317
2584
|
*/
|
2318
2585
|
vjs.MenuButton.prototype.buttonPressed_ = false;
|
2319
2586
|
|
@@ -2408,14 +2675,36 @@ vjs.MenuButton.prototype.unpressButton = function(){
|
|
2408
2675
|
};
|
2409
2676
|
|
2410
2677
|
/**
|
2411
|
-
*
|
2412
|
-
*
|
2413
|
-
*
|
2414
|
-
*
|
2415
|
-
*
|
2678
|
+
* An instance of the `vjs.Player` class is created when any of the Video.js setup methods are used to initialize a video.
|
2679
|
+
*
|
2680
|
+
* ```js
|
2681
|
+
* var myPlayer = videojs('example_video_1');
|
2682
|
+
* ```
|
2683
|
+
*
|
2684
|
+
* In the follwing example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.
|
2685
|
+
*
|
2686
|
+
* ```html
|
2687
|
+
* <video id="example_video_1" data-setup='{}' controls>
|
2688
|
+
* <source src="my-source.mp4" type="video/mp4">
|
2689
|
+
* </video>
|
2690
|
+
* ```
|
2691
|
+
*
|
2692
|
+
* After an instance has been created it can be accessed globally using `Video('example_video_1')`.
|
2693
|
+
*
|
2694
|
+
* @class
|
2695
|
+
* @extends vjs.Component
|
2416
2696
|
*/
|
2417
2697
|
vjs.Player = vjs.Component.extend({
|
2418
|
-
|
2698
|
+
|
2699
|
+
/**
|
2700
|
+
* player's constructor function
|
2701
|
+
*
|
2702
|
+
* @constructs
|
2703
|
+
* @method init
|
2704
|
+
* @param {Element} tag The original video tag used for configuring options
|
2705
|
+
* @param {Object=} options Player options
|
2706
|
+
* @param {Function=} ready Ready callback function
|
2707
|
+
*/
|
2419
2708
|
init: function(tag, options, ready){
|
2420
2709
|
this.tag = tag; // Store the original tag used to set options
|
2421
2710
|
|
@@ -2504,6 +2793,14 @@ vjs.Player = vjs.Component.extend({
|
|
2504
2793
|
*/
|
2505
2794
|
vjs.Player.prototype.options_ = vjs.options;
|
2506
2795
|
|
2796
|
+
/**
|
2797
|
+
* Destroys the video player and does any necessary cleanup
|
2798
|
+
*
|
2799
|
+
* myPlayer.dispose();
|
2800
|
+
*
|
2801
|
+
* This is especially helpful if you are dynamically adding and removing videos
|
2802
|
+
* to/from the DOM.
|
2803
|
+
*/
|
2507
2804
|
vjs.Player.prototype.dispose = function(){
|
2508
2805
|
this.trigger('dispose');
|
2509
2806
|
// prevent dispose from being called twice
|
@@ -2741,7 +3038,7 @@ vjs.Player.prototype.trackProgress = function(){
|
|
2741
3038
|
};
|
2742
3039
|
vjs.Player.prototype.stopTrackingProgress = function(){ clearInterval(this.progressInterval); };
|
2743
3040
|
|
2744
|
-
|
3041
|
+
/*! Time Tracking -------------------------------------------------------------- */
|
2745
3042
|
vjs.Player.prototype.manualTimeUpdatesOn = function(){
|
2746
3043
|
this.manualTimeUpdates = true;
|
2747
3044
|
|
@@ -2777,18 +3074,49 @@ vjs.Player.prototype.stopTrackingCurrentTime = function(){ clearInterval(this.cu
|
|
2777
3074
|
|
2778
3075
|
// /* Player event handlers (how the player reacts to certain events)
|
2779
3076
|
// ================================================================================ */
|
2780
|
-
vjs.Player.prototype.onEnded = function(){
|
2781
|
-
if (this.options_['loop']) {
|
2782
|
-
this.currentTime(0);
|
2783
|
-
this.play();
|
2784
|
-
}
|
2785
|
-
};
|
2786
3077
|
|
3078
|
+
/**
|
3079
|
+
* Fired when the user agent begins looking for media data
|
3080
|
+
* @event loadstart
|
3081
|
+
*/
|
3082
|
+
vjs.Player.prototype.onLoadStart;
|
3083
|
+
|
3084
|
+
/**
|
3085
|
+
* Fired when the player has initial duration and dimension information
|
3086
|
+
* @event loadedmetadata
|
3087
|
+
*/
|
3088
|
+
vjs.Player.prototype.onLoadedMetaData;
|
3089
|
+
|
3090
|
+
/**
|
3091
|
+
* Fired when the player has downloaded data at the current playback position
|
3092
|
+
* @event loadeddata
|
3093
|
+
*/
|
3094
|
+
vjs.Player.prototype.onLoadedData;
|
3095
|
+
|
3096
|
+
/**
|
3097
|
+
* Fired when the player has finished downloading the source data
|
3098
|
+
* @event loadedalldata
|
3099
|
+
*/
|
3100
|
+
vjs.Player.prototype.onLoadedAllData;
|
3101
|
+
|
3102
|
+
/**
|
3103
|
+
* Fired whenever the media begins or resumes playback
|
3104
|
+
* @event play
|
3105
|
+
*/
|
2787
3106
|
vjs.Player.prototype.onPlay = function(){
|
2788
3107
|
vjs.removeClass(this.el_, 'vjs-paused');
|
2789
3108
|
vjs.addClass(this.el_, 'vjs-playing');
|
2790
3109
|
};
|
2791
3110
|
|
3111
|
+
/**
|
3112
|
+
* Fired the first time a video is played
|
3113
|
+
*
|
3114
|
+
* Not part of the HLS spec, and we're not sure if this is the best
|
3115
|
+
* implementation yet, so use sparingly. If you don't have a reason to
|
3116
|
+
* prevent playback, use `myPlayer.one('play');` instead.
|
3117
|
+
*
|
3118
|
+
* @event firstplay
|
3119
|
+
*/
|
2792
3120
|
vjs.Player.prototype.onFirstPlay = function(){
|
2793
3121
|
//If the first starttime attribute is specified
|
2794
3122
|
//then we will start at the given offset in seconds
|
@@ -2799,11 +3127,28 @@ vjs.Player.prototype.onFirstPlay = function(){
|
|
2799
3127
|
this.addClass('vjs-has-started');
|
2800
3128
|
};
|
2801
3129
|
|
3130
|
+
/**
|
3131
|
+
* Fired whenever the media has been paused
|
3132
|
+
* @event pause
|
3133
|
+
*/
|
2802
3134
|
vjs.Player.prototype.onPause = function(){
|
2803
3135
|
vjs.removeClass(this.el_, 'vjs-playing');
|
2804
3136
|
vjs.addClass(this.el_, 'vjs-paused');
|
2805
3137
|
};
|
2806
3138
|
|
3139
|
+
/**
|
3140
|
+
* Fired when the current playback position has changed
|
3141
|
+
*
|
3142
|
+
* During playback this is fired every 15-250 milliseconds, depnding on the
|
3143
|
+
* playback technology in use.
|
3144
|
+
* @event timeupdate
|
3145
|
+
*/
|
3146
|
+
vjs.Player.prototype.onTimeUpdate;
|
3147
|
+
|
3148
|
+
/**
|
3149
|
+
* Fired while the user agent is downloading media data
|
3150
|
+
* @event progress
|
3151
|
+
*/
|
2807
3152
|
vjs.Player.prototype.onProgress = function(){
|
2808
3153
|
// Add custom event for when source is finished downloading.
|
2809
3154
|
if (this.bufferedPercent() == 1) {
|
@@ -2811,16 +3156,36 @@ vjs.Player.prototype.onProgress = function(){
|
|
2811
3156
|
}
|
2812
3157
|
};
|
2813
3158
|
|
2814
|
-
|
2815
|
-
|
3159
|
+
/**
|
3160
|
+
* Fired when the end of the media resource is reached (currentTime == duration)
|
3161
|
+
* @event ended
|
3162
|
+
*/
|
3163
|
+
vjs.Player.prototype.onEnded = function(){
|
3164
|
+
if (this.options_['loop']) {
|
3165
|
+
this.currentTime(0);
|
3166
|
+
this.play();
|
3167
|
+
}
|
3168
|
+
};
|
3169
|
+
|
3170
|
+
/**
|
3171
|
+
* Fired when the duration of the media resource is first known or changed
|
3172
|
+
* @event durationchange
|
3173
|
+
*/
|
2816
3174
|
vjs.Player.prototype.onDurationChange = function(){
|
3175
|
+
// Allows for cacheing value instead of asking player each time.
|
2817
3176
|
this.duration(this.techGet('duration'));
|
2818
3177
|
};
|
2819
3178
|
|
2820
|
-
|
2821
|
-
|
2822
|
-
|
3179
|
+
/**
|
3180
|
+
* Fired when the volume changes
|
3181
|
+
* @event volumechange
|
3182
|
+
*/
|
3183
|
+
vjs.Player.prototype.onVolumeChange;
|
2823
3184
|
|
3185
|
+
/**
|
3186
|
+
* Fired when the player switches in or out of fullscreen mode
|
3187
|
+
* @event fullscreenchange
|
3188
|
+
*/
|
2824
3189
|
vjs.Player.prototype.onFullscreenChange = function() {
|
2825
3190
|
if (this.isFullScreen) {
|
2826
3191
|
this.addClass('vjs-fullscreen');
|
@@ -2829,6 +3194,14 @@ vjs.Player.prototype.onFullscreenChange = function() {
|
|
2829
3194
|
}
|
2830
3195
|
};
|
2831
3196
|
|
3197
|
+
/**
|
3198
|
+
* Fired when there is an error in playback
|
3199
|
+
* @event error
|
3200
|
+
*/
|
3201
|
+
vjs.Player.prototype.onError = function(e) {
|
3202
|
+
vjs.log('Video Error', e);
|
3203
|
+
};
|
3204
|
+
|
2832
3205
|
// /* Player API
|
2833
3206
|
// ================================================================================ */
|
2834
3207
|
|
@@ -2892,55 +3265,89 @@ vjs.Player.prototype.techGet = function(method){
|
|
2892
3265
|
};
|
2893
3266
|
|
2894
3267
|
/**
|
2895
|
-
*
|
2896
|
-
*
|
2897
|
-
*
|
2898
|
-
*
|
2899
|
-
*
|
3268
|
+
* start media playback
|
3269
|
+
*
|
3270
|
+
* myPlayer.play();
|
3271
|
+
*
|
3272
|
+
* @return {vjs.Player} self
|
2900
3273
|
*/
|
2901
3274
|
vjs.Player.prototype.play = function(){
|
2902
3275
|
this.techCall('play');
|
2903
3276
|
return this;
|
2904
3277
|
};
|
2905
3278
|
|
2906
|
-
|
3279
|
+
/**
|
3280
|
+
* Pause the video playback
|
3281
|
+
*
|
3282
|
+
* myPlayer.pause();
|
3283
|
+
*
|
3284
|
+
* @return {vjs.Player} self
|
3285
|
+
*/
|
2907
3286
|
vjs.Player.prototype.pause = function(){
|
2908
3287
|
this.techCall('pause');
|
2909
3288
|
return this;
|
2910
3289
|
};
|
2911
3290
|
|
2912
|
-
|
2913
|
-
|
3291
|
+
/**
|
3292
|
+
* Check if the player is paused
|
3293
|
+
*
|
3294
|
+
* var isPaused = myPlayer.paused();
|
3295
|
+
* var isPlaying = !myPlayer.paused();
|
3296
|
+
*
|
3297
|
+
* @return {Boolean} false if the media is currently playing, or true otherwise
|
3298
|
+
*/
|
2914
3299
|
vjs.Player.prototype.paused = function(){
|
3300
|
+
// The initial state of paused should be true (in Safari it's actually false)
|
2915
3301
|
return (this.techGet('paused') === false) ? false : true;
|
2916
3302
|
};
|
2917
3303
|
|
2918
|
-
|
3304
|
+
/**
|
3305
|
+
* Get or set the current time (in seconds)
|
3306
|
+
*
|
3307
|
+
* // get
|
3308
|
+
* var whereYouAt = myPlayer.currentTime();
|
3309
|
+
*
|
3310
|
+
* // set
|
3311
|
+
* myPlayer.currentTime(120); // 2 minutes into the video
|
3312
|
+
*
|
3313
|
+
* @param {Number|String=} seconds The time to seek to
|
3314
|
+
* @return {Number} The time in seconds, when not setting
|
3315
|
+
* @return {vjs.Player} self, when the current time is set
|
3316
|
+
*/
|
2919
3317
|
vjs.Player.prototype.currentTime = function(seconds){
|
2920
3318
|
if (seconds !== undefined) {
|
2921
3319
|
|
2922
|
-
//
|
3320
|
+
// cache the last set value for smoother scrubbing
|
2923
3321
|
this.cache_.lastSetCurrentTime = seconds;
|
2924
3322
|
|
2925
3323
|
this.techCall('setCurrentTime', seconds);
|
2926
3324
|
|
2927
|
-
//
|
3325
|
+
// improve the accuracy of manual timeupdates
|
2928
3326
|
if (this.manualTimeUpdates) { this.trigger('timeupdate'); }
|
2929
3327
|
|
2930
3328
|
return this;
|
2931
3329
|
}
|
2932
3330
|
|
2933
|
-
//
|
2934
|
-
//
|
3331
|
+
// cache last currentTime and return
|
3332
|
+
// default to 0 seconds
|
2935
3333
|
return this.cache_.currentTime = (this.techGet('currentTime') || 0);
|
2936
3334
|
};
|
2937
3335
|
|
2938
|
-
|
2939
|
-
|
3336
|
+
/**
|
3337
|
+
* Get the length in time of the video in seconds
|
3338
|
+
*
|
3339
|
+
* var lengthOfVideo = myPlayer.duration();
|
3340
|
+
*
|
3341
|
+
* **NOTE**: The video must have started loading before the duration can be
|
3342
|
+
* known, and in the case of Flash, may not be known until the video starts
|
3343
|
+
* playing.
|
3344
|
+
*
|
3345
|
+
* @return {Number} The duration of the video in seconds
|
3346
|
+
*/
|
2940
3347
|
vjs.Player.prototype.duration = function(seconds){
|
2941
3348
|
if (seconds !== undefined) {
|
2942
3349
|
|
2943
|
-
//
|
3350
|
+
// cache the last set value for optimiized scrubbing (esp. Flash)
|
2944
3351
|
this.cache_.duration = parseFloat(seconds);
|
2945
3352
|
|
2946
3353
|
return this;
|
@@ -2962,6 +3369,27 @@ vjs.Player.prototype.remainingTime = function(){
|
|
2962
3369
|
// Buffered returns a timerange object.
|
2963
3370
|
// Kind of like an array of portions of the video that have been downloaded.
|
2964
3371
|
// So far no browsers return more than one range (portion)
|
3372
|
+
|
3373
|
+
/**
|
3374
|
+
* Get a TimeRange object with the times of the video that have been downloaded
|
3375
|
+
*
|
3376
|
+
* If you just want the percent of the video that's been downloaded,
|
3377
|
+
* use bufferedPercent.
|
3378
|
+
*
|
3379
|
+
* // Number of different ranges of time have been buffered. Usually 1.
|
3380
|
+
* numberOfRanges = bufferedTimeRange.length,
|
3381
|
+
*
|
3382
|
+
* // Time in seconds when the first range starts. Usually 0.
|
3383
|
+
* firstRangeStart = bufferedTimeRange.start(0),
|
3384
|
+
*
|
3385
|
+
* // Time in seconds when the first range ends
|
3386
|
+
* firstRangeEnd = bufferedTimeRange.end(0),
|
3387
|
+
*
|
3388
|
+
* // Length in seconds of the first time range
|
3389
|
+
* firstRangeLength = firstRangeEnd - firstRangeStart;
|
3390
|
+
*
|
3391
|
+
* @return {Object} A mock TimeRange object (following HTML spec)
|
3392
|
+
*/
|
2965
3393
|
vjs.Player.prototype.buffered = function(){
|
2966
3394
|
var buffered = this.techGet('buffered'),
|
2967
3395
|
start = 0,
|
@@ -2978,12 +3406,35 @@ vjs.Player.prototype.buffered = function(){
|
|
2978
3406
|
return vjs.createTimeRange(start, end);
|
2979
3407
|
};
|
2980
3408
|
|
2981
|
-
|
3409
|
+
/**
|
3410
|
+
* Get the percent (as a decimal) of the video that's been downloaded
|
3411
|
+
*
|
3412
|
+
* var howMuchIsDownloaded = myPlayer.bufferedPercent();
|
3413
|
+
*
|
3414
|
+
* 0 means none, 1 means all.
|
3415
|
+
* (This method isn't in the HTML5 spec, but it's very convenient)
|
3416
|
+
*
|
3417
|
+
* @return {Number} A decimal between 0 and 1 representing the percent
|
3418
|
+
*/
|
2982
3419
|
vjs.Player.prototype.bufferedPercent = function(){
|
2983
3420
|
return (this.duration()) ? this.buffered().end(0) / this.duration() : 0;
|
2984
3421
|
};
|
2985
3422
|
|
2986
|
-
|
3423
|
+
/**
|
3424
|
+
* Get or set the current volume of the media
|
3425
|
+
*
|
3426
|
+
* // get
|
3427
|
+
* var howLoudIsIt = myPlayer.volume();
|
3428
|
+
*
|
3429
|
+
* // set
|
3430
|
+
* myPlayer.volume(0.5); // Set volume to half
|
3431
|
+
*
|
3432
|
+
* 0 is off (muted), 1.0 is all the way up, 0.5 is half way.
|
3433
|
+
*
|
3434
|
+
* @param {Number} percentAsDecimal The new volume as a decimal percent
|
3435
|
+
* @return {Number} The current volume, when getting
|
3436
|
+
* @return {vjs.Player} self, when setting
|
3437
|
+
*/
|
2987
3438
|
vjs.Player.prototype.volume = function(percentAsDecimal){
|
2988
3439
|
var vol;
|
2989
3440
|
|
@@ -3000,7 +3451,20 @@ vjs.Player.prototype.volume = function(percentAsDecimal){
|
|
3000
3451
|
return (isNaN(vol)) ? 1 : vol;
|
3001
3452
|
};
|
3002
3453
|
|
3003
|
-
|
3454
|
+
|
3455
|
+
/**
|
3456
|
+
* Get the current muted state, or turn mute on or off
|
3457
|
+
*
|
3458
|
+
* // get
|
3459
|
+
* var isVolumeMuted = myPlayer.muted();
|
3460
|
+
*
|
3461
|
+
* // set
|
3462
|
+
* myPlayer.muted(true); // mute the volume
|
3463
|
+
*
|
3464
|
+
* @param {Boolean=} muted True to mute, false to unmute
|
3465
|
+
* @return {Boolean} True if mute is on, false if not, when getting
|
3466
|
+
* @return {vjs.Player} self, when setting mute
|
3467
|
+
*/
|
3004
3468
|
vjs.Player.prototype.muted = function(muted){
|
3005
3469
|
if (muted !== undefined) {
|
3006
3470
|
this.techCall('setMuted', muted);
|
@@ -3012,7 +3476,20 @@ vjs.Player.prototype.muted = function(muted){
|
|
3012
3476
|
// Check if current tech can support native fullscreen (e.g. with built in controls lik iOS, so not our flash swf)
|
3013
3477
|
vjs.Player.prototype.supportsFullScreen = function(){ return this.techGet('supportsFullScreen') || false; };
|
3014
3478
|
|
3015
|
-
|
3479
|
+
/**
|
3480
|
+
* Increase the size of the video to full screen
|
3481
|
+
*
|
3482
|
+
* myPlayer.requestFullScreen();
|
3483
|
+
*
|
3484
|
+
* In some browsers, full screen is not supported natively, so it enters
|
3485
|
+
* "full window mode", where the video fills the browser window.
|
3486
|
+
* In browsers and devices that support native full screen, sometimes the
|
3487
|
+
* browser's default controls will be shown, and not the Video.js custom skin.
|
3488
|
+
* This includes most mobile devices (iOS, Android) and older versions of
|
3489
|
+
* Safari.
|
3490
|
+
*
|
3491
|
+
* @return {vjs.Player} self
|
3492
|
+
*/
|
3016
3493
|
vjs.Player.prototype.requestFullScreen = function(){
|
3017
3494
|
var requestFullScreen = vjs.support.requestFullScreen;
|
3018
3495
|
this.isFullScreen = true;
|
@@ -3053,6 +3530,13 @@ vjs.Player.prototype.requestFullScreen = function(){
|
|
3053
3530
|
return this;
|
3054
3531
|
};
|
3055
3532
|
|
3533
|
+
/**
|
3534
|
+
* Return the video to its normal size after having been in full screen mode
|
3535
|
+
*
|
3536
|
+
* myPlayer.cancelFullScreen();
|
3537
|
+
*
|
3538
|
+
* @return {vjs.Player} self
|
3539
|
+
*/
|
3056
3540
|
vjs.Player.prototype.cancelFullScreen = function(){
|
3057
3541
|
var requestFullScreen = vjs.support.requestFullScreen;
|
3058
3542
|
this.isFullScreen = false;
|
@@ -3137,11 +3621,37 @@ vjs.Player.prototype.selectSource = function(sources){
|
|
3137
3621
|
return false;
|
3138
3622
|
};
|
3139
3623
|
|
3140
|
-
|
3141
|
-
|
3142
|
-
|
3143
|
-
|
3144
|
-
|
3624
|
+
/**
|
3625
|
+
* The source function updates the video source
|
3626
|
+
*
|
3627
|
+
* There are three types of variables you can pass as the argument.
|
3628
|
+
*
|
3629
|
+
* **URL String**: A URL to the the video file. Use this method if you are sure
|
3630
|
+
* the current playback technology (HTML5/Flash) can support the source you
|
3631
|
+
* provide. Currently only MP4 files can be used in both HTML5 and Flash.
|
3632
|
+
*
|
3633
|
+
* myPlayer.src("http://www.example.com/path/to/video.mp4");
|
3634
|
+
*
|
3635
|
+
* **Source Object (or element):** A javascript object containing information
|
3636
|
+
* about the source file. Use this method if you want the player to determine if
|
3637
|
+
* it can support the file using the type information.
|
3638
|
+
*
|
3639
|
+
* myPlayer.src({ type: "video/mp4", src: "http://www.example.com/path/to/video.mp4" });
|
3640
|
+
*
|
3641
|
+
* **Array of Source Objects:** To provide multiple versions of the source so
|
3642
|
+
* that it can be played using HTML5 across browsers you can use an array of
|
3643
|
+
* source objects. Video.js will detect which version is supported and load that
|
3644
|
+
* file.
|
3645
|
+
*
|
3646
|
+
* myPlayer.src([
|
3647
|
+
* { type: "video/mp4", src: "http://www.example.com/path/to/video.mp4" },
|
3648
|
+
* { type: "video/webm", src: "http://www.example.com/path/to/video.webm" },
|
3649
|
+
* { type: "video/ogg", src: "http://www.example.com/path/to/video.ogv" }
|
3650
|
+
* ]);
|
3651
|
+
*
|
3652
|
+
* @param {String|Object|Array=} source The source URL, object, or array of sources
|
3653
|
+
* @return {vjs.Player} self
|
3654
|
+
*/
|
3145
3655
|
vjs.Player.prototype.src = function(source){
|
3146
3656
|
// Case: Array of source objects to choose from and pick the best to play
|
3147
3657
|
if (source instanceof Array) {
|
@@ -3237,20 +3747,31 @@ vjs.Player.prototype.loop = function(value){
|
|
3237
3747
|
};
|
3238
3748
|
|
3239
3749
|
/**
|
3240
|
-
*
|
3750
|
+
* the url of the poster image source
|
3241
3751
|
* @type {String}
|
3242
3752
|
* @private
|
3243
3753
|
*/
|
3244
3754
|
vjs.Player.prototype.poster_;
|
3245
3755
|
|
3246
3756
|
/**
|
3247
|
-
*
|
3248
|
-
*
|
3249
|
-
*
|
3757
|
+
* get or set the poster image source url
|
3758
|
+
*
|
3759
|
+
* ##### EXAMPLE:
|
3760
|
+
*
|
3761
|
+
* // getting
|
3762
|
+
* var currentPoster = myPlayer.poster();
|
3763
|
+
*
|
3764
|
+
* // setting
|
3765
|
+
* myPlayer.poster('http://example.com/myImage.jpg');
|
3766
|
+
*
|
3767
|
+
* @param {String=} [src] Poster image source URL
|
3768
|
+
* @return {String} poster URL when getting
|
3769
|
+
* @return {vjs.Player} self when setting
|
3250
3770
|
*/
|
3251
3771
|
vjs.Player.prototype.poster = function(src){
|
3252
3772
|
if (src !== undefined) {
|
3253
3773
|
this.poster_ = src;
|
3774
|
+
return this;
|
3254
3775
|
}
|
3255
3776
|
return this.poster_;
|
3256
3777
|
};
|
@@ -3300,6 +3821,7 @@ vjs.Player.prototype.usingNativeControls_;
|
|
3300
3821
|
*
|
3301
3822
|
* @param {Boolean} bool True signals that native controls are on
|
3302
3823
|
* @return {vjs.Player} Returns the player
|
3824
|
+
* @private
|
3303
3825
|
*/
|
3304
3826
|
vjs.Player.prototype.usingNativeControls = function(bool){
|
3305
3827
|
if (bool !== undefined) {
|
@@ -3309,9 +3831,27 @@ vjs.Player.prototype.usingNativeControls = function(bool){
|
|
3309
3831
|
this.usingNativeControls_ = bool;
|
3310
3832
|
if (bool) {
|
3311
3833
|
this.addClass('vjs-using-native-controls');
|
3834
|
+
|
3835
|
+
/**
|
3836
|
+
* player is using the native device controls
|
3837
|
+
*
|
3838
|
+
* @event usingnativecontrols
|
3839
|
+
* @memberof vjs.Player
|
3840
|
+
* @instance
|
3841
|
+
* @private
|
3842
|
+
*/
|
3312
3843
|
this.trigger('usingnativecontrols');
|
3313
3844
|
} else {
|
3314
3845
|
this.removeClass('vjs-using-native-controls');
|
3846
|
+
|
3847
|
+
/**
|
3848
|
+
* player is using the custom HTML controls
|
3849
|
+
*
|
3850
|
+
* @event usingcustomcontrols
|
3851
|
+
* @memberof vjs.Player
|
3852
|
+
* @instance
|
3853
|
+
* @private
|
3854
|
+
*/
|
3315
3855
|
this.trigger('usingcustomcontrols');
|
3316
3856
|
}
|
3317
3857
|
}
|
@@ -3523,7 +4063,9 @@ vjs.Player.prototype.listenForUserActivity = function(){
|
|
3523
4063
|
* Container of main controls
|
3524
4064
|
* @param {vjs.Player|Object} player
|
3525
4065
|
* @param {Object=} options
|
4066
|
+
* @class
|
3526
4067
|
* @constructor
|
4068
|
+
* @extends vjs.Component
|
3527
4069
|
*/
|
3528
4070
|
vjs.ControlBar = vjs.Component.extend();
|
3529
4071
|
|
@@ -3552,6 +4094,7 @@ vjs.ControlBar.prototype.createEl = function(){
|
|
3552
4094
|
* Button to toggle between play and pause
|
3553
4095
|
* @param {vjs.Player|Object} player
|
3554
4096
|
* @param {Object=} options
|
4097
|
+
* @class
|
3555
4098
|
* @constructor
|
3556
4099
|
*/
|
3557
4100
|
vjs.PlayToggle = vjs.Button.extend({
|
@@ -3570,7 +4113,7 @@ vjs.PlayToggle.prototype.buildCSSClass = function(){
|
|
3570
4113
|
return 'vjs-play-control ' + vjs.Button.prototype.buildCSSClass.call(this);
|
3571
4114
|
};
|
3572
4115
|
|
3573
|
-
|
4116
|
+
// OnClick - Toggle between play and pause
|
3574
4117
|
vjs.PlayToggle.prototype.onClick = function(){
|
3575
4118
|
if (this.player_.paused()) {
|
3576
4119
|
this.player_.play();
|
@@ -3591,7 +4134,8 @@ vjs.PlayToggle.prototype.onPause = function(){
|
|
3591
4134
|
vjs.removeClass(this.el_, 'vjs-playing');
|
3592
4135
|
vjs.addClass(this.el_, 'vjs-paused');
|
3593
4136
|
this.el_.children[0].children[0].innerHTML = 'Play'; // change the button text to "Play"
|
3594
|
-
}
|
4137
|
+
};
|
4138
|
+
/**
|
3595
4139
|
* Displays the current time
|
3596
4140
|
* @param {vjs.Player|Object} player
|
3597
4141
|
* @param {Object=} options
|
@@ -3665,7 +4209,10 @@ vjs.DurationDisplay.prototype.updateContent = function(){
|
|
3665
4209
|
};
|
3666
4210
|
|
3667
4211
|
/**
|
3668
|
-
*
|
4212
|
+
* The separator between the current time and duration
|
4213
|
+
*
|
4214
|
+
* Can be hidden if it's not needed in the design.
|
4215
|
+
*
|
3669
4216
|
* @param {vjs.Player|Object} player
|
3670
4217
|
* @param {Object=} options
|
3671
4218
|
* @constructor
|
@@ -3727,10 +4274,15 @@ vjs.RemainingTimeDisplay.prototype.updateContent = function(){
|
|
3727
4274
|
* Toggle fullscreen video
|
3728
4275
|
* @param {vjs.Player|Object} player
|
3729
4276
|
* @param {Object=} options
|
3730
|
-
* @
|
4277
|
+
* @class
|
4278
|
+
* @extends vjs.Button
|
3731
4279
|
*/
|
3732
4280
|
vjs.FullscreenToggle = vjs.Button.extend({
|
3733
|
-
/**
|
4281
|
+
/**
|
4282
|
+
* @constructor
|
4283
|
+
* @memberof vjs.FullscreenToggle
|
4284
|
+
* @instance
|
4285
|
+
*/
|
3734
4286
|
init: function(player, options){
|
3735
4287
|
vjs.Button.call(this, player, options);
|
3736
4288
|
}
|
@@ -3750,8 +4302,11 @@ vjs.FullscreenToggle.prototype.onClick = function(){
|
|
3750
4302
|
this.player_.cancelFullScreen();
|
3751
4303
|
this.el_.children[0].children[0].innerHTML = 'Fullscreen'; // change the button to "Fullscreen"
|
3752
4304
|
}
|
3753
|
-
}
|
3754
|
-
|
4305
|
+
};
|
4306
|
+
/**
|
4307
|
+
* The Progress Control component contains the seek bar, load progress,
|
4308
|
+
* and play progress
|
4309
|
+
*
|
3755
4310
|
* @param {vjs.Player|Object} player
|
3756
4311
|
* @param {Object=} options
|
3757
4312
|
* @constructor
|
@@ -3777,6 +4332,7 @@ vjs.ProgressControl.prototype.createEl = function(){
|
|
3777
4332
|
|
3778
4333
|
/**
|
3779
4334
|
* Seek Bar and holder for the progress bars
|
4335
|
+
*
|
3780
4336
|
* @param {vjs.Player|Object} player
|
3781
4337
|
* @param {Object=} options
|
3782
4338
|
* @constructor
|
@@ -3876,7 +4432,8 @@ vjs.SeekBar.prototype.stepBack = function(){
|
|
3876
4432
|
|
3877
4433
|
|
3878
4434
|
/**
|
3879
|
-
* Shows load
|
4435
|
+
* Shows load progress
|
4436
|
+
*
|
3880
4437
|
* @param {vjs.Player|Object} player
|
3881
4438
|
* @param {Object=} options
|
3882
4439
|
* @constructor
|
@@ -3903,6 +4460,7 @@ vjs.LoadProgressBar.prototype.update = function(){
|
|
3903
4460
|
|
3904
4461
|
/**
|
3905
4462
|
* Shows play progress
|
4463
|
+
*
|
3906
4464
|
* @param {vjs.Player|Object} player
|
3907
4465
|
* @param {Object=} options
|
3908
4466
|
* @constructor
|
@@ -3922,15 +4480,21 @@ vjs.PlayProgressBar.prototype.createEl = function(){
|
|
3922
4480
|
};
|
3923
4481
|
|
3924
4482
|
/**
|
3925
|
-
*
|
3926
|
-
*
|
4483
|
+
* The Seek Handle shows the current position of the playhead during playback,
|
4484
|
+
* and can be dragged to adjust the playhead.
|
4485
|
+
*
|
3927
4486
|
* @param {vjs.Player|Object} player
|
3928
4487
|
* @param {Object=} options
|
3929
4488
|
* @constructor
|
3930
4489
|
*/
|
3931
4490
|
vjs.SeekHandle = vjs.SliderHandle.extend();
|
3932
4491
|
|
3933
|
-
/**
|
4492
|
+
/**
|
4493
|
+
* The default value for the handle content, which may be read by screen readers
|
4494
|
+
*
|
4495
|
+
* @type {String}
|
4496
|
+
* @private
|
4497
|
+
*/
|
3934
4498
|
vjs.SeekHandle.prototype.defaultValue = '00:00';
|
3935
4499
|
|
3936
4500
|
/** @inheritDoc */
|
@@ -3938,8 +4502,10 @@ vjs.SeekHandle.prototype.createEl = function(){
|
|
3938
4502
|
return vjs.SliderHandle.prototype.createEl.call(this, 'div', {
|
3939
4503
|
className: 'vjs-seek-handle'
|
3940
4504
|
});
|
3941
|
-
}
|
3942
|
-
|
4505
|
+
};
|
4506
|
+
/**
|
4507
|
+
* The component for controlling the volume level
|
4508
|
+
*
|
3943
4509
|
* @param {vjs.Player|Object} player
|
3944
4510
|
* @param {Object=} options
|
3945
4511
|
* @constructor
|
@@ -3976,7 +4542,8 @@ vjs.VolumeControl.prototype.createEl = function(){
|
|
3976
4542
|
};
|
3977
4543
|
|
3978
4544
|
/**
|
3979
|
-
*
|
4545
|
+
* The bar that contains the volume level and can be clicked on to adjust the level
|
4546
|
+
*
|
3980
4547
|
* @param {vjs.Player|Object} player
|
3981
4548
|
* @param {Object=} options
|
3982
4549
|
* @constructor
|
@@ -4016,6 +4583,10 @@ vjs.VolumeBar.prototype.createEl = function(){
|
|
4016
4583
|
};
|
4017
4584
|
|
4018
4585
|
vjs.VolumeBar.prototype.onMouseMove = function(event) {
|
4586
|
+
if (this.player_.muted()) {
|
4587
|
+
this.player_.muted(false);
|
4588
|
+
}
|
4589
|
+
|
4019
4590
|
this.player_.volume(this.calculateDistance(event));
|
4020
4591
|
};
|
4021
4592
|
|
@@ -4037,6 +4608,7 @@ vjs.VolumeBar.prototype.stepBack = function(){
|
|
4037
4608
|
|
4038
4609
|
/**
|
4039
4610
|
* Shows volume level
|
4611
|
+
*
|
4040
4612
|
* @param {vjs.Player|Object} player
|
4041
4613
|
* @param {Object=} options
|
4042
4614
|
* @constructor
|
@@ -4056,14 +4628,14 @@ vjs.VolumeLevel.prototype.createEl = function(){
|
|
4056
4628
|
};
|
4057
4629
|
|
4058
4630
|
/**
|
4059
|
-
*
|
4631
|
+
* The volume handle can be dragged to adjust the volume level
|
4632
|
+
*
|
4060
4633
|
* @param {vjs.Player|Object} player
|
4061
4634
|
* @param {Object=} options
|
4062
4635
|
* @constructor
|
4063
4636
|
*/
|
4064
4637
|
vjs.VolumeHandle = vjs.SliderHandle.extend();
|
4065
4638
|
|
4066
|
-
/** @inheritDoc */
|
4067
4639
|
vjs.VolumeHandle.prototype.defaultValue = '00:00';
|
4068
4640
|
|
4069
4641
|
/** @inheritDoc */
|
@@ -4073,7 +4645,8 @@ vjs.VolumeLevel.prototype.createEl = function(){
|
|
4073
4645
|
});
|
4074
4646
|
};
|
4075
4647
|
/**
|
4076
|
-
*
|
4648
|
+
* A button component for muting the audio
|
4649
|
+
*
|
4077
4650
|
* @param {vjs.Player|Object} player
|
4078
4651
|
* @param {Object=} options
|
4079
4652
|
* @constructor
|
@@ -4192,7 +4765,8 @@ vjs.VolumeMenuButton.prototype.update = vjs.MuteToggle.prototype.update;
|
|
4192
4765
|
/* Poster Image
|
4193
4766
|
================================================================================ */
|
4194
4767
|
/**
|
4195
|
-
*
|
4768
|
+
* The component that handles showing the poster image.
|
4769
|
+
*
|
4196
4770
|
* @param {vjs.Player|Object} player
|
4197
4771
|
* @param {Object=} options
|
4198
4772
|
* @constructor
|
@@ -4242,6 +4816,7 @@ vjs.PosterImage.prototype.onClick = function(){
|
|
4242
4816
|
* Loading spinner for waiting events
|
4243
4817
|
* @param {vjs.Player|Object} player
|
4244
4818
|
* @param {Object=} options
|
4819
|
+
* @class
|
4245
4820
|
* @constructor
|
4246
4821
|
*/
|
4247
4822
|
vjs.LoadingSpinner = vjs.Component.extend({
|
@@ -4283,6 +4858,7 @@ vjs.LoadingSpinner.prototype.createEl = function(){
|
|
4283
4858
|
* big play button is done via CSS and player states.
|
4284
4859
|
* @param {vjs.Player|Object} player
|
4285
4860
|
* @param {Object=} options
|
4861
|
+
* @class
|
4286
4862
|
* @constructor
|
4287
4863
|
*/
|
4288
4864
|
vjs.BigPlayButton = vjs.Button.extend();
|
@@ -4290,7 +4866,7 @@ vjs.BigPlayButton = vjs.Button.extend();
|
|
4290
4866
|
vjs.BigPlayButton.prototype.createEl = function(){
|
4291
4867
|
return vjs.Button.prototype.createEl.call(this, 'div', {
|
4292
4868
|
className: 'vjs-big-play-button',
|
4293
|
-
innerHTML: '<span></span>',
|
4869
|
+
innerHTML: '<span aria-hidden="true"></span>',
|
4294
4870
|
'aria-label': 'play video'
|
4295
4871
|
});
|
4296
4872
|
};
|
@@ -4784,8 +5360,9 @@ if (vjs.IS_OLD_ANDROID) {
|
|
4784
5360
|
*/
|
4785
5361
|
|
4786
5362
|
/**
|
4787
|
-
*
|
4788
|
-
*
|
5363
|
+
* Flash Media Controller - Wrapper for fallback SWF API
|
5364
|
+
*
|
5365
|
+
* @param {vjs.Player} player
|
4789
5366
|
* @param {Object=} options
|
4790
5367
|
* @param {Function=} ready
|
4791
5368
|
* @constructor
|
@@ -5072,6 +5649,7 @@ var api = vjs.Flash.prototype,
|
|
5072
5649
|
|
5073
5650
|
/**
|
5074
5651
|
* @this {*}
|
5652
|
+
* @private
|
5075
5653
|
*/
|
5076
5654
|
var createSetter = function(attr){
|
5077
5655
|
var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);
|
@@ -5080,6 +5658,7 @@ var createSetter = function(attr){
|
|
5080
5658
|
|
5081
5659
|
/**
|
5082
5660
|
* @this {*}
|
5661
|
+
* @private
|
5083
5662
|
*/
|
5084
5663
|
var createGetter = function(attr){
|
5085
5664
|
api[attr] = function(){ return this.el_.vjs_getProperty(attr); };
|
@@ -5107,7 +5686,16 @@ vjs.Flash.isSupported = function(){
|
|
5107
5686
|
};
|
5108
5687
|
|
5109
5688
|
vjs.Flash.canPlaySource = function(srcObj){
|
5110
|
-
|
5689
|
+
var type;
|
5690
|
+
|
5691
|
+
if (!srcObj.type) {
|
5692
|
+
return '';
|
5693
|
+
}
|
5694
|
+
|
5695
|
+
type = srcObj.type.replace(/;.*/,'').toLowerCase();
|
5696
|
+
if (type in vjs.Flash.formats || type in vjs.Flash.streamingFormats) {
|
5697
|
+
return 'maybe';
|
5698
|
+
}
|
5111
5699
|
};
|
5112
5700
|
|
5113
5701
|
vjs.Flash.formats = {
|
@@ -5307,6 +5895,9 @@ vjs.Flash.isStreamingSrc = function(src) {
|
|
5307
5895
|
return vjs.Flash.RTMP_RE.test(src);
|
5308
5896
|
};
|
5309
5897
|
/**
|
5898
|
+
* The Media Loader is the component that decides which playback technology to load
|
5899
|
+
* when the player is initialized.
|
5900
|
+
*
|
5310
5901
|
* @constructor
|
5311
5902
|
*/
|
5312
5903
|
vjs.MediaLoader = vjs.Component.extend({
|
@@ -5335,7 +5926,8 @@ vjs.MediaLoader = vjs.Component.extend({
|
|
5335
5926
|
player.src(player.options_['sources']);
|
5336
5927
|
}
|
5337
5928
|
}
|
5338
|
-
})
|
5929
|
+
});
|
5930
|
+
/**
|
5339
5931
|
* @fileoverview Text Tracks
|
5340
5932
|
* Text tracks are tracks of timed text events.
|
5341
5933
|
* Captions - text displayed over the video for the hearing impared
|
@@ -5357,6 +5949,7 @@ vjs.Player.prototype.textTracks_;
|
|
5357
5949
|
* Get an array of associated text tracks. captions, subtitles, chapters, descriptions
|
5358
5950
|
* http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks
|
5359
5951
|
* @return {Array} Array of track objects
|
5952
|
+
* @private
|
5360
5953
|
*/
|
5361
5954
|
vjs.Player.prototype.textTracks = function(){
|
5362
5955
|
this.textTracks_ = this.textTracks_ || [];
|
@@ -5371,6 +5964,7 @@ vjs.Player.prototype.textTracks = function(){
|
|
5371
5964
|
* @param {String=} label Optional label
|
5372
5965
|
* @param {String=} language Optional language
|
5373
5966
|
* @param {Object=} options Additional track options, like src
|
5967
|
+
* @private
|
5374
5968
|
*/
|
5375
5969
|
vjs.Player.prototype.addTextTrack = function(kind, label, language, options){
|
5376
5970
|
var tracks = this.textTracks_ = this.textTracks_ || [];
|
@@ -5404,6 +5998,7 @@ vjs.Player.prototype.addTextTrack = function(kind, label, language, options){
|
|
5404
5998
|
* Add an array of text tracks. captions, subtitles, chapters, descriptions
|
5405
5999
|
* Track objects will be stored in the player.textTracks() array
|
5406
6000
|
* @param {Array} trackList Array of track elements or objects (fake track elements)
|
6001
|
+
* @private
|
5407
6002
|
*/
|
5408
6003
|
vjs.Player.prototype.addTextTracks = function(trackList){
|
5409
6004
|
var trackObj;
|
@@ -5449,8 +6044,10 @@ vjs.Player.prototype.showTextTrack = function(id, disableSameKind){
|
|
5449
6044
|
};
|
5450
6045
|
|
5451
6046
|
/**
|
5452
|
-
*
|
5453
|
-
*
|
6047
|
+
* The base class for all text tracks
|
6048
|
+
*
|
6049
|
+
* Handles the parsing, hiding, and showing of text track cues
|
6050
|
+
*
|
5454
6051
|
* @param {vjs.Player|Object} player
|
5455
6052
|
* @param {Object=} options
|
5456
6053
|
* @constructor
|
@@ -5516,8 +6113,7 @@ vjs.TextTrack.prototype.src = function(){
|
|
5516
6113
|
vjs.TextTrack.prototype.dflt_;
|
5517
6114
|
|
5518
6115
|
/**
|
5519
|
-
* Get the track default value
|
5520
|
-
* 'default' is a reserved keyword
|
6116
|
+
* Get the track default value. ('default' is a reserved keyword)
|
5521
6117
|
* @return {Boolean}
|
5522
6118
|
*/
|
5523
6119
|
vjs.TextTrack.prototype.dflt = function(){
|
@@ -6005,6 +6601,8 @@ vjs.TextTrack.prototype.reset = function(){
|
|
6005
6601
|
|
6006
6602
|
// Create specific track types
|
6007
6603
|
/**
|
6604
|
+
* The track component for managing the hiding and showing of captions
|
6605
|
+
*
|
6008
6606
|
* @constructor
|
6009
6607
|
*/
|
6010
6608
|
vjs.CaptionsTrack = vjs.TextTrack.extend();
|
@@ -6013,12 +6611,16 @@ vjs.CaptionsTrack.prototype.kind_ = 'captions';
|
|
6013
6611
|
// to be available on global object. e.g. new window['videojs'][Kind + 'Track']
|
6014
6612
|
|
6015
6613
|
/**
|
6614
|
+
* The track component for managing the hiding and showing of subtitles
|
6615
|
+
*
|
6016
6616
|
* @constructor
|
6017
6617
|
*/
|
6018
6618
|
vjs.SubtitlesTrack = vjs.TextTrack.extend();
|
6019
6619
|
vjs.SubtitlesTrack.prototype.kind_ = 'subtitles';
|
6020
6620
|
|
6021
6621
|
/**
|
6622
|
+
* The track component for managing the hiding and showing of chapters
|
6623
|
+
*
|
6022
6624
|
* @constructor
|
6023
6625
|
*/
|
6024
6626
|
vjs.ChaptersTrack = vjs.TextTrack.extend();
|
@@ -6030,6 +6632,8 @@ vjs.ChaptersTrack.prototype.kind_ = 'chapters';
|
|
6030
6632
|
// Global container for both subtitle and captions text. Simple div container.
|
6031
6633
|
|
6032
6634
|
/**
|
6635
|
+
* The component for displaying text track cues
|
6636
|
+
*
|
6033
6637
|
* @constructor
|
6034
6638
|
*/
|
6035
6639
|
vjs.TextTrackDisplay = vjs.Component.extend({
|
@@ -6054,9 +6658,9 @@ vjs.TextTrackDisplay.prototype.createEl = function(){
|
|
6054
6658
|
};
|
6055
6659
|
|
6056
6660
|
|
6057
|
-
/* Text Track Menu Items
|
6058
|
-
============================================================================= */
|
6059
6661
|
/**
|
6662
|
+
* The specific menu item type for selecting a language within a text track kind
|
6663
|
+
*
|
6060
6664
|
* @constructor
|
6061
6665
|
*/
|
6062
6666
|
vjs.TextTrackMenuItem = vjs.MenuItem.extend({
|
@@ -6083,6 +6687,8 @@ vjs.TextTrackMenuItem.prototype.update = function(){
|
|
6083
6687
|
};
|
6084
6688
|
|
6085
6689
|
/**
|
6690
|
+
* A special menu item for turning of a specific type of text track
|
6691
|
+
*
|
6086
6692
|
* @constructor
|
6087
6693
|
*/
|
6088
6694
|
vjs.OffTextTrackMenuItem = vjs.TextTrackMenuItem.extend({
|
@@ -6122,9 +6728,9 @@ vjs.OffTextTrackMenuItem.prototype.update = function(){
|
|
6122
6728
|
this.selected(off);
|
6123
6729
|
};
|
6124
6730
|
|
6125
|
-
/* Captions Button
|
6126
|
-
================================================================================ */
|
6127
6731
|
/**
|
6732
|
+
* The base class for buttons that toggle specific text track types (e.g. subtitles)
|
6733
|
+
*
|
6128
6734
|
* @constructor
|
6129
6735
|
*/
|
6130
6736
|
vjs.TextTrackButton = vjs.MenuButton.extend({
|
@@ -6183,6 +6789,8 @@ vjs.TextTrackButton.prototype.createItems = function(){
|
|
6183
6789
|
};
|
6184
6790
|
|
6185
6791
|
/**
|
6792
|
+
* The button component for toggling and selecting captions
|
6793
|
+
*
|
6186
6794
|
* @constructor
|
6187
6795
|
*/
|
6188
6796
|
vjs.CaptionsButton = vjs.TextTrackButton.extend({
|
@@ -6197,6 +6805,8 @@ vjs.CaptionsButton.prototype.buttonText = 'Captions';
|
|
6197
6805
|
vjs.CaptionsButton.prototype.className = 'vjs-captions-button';
|
6198
6806
|
|
6199
6807
|
/**
|
6808
|
+
* The button component for toggling and selecting subtitles
|
6809
|
+
*
|
6200
6810
|
* @constructor
|
6201
6811
|
*/
|
6202
6812
|
vjs.SubtitlesButton = vjs.TextTrackButton.extend({
|
@@ -6213,6 +6823,8 @@ vjs.SubtitlesButton.prototype.className = 'vjs-subtitles-button';
|
|
6213
6823
|
// Chapters act much differently than other text tracks
|
6214
6824
|
// Cues are navigation vs. other tracks of alternative languages
|
6215
6825
|
/**
|
6826
|
+
* The button component for toggling and selecting chapters
|
6827
|
+
*
|
6216
6828
|
* @constructor
|
6217
6829
|
*/
|
6218
6830
|
vjs.ChaptersButton = vjs.TextTrackButton.extend({
|
@@ -6355,14 +6967,12 @@ vjs.obj.merge(vjs.ControlBar.prototype.options_['children'], {
|
|
6355
6967
|
* (Parse Method Only)
|
6356
6968
|
* https://github.com/douglascrockford/JSON-js/blob/master/json2.js
|
6357
6969
|
* Only using for parse method when parsing data-setup attribute JSON.
|
6358
|
-
* @type {Object}
|
6359
6970
|
* @suppress {undefinedVars}
|
6971
|
+
* @namespace
|
6972
|
+
* @private
|
6360
6973
|
*/
|
6361
6974
|
vjs.JSON;
|
6362
6975
|
|
6363
|
-
/**
|
6364
|
-
* @suppress {undefinedVars}
|
6365
|
-
*/
|
6366
6976
|
if (typeof window.JSON !== 'undefined' && window.JSON.parse === 'function') {
|
6367
6977
|
vjs.JSON = window.JSON;
|
6368
6978
|
|
@@ -6371,6 +6981,12 @@ if (typeof window.JSON !== 'undefined' && window.JSON.parse === 'function') {
|
|
6371
6981
|
|
6372
6982
|
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
|
6373
6983
|
|
6984
|
+
/**
|
6985
|
+
* parse the json
|
6986
|
+
*
|
6987
|
+
* @memberof vjs.JSON
|
6988
|
+
* @return {Object|Array} The parsed JSON
|
6989
|
+
*/
|
6374
6990
|
vjs.JSON.parse = function (text, reviver) {
|
6375
6991
|
var j;
|
6376
6992
|
|
@@ -6479,6 +7095,12 @@ if (document.readyState === 'complete') {
|
|
6479
7095
|
// Run Auto-load players
|
6480
7096
|
// 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)
|
6481
7097
|
vjs.autoSetupTimeout(1);
|
7098
|
+
/**
|
7099
|
+
* the method for registering a video.js plugin
|
7100
|
+
*
|
7101
|
+
* @param {String} name The name of the plugin
|
7102
|
+
* @param {Function} init The function that is run when the player inits
|
7103
|
+
*/
|
6482
7104
|
vjs.plugin = function(name, init){
|
6483
7105
|
vjs.Player.prototype[name] = init;
|
6484
7106
|
};
|