Video Embed & Thumbnail Generator - Version 4.6

Version Description

It's safe to update. The plugin is still completely free until version 5.0. Video.js users will notice an updated player design.

Download this release

Release Info

Developer kylegilman
Plugin Icon 128x128 Video Embed & Thumbnail Generator
Version 4.6
Comparing to
See all releases

Code changes from version 4.5.5 to 4.6

Files changed (49) hide show
  1. css/kgvid_styles.css +266 -62
  2. css/video-embed-thumbnail-generator_admin.css +9 -3
  3. js/kgvid_video_embed.js +320 -96
  4. js/kgvid_video_plugin_admin.js +301 -130
  5. js/mep-feature-sourcechooser.js +154 -0
  6. languages/video-embed-thumbnail-generator-es_ES.mo +0 -0
  7. languages/video-embed-thumbnail-generator-es_ES.po +0 -2378
  8. readme.txt +57 -327
  9. video-embed-thumbnail-generator.php +1573 -664
  10. video-js/font/VideoJS.eot +0 -0
  11. video-js/font/VideoJS.svg +99 -0
  12. video-js/font/VideoJS.ttf +0 -0
  13. video-js/font/VideoJS.woff +0 -0
  14. video-js/font/vjs.eot +0 -0
  15. video-js/font/vjs.svg +0 -28
  16. video-js/font/vjs.ttf +0 -0
  17. video-js/font/vjs.woff +0 -0
  18. video-js/kg-video-js-skin.css +81 -1015
  19. video-js/lang/ar.js +5 -5
  20. video-js/lang/ba.js +26 -0
  21. video-js/lang/bg.js +5 -5
  22. video-js/lang/ca.js +5 -5
  23. video-js/lang/cs.js +5 -5
  24. video-js/lang/da.js +26 -0
  25. video-js/lang/de.js +5 -5
  26. video-js/lang/es.js +5 -5
  27. video-js/lang/fi.js +26 -0
  28. video-js/lang/fr.js +5 -5
  29. video-js/lang/hr.js +26 -0
  30. video-js/lang/hu.js +5 -5
  31. video-js/lang/it.js +5 -5
  32. video-js/lang/ja.js +5 -5
  33. video-js/lang/ko.js +5 -5
  34. video-js/lang/nb.js +26 -0
  35. video-js/lang/nl.js +13 -13
  36. video-js/lang/nn.js +26 -0
  37. video-js/lang/pt-BR.js +6 -6
  38. video-js/lang/ru.js +5 -5
  39. video-js/lang/sr.js +26 -0
  40. video-js/lang/sv.js +26 -0
  41. video-js/lang/tr.js +5 -5
  42. video-js/lang/uk.js +5 -5
  43. video-js/lang/vi.js +5 -5
  44. video-js/lang/zh-CN.js +6 -6
  45. video-js/lang/zh-TW.js +6 -6
  46. video-js/video-js.css +1 -5
  47. video-js/video-js.swf +0 -0
  48. video-js/video-quality-selector.js +72 -29
  49. video-js/video.js +24 -202
css/kgvid_styles.css CHANGED
@@ -89,7 +89,6 @@ img.kgvid_ios_novideo {
89
  }
90
 
91
  .kgvid_video_meta {
92
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
93
  line-height: normal;
94
  color: white;
95
  display: block;
@@ -113,34 +112,155 @@ img.kgvid_ios_novideo {
113
  visibility: visible;
114
  }
115
 
 
 
 
 
116
  .kgvid_title {
117
- height: 12pt;
118
- font-size: 10pt;
119
- overflow: hidden;
120
- padding-top: 1px;
121
- padding-left: 4px;
122
- margin: 6px;
123
- width: auto;
124
  }
125
 
126
- .kgvid_video_meta input {
127
- display: inline-block !important;
128
- color: #eee !important;
129
- width: 100px !important;
130
- font: 10px "Helvetica Neue", Helvetica, Arial, sans-serif !important;
131
- line-height: 1.6em !important;
132
- background-color: #999 !important;
133
- border: none !important;
134
- -moz-border-radius: 5px !important;
135
- border-radius: 5px !important;
136
- padding: 2px !important;
137
- margin: 0px !important;
138
  }
139
 
140
- .kgvid_share {
141
- font-size: 10px;
142
- float: right;
143
- margin: 6px 6px 6px 12px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  }
145
 
146
  .kgvid_below_video {
@@ -225,43 +345,41 @@ img.kgvid_ios_novideo {
225
  #kgvid-simplemodal-container { color:black; background-color:#000; height:auto; }
226
  #kgvid-simplemodal-container .simplemodal-data {margin-top:-1em; padding:5px;}
227
  #kgvid-simplemodal-container a.modalCloseImg {
228
- width: 17px;
229
- height: 17px;
230
- display: inline;
231
- z-index: 10003;
232
- position: absolute;
233
- top: -22px;
234
- right: 0px;
235
- cursor: pointer;
236
- text-align: center;
237
- font-size: 10px;
238
- border: 1px solid #888;
239
- border-radius: 5px;
240
- background-color: #666;
241
- color: #ccc;
242
- font-family: Arial, sans-serif;
243
- line-height: 17px;
244
- font-weight: 900;
245
- text-decoration: none;
246
  }
247
 
248
  #kgvid-simplemodal-container .kgvid_gallery_nav {
249
  cursor: pointer;
250
- display: inline-block;
251
- width: 26px;
252
- height: 14px;
253
- background-color: #666;
254
- text-align: center;
255
- color: #ccc;
256
- border-radius: 5px;
257
- font-family: Arial, sans-serif;
258
- font-size: 16px;
259
- font-weight: 900;
260
- border: 1px solid #888;
261
- line-height: 12px;
262
- z-index: 10003;
263
- position: absolute;
264
- text-decoration: none;
265
  }
266
 
267
  #kgvid-simplemodal-container .wp-video {
@@ -269,17 +387,16 @@ img.kgvid_ios_novideo {
269
  }
270
 
271
  .kgvid_gallery_prev {
272
- top: -20px;
273
- right: 58px;
274
  }
275
 
276
  .kgvid_gallery_next {
277
- top: -20px;
278
  right: 25px;
279
  }
280
 
281
  #kgvid-simplemodal-container a.modalCloseImg:hover, #kgvid-simplemodal-container .kgvid_gallery_nav:hover {
282
- background-color: #555;
 
283
  }
284
 
285
  .kgvid_gallery_pagination span {
@@ -313,6 +430,16 @@ span.kgvid_gallery_pagination_arrow {
313
  text-decoration: none;
314
  }
315
 
 
 
 
 
 
 
 
 
 
 
316
  /* video-quality-selector Video.js plugin styles */
317
 
318
  .vjs-res-button span.vjs-control-text {
@@ -320,7 +447,12 @@ span.kgvid_gallery_pagination_arrow {
320
  }
321
 
322
  .vjs-res-button:before {
323
- content: "\e600"; /* Gear icon */
 
 
 
 
 
324
  }
325
 
326
 
@@ -341,3 +473,75 @@ ul li.vjs-menu-title.vjs-res-menu-title:hover {
341
  height: auto;
342
  clip: auto;
343
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  }
90
 
91
  .kgvid_video_meta {
 
92
  line-height: normal;
93
  color: white;
94
  display: block;
112
  visibility: visible;
113
  }
114
 
115
+ .kgvid_video_meta.kgvid_no_title_meta {
116
+ background: none;
117
+ }
118
+
119
  .kgvid_title {
120
+ font-size: 10pt;
121
+ padding-left: 4px;
122
+ margin: 6px;
123
+ line-height: 23pt;
 
 
 
124
  }
125
 
126
+ .kgvid_meta_icons {
127
+ position: relative;
128
+ float: right;
129
+ margin-top: 5px;
130
+ margin-right: 5px;
 
 
 
 
 
 
 
131
  }
132
 
133
+ .kgvid_jwplayer_meta .kgvid_meta_icons {
134
+ float: left;
135
+ margin-left: 5px;
136
+ }
137
+
138
+ .kgvid_meta_icons a {
139
+ text-decoration: none;
140
+ border: none;
141
+ box-shadow: none;
142
+ }
143
+
144
+ .kgvid_meta_icons span {
145
+ cursor: pointer;
146
+ color: white;
147
+ margin-right: 5px;
148
+ }
149
+
150
+ .kgvid_no_title_meta .kgvid_meta_icons span {
151
+ font-size: 19pt;
152
+ text-shadow: 1px 1px rgba(20,20,20,0.8);
153
+ }
154
+
155
+ .kgvid_click_trap {
156
+ display: none;
157
+ width: 100%;
158
+ height: 100%;
159
+ background: none;
160
+ position: absolute;
161
+ top: 0;
162
+ z-index: 102;
163
+ }
164
+
165
+ .kgvid_click_trap:before {
166
+ content: '\20';
167
+ }
168
+
169
+ .kgvid_share_container {
170
+ display: none;
171
+ color: white;
172
+ top: 32px;
173
+ padding-top: 18px;
174
+ padding-bottom: 18px;
175
+ width: 100%;
176
+ z-index: 103;
177
+ position: absolute;
178
+ /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#141414+0,141414+100&0.85+65,0+100 */
179
+ background: -moz-linear-gradient(top, rgba(20,20,20,0.85) 0%, rgba(20,20,20,0.85) 65%, rgba(20,20,20,0) 100%); /* FF3.6+ */
180
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(20,20,20,0.85)), color-stop(65%,rgba(20,20,20,0.85)), color-stop(100%,rgba(20,20,20,0))); /* Chrome,Safari4+ */
181
+ background: -webkit-linear-gradient(top, rgba(20,20,20,0.85) 0%,rgba(20,20,20,0.85) 65%,rgba(20,20,20,0) 100%); /* Chrome10+,Safari5.1+ */
182
+ background: -o-linear-gradient(top, rgba(20,20,20,0.85) 0%,rgba(20,20,20,0.85) 65%,rgba(20,20,20,0) 100%); /* Opera 11.10+ */
183
+ background: -ms-linear-gradient(top, rgba(20,20,20,0.85) 0%,rgba(20,20,20,0.85) 65%,rgba(20,20,20,0) 100%); /* IE10+ */
184
+ background: linear-gradient(to bottom, rgba(20,20,20,0.85) 0%,rgba(20,20,20,0.85) 65%,rgba(20,20,20,0) 100%); /* W3C */
185
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#d9141414', endColorstr='#00141414',GradientType=0 ); /* IE6-9 */
186
+ }
187
+
188
+ .kgvid_share_container.kgvid_no_title_meta {
189
+ top: 0;
190
+ z-index: 102;
191
+ padding-top: 32px;
192
+ }
193
+
194
+ .kgvid_share_icons {
195
+ text-align: center;
196
+ line-height: 26pt;
197
+ font-size: 22pt;
198
+ font-family: sans-serif;
199
+ word-wrap: normal;
200
+ overflow-wrap: normal;
201
+ }
202
+
203
+ .kgvid_share_icons a {
204
+ text-decoration: none;
205
+ border: none;
206
+ box-shadow: none;
207
+ }
208
+
209
+ .kgvid_share_icons span {
210
+ font-size: 13pt;
211
+ line-height: 29pt;
212
+ width: inherit;
213
+ height: inherit;
214
+ margin: 0;
215
+ padding: 0;
216
+ }
217
+
218
+ .kgvid_share_icons span.dashicons.dashicons-editor-code {
219
+ font-size: 22pt;
220
+ }
221
+
222
+ .kgvid_share_icons input[type="text"] {
223
+ font-family: sans-serif !important;
224
+ font-size: 10pt !important;
225
+ color: white !important;
226
+ width: 50% !important;
227
+ background: #ABACA8 !important;
228
+ padding: 4px !important;
229
+ border-radius: 6px !important;
230
+ border: none !important;
231
+ display: inline-block !important;
232
+ }
233
+
234
+ .kgvid_share_icons .kgvid_social_icons {
235
+ margin-top: 8px;
236
+ font-size: 19pt;
237
+ }
238
+
239
+ .kgvid_share_icons span.dashicons.dashicons-twitter {
240
+ color: #55acee;
241
+ font-size: 32pt;
242
+ }
243
+
244
+ span.kgvid_facebook_icon_holder {
245
+ font-family: sans-serif;
246
+ position: relative;
247
+ vertical-align: middle;
248
+ }
249
+
250
+ .kgvid_share_icons span.dashicons.dashicons-facebook {
251
+ color: #3b5998;
252
+ font-size: 32pt;
253
+ }
254
+
255
+ .kgvid_share_icons span.dashicons.dashicons-facebook:after {
256
+ content: "\20";
257
+ background: white;
258
+ width: 20pt;
259
+ height: 21.25pt;
260
+ position: absolute;
261
+ left: 9px;
262
+ top: -2px;
263
+ z-index: -1;
264
  }
265
 
266
  .kgvid_below_video {
345
  #kgvid-simplemodal-container { color:black; background-color:#000; height:auto; }
346
  #kgvid-simplemodal-container .simplemodal-data {margin-top:-1em; padding:5px;}
347
  #kgvid-simplemodal-container a.modalCloseImg {
348
+ display: inline;
349
+ box-sizing: border-box;
350
+ padding: 2px 2px 2px 3px;
351
+ z-index: 10003;
352
+ position: absolute;
353
+ top: -25px;
354
+ right: -5px;
355
+ cursor: pointer;
356
+ text-align: center;
357
+ font-size: 13px;
358
+ border-radius: 8px;
359
+ background-color: rgba(0,0,0,0.5);
360
+ color: #ccc;
361
+ font-family: Arial, sans-serif;
362
+ line-height: 18px;
363
+ font-weight: 900;
364
+ text-decoration: none;
 
365
  }
366
 
367
  #kgvid-simplemodal-container .kgvid_gallery_nav {
368
  cursor: pointer;
369
+ display: inline-block;
370
+ padding: 3px 7px 4px 7px;
371
+ background-color: rgba(0,0,0,0.5);
372
+ text-align: center;
373
+ color: white;
374
+ border-radius: 5px;
375
+ font-family: Arial, sans-serif;
376
+ font-size: 16px;
377
+ font-weight: 900;
378
+ line-height: 12px;
379
+ z-index: 10003;
380
+ position: absolute;
381
+ text-decoration: none;
382
+ top: -22px;
 
383
  }
384
 
385
  #kgvid-simplemodal-container .wp-video {
387
  }
388
 
389
  .kgvid_gallery_prev {
390
+ right: 59px;
 
391
  }
392
 
393
  .kgvid_gallery_next {
 
394
  right: 25px;
395
  }
396
 
397
  #kgvid-simplemodal-container a.modalCloseImg:hover, #kgvid-simplemodal-container .kgvid_gallery_nav:hover {
398
+ background-color: black;
399
+ box-shadow: 0px 0px 4px #fff;
400
  }
401
 
402
  .kgvid_gallery_pagination span {
430
  text-decoration: none;
431
  }
432
 
433
+ .kgvid_temp_thumb {
434
+ position: absolute;
435
+ top: 0;
436
+ left: 0;
437
+ width: 100%;
438
+ height: 100%;
439
+ margin: 0;
440
+ padding: 0;
441
+ }
442
+
443
  /* video-quality-selector Video.js plugin styles */
444
 
445
  .vjs-res-button span.vjs-control-text {
447
  }
448
 
449
  .vjs-res-button:before {
450
+ font-family: VideoJs;
451
+ content: "\f110"; /* Gear icon */
452
+ }
453
+
454
+ .vjs-loading-spinner {
455
+ z-index: 1;
456
  }
457
 
458
 
473
  height: auto;
474
  clip: auto;
475
  }
476
+
477
+ /* mep-feature-sourcechooser plugin styles */
478
+
479
+ .kgvid_wrapper .mejs-controls div.mejs-sourcechooser-button button {
480
+ background: none;
481
+ font-family: dashicons;
482
+ color: white;
483
+ font-size: 11pt;
484
+ line-height: 0pt;
485
+ }
486
+
487
+ .kgvid_wrapper .mejs-controls .mejs-sourcechooser-button button:before {
488
+ content: "\f111";
489
+ }
490
+
491
+ .mejs-container .mejs-controls div.mejs-menu-arrow {
492
+ display: none;
493
+ position: absolute;
494
+ bottom: -7px;
495
+ left: -8px;
496
+ width: 0em;
497
+ height: 0em;
498
+ margin-bottom: 3em;
499
+ border-left: 2em solid transparent;
500
+ border-right: 2em solid transparent;
501
+ border-top: 1.55em solid #000000;
502
+ border-top-color: rgba(40, 40, 40, 0.5);
503
+ }
504
+
505
+ div.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector {
506
+ visibility: inherit;
507
+ bottom: 17px;
508
+ right: -28px;
509
+ width: auto;
510
+ height: auto;
511
+ padding: 9px 0 0 0;
512
+ text-align: center;
513
+ -webkit-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);
514
+ -moz-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);
515
+ box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);
516
+ }
517
+
518
+ div.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector span {
519
+ color: white;
520
+ padding: 0px 10px 5px 10px;
521
+ display: block;
522
+ white-space: nowrap;
523
+ }
524
+
525
+ div.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li {
526
+ margin: 3px 0 3px 0;
527
+ padding: 2px 10px 5px 10px;
528
+ cursor: pointer;
529
+ }
530
+
531
+ div.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li.mejs-sourcechooser-selected {
532
+ background: rgba(20,20,20,0.8);
533
+ }
534
+
535
+ div.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li:hover {
536
+ color: #111;
537
+ background-color: #ffffff;
538
+ background-color: rgba(255, 255, 255, 0.75);
539
+ }
540
+
541
+ .mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li input {
542
+ display: none;
543
+ }
544
+
545
+ div.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li label {
546
+ width: auto;
547
+ }
css/video-embed-thumbnail-generator_admin.css CHANGED
@@ -212,7 +212,6 @@ div.kgvid_chosen_thumbnail_box {
212
 
213
  div.kgvid_thumbnail_overlay {
214
  width: 100%;
215
- height:100%;
216
  background: #fff;
217
  opacity: 0.5;
218
  filter: alpha(opacity = 50); /* required for opacity to work in IE */
@@ -268,6 +267,13 @@ font-weight: normal;
268
  .kgvid_setting_nearvid div {
269
  margin: 5px;
270
  font-weight: bold;
 
 
 
 
 
 
 
271
  }
272
 
273
  .kgvid_htaccess td {
@@ -295,13 +301,14 @@ font-weight: normal;
295
  }
296
 
297
  .kgvid_tooltip:hover span {
298
- font-family: Calibri, Tahoma, Geneva, sans-serif;
299
  position: absolute;
300
  left: 1em;
301
  top: 2em;
302
  z-index: 99;
303
  margin-left: 0;
304
  width: 250px;
 
 
305
  border-radius: 5px 5px;
306
  -moz-border-radius: 5px;
307
  -webkit-border-radius: 5px;
@@ -569,7 +576,6 @@ td.media-icon img {
569
 
570
  .kgvid_queue_message {
571
  font-size: 129%;
572
- margin-left: 10px;
573
  color: #298CBA;
574
  }
575
 
212
 
213
  div.kgvid_thumbnail_overlay {
214
  width: 100%;
 
215
  background: #fff;
216
  opacity: 0.5;
217
  filter: alpha(opacity = 50); /* required for opacity to work in IE */
267
  .kgvid_setting_nearvid div {
268
  margin: 5px;
269
  font-weight: bold;
270
+ white-space: nowrap;
271
+
272
+ }
273
+
274
+ .kgvid_setting_nearvid span {
275
+ display: inline-block;
276
+ width: 33%;
277
  }
278
 
279
  .kgvid_htaccess td {
301
  }
302
 
303
  .kgvid_tooltip:hover span {
 
304
  position: absolute;
305
  left: 1em;
306
  top: 2em;
307
  z-index: 99;
308
  margin-left: 0;
309
  width: 250px;
310
+ font-weight: normal;
311
+ white-space: normal;
312
  border-radius: 5px 5px;
313
  -moz-border-radius: 5px;
314
  -webkit-border-radius: 5px;
576
 
577
  .kgvid_queue_message {
578
  font-size: 129%;
 
579
  color: #298CBA;
580
  }
581
 
js/kgvid_video_embed.js CHANGED
@@ -1,29 +1,71 @@
1
  kgvid_video_vars = {};
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  jQuery(document).ready(kgvid_document_ready());
 
4
 
5
  function kgvid_document_ready() {
6
 
7
- jQuery('.kgvid_videodiv').each(function(){ //setup individual videos
 
8
  var video_vars = jQuery(this).data('kgvid_video_vars');
9
- if ( video_vars.player_type == "Strobe Media Playback" ) {
10
- swfobject.embedSWF(video_vars.swfurl, 'video_'+video_vars.id, video_vars.width, video_vars.height, '10.1.0', video_vars.expressinstallswfurl, video_vars.flashvars, video_vars.params);
 
 
 
 
11
  }
12
 
13
- kgvid_setup_video(video_vars.id);
 
 
 
14
 
15
  });
16
 
 
 
 
 
17
  jQuery('.kgvid_gallerywrapper').each(function(){ //setup gallery thumbnails
18
 
19
  var gallery_id = this.id;
20
  kgvid_resize_gallery_play_button(gallery_id);
21
  jQuery(window).resize( function(){ kgvid_resize_gallery_play_button(gallery_id) } );
22
-
23
  });
24
 
25
  }
26
 
 
 
 
 
 
27
  function kgvid_SetVideo(id) { //for galleries
28
 
29
  //set the viewport meta tag so the gallery fits in iOS
@@ -60,7 +102,7 @@ function kgvid_SetVideo(id) { //for galleries
60
  minHeight:frame_height,
61
  autoResize: false,
62
  overlayClose:true,
63
- closeHTML:'<a class="modalCloseImg simplemodal-close" title="Close">X</a>',
64
  zIndex:10000,
65
  onShow: function(dialog) {
66
 
@@ -123,12 +165,12 @@ function kgvid_SetVideo(id) { //for galleries
123
  jQuery('#kgvid_popup_video_holder_'+id).html(popup_code);
124
  jQuery('#video_'+id+'_div').data('kgvid_video_vars', video_vars);
125
 
126
- if ( video_vars.player_type == "Strobe Media Playback" ) {
127
  swfobject.embedSWF(video_vars.swfurl, 'video_'+id, video_vars.width, video_vars.height, '10.1.0', video_vars.expressinstallswfurl, video_vars.flashvars, video_vars.params);
128
  }
129
 
130
  jQuery.modal.setContainerDimensions();
131
- kgvid_setup_video(id);
132
  jQuery.modal.setPosition();
133
 
134
  dialog.wrap.css('overflow', 'hidden'); //disable scroll bars
@@ -160,7 +202,8 @@ function kgvid_SetVideo(id) { //for galleries
160
  }, false);
161
  }//end if flash or silverlight
162
  else { mediaElement.play(); }
163
- }
 
164
  });
165
  }//end if WordPress Default
166
  }//end check to make sure video still needs to load
@@ -198,10 +241,34 @@ function kgvid_video_gallery_end_action(id, action) {
198
  }
199
  }
200
 
201
- function kgvid_timeupdate() {
202
  jQuery('#'+this.id()+' > .vjs-poster').fadeOut();
203
  }
204
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
205
  function kgvid_setup_video(id) {
206
 
207
  var video_vars = jQuery('#video_'+id+'_div').data('kgvid_video_vars');
@@ -209,11 +276,13 @@ function kgvid_setup_video(id) {
209
  if ( typeof (jQuery) == 'function' ) { jQuery.fn.fitVids=function(){}; }; //disable fitvids
210
 
211
  var iOS = ( navigator.userAgent.match(/(iPad|iPhone|iPod)/i) ? true : false );
212
- if (iOS && video_vars.player_type == "Strobe Media Playback" ) { video_vars.player_type = "Video.js"; }
213
 
214
  jQuery('#video_'+id+'_div').prepend(jQuery('#video_'+id+'_watermark'));
215
  jQuery('#video_'+id+'_watermark').attr('style', ''); //shows the hidden watermark div
216
  jQuery('#video_'+id+'_div').prepend(jQuery('#video_'+id+'_meta'));
 
 
217
  jQuery('#video_'+id+'_meta').attr('style', ''); //shows the hidden meta div
218
  if ( video_vars.autoplay == "true" ) { jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover'); }
219
 
@@ -234,11 +303,11 @@ function kgvid_setup_video(id) {
234
  player.on('loadedmetadata', function(){
235
 
236
  var text_tracks = player.textTracks();
237
- var default_track_id = jQuery('#video_'+id+'_div track[default]').first().attr('id');
238
 
239
- if ( default_track_id != null ) {
240
  jQuery(text_tracks).each(function(index, track) {
241
- if ( track.id == default_track_id && track.mode != 'showing' ) { player.textTracks()[index].mode = 'showing'; }
242
  });
243
  }
244
 
@@ -248,21 +317,39 @@ function kgvid_setup_video(id) {
248
  });
249
 
250
  player.on('play', function kgvid_play_start(){
251
- player.off('timeupdate', kgvid_timeupdate);
252
  if ( video_vars.meta ) {
253
- jQuery('#video_'+id+'_div').hover(
254
- function(){
255
- jQuery('#video_'+id+'_meta').addClass('kgvid_video_meta_hover');
256
- },
257
- function(){
258
- jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
259
- }
260
- );
261
  jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
262
  }
263
  if ( video_vars.autoplay == "true" ) { jQuery('#video_'+id+' > .vjs-control-bar').removeClass('vjs-fade-in'); }
264
  if ( video_vars.endofvideooverlay != "" ) { jQuery('#video_'+id+' > .vjs-poster').hide(); }
265
  kgvid_video_counter(id, 'play');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
266
  });
267
 
268
  player.on('ended', function kgvid_play_end(){
@@ -273,7 +360,7 @@ function kgvid_setup_video(id) {
273
  'background-image':'url('+video_vars.endofvideooverlay+')'
274
  }).fadeIn();
275
 
276
- setTimeout(function() { player.on('timeupdate', kgvid_timeupdate); }, 500);
277
 
278
  }
279
  if ( jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != "" && jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != null ) {
@@ -308,10 +395,13 @@ function kgvid_setup_video(id) {
308
  }
309
  }
310
 
311
- if ( jQuery('#video_'+id).hasClass('vjs-fullscreen') ) {
312
- var resolutions = player.availableRes;
313
- var highest_res = Object.keys(resolutions)[Object.keys(resolutions).length - 1];
314
- player.changeRes(highest_res);
 
 
 
315
  }
316
 
317
  if ( fullScreenApi.supportsFullScreen == false ) {
@@ -327,46 +417,88 @@ function kgvid_setup_video(id) {
327
 
328
  });
329
 
330
- player.on( 'changeRes', function() {
331
- if ( jQuery('#video_'+id).hasClass('vjs-has-started') == true ) {
332
- var poster = jQuery('#video_'+id+' video').attr('poster');
333
- jQuery('#video_'+id+' video').removeAttr('poster'); //prevents poster from showing during resolution switch
334
- player.on ( 'ended', function() { jQuery('#video_'+id+' video').attr('poster', poster); } );
335
- }
336
- });
337
-
338
  if ( video_vars.autoplay == "true" && player.paused() ) { player.play(); }
339
 
340
  } //end if Video.js
341
 
342
- if ( video_vars.player_type == "Strobe Media Playback" || video_vars.player_type == "WordPressDefault" ) {
343
-
344
- jQuery('#video_'+id+'_div').hover(
345
- function(){
346
- jQuery('#video_'+id+'_meta').addClass('kgvid_video_meta_hover');
347
- },
348
- function(){
349
- jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
350
- }
351
- );
352
- } //end if Strobe Media Playback
353
-
354
  if ( video_vars.player_type == "WordPressDefault" ) {
355
 
356
- player = jQuery('#video_'+id+'_div video');
 
357
 
358
  player.on('loadedmetadata', function() {
 
 
 
 
 
359
  if ( video_vars.set_volume != "" ) { player[0].volume = video_vars.set_volume; }
360
  if ( video_vars.mute == "true" ) { player[0].setMuted(true); }
361
  jQuery('#video_'+id+'_div .mejs-container').append(jQuery('#video_'+id+'_watermark'));
362
- });
363
 
364
- jQuery('#video_'+id+'_div .wp-video').one('click', function(){
365
- jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
 
 
 
 
 
 
 
 
 
 
366
  });
367
 
368
  player.on('play', function(){
 
 
 
369
  kgvid_video_counter(id, 'play');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  });
371
 
372
  player.on('ended', function(){
@@ -393,7 +525,8 @@ function kgvid_setup_video(id) {
393
  } //end if WordPress Default
394
 
395
  if ( video_vars.player_type == "JWPlayer" ) {
396
- player_id = jQuery('#video_'+id+'_div').children('div[id^="jwplayer"]').attr('id');
 
397
  var player = jwplayer(player_id);
398
 
399
  if ( video_vars.set_volume != "" ) { player.setVolume(Math.round(video_vars.set_volume*100)); }
@@ -403,17 +536,28 @@ function kgvid_setup_video(id) {
403
  kgvid_video_counter(id, 'play');
404
 
405
  if ( video_vars.meta ) {
406
- jQuery('#video_'+id+'_div').hover(
407
- function(){
408
- jQuery('#video_'+id+'_meta').addClass('kgvid_video_meta_hover');
409
- },
410
- function(){
411
- jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
412
- }
413
- );
414
  jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
415
  }
416
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
417
  });
418
 
419
  player.onComplete( function() {
@@ -437,6 +581,7 @@ function kgvid_setup_video(id) {
437
  kgvid_resize_video(id);
438
  jQuery(window).resize( function(){ kgvid_resize_video(id) } );
439
  }
 
440
  }
441
 
442
  function kgvid_resize_video(id) {
@@ -452,7 +597,7 @@ function kgvid_resize_video(id) {
452
  var set_height = video_vars.height;
453
  var aspect_ratio = Math.round(set_height/set_width*1000)/1000
454
  var reference_div = jQuery('#kgvid_'+id+'_wrapper').parent();
455
- if ( reference_div.is('body') ) { parent_width = window.innerWidth; }
456
  else if ( reference_div.attr('id') == 'kgvid_popup_video_holder_'+id ) { //if it's a pop-up video
457
  var window_width = jQuery(window).width();
458
  var window_height = jQuery(window).height();
@@ -474,7 +619,10 @@ function kgvid_resize_video(id) {
474
  set_width = Math.round(set_height / aspect_ratio);
475
  }
476
 
477
- if ( video_vars.player_type == "Video.js" && eval('videojs.players.video_'+id) != null ) {
 
 
 
478
  var player = videojs('video_'+id);
479
  player.width(set_width).height(set_height);
480
 
@@ -492,46 +640,59 @@ function kgvid_resize_video(id) {
492
  }
493
  }
494
  else { jQuery('#kgvid_'+id+'_wrapper .vjs-big-play-button').removeAttr('style'); }
495
-
496
- if ( video_vars.auto_res == 'automatic' && player.availableRes !== undefined ) {
497
- var resolutions = player.availableRes;
498
- var resNumbers = [];
499
- jQuery.each(resolutions, function(){
500
- if ( this[0] != undefined && !isNaN(parseInt(this[0]['data-res'])) ) {
501
- resNumbers.push(parseInt(this[0]['data-res']));
502
- }
503
- });
504
- var current_resolution = parseInt(player.getCurrentRes());
505
-
506
- if ( !isNaN(current_resolution) ) {
507
- if ( window.devicePixelRatio != undefined ) { var pixel_height = set_height * window.devicePixelRatio; } //don't shortchange retina displays
508
- else { pixel_height = set_height; }
509
- var res_options = jQuery.map(resNumbers, function(n) {
510
- if ( n >= pixel_height ) { return n; }
511
- });
512
- var set_res = Math.min.apply(Math,res_options);
513
- if ( set_res != current_resolution && !jQuery('#video_'+id).hasClass('vjs-fullscreen') ) {
514
- player.changeRes(set_res+'p');
515
- }
516
- if ( jQuery('#video_'+id).hasClass('vjs-has-started') == false ) {
517
- if ( player.muted() == true ) { player.muted(false); player.muted(true); } // reset volume and mute otherwise player doesn't display properly
518
- if ( player.volume() != 1 ) {
519
- var current_volume = player.volume();
520
- player.volume(1);
521
- player.volume(current_volume);
522
- }
523
- }
524
- }
525
- }
526
-
527
  }
528
- if ( video_vars.player_type == "Strobe Media Playback" ) {
 
529
  jQuery('#video_'+id+'_div').height(set_height);
530
  jQuery('#video_'+id).attr('width',set_width).attr('height',set_height);
531
  jQuery('#video_'+id+'_html5_api').attr('width',set_width).attr('height',set_height);
532
  }
 
533
  if ( video_vars.player_type == "WordPressDefault" ) {
534
  jQuery('#kgvid_'+id+'_wrapper').find('.wp-video').attr('style', 'width:'+set_width+'px; height:'+set_height+'px;');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
535
  }
536
 
537
  var meta = jQuery('#kgvid_video_gallery_thumb_'+id).data('meta');
@@ -620,6 +781,14 @@ function kgvid_video_counter(id, event) {
620
  else if (typeof _gaq != "undefined") { _gaq.push(["_trackEvent", "Videos", kgvidL10n_frontend.playstart, title]); }
621
 
622
  }
 
 
 
 
 
 
 
 
623
  if ( event == "end" ) {
624
  if (video_vars.countable) { //video is in the db
625
  changed = true;
@@ -668,3 +837,58 @@ function kgvid_switch_gallery_page(obj, post_action) {
668
  }, "json");
669
 
670
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  kgvid_video_vars = {};
2
 
3
+ jQuery('.kgvid_videodiv').each(function(){ //setup individual videos. WordPress Default has its own success callback
4
+
5
+ var video_vars = jQuery(this).data('kgvid_video_vars');
6
+
7
+ if ( video_vars.player_type == "Video.js" ) {
8
+
9
+ var videojs_options = { "html5": { "nativeTextTracks" : false }, "language": video_vars.locale };
10
+ if ( video_vars.resize == "true" ) {
11
+ videojs_options.fluid = true;
12
+ }
13
+ if ( video_vars.nativecontrolsfortouch == "true" ) {
14
+ videojs_options.nativeControlsForTouch = true;
15
+ }
16
+ if ( video_vars.enable_resolutions_plugin == "true" ) {
17
+ videojs_options.plugins = { "resolutionSelector" : { "force_types" : ["video/mp4"] } };
18
+ if ( video_vars.default_res ) {
19
+ videojs_options.plugins.resolutionSelector.default_res = video_vars.default_res;
20
+ }
21
+ }
22
+
23
+ videojs('video_'+video_vars.id, videojs_options ).ready(function(){ kgvid_setup_video(video_vars.id); });
24
+ }
25
+ });
26
+
27
  jQuery(document).ready(kgvid_document_ready());
28
+ jQuery(window).load(kgvid_window_load());
29
 
30
  function kgvid_document_ready() {
31
 
32
+ jQuery('.kgvid_videodiv').each(function(){ //setup individual videos. WordPress Default has its own success callback
33
+
34
  var video_vars = jQuery(this).data('kgvid_video_vars');
35
+
36
+ if ( video_vars.player_type == "JWPlayer" ) {
37
+ var player_id = jQuery('#video_'+video_vars.id+'_div').children('div[id^="jwplayer"]').attr('id');
38
+ player_id = player_id.replace('_wrapper', ''); //Flash JW Players have wrapper in the id
39
+ var player = jwplayer(player_id);
40
+ player.onReady( kgvid_setup_video(video_vars.id) );
41
  }
42
 
43
+ if ( video_vars.player_type == "StrobeMediaPlayback" ) {
44
+ swfobject.embedSWF(video_vars.swfurl, 'video_'+video_vars.id, video_vars.width, video_vars.height, '10.1.0', video_vars.expressinstallswfurl, video_vars.flashvars, video_vars.params);
45
+ kgvid_setup_video(video_vars.id);
46
+ }
47
 
48
  });
49
 
50
+ }
51
+
52
+ function kgvid_window_load() {
53
+
54
  jQuery('.kgvid_gallerywrapper').each(function(){ //setup gallery thumbnails
55
 
56
  var gallery_id = this.id;
57
  kgvid_resize_gallery_play_button(gallery_id);
58
  jQuery(window).resize( function(){ kgvid_resize_gallery_play_button(gallery_id) } );
59
+ setTimeout(function(){ kgvid_resize_gallery_play_button(gallery_id) }, 200);
60
  });
61
 
62
  }
63
 
64
+ function kgvid_mejs_success(mediaElement, domObject) {
65
+ var id = jQuery(domObject).parents('.kgvid_videodiv').data('id');
66
+ kgvid_setup_video(id);
67
+ }
68
+
69
  function kgvid_SetVideo(id) { //for galleries
70
 
71
  //set the viewport meta tag so the gallery fits in iOS
102
  minHeight:frame_height,
103
  autoResize: false,
104
  overlayClose:true,
105
+ closeHTML:'<a class="modalCloseImg simplemodal-close" title="Close"><span class="dashicons dashicons-no-alt"></span></a>',
106
  zIndex:10000,
107
  onShow: function(dialog) {
108
 
165
  jQuery('#kgvid_popup_video_holder_'+id).html(popup_code);
166
  jQuery('#video_'+id+'_div').data('kgvid_video_vars', video_vars);
167
 
168
+ if ( video_vars.player_type == "StrobeMediaPlayback" ) {
169
  swfobject.embedSWF(video_vars.swfurl, 'video_'+id, video_vars.width, video_vars.height, '10.1.0', video_vars.expressinstallswfurl, video_vars.flashvars, video_vars.params);
170
  }
171
 
172
  jQuery.modal.setContainerDimensions();
173
+ setTimeout(function() { kgvid_setup_video(id); }, 0);
174
  jQuery.modal.setPosition();
175
 
176
  dialog.wrap.css('overflow', 'hidden'); //disable scroll bars
202
  }, false);
203
  }//end if flash or silverlight
204
  else { mediaElement.play(); }
205
+ },
206
+ features : [ 'playpause', 'progress', 'volume', 'tracks', 'sourcechooser', 'fullscreen' ]
207
  });
208
  }//end if WordPress Default
209
  }//end check to make sure video still needs to load
241
  }
242
  }
243
 
244
+ function kgvid_timeupdate_poster() {
245
  jQuery('#'+this.id()+' > .vjs-poster').fadeOut();
246
  }
247
 
248
+ function kgvid_add_hover(id) {
249
+
250
+ jQuery('#video_'+id+'_div').hover(
251
+ function(){
252
+ jQuery('#video_'+id+'_meta').addClass('kgvid_video_meta_hover');
253
+ },
254
+ function(){
255
+ jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
256
+ }
257
+ );
258
+
259
+ jQuery('#video_'+id+'_div').focus(
260
+ function(){
261
+ jQuery('#video_'+id+'_meta').addClass('kgvid_video_meta_hover');
262
+ }
263
+ )
264
+ .focusout(
265
+ function(){
266
+ jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
267
+ }
268
+ );
269
+
270
+ }
271
+
272
  function kgvid_setup_video(id) {
273
 
274
  var video_vars = jQuery('#video_'+id+'_div').data('kgvid_video_vars');
276
  if ( typeof (jQuery) == 'function' ) { jQuery.fn.fitVids=function(){}; }; //disable fitvids
277
 
278
  var iOS = ( navigator.userAgent.match(/(iPad|iPhone|iPod)/i) ? true : false );
279
+ if (iOS && video_vars.player_type == "StrobeMediaPlayback" ) { video_vars.player_type = "Video.js"; }
280
 
281
  jQuery('#video_'+id+'_div').prepend(jQuery('#video_'+id+'_watermark'));
282
  jQuery('#video_'+id+'_watermark').attr('style', ''); //shows the hidden watermark div
283
  jQuery('#video_'+id+'_div').prepend(jQuery('#video_'+id+'_meta'));
284
+ jQuery('#video_'+id+'_embed, #click_trap_'+id).appendTo('#video_'+id+'_div');
285
+ jQuery('#click_trap_'+id).on('click', function(){ kgvid_share_icon_click(id); });
286
  jQuery('#video_'+id+'_meta').attr('style', ''); //shows the hidden meta div
287
  if ( video_vars.autoplay == "true" ) { jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover'); }
288
 
303
  player.on('loadedmetadata', function(){
304
 
305
  var text_tracks = player.textTracks();
306
+ var track_elements = player.options_.tracks;
307
 
308
+ if ( track_elements != null ) {
309
  jQuery(text_tracks).each(function(index, track) {
310
+ if ( track_elements[index].default == true && track.mode != 'showing' ) { player.textTracks()[index].mode = 'showing'; }
311
  });
312
  }
313
 
317
  });
318
 
319
  player.on('play', function kgvid_play_start(){
320
+ player.off('timeupdate', kgvid_timeupdate_poster);
321
  if ( video_vars.meta ) {
322
+ kgvid_add_hover(id);
 
 
 
 
 
 
 
323
  jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
324
  }
325
  if ( video_vars.autoplay == "true" ) { jQuery('#video_'+id+' > .vjs-control-bar').removeClass('vjs-fade-in'); }
326
  if ( video_vars.endofvideooverlay != "" ) { jQuery('#video_'+id+' > .vjs-poster').hide(); }
327
  kgvid_video_counter(id, 'play');
328
+
329
+ player.on('timeupdate', function(){
330
+
331
+ var percent_duration = Math.round(player.currentTime() / player.duration() * 100);
332
+
333
+ if ( jQuery('#video_'+id+'_div').data("25") == undefined && percent_duration >= 25 && percent_duration < 50 ) {
334
+ jQuery('#video_'+id+'_div').data("25", true);
335
+ kgvid_video_counter(id, '25');
336
+ }
337
+ else if ( jQuery('#video_'+id+'_div').data("50") == undefined && percent_duration >= 50 && percent_duration < 75 ) {
338
+ jQuery('#video_'+id+'_div').data("50", true);
339
+ kgvid_video_counter(id, '50');
340
+ }
341
+ else if ( jQuery('#video_'+id+'_div').data("75") == undefined && percent_duration >= 75 && percent_duration < 100 ) {
342
+ jQuery('#video_'+id+'_div').data("75", true);
343
+ kgvid_video_counter(id, '75');
344
+
345
+ }
346
+
347
+ });
348
+
349
+ });
350
+
351
+ player.on('pause', function kgvid_play_pause(){
352
+ jQuery('#video_'+id+'_meta').addClass('kgvid_video_meta_hover');
353
  });
354
 
355
  player.on('ended', function kgvid_play_end(){
360
  'background-image':'url('+video_vars.endofvideooverlay+')'
361
  }).fadeIn();
362
 
363
+ setTimeout(function() { player.on('timeupdate', kgvid_timeupdate_poster); }, 500);
364
 
365
  }
366
  if ( jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != "" && jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != null ) {
395
  }
396
  }
397
 
398
+ if ( player.availableRes != undefined ) {
399
+ if ( jQuery('#video_'+id).hasClass('vjs-fullscreen') ) {
400
+ var resolutions = player.availableRes;
401
+ var highest_res = Object.keys(resolutions)[Object.keys(resolutions).length - 1];
402
+ player.changeRes(highest_res);
403
+ }
404
+ else { kgvid_resize_video(id); }
405
  }
406
 
407
  if ( fullScreenApi.supportsFullScreen == false ) {
417
 
418
  });
419
 
 
 
 
 
 
 
 
 
420
  if ( video_vars.autoplay == "true" && player.paused() ) { player.play(); }
421
 
422
  } //end if Video.js
423
 
 
 
 
 
 
 
 
 
 
 
 
 
424
  if ( video_vars.player_type == "WordPressDefault" ) {
425
 
426
+ var player = jQuery('#video_'+id+'_div video');
427
+ var mejs_id = jQuery('#video_'+id+'_div .mejs-container').attr('id');
428
 
429
  player.on('loadedmetadata', function() {
430
+
431
+ var mejs_player = eval('mejs.players.'+mejs_id);
432
+ var resolutions = player.availableRes;
433
+ var played = jQuery('#video_'+id+'_div').data("played") || "not played";
434
+
435
  if ( video_vars.set_volume != "" ) { player[0].volume = video_vars.set_volume; }
436
  if ( video_vars.mute == "true" ) { player[0].setMuted(true); }
437
  jQuery('#video_'+id+'_div .mejs-container').append(jQuery('#video_'+id+'_watermark'));
 
438
 
439
+ if ( played == "not played" ) { //only turn on the default captions on first load
440
+
441
+
442
+ jQuery.each(mejs_player.tracks, function(key, item) {
443
+ if ( item.srclang == jQuery('#'+mejs_id+' track[default]').attr('srclang') ) {
444
+ mejs_player.setTrack(item.srclang);
445
+ jQuery('#'+mejs_id+' .mejs-captions-selector input[value="en"]').prop('checked',true);
446
+ }
447
+ });
448
+
449
+ }
450
+
451
  });
452
 
453
  player.on('play', function(){
454
+ kgvid_add_hover(id);
455
+ jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
456
+
457
  kgvid_video_counter(id, 'play');
458
+
459
+ player.on('timeupdate', function(){
460
+
461
+ var percent_duration = Math.round(player[0].currentTime / player[0].duration * 100);
462
+
463
+ if ( jQuery('#video_'+id+'_div').data("25") == undefined && percent_duration >= 25 && percent_duration < 50 ) {
464
+ jQuery('#video_'+id+'_div').data("25", true);
465
+ kgvid_video_counter(id, '25');
466
+ }
467
+ else if ( jQuery('#video_'+id+'_div').data("50") == undefined && percent_duration >= 50 && percent_duration < 75 ) {
468
+ jQuery('#video_'+id+'_div').data("50", true);
469
+ kgvid_video_counter(id, '50');
470
+ }
471
+ else if ( jQuery('#video_'+id+'_div').data("75") == undefined && percent_duration >= 75 && percent_duration < 100 ) {
472
+ jQuery('#video_'+id+'_div').data("75", true);
473
+ kgvid_video_counter(id, '75');
474
+ }
475
+
476
+ });
477
+
478
+ });
479
+
480
+ player.on('pause', function(){
481
+ jQuery('#video_'+id+'_meta').addClass('kgvid_video_meta_hover');
482
+ });
483
+
484
+ jQuery(document).on('mozfullscreenchange webkitfullscreenchange fullscreenchange', function(){
485
+
486
+ var mejs_player = eval('mejs.players.'+mejs_id);
487
+
488
+ if ( mejs_player.isFullScreen && mejs_player.hasOwnProperty('availableRes') ) {
489
+ var resolutions = mejs_player.availableRes;
490
+
491
+ var resNumbers = new Array();
492
+ jQuery.each(resolutions, function(key, value){
493
+ if ( typeof key !== 'undefined' && !isNaN(parseInt(key)) ) {
494
+ resNumbers.push(parseInt(key));
495
+ }
496
+ });
497
+ var highest_res = Math.max.apply( Math, resNumbers );
498
+
499
+ mejs_player.changeRes(highest_res+'p');
500
+
501
+ }
502
  });
503
 
504
  player.on('ended', function(){
525
  } //end if WordPress Default
526
 
527
  if ( video_vars.player_type == "JWPlayer" ) {
528
+ var player_id = jQuery('#video_'+id+'_div').children('div[id^="jwplayer"]').attr('id');
529
+ player_id = player_id.replace('_wrapper', ''); //Flash JW Players have wrapper in the id
530
  var player = jwplayer(player_id);
531
 
532
  if ( video_vars.set_volume != "" ) { player.setVolume(Math.round(video_vars.set_volume*100)); }
536
  kgvid_video_counter(id, 'play');
537
 
538
  if ( video_vars.meta ) {
539
+ kgvid_add_hover(id);
 
 
 
 
 
 
 
540
  jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
541
  }
542
 
543
+ player.on('timeupdate', function(){
544
+
545
+ if ( jQuery('#video_'+id+'_div').data("25") == undefined && Math.round(player.currentTime() / player.duration() * 100) == 25 ) {
546
+ jQuery('#video_'+id+'_div').data("25", true);
547
+ kgvid_video_counter(id, '25');
548
+ }
549
+ else if ( jQuery('#video_'+id+'_div').data("50") == undefined && Math.round(player.currentTime() / player.duration() * 100) == 50 ) {
550
+ jQuery('#video_'+id+'_div').data("50", true);
551
+ kgvid_video_counter(id, '50');
552
+ }
553
+ else if ( jQuery('#video_'+id+'_div').data("75") == undefined && Math.round(player.currentTime() / player.duration() * 100) == 75 ) {
554
+ jQuery('#video_'+id+'_div').data("75", true);
555
+ kgvid_video_counter(id, '75');
556
+
557
+ }
558
+
559
+ });
560
+
561
  });
562
 
563
  player.onComplete( function() {
581
  kgvid_resize_video(id);
582
  jQuery(window).resize( function(){ kgvid_resize_video(id) } );
583
  }
584
+
585
  }
586
 
587
  function kgvid_resize_video(id) {
597
  var set_height = video_vars.height;
598
  var aspect_ratio = Math.round(set_height/set_width*1000)/1000
599
  var reference_div = jQuery('#kgvid_'+id+'_wrapper').parent();
600
+ if ( reference_div.is('body') ) { parent_width = window.innerWidth; set_width = window.innerWidth; }
601
  else if ( reference_div.attr('id') == 'kgvid_popup_video_holder_'+id ) { //if it's a pop-up video
602
  var window_width = jQuery(window).width();
603
  var window_height = jQuery(window).height();
619
  set_width = Math.round(set_height / aspect_ratio);
620
  }
621
 
622
+ if ( ( video_vars.player_type == "Video.js" && eval('videojs.getPlayers()["video_'+id+'"]') != null ) ) {
623
+
624
+ video_vars.player_type == "Video.js"
625
+
626
  var player = videojs('video_'+id);
627
  player.width(set_width).height(set_height);
628
 
640
  }
641
  }
642
  else { jQuery('#kgvid_'+id+'_wrapper .vjs-big-play-button').removeAttr('style'); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
643
  }
644
+
645
+ if ( video_vars.player_type == "StrobeMediaPlayback" ) {
646
  jQuery('#video_'+id+'_div').height(set_height);
647
  jQuery('#video_'+id).attr('width',set_width).attr('height',set_height);
648
  jQuery('#video_'+id+'_html5_api').attr('width',set_width).attr('height',set_height);
649
  }
650
+
651
  if ( video_vars.player_type == "WordPressDefault" ) {
652
  jQuery('#kgvid_'+id+'_wrapper').find('.wp-video').attr('style', 'width:'+set_width+'px; height:'+set_height+'px;');
653
+ if ( typeof mejs !== 'undefined' ) { player = eval('mejs.players.'+jQuery('#kgvid_'+id+'_wrapper div.wp-video-shortcode').attr('id')); }
654
+ }
655
+
656
+ if ( ( video_vars.player_type == "Video.js" && eval('videojs.getPlayers()["video_'+id+'"]') != null )
657
+ || ( video_vars.player_type == "WordPressDefault" && typeof mejs !== 'undefined' )
658
+ ) {
659
+ if ( player.availableRes !== undefined ) {
660
+
661
+ var resolutions = player.availableRes;
662
+
663
+ if ( video_vars.auto_res == 'automatic' ) {
664
+
665
+ var resNumbers = new Array();
666
+ jQuery.each(resolutions, function(key, value){
667
+ if ( typeof key !== 'undefined' && !isNaN(parseInt(key)) ) {
668
+ resNumbers.push(parseInt(key));
669
+ }
670
+ });
671
+ var current_resolution = parseInt(player.getCurrentRes());
672
+ if ( !isNaN(current_resolution) ) {
673
+ if ( video_vars.pixel_ratio == "true" && window.devicePixelRatio != undefined ) { var pixel_height = set_height * window.devicePixelRatio; } //for retina displays
674
+ else { pixel_height = set_height; }
675
+ var res_options = jQuery.map(resNumbers, function(n) {
676
+ if ( n >= pixel_height ) { return n; }
677
+ });
678
+ var set_res = Math.min.apply(Math,res_options);
679
+
680
+ if ( set_res != current_resolution && !jQuery('#video_'+id).hasClass('vjs-fullscreen') && !jQuery('#video_'+id+'_div .mejs-container').hasClass('mejs-container-fullscreen') ) {
681
+ player.changeRes(set_res+'p');
682
+
683
+ }
684
+
685
+ if ( video_vars.player_type == "Video.js" && jQuery('#video_'+id).hasClass('vjs-has-started') == false ) {
686
+ if ( player.muted() == true ) { player.muted(false); player.muted(true); } // reset volume and mute otherwise player doesn't display properly
687
+ if ( player.volume() != 1 ) {
688
+ var current_volume = player.volume();
689
+ player.volume(1);
690
+ player.volume(current_volume);
691
+ }
692
+ }
693
+ }
694
+ } //automatic
695
+ }
696
  }
697
 
698
  var meta = jQuery('#kgvid_video_gallery_thumb_'+id).data('meta');
781
  else if (typeof _gaq != "undefined") { _gaq.push(["_trackEvent", "Videos", kgvidL10n_frontend.playstart, title]); }
782
 
783
  }
784
+
785
+ if ( !isNaN(event) ) {
786
+
787
+ if (typeof ga != "undefined") { ga("send", "event", "Videos", event+"%", title); }
788
+ else if (typeof _gaq != "undefined") { _gaq.push(["_trackEvent", "Videos", event+"%", title]); }
789
+
790
+ }
791
+
792
  if ( event == "end" ) {
793
  if (video_vars.countable) { //video is in the db
794
  changed = true;
837
  }, "json");
838
 
839
  }
840
+
841
+ function kgvid_share_icon_click(id) {
842
+
843
+ var player_element;
844
+ var event;
845
+
846
+ if ( jQuery('#kgvid_'+id+'_shareicon').hasClass('dashicons-share') ) {
847
+ event = 'turn on';
848
+ jQuery('#kgvid_'+id+'_shareicon').removeClass('dashicons-share').addClass('dashicons-no');
849
+ }
850
+ else {
851
+ event = 'turn off';
852
+ jQuery('#kgvid_'+id+'_shareicon').removeClass('dashicons-no').addClass('dashicons-share');
853
+ }
854
+
855
+ var video_vars = jQuery('#video_'+id+'_div').data('kgvid_video_vars');
856
+
857
+ if ( video_vars.player_type == "Video.js" ) {
858
+
859
+ videojs('video_'+id).pause();
860
+
861
+ if ( jQuery('#video_'+id).hasClass('vjs-has-started') ) {
862
+ player_element = ' .vjs-control-bar';
863
+ }
864
+ else { //hasn't started playing yet
865
+ player_element = ' .vjs-big-play-button';
866
+ }
867
+
868
+ if ( jQuery('#video_'+id+'_div'+player_element).attr('style') == undefined ) {
869
+ jQuery('#video_'+id+'_div'+player_element).hide();
870
+ }
871
+ else {
872
+ jQuery('#video_'+id+'_div'+player_element).removeAttr('style');
873
+ }
874
+
875
+ }// if Video.js player
876
+ else if ( video_vars.player_type == "WordPressDefault" ) {
877
+
878
+ jQuery('#video_'+id+'_div video')[0].pause();
879
+ jQuery('#video_'+id+'_div .mejs-overlay-button').toggle();
880
+
881
+ }//if WordPress Default player
882
+ else if ( video_vars.player_type == "JWPlayer" ) {
883
+ var player_id = jQuery('#video_'+id+'_div').children('div[id^="jwplayer"]').attr('id');
884
+ player_id = player_id.replace('_wrapper', ''); //Flash JW Players have wrapper in the id
885
+ var player = jwplayer(player_id);
886
+ player.pause(true);
887
+ }
888
+
889
+ if ( event == 'turn on' ) { jQuery('#video_'+id+'_div').off('mouseenter mouseleave focus focusout').addClass('kgvid_video_meta_hover'); }
890
+ else { kgvid_add_hover(id); }
891
+
892
+ jQuery('#video_'+id+'_embed, #click_trap_'+id).slideToggle();
893
+
894
+ }
js/kgvid_video_plugin_admin.js CHANGED
@@ -122,6 +122,10 @@ function kgvid_thumb_video_loaded(postID) { //sets up mini custom player for mak
122
  }
123
  }
124
 
 
 
 
 
125
  video.removeAttribute("controls");
126
  video.muted=true;
127
 
@@ -199,6 +203,27 @@ function kgvid_thumb_video_loaded(postID) { //sets up mini custom player for mak
199
  }
200
  }
201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  function kgvid_reveal_thumb_video(postID) {
203
  jQuery('#show-thumb-video-'+postID+' :first').toggleClass( 'kgvid-down-arrow kgvid-right-arrow' );
204
  var text = jQuery('#show-thumb-video-'+postID+' :nth-child(2)');
@@ -305,7 +330,7 @@ function kgvid_generate_thumb(postID, buttonPushed) {
305
  else { document.getElementById(widthID).value = document.getElementsByName(maxwidthID)[0].value; }
306
  document.getElementById(heightID).value = Math.round(kgvid_aspect*parseInt(document.getElementById(widthID).value));
307
 
308
- kgvid_redraw_encode_checkboxes(attachmentURL, postID, page);
309
 
310
  }, "json");
311
 
@@ -343,11 +368,7 @@ function kgvid_generate_thumb(postID, buttonPushed) {
343
 
344
  jQuery(thumbnailboxID).append('<div style="display:none;" class="kgvid_thumbnail_select" name="attachments['+postID+'][thumb'+time_id+']" id="attachments-'+postID+'-thumb'+time_id+'"><label for="kgflashmedia-'+postID+'-thumbradio'+time_id+'"><canvas class="kgvid_thumbnail" style="width:200px;height:'+Math.round(200*video_aspect)+'px;" id="'+postID+'_thumb_'+time_id+'"></canvas></label><br /><input type="radio" name="attachments['+postID+'][thumbradio'+time_id+']" id="kgflashmedia-'+postID+'-thumbradio'+time_id+'" value="'+video.currentTime+'" onchange="document.getElementById(\'attachments-'+postID+'-kgflashmediaplayer-thumbtime\').value = \''+time_display+'\'; document.getElementById(\'attachments-'+postID+'-kgflashmediaplayer-numberofthumbs\').value =\'1\';kgvid_save_canvas_thumb(\''+postID+'\', \''+time_id+'\', 1, 1);"></div>');
345
  var canvas = document.getElementById(postID+'_thumb_'+time_id);
346
- canvas.width = video_width;
347
- canvas.height = video_height;
348
- var context = canvas.getContext('2d');
349
- context.fillRect(0, 0, video_width, video_height);
350
- context.drawImage(video, 0, 0, video_width, video_height);
351
  jQuery('#attachments-'+postID+'-thumb'+time_id).animate({opacity: 'toggle', height: 'toggle', width: 'toggle'}, 1000);
352
 
353
  thumbnail_saved.splice(0,1);
@@ -400,11 +421,43 @@ function kgvid_generate_thumb(postID, buttonPushed) {
400
  }
401
  }
402
 
403
- function kgvid_select_thumbnail(thumb_url, post_id, movieoffset) {
 
404
  jQuery('[name="attachments['+post_id+'][kgflashmediaplayer-poster]"]').val(thumb_url); //get this by name because it's the same before WP v3.5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
405
  var time_display = kgvid_convert_to_timecode(movieoffset);
406
  jQuery('#attachments-'+post_id+'-kgflashmediaplayer-thumbtime').val(time_display);
407
  jQuery('#attachments-'+post_id+'-kgflashmediaplayer-numberofthumbs').val('1');
 
 
 
 
 
 
 
 
 
 
 
 
408
  }
409
 
410
  function kgvid_save_canvas_thumb(postID, time_id, total, index) {
@@ -413,7 +466,7 @@ function kgvid_save_canvas_thumb(postID, time_id, total, index) {
413
 
414
  var video_url = document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-url]')[0].value;
415
  var canvas = document.getElementById(postID+'_thumb_'+time_id);
416
- var png64dataURL = canvas.toDataURL(); //this is what saves the image. Do this after selection.
417
 
418
  jQuery('#attachments-'+postID+'-thumbnailplaceholder canvas').fadeTo(500, .25);
419
  jQuery('#attachments-'+postID+'-thumbnailplaceholder input').attr('disabled', true);
@@ -422,17 +475,29 @@ function kgvid_save_canvas_thumb(postID, time_id, total, index) {
422
  jQuery.ajax({
423
  type: "POST",
424
  url: ajaxurl,
425
- data: { action:"kgvid_save_html5_thumb", security: kgflashmediaplayersecurity, raw_png: png64dataURL, url: video_url, offset: time_id, postID: postID, total: total, index: index }
426
  })
427
  .done( function(thumb_url) {
428
  if ( total == 1 ) {
429
  document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-autothumb-error]')[0].value = '';
430
  jQuery('#attachments-'+postID+'-kgflashmediaplayer-poster').val(thumb_url).change();
431
- if ( pagenow == 'attachment' ) { jQuery('#publish').click(); }
 
432
  }
433
  else {
434
  kgvid_thumbnail_saveall_progress(postID, total);
435
  }
 
 
 
 
 
 
 
 
 
 
 
436
  })
437
  .fail( function(xhr, textStatus, errorThrown) {
438
  document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-autothumb-error]')[0].value = errorThrown;
@@ -451,8 +516,8 @@ function kgvid_thumbnail_saveall_progress(postID, total) {
451
 
452
  if ( number == total ) {
453
  jQuery('#saveallthumbs-'+postID+'-div').slideUp(1000);
454
- jQuery('#attachments-'+postID+'-thumbnailplaceholder .kgvid_save_overlay').fadeOut();
455
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-thumbnailboxoverlay').fadeTo(500, 1);
456
  jQuery('#attachments-'+postID+'-thumbnailplaceholder input').removeAttr('disabled');
457
  }
458
 
@@ -510,23 +575,21 @@ function kgvid_thumb_video_manual(postID) {
510
  document.getElementById('attachments-'+postID+'-kgflashmediaplayer-thumbtime').value = time_display;
511
  jQuery("#attachments-"+postID+"-thumbnailplaceholder").html('<div class="kgvid_thumbnail_box kgvid_chosen_thumbnail_box"><canvas style="height:'+Math.round(200*video_aspect)+'px;" id="'+postID+'_thumb_'+time_id+'"></canvas></div>');
512
  var canvas = document.getElementById(postID+'_thumb_'+time_id);
513
- canvas.width = video.videoWidth;
514
- canvas.height = video.videoHeight;
515
- var context = canvas.getContext('2d');
516
- context.fillRect(0, 0, video.videoWidth, video.videoHeight);
517
- context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
518
  kgvid_save_canvas_thumb(postID, time_id, 1, 1);
519
 
520
  }
521
 
522
- function kgvid_enqueue_video_encode(postID) {
523
 
524
- var kgflashmediaplayersecurity = document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-security]')[0].value;
525
- var attachmentURL = document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-url]')[0].value;
 
 
526
  var parent_post_id = jQuery('#post_ID').val();
527
  if ( parent_post_id == undefined ) { parent_post_id = jQuery('#post_ID', window.parent.document).val(); }
528
- var encodeplaceholderid = "#attachments-"+postID+"-encodeplaceholder";
529
- var encodeprogressplaceholderid = "#attachments-"+postID+"-encodeprogressplaceholder";
530
 
531
  var page = "attachment";
532
  var document_url = document.URL;
@@ -540,8 +603,8 @@ function kgvid_enqueue_video_encode(postID) {
540
  var kgvid_encode = new Object();
541
  jQuery.each(formats, function(key,formats) {
542
  kgvid_encode[formats] = "";
543
- if ( jQuery('#attachments-'+postID+'-kgflashmediaplayer-encode'+formats).length > 0) {
544
- kgvid_encode[formats] = document.getElementById('attachments-'+postID+'-kgflashmediaplayer-encode'+formats).checked;
545
  }
546
  });
547
  JSON.stringify(kgvid_encode);
@@ -550,7 +613,7 @@ function kgvid_enqueue_video_encode(postID) {
550
  jQuery(encodeprogressplaceholderid).empty();
551
  jQuery(encodeplaceholderid).append('<strong>'+kgvidL10n.loading+'</strong>');
552
 
553
- jQuery.post(ajaxurl, { action:"kgvid_callffmpeg", security: kgflashmediaplayersecurity, movieurl: attachmentURL, ffmpeg_action: 'enqueue', encodeformats: kgvid_encode, attachmentID: postID, parent_id: parent_post_id }, function(data) {
554
 
555
  jQuery(encodeplaceholderid).empty();
556
  jQuery(encodeprogressplaceholderid).empty();
@@ -560,8 +623,8 @@ function kgvid_enqueue_video_encode(postID) {
560
  jQuery(encodeplaceholderid).append(data.embed_display);
561
 
562
  setTimeout(function(){
563
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-encodeboxes').css('opacity', '0.5');
564
- kgvid_redraw_encode_checkboxes(attachmentURL, postID, page);
565
  }, 2000);
566
  }, "json");
567
 
@@ -636,7 +699,7 @@ function kgvid_set_singleurl() {
636
  url = data.movieurl;
637
  kgvid_change_singleurl(url, basename, oldbasename);
638
  jQuery('#attachments-'+basename+'-kgflashmediaplayer-encodeboxes').css('opacity', '0.5');
639
- kgvid_redraw_encode_checkboxes(url, basename, 'attachment');
640
  }, "json");
641
  break;
642
  }
@@ -713,16 +776,46 @@ function kgvid_rescan_external_server(movieurl, postID) {
713
  jQuery('#attachments-'+postID+'-kgflashmediaplayer-rescanplaceholder').append('<strong>Scanning...</strong>');
714
  jQuery.post(ajaxurl, { action:"kgvid_rescan_external_server", security: kgflashmediaplayersecurity, movieurl:movieurl, postID:postID }, function() {
715
  jQuery('#attachments-'+postID+'-kgflashmediaplayer-encodeboxes').css('opacity', '0.5');
716
- kgvid_redraw_encode_checkboxes(movieurl, postID, 'queue');
717
  jQuery('#attachments-'+postID+'-kgflashmediaplayer-rescanplaceholder').empty();
718
  });
719
  }
720
 
721
- function kgvid_cancel_encode(kgvid_pid, postID, video_key, format) {
722
 
723
- var kgflashmediaplayersecurity = document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-security]')[0].value;
724
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-meta'+format).empty();
725
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-meta'+format).append('<strong>Canceling</strong>');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
726
  jQuery.post(ajaxurl, { action:"kgvid_cancel_encode", security: kgflashmediaplayersecurity, kgvid_pid: kgvid_pid, video_key: video_key, format: format } );
727
 
728
  }
@@ -733,16 +826,18 @@ function kgvid_delete_video(movieurl, postID, format, childID, blogID) {
733
 
734
  if ( delete_for_sure == true ) {
735
 
736
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-encode'+format).removeAttr('disabled');
737
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-encode').removeAttr('disabled');
738
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-encode').css('display', 'inline');
739
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-meta'+format).empty();
740
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-meta'+format).append('<strong>Deleted</strong>');
741
- var kgflashmediaplayersecurity = document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-security]')[0].value;
 
 
742
 
743
  jQuery.post(ajaxurl, { action: "kgvid_delete_video", security: kgflashmediaplayersecurity, movieurl: movieurl, postid: postID, format: format, childid: childID, blogid: blogID }, function(data) {
744
  jQuery('#attachments-'+postID+'-kgflashmediaplayer-encode'+format).change();
745
- if ( pagenow == 'settings_page_kgvid_network_video_encoding_queue-network' || pagenow == 'tools_page_kgvid_video_encoding_queue' ) { page = 'queue'; }
746
  else { page = 'attachment'; }
747
  kgvid_redraw_encode_checkboxes(movieurl, postID, page, blogID);
748
  }, "json" );
@@ -769,7 +864,7 @@ function kgvid_cancel_thumbs(postID) {
769
 
770
  function kgvid_update_encode_queue() {
771
 
772
- if ( pagenow == 'tools_page_kgvid_video_encoding_queue' || pagenow == 'settings_page_kgvid_network_video_encoding_queue-network' ) {
773
  var page = 'queue';
774
  var kgflashmediaplayersecurity = document.getElementsByName('attachments[kgflashmediaplayer-security]')[0].value;
775
  }
@@ -797,84 +892,89 @@ function kgvid_update_encode_queue() {
797
  var queued = false;
798
  var time_to_wait = 5000;
799
 
800
- jQuery.each(data.queue, function(video_key, video_entry) {
 
801
 
802
- if ( page != "queue" && jQuery('#attachments-'+video_entry.attachmentID+'-kgflashmediaplayer-encodeboxes').length == 0 ) { return true; }
803
 
804
- if ( video_entry.hasOwnProperty('encode_formats') ) {
805
 
806
- var currently_encoding = false;
807
 
808
- jQuery.each(video_entry.encode_formats, function(format, format_entry) {
809
 
810
- if ( format_entry.status == 'encoding' ) {
811
 
812
- currently_encoding = true;
813
- check_again = true;
814
 
815
- if ( page == "queue" ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
816
 
817
- if ( jQuery('#clear_'+video_entry.attachmentID).css("display") != "none" ) {
818
- jQuery('#clear_'+video_entry.attachmentID).css("display", "none");
819
- }
820
- if ( !jQuery('#tr_'+video_entry.attachmentID).hasClass('currently_encoding') ) {
821
- jQuery('#tr_'+video_entry.attachmentID).addClass('currently_encoding');
822
- }
823
- if ( jQuery('#tr_'+video_entry.attachmentID).hasClass('kgvid_complete') ) {
824
- jQuery('#tr_'+video_entry.attachmentID).removeClass('kgvid_complete');
825
  }
826
 
827
  }
828
 
829
- }
 
 
830
 
831
- if ( format_entry.status == 'queued' ) {
832
- queued = true;
833
- }
834
 
835
- if ( format_entry.hasOwnProperty('meta_array') ) {
 
836
 
837
- var meta_entry = jQuery('#attachments-'+video_entry.attachmentID+'-kgflashmediaplayer-meta'+format);
838
- var checkbox = jQuery('#attachments-'+video_entry.attachmentID+'-kgflashmediaplayer-encode'+format);
839
 
840
- if ( format_entry.status == 'encoding') { time_to_wait = format_entry.meta_array.time_to_wait; }
 
 
 
 
841
 
842
- if ( meta_entry.html() != undefined && format_entry.meta_array.meta != meta_entry.html() ) {
843
- check_again = true;
844
- meta_entry.empty();
845
- meta_entry.html(format_entry.meta_array.meta);
846
- }
847
 
848
- if ( format_entry.meta_array.checked != '' ) {
849
- checkbox.attr('checked', true);
850
- }
851
- else if ( format_entry.status == 'Encoding Complete' ) { checkbox.removeAttr('checked'); }
852
 
853
- if ( format_entry.meta_array.disabled != '' ) {
854
- checkbox.attr('disabled', true);
855
  }
856
- else { checkbox.removeAttr('disabled'); }
857
 
858
- }
859
 
860
- }); //end loop through encode formats
861
 
862
- }
863
 
864
- if ( page == 'queue' && currently_encoding == false ) {
865
 
866
- if ( queued == false ) { jQuery('#tr_'+video_entry.attachmentID).addClass('kgvid_complete'); }
 
 
 
 
 
867
 
868
- if ( jQuery('#tr_'+video_entry.attachmentID).hasClass('currently_encoding') ) {
869
- jQuery('#tr_'+video_entry.attachmentID).removeClass('currently_encoding');
870
- }
871
- if ( jQuery('#tr_'+video_entry.attachmentID+' #clear_'+video_entry.attachmentID).css("display") != "block" ) {
872
- jQuery('#tr_'+video_entry.attachmentID+' #clear_'+video_entry.attachmentID).css("display", "block");
873
  }
874
 
875
- }
876
 
877
- }); //end loop through queue
878
 
879
  if ( check_again == true ) {
880
  var encode_queue_timeouts = container_element.data('encode_queue_timeouts');
@@ -892,43 +992,46 @@ function kgvid_update_encode_queue() {
892
 
893
  function kgvid_redraw_encode_checkboxes(movieurl, postID, page, blogID) {
894
 
895
- var kgflashmediaplayersecurity = jQuery('#attachments-'+postID+'-kgflashmediaplayer-security').val();
 
 
896
 
897
  if ( kgflashmediaplayersecurity ) { //sometimes this tries to run after the media modal is closed
898
 
899
  var formats = new Array("fullres", "1080", "720", "mobile", "ogg", "webm");
900
  var kgvid_encode = new Object();
 
901
  jQuery.each(formats, function(key,formats) {
902
  kgvid_encode[formats] = "";
903
- if ( jQuery('#attachments-'+postID+'-kgflashmediaplayer-encode'+formats).length > 0) {
904
- kgvid_encode[formats] = document.getElementById('attachments-'+postID+'-kgflashmediaplayer-encode'+formats).checked;
905
  }
906
  });
907
  JSON.stringify(kgvid_encode);
908
 
909
- jQuery.post(ajaxurl, { action:"kgvid_generate_encode_checkboxes", security: kgflashmediaplayersecurity, movieurl: movieurl, post_id: postID, page: page, blog_id: blogID, encodeformats: kgvid_encode }, function(data) {
910
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-encodeboxes').empty();
911
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-encodeboxes').append(data.checkboxes);
912
  if ( page == "queue" ) {
913
- jQuery('#tr_'+postID+'.currently_encoding').removeClass('currently_encoding');
914
- jQuery('#tr_'+postID+' #clear_'+postID).css("display", "block");
915
  if ( data.encoding == true ) {
916
- jQuery('#clear_'+postID).css("display", "none");
917
- jQuery('#tr_'+postID).addClass('currently_encoding');
918
  }
919
 
920
  }
921
 
922
  setTimeout( function(){ kgvid_update_encode_queue() }, 3000 ); //start the loop
923
 
924
- jQuery('#attachments-'+postID+'-kgflashmediaplayer-encodeboxes').removeAttr('style');
925
  }, "json" );
926
  }
927
  }
928
 
929
  function kgvid_redraw_thumbnail_box(postID) {
930
 
931
- var kgflashmediaplayersecurity = jQuery('#attachments-'+postID+'-kgflashmediaplayer-security').val();
932
 
933
  if ( kgflashmediaplayersecurity ) {
934
 
@@ -954,26 +1057,25 @@ function kgvid_redraw_thumbnail_box(postID) {
954
  }
955
  }
956
 
957
- function kgvid_encode_queue(action, order, id) {
958
 
959
- var kgflashmediaplayersecurity = document.getElementsByName('attachments[kgflashmediaplayer-security]')[0].value;
960
 
961
  var CheckboxTimeout = jQuery('#wpwrap').data("KGVIDCheckboxTimeout") || null;
962
  if ( CheckboxTimeout ) { clearTimeout(CheckboxTimeout); }
963
 
964
- var scope = 'blog';
965
- if ( pagenow == 'settings_page_kgvid_network_video_encoding_queue-network' ) { scope = 'network' }
966
 
967
  if ( action == "delete" ) {
968
- jQuery('#tr_'+id).fadeTo('slow', 0.5);
969
- jQuery.post(ajaxurl, { action:"kgvid_clear_queue_entry", security: kgflashmediaplayersecurity, index: order, scope: scope }, function(data) {
970
  jQuery('table.widefat > tbody').replaceWith("<tbody class='rows'>"+data+"</tbody>");
971
  }, "html" );
972
  }
973
 
974
  if ( action == "clear_completed" ) {
975
  jQuery('tbody > .kgvid_complete').fadeTo('slow', 0.5);
976
- jQuery.post(ajaxurl, { action:"kgvid_clear_completed_queue", security: kgflashmediaplayersecurity, type:"manual", scope: scope }, function(data) {
977
  jQuery('table.widefat > tbody').replaceWith("<tbody class='rows'>"+data+"</tbody>");
978
  }, "html" );
979
  }
@@ -984,7 +1086,20 @@ function kgvid_encode_queue(action, order, id) {
984
 
985
  if ( clear_for_sure == true ) {
986
  jQuery('tbody > .kgvid_queued').fadeTo('slow', 0.5);
987
- jQuery.post(ajaxurl, { action:"kgvid_clear_completed_queue", security: kgflashmediaplayersecurity, type:"queued", scope: scope }, function(data) {
 
 
 
 
 
 
 
 
 
 
 
 
 
988
  jQuery('table.widefat > tbody').replaceWith("<tbody class='rows'>"+data+"</tbody>");
989
  }, "html" );
990
  }
@@ -1115,10 +1230,16 @@ function kgvid_switch_settings_tab(tab) {
1115
  jQuery("#general_tab").removeClass("nav-tab-active");
1116
  jQuery("#encoding_tab").addClass("nav-tab-active");
1117
 
1118
- jQuery('h3:eq(0), h3:eq(2)').hide();
 
 
 
 
 
 
 
1119
  jQuery('table:eq(0), table:eq(1), table:eq(2), table:eq(3)').hide();
1120
  jQuery(".kgvid_setting_nearvid").hide();
1121
- jQuery('h3:eq(3)').show();
1122
  jQuery('table:eq(4)').show();
1123
 
1124
  if ( jQuery('#app_path').data('ffmpeg_exists') == "on" && jQuery('#ffmpeg_output').html() == "" ) {
@@ -1140,10 +1261,17 @@ function kgvid_switch_settings_tab(tab) {
1140
 
1141
  jQuery("#general_tab").addClass("nav-tab-active");
1142
  jQuery("#encoding_tab").removeClass("nav-tab-active");
1143
- jQuery('h3:eq(0), h3:eq(2)').show();
 
 
 
 
 
 
 
1144
  jQuery('table:eq(0), table:eq(1), table:eq(3)').show();
1145
  jQuery(".kgvid_setting_nearvid").show();
1146
- jQuery('h3:eq(3)').hide();
1147
  jQuery('table:eq(4)').hide();
1148
 
1149
  }
@@ -1162,21 +1290,31 @@ function kgvid_hide_plugin_settings() {
1162
 
1163
  if ( playback_option != "Strobe Media Playback" || encoding_tab ) {
1164
  jQuery('table:eq(2)').hide();
1165
- jQuery('h3:eq(1)').hide();
 
 
 
 
 
1166
  }
1167
 
1168
  if ( general_tab ) {
1169
 
1170
  if ( playback_option == "Strobe Media Playback" ) {
1171
  jQuery('table:eq(2)').show();
1172
- jQuery('h3:eq(1)').show();
 
 
 
 
 
1173
  }
1174
 
1175
  if ( playback_option == "WordPress Default" || playback_option == "JW Player" ) {
1176
  jQuery('#nativecontrolsfortouch').parents().eq(1).hide();
1177
  jQuery('#js_skin').parents().eq(1).hide();
1178
  jQuery('#chromecast').parents().eq(1).hide();
1179
- jQuery('#auto_res').parents().eq(1).hide();
1180
  }
1181
 
1182
  if ( playback_option == "Video.js" || playback_option == "Strobe Media Playback" ) {
@@ -1184,10 +1322,16 @@ function kgvid_hide_plugin_settings() {
1184
  jQuery('#js_skin').parents().eq(1).show();
1185
  jQuery('#chromecast').parents().eq(1).show();
1186
  jQuery('#auto_res').parents().eq(1).show();
 
 
 
 
 
1187
  }
1188
 
1189
  if ( playback_option == "JW Player" ) {
1190
  jQuery('#endofvideooverlay').parents().eq(1).hide();
 
1191
  jQuery('#jw_player_id_select').fadeIn();
1192
  }
1193
  else {
@@ -1195,22 +1339,28 @@ function kgvid_hide_plugin_settings() {
1195
  jQuery('#jw_player_id_select').fadeOut();
1196
  }
1197
 
1198
- }
1199
-
1200
- if ( encoding_tab ) {
1201
-
1202
- var moov = jQuery('#moov').val();
 
1203
 
1204
- if ( moov == 'none' || moov == 'movflag' ) {
1205
- jQuery('#moov_path_p').hide();
1206
  }
1207
  else {
1208
- jQuery('.kgvid_moov_option').html(moov);
1209
- jQuery('#moov_path_p').show();
1210
  }
1211
 
1212
  }
1213
 
 
 
 
 
 
 
1214
  if ( ffmpeg_exists == "notinstalled" ) {
1215
  jQuery(".kgvid_video_app_required").addClass("kgvid_thumbnail_overlay");
1216
  jQuery(".kgvid_video_app_required").attr('title', kgvidL10n.ffmpegrequired);
@@ -1242,6 +1392,27 @@ function kgvid_hide_ffmpeg_settings() {
1242
 
1243
  }
1244
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1245
  function kgvid_hide_watermark_url(obj) {
1246
 
1247
  if ( obj.value == 'custom' ) {
@@ -1452,7 +1623,7 @@ function kgvid_pick_attachment(button) {
1452
 
1453
  }
1454
 
1455
- function kgvid_pick_format(button, parentID, mime, format, movieurl) {
1456
 
1457
  var frame;
1458
 
@@ -1493,8 +1664,8 @@ function kgvid_pick_format(button, parentID, mime, format, movieurl) {
1493
  var video = frame.state().get('selection').first();
1494
  var kgflashmediaplayersecurity = document.getElementsByName('attachments['+parentID+'][kgflashmediaplayer-security]')[0].value;
1495
 
1496
- jQuery.post(ajaxurl, { action:"kgvid_update_child_format", security: kgflashmediaplayersecurity, parent_id: parentID, video_id: video.id, format: format }, function(data) {
1497
- kgvid_redraw_encode_checkboxes(movieurl, parentID, 'attachment');
1498
  }, "json");
1499
 
1500
  });
@@ -1509,7 +1680,7 @@ function kgvid_clear_video(movieurl, postID, video_id, blog_id) {
1509
  var kgflashmediaplayersecurity = document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-security]')[0].value;
1510
 
1511
  jQuery.post(ajaxurl, { action:"kgvid_clear_child_format", security: kgflashmediaplayersecurity, video_id: video_id, blog_id: blog_id }, function(data) {
1512
- kgvid_redraw_encode_checkboxes(movieurl, postID, 'attachment');
1513
  }, "json");
1514
 
1515
  }
122
  }
123
  }
124
 
125
+ video.removeAttribute('height'); //disables changes made by mejs
126
+ video.removeAttribute('style');
127
+ video.setAttribute('width', '200');
128
+
129
  video.removeAttribute("controls");
130
  video.muted=true;
131
 
203
  }
204
  }
205
 
206
+ function kgvid_draw_thumb_canvas(canvas, canvas_source) {
207
+
208
+ if ( canvas_source.nodeName.toLowerCase() === 'video' ) {
209
+ canvas_width = canvas_source.videoWidth;
210
+ canvas_height = canvas_source.videoHeight;
211
+ }
212
+ else {
213
+ canvas_width = canvas_source.width;
214
+ canvas_height = canvas_source.height;
215
+ }
216
+
217
+ canvas.width = canvas_width;
218
+ canvas.height = canvas_height;
219
+ var context = canvas.getContext('2d');
220
+ context.fillRect(0, 0, canvas_width, canvas_height);
221
+ context.drawImage(canvas_source, 0, 0, canvas_width, canvas_height);
222
+
223
+ return canvas;
224
+
225
+ }
226
+
227
  function kgvid_reveal_thumb_video(postID) {
228
  jQuery('#show-thumb-video-'+postID+' :first').toggleClass( 'kgvid-down-arrow kgvid-right-arrow' );
229
  var text = jQuery('#show-thumb-video-'+postID+' :nth-child(2)');
330
  else { document.getElementById(widthID).value = document.getElementsByName(maxwidthID)[0].value; }
331
  document.getElementById(heightID).value = Math.round(kgvid_aspect*parseInt(document.getElementById(widthID).value));
332
 
333
+ kgvid_redraw_encode_checkboxes(attachmentURL, postID, page, false);
334
 
335
  }, "json");
336
 
368
 
369
  jQuery(thumbnailboxID).append('<div style="display:none;" class="kgvid_thumbnail_select" name="attachments['+postID+'][thumb'+time_id+']" id="attachments-'+postID+'-thumb'+time_id+'"><label for="kgflashmedia-'+postID+'-thumbradio'+time_id+'"><canvas class="kgvid_thumbnail" style="width:200px;height:'+Math.round(200*video_aspect)+'px;" id="'+postID+'_thumb_'+time_id+'"></canvas></label><br /><input type="radio" name="attachments['+postID+'][thumbradio'+time_id+']" id="kgflashmedia-'+postID+'-thumbradio'+time_id+'" value="'+video.currentTime+'" onchange="document.getElementById(\'attachments-'+postID+'-kgflashmediaplayer-thumbtime\').value = \''+time_display+'\'; document.getElementById(\'attachments-'+postID+'-kgflashmediaplayer-numberofthumbs\').value =\'1\';kgvid_save_canvas_thumb(\''+postID+'\', \''+time_id+'\', 1, 1);"></div>');
370
  var canvas = document.getElementById(postID+'_thumb_'+time_id);
371
+ canvas = kgvid_draw_thumb_canvas(canvas, video);
 
 
 
 
372
  jQuery('#attachments-'+postID+'-thumb'+time_id).animate({opacity: 'toggle', height: 'toggle', width: 'toggle'}, 1000);
373
 
374
  thumbnail_saved.splice(0,1);
421
  }
422
  }
423
 
424
+ function kgvid_select_thumbnail(thumb_url, post_id, movieoffset, thumbnail) {
425
+
426
  jQuery('[name="attachments['+post_id+'][kgflashmediaplayer-poster]"]').val(thumb_url); //get this by name because it's the same before WP v3.5
427
+
428
+ var unscaledThumb = new Image();
429
+ unscaledThumb.src = thumbnail.src;
430
+ var canvas = document.createElement("canvas");
431
+ canvas = kgvid_draw_thumb_canvas(canvas, unscaledThumb);
432
+ var thumb_url = canvas.toDataURL('image/jpeg', 0.8);
433
+
434
+ kgvid_change_media_library_video_poster(post_id, thumb_url);
435
+
436
+ /* this breaks the media modal
437
+ setTimeout( function() {
438
+ if(wp.media.frame.content.get()!==null){
439
+ wp.media.frame.content.get().collection.props.set({ignore: (+ new Date())});
440
+ }
441
+ else{
442
+ wp.media.frame.library.props.set({ignore: (+ new Date())});
443
+ }
444
+ }, 2000); */
445
+
446
  var time_display = kgvid_convert_to_timecode(movieoffset);
447
  jQuery('#attachments-'+post_id+'-kgflashmediaplayer-thumbtime').val(time_display);
448
  jQuery('#attachments-'+post_id+'-kgflashmediaplayer-numberofthumbs').val('1');
449
+
450
+
451
+ }
452
+
453
+ function kgvid_change_media_library_video_poster(post_id, thumb_url) {
454
+
455
+ if ( jQuery('div[data-id='+post_id+'] .wp-video-shortcode video').length > 0 ) {
456
+ jQuery('div[data-id='+post_id+'] .mejs-poster').css('background-image', 'url("'+thumb_url+'")');
457
+ jQuery('div[data-id='+post_id+'] .mejs-poster img').attr('src', thumb_url);
458
+ jQuery('div[data-id='+post_id+'] .wp-video-shortcode video').attr('poster', thumb_url);
459
+ }
460
+
461
  }
462
 
463
  function kgvid_save_canvas_thumb(postID, time_id, total, index) {
466
 
467
  var video_url = document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-url]')[0].value;
468
  var canvas = document.getElementById(postID+'_thumb_'+time_id);
469
+ var png64dataURL = canvas.toDataURL('image/jpeg', 0.8); //this is what saves the image. Do this after selection.
470
 
471
  jQuery('#attachments-'+postID+'-thumbnailplaceholder canvas').fadeTo(500, .25);
472
  jQuery('#attachments-'+postID+'-thumbnailplaceholder input').attr('disabled', true);
475
  jQuery.ajax({
476
  type: "POST",
477
  url: ajaxurl,
478
+ data: { action:"kgvid_save_html5_thumb", security: kgflashmediaplayersecurity, url: video_url, offset: time_id, postID: postID, total: total, index: index, raw_png: png64dataURL }
479
  })
480
  .done( function(thumb_url) {
481
  if ( total == 1 ) {
482
  document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-autothumb-error]')[0].value = '';
483
  jQuery('#attachments-'+postID+'-kgflashmediaplayer-poster').val(thumb_url).change();
484
+ if ( typeof pagenow === 'undefined' || pagenow == 'attachment' ) { jQuery('#publish').click(); }
485
+ kgvid_change_media_library_video_poster(postID, png64dataURL);
486
  }
487
  else {
488
  kgvid_thumbnail_saveall_progress(postID, total);
489
  }
490
+
491
+ /* this breaks the media modal
492
+ setTimeout( function() {
493
+ if(wp.media.frame.content.get()!==null){
494
+ wp.media.frame.content.get().collection.props.set({ignore: (+ new Date())});
495
+ }
496
+ else{
497
+ wp.media.frame.library.props.set({ignore: (+ new Date())});
498
+ }
499
+ }, 2000); */
500
+
501
  })
502
  .fail( function(xhr, textStatus, errorThrown) {
503
  document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-autothumb-error]')[0].value = errorThrown;
516
 
517
  if ( number == total ) {
518
  jQuery('#saveallthumbs-'+postID+'-div').slideUp(1000);
519
+ jQuery('#attachments-'+postID+'-thumbnailplaceholder .kgvid_save_overlay').fadeOut("normal", function(){ jQuery(this).remove(); });
520
+ jQuery('#attachments-'+postID+'-kgflashmediaplayer-thumbnailboxoverlay, #attachments-'+postID+'-thumbnailplaceholder canvas').fadeTo(500, 1);
521
  jQuery('#attachments-'+postID+'-thumbnailplaceholder input').removeAttr('disabled');
522
  }
523
 
575
  document.getElementById('attachments-'+postID+'-kgflashmediaplayer-thumbtime').value = time_display;
576
  jQuery("#attachments-"+postID+"-thumbnailplaceholder").html('<div class="kgvid_thumbnail_box kgvid_chosen_thumbnail_box"><canvas style="height:'+Math.round(200*video_aspect)+'px;" id="'+postID+'_thumb_'+time_id+'"></canvas></div>');
577
  var canvas = document.getElementById(postID+'_thumb_'+time_id);
578
+ canvas = kgvid_draw_thumb_canvas(canvas, video);
 
 
 
 
579
  kgvid_save_canvas_thumb(postID, time_id, 1, 1);
580
 
581
  }
582
 
583
+ function kgvid_enqueue_video_encode(postID, blogID) {
584
 
585
+ var blog = kgvid_get_multisite_data(blogID);
586
+
587
+ var kgflashmediaplayersecurity = document.getElementsByName('attachments'+blog.name_text+'['+postID+'][kgflashmediaplayer-security]')[0].value;
588
+ var attachmentURL = document.getElementsByName('attachments'+blog.name_text+'['+postID+'][kgflashmediaplayer-url]')[0].value;
589
  var parent_post_id = jQuery('#post_ID').val();
590
  if ( parent_post_id == undefined ) { parent_post_id = jQuery('#post_ID', window.parent.document).val(); }
591
+ var encodeplaceholderid = "#attachments-"+blog.id_text+postID+"-encodeplaceholder";
592
+ var encodeprogressplaceholderid = "#attachments-"+blog.id_text+postID+"-encodeprogressplaceholder";
593
 
594
  var page = "attachment";
595
  var document_url = document.URL;
603
  var kgvid_encode = new Object();
604
  jQuery.each(formats, function(key,formats) {
605
  kgvid_encode[formats] = "";
606
+ if ( jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-encode'+formats).length > 0) {
607
+ kgvid_encode[formats] = document.getElementById('attachments-'+blog.id_text+postID+'-kgflashmediaplayer-encode'+formats).checked;
608
  }
609
  });
610
  JSON.stringify(kgvid_encode);
613
  jQuery(encodeprogressplaceholderid).empty();
614
  jQuery(encodeplaceholderid).append('<strong>'+kgvidL10n.loading+'</strong>');
615
 
616
+ jQuery.post(ajaxurl, { action:"kgvid_callffmpeg", security: kgflashmediaplayersecurity, movieurl: attachmentURL, ffmpeg_action: 'enqueue', encodeformats: kgvid_encode, attachmentID: postID, parent_id: parent_post_id, blog_id: blogID }, function(data) {
617
 
618
  jQuery(encodeplaceholderid).empty();
619
  jQuery(encodeprogressplaceholderid).empty();
623
  jQuery(encodeplaceholderid).append(data.embed_display);
624
 
625
  setTimeout(function(){
626
+ jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-encodeboxes').css('opacity', '0.5');
627
+ kgvid_redraw_encode_checkboxes(attachmentURL, postID, page, blogID);
628
  }, 2000);
629
  }, "json");
630
 
699
  url = data.movieurl;
700
  kgvid_change_singleurl(url, basename, oldbasename);
701
  jQuery('#attachments-'+basename+'-kgflashmediaplayer-encodeboxes').css('opacity', '0.5');
702
+ kgvid_redraw_encode_checkboxes(url, basename, 'attachment', false);
703
  }, "json");
704
  break;
705
  }
776
  jQuery('#attachments-'+postID+'-kgflashmediaplayer-rescanplaceholder').append('<strong>Scanning...</strong>');
777
  jQuery.post(ajaxurl, { action:"kgvid_rescan_external_server", security: kgflashmediaplayersecurity, movieurl:movieurl, postID:postID }, function() {
778
  jQuery('#attachments-'+postID+'-kgflashmediaplayer-encodeboxes').css('opacity', '0.5');
779
+ kgvid_redraw_encode_checkboxes(movieurl, postID, 'queue', false);
780
  jQuery('#attachments-'+postID+'-kgflashmediaplayer-rescanplaceholder').empty();
781
  });
782
  }
783
 
 
784
 
785
+ function kgvid_get_multisite_data(blogID) {
786
+
787
+ var blog = {};
788
+
789
+ if ( typeof pagenow !== 'undefined' && pagenow == 'settings_page_kgvid_network_video_encoding_queue-network' ) {
790
+ blog.scope = 'network';
791
+ blog.name_text = '['+blogID+']';
792
+ blog.id_text = blogID+'-';
793
+ blog.ID = blogID;
794
+ }
795
+ else if ( typeof pagenow !== 'undefined' && pagenow == 'tools_page_kgvid_video_encoding_queue' && !isNaN(parseInt(blogID)) ) {
796
+ blog.scope = 'site';
797
+ blog.name_text = '['+blogID+']';
798
+ blog.id_text = blogID+'-';
799
+ blog.ID = blogID;
800
+ }
801
+ else {
802
+ blog.scope = 'site';
803
+ blog.name_text = '';
804
+ blog.id_text = '';
805
+ blog.ID = false;
806
+ }
807
+
808
+ return blog;
809
+
810
+ }
811
+
812
+ function kgvid_cancel_encode(kgvid_pid, postID, video_key, format, blogID) {
813
+
814
+ var blog = kgvid_get_multisite_data(blogID);
815
+
816
+ var kgflashmediaplayersecurity = document.getElementsByName('attachments'+blog.name_text+'['+postID+'][kgflashmediaplayer-security]')[0].value;
817
+ jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-meta'+format).empty();
818
+ jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-meta'+format).append('<strong>Canceling</strong>');
819
  jQuery.post(ajaxurl, { action:"kgvid_cancel_encode", security: kgflashmediaplayersecurity, kgvid_pid: kgvid_pid, video_key: video_key, format: format } );
820
 
821
  }
826
 
827
  if ( delete_for_sure == true ) {
828
 
829
+ var blog = kgvid_get_multisite_data(blogID);
830
+
831
+ jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-encode'+format).removeAttr('disabled');
832
+ jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-encode').removeAttr('disabled');
833
+ jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-encode').css('display', 'inline');
834
+ jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-meta'+format).empty();
835
+ jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-meta'+format).append('<strong>Deleted</strong>');
836
+ var kgflashmediaplayersecurity = document.getElementsByName('attachments'+blog.name_text+'['+postID+'][kgflashmediaplayer-security]')[0].value;
837
 
838
  jQuery.post(ajaxurl, { action: "kgvid_delete_video", security: kgflashmediaplayersecurity, movieurl: movieurl, postid: postID, format: format, childid: childID, blogid: blogID }, function(data) {
839
  jQuery('#attachments-'+postID+'-kgflashmediaplayer-encode'+format).change();
840
+ if ( typeof pagenow !== 'undefined' && ( pagenow == 'settings_page_kgvid_network_video_encoding_queue-network' || pagenow == 'tools_page_kgvid_video_encoding_queue' ) ) { page = 'queue'; }
841
  else { page = 'attachment'; }
842
  kgvid_redraw_encode_checkboxes(movieurl, postID, page, blogID);
843
  }, "json" );
864
 
865
  function kgvid_update_encode_queue() {
866
 
867
+ if ( typeof pagenow !== 'undefined' && ( pagenow == 'tools_page_kgvid_video_encoding_queue' || pagenow == 'settings_page_kgvid_network_video_encoding_queue-network' ) ) {
868
  var page = 'queue';
869
  var kgflashmediaplayersecurity = document.getElementsByName('attachments[kgflashmediaplayer-security]')[0].value;
870
  }
892
  var queued = false;
893
  var time_to_wait = 5000;
894
 
895
+ if ( data.queue.length !== 0 && data.queue.length !== undefined ) {
896
+ jQuery.each(data.queue, function(video_key, video_entry) {
897
 
898
+ var blog = kgvid_get_multisite_data(video_entry.blog_id);
899
 
900
+ if ( page != "queue" && jQuery('#attachments-'+blog.id_text+video_entry.attachmentID+'-kgflashmediaplayer-encodeboxes').length == 0 ) { return true; }
901
 
902
+ if ( video_entry.hasOwnProperty('encode_formats') ) {
903
 
904
+ var currently_encoding = false;
905
 
906
+ jQuery.each(video_entry.encode_formats, function(format, format_entry) {
907
 
908
+ if ( format_entry.status == 'encoding' ) {
 
909
 
910
+ currently_encoding = true;
911
+ check_again = true;
912
+
913
+ if ( page == "queue" ) {
914
+
915
+ if ( jQuery('#clear-'+blog.id_text+video_entry.attachmentID).css("display") != "none" ) {
916
+ jQuery('#clear-'+blog.id_text+video_entry.attachmentID).css("display", "none");
917
+ }
918
+ if ( !jQuery('#tr-'+blog.id_text+video_entry.attachmentID).hasClass('currently_encoding') ) {
919
+ jQuery('#tr-'+blog.id_text+video_entry.attachmentID).addClass('currently_encoding');
920
+ }
921
+ if ( jQuery('#tr-'+blog.id_text+video_entry.attachmentID).hasClass('kgvid_complete') ) {
922
+ jQuery('#tr-'+blog.id_text+video_entry.attachmentID).removeClass('kgvid_complete');
923
+ }
924
 
 
 
 
 
 
 
 
 
925
  }
926
 
927
  }
928
 
929
+ if ( format_entry.status == 'queued' ) {
930
+ queued = true;
931
+ }
932
 
933
+ if ( format_entry.hasOwnProperty('meta_array') ) {
 
 
934
 
935
+ var meta_entry = jQuery('#attachments-'+blog.id_text+video_entry.attachmentID+'-kgflashmediaplayer-meta'+format);
936
+ var checkbox = jQuery('#attachments-'+blog.id_text+video_entry.attachmentID+'-kgflashmediaplayer-encode'+format);
937
 
938
+ if ( format_entry.status == 'encoding') { time_to_wait = format_entry.meta_array.time_to_wait; }
 
939
 
940
+ if ( meta_entry.html() != undefined && format_entry.meta_array.meta != meta_entry.html() ) {
941
+ check_again = true;
942
+ meta_entry.empty();
943
+ meta_entry.html(format_entry.meta_array.meta);
944
+ }
945
 
946
+ if ( format_entry.meta_array.checked != '' ) {
947
+ checkbox.attr('checked', true);
948
+ }
949
+ else if ( format_entry.status == 'Encoding Complete' ) { checkbox.removeAttr('checked'); }
 
950
 
951
+ if ( format_entry.meta_array.disabled != '' ) {
952
+ checkbox.attr('disabled', true);
953
+ }
954
+ else { checkbox.removeAttr('disabled'); }
955
 
 
 
956
  }
 
957
 
958
+ }); //end loop through encode formats
959
 
960
+ }
961
 
962
+ if ( page == 'queue' && currently_encoding == false ) {
963
 
964
+ if ( queued == false ) { jQuery('#tr-'+blog.id_text+video_entry.attachmentID).addClass('kgvid_complete'); }
965
 
966
+ if ( jQuery('#tr-'+blog.id_text+video_entry.attachmentID).hasClass('currently_encoding') ) {
967
+ jQuery('#tr-'+blog.id_text+video_entry.attachmentID).removeClass('currently_encoding');
968
+ }
969
+ if ( jQuery('#tr-'+blog.id_text+video_entry.attachmentID+' #clear-'+blog.id_text+video_entry.attachmentID).css("display") != "block" ) {
970
+ jQuery('#tr-'+blog.id_text+video_entry.attachmentID+' #clear-'+blog.id_text+video_entry.attachmentID).css("display", "block");
971
+ }
972
 
 
 
 
 
 
973
  }
974
 
975
+ }); //end loop through queue
976
 
977
+ }
978
 
979
  if ( check_again == true ) {
980
  var encode_queue_timeouts = container_element.data('encode_queue_timeouts');
992
 
993
  function kgvid_redraw_encode_checkboxes(movieurl, postID, page, blogID) {
994
 
995
+ var blog = kgvid_get_multisite_data(blogID);
996
+
997
+ var kgflashmediaplayersecurity = document.getElementsByName('attachments'+blog.name_text+'['+postID+'][kgflashmediaplayer-security]')[0].value;
998
 
999
  if ( kgflashmediaplayersecurity ) { //sometimes this tries to run after the media modal is closed
1000
 
1001
  var formats = new Array("fullres", "1080", "720", "mobile", "ogg", "webm");
1002
  var kgvid_encode = new Object();
1003
+
1004
  jQuery.each(formats, function(key,formats) {
1005
  kgvid_encode[formats] = "";
1006
+ if ( jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-encode'+formats).length > 0) {
1007
+ kgvid_encode[formats] = document.getElementById('attachments-'+blog.id_text+postID+'-kgflashmediaplayer-encode'+formats).checked;
1008
  }
1009
  });
1010
  JSON.stringify(kgvid_encode);
1011
 
1012
+ jQuery.post(ajaxurl, { action:"kgvid_generate_encode_checkboxes", security: kgflashmediaplayersecurity, movieurl: movieurl, post_id: postID, page: page, blog_id: blog.ID, encodeformats: kgvid_encode }, function(data) {
1013
+ jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-encodeboxes').empty();
1014
+ jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-encodeboxes').append(data.checkboxes);
1015
  if ( page == "queue" ) {
1016
+ jQuery('#tr-'+blog.id_text+postID+'.currently_encoding').removeClass('currently_encoding');
1017
+ jQuery('#tr-'+blog.id_text+postID+' #clear-'+postID).css("display", "block");
1018
  if ( data.encoding == true ) {
1019
+ jQuery('#clear-'+blog.id_text+postID).css("display", "none");
1020
+ jQuery('#tr-'+blog.id_text+postID).addClass('currently_encoding');
1021
  }
1022
 
1023
  }
1024
 
1025
  setTimeout( function(){ kgvid_update_encode_queue() }, 3000 ); //start the loop
1026
 
1027
+ jQuery('#attachments-'+blog.id_text+postID+'-kgflashmediaplayer-encodeboxes').removeAttr('style');
1028
  }, "json" );
1029
  }
1030
  }
1031
 
1032
  function kgvid_redraw_thumbnail_box(postID) {
1033
 
1034
+ var kgflashmediaplayersecurity = document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-security]')[0].value;
1035
 
1036
  if ( kgflashmediaplayersecurity ) {
1037
 
1057
  }
1058
  }
1059
 
1060
+ function kgvid_encode_queue(action, order, id, blogID) {
1061
 
1062
+ var blog = kgvid_get_multisite_data(blogID);
1063
 
1064
  var CheckboxTimeout = jQuery('#wpwrap').data("KGVIDCheckboxTimeout") || null;
1065
  if ( CheckboxTimeout ) { clearTimeout(CheckboxTimeout); }
1066
 
1067
+ var kgflashmediaplayersecurity = document.getElementsByName('attachments[kgflashmediaplayer-security]')[0].value;
 
1068
 
1069
  if ( action == "delete" ) {
1070
+ jQuery('#tr-'+blog.id_text+id).fadeTo('slow', 0.5);
1071
+ jQuery.post(ajaxurl, { action:"kgvid_clear_queue_entry", security: kgflashmediaplayersecurity, index: order, scope: blog.scope }, function(data) {
1072
  jQuery('table.widefat > tbody').replaceWith("<tbody class='rows'>"+data+"</tbody>");
1073
  }, "html" );
1074
  }
1075
 
1076
  if ( action == "clear_completed" ) {
1077
  jQuery('tbody > .kgvid_complete').fadeTo('slow', 0.5);
1078
+ jQuery.post(ajaxurl, { action:"kgvid_clear_completed_queue", security: kgflashmediaplayersecurity, type:"manual", scope: blog.scope }, function(data) {
1079
  jQuery('table.widefat > tbody').replaceWith("<tbody class='rows'>"+data+"</tbody>");
1080
  }, "html" );
1081
  }
1086
 
1087
  if ( clear_for_sure == true ) {
1088
  jQuery('tbody > .kgvid_queued').fadeTo('slow', 0.5);
1089
+ jQuery.post(ajaxurl, { action:"kgvid_clear_completed_queue", security: kgflashmediaplayersecurity, type:"queued", scope: blog.scope }, function(data) {
1090
+ jQuery('table.widefat > tbody').replaceWith("<tbody class='rows'>"+data+"</tbody>");
1091
+ }, "html" );
1092
+ }
1093
+
1094
+ }
1095
+
1096
+ if ( action == "clear_all" ) {
1097
+
1098
+ var clear_for_sure = confirm(kgvidL10n.clearallwarning+"\n"+kgvidL10n.cancel_ok);
1099
+
1100
+ if ( clear_for_sure == true ) {
1101
+ jQuery('tbody > .kgvid_queued').fadeTo('slow', 0.5);
1102
+ jQuery.post(ajaxurl, { action:"kgvid_clear_completed_queue", security: kgflashmediaplayersecurity, type:"all", scope: blog.scope }, function(data) {
1103
  jQuery('table.widefat > tbody').replaceWith("<tbody class='rows'>"+data+"</tbody>");
1104
  }, "html" );
1105
  }
1230
  jQuery("#general_tab").removeClass("nav-tab-active");
1231
  jQuery("#encoding_tab").addClass("nav-tab-active");
1232
 
1233
+ if ( jQuery('h3').length < 1 ) { // WP version 4.4 or later
1234
+ jQuery('h2:eq(1), h2:eq(3)').hide();
1235
+ jQuery('h2:eq(4)').show();
1236
+ }
1237
+ else { // before WP version 4.4
1238
+ jQuery('h3:eq(0), h3:eq(2)').hide();
1239
+ jQuery('h3:eq(3)').show();
1240
+ }
1241
  jQuery('table:eq(0), table:eq(1), table:eq(2), table:eq(3)').hide();
1242
  jQuery(".kgvid_setting_nearvid").hide();
 
1243
  jQuery('table:eq(4)').show();
1244
 
1245
  if ( jQuery('#app_path').data('ffmpeg_exists') == "on" && jQuery('#ffmpeg_output').html() == "" ) {
1261
 
1262
  jQuery("#general_tab").addClass("nav-tab-active");
1263
  jQuery("#encoding_tab").removeClass("nav-tab-active");
1264
+ if ( jQuery('h3').length < 1 ) { // WP version 4.4 or later
1265
+ jQuery('h2:eq(1), h2:eq(3)').show();
1266
+ jQuery('h2:eq(4)').hide();
1267
+ }
1268
+ else { // before WP version 4.4
1269
+ jQuery('h3:eq(0), h3:eq(2)').show();
1270
+ jQuery('h3:eq(3)').hide();
1271
+ }
1272
  jQuery('table:eq(0), table:eq(1), table:eq(3)').show();
1273
  jQuery(".kgvid_setting_nearvid").show();
1274
+
1275
  jQuery('table:eq(4)').hide();
1276
 
1277
  }
1290
 
1291
  if ( playback_option != "Strobe Media Playback" || encoding_tab ) {
1292
  jQuery('table:eq(2)').hide();
1293
+ if ( jQuery('h3').length < 1 ) { // WP version 4.4 or later
1294
+ jQuery('h2:eq(2)').hide();
1295
+ }
1296
+ else { // before WP version 4.4
1297
+ jQuery('h3:eq(1)').hide();
1298
+ }
1299
  }
1300
 
1301
  if ( general_tab ) {
1302
 
1303
  if ( playback_option == "Strobe Media Playback" ) {
1304
  jQuery('table:eq(2)').show();
1305
+ if ( jQuery('h3').length < 1 ) { // WP version 4.4 or later
1306
+ jQuery('h2:eq(2)').show();
1307
+ }
1308
+ else {
1309
+ jQuery('h3:eq(1)').show();
1310
+ }
1311
  }
1312
 
1313
  if ( playback_option == "WordPress Default" || playback_option == "JW Player" ) {
1314
  jQuery('#nativecontrolsfortouch').parents().eq(1).hide();
1315
  jQuery('#js_skin').parents().eq(1).hide();
1316
  jQuery('#chromecast').parents().eq(1).hide();
1317
+ jQuery('#resize_div').hide();
1318
  }
1319
 
1320
  if ( playback_option == "Video.js" || playback_option == "Strobe Media Playback" ) {
1322
  jQuery('#js_skin').parents().eq(1).show();
1323
  jQuery('#chromecast').parents().eq(1).show();
1324
  jQuery('#auto_res').parents().eq(1).show();
1325
+ jQuery('#resize_div').show();
1326
+ }
1327
+
1328
+ if ( playback_option == "WordPress Default" ) {
1329
+ jQuery('#auto_res').parents().eq(1).show();
1330
  }
1331
 
1332
  if ( playback_option == "JW Player" ) {
1333
  jQuery('#endofvideooverlay').parents().eq(1).hide();
1334
+ jQuery('#auto_res').parents().eq(1).hide();
1335
  jQuery('#jw_player_id_select').fadeIn();
1336
  }
1337
  else {
1339
  jQuery('#jw_player_id_select').fadeOut();
1340
  }
1341
 
1342
+ if ( jQuery('#twitter_button').prop('checked') || jQuery('#twitter_card').prop('checked') ) {
1343
+ jQuery('#twitter_username_div').slideDown();
1344
+ }
1345
+ else {
1346
+ jQuery('#twitter_username_div').slideUp();
1347
+ }
1348
 
1349
+ if ( jQuery('#auto_res').val() == 'automatic' ) {
1350
+ jQuery('#pixel_ratio_p').slideDown();
1351
  }
1352
  else {
1353
+ jQuery('#pixel_ratio_p').slideUp();
 
1354
  }
1355
 
1356
  }
1357
 
1358
+ if ( encoding_tab ) {
1359
+
1360
+ kgvid_moov_setting();
1361
+
1362
+ }
1363
+
1364
  if ( ffmpeg_exists == "notinstalled" ) {
1365
  jQuery(".kgvid_video_app_required").addClass("kgvid_thumbnail_overlay");
1366
  jQuery(".kgvid_video_app_required").attr('title', kgvidL10n.ffmpegrequired);
1392
 
1393
  }
1394
 
1395
+ function kgvid_moov_setting() {
1396
+
1397
+ var moov = jQuery('#moov').val();
1398
+
1399
+ if ( moov == 'none' || moov == 'movflag' ) {
1400
+ jQuery('#moov_path_p').hide();
1401
+ }
1402
+ else {
1403
+ jQuery('.kgvid_moov_option').html(moov);
1404
+ jQuery('#moov_path_p').show();
1405
+ }
1406
+
1407
+ }
1408
+
1409
+ function kgvid_change_replace_format() {
1410
+
1411
+ var replace_format_text = jQuery('#replace_format option:selected').text();
1412
+ jQuery('span.kgvid_replace_format').html(replace_format_text);
1413
+
1414
+ }
1415
+
1416
  function kgvid_hide_watermark_url(obj) {
1417
 
1418
  if ( obj.value == 'custom' ) {
1623
 
1624
  }
1625
 
1626
+ function kgvid_pick_format(button, parentID, mime, format, movieurl, blog_id) {
1627
 
1628
  var frame;
1629
 
1664
  var video = frame.state().get('selection').first();
1665
  var kgflashmediaplayersecurity = document.getElementsByName('attachments['+parentID+'][kgflashmediaplayer-security]')[0].value;
1666
 
1667
+ jQuery.post(ajaxurl, { action:"kgvid_update_child_format", security: kgflashmediaplayersecurity, parent_id: parentID, video_id: video.id, format: format, blog_id: blog_id }, function(data) {
1668
+ kgvid_redraw_encode_checkboxes(movieurl, parentID, 'attachment', blog_id);
1669
  }, "json");
1670
 
1671
  });
1680
  var kgflashmediaplayersecurity = document.getElementsByName('attachments['+postID+'][kgflashmediaplayer-security]')[0].value;
1681
 
1682
  jQuery.post(ajaxurl, { action:"kgvid_clear_child_format", security: kgflashmediaplayersecurity, video_id: video_id, blog_id: blog_id }, function(data) {
1683
+ kgvid_redraw_encode_checkboxes(movieurl, postID, 'attachment', blog_id);
1684
  }, "json");
1685
 
1686
  }
js/mep-feature-sourcechooser.js ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Source Chooser Plugin
2
+ (function($) {
3
+
4
+ $.extend(mejs.MepDefaults, {
5
+ sourcechooserText: 'Source Chooser'
6
+ });
7
+
8
+ $.extend(MediaElementPlayer.prototype, {
9
+ buildsourcechooser: function(player, controls, layers, media) {
10
+
11
+ var t = this;
12
+ var enable_plugin = false;
13
+
14
+ for (var i in this.node.children) {
15
+ var src = this.node.children[i];
16
+ if (src.nodeName === 'SOURCE' && src.dataset.res != undefined && src.dataset.res !== '' && (media.canPlayType(src.type) == 'probably' || media.canPlayType(src.type) == 'maybe')) {
17
+ var enable_plugin = true;
18
+ }
19
+ }
20
+
21
+ if ( enable_plugin == true ) {
22
+
23
+ player.sourcechooserButton =
24
+ $('<div class="mejs-button mejs-sourcechooser-button">'+
25
+ '<button type="button" aria-controls="' + t.id + '" title="' + t.options.sourcechooserText + '" aria-label="' + t.options.sourcechooserText + '"></button>'+
26
+ '<div class="mejs-menu-arrow">'+
27
+ '<div class="mejs-sourcechooser-selector">'+
28
+ '<span>'+kgvidL10n_frontend.quality+'</span>'+
29
+ '<ul>'+
30
+ '</ul>'+
31
+ '</div>'+
32
+ '</div>'+
33
+ '</div>')
34
+ .appendTo(controls)
35
+
36
+ // hover
37
+ .hover(function() {
38
+ $(this).find('.mejs-menu-arrow').show();
39
+ }, function() {
40
+ $(this).find('.mejs-menu-arrow').hide();
41
+ })
42
+
43
+ // handle clicks to the source radio buttons
44
+ .delegate('li', 'click', function() {
45
+
46
+ player.changeRes(this.innerHTML);
47
+
48
+ });
49
+
50
+ // add to list
51
+ player.availableRes = new Object();
52
+ for (var i in this.node.children) {
53
+ var src = this.node.children[i];
54
+ if (src.nodeName === 'SOURCE' && src.dataset.res != undefined && src.dataset.res !== '' && (media.canPlayType(src.type) == 'probably' || media.canPlayType(src.type) == 'maybe')) {
55
+ player.addSourceButton(src.src, src.dataset.res, src.type, media.src == src.src);
56
+ player.availableRes[src.dataset.res] = src.src;
57
+
58
+ if ( src.dataset.default_res != undefined ) {
59
+ if ( this.currentRes != src.dataset.res ) {
60
+ this.changeRes(src.dataset.res);
61
+ }
62
+ }
63
+
64
+ }
65
+ }
66
+
67
+ }
68
+
69
+ },
70
+
71
+ addSourceButton: function(src, label, type, isCurrent) {
72
+ var t = this;
73
+ if (label === '' || label == undefined) {
74
+ label = src;
75
+ }
76
+ type = type.split('/')[1];
77
+
78
+ t.sourcechooserButton.find('ul').append(
79
+ $('<li' + (isCurrent ? ' class="mejs-sourcechooser-selected"' : '') + ' name="' + t.id + '_sourcechooser" id="' + t.id + '_sourcechooser_' + label + type + '" >'+
80
+ label+
81
+ '</li>')
82
+ );
83
+
84
+ },
85
+
86
+ getCurrentRes: function() {
87
+
88
+ if ( typeof this.currentRes !== 'undefined' ) {
89
+
90
+ return this.currentRes;
91
+
92
+ } else {
93
+
94
+ try {
95
+
96
+ return res = this.node.children[0].dataset.res;
97
+
98
+ } catch(e) {
99
+
100
+ return '';
101
+ }
102
+ }
103
+ },
104
+
105
+ changeRes: function(target_res) {
106
+
107
+ var media = this.media;
108
+ var src = this.availableRes[target_res];
109
+
110
+ if (media.currentSrc != src) {
111
+ var currentTime = media.currentTime;
112
+ var paused = media.paused;
113
+ media.pause();
114
+
115
+ if ( currentTime != 0 ) {
116
+ var canvas = document.createElement("canvas");
117
+ canvas.className = 'kgvid_temp_thumb';
118
+ canvas.width = this.width;
119
+ canvas.height = this.height;
120
+ var context = canvas.getContext('2d');
121
+ context.fillRect(0, 0, this.width, this.height);
122
+ context.drawImage(media, 0, 0, this.width, this.height);
123
+ jQuery('#'+this.id+' .mejs-layers').append(canvas);
124
+
125
+ jQuery(media).one( 'seeked', function() {
126
+ jQuery(canvas).remove();
127
+ });
128
+ }
129
+
130
+ setTimeout(function(){ media.setSrc(src); }, 0);
131
+ this.currentRes = target_res;
132
+ jQuery(this.sourcechooserButton).find('li').removeClass('mejs-sourcechooser-selected');
133
+ jQuery(this.sourcechooserButton).find('li:contains('+target_res+')').addClass('mejs-sourcechooser-selected');
134
+
135
+ media.addEventListener('loadedmetadata', function(e) {
136
+ media.currentTime = currentTime;
137
+ }, true);
138
+
139
+ var canPlayAfterSourceSwitchHandler = function(e) {
140
+ if (!paused) {
141
+ media.play();
142
+ }
143
+ media.removeEventListener('canplay', canPlayAfterSourceSwitchHandler, true);
144
+ };
145
+ media.addEventListener('canplay', canPlayAfterSourceSwitchHandler, true);
146
+ media.load();
147
+
148
+ }
149
+
150
+ }
151
+
152
+ });
153
+
154
+ })(mejs.$);
languages/video-embed-thumbnail-generator-es_ES.mo DELETED
Binary file
languages/video-embed-thumbnail-generator-es_ES.po DELETED
@@ -1,2378 +0,0 @@
1
- # Copyright (C) 2014 Video Embed & Thumbnail Generator
2
- # This file is distributed under the same license as the Video Embed & Thumbnail Generator package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: Video Embed & Thumbnail Generator 4.5\n"
6
- "Report-Msgid-Bugs-To: http://wordpress.org/tag/video-embed-thumbnail-generator\n"
7
- "POT-Creation-Date: 2015-06-24 10:04-0000\n"
8
- "PO-Revision-Date: 2015-06-24 10:16-0000\n"
9
- "Last-Translator: Agustin Luis Estevez <aluiest@gmail.com>\n"
10
- "Language-Team: Agustin Luis <aluiest@gmail.com>\n"
11
- "Language: es_ES\n"
12
- "MIME-Version: 1.0\n"
13
- "Content-Type: text/plain; charset=UTF-8\n"
14
- "Content-Transfer-Encoding: 8bit\n"
15
- "X-Generator: Poedit 1.7.4\n"
16
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
- "X-Poedit-SourceCharset: UTF-8\n"
18
- "X-Poedit-KeywordsList: __;_x:1,2c;_n:1,2;_n_noop:1,2;_nc;_nx:4c,1,2;_nx_noop:3c,1,2;_ex:1,2c;"
19
- "esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;__ngettext_noop:1,2;"
20
- "_e\n"
21
- "X-Poedit-Basepath: ..\n"
22
- "X-Poedit-SearchPath-0: .\n"
23
-
24
- #: video-embed-thumbnail-generator.php:333 video-embed-thumbnail-generator.php:3735
25
- msgid "same resolution H.264"
26
- msgstr "H.264 de la misma resolución"
27
-
28
- #: video-embed-thumbnail-generator.php:459
29
- #, php-format
30
- msgid "Replace original with %s"
31
- msgstr "Reemplazar el original con %s"
32
-
33
- #: video-embed-thumbnail-generator.php:566
34
- msgid "Settings"
35
- msgstr "Configuración"
36
-
37
- #: video-embed-thumbnail-generator.php:574
38
- msgid "Network Settings"
39
- msgstr "Configuración de red"
40
-
41
- #: video-embed-thumbnail-generator.php:1451
42
- msgctxt "please wait"
43
- msgid "Wait"
44
- msgstr "Espere"
45
-
46
- #: video-embed-thumbnail-generator.php:1452
47
- msgid "Hide video..."
48
- msgstr "Ocultar vídeo ..."
49
-
50
- #: video-embed-thumbnail-generator.php:1453 video-embed-thumbnail-generator.php:4742
51
- msgid "Choose from video..."
52
- msgstr "Elija vídeo ..."
53
-
54
- #: video-embed-thumbnail-generator.php:1454
55
- msgid "Can't load video"
56
- msgstr "No se puede cargar el vídeo"
57
-
58
- #: video-embed-thumbnail-generator.php:1455
59
- msgid "Choose Thumbnail:"
60
- msgstr "Elija miniatura:"
61
-
62
- #: video-embed-thumbnail-generator.php:1456
63
- msgid "Save All Thumbnails"
64
- msgstr "Guarde todas las miniaturas"
65
-
66
- #: video-embed-thumbnail-generator.php:1457
67
- msgid "Saving..."
68
- msgstr "Guardando..."
69
-
70
- #: video-embed-thumbnail-generator.php:1458
71
- msgid "Loading..."
72
- msgstr "Cargando…"
73
-
74
- #: video-embed-thumbnail-generator.php:1459 video-embed-thumbnail-generator.php:5370
75
- msgid "Generate"
76
- msgstr "Generar"
77
-
78
- #: video-embed-thumbnail-generator.php:1460 video-embed-thumbnail-generator.php:5371
79
- msgid "Randomize"
80
- msgstr "Aleatorizar"
81
-
82
- #: video-embed-thumbnail-generator.php:1461
83
- #, php-format
84
- msgid "%s not found"
85
- msgstr "%s no encontrado"
86
-
87
- #: video-embed-thumbnail-generator.php:1462
88
- msgid ""
89
- "Please enter a URL that points to a valid video file. Video sharing sites are not supported by "
90
- "this plugin.\n"
91
- "To embed from YouTube, Vimeo, etc, just paste the link directly into the post window and "
92
- "WordPress will handle the rest."
93
- msgstr ""
94
- "Por favor introduzca una URL que apunte a un archivo de vídeo válido. Sitios de intercambio de "
95
- "video no son compatibles con este plugin. \n"
96
- "Para incrustar desde YouTube, Vimeo, etc., basta con pegar el enlace directamente en la ventana "
97
- "del mensaje y WordPress se encargará del resto."
98
-
99
- #: video-embed-thumbnail-generator.php:1463 video-embed-thumbnail-generator.php:2700
100
- #: video-embed-thumbnail-generator.php:5370 video-embed-thumbnail-generator.php:5371
101
- #: video-embed-thumbnail-generator.php:5405
102
- msgid "Please enter a valid video URL"
103
- msgstr "Introduce una URL de vídeo válida"
104
-
105
- #: video-embed-thumbnail-generator.php:1464
106
- msgid ""
107
- "You are about to permanently delete the encoded video.\n"
108
- " 'Cancel' to stop, 'OK' to delete."
109
- msgstr ""
110
- "Vas a eliminar permanentemente el video codificado. \n"
111
- " \"Cancelar\" para detener, 'OK' para borrar."
112
-
113
- #: video-embed-thumbnail-generator.php:1465
114
- msgid "Saved."
115
- msgstr "Guardado."
116
-
117
- #: video-embed-thumbnail-generator.php:1466
118
- msgid "Running test..."
119
- msgstr "Ejecutando la prueba ..."
120
-
121
- #: video-embed-thumbnail-generator.php:1467
122
- msgid "FFMPEG or LIBAV required for these functions."
123
- msgstr "FFMPEG o LIBAV requerido para estas funciones."
124
-
125
- #: video-embed-thumbnail-generator.php:1468
126
- msgid ""
127
- "You are about to set all existing video thumbnails previously generated by this plugin as the "
128
- "featured images for their posts. There is no 'undo' button, so proceed at your own risk."
129
- msgstr ""
130
- "Usted está a punto de establecer todas las miniaturas de vídeo existentes previamente generados "
131
- "por este plugin como las imágenes destacadas para sus puestos. No hay botón de \"deshacer\", así "
132
- "que proceda a su propio riesgo."
133
-
134
- #: video-embed-thumbnail-generator.php:1469
135
- msgid ""
136
- "You are about to create thumbnails for every video in your Media Library that doesn't already "
137
- "have one. This might take a long time. There is no 'undo' button, so proceed at your own risk.\n"
138
- "\n"
139
- "Number of videos without thumbnails: "
140
- msgstr ""
141
- "Usted está a punto de crear miniaturas para cada vídeo en su Librería de Medios que no tenga una "
142
- "previamente. Esto puede tardar bastante. No ha hay botón de deshacer, por tanto ejecútelo bajo "
143
- "su responsabilidad.\n"
144
- "\n"
145
- "Número de vídeos sin miniatura:"
146
-
147
- #: video-embed-thumbnail-generator.php:1470
148
- msgid ""
149
- "You are about to add every video in your Media Library to the video encode queue if it hasn't "
150
- "already been encoded. This might take a long time."
151
- msgstr ""
152
- "Estás a punto de añadir cada video de tu Librería de Medios en la cola de codificación de video "
153
- "si todavía no han sido codificados. Esto puede tardar bastante tiempo."
154
-
155
- #: video-embed-thumbnail-generator.php:1471
156
- msgid "No thumbnails generated. All videos have thumbnails already."
157
- msgstr "No se ha generado ninguna miniatura. Todos los vídeo ya tiene miniatura."
158
-
159
- #: video-embed-thumbnail-generator.php:1472
160
- msgid "'Cancel' to stop, 'OK' to proceed."
161
- msgstr "\"Cancelar\" para detener, en 'Aceptar' para continuar."
162
-
163
- #: video-embed-thumbnail-generator.php:1473
164
- msgid "Processing..."
165
- msgstr "Processing ..."
166
-
167
- #: video-embed-thumbnail-generator.php:1474
168
- msgid ""
169
- "You are about to set all existing video thumbnails previously generated by this plugin as "
170
- "attachments of their posts rather than their associated videos. Proceed at your own risk."
171
- msgstr ""
172
- "Usted está a punto de establecer todas las miniaturas de vídeo existentes previamente generados "
173
- "por este plugin como archivos adjuntos de sus mensajes en lugar de sus vídeos asociados. Proceda "
174
- "a su propio riesgo."
175
-
176
- #: video-embed-thumbnail-generator.php:1475
177
- msgid ""
178
- "You are about to set all existing video thumbnails previously generated by this plugin as "
179
- "attachments of their videos rather than their associated posts. Proceed at your own risk."
180
- msgstr ""
181
- "Usted está a punto de establecer todas las miniaturas de vídeo existentes previamente generados "
182
- "por este plugin como archivos adjuntos de sus videos en lugar de sus mensajes asociados. Proceda "
183
- "a su propio riesgopista:."
184
-
185
- #: video-embed-thumbnail-generator.php:1476
186
- msgid "Complete"
187
- msgstr "Completo"
188
-
189
- #: video-embed-thumbnail-generator.php:1477 video-embed-thumbnail-generator.php:4811
190
- #: video-embed-thumbnail-generator.php:5397
191
- msgid "Track type:"
192
- msgstr "Tipo de Rastreo:"
193
-
194
- #: video-embed-thumbnail-generator.php:1478 video-embed-thumbnail-generator.php:4802
195
- #: video-embed-thumbnail-generator.php:5397
196
- msgid "subtitles"
197
- msgstr "Subtítulos"
198
-
199
- #: video-embed-thumbnail-generator.php:1479 video-embed-thumbnail-generator.php:4802
200
- #: video-embed-thumbnail-generator.php:5397
201
- msgid "captions"
202
- msgstr "Subtítulos"
203
-
204
- #: video-embed-thumbnail-generator.php:1480 video-embed-thumbnail-generator.php:4802
205
- #: video-embed-thumbnail-generator.php:5397
206
- msgid "chapters"
207
- msgstr "Capítulos"
208
-
209
- #: video-embed-thumbnail-generator.php:1481 video-embed-thumbnail-generator.php:4812
210
- msgid "Choose a Text File"
211
- msgstr "Elija un archivo de texto"
212
-
213
- #: video-embed-thumbnail-generator.php:1482 video-embed-thumbnail-generator.php:4812
214
- msgid "Set as track source"
215
- msgstr "Establecer como fuente de rastreo"
216
-
217
- #: video-embed-thumbnail-generator.php:1483 video-embed-thumbnail-generator.php:2773
218
- #: video-embed-thumbnail-generator.php:3377 video-embed-thumbnail-generator.php:3383
219
- #: video-embed-thumbnail-generator.php:3389 video-embed-thumbnail-generator.php:3826
220
- #: video-embed-thumbnail-generator.php:4777 video-embed-thumbnail-generator.php:4812
221
- msgid "Choose from Library"
222
- msgstr "Elija desde Biblioteca"
223
-
224
- #: video-embed-thumbnail-generator.php:1484 video-embed-thumbnail-generator.php:5397
225
- msgid "Language code:"
226
- msgstr "Código Idioma:"
227
-
228
- #: video-embed-thumbnail-generator.php:1485
229
- msgctxt "noun"
230
- msgid "Label:"
231
- msgstr "Etiqueta:"
232
-
233
- #: video-embed-thumbnail-generator.php:1486 video-embed-thumbnail-generator.php:4816
234
- #: video-embed-thumbnail-generator.php:5397
235
- msgid "Default:"
236
- msgstr "Por defecto:"
237
-
238
- #: video-embed-thumbnail-generator.php:1487
239
- msgctxt "Custom format"
240
- msgid "Custom"
241
- msgstr "Personalizado"
242
-
243
- #: video-embed-thumbnail-generator.php:1629
244
- msgctxt "noun for Google Analytics event"
245
- msgid "Play Start"
246
- msgstr "Comenzar reproducción"
247
-
248
- #: video-embed-thumbnail-generator.php:1630
249
- msgctxt "noun for Google Analytics event"
250
- msgid "Complete View"
251
- msgstr "Vista completa"
252
-
253
- #: video-embed-thumbnail-generator.php:1631
254
- msgctxt "button text to play next video"
255
- msgid "Next"
256
- msgstr "Siguiente"
257
-
258
- #: video-embed-thumbnail-generator.php:1632
259
- msgctxt "button text to play previous video"
260
- msgid "Previous"
261
- msgstr "Anterior"
262
-
263
- #: video-embed-thumbnail-generator.php:1754
264
- msgid "Previous"
265
- msgstr "Anterior"
266
-
267
- #: video-embed-thumbnail-generator.php:1761
268
- msgid "Next"
269
- msgstr "Siguiente"
270
-
271
- #: video-embed-thumbnail-generator.php:2303
272
- #, php-format
273
- msgid "%s view"
274
- msgid_plural "%s views"
275
- msgstr[0] "%s reproducción"
276
- msgstr[1] "%s reproducciones"
277
-
278
- #: video-embed-thumbnail-generator.php:2313
279
- msgid "Click on this link to download"
280
- msgstr "Pulse en este enlace para descargar"
281
-
282
- #: video-embed-thumbnail-generator.php:2316
283
- msgid "Right-click or ctrl-click on this link to download"
284
- msgstr "Haga clic derecho o ctrl-clic en este enlace para descargar"
285
-
286
- #: video-embed-thumbnail-generator.php:2330
287
- msgctxt "precedes code for embedding video"
288
- msgid "Embed:"
289
- msgstr "Incrustar"
290
-
291
- #: video-embed-thumbnail-generator.php:2574
292
- msgid "Clear Format"
293
- msgstr "Borrar Formato"
294
-
295
- #: video-embed-thumbnail-generator.php:2577
296
- msgid "Delete Permanently"
297
- msgstr "Eliminar permanentemente"
298
-
299
- #: video-embed-thumbnail-generator.php:2594
300
- msgid "Currently encoding"
301
- msgstr "Codificando Actualmente"
302
-
303
- #: video-embed-thumbnail-generator.php:2602
304
- msgid "Format already exists"
305
- msgstr "Formato ya existe"
306
-
307
- #: video-embed-thumbnail-generator.php:2609
308
- msgid "You don't have permission to encode videos"
309
- msgstr "Usted no tiene permiso para codificar vídeos"
310
-
311
- #: video-embed-thumbnail-generator.php:2708
312
- #, php-format
313
- msgctxt "ex: FFMPEG not found at /usr/local/bin"
314
- msgid "%1$s not found at %2$s"
315
- msgstr "%1$s no se encontró en %2$s"
316
-
317
- #: video-embed-thumbnail-generator.php:2773
318
- #, php-format
319
- msgid "Choose %s"
320
- msgstr "Elija %s"
321
-
322
- #: video-embed-thumbnail-generator.php:2773
323
- #, php-format
324
- msgid "Set as %s"
325
- msgstr "Establecer como %s"
326
-
327
- #: video-embed-thumbnail-generator.php:2782
328
- msgid "Nothing to encode"
329
- msgstr "Nada para codificar"
330
-
331
- #: video-embed-thumbnail-generator.php:2786
332
- msgctxt "Button text"
333
- msgid "Update"
334
- msgstr "Actualizar"
335
-
336
- #: video-embed-thumbnail-generator.php:2789
337
- msgctxt "Button text"
338
- msgid "Encode selected"
339
- msgstr "Codificar selección"
340
-
341
- #: video-embed-thumbnail-generator.php:2795
342
- msgid "Generates additional video formats compatible with most mobile & HTML5-compatible browsers"
343
- msgstr ""
344
- "Genera formatos de vídeo adicionales compatibles con los navegadores más móviles y compatibles "
345
- "con HTML5"
346
-
347
- #: video-embed-thumbnail-generator.php:2823
348
- msgctxt "noun, column header"
349
- msgid "Order"
350
- msgstr "Orden"
351
-
352
- #: video-embed-thumbnail-generator.php:2824
353
- msgctxt "username, column header"
354
- msgid "User"
355
- msgstr "Usuario"
356
-
357
- #: video-embed-thumbnail-generator.php:2825
358
- msgctxt "noun, column header"
359
- msgid "Thumbnail"
360
- msgstr "Miniatura"
361
-
362
- #: video-embed-thumbnail-generator.php:2826
363
- msgctxt "noun, column header"
364
- msgid "File"
365
- msgstr "Archivo"
366
-
367
- #: video-embed-thumbnail-generator.php:2827
368
- msgctxt "noun, column header"
369
- msgid "Formats"
370
- msgstr "Formatos"
371
-
372
- #: video-embed-thumbnail-generator.php:2828
373
- msgctxt "noun, column header"
374
- msgid "Actions"
375
- msgstr "Acciones"
376
-
377
- #: video-embed-thumbnail-generator.php:2832
378
- msgctxt "multisite site name, column header"
379
- msgid "Site"
380
- msgstr "Sitio"
381
-
382
- #: video-embed-thumbnail-generator.php:2953
383
- msgid "Other user's video"
384
- msgstr "Vídeo de otro usuario"
385
-
386
- #: video-embed-thumbnail-generator.php:2960
387
- msgid "Queue is empty"
388
- msgstr "La cola está vacía"
389
-
390
- #: video-embed-thumbnail-generator.php:2969 video-embed-thumbnail-generator.php:2976
391
- msgctxt "Tools page title"
392
- msgid "Video Embed & Thumbnail Generator Encoding Queue"
393
- msgstr "Cola de codificación de Video Embed & Thumbnail Generator"
394
-
395
- #: video-embed-thumbnail-generator.php:2969
396
- msgctxt "Title in admin sidebar"
397
- msgid "Video Encode Queue"
398
- msgstr "Cola de codificación de vídeo"
399
-
400
- #: video-embed-thumbnail-generator.php:2976
401
- msgctxt "Title in network admin sidebar"
402
- msgid "Network Video Encode Queue"
403
- msgstr "Cola de codificación de vídeo de la red"
404
-
405
- #: video-embed-thumbnail-generator.php:2986
406
- msgid "Video Embed & Thumbnail Generator Encoding Queue"
407
- msgstr "Cola para codificación de generador de miniaturas y video incrustado"
408
-
409
- #: video-embed-thumbnail-generator.php:3003
410
- msgid "Clear All Completed"
411
- msgstr "Borrar Todo lo Completado"
412
-
413
- #: video-embed-thumbnail-generator.php:3011 video-embed-thumbnail-generator.php:3127
414
- msgctxt "Settings page title"
415
- msgid "Video Embed & Thumbnail Generator"
416
- msgstr "Video Embed & Thumbnail Generator"
417
-
418
- #: video-embed-thumbnail-generator.php:3011 video-embed-thumbnail-generator.php:3127
419
- msgctxt "Settings page title in admin sidebar"
420
- msgid "Video Embed & Thumbnail Generator"
421
- msgstr "Video Embed & Thumbnail Generator"
422
-
423
- #: video-embed-thumbnail-generator.php:3047
424
- msgid "Video Embed & Thumbnail Generator network settings reset to default values."
425
- msgstr "Ajustes de red de Video Embed & Thumbnail Generator restablecidas a valores por defecto."
426
-
427
- #: video-embed-thumbnail-generator.php:3069
428
- msgid "Path to applications on the server:"
429
- msgstr "Ruta a las aplicaciones en el servidor:"
430
-
431
- #: video-embed-thumbnail-generator.php:3072 video-embed-thumbnail-generator.php:3286
432
- msgid "Application for thumbnails & encoding:"
433
- msgstr "Aplicación para miniaturas y codificación:"
434
-
435
- #: video-embed-thumbnail-generator.php:3076 video-embed-thumbnail-generator.php:3296
436
- msgid "Method to fix encoded H.264 headers for streaming:"
437
- msgstr "Método para corregir encabezados H.264 codificados para la transmisión:"
438
-
439
- #: video-embed-thumbnail-generator.php:3080 video-embed-thumbnail-generator.php:3305
440
- msgid "FFMPEG legacy options:"
441
- msgstr "Opciones adicionales FFMPEG:"
442
-
443
- #: video-embed-thumbnail-generator.php:3084
444
- msgid "Execution:"
445
- msgstr "Ejecución:"
446
-
447
- #: video-embed-thumbnail-generator.php:3088
448
- msgid "User capabilties for new sites:"
449
- msgstr "Capacidades de los usuarios para nuevos sitios:"
450
-
451
- #: video-embed-thumbnail-generator.php:3092
452
- msgid "Super Admins only:"
453
- msgstr "Sólo Super Administradores:"
454
-
455
- #: video-embed-thumbnail-generator.php:3098 video-embed-thumbnail-generator.php:3154
456
- msgid "Save Changes"
457
- msgstr "Guardar cambios"
458
-
459
- #: video-embed-thumbnail-generator.php:3099 video-embed-thumbnail-generator.php:3155
460
- msgid "Reset Options"
461
- msgstr "Resetear opciones"
462
-
463
- #: video-embed-thumbnail-generator.php:3103 video-embed-thumbnail-generator.php:3159
464
- msgid ""
465
- "If you're getting some use out of this plugin, please consider donating a few dollars to support "
466
- "its future development."
467
- msgstr ""
468
- "Si saca algún partido de este plugin, por favor considere hacer un donativo para dar soporte a "
469
- "los futuros desarrollos."
470
-
471
- #: video-embed-thumbnail-generator.php:3122
472
- #, php-format
473
- msgctxt "FFMPEG settings tab"
474
- msgid "%s settings tab."
475
- msgstr "%s pestaña de configuración."
476
-
477
- #: video-embed-thumbnail-generator.php:3145
478
- msgctxt "Adjective, tab title"
479
- msgid "General"
480
- msgstr "General"
481
-
482
- #: video-embed-thumbnail-generator.php:3146
483
- #, php-format
484
- msgctxt "FFMPEG Settings, tab title"
485
- msgid "%s Settings"
486
- msgstr "%s Configuraciones"
487
-
488
- #: video-embed-thumbnail-generator.php:3246
489
- msgid "Default Video Playback Settings"
490
- msgstr "Configuración predeterminada de reproducción de vídeo"
491
-
492
- #: video-embed-thumbnail-generator.php:3247
493
- msgid "The following options will only affect Flash playback"
494
- msgstr "Las siguientes opciones sólo afectarán Reproducción de Flash"
495
-
496
- #: video-embed-thumbnail-generator.php:3248
497
- msgid "Plugin Settings"
498
- msgstr "Configuración Plugin"
499
-
500
- #: video-embed-thumbnail-generator.php:3249
501
- msgid "Video Encoding Settings"
502
- msgstr "Configuración de codificación de Vídeo"
503
-
504
- #: video-embed-thumbnail-generator.php:3251
505
- msgid "Default thumbnail:"
506
- msgstr "Miniaturas por defecto:"
507
-
508
- #: video-embed-thumbnail-generator.php:3252
509
- msgid "End of video image:"
510
- msgstr "Imagen de vídeo final:"
511
-
512
- #: video-embed-thumbnail-generator.php:3253
513
- msgid "Watermark overlay:"
514
- msgstr "Superposición de Marca de Agua"
515
-
516
- #: video-embed-thumbnail-generator.php:3254
517
- msgid "Video alignment:"
518
- msgstr "Alineación del vídeo:"
519
-
520
- #: video-embed-thumbnail-generator.php:3255
521
- msgid "Automatically adjust videos:"
522
- msgstr "Ajustar vídeos automáticamente:"
523
-
524
- #: video-embed-thumbnail-generator.php:3256
525
- msgid "Inline videos:"
526
- msgstr "Vídeos Inline:"
527
-
528
- #: video-embed-thumbnail-generator.php:3257
529
- msgid "Max embedded video dimensions:"
530
- msgstr "Dimensiones máximas del vídeo incrustado:"
531
-
532
- #: video-embed-thumbnail-generator.php:3258
533
- msgid "Video gallery:"
534
- msgstr "Galería de vídeo:"
535
-
536
- #: video-embed-thumbnail-generator.php:3259
537
- msgid "Video controls:"
538
- msgstr "Controles de vídeo:"
539
-
540
- #: video-embed-thumbnail-generator.php:3260
541
- msgid "Autoplay:"
542
- msgstr "Reproducción automática:"
543
-
544
- #: video-embed-thumbnail-generator.php:3261
545
- msgctxt "verb"
546
- msgid "Loop:"
547
- msgstr "Bucle:"
548
-
549
- #: video-embed-thumbnail-generator.php:3262
550
- msgid "Volume:"
551
- msgstr "Volumen:"
552
-
553
- #: video-embed-thumbnail-generator.php:3263
554
- msgid "Preload:"
555
- msgstr "Precarga:"
556
-
557
- #: video-embed-thumbnail-generator.php:3264
558
- msgctxt "CSS class for video skin"
559
- msgid "Skin class:"
560
- msgstr "Clase para el skin:"
561
-
562
- #: video-embed-thumbnail-generator.php:3265
563
- msgid "Custom attributes:"
564
- msgstr "Atributos personalizados:"
565
-
566
- #: video-embed-thumbnail-generator.php:3267
567
- msgid "Background color:"
568
- msgstr "Color de fondo:"
569
-
570
- #: video-embed-thumbnail-generator.php:3268
571
- msgid "XML configuration file:"
572
- msgstr "Archivo de configuración XML:"
573
-
574
- #: video-embed-thumbnail-generator.php:3269
575
- msgid "Video skin file:"
576
- msgstr "Archivo de máscara de vídeo:"
577
-
578
- #: video-embed-thumbnail-generator.php:3270
579
- msgid "Video stream type:"
580
- msgstr "Tipo de stream de video:"
581
-
582
- #: video-embed-thumbnail-generator.php:3271
583
- msgid "Video scale mode:"
584
- msgstr "Modo de escala de vídeo:"
585
-
586
- #: video-embed-thumbnail-generator.php:3272
587
- msgid "Autohide:"
588
- msgstr "Ocultar automáticamente:"
589
-
590
- #: video-embed-thumbnail-generator.php:3273
591
- msgid "Play button overlay:"
592
- msgstr "Superposición del Botón de reproducción:"
593
-
594
- #: video-embed-thumbnail-generator.php:3275
595
- msgid "Default number of thumbnails to generate:"
596
- msgstr "Número predeterminado de miniaturas para generar:"
597
-
598
- #: video-embed-thumbnail-generator.php:3276
599
- msgid "User capabilities:"
600
- msgstr "Capacidades de los usuarios:"
601
-
602
- #: video-embed-thumbnail-generator.php:3277
603
- msgid "Video security:"
604
- msgstr "Seguridad del vídeo:"
605
-
606
- #: video-embed-thumbnail-generator.php:3278
607
- msgid "Featured image:"
608
- msgstr "Imagen destacada:"
609
-
610
- #: video-embed-thumbnail-generator.php:3279
611
- msgid "Attach thumbnails to:"
612
- msgstr "Adjuntar miniaturas a:"
613
-
614
- #: video-embed-thumbnail-generator.php:3280
615
- msgid "Delete associated attachments:"
616
- msgstr "Eliminar archivos adjuntos asociados:"
617
-
618
- #: video-embed-thumbnail-generator.php:3281
619
- msgid "Video title text HTML formatting:"
620
- msgstr "Formato HTML del texto de título de vídeo:"
621
-
622
- #: video-embed-thumbnail-generator.php:3282
623
- msgid "Attachment page design:"
624
- msgstr "Visualización de la plantilla adjuntos:"
625
-
626
- #: video-embed-thumbnail-generator.php:3285
627
- msgid "Path to applications folder on server:"
628
- msgstr "Ruta a la carpeta de aplicaciones en el servidor:"
629
-
630
- #: video-embed-thumbnail-generator.php:3289
631
- msgid "Enable in-browser thumbnails:"
632
- msgstr "Activar miniaturas en el navegador:"
633
-
634
- #: video-embed-thumbnail-generator.php:3290
635
- msgid "Default video encode formats:"
636
- msgstr "Formatos de codificación de vídeo por defecto:"
637
-
638
- #: video-embed-thumbnail-generator.php:3291
639
- msgid "Do automatically on upload:"
640
- msgstr "Realice automáticamente al cargar:"
641
-
642
- #: video-embed-thumbnail-generator.php:3292
643
- msgid "For previously uploaded videos:"
644
- msgstr "Para vídeos subidos anteriormente:"
645
-
646
- #: video-embed-thumbnail-generator.php:3293
647
- msgid "htaccess login:"
648
- msgstr "Inicio de sesión htaccess:"
649
-
650
- #: video-embed-thumbnail-generator.php:3294
651
- msgid "Add watermark to encoded files:"
652
- msgstr "Añadir marca de agua a los archivos codificados:"
653
-
654
- #: video-embed-thumbnail-generator.php:3298
655
- msgid "Encode quality control method:"
656
- msgstr "Método de control de calidad de codificación:"
657
-
658
- #: video-embed-thumbnail-generator.php:3299
659
- msgid "Constant Rate Factors (CRF):"
660
- msgstr "Factores constantes de tasa (CRF):"
661
-
662
- #: video-embed-thumbnail-generator.php:3300
663
- msgid "Average Bit Rate:"
664
- msgstr "Tasa de bits promedio:"
665
-
666
- #: video-embed-thumbnail-generator.php:3301
667
- msgid "H.264 profile:"
668
- msgstr "perfil H.264:"
669
-
670
- #: video-embed-thumbnail-generator.php:3302
671
- msgid "Audio bit rate:"
672
- msgstr "Tasa de bits de audio:"
673
-
674
- #: video-embed-thumbnail-generator.php:3306
675
- msgctxt "program execution options"
676
- msgid "Execution:"
677
- msgstr "Ejecución:"
678
-
679
- #: video-embed-thumbnail-generator.php:3309
680
- msgid "Test FFMPEG:"
681
- msgstr "Prueba FFMPEG:"
682
-
683
- #: video-embed-thumbnail-generator.php:3331 video-embed-thumbnail-generator.php:4825
684
- msgid "WordPress Default"
685
- msgstr "WordPress por defecto"
686
-
687
- #: video-embed-thumbnail-generator.php:3353
688
- msgid "(deprecated)"
689
- msgstr "( desuso)"
690
-
691
- #: video-embed-thumbnail-generator.php:3355
692
- msgid "Video player:"
693
- msgstr "Reproductor de vídeo:"
694
-
695
- #: video-embed-thumbnail-generator.php:3360
696
- msgid ""
697
- "Video.js is the default player. Users running WordPress 3.6 or higher can choose the WordPress "
698
- "Default Mediaelement.js player which may already be skinned to match your theme. If the JW "
699
- "Player WordPress plugin is active it should be available as a video player. In the past this "
700
- "plugin used Adobe's Strobe Media Playback Flash player, which hasn't been updated since 2011 and "
701
- "is not recommended. It should still work, but new plugin functions are not guaranteed to be "
702
- "compatible."
703
- msgstr ""
704
- "Video.js es el reproductor predeterminado. Los usuarios que ejecutan WordPress 3.6 o superior "
705
- "pueden elegir el reproductor Mediaelement.js WordPress por defecto que puede ya tener una piel "
706
- "para que coincida con su tema. Si el plugin JW Player WordPress está activo debe estar "
707
- "disponible como un reproductor de vídeo. En el pasado este plugin utilizaba el reproductor "
708
- "Adobe's Strobe Media Playback Flash, que no ha sido actualizado desde 2011 y no se recomienda. "
709
- "Aún debería funcionar, pero las nuevas funciones del plugin no se garantiza que sea compatible."
710
-
711
- #: video-embed-thumbnail-generator.php:3364
712
- msgid "Overlay video title"
713
- msgstr "Título de vídeo sobrepuesto"
714
-
715
- #: video-embed-thumbnail-generator.php:3365
716
- msgid "Overlay embed code"
717
- msgstr "Código de incrustación sobrepuesto"
718
-
719
- #: video-embed-thumbnail-generator.php:3368
720
- msgid "Show download link"
721
- msgstr "Mostrar enlace de descarga"
722
-
723
- #: video-embed-thumbnail-generator.php:3369
724
- msgid "Show view count"
725
- msgstr "Mostrar contador de reproducciones"
726
-
727
- #: video-embed-thumbnail-generator.php:3377 video-embed-thumbnail-generator.php:4777
728
- msgid "Choose a Thumbnail"
729
- msgstr "Elija una miniatura"
730
-
731
- #: video-embed-thumbnail-generator.php:3377 video-embed-thumbnail-generator.php:4777
732
- msgid "Set as video thumbnail"
733
- msgstr "Establecer como miniatura de vídeo"
734
-
735
- #: video-embed-thumbnail-generator.php:3382
736
- msgid "Display thumbnail image again when video ends."
737
- msgstr "Mostrar la miniatura de nuevo cuando el vídeo termina."
738
-
739
- #: video-embed-thumbnail-generator.php:3383
740
- msgid "Choose End of Video Image"
741
- msgstr "Elija imagen de fin de vídeo"
742
-
743
- #: video-embed-thumbnail-generator.php:3383
744
- msgid "Set as end of video image"
745
- msgstr "Establecer como miniatura de vídeo"
746
-
747
- #: video-embed-thumbnail-generator.php:3384
748
- msgid "Display alternate image when video ends."
749
- msgstr "Mostrar la miniatura de nuevo cuando el vídeo termina."
750
-
751
- #: video-embed-thumbnail-generator.php:3389
752
- msgid "Image:"
753
- msgstr "Imagen:"
754
-
755
- #: video-embed-thumbnail-generator.php:3389 video-embed-thumbnail-generator.php:3826
756
- msgid "Choose a Watermark"
757
- msgstr "elegir una Marca de Agua"
758
-
759
- #: video-embed-thumbnail-generator.php:3389 video-embed-thumbnail-generator.php:3826
760
- msgid "Set as watermark"
761
- msgstr "conjuntocomo marca de agua"
762
-
763
- #: video-embed-thumbnail-generator.php:3390
764
- msgid "Link to:"
765
- msgstr "Enlazar a:"
766
-
767
- #: video-embed-thumbnail-generator.php:3392
768
- msgid "Home page"
769
- msgstr "Pagina de inicio"
770
-
771
- #: video-embed-thumbnail-generator.php:3393
772
- msgid "Parent post"
773
- msgstr "Vídeo padre"
774
-
775
- #: video-embed-thumbnail-generator.php:3394
776
- msgid "Video attachment page"
777
- msgstr "Página de adjunto del vídeo"
778
-
779
- #: video-embed-thumbnail-generator.php:3395
780
- msgid "Download video"
781
- msgstr "Descargar vídeo"
782
-
783
- #: video-embed-thumbnail-generator.php:3396
784
- msgid "Custom URL"
785
- msgstr "URL personalizada"
786
-
787
- #: video-embed-thumbnail-generator.php:3397
788
- msgid "None"
789
- msgstr "Ninguno"
790
-
791
- #: video-embed-thumbnail-generator.php:3416 video-embed-thumbnail-generator.php:3828
792
- msgid "left"
793
- msgstr "izquierda"
794
-
795
- #: video-embed-thumbnail-generator.php:3416
796
- msgid "center"
797
- msgstr "Centro"
798
-
799
- #: video-embed-thumbnail-generator.php:3416 video-embed-thumbnail-generator.php:3828
800
- msgid "right"
801
- msgstr "Derecha"
802
-
803
- #: video-embed-thumbnail-generator.php:3427
804
- msgid "Make video player responsive."
805
- msgstr "Haga respondido el reproductor de vídeo"
806
-
807
- #: video-embed-thumbnail-generator.php:3428
808
- msgid "automatic"
809
- msgstr "automático"
810
-
811
- #: video-embed-thumbnail-generator.php:3428
812
- msgid "highest"
813
- msgstr "más alto"
814
-
815
- #: video-embed-thumbnail-generator.php:3428
816
- msgid "lowest"
817
- msgstr "más bajo"
818
-
819
- #: video-embed-thumbnail-generator.php:3429
820
- msgid "Default playback resolution"
821
- msgstr "Resolución por defecto de reproducción"
822
-
823
- #: video-embed-thumbnail-generator.php:3434
824
- msgid ""
825
- "If multiple H.264 resolutions for a video are available, you can choose to load the highest or "
826
- "lowest available resolution by default, or automatically select the resolution based on the size "
827
- "of the video window."
828
- msgstr ""
829
- "Si están disponibles múltiples resoluciones para vídeo H264, puede elegir cargar la resolución "
830
- "mas alta o la mas baja por defecto, o seleccionar automáticamente lar resolución basándose en el "
831
- "tamaño de la ventana de vídeo."
832
-
833
- #: video-embed-thumbnail-generator.php:3440
834
- msgid "Allow other content on the same line as the video."
835
- msgstr "Permitir otros contenidos en la misma línea que el video"
836
-
837
- #: video-embed-thumbnail-generator.php:3445 video-embed-thumbnail-generator.php:4786
838
- #: video-embed-thumbnail-generator.php:5386
839
- msgid "Width:"
840
- msgstr "Ancho:"
841
-
842
- #: video-embed-thumbnail-generator.php:3445 video-embed-thumbnail-generator.php:4786
843
- #: video-embed-thumbnail-generator.php:5386
844
- msgid "Height:"
845
- msgstr "Altura:"
846
-
847
- #: video-embed-thumbnail-generator.php:3446
848
- msgid "Enlarge lower resolution videos to max width."
849
- msgstr "Ampliar vídeos de baja resolución al ancho máximo."
850
-
851
- #: video-embed-thumbnail-generator.php:3446
852
- msgid ""
853
- "Usually if a video's resolution is less than the max width, the video player is set to the "
854
- "actual width of the video. Enabling this will always set the same width regardless of the "
855
- "quality of the video. When necessary you can override by setting the dimensions manually."
856
- msgstr ""
857
- "Por lo general, si una resolución de vídeo es menor que el ancho máximo, el reproductor de "
858
- "vídeo está ajustado a la anchura real del vídeo. Al habilitar esto siempre se establece la misma "
859
- "anchura, independientemente de la calidad del vídeo. Cuando es necesario, puede anular ajustando "
860
- "las dimensiones de forma manual."
861
-
862
- #: video-embed-thumbnail-generator.php:3447
863
- msgid "Set all videos to expand to fill their containers."
864
- msgstr "Los vídeos se expanden para rellenar sus contenedores."
865
-
866
- #: video-embed-thumbnail-generator.php:3447
867
- msgid ""
868
- "Enabling this will ignore any other width settings and set the width of the video to the width "
869
- "of the container it's in."
870
- msgstr ""
871
- "Habilitando esto se ignorará cualquier otra configuración de ancho y se establecerá el ancho del "
872
- "video al de su contenedor."
873
-
874
- #: video-embed-thumbnail-generator.php:3452
875
- msgid "Maximum popup width:"
876
- msgstr "Ancho máximo de la ventana emergente:"
877
-
878
- #: video-embed-thumbnail-generator.php:3453
879
- msgid "Thumbnail width:"
880
- msgstr "Ancho de la miniatura:"
881
-
882
- #: video-embed-thumbnail-generator.php:3457
883
- msgid "Stop, but leave popup window open"
884
- msgstr "Parar, pero dejar la ventana emergente abierta"
885
-
886
- #: video-embed-thumbnail-generator.php:3458
887
- msgid "Autoplay next video in the gallery"
888
- msgstr "Reproduce automáticamente el siguiente vídeo de la galería"
889
-
890
- #: video-embed-thumbnail-generator.php:3459
891
- msgid "Close popup window"
892
- msgstr "Cerrar la ventana emergente"
893
-
894
- #: video-embed-thumbnail-generator.php:3466
895
- msgid "Paginate video galleries."
896
- msgstr "Paginar las galerías de vídeo."
897
-
898
- #: video-embed-thumbnail-generator.php:3469
899
- msgid "videos per gallery page."
900
- msgstr "vídeos por página de la galería."
901
-
902
- #: video-embed-thumbnail-generator.php:3470
903
- msgid "Show video title overlay on thumbnails."
904
- msgstr "Mostrar el título del vídeo sobrepuesto en las miniaturas."
905
-
906
- #: video-embed-thumbnail-generator.php:3477
907
- msgid "docked"
908
- msgstr "Atracado"
909
-
910
- #: video-embed-thumbnail-generator.php:3478
911
- msgid "floating"
912
- msgstr "Flotante"
913
-
914
- #: video-embed-thumbnail-generator.php:3479 video-embed-thumbnail-generator.php:3519
915
- #: video-embed-thumbnail-generator.php:3572 video-embed-thumbnail-generator.php:3669
916
- #: video-embed-thumbnail-generator.php:3857
917
- msgid "none"
918
- msgstr "ninguno"
919
-
920
- #: video-embed-thumbnail-generator.php:3490
921
- msgid "Play automatically when page loads."
922
- msgstr "Reproducir automáticamente cuando se carga la página."
923
-
924
- #: video-embed-thumbnail-generator.php:3495
925
- msgid "Loop to beginning when video ends."
926
- msgstr "Bucle al inicio cuando termina el video."
927
-
928
- #: video-embed-thumbnail-generator.php:3503
929
- #, php-format
930
- msgctxt "a list of percentages. eg: 15%"
931
- msgid "%d%%"
932
- msgstr "%d%%"
933
-
934
- #: video-embed-thumbnail-generator.php:3510
935
- msgid "Mute"
936
- msgstr "Quitar sonido"
937
-
938
- #: video-embed-thumbnail-generator.php:3517
939
- msgid "metadata"
940
- msgstr "metadato"
941
-
942
- #: video-embed-thumbnail-generator.php:3518
943
- msgid "auto"
944
- msgstr "auto"
945
-
946
- #: video-embed-thumbnail-generator.php:3525
947
- msgctxt "Suggest not translating the words in quotation marks"
948
- msgid ""
949
- "Controls how much of a video to load before the user starts playback. Mobile browsers never "
950
- "preload any video information. Selecting \"metadata\" will load the height and width and format "
951
- "information along with a few seconds of the video in some desktop browsers. \"Auto\" will "
952
- "preload nearly a minute of video in most desktop browsers. \"None\" will prevent all data from "
953
- "preloading."
954
- msgstr ""
955
- "Controla cuanto se recarga de un vídeo antes comenzar la reproducción. Los navegadores móviles "
956
- "nuca precargan ninguna información de vídeo. Seleccionando \"medatados\" cargará información de "
957
- "dimensiones y formato en algunos navegadores de escritorio. \"auto\" preparará aproximadamente "
958
- "un minuto en la mayoría de navegadores de escritorio. \"ninguno\" no preparará nada."
959
-
960
- #: video-embed-thumbnail-generator.php:3530
961
- #, php-format
962
- msgid "Use %s for a nice, circular play button. Leave blank for the default square play button."
963
- msgstr ""
964
- "Utilice %s para un botón bonito, circular para reproducir. Dejar en blanco para el botón "
965
- "predeterminado cuadrado."
966
-
967
- #: video-embed-thumbnail-generator.php:3530
968
- msgid "Or build your own CSS skin."
969
- msgstr "O construir su propia piel CSS."
970
-
971
- #: video-embed-thumbnail-generator.php:3535
972
- #, php-format
973
- msgid "Space-separated list to add to all videos. Example: %s"
974
- msgstr "Lista separada por espacios para añadir a todos los vídeos. Ejemplo: %s"
975
-
976
- #: video-embed-thumbnail-generator.php:3550
977
- #, php-format
978
- msgid "Use %s for a modern, circular play button."
979
- msgstr "Utilice %s para un botón moderno, circular para reproducir."
980
-
981
- #: video-embed-thumbnail-generator.php:3550
982
- msgid "Leave blank for the off-center square play button."
983
- msgstr "Dejar en blanco para el botón no centrado para reproducir."
984
-
985
- #: video-embed-thumbnail-generator.php:3556
986
- msgid "liveOrRecorded"
987
- msgstr "directoOGrabado"
988
-
989
- #: video-embed-thumbnail-generator.php:3557
990
- msgid "live"
991
- msgstr "directo"
992
-
993
- #: video-embed-thumbnail-generator.php:3558
994
- msgid "recorded"
995
- msgstr "grabado"
996
-
997
- #: video-embed-thumbnail-generator.php:3559
998
- msgid "dvr"
999
- msgstr "dvr"
1000
-
1001
- #: video-embed-thumbnail-generator.php:3571
1002
- msgid "letterbox"
1003
- msgstr "Buzón"
1004
-
1005
- #: video-embed-thumbnail-generator.php:3573
1006
- msgid "stretch"
1007
- msgstr "Estirar"
1008
-
1009
- #: video-embed-thumbnail-generator.php:3574
1010
- msgid "zoom"
1011
- msgstr "Acercar"
1012
-
1013
- #: video-embed-thumbnail-generator.php:3586
1014
- msgid "Autohide controlbar."
1015
- msgstr "Ocultar automáticamente barra de control."
1016
-
1017
- #: video-embed-thumbnail-generator.php:3591
1018
- msgid "Overlay play button on poster frame."
1019
- msgstr "Botón de reproducción en el marco del cartel."
1020
-
1021
- #: video-embed-thumbnail-generator.php:3603
1022
- msgid "Can make thumbnails"
1023
- msgstr "Puede hacer miniaturas"
1024
-
1025
- #: video-embed-thumbnail-generator.php:3603
1026
- msgid "Can encode videos"
1027
- msgstr "Puede codificar videos"
1028
-
1029
- #: video-embed-thumbnail-generator.php:3603
1030
- msgid "Can view & modify other users encode queue"
1031
- msgstr "Puede ver y modificar la cola de codificación de otros usuarios"
1032
-
1033
- #: video-embed-thumbnail-generator.php:3643
1034
- msgid "Allow users to embed your videos on other sites."
1035
- msgstr "Permitir a los usuarios incrustar sus videos en otros sitios."
1036
-
1037
- #: video-embed-thumbnail-generator.php:3644
1038
- msgctxt "\"Open Graph\" is a proper noun and might not need translation"
1039
- msgid "Enable Open Graph video tags"
1040
- msgstr "Permite etiquetas de vídeo Open Grapa"
1041
-
1042
- #: video-embed-thumbnail-generator.php:3644
1043
- msgid ""
1044
- "Facebook and some other social media sites will use these tags to embed the first video in your "
1045
- "post. For the majority of Facebook users who have enabled secure browsing, your video must be "
1046
- "served via https in order to be embedded directly on the page."
1047
- msgstr ""
1048
- "Facebook y otros sitios de medios sociales van a usar las siguientes etiquetas para incrustar el "
1049
- "primer video en tu mensaje. Para la mayoría de usuarios de Facebook que han habilitado "
1050
- "navegación segura, el vídeo debe ser servido a través de https para ser incorporado directamente "
1051
- "en la página."
1052
-
1053
- #: video-embed-thumbnail-generator.php:3645
1054
- msgctxt "\"oEmbed\" is a proper noun and might not need translation"
1055
- msgid "Enable oEmbed provider"
1056
- msgstr "Permite oEmbed"
1057
-
1058
- #: video-embed-thumbnail-generator.php:3645
1059
- msgid ""
1060
- "Allows users of other websites to embed your videos using just the post URL rather than the full "
1061
- "iframe embed code. For security reasons, this will not work on other WordPress sites unless "
1062
- "they've enabled oEmbed discovery from unkown providers."
1063
- msgstr ""
1064
- "Permite a otros sitios web incrustar sus vídeos usando la URL del mismo en lugar del código de "
1065
- "incrustración en iframe. Por razones de seguridad, esto no funcionará en otros sitios con "
1066
- "WordPress, a menos que permitan descubrimiento oEmbed desde proveedores desconocidos."
1067
-
1068
- #: video-embed-thumbnail-generator.php:3646
1069
- msgctxt "\"oEmbed\" is a proper noun and might not need translation"
1070
- msgid "Enable oEmbeds from unknown providers"
1071
- msgstr "Permite oEmbed desde proveedores desconocidos"
1072
-
1073
- #: video-embed-thumbnail-generator.php:3646
1074
- msgid ""
1075
- "Allows your own users to embed content from any oEmbed provider. User must have the "
1076
- "\"unfiltered_html\" capability which is limited to Administrators and Editors by default."
1077
- msgstr ""
1078
- "Permite a sus usuarios incrustar contenido desde cualquier proveedor oEmbed. El usuario debe "
1079
- "tener la capacidad \"unfiltered_html\" la cual está limitada a Administradores y editores por "
1080
- "defecto."
1081
-
1082
- #: video-embed-thumbnail-generator.php:3647
1083
- msgid "Allow right-clicking on videos."
1084
- msgstr "Permitir clic derecho sobre los vídeos."
1085
-
1086
- #: video-embed-thumbnail-generator.php:3647
1087
- msgid ""
1088
- "We can't prevent a user from simply saving the downloaded video file from the browser's cache, "
1089
- "but disabling right-clicking will make it more difficult for casual users to save your videos."
1090
- msgstr ""
1091
- "No podemos evitar que un usuario simplemente guarde el archivo de vídeo descargado desde la "
1092
- "caché del navegador, pero desactivando el botón derecho hará que sea más difícil para los "
1093
- "usuarios ocasionales guardar sus videos."
1094
-
1095
- #: video-embed-thumbnail-generator.php:3652
1096
- msgid "Set generated video thumbnails as featured images."
1097
- msgstr "Establecer miniaturas de vídeo generadas como imágenes destacadas."
1098
-
1099
- #: video-embed-thumbnail-generator.php:3652
1100
- msgid ""
1101
- "If your theme uses the featured image meta tag, this will automatically set a video's parent "
1102
- "post's featured image to the most recently saved thumbnail image."
1103
- msgstr ""
1104
- "Si el tema utiliza la etiqueta meta de la imagen destacada, esto establecerá automáticamente "
1105
- "después la imagen destacada de una publicación padre de un vídeo a la miniatura guardada más "
1106
- "recientemente."
1107
-
1108
- #: video-embed-thumbnail-generator.php:3652
1109
- msgctxt "implied \"Set all thumbnails as featured\""
1110
- msgid "Set all as featured"
1111
- msgstr "Establecer todas como destacadas"
1112
-
1113
- #: video-embed-thumbnail-generator.php:3652
1114
- msgid ""
1115
- "If you've generated thumbnails before enabling this option, this will set all existing "
1116
- "thumbnails as featured images. Be careful!"
1117
- msgstr ""
1118
- "Si usted ha generado miniaturas antes de habilitar esta opción, esto hará que todas las "
1119
- "miniaturas existentes se establezcan como imágenes destacadas. ¡Tenga cuidado!"
1120
-
1121
- #: video-embed-thumbnail-generator.php:3663
1122
- msgid ""
1123
- "This depends on your theme. Thumbnails generated by the plugin can be saved as children of the "
1124
- "video attachment or the post. Some themes use an image attached to a post instead of the built-"
1125
- "in featured image meta tag. Version 3.x of this plugin saved all thumbnails as children of the "
1126
- "video."
1127
- msgstr ""
1128
- "Esto depende de su tema. Miniaturas generadas por el plugin se pueden guardar como hijos del "
1129
- "adjunto de video o en la publicación. Algunos temas usan una imagen adjunta a un mensaje en "
1130
- "lugar de la etiqueta meta de la imagen destacada incorporada. La Versión 3.x de este plugin "
1131
- "guardaba todas las miniaturas como hijos del vídeo."
1132
-
1133
- #: video-embed-thumbnail-generator.php:3663
1134
- msgid "Set all parents"
1135
- msgstr "Establecer todos los padres"
1136
-
1137
- #: video-embed-thumbnail-generator.php:3663
1138
- msgid ""
1139
- "If you've generated thumbnails before changing this option, this will set all existing "
1140
- "thumbnails as children of your currently selected option."
1141
- msgstr ""
1142
- "Si usted ha generado miniaturas antes de cambiar esta opción, esto establecerá todas las "
1143
- "miniaturas existentes como hijas de la opción seleccionada actualmente."
1144
-
1145
- #: video-embed-thumbnail-generator.php:3670
1146
- msgid "all"
1147
- msgstr "todo"
1148
-
1149
- #: video-embed-thumbnail-generator.php:3671
1150
- msgid "encoded videos only"
1151
- msgstr "solo videos codificados"
1152
-
1153
- #: video-embed-thumbnail-generator.php:3677
1154
- msgid ""
1155
- "If you delete the original video you can choose to delete all associated attachments (thumbnails "
1156
- "& videos) or keep the thumbnail."
1157
- msgstr ""
1158
- "Si elimina el vídeo original usted puede optar por eliminar todos los archivos adjuntos "
1159
- "asociados (miniaturas y videos) o mantener la vista en miniatura."
1160
-
1161
- #: video-embed-thumbnail-generator.php:3682
1162
- #, php-format
1163
- msgid ""
1164
- "HTML tag applied to titles inserted above the video. Examples: %s. Corresponding closing tags "
1165
- "will be applied to the end of the title automatically."
1166
- msgstr ""
1167
- "Etiqueta HTML aplicada a títulos insertados por encima del vídeo. Ejemplos: %s. Las etiquetas de "
1168
- "cierre correspondientes se aplicarán al final del título de forma automática."
1169
-
1170
- #: video-embed-thumbnail-generator.php:3687
1171
- msgid "Match plugin settings"
1172
- msgstr "Ajustar la configuración del plugin"
1173
-
1174
- #: video-embed-thumbnail-generator.php:3687
1175
- msgid "WordPress default"
1176
- msgstr "Por defecto de WordPress "
1177
-
1178
- #: video-embed-thumbnail-generator.php:3687
1179
- msgid "Video only (deprecated)"
1180
- msgstr "Sólo Video (obsoleto)"
1181
-
1182
- #: video-embed-thumbnail-generator.php:3693
1183
- msgid ""
1184
- "The plugin can filter your media attachment page to display videos using your chosen settings, "
1185
- "or completely replace your attachment template to show only the video. If you were one of the "
1186
- "few people using iframe embed codes before version 4.0 of this plugin then you should continue "
1187
- "to use \"Video only\" but otherwise it's not recommended."
1188
- msgstr ""
1189
- "El plugin puede filtrar su página de adjuntos de medios de comunicación para mostrar videos "
1190
- "utilizando la configuración seleccionada, o reemplazar completamente la plantilla de adjuntos "
1191
- "para mostrar sólo el video. Si usted es una de las pocas personas que utilizaban códigos dentro "
1192
- "de un iframe antes de la versión 4.0 de este plugin, entonces usted debe seguir usando \"Video "
1193
- "solamente\" pero no se recomienda utilizarlo de otra forma."
1194
-
1195
- #: video-embed-thumbnail-generator.php:3707
1196
- #, php-format
1197
- msgid ""
1198
- "This should be the folder where applications are installed on your server, not a direct path to "
1199
- "an application, so it doesn't usually end with %1$s. Example: %2$s."
1200
- msgstr ""
1201
- "Esto debería ser la carpeta donde las aplicaciones se instalan en el servidor, no un camino "
1202
- "directo a una aplicación, por lo que no suelen acabar con %1$s. Ejemplo: %2$s"
1203
-
1204
- #: video-embed-thumbnail-generator.php:3719
1205
- msgid ""
1206
- "FFMPEG split into two separate branches in 2011. The new branch is called LIBAV and executes "
1207
- "using \"avconv\" instead of \"ffmpeg.\" Both are still actively developed and FFMPEG frequently "
1208
- "incorporates LIBAV features. Debian & Ubuntu users probably have LIBAV installed."
1209
- msgstr ""
1210
- "FFMPEG se divide en dos ramas separadas en 2011. La nueva rama se llama LIBAV y se ejecuta "
1211
- "usando \"avconv\" en vez de \"ffmpeg.\" Ambos aún se están desarrollando activamente y FFMPEG "
1212
- "con frecuencia incorpora características LIBAV. Los usuarios de Debian y Ubuntu, probablemente "
1213
- "tienen LIBAV instalado."
1214
-
1215
- #: video-embed-thumbnail-generator.php:3725
1216
- #, php-format
1217
- msgid ""
1218
- "When possible, use the browser's built-in video capabilities to make thumbnails instead of %s."
1219
- msgstr ""
1220
- "Cuando sea posible, utilice las capacidades de vídeo integradas de su navegador para hacer "
1221
- "miniaturas en lugar de %s."
1222
-
1223
- #: video-embed-thumbnail-generator.php:3736 video-embed-thumbnail-generator.php:4008
1224
- msgid "Custom"
1225
- msgstr "Personalizado"
1226
-
1227
- #: video-embed-thumbnail-generator.php:3739
1228
- msgid "Replace original with"
1229
- msgstr "Reemplazar el original con"
1230
-
1231
- #: video-embed-thumbnail-generator.php:3749
1232
- msgid ""
1233
- "If you have FFMPEG/LIBAV and the proper libraries installed, you can choose to replace your "
1234
- "uploaded video with your preferred format, and also transcode into as many as seven additional "
1235
- "formats depending on the resolution of your original source. Different browsers have different "
1236
- "playback capabilities. Most desktop browsers can play H.264, and all modern mobile devices can "
1237
- "play at least 360p H.264. If you create multiple H.264 resolutions, the highest resolution "
1238
- "supported by the device will be served up automatically. The plugin will not upconvert your "
1239
- "video, so if you upload a 720p video, it will not waste your time creating a 1080p version. "
1240
- "There was a time when it seemed like a good idea to provide OGV or WEBM for some desktop "
1241
- "browsers, but even Firefox allows H.264 playback on most operating systems now. I no longer "
1242
- "recommend encoding OGV or WEBM unless you expect a large number of no-Flash sticklers visiting "
1243
- "your site. WEBM VP9 is a new technology and requires a version of FFMPEG or LIBAV newer than "
1244
- "October 2013."
1245
- msgstr ""
1246
- "Si tiene FFMPEG/LIBAV y sus librerías instaladas, puede seleccionar reemplazar el vídeo subido "
1247
- "por su formato preferido, e incluso transcodificarlo en hasta siete formatos adicionales "
1248
- "dependiendo de la resolución del original. Los navegadores web tienen diferentes capacidades de "
1249
- "reproducción. La mayoría de navegadores puede reproducir H.264, y todos los dispositivos móviles "
1250
- "modernos puede reproducir al menos 360p H.264. Si crea múltiples resoluciones en H.264, ser "
1251
- "servirá automáticamente la más alta que soporte el dispositivo. Este plugin no aumenta la "
1252
- "resolución de su vídeo, por tanto si sube un vídeo de 720p, no perderá tiempo creando una "
1253
- "versión de 1080p. Hubo un momento en el que parecía buena idea proveer formatos OGV o WEBM para "
1254
- "algunos navegadores de escritorio, pero incluso Firefox permite reproducir H.264 en la mayoría "
1255
- "de dispositivos ahora. No se recomienda codificar OGV o WEBM a menos que espere un gran número "
1256
- "de visitas sin Flash a su sitio. WEBM VP9 es una nueva tecnología y requiere una versión de "
1257
- "FFMPEG o LIBAV posterior a Octubre de 2013."
1258
-
1259
- #: video-embed-thumbnail-generator.php:3750
1260
- msgid "(iPhone 4s+, iPad 2+, modern Android, Windows Phone 8, Chrome, Safari, IE 9+, Firefox)"
1261
- msgstr "(iPhone 4s+, iPad 2+, modern Android, Windows Phone 8, Chrome, Safari, IE 9+, Firefox)"
1262
-
1263
- #: video-embed-thumbnail-generator.php:3751
1264
- msgid "(iPhone 4+, iPad, most Android, Chrome, Safari, IE 9+, Firefox)"
1265
- msgstr "(iPhone 4+, iPad, most Android, Chrome, Safari, IE 9+, Firefox)"
1266
-
1267
- #: video-embed-thumbnail-generator.php:3782
1268
- #, php-format
1269
- msgid "Generate %1$s thumbnail from %2$s%% of the way through the video."
1270
- msgid_plural "Generate %1$s thumbnails and set #%2$s as the main image."
1271
- msgstr[0] "Generar %1$s miniatura desde %2$s%% sobre la marcha a través del vídeo."
1272
- msgstr[1] "Generar %1$s miniaturas desde %2$s%% sobre la marcha a través del vídeo."
1273
-
1274
- #: video-embed-thumbnail-generator.php:3790
1275
- msgid "Encode formats selected above."
1276
- msgstr "Formatos de codificación seleccionados arriba"
1277
-
1278
- #: video-embed-thumbnail-generator.php:3810
1279
- msgid "Generate thumbnails"
1280
- msgstr "Generar miniaturas"
1281
-
1282
- #: video-embed-thumbnail-generator.php:3810
1283
- #, php-format
1284
- msgid ""
1285
- "Use %s to automatically generate thumbnails for every video in the Media Library that doesn't "
1286
- "already have them. Uses the automatic thumbnail settings above. This could take a very long time "
1287
- "if you have a lot of videos. Proceed with caution!"
1288
- msgstr ""
1289
- "Usar %s para automáticamente generar miniaturas para cada vídeo de la Librería de Medios que no "
1290
- "la tenga previamente. Utiliza la configuración de miniaturas automáticas de más arriba. Este "
1291
- "procesos puede tardar bastante tiempo. ¡Ejecútalo con precaución!"
1292
-
1293
- #: video-embed-thumbnail-generator.php:3811
1294
- msgid "Encode videos"
1295
- msgstr "Codificar vídeos"
1296
-
1297
- #: video-embed-thumbnail-generator.php:3811
1298
- msgid ""
1299
- "Add every video in the Media Library to the encode queue if it hasn't already been encoded. Uses "
1300
- "the default encode formats chosen above."
1301
- msgstr ""
1302
- "Añadir cada vídeo en la Librería de Medios a la cola de codificación si todavía no ha sido "
1303
- "codificado. Utiliza el formato por defecto seleccionado más arriba."
1304
-
1305
- #: video-embed-thumbnail-generator.php:3818
1306
- msgid "Username:"
1307
- msgstr "Nombre de Usuario:"
1308
-
1309
- #: video-embed-thumbnail-generator.php:3819
1310
- msgid "Password:"
1311
- msgstr "Contraseña:"
1312
-
1313
- #: video-embed-thumbnail-generator.php:3819
1314
- #, php-format
1315
- msgid "If your videos are htaccess protected, %s will access them using these credentials."
1316
- msgstr ""
1317
- "Si sus vídeos están protegidos por htaccess,%s accederá a ellos utilizando estas credenciales."
1318
-
1319
- #: video-embed-thumbnail-generator.php:3827
1320
- #, php-format
1321
- msgid "Scale: %s%% of video covered by the watermark."
1322
- msgstr "Escala: %s%% del vídeo cubierta por la marca de agua."
1323
-
1324
- #: video-embed-thumbnail-generator.php:3828
1325
- msgctxt "horizontal center"
1326
- msgid "center"
1327
- msgstr "centrar"
1328
-
1329
- #: video-embed-thumbnail-generator.php:3829
1330
- msgid "Horizontal align:"
1331
- msgstr "Alineación horizontal:"
1332
-
1333
- #: video-embed-thumbnail-generator.php:3836 video-embed-thumbnail-generator.php:3846
1334
- msgid "offset"
1335
- msgstr "desplazamiento"
1336
-
1337
- #: video-embed-thumbnail-generator.php:3838
1338
- msgid "Vertical align:"
1339
- msgstr "Alineación vertical"
1340
-
1341
- #: video-embed-thumbnail-generator.php:3840
1342
- msgid "top"
1343
- msgstr "parte superior"
1344
-
1345
- #: video-embed-thumbnail-generator.php:3840
1346
- msgctxt "vertical center"
1347
- msgid "center"
1348
- msgstr "centrar"
1349
-
1350
- #: video-embed-thumbnail-generator.php:3840
1351
- msgid "bottom"
1352
- msgstr "inferior"
1353
-
1354
- #: video-embed-thumbnail-generator.php:3863
1355
- #, php-format
1356
- msgid ""
1357
- "By default %1$s places moov atoms at the end of H.264 encoded files, which forces the entire "
1358
- "file to download before playback can start and can prevent Flash players from playing them at "
1359
- "all. Since approximately October 2012 %1$s can fix the problem at the end of the encoding "
1360
- "process by using the option `movflags faststart`. This is the easiest and fastest way to correct "
1361
- "the problem, but older versions of %1$s will not work if you select the movflags option. If you "
1362
- "can't update to a new version of %1$s, select qt-faststart or MP4Box which will run after "
1363
- "encoding is finished if they are installed on your server."
1364
- msgstr ""
1365
- "Por defecto %1$s coloca átomos moov al final de archivos H.264 codificados, lo que obliga a todo "
1366
- "el archivo a descargar antes de que la reproducción se pueda iniciar y se puede evitar que los "
1367
- "reproductores Flash los puedan re´roducir. Desde aproximadamente en Octubre de 2012 %1$s puede "
1368
- "corregir el problema al final del proceso de codificación mediante el uso de la opción `movflags "
1369
- "faststart`. Esta es la forma más fácil y rápida para corregir el problema, pero las versiones "
1370
- "anteriores de %1$s no funcionarán si se selecciona la opción movflags. Si no se puede actualizar "
1371
- "a una nueva versión de %1$s, seleccione qt-faststart o MP4Box que se ejecutarán después de que "
1372
- "la codificación termine si están instalados en su servidor."
1373
-
1374
- #: video-embed-thumbnail-generator.php:3864
1375
- #, php-format
1376
- msgid "Path to %s:"
1377
- msgstr "Ruta a %s:"
1378
-
1379
- #: video-embed-thumbnail-generator.php:3877
1380
- msgid ""
1381
- "Constant Rate Factor (CRF) attempts to maintain a particular quality output for the entire video "
1382
- "and only uses bits the encoder determines are necessary. Average Bit Rate is similar to the "
1383
- "method used in older versions of this plugin. If CRF is selected, WEBM encoding will also use "
1384
- "the ABR setting to set a max bit rate 25% higher than the ABR. Without a max bit rate setting "
1385
- "WEBM files are terrible quality."
1386
- msgstr ""
1387
- "Constant Rate Factor (CRF) (Factor de Tasa Constante) intenta mantener una salida de calidad "
1388
- "especial para todo el vídeo y sólo utiliza bits que el codificador determina que son necesarios. "
1389
- "Velocidad de bits media es similar al método utilizado en las versiones anteriores de este "
1390
- "plugin. Si se selecciona el CRF, la codificación WEBM también utilizará la configuración de ABR "
1391
- "para establecer una tasa de bits máxima de 25% más alta que el ABR. Sin una tasa de bits máxima "
1392
- "los archivos de configuración WEBM son de terrible calidad."
1393
-
1394
- #: video-embed-thumbnail-generator.php:3889
1395
- msgid "Lower values are higher quality. 18 is considered visually lossless. Default is 23."
1396
- msgstr ""
1397
- "Los valores más bajos son de mayor calidad. 18 se considera visualmente sin pérdidas. El valor "
1398
- "predeterminado es 23."
1399
-
1400
- #: video-embed-thumbnail-generator.php:3896
1401
- msgid "Lower values are higher quality. Default is 10."
1402
- msgstr "Los valores más bajos son de mayor calidad. El valor predeterminado es 10."
1403
-
1404
- #: video-embed-thumbnail-generator.php:3903
1405
- msgid "Higher values are higher quality. Default is 6."
1406
- msgstr "Los valores más altos son de mayor calidad. El valor predeterminado es 6."
1407
-
1408
- #: video-embed-thumbnail-generator.php:3915
1409
- msgid "bits per pixel."
1410
- msgstr "Bits por píxel."
1411
-
1412
- #: video-embed-thumbnail-generator.php:3915
1413
- msgid "Default is 0.1"
1414
- msgstr "Por defecto es 0.1"
1415
-
1416
- #: video-embed-thumbnail-generator.php:3931
1417
- msgctxt "H.264 profile. Might not need translation"
1418
- msgid "profile"
1419
- msgstr "perfil"
1420
-
1421
- #: video-embed-thumbnail-generator.php:3931
1422
- msgid ""
1423
- "Lower profiles will slightly increase file sizes. This mostly depends on your need for "
1424
- "compatability with Android devices. Main profile seems to work on recent phones, although "
1425
- "officially Android only supports baseline. High profile is not recommended for mobile or Flash "
1426
- "compatibility, and anything above high is designed for professional video and probably "
1427
- "incompatible with consumer devices. Older versions of FFMPEG might ignore this setting "
1428
- "altogether."
1429
- msgstr ""
1430
- "Perfiles menores aumentan ligeramente el tamaño de los archivos. Esto depende principalmente de "
1431
- "su necesidad de compatibilidad con los dispositivos Android. Perfil principal parece funcionar "
1432
- "en los teléfonos más recientes, aunque oficialmente Android sólo es compatible con la línea de "
1433
- "base. Alto perfil, no se recomienda para la compatibilidad móvil o Flash, y cualquier cosa por "
1434
- "encima de alto está diseñada para vídeo profesional y probablemente incompatible con los "
1435
- "dispositivos de consumo. Las versiones anteriores de FFMPEG pueden ignorar esta configuración "
1436
- "por completo."
1437
-
1438
- #: video-embed-thumbnail-generator.php:3938
1439
- msgctxt "H.264 level. Might not need translation"
1440
- msgid "level"
1441
- msgstr "nivel"
1442
-
1443
- #: video-embed-thumbnail-generator.php:3938
1444
- msgid ""
1445
- "3.0 is default. Lower levels will lower maximum bit rates and decoding complexity. This mostly "
1446
- "depends on your need for compatability with mobile devices. Older versions of FFMPEG might "
1447
- "ignore this setting altogether."
1448
- msgstr ""
1449
- "3.0 es el predeterminado. Los niveles más bajos reducirán las tasas de bits máxima y la "
1450
- "complejidad de decodificación. Esto depende principalmente de su necesidad de compatibilidad con "
1451
- "dispositivos móviles. Las versiones anteriores de FFMPEG pueden ignorar esta configuración por "
1452
- "completo."
1453
-
1454
- #: video-embed-thumbnail-generator.php:3958
1455
- msgid "Enable legacy FFMPEG \"-b\" and \"-ba\" bitrate flags."
1456
- msgstr "Habilitar banderas de bitratio FFMPEG \"b\" y \"-ba\" legacy."
1457
-
1458
- #: video-embed-thumbnail-generator.php:3958
1459
- msgid ""
1460
- "Enable if your installed version of FFMPEG is old enough that you can't use the newer -b:v flags "
1461
- "(Dreamhost users must turn this on). It may cause newer versions of FFMPEG to fail."
1462
- msgstr ""
1463
- "Habilitar si la versión instalada de FFMPEG es tan antigua que no puede utilizar las banderas –b:"
1464
- "v más nuevas (usuarios Dreamhost deben habilitar esta función). Puede causar que nuevas "
1465
- "versiones de FFMPEG fallen."
1466
-
1467
- #: video-embed-thumbnail-generator.php:3959
1468
- msgid "Enable legacy libx264 parameters."
1469
- msgstr "Habilitar parámetros nativos de libx264"
1470
-
1471
- #: video-embed-thumbnail-generator.php:3959
1472
- msgid ""
1473
- "Enable if your installed version of FFMPEG is old enough that libx264 requires additional "
1474
- "configuration to operate (Dreamhost users must turn this on). This should help if you can encode "
1475
- "WEBM or OGV files but H264/Mobile files fail. It could cause newer versions of FFMPEG to fail."
1476
- msgstr ""
1477
- "Habilitar si la versión instalada de FFMPEG es tan antigua que libx264 requiere una "
1478
- "configuración adicional para operar (usuarios Dreamhost deben habilitar esta función). Esto "
1479
- "debería ayudar si usted puede codificar archivos WEBM o OGV pero los archivos H264/Mobile "
1480
- "fallan. Podría causar que nuevas versiones de ffmpeg para fallen."
1481
-
1482
- #: video-embed-thumbnail-generator.php:3960
1483
- msgid "Enable legacy FFMPEG rotation method."
1484
- msgstr "Habilitar método de rotación nativo de FFMPEG"
1485
-
1486
- #: video-embed-thumbnail-generator.php:3960
1487
- msgid ""
1488
- "Enable if vertical videos shot on mobile devices don't rotate correctly or generate errors. If "
1489
- "legacy libx264 paramaters are necessary, rotation won't work at all."
1490
- msgstr ""
1491
- "Habilitar si los vídeos tomados en vertical en dispositivos móviles no rotan correctamente o "
1492
- "generan errores. Si son necesarios los parámetros nativos de libx26, la rotación no funcionará."
1493
-
1494
- #: video-embed-thumbnail-generator.php:3961
1495
- msgid "Disable stdin."
1496
- msgstr "Desactivar stdin."
1497
-
1498
- #: video-embed-thumbnail-generator.php:3961
1499
- msgid ""
1500
- "Turn off this checkbox if your installed version of FFMPEG is old enough that it does not "
1501
- "recognize the nostdin flag (Dreamhost users must turn this off)."
1502
- msgstr ""
1503
- "Habilitar si la versión instalada de FFMPEG es tan antigua que no reconoce la bandera nostdin "
1504
- "(Los usuarios de Dreamhost deben deshabilitar esta función)."
1505
-
1506
- #: video-embed-thumbnail-generator.php:3974
1507
- msgid "Simultaneous encodes."
1508
- msgstr "Codificaciones simultáneas."
1509
-
1510
- #: video-embed-thumbnail-generator.php:3974
1511
- #, php-format
1512
- msgid ""
1513
- "Increasing the number will allow %1$s to encode more than one file at a time, but may lead to "
1514
- "%1$s monopolizing system resources."
1515
- msgstr ""
1516
- "Aumentar el número permitirá %1$s para codificar más de un archivo a la vez, pero pueden dar "
1517
- "lugar a %1$s monopolizando los recursos del sistema."
1518
-
1519
- #: video-embed-thumbnail-generator.php:3981
1520
- msgctxt "CPU threads. Might not need translating"
1521
- msgid "threads"
1522
- msgstr "hilos"
1523
-
1524
- #: video-embed-thumbnail-generator.php:3981
1525
- #, php-format
1526
- msgid ""
1527
- "Default is 1, which limits encoding speed but prevents encoding from using too many system "
1528
- "resources. Selecting 0 will allow %1$s to optimize the number of threads or you can set the "
1529
- "number manually. This may lead to %1$s monopolizing system resources."
1530
- msgstr ""
1531
- "Por defecto es 1, que limita la velocidad de codificación, pero evita a la codificación utilizar "
1532
- "demasiados recursos del sistema. Seleccionar 0 permitirá %1$s para optimizar el número de hilos "
1533
- "o puede configurar el número manualmente. Esto puede llevar a %1$s a monopolizar los recursos "
1534
- "del sistema"
1535
-
1536
- #: video-embed-thumbnail-generator.php:3983
1537
- msgctxt "execute program"
1538
- msgid "Run"
1539
- msgstr "Ejecutar"
1540
-
1541
- #: video-embed-thumbnail-generator.php:3983
1542
- #, php-format
1543
- msgid "Tells %1$s to run at a lower priority to avoid monopolizing system resources."
1544
- msgstr ""
1545
- "Dice a %1$s que se ejecute con una prioridad más baja para evitar la monopolización de los "
1546
- "recursos delsistema."
1547
-
1548
- #: video-embed-thumbnail-generator.php:4007
1549
- msgid "Replace"
1550
- msgstr "Reemplazar"
1551
-
1552
- #: video-embed-thumbnail-generator.php:4017
1553
- #, php-format
1554
- msgid "%1$s sample %2$s encode command"
1555
- msgstr "%1$s muestra %2$s comando de codificación"
1556
-
1557
- #: video-embed-thumbnail-generator.php:4018
1558
- #, php-format
1559
- msgid "%s test output:"
1560
- msgstr "%s salida de prueba:"
1561
-
1562
- #: video-embed-thumbnail-generator.php:4018
1563
- #, php-format
1564
- msgid "For help interpreting this output, %s try our Wiki page on Github"
1565
- msgstr "Para ayudar a la interpretación de esta salida,%s, pruebe nuestra página Wiki en Github"
1566
-
1567
- #: video-embed-thumbnail-generator.php:4226
1568
- #, php-format
1569
- msgid ""
1570
- "%1$s is disabled in PHP settings. You can embed existing videos and make thumbnails with "
1571
- "compatible browsers, but video encoding will not work. Contact your System Administrator to find "
1572
- "out if you can enable %1$s."
1573
- msgstr ""
1574
- "%1$s está deshabilitado en la configuración de PHP. Puede insertar vídeos existentes y crear las "
1575
- "miniaturas con los navegadores compatibles, pero la codificación de vídeo no funcionará. Póngase "
1576
- "en contacto con el administrador del sistema para averiguar si se puede habilitar %1$s."
1577
-
1578
- #: video-embed-thumbnail-generator.php:4234
1579
- #, php-format
1580
- msgid ""
1581
- "%1$s is not executing correctly at %2$s. You can embed existing videos and make thumbnails with "
1582
- "compatible browsers, but video encoding is not possible without %1$s."
1583
- msgstr ""
1584
- "%1$s no se encuentra en %2$s. Puede insertar videos existentes y hacer miniaturas con los "
1585
- "navegadores compatibles, pero la codificación de vídeo no es posible sin %1$s."
1586
-
1587
- #: video-embed-thumbnail-generator.php:4234
1588
- msgid "Error message:"
1589
- msgstr "Mensaje de error:"
1590
-
1591
- #: video-embed-thumbnail-generator.php:4249
1592
- msgid "Video Embed & Thumbnail Generator settings reset to default values."
1593
- msgstr "Ajustes de Video Embed & Thumbnail Generator restablecidas a valores por defecto."
1594
-
1595
- #: video-embed-thumbnail-generator.php:4260
1596
- msgid "You must enter a value for the maximum video width."
1597
- msgstr "Debe ingresar un valor para el ancho máximo del video."
1598
-
1599
- #: video-embed-thumbnail-generator.php:4264
1600
- msgid "You must enter a value for the maximum video height."
1601
- msgstr "Debe ingresar un valor para la altura máxima del video."
1602
-
1603
- #: video-embed-thumbnail-generator.php:4268
1604
- msgid "You must enter a value for the maximum gallery video width."
1605
- msgstr "Debe ingresar un valor para el ancho máximo de la galería del vídeo."
1606
-
1607
- #: video-embed-thumbnail-generator.php:4667 video-embed-thumbnail-generator.php:4882
1608
- msgid "Video Stats"
1609
- msgstr "Estadísticas Vídeo"
1610
-
1611
- #. translators: Start refers to the number of times a video has been started
1612
- #: video-embed-thumbnail-generator.php:4669 video-embed-thumbnail-generator.php:4895
1613
- #, php-format
1614
- msgid "%d Start"
1615
- msgid_plural "%d Starts"
1616
- msgstr[0] "%d reproducción comenzada"
1617
- msgstr[1] "%d reproducciones comenzadas"
1618
-
1619
- #: video-embed-thumbnail-generator.php:4669 video-embed-thumbnail-generator.php:4897
1620
- #, php-format
1621
- msgid "%d Complete View"
1622
- msgid_plural "%d Complete Views"
1623
- msgstr[0] "%d reproducción completa"
1624
- msgstr[1] "%d reproducciones completas"
1625
-
1626
- #: video-embed-thumbnail-generator.php:4669
1627
- msgid "Video ID:"
1628
- msgstr "ID de Vídeo:"
1629
-
1630
- #: video-embed-thumbnail-generator.php:4698
1631
- #, php-format
1632
- msgid "%1$s not found at %2$s and unable to load video in browser for thumbnail generation."
1633
- msgstr ""
1634
- "%1$s no encontrado en %2$s y no puede cargar el video en el navegador para la generación de "
1635
- "imágenes en miniatura."
1636
-
1637
- #: video-embed-thumbnail-generator.php:4759
1638
- msgctxt "Button text. Implied \"Generate thumbnails\""
1639
- msgid "Generate"
1640
- msgstr "Generar"
1641
-
1642
- #: video-embed-thumbnail-generator.php:4760
1643
- msgctxt "Button text. Implied \"Randomize thumbnail generation\""
1644
- msgid "Randomize"
1645
- msgstr "Aleatorio"
1646
-
1647
- #: video-embed-thumbnail-generator.php:4761
1648
- msgid "Force 1st frame thumbnail"
1649
- msgstr "Forzar el 1er cuadro de la miniatura"
1650
-
1651
- #: video-embed-thumbnail-generator.php:4763 video-embed-thumbnail-generator.php:5374
1652
- msgid "Thumbnail timecode:"
1653
- msgstr "Código de tiempo de la miniatura:"
1654
-
1655
- #: video-embed-thumbnail-generator.php:4770
1656
- msgctxt "Header for thumbnail section"
1657
- msgid "Thumbnails"
1658
- msgstr "Miniaturas"
1659
-
1660
- #: video-embed-thumbnail-generator.php:4778 video-embed-thumbnail-generator.php:5375
1661
- msgid "Set thumbnail as featured image"
1662
- msgstr "Establecer miniatura como imagen destacada"
1663
-
1664
- #: video-embed-thumbnail-generator.php:4780 video-embed-thumbnail-generator.php:5380
1665
- msgid "Thumbnail URL"
1666
- msgstr "URL de Miniatura"
1667
-
1668
- #: video-embed-thumbnail-generator.php:4782 video-embed-thumbnail-generator.php:5382
1669
- #, php-format
1670
- msgid "Leave blank to use %sdefault thumbnail"
1671
- msgstr "Dejar en blanco para usar miniatura %s por defecto"
1672
-
1673
- #: video-embed-thumbnail-generator.php:4784
1674
- msgid "Video Embed Dimensions"
1675
- msgstr "Dimensiones Incrustación de Video"
1676
-
1677
- #: video-embed-thumbnail-generator.php:4789
1678
- msgid "Lock to aspect ratio"
1679
- msgstr "Bloquear a la relación de aspecto"
1680
-
1681
- #: video-embed-thumbnail-generator.php:4790 video-embed-thumbnail-generator.php:5387
1682
- #, php-format
1683
- msgid "Leave blank to use %sdefault dimensions"
1684
- msgstr "Dejar en blanco para usar %s dimensiones por defecto"
1685
-
1686
- #: video-embed-thumbnail-generator.php:4795 video-embed-thumbnail-generator.php:5391
1687
- msgid "Additional Formats"
1688
- msgstr "Formatos adicionales"
1689
-
1690
- #: video-embed-thumbnail-generator.php:4810
1691
- msgctxt "captions track"
1692
- msgid "Track"
1693
- msgstr "Pista"
1694
-
1695
- #: video-embed-thumbnail-generator.php:4814
1696
- msgctxt "two-letter code indicating track's language"
1697
- msgid "Language code:"
1698
- msgstr "Código de idioma:"
1699
-
1700
- #: video-embed-thumbnail-generator.php:4815 video-embed-thumbnail-generator.php:5397
1701
- msgid "Label:"
1702
- msgstr "Etiqueta:"
1703
-
1704
- #: video-embed-thumbnail-generator.php:4820 video-embed-thumbnail-generator.php:5396
1705
- msgid "Subtitles & Captions"
1706
- msgstr "Subtítulos y capciones"
1707
-
1708
- #: video-embed-thumbnail-generator.php:4822
1709
- msgid "Add track"
1710
- msgstr "Añadir pista"
1711
-
1712
- #: video-embed-thumbnail-generator.php:4825
1713
- msgid "Single Video"
1714
- msgstr "Vídeo Único"
1715
-
1716
- #: video-embed-thumbnail-generator.php:4825
1717
- msgid "Video Gallery"
1718
- msgstr "Galería Vídeo"
1719
-
1720
- #: video-embed-thumbnail-generator.php:4833
1721
- msgid "Video Embed Options"
1722
- msgstr "Opciones Incrustación Video"
1723
-
1724
- #: video-embed-thumbnail-generator.php:4836
1725
- msgid "Insert title above video"
1726
- msgstr "Insertar título vídeo de arriba"
1727
-
1728
- #: video-embed-thumbnail-generator.php:4838
1729
- msgid "Insert download link below video"
1730
- msgstr "Insertar enlace de descarga a continuación"
1731
-
1732
- #: video-embed-thumbnail-generator.php:4838
1733
- msgid "Makes it easier for users to download file."
1734
- msgstr "Hace que sea más fácil para los usuarios descargar el archivo."
1735
-
1736
- #: video-embed-thumbnail-generator.php:4839
1737
- msgctxt "verb"
1738
- msgid "Insert"
1739
- msgstr "Insertar"
1740
-
1741
- #: video-embed-thumbnail-generator.php:4863
1742
- msgid "Gallery Settings (all optional)"
1743
- msgstr "Configuración de la Galería (todos opcionales)"
1744
-
1745
- #: video-embed-thumbnail-generator.php:4865
1746
- msgid "Thumbnail Width"
1747
- msgstr "Ancho Miniatura"
1748
-
1749
- #: video-embed-thumbnail-generator.php:4866
1750
- msgid "Order By"
1751
- msgstr "Ordenar Por"
1752
-
1753
- #: video-embed-thumbnail-generator.php:4867
1754
- msgid "Sort Order"
1755
- msgstr "Orden de Clasificación"
1756
-
1757
- #: video-embed-thumbnail-generator.php:4868
1758
- msgid "Exclude"
1759
- msgstr "Excluir"
1760
-
1761
- #: video-embed-thumbnail-generator.php:4869
1762
- msgid "Include"
1763
- msgstr "Incluir"
1764
-
1765
- #: video-embed-thumbnail-generator.php:4870
1766
- msgid "Post ID"
1767
- msgstr "Identificación de la publicación"
1768
-
1769
- #: video-embed-thumbnail-generator.php:5071
1770
- msgctxt "text appended to newly created thumbnail titles"
1771
- msgid "thumbnail"
1772
- msgstr "miniatura"
1773
-
1774
- #: video-embed-thumbnail-generator.php:5326
1775
- msgctxt "Title in \"Add Media\" popup sidebar"
1776
- msgid "Embed Video from URL"
1777
- msgstr "Incrustar Vídeo desde la URL"
1778
-
1779
- #: video-embed-thumbnail-generator.php:5356
1780
- msgid "Video Title"
1781
- msgstr "Título del vídeo"
1782
-
1783
- #: video-embed-thumbnail-generator.php:5358
1784
- msgid "Add an optional header above the video."
1785
- msgstr "Añade una cabecera opcional sobre el vídeo."
1786
-
1787
- #: video-embed-thumbnail-generator.php:5363
1788
- msgid "Specify the URL of the video file."
1789
- msgstr "Especifique la URL del archivo de vídeo."
1790
-
1791
- #: video-embed-thumbnail-generator.php:5367
1792
- msgid "Thumbnails"
1793
- msgstr "Miniaturas"
1794
-
1795
- #: video-embed-thumbnail-generator.php:5369
1796
- msgid "Number of Thumbnails"
1797
- msgstr "Número de miniaturas"
1798
-
1799
- #: video-embed-thumbnail-generator.php:5372
1800
- msgid "Force 1st Frame Thumbnail"
1801
- msgstr "Fuerza la primera imagen como miniatura"
1802
-
1803
- #: video-embed-thumbnail-generator.php:5385
1804
- msgid "Dimensions"
1805
- msgstr "Dimensiones"
1806
-
1807
- #: video-embed-thumbnail-generator.php:5386
1808
- msgid "Lock to Aspect Ratio"
1809
- msgstr "Bloque el ratio de aspecto"
1810
-
1811
- #: video-embed-thumbnail-generator.php:5400
1812
- msgid "Generate Download Link Below Video"
1813
- msgstr "Genera enlace de descarga por debajo del vídeo"
1814
-
1815
- #: video-embed-thumbnail-generator.php:5400
1816
- msgid "Makes it easier for users to download video file"
1817
- msgstr "Hace más fácil a los usuarios descargar el archivo de vídeo"
1818
-
1819
- #: video-embed-thumbnail-generator.php:5405
1820
- msgid "Insert into Post"
1821
- msgstr "Insertar en el Post"
1822
-
1823
- #: video-embed-thumbnail-generator.php:5459
1824
- msgctxt "example video"
1825
- msgid "Sample Video"
1826
- msgstr "Vídeo de ejemplo"
1827
-
1828
- #: video-embed-thumbnail-generator.php:5460
1829
- msgid "Sample Embed Code"
1830
- msgstr "Muestra de Código Incrustado"
1831
-
1832
- #: video-embed-thumbnail-generator.php:5461
1833
- msgid "If text is entered in the attachment's caption field it is displayed here automatically."
1834
- msgstr ""
1835
- "Si se introduce texto en el campo de título del adjunto, se muestra aquí de forma automática."
1836
-
1837
- #: video-embed-thumbnail-generator.php:5809 video-embed-thumbnail-generator.php:5954
1838
- msgid "Can't open movie file."
1839
- msgstr "No se puede abrir el archivo de película."
1840
-
1841
- #: video-embed-thumbnail-generator.php:5932
1842
- #, php-format
1843
- msgid "%1$s updated in existing queue entry in position %2$s."
1844
- msgstr "%1$s actualizad en la cola de entrada en la posición %2$s."
1845
-
1846
- #: video-embed-thumbnail-generator.php:5933
1847
- #, php-format
1848
- msgid "Video is already queued in position %s."
1849
- msgstr "El vídeo ya está en la cola en la posición %s."
1850
-
1851
- #: video-embed-thumbnail-generator.php:5940
1852
- msgid "Starting"
1853
- msgstr "Iniciando"
1854
-
1855
- #: video-embed-thumbnail-generator.php:5941
1856
- #, php-format
1857
- msgid "%1$s added to queue in position %2$s."
1858
- msgstr "%1$s añadido a la cola en la posición %2$s."
1859
-
1860
- #: video-embed-thumbnail-generator.php:5945
1861
- msgid "Nothing to encode."
1862
- msgstr "Nada para codificar"
1863
-
1864
- #: video-embed-thumbnail-generator.php:6007
1865
- #, php-format
1866
- msgid ""
1867
- "Error: %1$s not found. Verify that %1$s is installed at %2$s and check the %3$sapplication path "
1868
- "plugin setting"
1869
- msgstr ""
1870
- "Error: %1$s no encontrado. Verifiqueque %1$s está instalado en %2$s y compruebe la configuración "
1871
- "de ruta del plugin a la aplicación %3$s."
1872
-
1873
- #: video-embed-thumbnail-generator.php:6102
1874
- #, php-format
1875
- msgid "%s already encoded"
1876
- msgstr "%s ya se encuentra codificado"
1877
-
1878
- #: video-embed-thumbnail-generator.php:6106
1879
- #, php-format
1880
- msgid "%s missing library libx264 required for H.264 encoding"
1881
- msgstr "%s falta biblioteca libx264 necesaria para la codificación H.264"
1882
-
1883
- #: video-embed-thumbnail-generator.php:6111
1884
- msgid "or"
1885
- msgstr "o"
1886
-
1887
- #: video-embed-thumbnail-generator.php:6112
1888
- #, php-format
1889
- msgid "and missing an AAC encoding library. Please install and enable libx264 and %s"
1890
- msgstr "y falta una biblioteca de codificación AAC.Por favor, instalar y habilitar libx264 y %s"
1891
-
1892
- #: video-embed-thumbnail-generator.php:6116 video-embed-thumbnail-generator.php:6135
1893
- msgid "Missing libraries"
1894
- msgstr "Bibliotecas faltantes"
1895
-
1896
- #: video-embed-thumbnail-generator.php:6126
1897
- #, php-format
1898
- msgid "Encoding %s"
1899
- msgstr "Codificando %s"
1900
-
1901
- #: video-embed-thumbnail-generator.php:6132
1902
- #, php-format
1903
- msgid "%1$s missing library %2$s required for %3$s encoding."
1904
- msgstr "%1$s biblioteca faltante %2$s necesaria para la codificación %3$s."
1905
-
1906
- #: video-embed-thumbnail-generator.php:6138
1907
- #, php-format
1908
- msgid "%s already encoded."
1909
- msgstr "%s ya se encuentra codificada"
1910
-
1911
- #: video-embed-thumbnail-generator.php:6155
1912
- msgid "Error: Command 'escapeshellcmd' is disabled on your server."
1913
- msgstr "Error: Comando 'escapeshellcmd' está deshabilitado en el servidor"
1914
-
1915
- #: video-embed-thumbnail-generator.php:6342 video-embed-thumbnail-generator.php:6352
1916
- msgid "Encoding"
1917
- msgstr "Codificando"
1918
-
1919
- #: video-embed-thumbnail-generator.php:6345
1920
- msgid "Cancel"
1921
- msgstr "Cancelar"
1922
-
1923
- #: video-embed-thumbnail-generator.php:6348
1924
- msgid "Elapsed:"
1925
- msgstr "Transcurrido:"
1926
-
1927
- #: video-embed-thumbnail-generator.php:6348
1928
- msgid "Remaining:"
1929
- msgstr "Quedan:"
1930
-
1931
- #: video-embed-thumbnail-generator.php:6348
1932
- msgctxt "Frames per second"
1933
- msgid "FPS:"
1934
- msgstr "FPS:"
1935
-
1936
- #: video-embed-thumbnail-generator.php:6428 video-embed-thumbnail-generator.php:6440
1937
- msgid "Encoding Complete"
1938
- msgstr "Codificación completa"
1939
-
1940
- #: video-embed-thumbnail-generator.php:6451
1941
- msgid "Encoding was canceled."
1942
- msgstr "Codificación se canceló."
1943
-
1944
- #: video-embed-thumbnail-generator.php:6461
1945
- msgid "No log file"
1946
- msgstr "ningún archivo de registro"
1947
-
1948
- #: video-embed-thumbnail-generator.php:6468
1949
- msgid "Error:"
1950
- msgstr "Error:"
1951
-
1952
- #: video-embed-thumbnail-generator.php:6480
1953
- msgid "Waiting..."
1954
- msgstr "Esperando ..."
1955
-
1956
- #: video-embed-thumbnail-generator.php:6707
1957
- msgid "Fixing moov atom for streaming"
1958
- msgstr "Corregir átomo moov para el streaming"
1959
-
1960
- #: video-embed-thumbnail-generator.php:7159
1961
- msgid "Video Embed & Thumbnail Generator Shortcode Reference"
1962
- msgstr "Referencia Código corto Video Embed & Thumbnail Generator"
1963
-
1964
- #: video-embed-thumbnail-generator.php:7160
1965
- msgid "Use these optional attributes in the [KGVID] shortcode:"
1966
- msgstr "Usar estos atributos opcionales en el código corto [KGVID]:"
1967
-
1968
- #: video-embed-thumbnail-generator.php:7161
1969
- msgid "video attachment ID (instead of using a URL)."
1970
- msgstr "ID video adjunto (en lugar de mediante una dirección URL)."
1971
-
1972
- #: video-embed-thumbnail-generator.php:7162
1973
- msgid "number of attached videos to display if no URL or ID is given."
1974
- msgstr "número de videos adjuntos a mostrar si hay URL o ID es dado."
1975
-
1976
- #: video-embed-thumbnail-generator.php:7163
1977
- msgid "criteria for sorting attached videos if no URL or ID is given."
1978
- msgstr "criterios para clasificar los vídeos adjuntos si no se da el URL o ID."
1979
-
1980
- #: video-embed-thumbnail-generator.php:7164
1981
- msgid "sort order."
1982
- msgstr "orden de clasificación."
1983
-
1984
- #: video-embed-thumbnail-generator.php:7165
1985
- msgid "sets the thumbnail."
1986
- msgstr "establece la miniatura."
1987
-
1988
- #: video-embed-thumbnail-generator.php:7166
1989
- msgid "sets the image shown when the video ends."
1990
- msgstr "establece la imagen que aparece cuando termina el video."
1991
-
1992
- #: video-embed-thumbnail-generator.php:7169
1993
- msgid "set video to always expand to fill its container."
1994
- msgstr "establece que el vídeo siempre se expande para rellenar su contenedor."
1995
-
1996
- #: video-embed-thumbnail-generator.php:7171
1997
- msgid "allow other content on the same line as the video"
1998
- msgstr "permitir otras contenidos en la misma línea que el vídeo"
1999
-
2000
- #: video-embed-thumbnail-generator.php:7172
2001
- msgid "pre-sets the volume for unusually loud videos. Value between 0 and 1."
2002
- msgstr "pre-configura el volumen para videos inusualmente fuertes. Valor entre 0 y 1."
2003
-
2004
- #: video-embed-thumbnail-generator.php:7173
2005
- msgid "sets the mute button on or off."
2006
- msgstr "selecciona el botón de silencio encendido o apagado."
2007
-
2008
- #: video-embed-thumbnail-generator.php:7174
2009
- msgid "sets the controlbar position. \"Floating\" option only works with Strobe Media Playback."
2010
- msgstr ""
2011
- "Establece la posición de barra de control. La opción \"Flotante \" sólo funciona con Strobe "
2012
- "Media Playback."
2013
-
2014
- #: video-embed-thumbnail-generator.php:7177 video-embed-thumbnail-generator.php:7180
2015
- #, php-format
2016
- msgid "or %s to disable."
2017
- msgstr "o %s para desactivar."
2018
-
2019
- #: video-embed-thumbnail-generator.php:7179
2020
- #, php-format
2021
- msgid "or %s to disable. If this is set, it will override the watermark_link_to setting."
2022
- msgstr ""
2023
- "o %s para deshabilitar. Si se configura ésta, desactiva la configuración de enlace a en marca de "
2024
- "agua."
2025
-
2026
- #: video-embed-thumbnail-generator.php:7181
2027
- #, php-format
2028
- msgid ""
2029
- "changes text displayed in the embed code overlay in order to provide a custom method for "
2030
- "embedding a video or %s to disable."
2031
- msgstr ""
2032
- "Cambia el texto que aparece en la superposición de código de inserción con el fin de "
2033
- "proporcionar un método personalizado para incrustar un vídeo ó %s para desactivarlo."
2034
-
2035
- #: video-embed-thumbnail-generator.php:7182
2036
- msgid "turns the view count on or off."
2037
- msgstr "Enciende o apaga el conteo de vistas."
2038
-
2039
- #: video-embed-thumbnail-generator.php:7183
2040
- msgid "text that is displayed below the video (not subtitles or closed captioning)"
2041
- msgstr "texto que se muestra debajo del video (no subtítulos o capciones)"
2042
-
2043
- #: video-embed-thumbnail-generator.php:7184
2044
- msgid "Used for metadata only."
2045
- msgstr "Se utiliza sólo para metadatos."
2046
-
2047
- #: video-embed-thumbnail-generator.php:7185
2048
- msgid ""
2049
- "generates a link below the video to make it easier for users to save the video file to their "
2050
- "computers."
2051
- msgstr ""
2052
- "genera un enlace debajo del video para que sea más fácil para los usuarios guardar el archivo de "
2053
- "vídeo en sus ordenadores."
2054
-
2055
- #: video-embed-thumbnail-generator.php:7186
2056
- msgid "allow or disable right-clicking on the video player."
2057
- msgstr "permitir o deshabilitar el botón derecho sobre el reproductor de vídeo."
2058
-
2059
- #: video-embed-thumbnail-generator.php:7187
2060
- msgid "allow or disable responsive resizing."
2061
- msgstr "permitir o deshabilitar el cambio de tamaño responsivo."
2062
-
2063
- #: video-embed-thumbnail-generator.php:7188
2064
- msgid "specify the video resolution when the page loads."
2065
- msgstr "especifique la resolución del vídeo cuando la página carga."
2066
-
2067
- #: video-embed-thumbnail-generator.php:7190
2068
- msgid "These options will add a subtitle/caption track."
2069
- msgstr "Estas opciones añaden una pista para subtítulo/capción."
2070
-
2071
- #: video-embed-thumbnail-generator.php:7191
2072
- msgid "URL of the WebVTT file."
2073
- msgstr "URL del archivo WebVTT."
2074
-
2075
- #: video-embed-thumbnail-generator.php:7193
2076
- msgid "the track's two-character language code (en, fr, es, etc)"
2077
- msgstr "Idioma del Código de dos caracteres de la pista (in, fr, es, etc.)"
2078
-
2079
- #: video-embed-thumbnail-generator.php:7194
2080
- msgid "text that will be shown to the user when selecting the track."
2081
- msgstr "el texto que se mostrará al usuario cuando seleccione la pista."
2082
-
2083
- #: video-embed-thumbnail-generator.php:7195
2084
- msgid "track is enabled by default."
2085
- msgstr "la pista está habilitada por defecto."
2086
-
2087
- #: video-embed-thumbnail-generator.php:7197
2088
- msgid "These options will only affect Video.js playback"
2089
- msgstr "Estas opciones sólo afectan la reproducción de Video.js"
2090
-
2091
- #: video-embed-thumbnail-generator.php:7198 video-embed-thumbnail-generator.php:7207
2092
- #, php-format
2093
- msgid "Completely change the look of the video player. %sInstructions here."
2094
- msgstr "Cambiar completamente el aspecto del reproductor de vídeo. %sInstrucciones aquí."
2095
-
2096
- #: video-embed-thumbnail-generator.php:7200
2097
- msgid ""
2098
- "These options will only affect Flash playback in Strobe Media Playback video elements. They will "
2099
- "have no effect on other players."
2100
- msgstr ""
2101
- "Estas opciones sólo afectan la reproducción de Flash en elementos de vídeo Strobe Media "
2102
- "Playback. Ellas no tendrán ningún efecto sobre otros reproductores."
2103
-
2104
- #: video-embed-thumbnail-generator.php:7201
2105
- msgid "specify whether to autohide the control bar after a few seconds."
2106
- msgstr "Especificar si se oculta automáticamente la barra de control al cabo de unos segundos."
2107
-
2108
- #: video-embed-thumbnail-generator.php:7202
2109
- msgid "turns the big play button overlay in the middle of the video on or off."
2110
- msgstr "Enciende o apaga el overlay del botón jugar en el medio del video."
2111
-
2112
- #: video-embed-thumbnail-generator.php:7203
2113
- msgid "I honestly don't know what this is for."
2114
- msgstr "Sinceramente, no sé para qué es esto."
2115
-
2116
- #: video-embed-thumbnail-generator.php:7204
2117
- msgid ""
2118
- "If the video display size isn't the same as the video file, this determines how the video will "
2119
- "be scaled."
2120
- msgstr ""
2121
- "Si el tamaño de la pantalla de vídeo no es el mismo que el archivo de vídeo, esto determina cómo "
2122
- "se escalará el video."
2123
-
2124
- #: video-embed-thumbnail-generator.php:7205
2125
- msgid "#rrggbb"
2126
- msgstr "# rrggbb"
2127
-
2128
- #: video-embed-thumbnail-generator.php:7205
2129
- msgid "set the background color to whatever hex code you want."
2130
- msgstr "establezca el color de fondo alo código hex que desee."
2131
-
2132
- #: video-embed-thumbnail-generator.php:7206
2133
- msgid "Lets you specify all these flashvars in an XML file."
2134
- msgstr "Permite especificar todos estos flashvars en un archivo XML."
2135
-
2136
- #: video-embed-thumbnail-generator.php:7209
2137
- msgid ""
2138
- "These options are available for video galleries (options work the same as standard WordPress "
2139
- "image galleries)"
2140
- msgstr ""
2141
- "Estas opciones están disponibles para las galerías de vídeo (las opciones funcionan igual que "
2142
- "las galerías de imágenes de WordPress estándar)"
2143
-
2144
- #: video-embed-thumbnail-generator.php:7210
2145
- msgid "turns on the gallery"
2146
- msgstr "Enciende la galería"
2147
-
2148
- #: video-embed-thumbnail-generator.php:7211
2149
- msgid "width in pixels to display gallery thumbnails"
2150
- msgstr "anchoen píxeles para mostrar imágenes en miniatura de la galería"
2151
-
2152
- #: video-embed-thumbnail-generator.php:7212
2153
- msgid "comma separated video attachment IDs. Excludes the videos from the gallery."
2154
- msgstr "IDs de adjuntos de vídeo separados por comas. Excluye los vídeos de la galería."
2155
-
2156
- #: video-embed-thumbnail-generator.php:7213
2157
- msgid ""
2158
- "comma separated video attachment IDs. Includes only these videos in the gallery. Please note "
2159
- "that include and exclude cannot be used together."
2160
- msgstr ""
2161
- "IDs de adjuntos de vídeo separados por comas. Incluye sólo estos videos en la galería. Tenga en "
2162
- "cuenta que incluir y excluir no se pueden utilizar juntos."
2163
-
2164
- #: video-embed-thumbnail-generator.php:7214
2165
- msgid "criteria for sorting the gallery"
2166
- msgstr "Criterios para clasificar la galería"
2167
-
2168
- #: video-embed-thumbnail-generator.php:7215
2169
- msgid "sort order"
2170
- msgstr "Orden de la clasificación"
2171
-
2172
- #: video-embed-thumbnail-generator.php:7216
2173
- msgid "post ID to display a gallery made up of videos associated with a different post."
2174
- msgstr ""
2175
- "ID del mensaje para mostrar una galería compuesta por vídeos asociados a una publicación "
2176
- "diferente."
2177
-
2178
- #: video-embed-thumbnail-generator.php:7217
2179
- msgid ""
2180
- "either close the pop-up or start playing the next video when the current video finishes playing."
2181
- msgstr ""
2182
- "Ya sea cerrar el pop-up o empezar a reproducir el siguiente video cuando el vídeo actual termine "
2183
- "de reproducirse."
2184
-
2185
- #: video-embed-thumbnail-generator.php:7218
2186
- #, php-format
2187
- msgid "or %s to disable pagination. Number of video thumbnails to show on each gallery page."
2188
- msgstr ""
2189
- "o %s para deshabilitar la paginación. Número de miniaturas de vídeo a mostrar en cada página de "
2190
- "la galería."
2191
-
2192
- #: video-embed-thumbnail-generator.php:7219
2193
- msgid "display the title overlay on gallery thumbnails."
2194
- msgstr "muestra el título sobrepuesto en las miniaturas de las galerías."
2195
-
2196
- #~ msgid "Videos per gallery page:"
2197
- #~ msgstr "Vídeos por página de la galería:"
2198
-
2199
- #~ msgid "-1 disables video gallery pagination and shows all gallery thumbnails on one page"
2200
- #~ msgstr ""
2201
- #~ "-1 deshabilita la paginación en la galería de video y muestra todas las miniaturas de la "
2202
- #~ "galería en una página"
2203
-
2204
- #~ msgid "Wait"
2205
- #~ msgstr "Espere"
2206
-
2207
- #~ msgid "Embed:"
2208
- #~ msgstr "Incrustar:"
2209
-
2210
- #~ msgid "Play Start"
2211
- #~ msgstr "Iniciar reproducción"
2212
-
2213
- #~ msgid "Complete View"
2214
- #~ msgstr "Vista completa"
2215
-
2216
- #~ msgid "%1$s not found at %2$s"
2217
- #~ msgstr "%1$s no encontrado en %2$s"
2218
-
2219
- #~ msgid "Update"
2220
- #~ msgstr "Actualizar"
2221
-
2222
- #~ msgid "Encode selected"
2223
- #~ msgstr "Codificar los seleccionados"
2224
-
2225
- #~ msgid "Order"
2226
- #~ msgstr "Orden"
2227
-
2228
- #~ msgid "User"
2229
- #~ msgstr "Usuario"
2230
-
2231
- #~ msgid "Thumbnail"
2232
- #~ msgstr "Miniatura"
2233
-
2234
- #~ msgid "File"
2235
- #~ msgstr "Archivo"
2236
-
2237
- #~ msgid "Formats"
2238
- #~ msgstr "Formatos"
2239
-
2240
- #~ msgid "Actions"
2241
- #~ msgstr "Acciones"
2242
-
2243
- #~ msgid "Site"
2244
- #~ msgstr "Sitio"
2245
-
2246
- #~ msgid "Video Encode Queue"
2247
- #~ msgstr "Cola para codificación de video"
2248
-
2249
- #~ msgid "Network Video Encode Queue"
2250
- #~ msgstr "Cola para codificación de video en red"
2251
-
2252
- #~ msgid "Video Embed & Thumbnail Generator"
2253
- #~ msgstr "Video Embed & Thumbnail Generator "
2254
-
2255
- #~ msgid "%s settings tab."
2256
- #~ msgstr "%s pestaña de configuración."
2257
-
2258
- #~ msgid "%s Settings"
2259
- #~ msgstr "Configuración %s"
2260
-
2261
- #~ msgid "Automatically resize videos:"
2262
- #~ msgstr "Cambio de tamaño automático vídeos:"
2263
-
2264
- #~ msgid "Max gallery video dimensions:"
2265
- #~ msgstr "Dimensiones máximas de galería de vídeo:"
2266
-
2267
- #~ msgid "Gallery thumbnail width:"
2268
- #~ msgstr "Ancho Galería de miniaturas:"
2269
-
2270
- #~ msgid "Gallery playback end action:"
2271
- #~ msgstr "Acción final de la reproducción de la Galería:"
2272
-
2273
- #~ msgid "Loop:"
2274
- #~ msgstr "Repetir:"
2275
-
2276
- #~ msgid "Skin class:"
2277
- #~ msgstr "Clase de la máscara:"
2278
-
2279
- #~ msgid "Choose video resolution automatically based on player size."
2280
- #~ msgstr "Selecciona automáticamente la resolución del vídeo basado en el tamaño del reproductor."
2281
-
2282
- #~ msgid "%d%%"
2283
- #~ msgstr "%d%%"
2284
-
2285
- #~ msgid ""
2286
- #~ "Controls how much of a video to load before the user starts playback. Mobile browsers never "
2287
- #~ "preload any video information. Selecting \"metadata\" will load the height and width and "
2288
- #~ "format information along with a few seconds of the video in some desktop browsers. \"Auto\" "
2289
- #~ "will preload nearly a minute of video in most desktop browsers. \"None\" will prevent all "
2290
- #~ "data from preloading."
2291
- #~ msgstr ""
2292
- #~ "Controla la cantidad de un vídeo a cargar antes de que el usuario inicie la reproducción. Los "
2293
- #~ "navegadores móviles nunca precargan información de vídeo. Seleccionar \"metadata\" cargará la "
2294
- #~ "altura y la anchura y la información de formato, junto con unos pocos segundos de vídeo en "
2295
- #~ "algunos navegadores de escritorio. \"Auto\" precarga casi un minuto de vídeo en la mayoría de "
2296
- #~ "los navegadores de escritorio. \"No\" evitará que todos los datos se precarguen."
2297
-
2298
- #~ msgid "Enable Open Graph video tags"
2299
- #~ msgstr "Habilitar etiquetas de video Open Graph"
2300
-
2301
- #~ msgid "Set all as featured"
2302
- #~ msgstr "Establece todas como destacadas"
2303
-
2304
- #~ msgid ""
2305
- #~ "If you have FFMPEG/LIBAV and the proper libraries installed, you can choose to replace your "
2306
- #~ "uploaded video with your preferred format, and also transcode into as many as six additional "
2307
- #~ "formats depending on the resolution of your original source. Different browsers have "
2308
- #~ "different playback capabilities. Most desktop browsers can play H.264, and all modern mobile "
2309
- #~ "devices can play at least 360p H.264. If you create multiple H.264 resolutions, the highest "
2310
- #~ "resolution supported by the device will be served up automatically. The plugin will not "
2311
- #~ "upconvert your video, so if you upload a 720p video, it will not waste your time creating a "
2312
- #~ "1080p version. There was a time when it seemed like a good idea to provide OGV or WEBM for "
2313
- #~ "some desktop browsers, but even Firefox allows H.264 playback on Windows now. I no longer "
2314
- #~ "recommend encoding OGV or WEBM unless you expect a large number of no-Flash sticklers "
2315
- #~ "visiting your site."
2316
- #~ msgstr ""
2317
- #~ "Si tiene FFMPEG/LIBAV y las bibliotecas adecuadas instaladas, puede optar por reemplazar su "
2318
- #~ "vídeo subido con un video de H.264, y también transcodificar en un máximo de cinco formatos "
2319
- #~ "adicionales dependiendo de la resolución de su fuente original. Diferentes navegadores tienen "
2320
- #~ "diferentes capacidades de reproducción. La mayoría de los navegadores de escritorio puede "
2321
- #~ "reproducir H.264, y todos los dispositivos móviles modernos pueden reproducir al menos 480p "
2322
- #~ "H.264. Si crea varias resoluciones H.264, la resolución más alta admitida por el dispositivo "
2323
- #~ "se servirá de forma automática. El plugin no convierte el vídeo, por lo que si sube un video "
2324
- #~ "de 720p, no va a perder el tiempo creando una versión 1080p. Hubo un momento en que parecía "
2325
- #~ "como una buena idea proporcionar OGV o WEBM para algunos navegadores de escritorio, pero "
2326
- #~ "incluso Firefox permite la reproducción de H.264 en Windows ahora. Ya no recomiendo codificar "
2327
- #~ "OGV o WEBM a menos que usted espera un gran número de rigoristas no-Flash visitando su sitio."
2328
-
2329
- #~ msgid ""
2330
- #~ "(iPhone 4s+, iPad 2+, modern Android, Windows Phone 8, Chrome, Safari, IE 9+, Firefox Windows)"
2331
- #~ msgstr ""
2332
- #~ "(IPhone 4s +, iPad 2 +, Android moderno, Windows Phone 8, Chrome, Safari, IE 9 +, Firefox "
2333
- #~ "Windows)"
2334
-
2335
- #~ msgid "(iPhone 4+, iPad, most Android, Chrome, Safari, IE 9+, Firefox Windows)"
2336
- #~ msgstr "( iPhone 4 +, iPad, casi todos los Android, Chrome, Safari, IE 9 +, Firefox Windows)"
2337
-
2338
- #~ msgid "profile"
2339
- #~ msgstr "perfil"
2340
-
2341
- #~ msgid "level"
2342
- #~ msgstr "nivel"
2343
-
2344
- #~ msgid "Enable legacy FFMPEG parameters."
2345
- #~ msgstr "Habilitar parámetros FFMPEG heredados."
2346
-
2347
- #~ msgid "threads"
2348
- #~ msgstr "hilos"
2349
-
2350
- #~ msgid "Run"
2351
- #~ msgstr "Ejecutar"
2352
-
2353
- #~ msgid "You must enter a value for the maximum gallery video height."
2354
- #~ msgstr "Debe ingresar un valor para la altura máxima de la galería de vídeo."
2355
-
2356
- #~ msgid "%1$s Starts, %2$s Complete Views"
2357
- #~ msgstr "%1$s Comenzadas, %2$s Reproducciones completas"
2358
-
2359
- #~ msgid "Track"
2360
- #~ msgstr "Pista"
2361
-
2362
- #~ msgid "Insert"
2363
- #~ msgstr "Insertar"
2364
-
2365
- #~ msgid "thumbnail"
2366
- #~ msgstr "miniatura"
2367
-
2368
- #~ msgid "Embed Video from URL"
2369
- #~ msgstr "Incrustar el vídeo desde la URL"
2370
-
2371
- #~ msgid "Sample Video"
2372
- #~ msgstr "Muestra de video"
2373
-
2374
- #~ msgid "FPS:"
2375
- #~ msgstr "FPS:"
2376
-
2377
- #~ msgid "let the plugin select the best resolution for the size of the player."
2378
- #~ msgstr "dejar que el plugin seleccione la mejor resolución según el tamaño del reproductor."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Video Embed & Thumbnail Generator ===
2
  Contributors: kylegilman
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=kylegilman@gmail.com&item_name=Video%20Embed%20And%20Thumbnail%20Generator%20Plugin%20Donation
4
- Tags: video, video player, video gallery, html5, shortcode, thumbnail, video thumbnail, preview, poster, ffmpeg, libav, embed, oembed, mobile, webm, ogg, h.264, h264, vp9, responsive, mp4, jwplayer, resolution
5
- Requires at least: 3.5
6
- Tested up to: 4.3
7
- Stable tag: 4.5.5
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -14,20 +14,18 @@ Generates thumbnails, encodes HTML5-compliant videos, and embeds locally hosted
14
 
15
  = A plugin to make embedding videos, generating thumbnails, and encoding HTML5-compatible files a little bit easier. =
16
 
17
- This is probably the last completely free major release. Some advanced features will be converted to premium add-ons in the future. More info in the <a href="https://wordpress.org/support/plugin/video-embed-thumbnail-generator">support forum</a>.
18
 
19
  This plugin adds several fields to any video uploaded to the WordPress Media Library. Just choose a few options, make thumbnails, click "Insert into Post" and you'll get a shortcode in the post editor that will embed a flexible, responsive HTML5 video player with Flash fallback for unsupported browsers.
20
 
21
  You have the option to use a few different video players:
22
 
23
- * Video.js
24
  * The WordPress default player using MediaElement.js, which was introduced in WordPress version 3.6
25
- * JW Player (if <a href="http://wordpress.org/plugins/jw-player-plugin-for-wordpress/">their plugin</a> is installed)
26
- * Adobe's Strobe Media Playback Flash player.
27
 
28
- <em>The Strobe Media Playback option hasn't been updated since 2011 and is not recommended, but I'm keeping it around for longtime users of this plugin who don't want to change. Most features of the plugin will work when using Strobe Media Playback, but new features will not be tested with it. Selecting Strobe Media Playback will default to a Flash video player if you're using a Flash-compatible file (flv, f4v, mp4, mov, or m4v). Otherwise it will use the Video.js player as a fallback.</em>
29
-
30
- No matter which player you use, the video will responsively resize to fit the container it's in. There is no need to use FitVids.js and in fact FitVids.js will break playback for some players. If you provide multiple H.264 resolutions, the Video.js player can automatically select the one closest to the size of the player and provide a button for users to select the resolution manually. Because the player uses native controls on mobile devices, the manual resolution button is only available on desktop browsers.
31
 
32
  You can also use the plugin to create a popup video gallery. The shortcode uses options similar to the WordPress image gallery shortcode. In its simplest form use the code `[KGVID gallery="true"]` to create a gallery of all videos attached to the post. Thumbnail size and video popup size can be set on the plugin settings page or in the shortcode. To make a custom gallery that includes videos that aren't attached to the current post you'll need to determine the video's ID, which is shown under the Video Stats section when viewing the attachment. Switch the "insert" option from "Single Video" to "Video Gallery" and you'll get a number of additional options (all of which are optional). Add a comma-separated list of video IDs in the "Include" field to create a gallery manually. Note: the "Create Gallery" section of the Add Media window is a built-in WordPress function and is only for making image galleries.
33
 
@@ -39,11 +37,13 @@ After you select a thumbnail it will be registered in the Wordpress Media Librar
39
 
40
  In the plugin settings you can set the default maximum video width and height based on the dimensions of your particular template and those values will be filled in when you open the window. If you generate thumbnails, the video display dimensions will be adjusted automatically to match the size and aspect ratio of the video file. You can make further adjustments if you want. There are options to always fill the width of the template or to always set videos to the maximum width setting regardless of their resolution.
41
 
 
 
42
  You can add subtitle and caption tracks by choosing properly formatted WebVTT files from the media library or entering a URL directly. Enter the two-letter language code and the label text that will be shown to users. Enabling the "default" option will turn the text track on when the page loads. The WordPress default player does not differentiate between captions and subtitles, but Video.js will show a different icon depending on the selection.
43
 
44
  I highly recommend using <a href="http://handbrake.fr/">Handbrake</a> to make a file with H.264 video and AAC audio in an MP4 container before uploading. If you're encoding with Handbrake make sure that "Web Optimized" is checked. Using Apple's Compressor, the "Streaming" setting should be "Fast Start" (not Fast Start - Compressed Header).
45
 
46
- The plugin can use FFMPEG or LIBAV to encode videos and make thumbnails if you have one of them installed on your server. You can choose to generate thumbnails and additional video formats automatically whenever a new video is uploaded to the media library, and there are buttons to generate thumbnails and additional video formats for every video already in the media library.
47
 
48
  By default the plugin looks for FFMPEG in `/usr/local/bin` but if the application is installed in a different place on your server, you can point it to the correct place in the plugin settings. Users running WordPress on Windows servers should try using Linux-style paths (with forward slashes instead of backslashes and a forward slash `/` instead of `C:\`). Multisite Super Admins must set the FFMPEG path in the Network settings page which will enable FFMPEG throughout the network.
49
 
@@ -69,6 +69,8 @@ If you enable oEmbed provider data in the plugin settings, the URL of a post wit
69
 
70
  `[KGVID]http://www.kylegilman.net/wp-content/uploads/2006/09/Reel-2012-05-15-720.mp4[/KGVID]`
71
 
 
 
72
  = Translations included: =
73
 
74
  * Español por Andrew Kurtis de <a href="http://www.webhostinghub.com/">WebHostingHub</a>.
@@ -77,7 +79,7 @@ If you enable oEmbed provider data in the plugin settings, the URL of a post wit
77
 
78
  I'm not really a software developer. I'm just a film editor with some time on his hands who wanted to post video for clients and wasn't happy with the current state of any available software. But I want to really make this thing work, so please help me out by posting your feedback on <a href="https://github.com/kylegilman/video-embed-thumbnail-generator/issues?state=open">Github</a>.
79
 
80
- = If you want to further modify the way the video player works, you can add the following options inside the `[KGVID]` tag. These will override anything you've set in the plugin settings or attachment details. If the plugin is installed on your site, this information is also available in the post edit help screen. =
81
 
82
  * `id="xxx"` video attachment ID (instead of using a URL).
83
  * `videos="x"` number of attached videos to display if no URL or ID is given.
@@ -107,6 +109,8 @@ I'm not really a software developer. I'm just a film editor with some time on hi
107
  * `right_click="true/false"` allow or disable right-clicking on the video player.
108
  * `resize="true/false"` allow or disable responsive resizing.
109
  * `auto_res="automatic/highest/lowest"` specify the video resolution when the page loads.
 
 
110
 
111
  = These options will add a subtitle/caption track =
112
 
@@ -119,6 +123,7 @@ I'm not really a software developer. I'm just a film editor with some time on hi
119
  = These options will only affect Video.js playback =
120
 
121
  * `skin="example-css-class"` Completely change the look of the video player. <a href="http://designer.videojs.com/">Video.js provides a custom skin designer here.</a>
 
122
 
123
  = These options will only affect Flash playback in Strobe Media Playback video elements. They will have no effect on other players. =
124
 
@@ -231,6 +236,38 @@ Enter the username & password in the plugin settings "FFMPEG Settings" tab, or u
231
 
232
  == Changelog ==
233
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  = 4.5.5 - August 20, 2015 =
235
  * Fixed a number of potential infinite loops and other recursion issues related to longstanding WordPress bug <a href='https://core.trac.wordpress.org/ticket/17817'>#17817</a>.
236
  * Changed video player names with spaces (WordPress Default, JW Player) to one word camel case for JavaScript functions (WordPressDefault, JWPlayer).
@@ -417,323 +454,16 @@ Enter the username & password in the plugin settings "FFMPEG Settings" tab, or u
417
  * Fixed several user capability related bugs related to users who were not assigned any roles and capabilities that were not assigned to any roles.
418
  * Changed video title overlay z-index to 103 to avoid floating over other elements.
419
 
420
- = 4.2.9 - November 15, 2013 =
421
- * Fixed bug that interfered with database queries that do not have post_meta (The Events Calendar revealed the bug, but it likely had an effect on other plugins).
422
- * Fixed bug that assigned auto-encoded videos to nobody.
423
- * Restored process to set featured image for video attachments when thumbnails are assigned.
424
-
425
- = 4.2.8 - November 11, 2013 =
426
- * Updated Video.js to version 4.3.0.
427
- * Fixed iframe embedded video auto-sizing bug.
428
- * Improved sizing of videos using the WordPress Default player.
429
- * Removed shortcode text from RSS feeds.
430
- * Now checking for cross-origin when making thumbnails. If video files are hosted on a different domain FFMPEG will make thumbnails to avoid cross-origin errors when saving canvas elements.
431
- * Fixed bug that assigned auto-generated thumbnails to nobody.
432
- * Fixed bug that would cause divide by zero errors when generating thumbnails from .mpg videos that had already encoded an alternate format with FFMPEG.
433
-
434
- = 4.2.7 - October 24, 2013 =
435
- * Fixed several video sizing issues.
436
- * Updated Video.js to version 4.2.2.
437
- * No longer loading Video.js files when using the WordPress Default player.
438
- * Restored [/KGVID] closing tag to inserted gallery shortcodes to avoid confusion if more than one [KGVID] is in the post.
439
- * Changed Settings and Donate links on Installed Plugins admin page and fixed 404 error on network dashboards.
440
-
441
- = 4.2.6 - October 19, 2013 =
442
- * Fixed bug that broke playback in some cases when using the shortcode without a URL.
443
- * Fixed bug that ignored width and height saved in the attachment meta if width and height were not set in the shortcode.
444
- * Fixed bug that broke WordPress Default player when embedding M4V files.
445
- * Removed line breaks from generated code to avoid adding extra line breaks in the rendered video in some situations where wpautop is run after the code is created.
446
-
447
- = 4.2.5 - October 12, 2013 =
448
- * Fixed bug that disabled FFMPEG when other plugin settings were changed.
449
-
450
- = 4.2.4 - October 12, 2013 =
451
- * Fixed bug that ignored "Enlarge lower resolution videos to max width" plugin setting after thumbnails were generated.
452
- * Fixed bug that caused in-browser thumbnail generation to fail after switching between several attachments in Chrome.
453
- * Fixed bug that prevented fallback to FFMPEG/LIBAV when the video format was not compatible with the browser.
454
- * Fixed bug that lost disabled plugin settings if the "Save Changes" button was pressed.
455
- * Fixed bug that fixed moov atom incorrectly when using qt-faststart.
456
- * Added verification of the "Path to applications folder on server" setting to strip extra slashes and unnecessary subfolders.
457
- * Added "Fixing moov atom for streaming" section to FFMPEG test output.
458
- * Added legacy FFMPEG libx264 flags manually so we don't have to rely on finding vpre files.
459
- * Now multiplying H.264 level flags by 10 for better compatibility.
460
- * Removed unnecessary & inconsistent check for existing thumbnail files on attachment pages.
461
-
462
- = 4.2.3 - October 9, 2013 =
463
- * Fixed bug that caused encoding on Windows servers to hang and not show progress.
464
- * Fixed bug that only disabled right-clicking when using the Video.js player.
465
- * Fixed bug that prevented encoding videos from the External URL tab.
466
- * Fixed bug that showed an empty "Replace original with H.264" checkbox if the filename changed.
467
- * Better error reporting when encoding or auto thumbnail creation fails.
468
- * Modified method for determining video's dimensions from FFMPEG/LIBAV output. This will cause videos with single-digit resolutions to fail.
469
- * Adjusted video gallery CSS.
470
-
471
- = 4.2.2 - October 7, 2013 =
472
- * Fixed bug that was setting the global $content_width to 2048 on every page.
473
-
474
- = 4.2.1 - October 6, 2013 =
475
- * Featured images are now set for the post currently being edited, which does not have to be the video's parent.
476
- * Rounded offset values when generating thumbnails with FFMPEG and LIBAV for backwards compatibility with older versions of FFMPEG.
477
- * Added check to ensure server supports ImageMagick or GD libraries necessary to save thumbnails created in the browser.
478
- * Added check to avoid saving thumbnails twice.
479
- * Fixed saving disabled plugin settings.
480
- * Changed FFMPEG encoding string to double quotes for Windows compatibility.
481
-
482
- = 4.2 - October 5, 2013 =
483
- * THUMBNAILS FOR EVERYBODY! Added in-browser thumbnail generation. Any video in the media library that can be played natively in the current browser can now be used to generate thumbnails without requiring special software on your server.
484
- * Updated shortcode to support the simplest possible implementation: [KGVID]. Without any additional information, it will automatically find and display all videos attached to the post.
485
- * Added "id" and "videos" attributes to shortcode to display specific video IDs or show a specific number of attached videos.
486
- * If a video thumbnail is set, the video will now use its thumbnail as an icon in the WordPress admin area instead of the generic "video" icon.
487
- * To avoid clutter, additional video formats encoded by the plugin are now hidden from lists of media, unless "Video" is specifically selected.
488
- * When a master video is deleted and additional video formats are not deleted, the next highest quality format automatically becomes the master video.
489
- * Updated Video.js to version 4.2.1, updated the included skin to work with it, and removed the unused image video-js.png.
490
- * Added option to use the WordPress default video player introduced in WordPress version 3.6.
491
- * Added buttons to choose thumbnails, end of video image, and watermark from the media library.
492
- * Added option to add Open Graph tags for posting videos on Facebook. However, for the many Facebook users who browse with https, your own videos must be served via https in order to work.
493
- * Added options to automatically generate a thumbnail and encode videos to multiple formats as soon as they are uploaded (FFMPEG/LIBAV only).
494
- * Added option to disable responsive video resizing.
495
- * Added options to restrict thumbnail making and video encoding to particular user roles.
496
- * Added option to enter username and password to give FFMPEG/LIBAV access to .htaccess protected videos.
497
- * Added option to disable right-clicking on videos.
498
- * Added option to replace original video file with an H.264 video of the same resolution.
499
- * Added advanced FFMPEG/LIBAV encoding options. New options include choice between Constant Rate Factor and Average Bit Rate, H.264 profiles and levels, audio bit rate, disabling `nice` on Linux, and the ability to encode with more than one thread.
500
- * Added `-movflags faststart` option available in newer versions of FFMPEG/LIBAV, eliminating the need for qt-faststart or MP4Box.
501
- * Added a test encoding output on the settings page for easier troubleshooting.
502
- * Split plugin settings page in to two tabs.
503
- * Fixed saving plugin settings when multiple settings are changed rapidly.
504
- * No longer starting video encodes using `nohup` command on Linux servers.
505
- * FFMPEG vpre flag switched from slow to fast.
506
- * Enabled actual support for encoding with libfdk_aac, and the experimental built-in aac encoder as a last resort.
507
- * Fixed cases where the encode queue would not advance if an unexpected error happened.
508
- * Fixed encoding library messages so the errors are saved to the encode queue and don't disappear immediately.
509
- * Changed endOfVideoOverlay and endOfVideoOverlaySame options to lowercase.
510
- * Revised method for determining if a video URL refers to an attachment in the WordPress database to account for differences between urls using http and https and filenames that slip into the database with spaces intact.
511
-
512
- = 4.1.5 - June 30, 2013 =
513
- * Updated Video.js to version 4.1.0
514
- * Restored code to show captions and download links in gallery pop-ups.
515
- * Fixed conflict with fitVids.js by disabling the function whenever a video is embedded with the KGVID shortcode. fitVids.js is not compatible with the Video.js player and is not necessary to make videos responsive when you are using this plugin.
516
- * Increased bitrate of encoded videos.
517
- * Increased play button circle thickness and triangle size.
518
- * Made video title overlay background slightly transparent and the title width fluid through CSS rather than JS.
519
-
520
- = 4.1.4 - May 30, 2013 =
521
- * Updated Video.js to version 4.0.3 which includes fixes when hitting esc to exit fullscreen that this plugin had previously dealt with through additional JavaScript.
522
- * Restored ability to use percentages for video width (I didn't even know you could do this before and I apologize for breaking it arbitrarily).
523
- * Fixed Video.js play button triangle vertical alignment problem on many themes (where were all the complaints on this one?) and tweaked the :hover settings.
524
- * Moved play button overlay behind gallery thumbnail title if they happen to overlap.
525
- * Changed WordPress user capability required to access plugin settings menu page from 'administrator' to 'manage_options' to allow access to multisite Super Admins and anyone else who has the manage_options capability.
526
-
527
- = 4.1.3 - May 25, 2013 =
528
- * Updated Video.js to version 4.0.2 which is supposed to solve IE play-button loading issues.
529
- * Added option to show image at end of video in Video.js player (similar to the feature already available in Strobe Media Playback).
530
- * Fixed bug that ignored `gallery_id` setting in gallery shortcodes and was preventing `gallery_include` setting for videos that are not children of the current post.
531
- * Brought download link into shortcode rather than old method of inserting it into the post as text below the shortcode.
532
- * Automatically adjust pop-up gallery window height to display captions, view counts, and download links.
533
- * Rolled back responsive video resize method. Only the width of the immediate container will be used to calculate the correct size.
534
- * For very small videos, Video.js controls are now selectively removed as the width drops below 260 pixels to prevent them from dropping outside of the video window.
535
-
536
- = 4.1.2 - May 23, 2013 =
537
- * Changed check for FFMPEG to use the H.264 sample video as input to avoid any PNG-related red herrings.
538
- * Added `-f mjpeg` to thumbnail-generating command to maintain compatibility with versions of FFMPEG that can't figure it out on their own.
539
-
540
- = 4.1.1 - May 21, 2013 =
541
- * Removed second argument from json_encode() which caused video setup & resizing features to fail when servers were running PHP 5.2.
542
-
543
- = 4.1 - May 19, 2013 =
544
- * Updated Video.js to version 4.0 and created a new skin that approximates the old one. Older versions of Video.js had some security holes, so this update is highly recommended.
545
- * Significantly reduced inline JavaScript generated by the plugin.
546
- * Fixed bug that disabled Strobe Media Playback player and caused "TypeError: Error #1034" messages, particularly in Internet Explorer.
547
- * Fixed bug that caused view count to be replaced by complete views when the end of the video is reached.
548
- * Fixed bug that disabled video encode status monitoring in media modal popup when the same video was already in the post edit window.
549
- * Fixed missing "document." in JavaScript when choosing thumbnails which prevented some users from properly selecting and saving generated thumbnails.
550
- * Fixed bug that displayed WordPress thumbnail-sized poster image if no poster URL was in shortcode.
551
- * Tweaked video resize method to support more kinds of themes.
552
- * Added ability to turn off watermark on individual videos by entering `watermark="false"` in the shortcode.
553
- * Added option to disable embedding on other websites.
554
- * Added option to allow videos to be placed next to each other on the page.
555
- * Added support for AAC library libfdk_aac.
556
- * Adjusted embedded video and gallery CSS to account for colored backgrounds.
557
- * Renamed "Poster image" plugin setting to "Default thumbnail"
558
- * Removed post meta box below post editing window until I can work out a way to generate them without disabling video encode status monitoring in media modal popup when the same video is already in the post edit window.
559
- * Replaced deprecated ereg PHP function with preg_match and used a more precise regular expression when determining the height and width of videos.
560
-
561
- = 4.0.3 - May 1, 2013 =
562
- * Fixed bug that caused video control text to display below videos on iPhones.
563
- * Changed method for saving video plays to the database. Now more secure and accurate.
564
-
565
- = 4.0.2 - April 25, 2013 =
566
- * Plugin settings are no longer re-saved to the database on every page load. Should speed things up a little.
567
- * Changed CSS to discourage theme styles from overriding embed code overlay styles.
568
-
569
- = 4.0.1 - April 23, 2013 =
570
- * Added options to display video title and embed code overlays on video player, and captions and view counts below videos.
571
- * Added option to filter your theme's video attachment page template to display the video instead of WordPress's default behavior of just showing the title of the video. For backwards compatibility retained old method of completely replacing the video attachment template with a video player.
572
- * Redesigned settings page to save using AJAX, and added a sample video player so changes are seen immediately.
573
- * Added validation to settings page to require maximum width & height values for embedded videos.
574
- * Added iframe method to embed your videos on other websites.
575
- * Additional video formats encoded by the plugin are now added to the WordPress database as video attachments. To avoid a Russian nesting doll scenario these child attachments do not have the fields for creating thumbnails and encoding additional formats.
576
- * Changed encoded H.264 extensions from .m4v to .mp4 to increase compatibility with WordPress 3.6's new video capabilities. Existing M4V files will still work.
577
- * Checks only one time for alternate video sources when videos are embedded from other servers. This should speed up page load times considerably.
578
- * Added ability to rotate and replace the original file for videos recorded vertically on cell phones.
579
- * Added post meta box to posts with embedded videos that lists alternate formats found for each video.
580
- * Added option to set a post's featured image to the most recently generated thumbnail, and a button to set all previously generated thumbnails as featured images.
581
- * Added option to save generated thumbnails as children of either the video or the post the video is attached to, and a button to convert all thumbnails to the chosen hierarchy.
582
- * Added option to delete associated thumbnails and additional encoded video formats when original video attachment is deleted.
583
- * Added backwards compatibility for WordPress versions 3.2 and above.
584
- * If Strobe Media Playback player is selected, the Video.js player is used in situations where Flash doesn't work (webm, ogg playback) instead of the ugly default browser players.
585
- * Added watermark, view counts, volume attribute, and Google Analytics event tracking when using Strobe Media Playback player.
586
- * Added alignment option to center or right-justify videos.
587
- * Revised video player setup to properly resize the player if the containing DIV is smaller than the video, and resize again if the window size changes (or orientation changes on Android).
588
- * No matter which player is selected, iOS now displays the built-in controls so AirPlay works.
589
- * Added schema.org videoobject markup for improved SEO.
590
- * Fixed FLV embedding with Video.js player and improved selection of embedded formats for Strobe Media Playback.
591
- * Adjusted video gallery CSS and added a play button overlay to gallery thumbnails.
592
- * Adjusted watermark and Video.js play button CSS so the overlays don't overwhelm small videos.
593
- * Set Video.js controls to fade out on autoplay and on iOS, without having to mouseover the video.
594
- * Fixed endless "loading" spinner shown at the end of videos in some browsers in Video.js player.
595
- * Clicking "Insert into post" immediately after upload without changing any options now inserts shortcode instead of just the title of the video.
596
- * Inserting shortcode without a thumbnail no longer attempts to save the nonexistent thumbnail. Thumbnail cleanup is handled better.
597
- * Fixed error message "array_key_exists() expects parameter 2 to be array" when shortcode didn't have attributes.
598
- * Escaped all shell commands for increased security.
599
- * Fixed bug that made "Encode" button disappear if all formats were checked.
600
- * Fixed missing argument for kgvid_clear_completed_queue() when scheduling cleanup.
601
-
602
- = 4.0 - April 22, 2013 =
603
- * Accidental release caused by programmer's incompetence.
604
-
605
- = 3.1.1 - March 5, 2013 =
606
- * Fixed missing ) in uninstall.php
607
-
608
- = 3.1 - January 30, 2013 =
609
- * Added video watermark overlay option. (Video.js only)
610
- * Changed front-end CSS file name to kgvid_styles.css and made it always available, not just when galleries are on the page.
611
- * Removed my watermark testing logo which was accidentally inserted above videos in version 3.0.3.
612
- * Added option to choose -b:v or legacy -b flags when encoding. Recent FFMPEG versions only accept -b:v.
613
- * Added automatic encode queue cleanup. Any completed entry older than a week will be removed.
614
- * Added deactivation hook to remove queue and scheduled queue cleanup on deactivation.
615
- * Added uninstall.php to remove settings from the database on uninstall.
616
- * Disabled "Delete Permanently" link while encoding is canceling.
617
- * Checked for escapeshellcmd. If it's disabled on the server, encoding can't start.
618
- * Fixed insert title and download link checkboxes. They will actually insert something now.
619
- * Changed method for determining if a video has been played or paused and played again, for counting purposes.
620
- * Fixed check for mime type when generating H.264 video encode checkboxes to avoid showing options for QuickTime files that are higher resolution than the original video.
621
-
622
- = 3.0.3 - January 29, 2013 =
623
- * Fixed bug that added a blank line to JavaScript embedded in the page if "volume" wasn't set in the short code (Video.js only).
624
- * If video player is set larger than the containing DIV and the player size is reduced to fit, the height is now rounded to the nearest integer.
625
-
626
- = 3.0.2 - January 24, 2013 =
627
- * Fixed bug that permanently disabled buttons on the Embed Video from URL tab.
628
- * Disabled "Delete Permanently" option for encoded files found on other servers.
629
- * Reduced the jQuery UI Dialog css and put it in its own scope to avoid conflicts with existing jQuery UI Dialog themes.
630
- * Cleaned out some leftover code.
631
-
632
- = 3.0.1 - January 24, 2013 =
633
- * Fixed bug that inserted empty options into gallery shortcodes.
634
-
635
- = 3.0 - January 23, 2013 =
636
- * Updated to provide compatibility with several media changes in WordPress 3.5. With this version, thumbnail generating & video encoding will only work in WordPress 3.5 and above.
637
- * Added popup video gallery.
638
- * Changed shortcode tag to [KGVID]. Retained [FMP] for backwards compatibility.
639
- * Added Video.js player option. Older Strobe Media Playback Flash player is still included for backwards compatibility, but Video.js is highly recommended.
640
- * Added video play counting which is recorded to the WordPress database (Video.js only).
641
- * Added Google Analytics event tracking for video plays (Video.js only)
642
- * Added ability to encode multiple H.264 video resolutions.
643
- * Added video encoding queue.
644
- * Added qt-faststart and MP4Box processing to MP4/M4V H.264 videos encoded by the plugin to allow playback of videos as they download.
645
- * Added option to change default number of thumbnails generated by the plugin.
646
- * Changed any https FFMPEG input to http.
647
- * Thumbnail images are now added to the WordPress database as soon as they are selected.
648
- * Added option to use LIBAV instead of FFMPEG for thumbnail generating and video encoding.
649
- * Added wmode parameter to fix Chrome z-index issue. (Strobe Media Playback only)
650
- * Improved swfobject.js script enqueuing method to prevent conflicts (Strobe Media Playback only)
651
- * Rewrote plugin settings to work with the WordPress plugin settings API.
652
- * Removed dropdown list for embedding alternate encoded formats of video. All formats are made available to the player and the browser chooses best compatible format.
653
- * Removed mdetect.php and removed forced downgrading of quality when on mobile devices. Mobile browsers now automatically choose best compatible format.
654
-
655
- = 2.0.6 - April 27, 2012 =
656
- * Removed swfobject.js from the plugin package. Now using the one included with WordPress. WordPress 3.3.2 contains a security fix for swfobject.js and the plugin will use the fixed version if you have upgraded WordPress (which is highly recommended).
657
- * Added setting to customize the formatting of titles inserted by the plugin.
658
- * Added settings to display a custom image when videos end instead of the first frame of the video (Flash only).
659
- * Fixed problem with embedded FLV files giving message "Argument Error - Invalid parameter passed to method" when loading poster images.
660
-
661
- = 2.0.5 - April 20, 2012 =
662
- * Fixed "Wrong datatype for second argument" error on line 339 and subsequent automatic replacement of original videos with Mobile/H.264 versions whether they exist or not.
663
-
664
- = 2.0.4 - April 19, 2012 =
665
- * Once again changed the process checking for FFMPEG installations. Should be universal now.
666
- * Added setting to turn on vpre flags for users with installed versions of FFMPEG old enough that libx264 requires vpre flags to operate.
667
- * Added setting to replace the video attachment template with a page containing only the code necessary to display the video. Makes embedding your hosted videos on other sites easier.
668
- * Fixed progress bar for older versions of FFMPEG.
669
- * Added Flash fallback when OGV or WEBM videos are embedded.
670
- * Removed restriction on number of thumbnails that can be generated at once and added a cancel button while generating thumbnails.
671
-
672
- = 2.0.3 - February 24, 2012 =
673
- * When working with file formats that can't be embedded (WMV, AVI, etc) the option to embed the original file will be disabled if Mobile/H.264, WEBM, or OGV files are found.
674
- * Changed encoding bitrate flag back to -b instead of -b:v to retain compatibility with older versions of FFMPEG.
675
- * Cosmetic changes in encoding progress bar.
676
- * No longer deleting encoded files if progress can't be properly established.
677
- * Added "nice" to the encode commond (not on Windows) to prevent FFMPEG from overusing system resources.
678
- * Updated plugin settings panel generation function to require "Administrator" role instead of deprecated capability number system.
679
-
680
- = 2.0.2 - February 21, 2012 =
681
- * Fixed check for FFMPEG again, to work with Windows.
682
-
683
- = 2.0.1 - February 21, 2012 =
684
- * Fixed check for FFMPEG again. Should be more universal.
685
-
686
- = 2.0 - February 20, 2012 =
687
- * Large rewrite to fix several security issues. Full server paths are no longer exposed in the Media Upload form, all AJAX calls are handled through wp_ajax, and nonces are checked.
688
- * Added video encoding progress bar on Linux servers.
689
- * Added button to cancel encoding.
690
- * Added option to encode 720p or 1080p H.264 videos.
691
- * Changed requirements for AAC encoding. Will work with libfaac or libvo-aacenc.
692
- * Improved error reporting to help diagnose problems.
693
- * Videos recorded on phones in portrait mode (tall and skinny) will not end up sideways if FFMPEG version .10 or later is installed.
694
- * Thumbnail generation process uses fancy jQuery animation.
695
- * Fixed check for FFMPEG. Should actually work in Windows now.
696
- * Fixed unenclosed generate, embed, submit, delete strings in kg_call_ffmpeg
697
-
698
- = 1.1 - January 8, 2012 =
699
- * Includes Strobe Media Playback files so Flash Player is now hosted locally, which allows skinning.
700
- * Added skin with new, more modern looking play button. Upgraders should check the plugin settings for more details.
701
- * Fixed "Insert into Post" button in "Embed from URL" tab when editor is in HTML view mode. Used to do nothing! Now does something.
702
- * Added option to override default Mobile/HTML5 encode formats for each video
703
- * Added check for FFMPEG. Generate & Encode buttons are disabled if FFMPEG isn't found.
704
-
705
- = 1.0.5 - November 6, 2011 =
706
- * Fixed "Embed from URL" thumbnail creation. Generated thumbnails don't disappear anymore.
707
-
708
- = 1.0.4 - November 4, 2011 =
709
- * More thorough check made for existing attachments before registering poster images with the Wordpress Media Library. Avoids registering duplicates or medium/small/thumb image sizes if they're used as poster image.
710
- * Added loop, autoplay, and controls options to HTML5 video elements.
711
- * When saving attachments, won't try to delete thumb_tmp directory if it doesn't exist.
712
-
713
- = 1.0.3 - October 27, 2011 =
714
- * Revised thumbnail cleanup to make sure temp files aren't deleted when generating thumbnails for more than one video at a time.
715
-
716
- = 1.0.2 - October 21, 2011 =
717
- * Fixed a shocking number of unenclosed stings in get_options() calls. Bad programming. Didn't affect functionality, but will stop generating errors.
718
- * Removed clumsy check for FFMPEG running. Was preventing encoding if ANY user on the server was running FFMPEG. Be wary of overusing your system resources though.
719
-
720
- = 1.0.1 - October 21, 2011 =
721
- * Quick fix to add mdetect.php to the plugin package from Wordpress
722
-
723
- = 1.0 - October 20, 2011 =
724
- * Huge re-write.
725
- * Integrated with Wordpress Media Library and added WEBM support.
726
- * Increased control over thumbnail generation.
727
- * Added tab to Insert Video dialog box for adding by URL (like the old version).
728
-
729
- = 0.2.1 - October 9, 2011 =
730
- * Check made to ensure iPhone/iPod/Android compatible encode video height is an even number when HTML5 video encodes are made.
731
-
732
- = 0.2 - January 18, 2011 =
733
- * First Release
734
 
735
  == Upgrade Notice ==
736
 
 
 
 
 
 
 
737
  = 4.5.2 =
738
  This is probably the last completely free major release. Some advanced features will be converted to premium add-ons in the future. More info in the support forum.
739
 
1
  === Video Embed & Thumbnail Generator ===
2
  Contributors: kylegilman
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=kylegilman@gmail.com&item_name=Video%20Embed%20And%20Thumbnail%20Generator%20Plugin%20Donation
4
+ Tags: video, video player, video gallery, html5, shortcode, thumbnail, video thumbnail, preview, poster, ffmpeg, libav, embed, oembed, mobile, webm, ogg, h.264, h264, vp9, responsive, mp4, jwplayer, resolution, analytics
5
+ Requires at least: 4.4
6
+ Tested up to: 4.5
7
+ Stable tag: 4.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
14
 
15
  = A plugin to make embedding videos, generating thumbnails, and encoding HTML5-compatible files a little bit easier. =
16
 
17
+ Still 100% free, but some advanced features will be converted to premium add-ons in the future. More info in the <a href="https://wordpress.org/support/topic/version-50-will-convert-some-free-features-to-paid-add-ons">support forum</a>.
18
 
19
  This plugin adds several fields to any video uploaded to the WordPress Media Library. Just choose a few options, make thumbnails, click "Insert into Post" and you'll get a shortcode in the post editor that will embed a flexible, responsive HTML5 video player with Flash fallback for unsupported browsers.
20
 
21
  You have the option to use a few different video players:
22
 
23
+ * Video.js (files are included with the plugin)
24
  * The WordPress default player using MediaElement.js, which was introduced in WordPress version 3.6
25
+ * JW Player 6 (if their old, discontinued plugin is already installed. This plugin does not work with JW Player 7 yet.)
26
+ * Adobe's Strobe Media Playback Flash player (deprecated)
27
 
28
+ No matter which player you use, the video will responsively resize to fit the container it's in. There is no need to use FitVids.js and in fact FitVids.js will break playback for some players. If you provide multiple H.264 resolutions, the plugin can automatically select the one closest to the size of the player or a resolution of your choice, and provide a button for users to select the resolution manually. If you have Google Analytics set up on your site, the plugin will automatically send Google Analytics Events when users start, reach 25%, 50%, 75%, and complete watching your videos.
 
 
29
 
30
  You can also use the plugin to create a popup video gallery. The shortcode uses options similar to the WordPress image gallery shortcode. In its simplest form use the code `[KGVID gallery="true"]` to create a gallery of all videos attached to the post. Thumbnail size and video popup size can be set on the plugin settings page or in the shortcode. To make a custom gallery that includes videos that aren't attached to the current post you'll need to determine the video's ID, which is shown under the Video Stats section when viewing the attachment. Switch the "insert" option from "Single Video" to "Video Gallery" and you'll get a number of additional options (all of which are optional). Add a comma-separated list of video IDs in the "Include" field to create a gallery manually. Note: the "Create Gallery" section of the Add Media window is a built-in WordPress function and is only for making image galleries.
31
 
37
 
38
  In the plugin settings you can set the default maximum video width and height based on the dimensions of your particular template and those values will be filled in when you open the window. If you generate thumbnails, the video display dimensions will be adjusted automatically to match the size and aspect ratio of the video file. You can make further adjustments if you want. There are options to always fill the width of the template or to always set videos to the maximum width setting regardless of their resolution.
39
 
40
+ If enabled in the plugin settings, Facebook, Twitter, and Schema.org video search engine metadata will be generated for your videos. If your site supports https, your videos can play directly in the Facebook timeline or on Twitter. Twitter requires whitelisting for each domain that provides player cards so you will be required to request whitelisting using the <a href="https://cards-dev.twitter.com/validator">Twitter Card Validator tool</a>. Once you've installed the plugin and enabled the Twitter Cards setting, go to the Twitter Card Validator, enter a secure URL from your site that has a video embedded using this plugin, click "Preview card" and you'll probably see a warning that your site isn't whitelisted. Request whitelisting and Twitter should approve you fairly quickly. Enabling the Facebook or Twitter metadata options will override Jetpack's corresponding metadata whenever a video is embedded on the page. However, your theme or SEO plugins might generate their own metadata that could conflict with this plugin's.
41
+
42
  You can add subtitle and caption tracks by choosing properly formatted WebVTT files from the media library or entering a URL directly. Enter the two-letter language code and the label text that will be shown to users. Enabling the "default" option will turn the text track on when the page loads. The WordPress default player does not differentiate between captions and subtitles, but Video.js will show a different icon depending on the selection.
43
 
44
  I highly recommend using <a href="http://handbrake.fr/">Handbrake</a> to make a file with H.264 video and AAC audio in an MP4 container before uploading. If you're encoding with Handbrake make sure that "Web Optimized" is checked. Using Apple's Compressor, the "Streaming" setting should be "Fast Start" (not Fast Start - Compressed Header).
45
 
46
+ The plugin can use FFMPEG or LIBAV to encode videos and make thumbnails if you have one of them installed on your server. You can choose to generate thumbnails and additional video formats automatically whenever a new video is uploaded to the media library, and there are buttons to generate thumbnails and additional video formats for every video already in the media library. If you want most videos to be re-encoded and replaced with a particular format but sometimes want to keep the original video, you can add the suffix '-noreplace' (awesomevid-noreplace.mp4) to your filename and the uploaded video will not be replaced. Other automatic formats will still encode.
47
 
48
  By default the plugin looks for FFMPEG in `/usr/local/bin` but if the application is installed in a different place on your server, you can point it to the correct place in the plugin settings. Users running WordPress on Windows servers should try using Linux-style paths (with forward slashes instead of backslashes and a forward slash `/` instead of `C:\`). Multisite Super Admins must set the FFMPEG path in the Network settings page which will enable FFMPEG throughout the network.
49
 
69
 
70
  `[KGVID]http://www.kylegilman.net/wp-content/uploads/2006/09/Reel-2012-05-15-720.mp4[/KGVID]`
71
 
72
+ <em>The JW Player 6 plugin has been removed from the WordPress plugin repository and JW Player 7 uses a very different system for embedding videos. JW Player 7 support is not available in this plugin yet. The Strobe Media Playback option hasn't been updated since 2011 and is not recommended, but I'm keeping it around for longtime users of this plugin who don't want to change. Most features of the plugin will work when using Strobe Media Playback, but new features will not be tested with it. Selecting Strobe Media Playback will default to a Flash video player if you're using a Flash-compatible file (flv, f4v, mp4, mov, or m4v). Otherwise it will use the Video.js player as a fallback.</em>
73
+
74
  = Translations included: =
75
 
76
  * Español por Andrew Kurtis de <a href="http://www.webhostinghub.com/">WebHostingHub</a>.
79
 
80
  I'm not really a software developer. I'm just a film editor with some time on his hands who wanted to post video for clients and wasn't happy with the current state of any available software. But I want to really make this thing work, so please help me out by posting your feedback on <a href="https://github.com/kylegilman/video-embed-thumbnail-generator/issues?state=open">Github</a>.
81
 
82
+ = If you want to further modify the way the video player works, you can add the following options inside the `[KGVID]` tag. These will override anything you've set in the plugin settings or attachment details. If the plugin is installed on your site, this documentation is also available in the post edit help screen. =
83
 
84
  * `id="xxx"` video attachment ID (instead of using a URL).
85
  * `videos="x"` number of attached videos to display if no URL or ID is given.
109
  * `right_click="true/false"` allow or disable right-clicking on the video player.
110
  * `resize="true/false"` allow or disable responsive resizing.
111
  * `auto_res="automatic/highest/lowest"` specify the video resolution when the page loads.
112
+ * `pixel_ratio="true/false"` account for high-density (retina) displays when choosing automatic video resolution.
113
+ * `schema="true/false"` allow or disable Schema.org search engine metadata.
114
 
115
  = These options will add a subtitle/caption track =
116
 
123
  = These options will only affect Video.js playback =
124
 
125
  * `skin="example-css-class"` Completely change the look of the video player. <a href="http://designer.videojs.com/">Video.js provides a custom skin designer here.</a>
126
+ * `nativecontrolsfortouch="true/false` enables or disables native controls on touchscreen devices. Native controls allow for streaming services like AirPlay and Chromecast, but don't always look as nice.
127
 
128
  = These options will only affect Flash playback in Strobe Media Playback video elements. They will have no effect on other players. =
129
 
236
 
237
  == Changelog ==
238
 
239
+ = 4.6 - April 29, 2016 =
240
+ * Still 100% free. More info in the <a href="https://wordpress.org/support/topic/version-50-will-convert-some-free-features-to-paid-add-ons">support forum</a>.
241
+ * Updated Video.js to version 5.5.3 which includes a revised skin.
242
+ * Added resolution switching for WordPress Default player.
243
+ * Added Twitter Player Cards.
244
+ * Added animated GIF video conversion.
245
+ * Added option to select a specific video resolution when the page first loads.
246
+ * Added option to ignore pixel ratios when calculating automatic resolution selection in order to prioritize lower resolutions on mobile devices.
247
+ * Added '-noreplace' filename option to prevent automatic video encoding for some videos.
248
+ * Added button to clear the whole video encoding queue.
249
+ * Added option to send an email when there is a video encoding error.
250
+ * Added Google Analytics Event tracking when users watch 25%, 50%, and 75% of a video.
251
+ * Added Twitter and Facebook share buttons.
252
+ * Significantly redesigned video sharing overlay appearance.
253
+ * Moved download link to an icon overlay and stopped inserting unnecessary downloadlink attribute in shortcode for videos in the WordPress database.
254
+ * Moved resolution switching icon to the left of the fullscreen button.
255
+ * Now showing paused video frame while switching resolutions instead of black frame or thumbnail (browser experience may vary).
256
+ * Updated oEmbed system to work with new oEmbed features introduced in WordPress 4.4.
257
+ * Revised Facebook Open Graph tags so they actually work on Facebook.
258
+ * Changed in-browser base64 thumbnail encoding to JPG in order to reduce data transferred when saving. Should reduce 404 errors.
259
+ * Improved user role security to prevent unauthorized users from modifying video settings or deleting encoded videos.
260
+ * Now using Yoast SEO or All In One SEO Pack post descriptions for description metadata, when available.
261
+ * Removed Spanish translation from the distribution in order to favor the new <a href="https://translate.wordpress.org/projects/wp-plugins/video-embed-thumbnail-generator">WordPress language packs</a>.
262
+ * Fixed several multisite encoding queue bugs, particularly when videos have identical post IDs on different sites.
263
+ * Fixed bug that broke FFMPEG sample encode output and video rotation when a watermark overlay was enabled.
264
+ * Fixed bug that incorrectly interpreted FFMPEG output as an error when the last line came from the AAC encoder.
265
+ * Fixed bug that didn't initialize the nativecontrolsfortouch plugin setting.
266
+ * Fixed bug that didn't set featured images on some videos uploaded using frontend uploaders.
267
+ * Fixed bug that hid the wrong headers on the plugin settings tabs in WordPress 4.4+.
268
+ * Fixed bug that disabled the text track remove button when editing videos in the media library.
269
+ * Fixed bug that redundantly localized the frontend script every time a video was embedded on a page.
270
+
271
  = 4.5.5 - August 20, 2015 =
272
  * Fixed a number of potential infinite loops and other recursion issues related to longstanding WordPress bug <a href='https://core.trac.wordpress.org/ticket/17817'>#17817</a>.
273
  * Changed video player names with spaces (WordPress Default, JW Player) to one word camel case for JavaScript functions (WordPressDefault, JWPlayer).
454
  * Fixed several user capability related bugs related to users who were not assigned any roles and capabilities that were not assigned to any roles.
455
  * Changed video title overlay z-index to 103 to avoid floating over other elements.
456
 
457
+ <a href="http://www.kylegilman.net/2011/01/18/video-embed-thumbnail-generator-wordpress-plugin/">See the full changelog on my website.</a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
458
 
459
  == Upgrade Notice ==
460
 
461
+ = 4.6 =
462
+ It's safe to update. The plugin is still completely free until version 5.0. Video.js users will notice an updated player design.
463
+
464
+ = 4.5.6 =
465
+ Some advanced features will be converted to premium add-ons in the future. More info in the support forum.
466
+
467
  = 4.5.2 =
468
  This is probably the last completely free major release. Some advanced features will be converted to premium add-ons in the future. More info in the support forum.
469
 
video-embed-thumbnail-generator.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Video Embed & Thumbnail Generator
4
  Plugin URI: http://www.kylegilman.net/2011/01/18/video-embed-thumbnail-generator-wordpress-plugin/
5
  Description: Generates thumbnails, HTML5-compliant videos, and embed codes for locally hosted videos. Requires FFMPEG or LIBAV for encoding.
6
- Version: 4.5.5
7
  Author: Kyle Gilman
8
  Author URI: http://www.kylegilman.net/
9
  Text Domain: video-embed-thumbnail-generator
@@ -59,7 +59,7 @@ function kgvid_default_options_fn() {
59
  $edit_others_capable = kgvid_check_if_capable('edit_others_posts');
60
 
61
  $options = array(
62
- "version" => 4.505,
63
  "embed_method" => "Video.js",
64
  "jw_player_id" => "",
65
  "template" => false,
@@ -97,6 +97,9 @@ function kgvid_default_options_fn() {
97
  "watermark_url" => "",
98
  "overlay_title" => "on",
99
  "overlay_embedcode" => false,
 
 
 
100
  "downloadlink" => false,
101
  "click_download" => "on",
102
  "view_count" => false,
@@ -106,13 +109,14 @@ function kgvid_default_options_fn() {
106
  "width" => "640",
107
  "height" => "360",
108
  "minimum_width" => false,
109
- "fullwidth" => false,
110
  "gallery_width" => "960",
111
  "gallery_thumb" => "250",
112
  "gallery_end" => "",
113
  "gallery_pagination" => false,
114
  "gallery_per_page" => false,
115
  "gallery_title" => "on",
 
116
  "controlbar_style" => "docked",
117
  "autoplay" => false,
118
  "loop" => false,
@@ -142,23 +146,28 @@ function kgvid_default_options_fn() {
142
  "h264_profile" => "baseline",
143
  "h264_level" => "3.0",
144
  "auto_encode" => false,
 
145
  "auto_thumb" => false,
146
  "auto_thumb_number" => 1,
147
  "auto_thumb_position" => 50,
148
  "right_click" => "on",
149
  "resize" => "on",
150
  "auto_res" => "automatic",
 
151
  "capabilities" => array(
152
  "make_video_thumbnails" => $upload_capable,
153
  "encode_videos" => $upload_capable,
154
  "edit_others_video_encodes" => $edit_others_capable
155
  ),
156
- "open_graph" => "on",
157
- "oembed_provider" => "on",
 
 
158
  "oembed_security" => false,
159
  "htaccess_login" => "",
160
  "htaccess_password" => "",
161
  "sample_format" => "mobile",
 
162
  "ffmpeg_watermark" => array(
163
  "url" => "",
164
  "scale" => "9",
@@ -167,7 +176,8 @@ function kgvid_default_options_fn() {
167
  "x" => "6",
168
  "y" => "5"
169
  ),
170
- "simultaneous_encodes" => 1
 
171
  );
172
 
173
  return $options;
@@ -189,7 +199,8 @@ function kgvid_default_network_options() {
189
  'ffmpeg_exists' => $default_options['ffmpeg_exists'],
190
  'default_capabilities' => $default_options['capabilities'],
191
  'superadmin_only_ffmpeg_settings' => false,
192
- 'simultaneous_encodes' => $default_options['simultaneous_encodes']
 
193
  );
194
 
195
  return $network_options;
@@ -209,6 +220,27 @@ function kgvid_get_options() {
209
 
210
  }
211
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
212
  function kgvid_get_attachment_meta($post_id) {
213
 
214
  $options = kgvid_get_options();
@@ -252,7 +284,8 @@ function kgvid_get_attachment_meta($post_id) {
252
  'gallery_order' => '',
253
  'gallery_id' => '',
254
  'duration' => '',
255
- 'aspect' => ''
 
256
  );
257
 
258
  if ( $kgvid_postmeta == '' ) {
@@ -340,7 +373,7 @@ function kgvid_video_formats( $return_replace = false, $return_customs = true )
340
  $video_formats = array(
341
  "fullres" => array(
342
  "name" => __("same resolution H.264", 'video-embed-thumbnail-generator'),
343
- "label" => 'Full',
344
  "width" => INF,
345
  "height" => INF,
346
  "type" => "h264",
@@ -424,8 +457,8 @@ function kgvid_video_formats( $return_replace = false, $return_customs = true )
424
 
425
  $video_formats = $video_formats + array(
426
  "custom_h264" => array(
427
- "name" => "Custom MP4",
428
- "label" => 'Custom MP4',
429
  "width" => 0,
430
  "height" => 0,
431
  "type" => "h264",
@@ -435,8 +468,8 @@ function kgvid_video_formats( $return_replace = false, $return_customs = true )
435
  "vcodec" => "libx264"
436
  ),
437
  "custom_webm" => array(
438
- "name" => "Custom WEBM",
439
- "label" => 'Custom WEBM',
440
  "width" => 0,
441
  "height" => 0,
442
  "type" => "webm",
@@ -446,8 +479,8 @@ function kgvid_video_formats( $return_replace = false, $return_customs = true )
446
  "vcodec" => "libvpx"
447
  ),
448
  "custom_ogg" => array(
449
- "name" => "Custom OGV",
450
- "label" => 'Custom OGV',
451
  "width" => 0,
452
  "height" => 0,
453
  "type" => "ogv",
@@ -668,7 +701,7 @@ function kgvid_set_capabilities($capabilities) {
668
  function kgvid_aac_encoders() {
669
 
670
  $aac_array = array("libfdk_aac", "libfaac", "aac", "libvo_aacenc");
671
- return $aac_array;
672
 
673
  }
674
 
@@ -699,6 +732,51 @@ function kgvid_url_to_id($url) {
699
 
700
  }
701
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
702
  function kgvid_url_exists($url) {
703
  $hdrs = @get_headers($url);
704
  return is_array($hdrs) ? preg_match('/^HTTP\\/\\d+\\.\\d+\\s+2\\d\\d\\s+.*$/',$hdrs[0]) : false;
@@ -905,6 +983,7 @@ function kgvid_set_video_dimensions($id, $gallery = false) {
905
  $kgvid_postmeta['height'] = round(intval($kgvid_postmeta['width'])*$aspect_ratio);
906
 
907
  $dimensions = array( 'width' => strval($kgvid_postmeta['width']), 'height' => strval($kgvid_postmeta['height']), 'actualwidth' => strval($kgvid_postmeta['actualwidth']), 'actualheight' => strval($kgvid_postmeta['actualheight']) );
 
908
  return $dimensions;
909
 
910
  }
@@ -1047,7 +1126,7 @@ function kgvid_encodevideo_info($movieurl, $postID) {
1047
  if ( is_writable($location['filepath']) ) { $encodevideo_info[$format]['writable'] = true; }
1048
  break;
1049
  }
1050
- elseif ( !$encodevideo_info['sameserver'] && $name != "html5encodes" ) { //last resort if it's not on the same server, check url_exists
1051
 
1052
  $already_checked_url = get_post_meta($postID, '_kgflashmediaplayer-'.$sanitized_url['singleurl_id'].'-'.$format, true);
1053
  if ( empty($already_checked_url) ) {
@@ -1070,13 +1149,19 @@ function kgvid_encodevideo_info($movieurl, $postID) {
1070
  }//end potential locations loop
1071
 
1072
  if ( !$encodevideo_info[$format]['exists'] ) {
1073
- $encodevideo_info[$format]['url'] = $uploads['url'].'/'.$encodevideo_info['moviefilebasename'].$format_stats['suffix'];
1074
- $encodevideo_info[$format]['filepath'] = $uploads['path'].'/'.$encodevideo_info['moviefilebasename'].$format_stats['suffix'];
 
 
 
 
 
 
1075
  }
1076
 
1077
  }//end format loop
1078
 
1079
- return $encodevideo_info;
1080
  }
1081
 
1082
  /**
@@ -1133,10 +1218,10 @@ function kgvid_get_video_dimensions($video = false) {
1133
  else { $rotate = "0"; }
1134
 
1135
  switch ($rotate) {
1136
- case "90": $movie_info['rotate'] = ' -vf "transpose=1"'; break;
1137
- case "180": $movie_info['rotate'] = ' -vf "hflip,vflip"'; break;
1138
- case "270": $movie_info['rotate'] = ' -vf "transpose=2"'; break;
1139
- case "-90": $movie_info['rotate'] = ' -vf "transpose=2"'; break;
1140
  default: $movie_info['rotate'] = ""; break;
1141
  }
1142
 
@@ -1158,7 +1243,7 @@ function kgvid_get_video_dimensions($video = false) {
1158
  $movie_info['worked'] = false;
1159
  }
1160
 
1161
- return $movie_info;
1162
  }
1163
 
1164
  function kgvid_generate_flashvars($content, $query_atts, $encodevideo_info, $id) {
@@ -1249,6 +1334,69 @@ function kgvid_generate_encode_string($input, $output, $movie_info, $format, $wi
1249
  $rate_control_flag = " -".$video_bitrate_flag." ".round(floatval($options['bitrate_multiplier'])*$width*$height*30/1024)."k";
1250
  }
1251
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1252
  if ( $options['ffmpeg_watermark']['url'] != "" ) {
1253
 
1254
  $watermark_width = strval(round(intval($movie_info['width'])*(intval($options['ffmpeg_watermark']['scale'])/100)));
@@ -1280,31 +1428,13 @@ function kgvid_generate_encode_string($input, $output, $movie_info, $format, $wi
1280
  }
1281
 
1282
  $watermark_input = '-i "'.$options['ffmpeg_watermark']['url'].'" ';
1283
- $watermark_filter = ' -filter_complex "[1:v]scale='.$watermark_width.':-1[watermark];[0:v][watermark]overlay='.$watermark_align.'main_w*'.round($options['ffmpeg_watermark']['x']/100, 3).':'.$watermark_valign.'main_w*'.round($options['ffmpeg_watermark']['y']/100, 3).'"';
1284
  }
1285
  else {
1286
  $watermark_input = "";
1287
  $watermark_filter = "";
1288
  }
1289
 
1290
- if ( $rotate === false || $options['ffmpeg_vpre'] == "on" ) { $rotate = ""; }
1291
- switch ($rotate) { //if it's a sideways mobile video
1292
- case ' -vf "transpose=1"': //90 degrees
1293
- case ' -vf "transpose=2"': //270 degrees
1294
- if ( $options['video_bitrate_flag'] == "on" || $options['ffmpeg_old_rotation'] == "on" ) {
1295
- $rotate .= " -metadata rotate=0";
1296
- }
1297
- else {
1298
- $rotate .= " -metadata:s:v:0 rotate=0";
1299
- $width ^= $height ^= $width ^= $height; //swap height & width
1300
- }
1301
- break;
1302
- case ' -vf "hflip,vflip"': //180 degrees
1303
- if ( $options['video_bitrate_flag'] == "on" || $options['ffmpeg_old_rotation'] == "on" ) { $rotate .= " -metadata rotate=0"; }
1304
- else { $rotate .= " -metadata:s:v:0 rotate=0"; }
1305
- break;
1306
- }
1307
-
1308
  if ( $video_formats[$format]['type'] == 'h264' ) {
1309
 
1310
  $aac_array = kgvid_aac_encoders();
@@ -1365,7 +1495,7 @@ function kgvid_generate_encode_string($input, $output, $movie_info, $format, $wi
1365
 
1366
  } //if FFMPEG is found
1367
 
1368
- return $encode_string;
1369
 
1370
  }
1371
 
@@ -1425,176 +1555,264 @@ class kgvid_Process{
1425
  }// class Process
1426
 
1427
  function kgvid_video_embed_enqueue_scripts() {
 
1428
  $options = kgvid_get_options();
1429
 
1430
  //Video.js styles
1431
  if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
1432
- wp_enqueue_style( 'video-js', plugins_url("", __FILE__).'/video-js/video-js.css', '', '4.12.11' );
1433
  if ( $options['js_skin'] == 'kg-video-js-skin' ){ wp_enqueue_style( 'video-js-kg-skin', plugins_url("", __FILE__).'/video-js/kg-video-js-skin.css', '', $options['version'] ); }
1434
  }
1435
 
1436
- //plugin-related frontend styles
1437
- wp_enqueue_style( 'kgvid_video_styles', plugins_url("/css/kgvid_styles.css", __FILE__), '', $options['version'] );
1438
 
1439
  }
1440
  add_action('wp_enqueue_scripts', 'kgvid_video_embed_enqueue_scripts', 12);
1441
 
1442
  function enqueue_kgvid_script() { //loads plugin-related scripts in the admin area
1443
 
1444
- $options = kgvid_get_options();
 
 
1445
 
1446
- wp_enqueue_script( 'kgvid_video_plugin_admin', plugins_url('/js/kgvid_video_plugin_admin.js', __FILE__), array('jquery'), $options['version'], true );
1447
- wp_enqueue_style( 'video_embed_thumbnail_generator_style', plugins_url('/css/video-embed-thumbnail-generator_admin.css', __FILE__), '', $options['version'] );
1448
-
1449
- wp_localize_script( 'kgvid_video_plugin_admin', 'kgvidL10n', array(
1450
- 'wait' => _x('Wait', 'please wait', 'video-embed-thumbnail-generator'),
1451
- 'hidevideo' => __('Hide video...', 'video-embed-thumbnail-generator'),
1452
- 'choosefromvideo' => __('Choose from video...', 'video-embed-thumbnail-generator'),
1453
- 'cantloadvideo' => __('Can\'t load video', 'video-embed-thumbnail-generator'),
1454
- 'choosethumbnail' => __('Choose Thumbnail:', 'video-embed-thumbnail-generator'),
1455
- 'saveallthumbnails' => __('Save All Thumbnails', 'video-embed-thumbnail-generator'),
1456
- 'saving' => __('Saving...', 'video-embed-thumbnail-generator'),
1457
- 'loading' => __('Loading...', 'video-embed-thumbnail-generator'),
1458
- 'generate' => __('Generate', 'video-embed-thumbnail-generator'),
1459
- 'randomize' => __('Randomize', 'video-embed-thumbnail-generator'),
1460
- 'ffmpegnotfound' => sprintf( __('%s not found', 'video-embed-thumbnail-generator'), strtoupper($options['video_app']) ),
1461
- 'validurlalert' => __("Please enter a URL that points to a valid video file. Video sharing sites are not supported by this plugin.\nTo embed from YouTube, Vimeo, etc, just paste the link directly into the post window and WordPress will handle the rest.", 'video-embed-thumbnail-generator'),
1462
- 'pleasevalidurl' => __('Please enter a valid video URL', 'video-embed-thumbnail-generator'),
1463
- 'deletemessage' => __("You are about to permanently delete the encoded video.\n 'Cancel' to stop, 'OK' to delete.", 'video-embed-thumbnail-generator'),
1464
- 'saved' => __('Saved.', 'video-embed-thumbnail-generator'),
1465
- 'runningtest' => __('Running test...', 'video-embed-thumbnail-generator'),
1466
- 'ffmpegrequired' => __('FFMPEG or LIBAV required for these functions.', 'video-embed-thumbnail-generator'),
1467
- 'featuredwarning' => __("You are about to set all existing video thumbnails previously generated by this plugin as the featured images for their posts. There is no 'undo' button, so proceed at your own risk.", 'video-embed-thumbnail-generator'),
1468
- 'autothumbnailwarning' => __("You are about to create thumbnails for every video in your Media Library that doesn't already have one. This might take a long time. There is no 'undo' button, so proceed at your own risk.\n\nNumber of videos without thumbnails: ", 'video-embed-thumbnail-generator'),
1469
- 'autoencodewarning' => __("You are about to add every video in your Media Library to the video encode queue if it hasn't already been encoded. This might take a long time.", 'video-embed-thumbnail-generator'),
1470
- 'nothumbstomake' => __("No thumbnails generated. All videos have thumbnails already.", 'video-embed-thumbnail-generator'),
1471
- 'cancel_ok' => __("'Cancel' to stop, 'OK' to proceed.", 'video-embed-thumbnail-generator'),
1472
- 'processing' => __('Processing...', 'video-embed-thumbnail-generator'),
1473
- 'parentwarning_posts' => __("You are about to set all existing video thumbnails previously generated by this plugin as attachments of their posts rather than their associated videos. Proceed at your own risk.", 'video-embed-thumbnail-generator'),
1474
- 'parentwarning_videos' => __("You are about to set all existing video thumbnails previously generated by this plugin as attachments of their videos rather than their associated posts. Proceed at your own risk.", 'video-embed-thumbnail-generator'),
1475
- 'clearqueuedwarning' => __("You are about to clear all videos not yet encoded.", 'video-embed-thumbnail-generator'),
1476
- 'complete' => __('Complete', 'video-embed-thumbnail-generator'),
1477
- 'tracktype' => __('Track type:', 'video-embed-thumbnail-generator'),
1478
- 'subtitles' => __('subtitles', 'video-embed-thumbnail-generator'),
1479
- 'captions' => __('captions', 'video-embed-thumbnail-generator'),
1480
- 'chapters' => __('chapters', 'video-embed-thumbnail-generator'),
1481
- 'choosetextfile' => __('Choose a Text File', 'video-embed-thumbnail-generator'),
1482
- 'settracksource' => __('Set as track source', 'video-embed-thumbnail-generator'),
1483
- 'choosefromlibrary' => __('Choose from Library', 'video-embed-thumbnail-generator'),
1484
- 'languagecode' => __('Language code:', 'video-embed-thumbnail-generator'),
1485
- 'label' => _x('Label:', 'noun', 'video-embed-thumbnail-generator'),
1486
- 'trackdefault' => __('Default:', 'video-embed-thumbnail-generator'),
1487
- 'custom' => _x('Custom', 'Custom format', 'video-embed-thumbnail-generator')
1488
- ) );
 
 
1489
 
1490
  }
1491
  add_action('admin_enqueue_scripts', 'enqueue_kgvid_script');
1492
  add_action('wp_enqueue_media', 'enqueue_kgvid_script');
1493
 
1494
- function kgvid_video_embed_print_scripts() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1495
 
1496
- global $wp_query;
1497
- global $wpdb;
1498
- $posts = $wp_query->posts;
1499
  $pattern = get_shortcode_regex();
1500
- $options = kgvid_get_options();
1501
 
1502
- echo '<script type="text/javascript">document.createElement(\'video\');document.createElement(\'audio\');</script>'."\n";
 
 
 
1503
 
1504
- if ( !empty($posts) && is_array($posts) ) {
1505
- foreach ( $posts as $post ) {
1506
- if ( $options['open_graph'] == "on"
1507
- && ( ( is_attachment() && strpos($post->post_mime_type, 'video') !== false )
1508
- || ( preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
1509
- && is_array($matches)
1510
- && array_key_exists( 2, $matches ) && array_key_exists( 5, $matches )
1511
- && ( in_array( 'KGVID', $matches[2] ) || in_array( 'FMP', $matches[2] ) ) ) ) ) { //if KGVID or FMP shortcode is in posts on this page.
1512
 
1513
- if ( isset($matches) ) {
 
1514
 
1515
- $first_key = array_search('KGVID', $matches[2]);
1516
- if ( $first_key === false ) { $first_key = array_search('FMP', $matches[2]); }
1517
 
1518
- if ( $first_key !== false ) {
 
1519
 
1520
- $attributes = array();
1521
- $id = "";
1522
- $url = "";
1523
 
1524
- if ( array_key_exists( 3, $matches ) ) {
1525
- $attributes = shortcode_parse_atts($matches[3][$first_key]);
1526
- }
1527
 
1528
- if ( !empty($matches[5][$first_key]) ) { //there's a URL
 
1529
 
1530
- $url = $matches[5][$first_key];
1531
- $attributes['id'] = kgvid_url_to_id($matches[5][$first_key]);
1532
 
1533
- }//if there's a URL
 
 
1534
 
1535
- elseif ( is_array($attributes) && array_key_exists( 'id', $attributes ) ) {
1536
- $url = wp_get_attachment_url($attributes['id']);
1537
- }//if there's no URL but there's an ID attribute
1538
 
1539
- elseif ( ( is_array($attributes) && !array_key_exists( 'id', $attributes ) )
1540
- || empty($attributes)
1541
- ) {
1542
 
1543
- $post_ID = $post->ID;
 
 
 
 
 
 
 
1544
 
1545
- $args = array(
1546
- 'numberposts' => 1,
1547
- 'post_mime_type' => 'video',
1548
- 'post_parent' => $post_ID,
1549
- 'post_status' => null,
1550
- 'post_type' => 'attachment'
1551
- );
1552
- $video_attachment = get_posts($args);
1553
 
1554
- if ( $video_attachment ) {
1555
- $attributes['id'] = $video_attachment[0]->ID;
1556
- $url = wp_get_attachment_url($attributes['id']);
1557
- }
1558
 
1559
- }//if no URL or ID attribute
1560
- }//if there's a KGVID shortcode in the post
1561
- }//if there's a shortcode in the post
1562
- elseif ( is_attachment() ) {
1563
- $url = wp_get_attachment_url($post->ID);
1564
- $kgvid_postmeta = kgvid_get_attachment_meta($post->ID);
1565
- $attributes = array( 'width' => $kgvid_postmeta['width'], 'height' => $kgvid_postmeta['height'], 'id' => $post->ID );
1566
- $mime_type_check['type'] = $post->post_mime_type;
1567
 
1568
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1569
 
1570
- if ( $url ) {
 
 
 
1571
 
1572
- echo '<meta property="og:video" content="'.$url.'" />'."\n";
1573
- $secure_url = str_replace('http://', 'https://', $url);
 
 
 
 
 
 
1574
  echo '<meta property="og:video:secure_url" content="'.$secure_url.'" />'."\n";
1575
- $mime_type_check = wp_check_filetype($url);
1576
  echo '<meta property="og:video:type" content="'.$mime_type_check['type'].'" />'."\n";
1577
 
1578
- if ( is_array($attributes) && array_key_exists( 'width', $attributes ) ) {
1579
- echo '<meta property="og:video:width" content="'.$attributes['width'].'" />'."\n";
1580
- if ( array_key_exists( 'height', $attributes ) ) {
1581
- echo '<meta property="og:video:height" content="'.$attributes['height'].'" />'."\n";
1582
  }
1583
  }
1584
- }
1585
 
1586
- if ( is_array($attributes) && array_key_exists( 'id', $attributes ) ) {
 
 
 
 
 
 
 
 
 
 
1587
 
1588
- echo '<meta property="og:video" content="'.site_url('/')."?attachment_id=".$attributes['id']."&amp;kgvid_video_embed[enable]=true".'" />'."\n";
1589
- echo '<meta property="og:video:secure_url" content="'.site_url('/', 'https')."?attachment_id=".$attributes['id']."&amp;kgvid_video_embed[enable]=true".'" />'."\n";
1590
- echo '<meta property="og:video:type" content="text/html" />'."\n";
1591
 
1592
- if ( $options['oembed_provider'] == "on" && is_singular() ) { //add oembed provider links for single pages
1593
 
1594
- echo '<link rel="alternate" type="application/json+oembed" href="' . site_url('/?kgvid_video_embed[oembed]=json&amp;kgvid_video_embed[post_id]=' .$attributes['id']).'" />'."\n";
1595
- echo '<link rel="alternate" type="application/xml+oembed" href="' . site_url('/?kgvid_video_embed[oembed]=xml&amp;kgvid_video_embed[post_id]='.$attributes['id']).'" />'."\n";
 
 
 
 
 
 
 
 
 
 
 
 
1596
 
 
 
 
 
1597
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1598
 
1599
  }
1600
 
@@ -1605,7 +1823,74 @@ function kgvid_video_embed_print_scripts() {
1605
  }//end if posts
1606
 
1607
  }
1608
- add_action('wp_head', 'kgvid_video_embed_print_scripts', 99);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1609
 
1610
  function kgvid_enqueue_shortcode_scripts() {
1611
 
@@ -1613,7 +1898,7 @@ function kgvid_enqueue_shortcode_scripts() {
1613
 
1614
  if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
1615
  wp_enqueue_script( 'video-quality-selector', plugins_url("", __FILE__).'/video-js/video-quality-selector.js', array('video-js'), $options['version'], true );
1616
- wp_enqueue_script( 'video-js', plugins_url("", __FILE__).'/video-js/video.js', '', '4.12.11', true );
1617
  add_action('wp_footer', 'kgvid_print_videojs_footer', 99);
1618
  }
1619
 
@@ -1621,22 +1906,27 @@ function kgvid_enqueue_shortcode_scripts() {
1621
  wp_enqueue_script( 'swfobject' );
1622
  }
1623
 
1624
- wp_enqueue_script( 'kgvid_video_embed', plugins_url("/js/kgvid_video_embed.js", __FILE__), array('jquery'), $options['version'], true );
1625
 
1626
- wp_localize_script( 'kgvid_video_embed', 'kgvidL10n_frontend', array(
1627
- 'ajaxurl' => admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' ),
1628
- 'ajax_nonce' => wp_create_nonce('kgvid_frontend_nonce'),
1629
- 'playstart' => _x("Play Start", 'noun for Google Analytics event', 'video-embed-thumbnail-generator'),
1630
- 'completeview' => _x("Complete View", 'noun for Google Analytics event', 'video-embed-thumbnail-generator'),
1631
- 'next' => _x("Next", 'button text to play next video', 'video-embed-thumbnail-generator'),
1632
- 'previous' => _x("Previous", 'button text to play previous video', 'video-embed-thumbnail-generator')
1633
- ) );
 
 
 
 
 
1634
 
1635
  }
1636
 
1637
  function kgvid_print_videojs_footer() { //called by the shortcode if Video.js is used
1638
 
1639
- echo '<script type="text/javascript">if(typeof videojs !== "undefined") { videojs.options.flash.swf = "'.plugins_url("", __FILE__).'/video-js/video-js.swf?4.7.0"; }</script>'."\n";
1640
 
1641
  }
1642
 
@@ -1701,7 +1991,6 @@ function kgvid_gallery_page($page_number, $query_atts, $last_video_id = 0) {
1701
  $below_video = 0;
1702
  if ( !empty($query_atts['caption']) ) { $below_video = 1; }
1703
  $kgvid_postmeta = kgvid_get_attachment_meta( $attachment->ID );
1704
- if ( $kgvid_postmeta['downloadlink'] == "on" ) { ++$below_video; }
1705
 
1706
  $play_button_html = '';
1707
 
@@ -1737,10 +2026,10 @@ function kgvid_gallery_page($page_number, $query_atts, $last_video_id = 0) {
1737
  if ( $kgvid_postmeta['downloadlink'] == "on" ) { $atts['downloadlink'] = "true"; }
1738
 
1739
  $popup_atts = kgvid_shortcode_atts($atts);
1740
- if ( in_the_loop() ) { $post_ID = get_the_ID(); }
1741
- else { $post_ID = 1; }
1742
  $content = '';
1743
- $popup_code = kgvid_single_video_code($popup_atts, $atts, $content, $post_ID);
1744
 
1745
  preg_match('/data-kgvid_video_vars=.*? /', $popup_code, $video_vars);
1746
  $popup_code = str_replace(array("\r", "\n", "\t", $video_vars[0]), "", $popup_code);
@@ -1778,7 +2067,7 @@ function kgvid_gallery_page($page_number, $query_atts, $last_video_id = 0) {
1778
 
1779
  } //if there are attachments
1780
 
1781
- return $code;
1782
 
1783
  }
1784
 
@@ -1798,7 +2087,41 @@ function kgvid_switch_gallery_page() {
1798
  add_action( 'wp_ajax_kgvid_switch_gallery_page', 'kgvid_switch_gallery_page' ); // ajax for logged in users
1799
  add_action( 'wp_ajax_nopriv_kgvid_switch_gallery_page', 'kgvid_switch_gallery_page' ); // ajax for not logged in users
1800
 
1801
- function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1802
 
1803
  global $content_width;
1804
  $content_width_save = $content_width;
@@ -1810,16 +2133,18 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
1810
  $code = "";
1811
  $id_array = array();
1812
  $video_formats = kgvid_video_formats();
 
 
1813
 
1814
  if ( empty($content) ) {
1815
  if ( !empty($query_atts["id"]) ) {
1816
  $id_array[0] = $query_atts["id"];
1817
  }
1818
- elseif ( $post_ID != 1 ) {
1819
  $args = array(
1820
  'numberposts' => $query_atts['videos'],
1821
  'post_mime_type' => 'video',
1822
- 'post_parent' => $post_ID,
1823
  'post_status' => null,
1824
  'post_type' => 'attachment',
1825
  'orderby' => $query_atts['orderby'],
@@ -1854,8 +2179,14 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
1854
  $mp4already = false;
1855
  $dimensions = array();
1856
 
1857
- $compatible = array("flv", "f4v", "mp4", "mov", "m4v", "ogv", "ogg", "webm");
1858
- $h264compatible = array("mp4", "mov", "m4v");
 
 
 
 
 
 
1859
 
1860
  if ( !empty($id) ) { //if the video is an attachment in the WordPress db
1861
 
@@ -1895,14 +2226,14 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
1895
  $stats_title = $query_atts['title'];
1896
  }
1897
  else { $stats_title = $attachment_info->post_title; }
1898
- if ( empty($query_atts['caption']) ) { $query_atts['caption'] = $attachment_info->post_excerpt; }
1899
- if ( empty($query_atts['description']) ) { $query_atts['description'] = $attachment_info->post_content; }
1900
 
1901
  $countable = true;
1902
  }
1903
  else { //video is not in the database
1904
 
1905
- $encodevideo_info = kgvid_encodevideo_info($content, $post_ID); //send the id of the post the video's embedded in
1906
  if ( $query_atts['title'] == "true" ) {
1907
  $query_atts['title'] = "false";
1908
  }
@@ -1962,7 +2293,11 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
1962
  }
1963
 
1964
  if ( ( $query_atts['title'] != "false" && $options['embed_method'] != "JW Player" )
1965
- || $query_atts['embedcode'] != "false" ) { //generate content overlaid on video
 
 
 
 
1966
  $kgvid_meta = true;
1967
  }
1968
  else { $kgvid_meta = false; }
@@ -1982,9 +2317,60 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
1982
  'endofvideooverlay' => $query_atts['endofvideooverlay'],
1983
  'resize' => $query_atts['resize'],
1984
  'auto_res' => $query_atts['auto_res'],
 
1985
  'right_click' => $query_atts['right_click']
1986
  );
1987
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1988
  if ( $options['embed_method'] == "Strobe Media Playback" && $flash_settings['flash_source_found'] ) {
1989
 
1990
  $video_variables['swfurl'] = plugins_url('', __FILE__)."/flash/StrobeMediaPlayback.swf";
@@ -1995,33 +2381,31 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
1995
  } //if Strobe Media
1996
 
1997
  $code .= '<div id="kgvid_'.$div_suffix.'_wrapper" class="kgvid_wrapper'.$aligncode.'">'."\n\t\t\t";
1998
- $code .= '<div id="video_'.$div_suffix.'_div" class="fitvidsignore kgvid_videodiv" data-id="'.$div_suffix.'" data-kgvid_video_vars="'.esc_attr(json_encode($video_variables)).'" itemprop="video" itemscope itemtype="https://schema.org/VideoObject">';
1999
- if ( $query_atts["poster"] != '' ) { $code .= '<meta itemprop="thumbnailUrl" content="'.esc_attr($query_atts["poster"]).'" />'; }
2000
- if ( !empty($id) ) { $schema_embedURL = site_url('/')."?attachment_id=".$id."&amp;kgvid_video_embed[enable]=true"; }
2001
- else { $schema_embedURL = $content; }
2002
- $code .= '<meta itemprop="embedUrl" content="'.esc_attr($schema_embedURL).'" />';
2003
- $code .= '<meta itemprop="contentUrl" content="'.$content.'" />';
2004
-
2005
- if ( !empty($query_atts['title']) ) { $code .= '<meta itemprop="name" content="'.esc_attr($query_atts['title']).'" />'; }
2006
-
2007
- if ( !empty($query_atts['description']) ) { $description = $query_atts['description']; }
2008
- elseif ( !empty($query_atts['caption']) ) { $description = $query_atts['caption']; }
2009
- elseif ( in_the_loop() && !is_attachment() ) {
2010
- global $post;
2011
- if ( !empty($post->post_excerpt) ) {
2012
- $description = $post->post_excerpt;
2013
  }
2014
- else {
2015
- $description = esc_attr(wp_trim_words(strip_tags(strip_shortcodes($post->post_content))));
2016
- }
2017
- }
2018
- if ( empty($description) ) { $description = __('Video', 'video-embed-thumbnail-generator'); }
2019
- $code .= '<meta itemprop="description" content="'.esc_attr($description).'" />';
2020
 
2021
- if ( !empty($id) ) { $upload_date = get_the_date('c', $id); }
2022
- elseif ( $post_ID != 1 ) { $upload_date = get_the_date('c', $post_ID); }
2023
- else { $upload_date = current_time('c'); }
2024
- $code .= '<meta itemprop="uploadDate" content="'.esc_attr($upload_date).'" />';
 
 
 
 
 
 
2025
 
2026
  $track_keys = array('kind', 'srclang', 'src', 'label', 'default');
2027
  if ( !isset($kgvid_postmeta) || ( is_array($kgvid_postmeta) && !is_array($kgvid_postmeta['track']) ) ) {
@@ -2038,26 +2422,76 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
2038
  foreach ( $track_attribute as $attribute => $value ) {
2039
  if ( empty($value) ) { $track_attribute[$attribute] = $query_atts['track_'.$attribute]; }
2040
  }
 
2041
  if ( $options['embed_method'] == "WordPress Default" && $track_attribute['kind'] == 'captions' ) { $track_attribute['kind'] = 'subtitles'; }
2042
- $track_code .= "\t\t\t\t\t<track id='".$div_suffix."_text_".$track."' kind='".esc_attr($track_attribute['kind'])."' src='".esc_attr($track_attribute['src'])."' srclang='".esc_attr($track_attribute['srclang'])."' label='".esc_attr($track_attribute['label'])."' ".esc_attr($track_attribute['default'])." />\n";
2043
  }
2044
  }
2045
 
2046
  if ( $options['embed_method'] == "WordPress Default" ) {
2047
- $sources_hack = "";
 
 
 
2048
  $attr = array();
 
2049
  foreach ($video_formats as $format => $format_stats) {
 
2050
  if ( $format != "original" && $encodevideo_info[$format]["url"] == $content ) { unset($sources['original']); }
 
2051
  if ( $encodevideo_info[$format]["exists"] ) {
2052
- if ( $format_stats['type'] != "h264" || !$mp4already ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2053
  $shortcode_type = wp_check_filetype( $encodevideo_info[$format]["url"], wp_get_mime_types() );
2054
  $attr[$shortcode_type['ext']] = $encodevideo_info[$format]["url"];
2055
- if ( $format_stats['type'] == "h264" ) { //WordPress built-in shortcode doesn't support multiple videos of the same type but we'll hack it in later
2056
  $mp4already = true;
2057
  }
2058
  }
2059
- else { $sources_hack .= '<source type="'.$format_stats['mime'].'" src="'.esc_attr($encodevideo_info[$format]["url"]).'" />'; }
2060
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2061
  }
2062
 
2063
  if ( $query_atts["poster"] != '' ) { $attr['poster'] = esc_attr($query_atts["poster"]); }
@@ -2067,18 +2501,34 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
2067
  $attr['width'] = $query_atts['width'];
2068
  $attr['height'] = $query_atts['height'];
2069
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2070
  $content_width = $query_atts['width'];
2071
  if ( function_exists('wp_video_shortcode') ) { $executed_shortcode = wp_video_shortcode($attr); }
2072
  else { $executed_shortcode = 'WordPress video shortcode function does not exist.'; }
2073
  $content_width = $content_width_save;
2074
- if ( $sources_hack ) { //insert remaining mp4 sources manually
2075
- $position = strpos($executed_shortcode, '<a href=');
2076
- $executed_shortcode = substr_replace( $executed_shortcode, $sources_hack, $position, 0 );
2077
  }
2078
- if ( !empty($track_code) ) { //insert track code manually
2079
- $position = strpos($executed_shortcode, '</video>');
2080
- $executed_shortcode = substr_replace( $executed_shortcode, $track_code, $position, 0 );
2081
  }
 
2082
  $code .= $executed_shortcode;
2083
  }
2084
 
@@ -2124,9 +2574,9 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
2124
  if ( $query_atts["autoplay"] == 'true' ) { $jw_shortcode .= 'autostart="true" '; }
2125
  if ( $query_atts["controlbar"] == 'none') { $jw_shortcode .= 'controls="false" '; }
2126
  if ( $query_atts['title'] != "false" ) { $jw_shortcode .= ' title="'.$query_atts['title'].'" '; }
2127
- if ( $options['jw_player_id'] != "") {
2128
- $jw_player_config = get_option('jwp6_player_config_'.$options['jw_player_id']);
2129
- if ( !empty($jw_player_config) ) { $jw_shortcode .= ' player="'.$options['jw_player_id'].'" '; }
2130
  }
2131
 
2132
  if ( !empty($query_atts['custom_atts']) && is_array($query_atts['custom_atts']) ) {
@@ -2151,60 +2601,18 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
2151
 
2152
  if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
2153
 
2154
- $enable_resolutions_plugin = false;
2155
- $x = 20;
2156
- $h264_resolutions = array();
2157
-
2158
- foreach ($video_formats as $format => $format_stats) {
2159
- if ( $format != "original" && $encodevideo_info[$format]["url"] == $content ) { unset($sources['original']); }
2160
- if ( $encodevideo_info[$format]["exists"] ) {
2161
-
2162
- if ( array_key_exists('height', $encodevideo_info[$format]) && $format_stats['type'] == 'h264' ) {
2163
- $source_key = $encodevideo_info[$format]['height'];
2164
- $format_stats['label'] = $encodevideo_info[$format]['height'].'p';
2165
- }
2166
- else { $source_key = $x; }
2167
-
2168
- $sources[$source_key] = "\t\t\t\t\t".'<source src="'.esc_attr($encodevideo_info[$format]["url"]).'?id='.$kgvid_video_id.'" type="'.$format_stats["mime"].'"';
2169
- if ( $format == 'vp9' ) { $sources[$source_key] .= ' codecs="vp9, vorbis"'; }
2170
- if ( $format_stats['type'] == 'h264' ) {
2171
- $sources[$source_key] .= ' data-res="'.$format_stats['label'].'"';
2172
- if ( $mp4already ) { //there is more than one resolution available
2173
- $enable_resolutions_plugin = true;
2174
- }
2175
- $mp4already = true;
2176
- $h264_resolutions[] = $format_stats['label'];
2177
- }
2178
- else { $sources[$source_key] .= ' data-res="'.$format_stats['name'].'"'; }
2179
- $sources[$source_key] .= '>'."\n";
2180
- }
2181
- $x--;
2182
- }
2183
- krsort($sources);
2184
- natsort($h264_resolutions);
2185
-
2186
- $code .= '<video id="video_'.$div_suffix.'" ';
2187
  if ( $query_atts["loop"] == 'true') { $code .= 'loop '; }
2188
  if ( $query_atts["autoplay"] == 'true') { $code .= 'autoplay '; }
2189
  if ( $query_atts["controlbar"] != 'none') { $code .= 'controls '; }
2190
  $code .= 'preload="'.$options['preload'].'" ';
2191
  if ( $query_atts["poster"] != '' ) { $code .= 'poster="'.esc_attr($query_atts["poster"]).'" '; }
2192
  $code .= 'width="'.$query_atts["width"].'" height="'.esc_attr($query_atts["height"]).'"';
2193
- $locale = get_locale();
2194
  if ( $options['js_skin'] == "" ) { $options['js_skin'] = "vjs-default-skin"; }
2195
  if ( is_array($atts) && array_key_exists('skin', $atts) ) {
2196
  $options['js_skin'] = $atts['skin']; //allows user to set skin for individual videos using the skin="" attribute
2197
  }
2198
- $code .= ' class="fitvidsignore '.esc_attr('video-js '.$options['js_skin']).'" data-setup=\'{ ';
2199
- if ( $options['nativecontrolsfortouch'] == "on" ) { $code .= '"nativeControlsForTouch": true, '; }
2200
- $code .= '"language": "'.substr($locale, 0, 2).'"';
2201
- if ( $enable_resolutions_plugin ) { $code .= ', "plugins" : { "resolutionSelector" : { "force_types" : ["video/mp4"]';
2202
- if ( $query_atts["auto_res"] == "highest" ) { $code .= ', "default_res": "'.end($h264_resolutions).'"'; }
2203
- if ( $query_atts["auto_res"] == "lowest" ) { $code .= ', "default_res": "'.reset($h264_resolutions).'"'; }
2204
- $code .= ' } }';
2205
- }
2206
- $code .= ' }\'';
2207
- $code .= ">\n";
2208
 
2209
  $code .= implode("", $sources); //add the <source> tags created earlier
2210
  $code .= $track_code; //if there's a text track
@@ -2213,7 +2621,7 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
2213
  }
2214
  $code .= "\t\t\t</div>\n";
2215
  $show_views = false;
2216
- if ( !empty($id) || !empty($query_atts['caption']) || $query_atts['downloadlink'] == "true" || $content == plugins_url('/images/sample-video-h264.mp4', __FILE__) ) { //generate content below the video
2217
  if ( is_array($kgvid_postmeta) && array_key_exists('starts', $kgvid_postmeta) ) { $view_count = number_format(intval($kgvid_postmeta['starts'])); }
2218
  else { $view_count = "0"; }
2219
  if ( $content == plugins_url('/images/sample-video-h264.mp4', __FILE__) ) { $view_count = "XX"; }
@@ -2221,38 +2629,90 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
2221
  if ( !empty($query_atts['caption']) || $show_views || $query_atts['downloadlink'] == "true" ) {
2222
  $code .= "\t\t\t".'<div class="kgvid_below_video" id="video_'.$div_suffix.'_below">';
2223
  if ( $show_views ) { $code .= '<div class="kgvid-viewcount" id="video_'.$div_suffix.'_viewcount">'.sprintf( _n( '%s view', '%s views', intval(str_replace(',', '', $view_count)) , 'video-embed-thumbnail-generator'), $view_count ).'</div>'; }
2224
- if ( !empty($query_atts['caption']) || $query_atts['downloadlink'] == "true" ) {
2225
- $code .= '<div class="kgvid-caption" id="video_'.$div_suffix.'_caption">'.$query_atts['caption'];
2226
- if ( $query_atts['downloadlink'] == "true" ) {
2227
- if ( !empty($query_atts['caption']) ) { $code .= '<br>'; }
2228
- $forceable = false;
2229
- if ( !empty($id) && $options['click_download'] == 'on' ) {
2230
- $filepath = get_attached_file($id);
2231
- if ( file_exists($filepath) ) {
2232
- $forceable = true;
2233
- $code .= '<a href="'.site_url('/').'?attachment_id='.$id.'&kgvid_video_embed[download]=true">'.__('Click on this link to download', 'video-embed-thumbnail-generator').'</a>';
2234
- }
2235
- }
2236
- if ( !$forceable ) { $code .= '<a href="'.$content.'">'.__('Right-click or ctrl-click on this link to download', 'video-embed-thumbnail-generator').'</a>'; }
2237
- }
2238
- $code .= '</div>';
2239
  }
2240
  $code .= '</div>';
2241
  }
2242
  }
2243
 
2244
  if ( $kgvid_meta == true ) { //generate content overlaid on video
2245
- $code .= "\t\t\t<div style=\"display:none;\" id=\"video_".$div_suffix."_meta\" class=\"kgvid_video_meta kgvid_video_meta_hover\">\n";
2246
- if ( $query_atts['embedcode'] != "false" ) {
2247
- if ( $query_atts['embedcode'] == "true" ) { $iframeurl = site_url('/')."?attachment_id=".$id."&amp;kgvid_video_embed[enable]=true"; }
2248
- else { $iframeurl = $query_atts['embedcode']; }
2249
- $iframecode = "<iframe allowfullscreen src='".$iframeurl."' frameborder='0' scrolling='no' width='".esc_attr($query_atts['width'])."' height='".esc_attr($query_atts["height"])."'></iframe>";
2250
- $code .= "\t\t\t\t<div id=\"video_".$div_suffix."_embed\" class=\"kgvid_share\"><span>"._x('Embed:', 'precedes code for embedding video', 'video-embed-thumbnail-generator')." </span><input type=\"text\" value=\"".esc_attr($iframecode)."\" onClick=\"this.select();\"></div>\n";
2251
- }
2252
  if ( $query_atts['title'] != "false" && $options['embed_method'] != "JW Player" ) {
2253
- $code .= "\t\t\t\t<div id='video_".$div_suffix."_title' class='kgvid_title'>".$query_atts['title']."</div>\n";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2254
  }
2255
- $code .= "\t\t\t</div>\n";
 
 
 
 
 
 
2256
  }
2257
 
2258
  if ( !empty($query_atts["watermark"]) && $query_atts["watermark"] != "false" ) {
@@ -2307,7 +2767,7 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_ID) {
2307
 
2308
  } //end id_array loop
2309
 
2310
- return $code;
2311
 
2312
  }
2313
 
@@ -2315,8 +2775,8 @@ function kgvid_shortcode_atts($atts) {
2315
 
2316
  $options = kgvid_get_options();
2317
 
2318
- if ( in_the_loop() ) { $post_ID = get_the_ID(); }
2319
- else { $post_ID = 1; }
2320
 
2321
  $default_atts = array(
2322
  'id' => '',
@@ -2350,7 +2810,7 @@ function kgvid_shortcode_atts($atts) {
2350
  'gallery_order' => 'ASC',
2351
  'gallery_exclude' => '',
2352
  'gallery_include' => '',
2353
- 'gallery_id' => $post_ID,
2354
  'gallery_end' => $options['gallery_end'],
2355
  'gallery_title' => $options['gallery_title'],
2356
  'volume' => $options['volume'],
@@ -2365,6 +2825,10 @@ function kgvid_shortcode_atts($atts) {
2365
  'right_click' => $options['right_click'],
2366
  'resize' => $options['resize'],
2367
  'auto_res' => $options['auto_res'],
 
 
 
 
2368
  'track_kind' => 'subtitles',
2369
  'track_srclang' => substr(get_bloginfo('language'), 0, 2),
2370
  'track_src' => '',
@@ -2401,7 +2865,10 @@ function kgvid_shortcode_atts($atts) {
2401
  "downloadlink",
2402
  "mute",
2403
  "fullwidth",
2404
- "gallery_title"
 
 
 
2405
  );
2406
  foreach ( $checkbox_convert as $query ) {
2407
  if ( $query_atts[$query] == "on" ) { $query_atts[$query] = "true"; }
@@ -2413,7 +2880,7 @@ function kgvid_shortcode_atts($atts) {
2413
  if ( $query_atts['orderby'] == 'menu_order' ) { $query_atts['orderby'] = 'menu_order ID'; }
2414
  if ( $query_atts['track_default'] == 'true' ) { $query_atts['track_default'] = 'default'; }
2415
 
2416
- return $query_atts;
2417
 
2418
  }
2419
 
@@ -2426,14 +2893,14 @@ function KGVID_shortcode($atts, $content = ''){
2426
 
2427
  kgvid_enqueue_shortcode_scripts();
2428
 
2429
- if ( in_the_loop() ) { $post_ID = get_the_ID(); }
2430
- else { $post_ID = 1; }
2431
 
2432
  $query_atts = kgvid_shortcode_atts($atts);
2433
 
2434
  if ( $query_atts["gallery"] != "true" ) { //if this is not a pop-up gallery
2435
 
2436
- $code = kgvid_single_video_code($query_atts, $atts, $content, $post_ID);
2437
 
2438
  } //if not gallery
2439
 
@@ -2474,7 +2941,7 @@ function KGVID_shortcode($atts, $content = ''){
2474
 
2475
  } //if not feed
2476
 
2477
- return $code;
2478
 
2479
  }
2480
  add_shortcode('FMP', 'KGVID_shortcode');
@@ -2494,8 +2961,29 @@ function kgvid_update_child_format() {
2494
  $video_id = $_POST['video_id'];
2495
  $parent_id = $_POST['parent_id'];
2496
  $format = $_POST['format'];
2497
- $movieurl = $_POST['movieurl'];
 
 
 
2498
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2499
 
2500
  $post = get_post($video_id);
2501
  update_post_meta( $video_id, '_kgflashmediaplayer-format', $format );
@@ -2503,8 +2991,10 @@ function kgvid_update_child_format() {
2503
  $post->post_parent = $parent_id;
2504
  wp_update_post($post);
2505
 
 
2506
 
2507
  die();
 
2508
  }
2509
  add_action('wp_ajax_kgvid_update_child_format', 'kgvid_update_child_format');
2510
 
@@ -2536,6 +3026,7 @@ function kgvid_update_encode_queue() {
2536
  check_ajax_referer( 'video-embed-thumbnail-generator-nonce', 'security' );
2537
 
2538
  if ( isset( $_POST['page'] ) ) { $page = $_POST['page']; }
 
2539
 
2540
  $video_encode_queue = kgvid_get_encode_queue();
2541
 
@@ -2543,6 +3034,11 @@ function kgvid_update_encode_queue() {
2543
 
2544
  foreach ( $video_encode_queue as $video_key => $video_entry ) {
2545
 
 
 
 
 
 
2546
  if ( !empty($video_entry['movieurl']) && !empty($video_entry['attachmentID']) ) {
2547
  $encodevideo_info = kgvid_encodevideo_info($video_entry['movieurl'], $video_entry['attachmentID']);
2548
  }
@@ -2580,11 +3076,23 @@ function kgvid_encode_format_meta( $encodevideo_info, $video_key, $format, $stat
2580
  $something_to_encode = false;
2581
  $encoding_now = false;
2582
  $time_to_wait = 5000;
 
 
 
 
2583
 
2584
  if ( get_post_type($post_id) == "attachment" ) {
2585
  $kgvid_postmeta = kgvid_get_attachment_meta($post_id);
2586
  if ( array_key_exists('encode'.$format, $kgvid_postmeta) ) { $encodeset = $kgvid_postmeta['encode'.$format]; }
2587
  else { $encodeset = 'false'; }
 
 
 
 
 
 
 
 
2588
  }
2589
  if ( $encodeset == "false" && strpos($format, 'custom_') === false ) { $encodeset = $options['encode_'.$format]; }
2590
 
@@ -2598,25 +3106,26 @@ function kgvid_encode_format_meta( $encodevideo_info, $video_key, $format, $stat
2598
  }
2599
 
2600
  if ( !empty($encodevideo_info) ) {
 
2601
  if ( $encodevideo_info[$format]['exists'] ) { //if the video file exists
2602
 
2603
  if ( array_key_exists('id', $encodevideo_info[$format]) ) {
2604
  $child_id = $encodevideo_info[$format]['id'];
2605
- $was_picked = get_post_meta( $child_id[$format], '_kgflashmediaplayer-pickedformat', true );
2606
  }
2607
  else { $was_picked = false; }
2608
 
2609
  if ( $status != "encoding" ) { // not currently encoding
 
2610
  if ( $status == "notchecked" ) {
2611
  if ( $was_picked != false ) { $meta = ' <strong>Set: '.basename($encodevideo_info[$format]['filepath']).'</strong>'; }
2612
  else { $meta = ' <strong>Encoded</strong>'; }
2613
  }
2614
  if ( $status != "canceling" ) {
2615
 
2616
- if ( is_multisite() ) { $blog_id = get_current_blog_id(); }
2617
- else { $blog_id = false; }
2618
  if ( $encodevideo_info[$format]['writable']
2619
  && current_user_can('encode_videos')
 
2620
  && $format != "fullres" ) {
2621
  if ( $was_picked != false ) {
2622
  $meta .= '<a id="unpick-'.$post_id.'-'.$format.'" class="kgvid_delete-format" onclick="kgvid_clear_video(\''.$movieurl.'\', \''.$post_id.'\', \''.$child_id.'\', \''.$blog_id.'\');" href="javascript:void(0)">'.__('Clear Format', 'video-embed-thumbnail-generator').'</a>';
@@ -2658,7 +3167,7 @@ function kgvid_encode_format_meta( $encodevideo_info, $video_key, $format, $stat
2658
  $something_to_encode = false;
2659
  }
2660
 
2661
- $meta_array = array( 'checked' => $checked, 'disabled' => $disabled, 'meta' => $meta, 'time_to_wait'=> $time_to_wait, 'something_to_encode' => $something_to_encode, 'encoding_now' => $encoding_now );
2662
 
2663
  return $meta_array;
2664
 
@@ -2693,6 +3202,8 @@ add_action('wp_ajax_kgvid_generate_encode_checkboxes', 'kgvid_ajax_generate_enco
2693
 
2694
  function kgvid_generate_encode_checkboxes($movieurl, $post_id, $page, $blog_id = false) {
2695
 
 
 
2696
  $options = kgvid_get_options();
2697
  $video_encode_queue = kgvid_get_encode_queue();
2698
  $video_formats = kgvid_video_formats();
@@ -2707,25 +3218,36 @@ function kgvid_generate_encode_checkboxes($movieurl, $post_id, $page, $blog_id =
2707
  $encodevideo_info = array();
2708
  $is_attachment = false;
2709
 
2710
- if ( !empty($movieurl) ) {
 
 
 
 
 
 
 
 
2711
 
2712
- if ( $blog_id ) { switch_to_blog($blog_id); }
2713
 
2714
  $encodevideo_info = kgvid_encodevideo_info($movieurl, $post_id);
2715
  $sanitized_url = kgvid_sanitize_url($movieurl);
2716
  $movieurl = $sanitized_url['movieurl'];
2717
  if ( get_post_type($post_id) == "attachment" ) { //if the video is in the database
2718
  $is_attachment = true;
 
2719
  $post_mime_type = get_post_mime_type($post_id);
2720
  $dimensions = kgvid_set_video_dimensions($post_id);
2721
  $actualwidth = $dimensions['actualwidth'];
2722
  $actualheight = $dimensions['actualheight'];
 
2723
  }
2724
  else { //video's not in the database
2725
  $is_attachment = false;
2726
  unset($video_formats['fullres']);
2727
 
2728
- $post_mime_type = "video/".pathinfo($movieurl, PATHINFO_EXTENSION);
 
2729
 
2730
  if ( !empty($video_encode_queue) ) {
2731
  foreach ($video_encode_queue as $video_key => $video_entry) {
@@ -2757,6 +3279,12 @@ function kgvid_generate_encode_checkboxes($movieurl, $post_id, $page, $blog_id =
2757
  }
2758
  else { $ffmpeg_disabled_text = ""; }
2759
 
 
 
 
 
 
 
2760
  $video_key = false;
2761
  if ( !empty($video_encode_queue) && !empty($movieurl) ) {
2762
  foreach ($video_encode_queue as $video_key => $video_entry) {
@@ -2788,7 +3316,12 @@ function kgvid_generate_encode_checkboxes($movieurl, $post_id, $page, $blog_id =
2788
  }
2789
  }
2790
 
2791
- $checkboxes = '<div id="attachments-'.$post_id.'-kgflashmediaplayer-encodeboxes" class="kgvid_checkboxes_section"><ul>';
 
 
 
 
 
2792
 
2793
  foreach ( $video_formats as $format => $format_stats ) {
2794
 
@@ -2810,15 +3343,31 @@ function kgvid_generate_encode_checkboxes($movieurl, $post_id, $page, $blog_id =
2810
 
2811
  if ( !empty($encodevideo_info) && !$encodevideo_info[$format]['exists'] && strpos($format, 'custom_') === 0 ) { continue; } //skip custom formats that don't exist
2812
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2813
  if ( !array_key_exists('lastline', $format_stats) ) { $format_stats['lastline'] = ''; }
2814
  $meta_array = kgvid_encode_format_meta($encodevideo_info, $video_key, $format, $format_stats['status'], $format_stats['lastline'], $post_id, $movieurl, $page);
2815
 
2816
  if ( $meta_array['something_to_encode'] == true ) { $something_to_encode = true; }
2817
  if ( $meta_array['encoding_now'] == true ) { $encoding_now = true; }
2818
 
2819
- $checkboxes .= "\n\t\t\t".'<li><input class="kgvid_encode_checkbox" type="checkbox" id="attachments-'.$post_id.'-kgflashmediaplayer-encode'.$format.'" name="attachments['.$post_id.'][kgflashmediaplayer-encode'.$format.']" '.$meta_array['checked'].' '.$ffmpeg_disabled_text.$meta_array['disabled'].'> <label for="attachments-'.$post_id.'-kgflashmediaplayer-encode'.$format.'">'.$format_stats['name'].'</label> <span id="attachments-'.$post_id.'-kgflashmediaplayer-meta'.$format.'" class="kgvid_format_meta">'.$meta_array['meta'].'</span>';
2820
 
2821
- if ( $is_attachment && empty($meta_array['disabled']) && $format != 'fullres' && $blog_id == false ) { $checkboxes .= "<span id='pick-".$post_id."-".$format."' class='button-secondary kgvid_encode_checkbox_button' data-choose='".sprintf( __('Choose %s', 'video-embed-thumbnail-generator'), $format_stats['name'] )."' data-update='".sprintf( __('Set as %s', 'video-embed-thumbnail-generator'), $format_stats['name'] )."' onclick='kgvid_pick_format(this, \"".$post_id."\", \"".esc_attr($format_stats['mime'])."\", \"".$format."\", \"".esc_attr($movieurl)."\");'>".__('Choose from Library', 'video-embed-thumbnail-generator')."</span>";
2822
  }
2823
  $checkboxes .= '</li>';
2824
 
@@ -2832,12 +3381,11 @@ function kgvid_generate_encode_checkboxes($movieurl, $post_id, $page, $blog_id =
2832
 
2833
  if ( $page == "queue" ) {
2834
  $button_text = _x('Update', 'Button text', 'video-embed-thumbnail-generator');
2835
- $checkboxes .= "\n\t\t\t".'<input type="hidden" name="attachments['.$post_id.'][kgflashmediaplayer-url]" value="'.$movieurl.'">';
2836
  }
2837
  else { $button_text = _x('Encode selected', 'Button text', 'video-embed-thumbnail-generator'); }
2838
 
2839
-
2840
- $checkboxes .= '<input type="button" id="attachments-'.$post_id.'-kgflashmediaplayer-encode" name="attachments['.$post_id.'][kgflashmediaplayer-encode]" class="button-secondary" value="'.$button_text.'" onclick="kgvid_enqueue_video_encode(\''.$post_id.'\');" '.$ffmpeg_disabled_text.$encode_disabled.'/><div style="display:block;" id="attachments-'.$post_id.'-encodeplaceholder"></div>';
2841
 
2842
  if ( $page != "queue" ) {
2843
  $checkboxes .= '<small><em>'.__('Generates additional video formats compatible with most mobile & HTML5-compatible browsers', 'video-embed-thumbnail-generator').'</em></small>';
@@ -2850,7 +3398,7 @@ function kgvid_generate_encode_checkboxes($movieurl, $post_id, $page, $blog_id =
2850
  }
2851
 
2852
  if ( !$encoding_now && ($last_format['status'] == "queued" || $last_format['status'] == "canceling") ) {
2853
- $checkboxes .= '<script type="text/javascript">percent_timeout = setTimeout(function(){ kgvid_redraw_encode_checkboxes("'.$video_entry['movieurl'].'", "'.$video_entry['attachmentID'].'", "'.$page.'") }, 5000); jQuery(\'#wpwrap\').data("KGVIDCheckboxTimeout", percent_timeout);</script>';
2854
  }
2855
 
2856
  if ( $encoding_now ) {
@@ -2859,7 +3407,7 @@ function kgvid_generate_encode_checkboxes($movieurl, $post_id, $page, $blog_id =
2859
  }
2860
  $checkboxes .= '</div>'; //close encodeboxes div
2861
 
2862
- if ( $blog_id ) { restore_current_blog(); }
2863
 
2864
  $arr = array('checkboxes'=>$checkboxes, 'encoding'=>$encoding_now );
2865
 
@@ -2895,6 +3443,7 @@ function kgvid_generate_queue_table( $scope = 'site' ) {
2895
  $html = "";
2896
  $current_user = wp_get_current_user();
2897
  $video_encode_queue = kgvid_get_encode_queue();
 
2898
 
2899
  $crons = _get_cron_array();
2900
 
@@ -2926,12 +3475,36 @@ function kgvid_generate_queue_table( $scope = 'site' ) {
2926
  $video_formats = kgvid_video_formats();
2927
  $currently_encoding = array();
2928
  $queued = array();
2929
- $nonce = wp_create_nonce('video-embed-thumbnail-generator-nonce');
2930
  $html .= "<input type='hidden' name='attachments[kgflashmediaplayer-security]' value='".$nonce."' />";
2931
 
2932
  foreach ( $video_encode_queue as $order => $video_entry ) {
2933
 
2934
- $html .= "\t<tr id='tr_".$video_entry['attachmentID']."'";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2935
 
2936
  if ( is_array($video_entry['encode_formats']) ) {
2937
  foreach ( $video_formats as $format => $format_stats ) {
@@ -2962,24 +3535,24 @@ function kgvid_generate_queue_table( $scope = 'site' ) {
2962
  elseif ( $queued[$order] ) { $html .= " class='kgvid_queued' "; }
2963
  else { $html .= " class='kgvid_complete' "; }
2964
 
2965
- if ( array_key_exists('blog_id', $video_entry) ) { $blog_id = $video_entry['blog_id']; }
2966
- else { $blog_id = false; }
2967
-
2968
  $html .= ">";
2969
 
2970
  //Order
2971
- $html .= "<td id='td_".$video_entry['attachmentID']."'>".strval(intval($order)+1)."</td>\n";
2972
 
2973
  //User
2974
- if ( (is_network_admin() || 'network' == $scope) && $blog_id ) { switch_to_blog($blog_id); }
2975
  $post = get_post( $video_entry['attachmentID'] );
2976
 
2977
  if ( ( is_network_admin() || 'network' == $scope )
2978
- || ( $post && $current_user->ID == $post->post_author )
2979
- || ( current_user_can('edit_others_video_encodes') && ( $blog_id && get_current_blog_id() == $blog_id || !$blog_id ) )
2980
- ) {
2981
 
2982
- if ( $post ) {
 
 
 
 
2983
  $user = get_userdata( $post->post_author );
2984
  $html .= "<td>".$user->display_name."</td>\n";
2985
  }
@@ -2988,7 +3561,7 @@ function kgvid_generate_queue_table( $scope = 'site' ) {
2988
  //Site
2989
  if ( (is_network_admin() || 'network' == $scope) && $blog_id ) {
2990
  $blog_details = get_bloginfo();
2991
- $html .= "<td>".$blog_details."</td>\n";
2992
  }
2993
 
2994
  //Thumbnail
@@ -3010,11 +3583,11 @@ function kgvid_generate_queue_table( $scope = 'site' ) {
3010
  $html .= "\t\t\t\t\t<td><a href='".$attachmentlink."'> ".$thumbnail_html."</a></td>\n";
3011
  $path_info = pathinfo($moviefilepath);
3012
  $file_name = basename($moviefilepath,'.'.$path_info['extension']);
3013
- $html .= "\t\t\t\t\t<td><a id='".$moviefilepath."' href='".$attachmentlink."'>".urldecode($file_name)."</a><input type='hidden' name='attachments[".$video_entry['attachmentID']."][kgflashmediaplayer-url]' value='".$video_entry['movieurl']."'></td>\n";
3014
 
3015
  //Formats
3016
  $html .= "\t\t\t\t\t<td class='queue_encode_formats' id='formats_".$video_entry['attachmentID']."'>";
3017
- $html .= "<input type='hidden' id='attachments-".$video_entry['attachmentID']."-kgflashmediaplayer-security' name='attachments[".$video_entry['attachmentID']."][kgflashmediaplayer-security]' value='".$nonce."' />";
3018
 
3019
  if ( is_array($video_entry['encode_formats']) ) { $checkboxes = kgvid_generate_encode_checkboxes($video_entry['movieurl'], $video_entry['attachmentID'], 'queue', $blog_id); }
3020
  else { $checkboxes = array('checkboxes' => __('Please wait while this video is automatically added to the queue...', 'video-embed-thumbnail-generator') ); }
@@ -3023,20 +3596,25 @@ function kgvid_generate_queue_table( $scope = 'site' ) {
3023
 
3024
  //Actions
3025
  $html .= "\t\t\t\t\t<td>";
3026
- $html .= "<a id='clear_".$video_entry['attachmentID']."' class='submitdelete' href='javascript:void(0)' onclick='kgvid_encode_queue(\"delete\", ".$order.", ".$video_entry['attachmentID'].")'";
3027
  if ( $currently_encoding[$order] ) { $html .= " style='display:none;'"; }
3028
  $html .= ">Clear</a>";
3029
 
3030
  }//end if current user can see this stuff
3031
-
3032
- else { $html .= "<td colspan='".strval($total_columns-1)."'><strong class='kgvid_queue_message'>".__("Other user's video", 'video-embed-thumbnail-generator')."</strong></td>"; }
 
 
 
 
3033
  $html .= "</td></tr>\n";
3034
 
3035
  if ( (is_network_admin() || 'network' == $scope) && $blog_id ) { restore_current_blog(); }
3036
 
3037
  }
3038
  }
3039
- else { $html = "\t<tr><td colspan='".strval($total_columns)."'><strong class='kgvid_queue_message'>".__('Queue is empty', 'video-embed-thumbnail-generator')."</strong></td></tr>\n"; }
 
3040
 
3041
  return $html;
3042
 
@@ -3059,10 +3637,12 @@ add_action('network_admin_menu', 'kgvid_add_network_queue_page');
3059
 
3060
  function kgvid_FFMPEG_Queue_Page() {
3061
 
 
 
3062
  ?>
3063
  <div class="wrap">
3064
  <div id="icon-tools" class="icon32"><br /></div>
3065
- <h2><?php _e('Video Embed & Thumbnail Generator Encoding Queue', 'video-embed-thumbnail-generator') ?></h2>
3066
  <p></p>
3067
  <form method="post" action="tools.php?page=kgvid_video_encoding_queue">
3068
  <?php wp_nonce_field('video-embed-thumbnail-generator-nonce','video-embed-thumbnail-generator-nonce'); ?>
@@ -3079,7 +3659,7 @@ function kgvid_FFMPEG_Queue_Page() {
3079
  </tbody>
3080
  </table>
3081
  <p>
3082
- <?php if ( current_user_can('edit_others_video_encodes') ) { echo "<div class='attachment-info'><div class='actions'><a href='javascript:void(0)' onclick='kgvid_encode_queue(\"clear_completed\", 0, 0);'>". __('Clear All Completed', 'video-embed-thumbnail-generator') ."</a> | <a href='javascript:void(0)' onclick='kgvid_encode_queue(\"clear_queued\", 0, 0);'>". __('Clear All Queued', 'video-embed-thumbnail-generator') ."</a></div></div>"; } ?>
3083
  </p>
3084
  </form>
3085
  </div>
@@ -3140,7 +3720,7 @@ function kgvid_network_settings_page() {
3140
  ?>
3141
  <div class="wrap">
3142
  <div class="icon32" id="icon-options-general"><br></div>
3143
- <h2>Video Embed & Thumbnail Generator Network Settings</h2>
3144
  <?php settings_errors( __FILE__ ); ?>
3145
  <form method="post">
3146
  <input type="hidden" name="action" value="update_kgvid_network_settings" />
@@ -3188,6 +3768,7 @@ function kgvid_network_settings_page() {
3188
  <script type='text/javascript'>
3189
  jQuery(document).ready(function() {
3190
  kgvid_hide_plugin_settings();
 
3191
  jQuery('form :input').change(function() {
3192
  kgvid_save_plugin_settings(this);
3193
  });
@@ -3201,7 +3782,29 @@ function kgvid_network_settings_page() {
3201
  function kgvid_superadmin_capabilities_callback() {
3202
 
3203
  $network_options = get_site_option('kgvid_video_embed_network_options');
3204
- echo "<input ".checked( $network_options['superadmin_only_ffmpeg_settings'], "on", false )." id='superadmin_only_ffmpeg_settings' name='kgvid_video_embed_options[superadmin_only_ffmpeg_settings]' type='checkbox' /> <label for='superadmin_only_ffmpeg_settings'>".sprintf( _x('%s settings tab.', 'FFMPEG settings tab', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($network_options['video_app'])."</strong>" )."</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__( sprintf( 'Only Super admins will be allowed to view and modify %s settings.', "<strong class='video_app_name'>".strtoupper($network_options['video_app'])."</strong>" ), 'video-embed-thumbnail-generator' )."</span></a>\n\t";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3205
 
3206
  }
3207
 
@@ -3219,7 +3822,7 @@ function kgvid_settings_page() {
3219
  ?>
3220
  <div class="wrap">
3221
  <div class="icon32" id="icon-options-general"><br></div>
3222
- <h2>Video Embed & Thumbnail Generator</h2>
3223
  <?php if ( !is_multisite()
3224
  || ( function_exists( 'is_plugin_active_for_network' ) && is_plugin_active_for_network( plugin_basename(__FILE__) ) && $options['ffmpeg_exists'] == "on" && is_array($network_options) && (is_super_admin() || $network_options['superadmin_only_ffmpeg_settings'] == false) )
3225
  ) { ?>
@@ -3284,9 +3887,18 @@ function kgvid_video_embed_options_init() {
3284
  }//end setting initial network options
3285
  else { //network options introduced in version 4.3 exist already
3286
 
 
 
3287
  if ( !array_key_exists('superadmin_only_ffmpeg_settings', $network_options) ) {
3288
  $default_network_options = kgvid_default_network_options();
3289
  $network_options['superadmin_only_ffmpeg_settings'] = $default_network_options['superadmin_only_ffmpeg_settings'];
 
 
 
 
 
 
 
3290
  update_site_option('kgvid_video_embed_network_options', $network_options);
3291
  }
3292
 
@@ -3355,10 +3967,10 @@ function kgvid_video_embed_options_init() {
3355
  add_settings_field('playbutton', __('Play button overlay:', 'video-embed-thumbnail-generator'), 'kgvid_playbutton_callback', __FILE__, 'kgvid_video_embed_flash_settings', array( 'label_for' => 'playbutton' ) );
3356
 
3357
  add_settings_field('generate_thumbs', __('Default number of thumbnails to generate:', 'video-embed-thumbnail-generator'), 'kgvid_generate_thumbs_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'generate_thumbs' ) );
3358
- add_settings_field('user_roles', __('User capabilities:', 'video-embed-thumbnail-generator'), 'kgvid_user_roles_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'user_roles' ) );
3359
- add_settings_field('security', __('Video security:', 'video-embed-thumbnail-generator'), 'kgvid_security_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'embeddable' ) );
3360
  add_settings_field('featured', __('Featured image:', 'video-embed-thumbnail-generator'), 'kgvid_featured_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'featured' ) );
3361
  add_settings_field('thumb_parent', __('Attach thumbnails to:', 'video-embed-thumbnail-generator'), 'kgvid_thumb_parent_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'thumb_parent' ) );
 
3362
  add_settings_field('delete_children', __('Delete associated attachments:', 'video-embed-thumbnail-generator'), 'kgvid_delete_children_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'delete_children' ) );
3363
  add_settings_field('titlecode', __('Video title text HTML formatting:', 'video-embed-thumbnail-generator'), 'kgvid_titlecode_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'titlecode' ) );
3364
  add_settings_field('template', __('Attachment page design:', 'video-embed-thumbnail-generator'), 'kgvid_template_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'template' ) );
@@ -3372,6 +3984,7 @@ function kgvid_video_embed_options_init() {
3372
  add_settings_field('encode_formats', __('Default video encode formats:', 'video-embed-thumbnail-generator'), 'kgvid_encode_formats_callback', __FILE__, 'kgvid_video_embed_encode_settings');
3373
  add_settings_field('automatic', __('Do automatically on upload:', 'video-embed-thumbnail-generator'), 'kgvid_automatic_callback', __FILE__, 'kgvid_video_embed_encode_settings', array( 'label_for' => 'auto_encode' ) );
3374
  add_settings_field('old_videos', __('For previously uploaded videos:', 'video-embed-thumbnail-generator'), 'kgvid_old_video_buttons_callback', __FILE__, 'kgvid_video_embed_encode_settings' );
 
3375
  add_settings_field('htaccess', __('htaccess login:', 'video-embed-thumbnail-generator'), 'kgvid_htaccess_callback', __FILE__, 'kgvid_video_embed_encode_settings', array( 'label_for' => 'htaccess_username' ) );
3376
  add_settings_field('ffmpeg_watermark', __('Add watermark to encoded files:', 'video-embed-thumbnail-generator'), 'kgvid_ffmpeg_watermark_callback', __FILE__, 'kgvid_video_embed_encode_settings', array( 'label_for' => 'ffmpeg_watermark' ) );
3377
  if ( !is_plugin_active_for_network( plugin_basename(__FILE__) ) ) {
@@ -3415,7 +4028,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3415
  //add the JW Player if available
3416
  $jw_player_select = "";
3417
  if ( class_exists('JWP6_Shortcode') ) {
3418
- $players["JW Player"] = "JW Player";
3419
  $jw_players = get_option('jwp6_players');
3420
  if ( count($jw_players) > 1 ) {
3421
  $jw_player_select = " <div style='display:none;' id='jw_player_id_select'><select class='affects_player' onchange='kgvid_hide_plugin_settings();' id='jw_player_id' name='kgvid_video_embed_options[jw_player_id]'>";
@@ -3428,7 +4041,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3428
  else { $jw_player_config_description = $jw_player_id; }
3429
  $jw_player_select .= "<option value='$jw_player_id' $selected>".stripcslashes($jw_player_config_description)."</option>";
3430
  }
3431
- $jw_player_select .= "</select> JW Player player</div>";
3432
  }
3433
  }
3434
 
@@ -3439,15 +4052,19 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3439
  $selected = ($options['embed_method']==$value) ? 'selected="selected"' : '';
3440
  echo "<option value='$value' $selected>$name</option>";
3441
  }
3442
- echo "</select> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Video.js is the default player. Users running WordPress 3.6 or higher can choose the WordPress Default Mediaelement.js player which may already be skinned to match your theme. If the JW Player WordPress plugin is active it should be available as a video player. In the past this plugin used Adobe\'s Strobe Media Playback Flash player, which hasn\'t been updated since 2011 and is not recommended. It should still work, but new plugin functions are not guaranteed to be compatible.', 'video-embed-thumbnail-generator')."</span></a>".$jw_player_select."</td></tr></tbody></table>\n";
3443
 
3444
  $sampleheight = intval($options['height']) + 50;
3445
  echo "<div class='kgvid_setting_nearvid' style='width:".$options['width']."px;'>";
3446
- echo "<div style='float:left;'><input class='affects_player' ".checked( $options['overlay_title'], "on", false )." id='overlay_title' name='kgvid_video_embed_options[overlay_title]' type='checkbox' /> <label for='overlay_title'>".__('Overlay video title', 'video-embed-thumbnail-generator')."</label></div>";
3447
- echo "<div style='float:right;'><input class='affects_player' ".checked( $options['overlay_embedcode'], "on", false )." id='overlay_embedcode' name='kgvid_video_embed_options[overlay_embedcode]' type='checkbox' ".$embed_disabled."/> <label for='overlay_embedcode'>".__('Overlay embed code', 'video-embed-thumbnail-generator')."</label></div>";
 
 
 
 
 
3448
  $iframeurl = site_url('/')."?kgvid_video_embed[enable]=true&kgvid_video_embed[sample]=true";
3449
  echo "<iframe id='kgvid_samplevideo' style='border:2px;' src='".$iframeurl."' scrolling='no' width='".$options['width']."' height='".$sampleheight."'></iframe>";
3450
- echo "<div style='float:left;'><input class='affects_player' ".checked( $options['downloadlink'], "on", false )." id='downloadlink' name='kgvid_video_embed_options[downloadlink]' type='checkbox' /> <label for='downloadlink'>".__('Show download link', 'video-embed-thumbnail-generator')."</label></div>";
3451
  echo "<div style='float:right;'><input class='affects_player' ".checked( $options['view_count'], "on", false )." id='view_count' name='kgvid_video_embed_options[view_count]' type='checkbox' /> <label for='view_count'>".__('Show view count', 'video-embed-thumbnail-generator')."</label></div>";
3452
  echo "<hr style='width:100%;'></div>\n\t";
3453
  }
@@ -3506,22 +4123,29 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3506
 
3507
  function kgvid_resize_callback() {
3508
  $options = kgvid_get_options();
3509
- echo "<input ".checked( $options['resize'], "on", false )." id='resize' name='kgvid_video_embed_options[resize]' type='checkbox' /> <label for='resize'>".__('Make video player responsive.', 'video-embed-thumbnail-generator')."</label><br />";
 
3510
  $items = array( __("automatic", 'video-embed-thumbnail-generator'), __("highest", 'video-embed-thumbnail-generator'), __("lowest", 'video-embed-thumbnail-generator') );
3511
- echo __('Default playback resolution', 'video-embed-thumbnail-generator')." <select id='auto_res' name='kgvid_video_embed_options[auto_res]'>";
3512
- foreach($items as $name ) {
 
 
 
 
 
3513
  $selected = ($options['auto_res']==$name) ? 'selected="selected"' : '';
3514
  echo "<option value='$name' $selected>$name</option>";
3515
  }
3516
- echo "</select> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('If multiple H.264 resolutions for a video are available, you can choose to load the highest or lowest available resolution by default, or automatically select the resolution based on the size of the video window.', 'video-embed-thumbnail-generator')."</span></a>\n\t";
 
3517
 
3518
  }
3519
 
3520
  function kgvid_dimensions_callback() {
3521
  $options = kgvid_get_options();
3522
  echo __('Width:', 'video-embed-thumbnail-generator')." <input class='small-text affects_player' id='width' name='kgvid_video_embed_options[width]' type='text' value='".$options['width']."' /> ".__('Height:', 'video-embed-thumbnail-generator')." <input class='small-text affects_player' id='height' name='kgvid_video_embed_options[height]' type='text' value='".$options['height']."' /><br />";
3523
- echo "<input ".checked( $options['minimum_width'], "on", false )." id='minimum_width' name='kgvid_video_embed_options[minimum_width]' type='checkbox' /> <label for='minimum_width'>".__('Enlarge lower resolution videos to max width.', 'video-embed-thumbnail-generator')."</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Usually if a video\'s resolution is less than the max width, the video player is set to the actual width of the video. Enabling this will always set the same width regardless of the quality of the video. When necessary you can override by setting the dimensions manually.', 'video-embed-thumbnail-generator')."</span></a><br />";
3524
- echo "<input ".checked( $options['fullwidth'], "on", false )." id='fullwidth' name='kgvid_video_embed_options[fullwidth]' type='checkbox' /> <label for='fullwidth'>".__('Set all videos to expand to fill their containers.', 'video-embed-thumbnail-generator')."</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Enabling this will ignore any other width settings and set the width of the video to the width of the container it\'s in.', 'video-embed-thumbnail-generator')."</span></a><br />";
3525
  echo "<input ".checked( $options['inline'], "on", false )." id='inline' name='kgvid_video_embed_options[inline]' type='checkbox' /> <label for='inline'>".__('Allow other content on the same line as the video.', 'video-embed-thumbnail-generator')."</label>\n\t";
3526
  }
3527
 
@@ -3600,7 +4224,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3600
  $selected = ($options['preload']==$value) ? 'selected="selected"' : '';
3601
  echo "<option value='$value' $selected>$name</option>";
3602
  }
3603
- echo "</select><a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>"._x('Controls how much of a video to load before the user starts playback. Mobile browsers never preload any video information. Selecting "metadata" will load the height and width and format information along with a few seconds of the video in some desktop browsers. "Auto" will preload nearly a minute of video in most desktop browsers. "None" will prevent all data from preloading.', 'Suggest not translating the words in quotation marks', 'video-embed-thumbnail-generator')."</span></a>\n\t";
3604
  }
3605
 
3606
  function kgvid_js_skin_callback() {
@@ -3610,7 +4234,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3610
 
3611
  function kgvid_nativecontrolsfortouch_callback() {
3612
  $options = kgvid_get_options();
3613
- echo "<input class='affects_player' ".checked( $options['nativecontrolsfortouch'], "on", false )." id='nativecontrolsfortouch' name='kgvid_video_embed_options[nativecontrolsfortouch]' type='checkbox' /> <label for='nativecontrolsfortouch'>".__('Show native controls on mobile devices.', 'video-embed-thumbnail-generator')."</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Native controls allow for streaming services like AirPlay and Chromecast, but don\'t always look as nice.', 'video-embed-thumbnail-generator')."</span></a>\n\t";
3614
  }
3615
 
3616
  function kgvid_custom_attributes_callback() {
@@ -3679,11 +4303,33 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3679
  echo "<input class='small-text' id='generate_thumbs' name='kgvid_video_embed_options[generate_thumbs]' maxlength='2' type='text' value='".strval($options['generate_thumbs'])."' />\n\t";
3680
  }
3681
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3682
  function kgvid_user_roles_callback($page_scope = 'site') {
3683
  global $wp_roles;
3684
  $options = kgvid_get_options();
3685
  $capabilities_checkboxes = array();
3686
- $capabilities = array( 'make_video_thumbnails'=>__('Can make thumbnails', 'video-embed-thumbnail-generator'), 'encode_videos'=>__('Can encode videos', 'video-embed-thumbnail-generator'), 'edit_others_video_encodes' => __('Can view & modify other users encode queue', 'video-embed-thumbnail-generator') );
3687
  foreach ( $capabilities as $capability => $capability_name ) {
3688
  $capabilities_checkboxes[] = "<div class='kgvid_user_roles'><strong>".$capability_name.":</strong><br>";
3689
 
@@ -3719,23 +4365,6 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3719
  echo implode("", $capabilities_checkboxes)."\n\t";
3720
  }
3721
 
3722
- function kgvid_security_callback() {
3723
- $options = kgvid_get_options();
3724
- if ( $options['embeddable'] != "on" ) { $embed_disabled = " disabled='disabled'"; }
3725
- else { $embed_disabled = ""; }
3726
- echo "<input class='affects_player' ".checked( $options['embeddable'], "on", false )." id='embeddable' name='kgvid_video_embed_options[embeddable]' type='checkbox' onclick='kgvid_embeddable_switch(this.checked);' /> <label for='embeddable'>".__('Allow users to embed your videos on other sites.', 'video-embed-thumbnail-generator')."</label><br />";
3727
- echo "<input ".checked( $options['open_graph'], "on", false )." id='open_graph' name='kgvid_video_embed_options[open_graph]' type='checkbox'".$embed_disabled." /> <label for='open_graph'>"._x('Enable Open Graph video tags.', '"Open Graph" is a proper noun and might not need translation', 'video-embed-thumbnail-generator')."</label><a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Facebook and some other social media sites will use these tags to embed the first video in your post. For the majority of Facebook users who have enabled secure browsing, your video must be served via https in order to be embedded directly on the page.', 'video-embed-thumbnail-generator')."</span></a><br />";
3728
- echo "<input ".checked( $options['oembed_provider'], "on", false )." id='oembed_provider' name='kgvid_video_embed_options[oembed_provider]' type='checkbox'".$embed_disabled." /> <label for='oembed_provider'>"._x('Enable oEmbed provider.', '"oEmbed" is a proper noun and might not need translation', 'video-embed-thumbnail-generator')."</label><a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Allows users of other websites to embed your videos using just the post URL rather than the full iframe embed code. For security reasons, this will not work on other WordPress sites unless they\'ve enabled oEmbed discovery from unkown providers.', 'video-embed-thumbnail-generator')."</span></a><br />";
3729
- echo "<input ".checked( $options['oembed_security'], "on", false )." id='oembed_security' name='kgvid_video_embed_options[oembed_security]' type='checkbox' /> <label for='oembed_security'>"._x('Enable oEmbeds from unknown providers.', '"oEmbed" is a proper noun and might not need translation', 'video-embed-thumbnail-generator')."</label><a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Allows your own users to embed content from any oEmbed provider. User must have the "unfiltered_html" capability which is limited to Administrators and Editors by default.', 'video-embed-thumbnail-generator')."</span></a><br />";
3730
- echo "<input class='affects_player' ".checked( $options['right_click'], "on", false )." id='right_click' name='kgvid_video_embed_options[right_click]' type='checkbox' /> <label for='right_click'>".__('Allow right-clicking on videos.', 'video-embed-thumbnail-generator')."</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('We can\'t prevent a user from simply saving the downloaded video file from the browser\'s cache, but disabling right-clicking will make it more difficult for casual users to save your videos.', 'video-embed-thumbnail-generator')."</span></a><br />";
3731
- echo "<input ".checked( $options['click_download'], "on", false )." id='click_download' name='kgvid_video_embed_options[click_download]' type='checkbox' /> <label for='click_download'>".__('Allow single-click download link for videos.', 'video-embed-thumbnail-generator')."</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('The plugin creates a one-click method for users who want to allow easy video downloading, but if some of your videos are hidden or private, depending on the methods you use, someone who guesses a video\'s WordPress database ID could potentially use the method to download videos they might not otherwise have access to.', 'video-embed-thumbnail-generator')."</span></a>\n\t";
3732
- }
3733
-
3734
- function kgvid_featured_callback() {
3735
- $options = kgvid_get_options();
3736
- echo "<input ".checked( $options['featured'], "on", false )." id='featured' name='kgvid_video_embed_options[featured]' type='checkbox' /> <label for='featured'>".__('Set generated video thumbnails as featured images.', 'video-embed-thumbnail-generator')."</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('If your theme uses the featured image meta tag, this will automatically set a video\'s parent post\'s featured image to the most recently saved thumbnail image.', 'video-embed-thumbnail-generator')."</span></a><br /> <a class='button-secondary' href='javascript:void(0);' onclick='kgvid_set_all_featured();'>"._x('Set all as featured', 'implied "Set all thumbnails as featured"', 'video-embed-thumbnail-generator')."</a> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('If you\'ve generated thumbnails before enabling this option, this will set all existing thumbnails as featured images. Be careful!', 'video-embed-thumbnail-generator')."</span></a>\n\t";
3737
- }
3738
-
3739
  function kgvid_thumb_parent_callback() {
3740
  $options = kgvid_get_options();
3741
  $items = array("post", "video");
@@ -3744,7 +4373,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3744
  $selected = ($options['thumb_parent']==$item) ? 'selected="selected"' : '';
3745
  echo "<option value='$item' $selected>$item</option>";
3746
  }
3747
- echo "</select> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('This depends on your theme. Thumbnails generated by the plugin can be saved as children of the video attachment or the post. Some themes use an image attached to a post instead of the built-in featured image meta tag. Version 3.x of this plugin saved all thumbnails as children of the video.', 'video-embed-thumbnail-generator')."</span></a><br /> <a class='button-secondary' href='javascript:void(0);' onclick='kgvid_switch_parents();'>".__('Set all parents', 'video-embed-thumbnail-generator')."</a> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('If you\'ve generated thumbnails before changing this option, this will set all existing thumbnails as children of your currently selected option.', 'video-embed-thumbnail-generator')."</span></a>\n\t";
3748
  }
3749
 
3750
  function kgvid_delete_children_callback() {
@@ -3758,12 +4387,12 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3758
  $selected = ($options['delete_children']==$value) ? 'selected="selected"' : '';
3759
  echo "<option value='$value' $selected>$name</option>";
3760
  }
3761
- echo "</select> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('If you delete the original video you can choose to delete all associated attachments (thumbnails & videos) or keep the thumbnail.', 'video-embed-thumbnail-generator')."</span></a>\n\t";
3762
  }
3763
 
3764
  function kgvid_titlecode_callback() {
3765
  $options = kgvid_get_options();
3766
- echo "<input class='regular-text code' id='titlecode' name='kgvid_video_embed_options[titlecode]' type='text' value='".htmlentities(stripslashes($options['titlecode']))."' /> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".sprintf( __('HTML tag applied to titles inserted above the video. Examples: %s. Corresponding closing tags will be applied to the end of the title automatically.', 'video-embed-thumbnail-generator'), "&lt;strong&gt;, &lt;em&gt;, &lt;H2&gt;, &lt;span class='videotitle'&gt;")."</span></a>\n\t";
3767
  }
3768
 
3769
  function kgvid_template_callback() {
@@ -3774,7 +4403,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3774
  $selected = ($options['template']==$value) ? 'selected="selected"' : '';
3775
  echo "<option value='$value' $selected>$name</option>";
3776
  }
3777
- echo "</select> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('The plugin can filter your media attachment page to display videos using your chosen settings, or completely replace your attachment template to show only the video. If you were one of the few people using iframe embed codes before version 4.0 of this plugin then you should continue to use "Video only" but otherwise it\'s not recommended.', 'video-embed-thumbnail-generator')."</span></a>\n\t";
3778
  }
3779
 
3780
  function kgvid_encode_settings_section_callback() {
@@ -3788,7 +4417,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3788
  function kgvid_app_path_callback() {
3789
  $options = kgvid_get_options();
3790
  //if ( is_plugin_active_for_network( plugin_basename(__FILE__) ) ) { $options = get_site_option( 'kgvid_video_embed_network_options' ); }
3791
- echo "<input class='affects_ffmpeg regular-text code' id='app_path' data-ffmpeg_exists='".$options['ffmpeg_exists']."' name='kgvid_video_embed_options[app_path]' type='text' value='".$options['app_path']."' /><a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".sprintf( __('This should be the folder where applications are installed on your server, not a direct path to an application, so it doesn\'t usually end with %1$s. Example: %2$s.', 'video-embed-thumbnail-generator'), "<code><strong class='video_app_name'>".strtoupper($options['video_app'])."</strong></code>", "<code>/usr/local/bin</code>" )."\n\t";
3792
  }
3793
 
3794
  function kgvid_video_app_callback() {
@@ -3800,7 +4429,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3800
  $selected = ($options['video_app']==$value) ? 'selected="selected"' : '';
3801
  echo "<option value='$value' $selected>$name</option>";
3802
  }
3803
- echo "</select> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('FFMPEG split into two separate branches in 2011. The new branch is called LIBAV and executes using "avconv" instead of "ffmpeg." Both are still actively developed and FFMPEG frequently incorporates LIBAV features. Debian & Ubuntu users probably have LIBAV installed.', 'video-embed-thumbnail-generator')."</span></a>\n\t";
3804
  }
3805
 
3806
  function kgvid_browser_thumbnails_callback() {
@@ -3822,7 +4451,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3822
  echo "<div class='kgvid_video_app_required'>";
3823
  echo "<input ".checked( $options['encode_fullres'], "on", false )." id='encode_fullres' name='kgvid_video_embed_options[encode_fullres]' type='checkbox' /> <label for='encode_fullres'>".__('Replace original with', 'video-embed-thumbnail-generator');
3824
 
3825
- echo " <select id='replace_format' name='kgvid_video_embed_options[replace_format]' class='affects_ffmpeg'>";
3826
  foreach($items as $value=>$name) {
3827
  $selected = ($options['replace_format']==$value) ? 'selected="selected"' : '';
3828
  echo "<option value='$value' $selected>$name</option>";
@@ -3830,7 +4459,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3830
  echo "</select> ";
3831
 
3832
 
3833
- echo "</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('If you have FFMPEG/LIBAV and the proper libraries installed, you can choose to replace your uploaded video with your preferred format, and also transcode into as many as seven additional formats depending on the resolution of your original source. Different browsers have different playback capabilities. Most desktop browsers can play H.264, and all modern mobile devices can play at least 360p H.264. If you create multiple H.264 resolutions, the highest resolution supported by the device will be served up automatically. The plugin will not upconvert your video, so if you upload a 720p video, it will not waste your time creating a 1080p version. There was a time when it seemed like a good idea to provide OGV or WEBM for some desktop browsers, but even Firefox allows H.264 playback on most operating systems now. I no longer recommend encoding OGV or WEBM unless you expect a large number of no-Flash sticklers visiting your site. WEBM VP9 is a new technology and requires a version of FFMPEG or LIBAV newer than October 2013.', 'video-embed-thumbnail-generator')."</span></a><br />";
3834
  echo "<input ".checked( $options['encode_1080'], "on", false )." id='encode_1080' name='kgvid_video_embed_options[encode_1080]' type='checkbox' /> <label for='encode_1080'>1080p H.264 <small><em>".__('(iPhone 4s+, iPad 2+, modern Android, Windows Phone 8, Chrome, Safari, IE 9+, Firefox)', 'video-embed-thumbnail-generator')."</em></small></label><br />";
3835
  echo "<input ".checked( $options['encode_720'], "on", false )." id='encode_720' name='kgvid_video_embed_options[encode_720]' type='checkbox' /> <label for='encode_720'>720p H.264 <small><em>".__('(iPhone 4+, iPad, most Android, Chrome, Safari, IE 9+, Firefox)', 'video-embed-thumbnail-generator')."</em></small></label><br />";
3836
  echo "<input ".checked( $options['encode_mobile'], "on", false )." id='encode_mobile' name='kgvid_video_embed_options[encode_mobile]' type='checkbox' /> <label for='encode_mobile'>360p H.264 <small><em>(iOS, Android, Windows Phone 7+, Chrome, Safari, IE 9+, Firefox)</em></small></label><br />";
@@ -3870,8 +4499,10 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3870
 
3871
  function kgvid_automatic_callback() {
3872
  $options = kgvid_get_options();
 
3873
  echo "<div class='kgvid_video_app_required'>";
3874
  echo "<input ".checked( $options['auto_encode'], "on", false )." id='auto_encode' name='kgvid_video_embed_options[auto_encode]' type='checkbox' /> <label for='auto_encode'>".__('Encode formats selected above.', 'video-embed-thumbnail-generator')."</label><br />";
 
3875
  if ( intval($options['auto_thumb_number']) == 1 ) {
3876
  $items = array(0, 25, 50, 75);
3877
  $percentage_select = "<select id='auto_thumb_position' name='kgvid_video_embed_options[auto_thumb_position]'>";
@@ -3891,8 +4522,32 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3891
  function kgvid_old_video_buttons_callback() {
3892
  $options = kgvid_get_options();
3893
  echo "<div class='kgvid_video_app_required'>";
3894
- echo "<p><a id='generate_old_thumbs_button' class='button-secondary' href='javascript:void(0);' onclick='kgvid_auto_generate_old(\"thumbs\");'>".__('Generate thumbnails', 'video-embed-thumbnail-generator')."</a> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".sprintf( __('Use %s to automatically generate thumbnails for every video in the Media Library that doesn\'t already have them. Uses the automatic thumbnail settings above. This could take a very long time if you have a lot of videos. Proceed with caution!', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></a></p>";
3895
- echo "<p><a id='generate_old_encode_button' class='button-secondary' href='javascript:void(0);' onclick='kgvid_auto_generate_old(\"encode\");'>".__('Encode videos', 'video-embed-thumbnail-generator')."</a> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".sprintf( __('Add every video in the Media Library to the encode queue if it hasn\'t already been encoded. Uses the default encode formats chosen above.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></a></p>";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3896
  echo "</div>\n\t";
3897
  }
3898
 
@@ -3900,7 +4555,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3900
  $options = kgvid_get_options();
3901
  echo "<div class='kgvid_video_app_required'>";
3902
  echo "<table class='kgvid_htaccess'><tbody><tr><td>".__('Username:', 'video-embed-thumbnail-generator')."</td><td><input class='regular-text affects_ffmpeg' id='htaccess_login' name='kgvid_video_embed_options[htaccess_login]' type='text' value='".$options['htaccess_login']."' /></td></tr>";
3903
- echo "<tr><td>".__('Password:', 'video-embed-thumbnail-generator')."</td><td><input class='regular-text affects_ffmpeg' id='htaccess_password' name='kgvid_video_embed_options[htaccess_password]' type='text' value='".$options['htaccess_password']."' /> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".sprintf( __('If your videos are htaccess protected, %s will access them using these credentials.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></a></td></tr></tbody></table>";
3904
  echo "</div>\n\t";
3905
  }
3906
 
@@ -3939,12 +4594,12 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3939
  if ( empty($options['moov_path']) ) { $options['moov_path'] = $options['app_path']; }
3940
  echo "<div class='kgvid_video_app_required'>";
3941
  $items = array(__("none", 'video-embed-thumbnail-generator')=>"none", "movflags faststart"=>"movflag", "qt-faststart"=>"qt-faststart", "MP4Box"=>"MP4Box");
3942
- echo "<select onchange='kgvid_hide_plugin_settings()' id='moov' name='kgvid_video_embed_options[moov]' class='affects_ffmpeg'>";
3943
  foreach($items as $name => $value) {
3944
  $selected = ($options['moov']==$value) ? 'selected="selected"' : '';
3945
  echo "<option value='$value' $selected>$name</option>";
3946
  }
3947
- echo "</select> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".sprintf( __('By default %1$s places moov atoms at the end of H.264 encoded files, which forces the entire file to download before playback can start and can prevent Flash players from playing them at all. Since approximately October 2012 %1$s can fix the problem at the end of the encoding process by using the option `movflags faststart`. This is the easiest and fastest way to correct the problem, but older versions of %1$s will not work if you select the movflags option. If you can\'t update to a new version of %1$s, select qt-faststart or MP4Box which will run after encoding is finished if they are installed on your server.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>")."</span></a>";
3948
  echo "<p id='moov_path_p'>".sprintf( __('Path to %s:', 'video-embed-thumbnail-generator'), "<span class='kgvid_moov_option'>".$options['moov']."</span>")." <input class='regular-text code affects_ffmpeg' id='moov_path' name='kgvid_video_embed_options[moov_path]' type='text' value='".$options['moov_path']."' /></p>";
3949
  echo "</div>\n\t";
3950
  }
@@ -3958,7 +4613,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3958
  $selected = ($options['rate_control']==$value) ? 'selected="selected"' : '';
3959
  echo "<option value='$value' $selected>$name</option>";
3960
  }
3961
- echo "</select> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Constant Rate Factor (CRF) attempts to maintain a particular quality output for the entire video and only uses bits the encoder determines are necessary. Average Bit Rate is similar to the method used in older versions of this plugin. If CRF is selected, WEBM encoding will also use the ABR setting to set a max bit rate 25% higher than the ABR. Without a max bit rate setting WEBM files are terrible quality.', 'video-embed-thumbnail-generator')."</span></a>";
3962
  echo "</div>\n\t";
3963
  }
3964
 
@@ -3970,21 +4625,21 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3970
  $selected = ($options['h264_CRF']==$i) ? 'selected="selected"' : '';
3971
  echo "<option value='".$i."' $selected>".$i."</option>";
3972
  }
3973
- echo "</select> H.264 <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Lower values are higher quality. 18 is considered visually lossless. Default is 23.', 'video-embed-thumbnail-generator')."</span></a><br />";
3974
 
3975
  echo "<select id='webm_CRF' name='kgvid_video_embed_options[webm_CRF]' class='affects_ffmpeg'>";
3976
  for ($i = 4; $i <= 63; $i++ ) {
3977
  $selected = ($options['webm_CRF']==$i) ? 'selected="selected"' : '';
3978
  echo "<option value='".$i."' $selected>".$i."</option>";
3979
  }
3980
- echo "</select> WEBM <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Lower values are higher quality. Default is 10.', 'video-embed-thumbnail-generator')."</span></a><br />\n\t";
3981
 
3982
  echo "<select id='ogv_CRF' name='kgvid_video_embed_options[ogv_CRF]' class='affects_ffmpeg'>";
3983
  for ($i = 1; $i <= 10; $i++ ) {
3984
  $selected = ($options['ogv_CRF']==$i) ? 'selected="selected"' : '';
3985
  echo "<option value='".$i."' $selected>".$i."</option>";
3986
  }
3987
- echo "</select> OGV (qscale) <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Higher values are higher quality. Default is 6.', 'video-embed-thumbnail-generator')."</span></a>";
3988
  echo "</div>\n\t";
3989
  }
3990
 
@@ -3996,7 +4651,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
3996
  $selected = ($options['bitrate_multiplier']==strval($i)) ? 'selected="selected"' : '';
3997
  echo "<option value='$i' $selected>$i</option>";
3998
  }
3999
- echo "</select> ".__('bits per pixel.', 'video-embed-thumbnail-generator')." <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Default is 0.1', 'video-embed-thumbnail-generator')."</span></a><br />";
4000
  echo "<span class='kgvid_gray_text'>1080p = <span id='1080_bitrate'>".round(floatval($options['bitrate_multiplier'])*1920*1080*30/1024)."</span> kbps<br />";
4001
  echo "720p = <span id='720_bitrate'>".round(floatval($options['bitrate_multiplier'])*1280*720*30/1024)."</span> kbps<br />";
4002
  echo "360p = <span id='360_bitrate'>".round(floatval($options['bitrate_multiplier'])*640*360*30/1024)."</span> kbps</span>";
@@ -4012,14 +4667,14 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
4012
  $selected = ($options['h264_profile']==$item) ? 'selected="selected"' : '';
4013
  echo "<option value='$item' $selected>$item</option>";
4014
  }
4015
- echo "</select> "._x('profile', 'H.264 profile. Might not need translation', 'video-embed-thumbnail-generator')." <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Lower profiles will slightly increase file sizes. This mostly depends on your need for compatability with Android devices. Main profile seems to work on recent phones, although officially Android only supports baseline. High profile is not recommended for mobile or Flash compatibility, and anything above high is designed for professional video and probably incompatible with consumer devices. Older versions of FFMPEG might ignore this setting altogether.', 'video-embed-thumbnail-generator')."</span></a><br />";
4016
  echo "<select id='h264_level' name='kgvid_video_embed_options[h264_level]' class='affects_ffmpeg'>";
4017
  $items = array("none", "1", "1.1", "1.2", "1.3", "2", "2.1", "2.2", "3", "3.1", "3.2", "4", "4.1", "4.2", "5", "5.1");
4018
  foreach($items as $item) {
4019
  $selected = ($options['h264_level']==$item) ? 'selected="selected"' : '';
4020
  echo "<option value='$item' $selected>$item</option>";
4021
  }
4022
- echo "</select> "._x('level', 'H.264 level. Might not need translation', 'video-embed-thumbnail-generator')." <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('3.0 is default. Lower levels will lower maximum bit rates and decoding complexity. This mostly depends on your need for compatability with mobile devices. Older versions of FFMPEG might ignore this setting altogether.', 'video-embed-thumbnail-generator')."</span></a>";
4023
  echo "</div>\n\t";
4024
  }
4025
 
@@ -4039,10 +4694,10 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
4039
  function kgvid_ffmpeg_options_callback() {
4040
  $options = kgvid_get_options();
4041
  echo "<div class='kgvid_video_app_required'>";
4042
- echo "<input class='affects_ffmpeg' onchange='if(jQuery(\"#ffmpeg_vpre\").attr(\"checked\")==\"checked\"){jQuery(\"#video_bitrate_flag\").attr(\"checked\", \"checked\"); jQuery(\"#nostdin\").removeAttr(\"checked\");}' ".checked( $options['video_bitrate_flag'], "on", false )." id='video_bitrate_flag' name='kgvid_video_embed_options[video_bitrate_flag]' type='checkbox' /> <label for='video_bitrate_flag'>".__('Enable legacy FFMPEG "-b" and "-ba" bitrate flags.', 'video-embed-thumbnail-generator')."</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Enable if your installed version of FFMPEG is old enough that you can\'t use the newer -b:v flags (Dreamhost users must turn this on). It may cause newer versions of FFMPEG to fail.', 'video-embed-thumbnail-generator')."</span></a><br />";
4043
- echo "<input class='affects_ffmpeg' onchange='if(jQuery(\"#ffmpeg_vpre\").attr(\"checked\")==\"checked\"){jQuery(\"#video_bitrate_flag\").attr(\"checked\", \"checked\"); jQuery(\"#nostdin\").removeAttr(\"checked\");}' ".checked( $options['ffmpeg_vpre'], "on", false )." id='ffmpeg_vpre' name='kgvid_video_embed_options[ffmpeg_vpre]' type='checkbox' /> <label for='ffmpeg_vpre'>".__('Enable legacy libx264 parameters.', 'video-embed-thumbnail-generator')."</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Enable if your installed version of FFMPEG is old enough that libx264 requires additional configuration to operate (Dreamhost users must turn this on). This should help if you can encode WEBM or OGV files but H264/Mobile files fail. It could cause newer versions of FFMPEG to fail.', 'video-embed-thumbnail-generator')."</span></a><br />";
4044
- echo "<input class='affects_ffmpeg' ".checked( $options['ffmpeg_old_rotation'], "on", false )." id='ffmpeg_old_rotation' name='kgvid_video_embed_options[ffmpeg_old_rotation]' type='checkbox' /> <label for='ffmpeg_old_rotation'>".__('Enable legacy FFMPEG rotation method.', 'video-embed-thumbnail-generator')."</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Enable if vertical videos shot on mobile devices don\'t rotate correctly or generate errors. If legacy libx264 paramaters are necessary, rotation won\'t work at all.', 'video-embed-thumbnail-generator')."</span></a><br />";
4045
- echo "<input class='affects_ffmpeg' ".checked( $options['nostdin'], "on", false )." id='nostdin' name='kgvid_video_embed_options[nostdin]' type='checkbox' /> <label for='nostdin'>".__('Disable stdin.', 'video-embed-thumbnail-generator')."</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".__('Turn off this checkbox if your installed version of FFMPEG is old enough that it does not recognize the nostdin flag (Dreamhost users must turn this off).', 'video-embed-thumbnail-generator')."</span></a>";
4046
  echo "</div>\n\t";
4047
  }
4048
 
@@ -4055,16 +4710,16 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
4055
  $selected = ($options['simultaneous_encodes']==$i) ? 'selected="selected"' : '';
4056
  echo "<option value='".$i."' $selected>".$i."</option>";
4057
  }
4058
- echo "</select> ".__('Simultaneous encodes.', 'video-embed-thumbnail-generator')." <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".sprintf( __('Increasing the number will allow %1$s to encode more than one file at a time, but may lead to %1$s monopolizing system resources.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></a><br />";
4059
 
4060
  echo "<select id='threads' name='kgvid_video_embed_options[threads]' class='affects_ffmpeg'>";
4061
  for ($i = 0; $i <= 16; $i++ ) {
4062
  $selected = ($options['threads']==$i) ? 'selected="selected"' : '';
4063
  echo "<option value='".$i."' $selected>".$i."</option>";
4064
  }
4065
- echo "</select> "._x('threads', 'CPU threads. Might not need translating', 'video-embed-thumbnail-generator')." <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".sprintf( __('Default is 1, which limits encoding speed but prevents encoding from using too many system resources. Selecting 0 will allow %1$s to optimize the number of threads or you can set the number manually. This may lead to %1$s monopolizing system resources.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></a><br />";
4066
 
4067
- echo "<input ".checked( $options['nice'], "on", false )." id='nice' name='kgvid_video_embed_options[nice]' class='affects_ffmpeg' type='checkbox' /> <label for='nice'>"._x('Run', 'execute program', 'video-embed-thumbnail-generator')." <code>nice</code>.</label> <a class='kgvid_tooltip wp-ui-text-highlight' href='javascript:void(0);'><span class='kgvid_tooltip_classic'>".sprintf( __('Tells %1$s to run at a lower priority to avoid monopolizing system resources.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></a>";
4068
  echo "</div>";
4069
 
4070
  }
@@ -4072,14 +4727,14 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
4072
  function kgvid_test_ffmpeg_options_callback( $scope = 'site' ) {
4073
 
4074
  $options = kgvid_get_options();
4075
- $video_formats = kgvid_video_formats(true, false);
4076
  $encode_string = "";
4077
  if ( $options['ffmpeg_exists'] == "on" ) {
4078
 
4079
  $movie_info = kgvid_get_video_dimensions(plugin_dir_path(__FILE__)."images/sample-video-h264.mp4");
4080
  $uploads = wp_upload_dir();
4081
  $encode_dimensions = kgvid_set_encode_dimensions($movie_info, $video_formats[$options['sample_format']]);
4082
- $encode_string = kgvid_generate_encode_string(plugin_dir_path(__FILE__)."images/sample-video-h264.mp4", $uploads['path']."/sample-video-h264".$video_formats[$options['sample_format']]['suffix'], $movie_info, $options['sample_format'], $encode_dimensions['width'], $encode_dimensions['height'], ' -vf "transpose=1"');
4083
  }
4084
 
4085
  if ( is_array($encode_string) ) { $encode_string_implode = implode('' , $encode_string); }
@@ -4098,7 +4753,8 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
4098
  }
4099
  $sample_format_select .= "</select>";
4100
 
4101
- echo "<div id='ffmpeg_sample_div'".$display_div."><p>".sprintf( __('%1$s sample %2$s encode command', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>", $sample_format_select).":<br /><textarea id='ffmpeg_h264_sample' class='ffmpeg_sample_code code' cols='100' rows='5' wrap='soft' readonly='yes'>".$encode_string_implode."</textarea></p>";
 
4102
  echo "<p>".sprintf( __('%s test output:', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>")."<br /><textarea id='ffmpeg_output' class='ffmpeg_sample_code code' cols='100' rows='20' wrap='soft' readonly='yes'></textarea><br>".sprintf( __('For help interpreting this output, %s try our Wiki page on Github', 'video-embed-thumbnail-generator'), "<a href='https://github.com/kylegilman/video-embed-thumbnail-generator/wiki/Interpreting-FFMPEG-or-LIBAV-messages'>")."</a>.</p></div>\n\t";
4103
  }
4104
 
@@ -4293,9 +4949,19 @@ function kgvid_update_settings() {
4293
  $options['ffmpeg_old_rotation'] = "on";
4294
  $options['click_download'] = "on";
4295
  }
4296
- if ( $options['version'] < 4.504 ) {
4297
- $options['version'] = 4.504;
4298
- $options['nativecontrolsfortouch'] = "on";
 
 
 
 
 
 
 
 
 
 
4299
  }
4300
 
4301
  if ( $options['version'] != $default_options['version'] ) { $options['version'] = $default_options['version']; }
@@ -4462,7 +5128,7 @@ function kgvid_ajax_save_settings() {
4462
  $uploads = wp_upload_dir();
4463
  $video_formats = kgvid_video_formats();
4464
  $encode_dimensions = kgvid_set_encode_dimensions($movie_info, $video_formats[$validated_options['sample_format']]);
4465
- $encode_string = kgvid_generate_encode_string(plugin_dir_path(__FILE__)."images/sample-video-h264.mp4", $uploads['path']."/sample-video-h264".$video_formats[$validated_options['sample_format']]['suffix'], $movie_info, $validated_options['sample_format'], $encode_dimensions['width'], $encode_dimensions['height'], ' -vf "transpose=1"');
4466
  $auto_thumb_label = kgvid_generate_auto_thumb_label();
4467
  }
4468
  }
@@ -4481,21 +5147,21 @@ add_action('wp_ajax_kgvid_save_settings', 'kgvid_ajax_save_settings');
4481
  function kgvid_add_attachment_handler($post_id) {
4482
 
4483
  $options = kgvid_get_options();
 
4484
 
4485
  if ( $options['auto_encode'] == "on" || $options['auto_thumb'] == "on" ) {
4486
 
4487
  $post = get_post($post_id);
 
4488
 
4489
- if ( substr($post->post_mime_type, 0, 5) == 'video'
4490
- && (empty($post->post_parent)
4491
- || (strpos(get_post_mime_type( $post->post_parent ), 'video') === false && get_post_meta($post->ID, '_kgflashmediaplayer-externalurl', true) == false)) ) {
4492
 
4493
  wp_schedule_single_event( time() + rand(0,10), 'kgvid_cron_new_attachment', array($post_id) );
4494
-
4495
  $transient = get_transient( 'kgvid_new_attachment_transient' ); //error checking to avoid race conditions when using Add From Server
4496
  if ( is_array($transient) ) { $transient[] = $post_id; }
4497
  else { $transient = array($post_id); }
4498
  set_transient( 'kgvid_new_attachment_transient', $transient, DAY_IN_SECONDS );
 
4499
  }
4500
 
4501
  }
@@ -4506,11 +5172,15 @@ add_action('add_attachment', 'kgvid_add_attachment_handler');
4506
  function kgvid_cron_new_attachment_handler($post_id, $force = false) {
4507
 
4508
  $options = kgvid_get_options();
 
 
4509
 
4510
  $post = get_post($post_id);
4511
  $movieurl = wp_get_attachment_url($post_id);
 
 
4512
 
4513
- if ( $force == 'thumbs' || $options['auto_thumb'] == "on" ) {
4514
 
4515
  $thumb_output = array();
4516
  $thumb_id = array();
@@ -4595,36 +5265,59 @@ function kgvid_cron_new_attachment_handler($post_id, $force = false) {
4595
  }
4596
  }//end setting main thumbnail
4597
 
4598
-
4599
  }//end if auto_thumb is on
4600
 
4601
- if ( $force == 'encode' || $options['auto_encode'] == "on" ) {
 
 
 
4602
  $video_formats = kgvid_video_formats();
 
 
4603
  $something_to_encode = false;
4604
  $encode_checked = array();
 
 
 
 
 
 
 
 
 
 
 
 
4605
  foreach ( $video_formats as $format => $format_stats ) {
 
4606
  if ( array_key_exists('encode_'.$format, $options) && $options['encode_'.$format] == "on" ) {
4607
  $encode_checked[$format] = "true";
4608
  $something_to_encode = true;
4609
  }
 
4610
  else { $encode_checked[$format] = "notchecked"; }
 
4611
  }
 
4612
  if ( $something_to_encode ) {
4613
  $output = kgvid_enqueue_videos($post_id, $movieurl, $encode_checked, $post->post_parent);
4614
  $output = kgvid_encode_videos();
 
4615
  }
4616
- }
 
 
4617
  }
4618
  add_action('kgvid_cron_new_attachment', 'kgvid_cron_new_attachment_handler');
4619
 
4620
- function kgvid_change_thumbnail_parent( $post_ID, $parent_id ) {
4621
 
4622
  $args = array(
4623
  'post_type' => 'attachment',
4624
  'post_mime_type' => 'image',
4625
  'numberposts' => '-1',
4626
  'meta_key' => '_kgflashmediaplayer-video-id',
4627
- 'meta_value' => $post_ID,
4628
  );
4629
  $thumbnails = get_posts( $args ); //find all thumbnail children of the video in the database
4630
 
@@ -4635,10 +5328,10 @@ function kgvid_change_thumbnail_parent( $post_ID, $parent_id ) {
4635
  if ( $thumbnail->post_parent != $parent_id ) {
4636
 
4637
  if ( empty($parent_id) ) {
4638
- $thumbnail->post_parent = $post_ID;
4639
  }
4640
 
4641
- else {
4642
  $thumbnail->post_parent = $parent_id;
4643
  }
4644
 
@@ -4667,9 +5360,16 @@ function kgvid_upload_page_change_thumbnail_parent( $location ) {
4667
  if ( isset( $_REQUEST['found_post_id'] ) ) { $parent_id = (int) $_REQUEST['found_post_id']; }
4668
  else { $parent_id = 0; }
4669
 
4670
- foreach ( $_REQUEST['media'] as $post_ID ) {
 
 
4671
 
4672
- kgvid_change_thumbnail_parent( $post_ID, $parent_id );
 
 
 
 
 
4673
 
4674
  }//end loop through modified attachments
4675
 
@@ -4680,20 +5380,24 @@ function kgvid_upload_page_change_thumbnail_parent( $location ) {
4680
  }
4681
  add_filter( 'wp_redirect', 'kgvid_upload_page_change_thumbnail_parent' ); //when attachment parent is manually changed on the Media Library page
4682
 
4683
- function kgvid_validate_post_updated( $post_ID ) {
4684
 
4685
  $options = kgvid_get_options();
4686
- $post = get_post($post_ID);
 
4687
 
4688
- if ( $options['thumb_parent'] == 'post'
4689
- && substr($post->post_mime_type, 0, 5) == 'video'
4690
- && ( empty($post->post_parent)
4691
- || (strpos(get_post_mime_type( $post->post_parent ), 'video') === false && get_post_meta($post->ID, '_kgflashmediaplayer-externalurl', true) == '' )
4692
- )
4693
- ) { //if the attachment is a video with no parent or if it has a parent the parent is not a video and the video doesn't have the externalurl post meta
4694
 
4695
- kgvid_change_thumbnail_parent( $post_ID, $post->post_parent );
 
 
4696
 
 
 
 
 
 
 
4697
  }
4698
 
4699
  }
@@ -4709,21 +5413,30 @@ add_action( 'edit_attachment', 'kgvid_validate_post_updated' );
4709
  function kgvid_image_attachment_fields_to_edit($form_fields, $post) {
4710
 
4711
  $options = kgvid_get_options();
 
4712
 
4713
- if ( substr($post->post_mime_type, 0, 5) == 'video' &&
4714
- ( empty($post->post_parent)
4715
- || (strpos(get_post_mime_type( $post->post_parent ), 'video') === false && get_post_meta($post->ID, '_kgflashmediaplayer-externalurl', true) == '' )
4716
- )
4717
- ) { //if the attachment is a video with no parent or if it has a parent the parent is not a video and the video doesn't have the externalurl post meta
4718
 
4719
  wp_enqueue_media(); //allows using the media modal in the Media Library
4720
  wp_enqueue_script( 'kgvid_video_plugin_admin' );
4721
  wp_enqueue_style( 'video_embed_thumbnail_generator_style' );
4722
 
 
 
4723
  $field_id = kgvid_backwards_compatible($post->ID);
4724
  $movieurl = wp_get_attachment_url($post->ID);
4725
  $moviefile = get_attached_file($post->ID);
4726
  $kgvid_postmeta = kgvid_get_attachment_meta($post->ID);
 
 
 
 
 
 
 
 
 
 
4727
 
4728
  $form_fields["kgflashmediaplayer-url"]["input"] = "hidden";
4729
  $form_fields["kgflashmediaplayer-url"]["value"] = $movieurl;
@@ -4761,132 +5474,139 @@ function kgvid_image_attachment_fields_to_edit($form_fields, $post) {
4761
  $form_fields["kgflashmediaplayer-aspect"]["value"] = round($set['height']/$set['width'], 5);
4762
 
4763
  $nonce = wp_create_nonce('video-embed-thumbnail-generator-nonce');
 
 
4764
 
4765
- $form_fields["views"]["label"] = __('Video Stats', 'video-embed-thumbnail-generator');
4766
- $form_fields["views"]["input"] = "html";
4767
- $form_fields["views"]["html"] = sprintf( _n('%d Start', '%d Starts', intval($kgvid_postmeta['starts']), 'video-embed-thumbnail-generator'), intval($kgvid_postmeta['starts']) ).', '.sprintf( _n('%d Complete View', '%d Complete Views', intval($kgvid_postmeta['completeviews']), 'video-embed-thumbnail-generator'), intval($kgvid_postmeta['completeviews']) ).'<br />'.__('Video ID:', 'video-embed-thumbnail-generator').' '.$post->ID;
4768
-
4769
- // ** Thumbnail section **//
4770
-
4771
- $thumbnail_url = get_post_meta($post->ID, "_kgflashmediaplayer-poster", true);
4772
 
4773
- $thumbnail_html = "";
4774
- if ( !empty($kgvid_postmeta['autothumb-error']) ) {
4775
- $thumbnail_html = '<div class="kgvid_thumbnail_box kgvid_chosen_thumbnail_box">'.$kgvid_postmeta['autothumb-error'].'</div>';
4776
- }
4777
- elseif ($thumbnail_url != "" ) {
4778
- $thumbnail_html = '<div class="kgvid_thumbnail_box kgvid_chosen_thumbnail_box"><img width="200" src="'.$thumbnail_url.'"></div>';
4779
- }
4780
 
4781
- if ( current_user_can('make_video_thumbnails') ) {
 
4782
 
4783
- if ( !empty($kgvid_postmeta['thumbtime']) ) { $kgvid_postmeta['numberofthumbs'] = "1"; }
 
 
 
 
 
 
4784
 
4785
- $args = array(
4786
- 'mime_type' => 'image/jpeg',
4787
- 'methods' => array(
4788
- 'save'
4789
- )
4790
- );
4791
- $img_editor_works = wp_image_editor_supports($args);
4792
 
4793
  if ( !isset($options['ffmpeg_exists']) || $options['ffmpeg_exists'] == "notchecked" ) {
4794
- kgvid_check_ffmpeg_exists($options, true);
4795
- }
4796
  if ( $options['ffmpeg_exists'] == "notinstalled" ) { $ffmpeg_disabled_text = 'disabled="disabled" title="'.sprintf( __('%1$s not found at %2$s and unable to load video in browser for thumbnail generation.', 'video-embed-thumbnail-generator'), strtoupper($options['video_app']), $options['app_path'] ).'"'; }
4797
  else { $ffmpeg_disabled_text = ""; }
4798
 
4799
  $update_script = "";
4800
- $created_time = time()-get_post_time('U', true, $post->ID);
4801
- if ( $created_time < 60 && ($options['auto_encode'] == "on" || $options['auto_thumb'] == "on") ) {
4802
- $update_script = '<script type="text/javascript">jQuery(document).ready(function() { ';
4803
- if ( $options['ffmpeg_exists'] == "on" && $options['auto_encode'] == "on" ) {
4804
- $update_script .= 'percent_timeout = setTimeout(function(){ kgvid_redraw_encode_checkboxes("'.$movieurl.'", "'.$post->ID.'", "attachment") }, 5000); jQuery(\'#wpwrap\').data("KGVIDCheckboxTimeout", percent_timeout);';
4805
- }
4806
- if ( $options['ffmpeg_exists'] == "on" && $options['auto_thumb'] == "on" && !$thumbnail_url ) {
4807
- $thumbnail_html = '<div class="kgvid_thumbnail_box kgvid_chosen_thumbnail_box" style="height:112px;"><span style="margin-top: 45px;
4808
  display: inline-block;">Loading thumbnail...</span></div>';
4809
- $update_script .= ' setTimeout(function(){ kgvid_redraw_thumbnail_box("'.$post->ID.'") }, 5000);';
4810
- }
4811
- $update_script .= '});</script>';
4812
  }
4813
 
4814
- $choose_from_video_content = "";
4815
- $generate_content = "";
4816
- $thumbnail_timecode = "";
4817
 
4818
- $moviefiletype = pathinfo($movieurl, PATHINFO_EXTENSION);
4819
- $h264compatible = array("mp4", "mov", "m4v");
4820
- if ( $moviefiletype == "mov" || $moviefiletype == "m4v" ) { $moviefiletype = "mp4"; }
4821
 
4822
- $video_formats = kgvid_video_formats();
4823
- $encodevideo_info = kgvid_encodevideo_info($movieurl, $post->ID);
4824
- if ( in_array($moviefiletype, $h264compatible) ) {
4825
- $encodevideo_info["original"]["exists"] = true;
4826
- $encodevideo_info["original"]["url"] = $movieurl;
4827
- $video_formats = array( "original" => array("mime" => "video/".$moviefiletype) ) + $video_formats;
4828
- }
4829
- else { $encodevideo_info["original"]["exists"] = false; }
4830
 
4831
- $sources = array();
 
 
4832
 
4833
- foreach ($video_formats as $format => $format_stats) {
4834
- if ( $format != "original" && $encodevideo_info[$format]["url"] == $movieurl ) { unset($sources['original']); }
4835
- if ( $encodevideo_info[$format]["exists"] ) { $sources[$format] = '<source src="'.$encodevideo_info[$format]["url"].'" type="'.$format_stats["mime"].'">'; }
4836
- }
4837
-
4838
- if ( $img_editor_works ) {
4839
- $choose_from_video_content = '<div style="display:none;" class="kgvid_thumbnail_box kgvid-tabs-content" id="thumb-video-'.$post->ID.'-container">
4840
- <div class="kgvid-reveal-thumb-video" onclick="kgvid_reveal_thumb_video('.$post->ID.')" id="show-thumb-video-'.$post->ID.'"><span class="kgvid-right-arrow"></span><span class="kgvid-show-video">'.__('Choose from video...', 'video-embed-thumbnail-generator').'</span></div>
4841
- <div style="display:none;" id="thumb-video-'.$post->ID.'-player">
4842
- <video crossorigin="anonymous" preload="metadata" class="kgvid-thumb-video" width="200" data-allowed="'.$options['browser_thumbnails'].'" onloadedmetadata="kgvid_thumb_video_loaded(\''.$post->ID.'\');" id="thumb-video-'.$post->ID.'" controls>'.
4843
- implode("\n", $sources).'
4844
- </video>
4845
- <div class="kgvid-video-controls">
4846
- <div class="kgvid-play-pause"></div>
4847
- <div class="kgvid-seek-bar">
4848
- <div class="kgvid-play-progress"></div>
4849
- <div class="kgvid-seek-handle"></div></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
4850
  </div>
4851
- <span id="manual-thumbnail" class="button-secondary" onclick="kgvid_thumb_video_manual('.$post->ID.');">Use this frame</span>
4852
- </div>
4853
- </div>';
 
 
 
 
 
 
 
 
 
 
4854
  }
4855
- $generate_content = '<div id="generate-thumb-'.$post->ID.'-container" class="kgvid-tabs-content">
4856
- <input id="attachments-'. $post->ID .'-kgflashmediaplayer-numberofthumbs" name="attachments['.$post->ID.'][kgflashmediaplayer-numberofthumbs]" type="text" value="'.$kgvid_postmeta['numberofthumbs'].'" maxlength="2" style="width:35px;text-align:center;" onchange="kgvid_disable_thumb_buttons(\''.$post->ID.'\', \'onchange\');document.getElementById(\''.$field_id['thumbtime'].'\').value =\'\';" '.$ffmpeg_disabled_text.'/>
4857
- <input type="button" id="attachments-'. $post->ID .'-thumbgenerate" class="button-secondary" value="'._x('Generate', 'Button text. Implied "Generate thumbnails"', 'video-embed-thumbnail-generator').'" name="thumbgenerate" onclick="kgvid_generate_thumb('. $post->ID .', \'generate\');" '.$ffmpeg_disabled_text.'/>
4858
- <input type="button" id="attachments-'. $post->ID .'-thumbrandomize" class="button-secondary" value="'._x('Randomize', 'Button text. Implied "Randomize thumbnail generation"', 'video-embed-thumbnail-generator').'" name="thumbrandomize" onclick="kgvid_generate_thumb('. $post->ID .', \'random\');" '.$ffmpeg_disabled_text.'/>
4859
- <span style="white-space:nowrap;"><input type="checkbox" id="attachments-'. $post->ID .'-firstframe" name="attachments['.$post->ID.'][kgflashmediaplayer-forcefirst]" onchange="document.getElementById(\''.$field_id['thumbtime'].'\').value =\'\';" '.checked( $kgvid_postmeta['forcefirst'], 'on', false ).' '.$ffmpeg_disabled_text.'/> <label for="attachments-'. $post->ID .'-firstframe">'.__('Force 1st frame thumbnail', 'video-embed-thumbnail-generator').'</label></span></div>';
4860
 
4861
- $thumbnail_timecode = __('Thumbnail timecode:', 'video-embed-thumbnail-generator').' <input name="attachments['. $post->ID .'][kgflashmediaplayer-thumbtime]" id="attachments-'. $post->ID .'-kgflashmediaplayer-thumbtime" type="text" value="'. $kgvid_postmeta['thumbtime'] .'" style="width:60px;"><br>';
4862
 
4863
- }
 
 
4864
 
4865
- $form_fields["kgflashmediaplayer-autothumb-error"]["input"] = "hidden";
4866
- $form_fields["kgflashmediaplayer-autothumb-error"]["value"] = $kgvid_postmeta['autothumb-error'];
 
 
 
 
 
 
 
 
4867
 
4868
- $form_fields["generator"]["label"] = _x("Thumbnails", 'Header for thumbnail section', 'video-embed-thumbnail-generator');
4869
- $form_fields["generator"]["input"] = "html";
4870
- $form_fields["generator"]["html"] = '<input type="hidden" name="attachments['.$post->ID.'][kgflashmediaplayer-security]" id="attachments-'.$post->ID.'-kgflashmediaplayer-security" value="'.$nonce.'" />
4871
- '.$choose_from_video_content.'
4872
- '.$generate_content.'
4873
- '.$thumbnail_timecode.'
4874
- <div id="attachments-'.$post->ID.'-thumbnailplaceholder" style="position:relative;">'. $thumbnail_html .'</div>
4875
- <span id="pick-thumbnail" class="button-secondary" style="margin:10px 0;" data-choose="'.__('Choose a Thumbnail', 'video-embed-thumbnail-generator').'" data-update="'.__('Set as video thumbnail', 'video-embed-thumbnail-generator').'" data-change="attachments-'. $post->ID .'-kgflashmediaplayer-poster" onclick="kgvid_pick_image(this);">'.__('Choose from Library', 'video-embed-thumbnail-generator').'</span><br />
4876
- <input type="checkbox" id="attachments-'. $post->ID .'-featured" name="attachments['.$post->ID.'][kgflashmediaplayer-featured]" '.checked( $kgvid_postmeta['featured'], 'on', false ).' '.$ffmpeg_disabled_text.'/> <label for="attachments-'. $post->ID .'-featured">'.__('Set thumbnail as featured image', 'video-embed-thumbnail-generator').'</label>'.$update_script;
4877
 
4878
- $form_fields["kgflashmediaplayer-poster"]["label"] = __("Thumbnail URL", 'video-embed-thumbnail-generator');
4879
- $form_fields["kgflashmediaplayer-poster"]["value"] = get_post_meta($post->ID, "_kgflashmediaplayer-poster", true);
4880
- $form_fields["kgflashmediaplayer-poster"]["helps"] = "<small>".sprintf( __('Leave blank to use %sdefault thumbnail', 'video-embed-thumbnail-generator'), "<a href='options-general.php?page=video-embed-thumbnail-generator/video-embed-thumbnail-generator.php' target='_blank'>" )."</a>.</small>";
 
 
4881
 
4882
- $form_fields["kgflashmediaplayer-dimensions"]["label"] = __("Video Embed Dimensions", 'video-embed-thumbnail-generator');
4883
- $form_fields["kgflashmediaplayer-dimensions"]["input"] = "html";
4884
- $form_fields["kgflashmediaplayer-dimensions"]["html"] = __('Width:', 'video-embed-thumbnail-generator').' <input name="attachments['. $post->ID .'][kgflashmediaplayer-width]" id="attachments-'. $post->ID .'-kgflashmediaplayer-width" type="text" value="'.$kgvid_postmeta['width'].'" style="width:50px;" data-minimum="'.$options['minimum_width'].'" onchange="kgvid_set_dimension('.$post->ID.', \'height\', this.value);" onkeyup="kgvid_set_dimension('.$post->ID.', \'height\', this.value);"> '.__('Height:', 'video-embed-thumbnail-generator').'
4885
- <input name="attachments['. $post->ID .'][kgflashmediaplayer-height]" id="attachments-'. $post->ID .'-kgflashmediaplayer-height" type="text" value="'.$kgvid_postmeta['height'].'" style="width:50px;" onchange="kgvid_set_dimension('.$post->ID.', \'width\', this.value);" onkeyup="kgvid_set_dimension('.$post->ID.', \'width\', this.value);"> <br />
4886
- <input type="checkbox" name="attachments['. $post->ID .'][kgflashmediaplayer-lockaspect]" id="attachments-'. $post->ID .'-kgflashmediaplayer-lockaspect" onclick="kgvid_set_aspect('.$post->ID.', this.checked);" '.checked( $kgvid_postmeta['lockaspect'], 'on', false ).'>
4887
- <label for="attachments-'. $post->ID .'-kgflashmediaplayer-lockaspect"><small>'.__('Lock to aspect ratio', 'video-embed-thumbnail-generator').'</small></label>';
4888
- $form_fields["kgflashmediaplayer-dimensions"]["helps"] = "<small>".sprintf( __('Leave blank to use %sdefault dimensions', 'video-embed-thumbnail-generator'), "<a href='options-general.php?page=video-embed-thumbnail-generator/video-embed-thumbnail-generator.php' target='_blank'>" )."</a>.</small>";
4889
 
 
4890
 
4891
  $checkboxes = kgvid_generate_encode_checkboxes($movieurl, $post->ID, "attachment");
4892
 
@@ -4894,83 +5614,100 @@ function kgvid_image_attachment_fields_to_edit($form_fields, $post) {
4894
  $form_fields["kgflashmediaplayer-encode"]["input"] = "html";
4895
  $form_fields["kgflashmediaplayer-encode"]["html"] = $checkboxes['checkboxes'];
4896
 
4897
- $tracks_html = '';
4898
- if ( is_array($kgvid_postmeta['track']) ) {
4899
- foreach ( $kgvid_postmeta['track'] as $track => $track_attribute ) {
4900
- $items = array(__("subtitles", 'video-embed-thumbnail-generator')=>"subtitles", __("captions", 'video-embed-thumbnail-generator')=>"captions", __("chapters", 'video-embed-thumbnail-generator')=>"chapters");
4901
- $track_type_select = '<select name="attachments['.$post->ID.'][kgflashmediaplayer-track]['.$track.'][kind]" id="attachments-'.$post->ID.'-kgflashmediaplayer-track_'.$track.'_kind]">';
4902
- foreach($items as $name=>$value) {
4903
- $selected = ($kgvid_postmeta['track'][$track]['kind']==$value) ? 'selected="selected"' : '';
4904
- $track_type_select .= "<option value='$value'>$name</option>";
4905
- }
4906
- $track_type_select .= "</select>";
4907
-
4908
- if ( !array_key_exists( 'default', $kgvid_postmeta['track'][$track] ) ) { $kgvid_postmeta['track'][$track]['default'] = false; }
4909
-
4910
- $tracks_html .= '<div id="kgflashmediaplayer-'.$post->ID.'-trackdiv-'.$track.'" class="kgvid_thumbnail_box kgvid_track_box"><strong>'._x('Track', 'captions track', 'video-embed-thumbnail-generator').' '.strval($track+1).'</strong><span class="kgvid_track_box_removeable" onclick="jQuery(this).parent().remove();jQuery(\'form.compat-item input\').first().change();">X</span><br />
4911
- '.__('Track type:', 'video-embed-thumbnail-generator').' '.$track_type_select.'<br />
4912
- <span id="pick-track'.$track.'" class="button-secondary" style="margin:10px 0;" data-choose="'.__('Choose a Text File', 'video-embed-thumbnail-generator').'" data-update="'.__('Set as track source', 'video-embed-thumbnail-generator').'" data-change="attachments-'. $post->ID .'-kgflashmediaplayer-track_'.$track.'_src" onclick="kgvid_pick_attachment(this);">'.__('Choose from Library', 'video-embed-thumbnail-generator').'</span><br />
4913
- URL: <input name="attachments['. $post->ID .'][kgflashmediaplayer-track]['.$track.'][src]" id="attachments-'. $post->ID .'-kgflashmediaplayer-track_'.$track.'_src" type="text" value="'.$kgvid_postmeta['track'][$track]['src'].'" class="text" style="width:180px;"><br />
4914
- '._x('Language code:', 'two-letter code indicating track\'s language', 'video-embed-thumbnail-generator').' <input name="attachments['. $post->ID .'][kgflashmediaplayer-track]['.$track.'][srclang]" id="attachments-'. $post->ID .'-kgflashmediaplayer-track_'.$track.'_srclang" type="text" value="'.$kgvid_postmeta['track'][$track]['srclang'].'" maxlength="2" style="width:40px;"><br />
4915
- '.__('Label:', 'video-embed-thumbnail-generator').' <input name="attachments['. $post->ID .'][kgflashmediaplayer-track]['.$track.'][label]" id="attachments-'. $post->ID .'-kgflashmediaplayer-track_'.$track.'_label" type="text" value="'.$kgvid_postmeta['track'][$track]['label'].'" class="text" style="width:172px;"><br />
4916
- '.__('Default:', 'video-embed-thumbnail-generator').'<input '.checked($kgvid_postmeta['track'][$track]['default'], 'default', false).' name="attachments['. $post->ID .'][kgflashmediaplayer-track]['.$track.'][default]" id="attachments-'. $post->ID .'-kgflashmediaplayer-track_'.$track.'_default" type="checkbox" value="default"></div>';
4917
- }
4918
  }
4919
 
4920
- $form_fields["kgflashmediaplayer-track"]["label"] = __("Subtitles & Captions", 'video-embed-thumbnail-generator');
4921
- $form_fields["kgflashmediaplayer-track"]["input"] = "html";
4922
- $form_fields["kgflashmediaplayer-track"]["html"] = '<div id="kgflashmediaplayer-'.$post->ID.'-trackdiv">'.$tracks_html.'</div><span class="button-secondary" id="kgflashmediaplayer-add_track" onclick="kgvid_add_subtitles('.$post->ID.')">'.__('Add track', 'video-embed-thumbnail-generator').'</span>';
4923
 
 
4924
 
4925
- $items = array(__("Single Video", 'video-embed-thumbnail-generator')=>"Single Video", __("Video Gallery", 'video-embed-thumbnail-generator')=>"Video Gallery", __("WordPress Default", 'video-embed-thumbnail-generator')=>"WordPress Default");
4926
- $shortcode_select = '<select name="attachments['.$post->ID.'][kgflashmediaplayer-embed]" id="attachments['.$post->ID.'][kgflashmediaplayer-embed]">';
4927
- foreach($items as $name=>$value) {
4928
- $selected = ($kgvid_postmeta['embed']==$value) ? 'selected="selected"' : '';
4929
- $shortcode_select .= "<option value='$value' $selected>$name</option>";
4930
- }
4931
- $shortcode_select .= "</select>";
 
 
 
 
4932
 
4933
- $form_fields["kgflashmediaplayer-options"]["label"] = __("Video Embed Options", 'video-embed-thumbnail-generator');
4934
- $form_fields["kgflashmediaplayer-options"]["input"] = "html";
4935
- $form_fields["kgflashmediaplayer-options"]["html"] = '<input type="checkbox" name="attachments['.$post->ID.'][kgflashmediaplayer-showtitle]" id="attachments-'.$post->ID.'-kgflashmediaplayer-showtitle" '.checked( $kgvid_postmeta['showtitle'], 'on', false ).'>
4936
- <label for="attachments-'.$post->ID.'-kgflashmediaplayer-showtitle">'.__('Insert title above video', 'video-embed-thumbnail-generator').'</label><br />
4937
- <input type="checkbox" name="attachments['.$post->ID.'][kgflashmediaplayer-downloadlink]" id="attachments-'.$post->ID.'-kgflashmediaplayer-downloadlink" '.checked( $kgvid_postmeta['downloadlink'], 'on', false ).'>
4938
- <label for="attachments-'.$post->ID.'-kgflashmediaplayer-downloadlink">'.__('Insert download link below video', 'video-embed-thumbnail-generator').'<em><small><br />'.__('Makes it easier for users to download file.', 'video-embed-thumbnail-generator').'</em></small></label><br />
4939
- <label for="attachments-'.$post->ID.'-kgflashmediaplayer-embed">'._x('Insert', 'verb', 'video-embed-thumbnail-generator').'</label>
4940
- '.$shortcode_select.'
4941
- <script type="text/javascript">jQuery(document).ready(function(){kgvid_hide_standard_wordpress_display_settings('.$post->ID.');});</script>';
4942
 
4943
- if ( $kgvid_postmeta['embed'] == "Video Gallery" ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4944
 
4945
- if ( empty($kgvid_postmeta['gallery_id']) ) { $kgvid_postmeta['gallery_id'] = $post->post_parent; }
 
 
 
 
 
4946
 
4947
- $items = array("menu_order", "title", "post_date", "rand", "ID");
4948
- $gallery_orderby_select = '<select name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_orderby]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_orderby">';
4949
- foreach($items as $item) {
4950
- $selected = ($kgvid_postmeta['gallery_orderby']==$item) ? 'selected="selected"' : '';
4951
- $gallery_orderby_select .= "<option value='$item' $selected>$item</option>";
4952
  }
4953
- $gallery_orderby_select .= "</select>";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4954
 
4955
- $items = array("ASC", "DESC");
4956
- $gallery_order_select = '<select name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_order]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_order">';
4957
- foreach($items as $item) {
4958
- $selected = ($kgvid_postmeta['gallery_order']==$item) ? 'selected="selected"' : '';
4959
- $gallery_order_select .= "<option value='$item' $selected>$item</option>";
4960
- }
4961
- $gallery_order_select .= "</select>";
4962
-
4963
- $form_fields["kgflashmediaplayer-gallery"]["label"] = __("Gallery Settings (all optional)", 'video-embed-thumbnail-generator');
4964
- $form_fields["kgflashmediaplayer-gallery"]["input"] = "html";
4965
- $form_fields["kgflashmediaplayer-gallery"]["html"] = '<input name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_thumb_width]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_thumb_width" type ="text" value="'.$kgvid_postmeta['gallery_thumb_width'].'" class="kgvid_50_width"> <label for="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_thumb_width">'.__('Thumbnail Width', 'video-embed-thumbnail-generator').'</label><br />
4966
- '.$gallery_orderby_select.' '.__('Order By', 'video-embed-thumbnail-generator').'<br />
4967
- '.$gallery_order_select.' '.__('Sort Order', 'video-embed-thumbnail-generator').'<br />
4968
- <input name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_exclude]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_exclude" type ="text" value="'.$kgvid_postmeta['gallery_exclude'].'" class="kgvid_50_width"> <label for="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_exclude">'.__('Exclude', 'video-embed-thumbnail-generator').'</label><br />
4969
- <input name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_include]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_include" type ="text" value="'.$kgvid_postmeta['gallery_include'].'" class="kgvid_50_width"> <label for="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_include">'.__('Include', 'video-embed-thumbnail-generator').'</label><br />
4970
- <input name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_id]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_id" type ="text" value="'.$kgvid_postmeta['gallery_id'].'" class="kgvid_50_width"> <label for="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_id">'.__('Post ID', 'video-embed-thumbnail-generator').'</label>
4971
- ';
4972
-
4973
- }//if video gallery
 
4974
  } //only add fields if attachment is the right kind of video
4975
  return $form_fields;
4976
  }
@@ -5063,6 +5800,19 @@ function kgvid_video_icon_dir($dir) {
5063
  }
5064
  add_filter('icon_dir', 'kgvid_video_icon_dir');
5065
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5066
  function kgvid_ajax_save_html5_thumb() {
5067
 
5068
  if ( current_user_can('make_video_thumbnails') ) {
@@ -5080,30 +5830,42 @@ function kgvid_ajax_save_html5_thumb() {
5080
  $tmp_posterpath = $uploads['path'].'/thumb_tmp/'.$posterfile.'.png';
5081
  $thumb_url = $uploads['url'].'/'.$posterfile.'.jpg';
5082
 
5083
- $raw_png = str_replace('data:image/png;base64,', '', $raw_png);
5084
- $raw_png = str_replace(' ', '+', $raw_png);
5085
- $decoded_png = base64_decode($raw_png);
5086
- $success = file_put_contents($tmp_posterpath, $decoded_png);
 
 
 
5087
 
5088
- $editor = wp_get_image_editor( $tmp_posterpath );
5089
- $thumb_dimensions = $editor->get_size();
5090
- if ( $thumb_dimensions ) {
5091
- $kgvid_postmeta = kgvid_get_attachment_meta($post_id);
5092
- $kgvid_postmeta['actualwidth'] = $thumb_dimensions['width'];
5093
- $kgvid_postmeta['actualheight'] = $thumb_dimensions['height'];
5094
- kgvid_save_attachment_meta($post_id, $kgvid_postmeta);
5095
  }
5096
- $editor->set_quality( 90 );
5097
- $new_image_info = $editor->save( $uploads['path'].'/thumb_tmp/'.$posterfile.'.jpg', 'image/jpeg' );
5098
- unlink($tmp_posterpath);
5099
- if ( $total > 1 ) {
5100
- $post_name = get_the_title($post_id);
5101
- $thumb_id = kgvid_save_thumb($post_id, $post_name, $thumb_url, $index);
 
 
 
 
 
 
 
 
 
 
 
 
 
5102
  }
 
5103
  kgvid_schedule_cleanup_generated_files('thumbs');
5104
  echo ($thumb_url);
5105
- die();
5106
  }
 
 
 
5107
  }
5108
  add_action('wp_ajax_kgvid_save_html5_thumb', 'kgvid_ajax_save_html5_thumb');
5109
 
@@ -5124,9 +5886,10 @@ function kgvid_ajax_save_thumb() {
5124
  $thumb_id = kgvid_save_thumb($post_id, $post_name, $thumb_url, $index);
5125
 
5126
  echo $thumb_id;
5127
- die();
5128
  }
5129
 
 
 
5130
  }
5131
  add_action('wp_ajax_kgvid_save_thumb', 'kgvid_ajax_save_thumb');
5132
 
@@ -5419,7 +6182,6 @@ class kgInsertMedia {
5419
  if ( !empty($kgvid_postmeta['poster']) && empty($kgvid_postmeta['poster-id']) ) { $html .= ' poster="'.$kgvid_postmeta["poster"].'"'; }
5420
  if ( !empty($kgvid_postmeta['width']) ) { $html .= ' width="'.$kgvid_postmeta["width"].'"'; }
5421
  if ( !empty($kgvid_postmeta['height']) ) { $html .= ' height="'.$kgvid_postmeta["height"].'"'; }
5422
- if ( $kgvid_postmeta['downloadlink'] == "on" ) { $html .= ' downloadlink="true"'; }
5423
  $html .= ']'.$kgvid_postmeta["url"].'[/KGVID]<br />';
5424
  } //if embed code is enabled
5425
 
@@ -5523,7 +6285,7 @@ function kgvid_media_embedurl_process() {
5523
  <td><div id="kgflashmediaplayer-singleurl-trackdiv" class="kgvid_thumbnail_box kgvid_track_box"><?php _e('Track type:', 'video-embed-thumbnail-generator') ?><select name="attachments[singleurl][kgflashmediaplayer-track][kind]" id="attachments-singleurl-kgflashmediaplayer-track_kind"><option value="subtitles"><?php _e('subtitles', 'video-embed-thumbnail-generator') ?></option><option value="captions"><?php _e('captions', 'video-embed-thumbnail-generator') ?></option><option value="chapters"><?php _e('chapters', 'video-embed-thumbnail-generator') ?></option></select><br />URL: <input name="attachments[singleurl][kgflashmediaplayer-track][src]" id="attachments-singleurl-kgflashmediaplayer-track_src" type="text" value="" class="text"><br /><?php _e('Language code:', 'video-embed-thumbnail-generator') ?> <input name="attachments[singleurl][kgflashmediaplayer-track][srclang]" id="attachments-singleurl-kgflashmediaplayer-track_srclang" type="text" value="" maxlength="2" style="width:40px;"><br /><?php _e('Label:', 'video-embed-thumbnail-generator') ?> <input name="attachments[singleurl][kgflashmediaplayer-track][label]" id="attachments-singleurl-kgflashmediaplayer-track_label" type="text" value="" class="text"><br /><?php _e('Default:', 'video-embed-thumbnail-generator') ?> <input name="attachments[singleurl][kgflashmediaplayer-track][default]" id="attachments-singleurl-kgflashmediaplayer-track_default" type="checkbox" value="default"></div></td>
5524
  <tr>
5525
  <th valign="top" scope="row" class="label"><span class="alignleft"><label>Options</span></label></th>
5526
- <td><input type="checkbox" <?php echo checked( $options["downloadlink"], "on", false ); ?> name="downloadlink" id="downloadlink" value="true" class="field" /><label for="downloadlink"><?php _e('Generate Download Link Below Video', 'video-embed-thumbnail-generator') ?><br /><small></em><?php _e('Makes it easier for users to download video file', 'video-embed-thumbnail-generator') ?></em></small></label></td>
5527
  </tr>
5528
  <tr class="submit">
5529
  <td></td>
@@ -5579,6 +6341,7 @@ function kgvid_generate_attachment_shortcode($kgvid_video_embed) {
5579
  if ( $poster !="" ) { $shortcode .= ' poster="'.$poster.'"'; }
5580
  if ( !empty($dimensions['width']) ) { $shortcode .= ' width="'.$dimensions['width'].'"'; }
5581
  if ( !empty($dimensions['height']) ) { $shortcode .= ' height="'.$dimensions['height'].'"'; }
 
5582
  if ( $kgvid_postmeta['downloadlink'] == "on" ) { $shortcode .= ' downloadlink="true"'; }
5583
  if (is_array($kgvid_video_embed) && array_key_exists('gallery', $kgvid_video_embed)) { $shortcode .= ' autoplay="true"'; }
5584
  if (is_array($kgvid_video_embed) && array_key_exists('sample', $kgvid_video_embed)) {
@@ -5623,7 +6386,7 @@ function kgvid_generate_embeddable_video( $kgvid_video_embed ) {
5623
  ob_start();
5624
  wp_head();
5625
  $html .= ob_get_clean();
5626
- $html .= '<style>.kgvid_wrapper { margin:0; }';
5627
  if ( array_key_exists('gallery', $kgvid_video_embed) ) { $html .= ' .kgvid_below_video { color:white; } .kgvid_below_video a { color:aaa; }'; }
5628
  $html .= '</style>';
5629
  $html .= '</head><body class="content" style="margin:0px; font-family: sans-serif; padding:0px; border:none;';
@@ -5637,7 +6400,7 @@ function kgvid_generate_embeddable_video( $kgvid_video_embed ) {
5637
  $html .= '</body></html>';
5638
  $content_width = $content_width_save; //reset $content_width
5639
 
5640
- return $html;
5641
 
5642
  }
5643
 
@@ -5876,8 +6639,8 @@ function kgvid_make_thumbs($postID, $movieurl, $numberofthumbs, $i, $iincreaser,
5876
 
5877
  if ( $movie_info['rotate'] === false || $options['ffmpeg_vpre'] == "on" ) { $movie_info['rotate'] = ""; }
5878
  switch ($movie_info['rotate']) { //if it's a sideways mobile video
5879
- case ' -vf "transpose=1"': //90 degrees
5880
- case ' -vf "transpose=2"': //270 degrees
5881
  $movie_width ^= $movie_height ^= $movie_width ^= $movie_height; //swap height & width
5882
  break;
5883
  }
@@ -5927,7 +6690,7 @@ function kgvid_make_thumbs($postID, $movieurl, $numberofthumbs, $i, $iincreaser,
5927
  if ( is_file($thumbnailfilename[$i]) )
5928
  kgvid_schedule_cleanup_generated_files('thumbs');
5929
 
5930
- $thumbnaildisplaycode = '<div class="kgvid_thumbnail_select" name="attachments['.$postID.'][thumb'.$i.']" id="attachments-'.$postID.'-thumb'.$i.'"><label for="kgflashmedia-'.$postID.'-thumbradio'.$i.'"><img src="'.$thumbnailurl.'?'.rand().'" width="200" height="'.$thumbnailheight.'" class="kgvid_thumbnail"></label><br /><input type="radio" name="attachments['.$postID.'][thumbradio_'.$postID.']" id="kgflashmedia-'.$postID.'-thumbradio'.$i.'" value="'.str_replace('/thumb_tmp/', '/', $thumbnailurl).'" onchange="kgvid_select_thumbnail(this.value, \''.$postID.'\', '.$movieoffset.');"></div>';
5931
 
5932
  $i++;
5933
 
@@ -5945,7 +6708,9 @@ function kgvid_make_thumbs($postID, $movieurl, $numberofthumbs, $i, $iincreaser,
5945
 
5946
  }
5947
 
5948
- function kgvid_enqueue_videos($postID, $movieurl, $encode_checked, $parent_id) {
 
 
5949
 
5950
  $options = kgvid_get_options();
5951
  $ffmpegPath = $options['app_path']."/".$options['video_app'];
@@ -5960,8 +6725,8 @@ function kgvid_enqueue_videos($postID, $movieurl, $encode_checked, $parent_id) {
5960
  $video_formats = kgvid_video_formats(false, false);
5961
  $sanitized_url = kgvid_sanitize_url($movieurl);
5962
  $movieurl = $sanitized_url['movieurl'];
5963
-
5964
- if ( get_post_type($postID) == "attachment" ) { $filepath = get_attached_file($postID); }
5965
  else { $filepath = $movieurl; }
5966
  $movie_info = kgvid_get_video_dimensions($filepath);
5967
 
@@ -5970,7 +6735,7 @@ function kgvid_enqueue_videos($postID, $movieurl, $encode_checked, $parent_id) {
5970
  $movie_width = $movie_info['width'];
5971
  $movie_height = $movie_info['height'];
5972
 
5973
- if ( get_post_type($postID) == "attachment" ) { //if the video is in the database
5974
 
5975
  $kgvid_postmeta = kgvid_get_attachment_meta($postID);
5976
  $keys = array( 'width' => 'actualwidth', 'height' => 'actualheight', 'duration' => 'duration', 'rotate' => 'rotate' );
@@ -5983,7 +6748,7 @@ function kgvid_enqueue_videos($postID, $movieurl, $encode_checked, $parent_id) {
5983
  $encodevideo_info = kgvid_encodevideo_info($movieurl, $postID);
5984
 
5985
  foreach ( $video_formats as $format => $format_stats ) {
5986
- if ( $encode_checked[$format] == "true" ) {
5987
  if ( !$encodevideo_info[$format]['exists'] ) {
5988
  if ( ($format == "1080" && $movie_height <= 1080) || ($format == "720" && $movie_height <= 720) ) {
5989
  $movie_extension = pathinfo($movieurl, PATHINFO_EXTENSION);
@@ -6006,19 +6771,22 @@ function kgvid_enqueue_videos($postID, $movieurl, $encode_checked, $parent_id) {
6006
  }
6007
  }//end loop through video formats
6008
 
6009
- kgvid_save_attachment_meta($postID, $kgvid_postmeta);
6010
 
6011
  if ( !empty($encode_list) ) { //if there's anything to encode
6012
 
6013
  $video_encode_queue = kgvid_get_encode_queue();
6014
- if ( empty($parent_id) ) { $parent_id = get_post($postID)->post_parent; }
 
 
6015
 
6016
  $queue_entry = array (
6017
  'attachmentID' => $postID,
6018
  'parent_id' => $parent_id,
6019
  'movieurl' => $movieurl,
6020
  'encode_formats'=> $encode_formats,
6021
- 'movie_info' => $movie_info
 
6022
  );
6023
  if ( function_exists( 'is_plugin_active_for_network' ) && is_plugin_active_for_network( plugin_basename(__FILE__) ) ) {
6024
  $queue_entry['blog_id'] = get_current_blog_id();
@@ -6116,14 +6884,22 @@ function kgvid_enqueue_videos($postID, $movieurl, $encode_checked, $parent_id) {
6116
  if ( empty($transient) ) { delete_transient( 'kgvid_new_attachment_transient' ); }
6117
  else { set_transient( 'kgvid_new_attachment_transient', $transient, DAY_IN_SECONDS ); }
6118
 
6119
-
6120
  $arr = array ( "embed_display"=>$embed_display );
 
 
 
6121
  return $arr;
 
6122
  }
6123
  else {
 
6124
  $thumbnaildisplaycode = "<strong>".__('Can\'t open movie file.', 'video-embed-thumbnail-generator')."</strong><br />".$movie_info['output'];
6125
  $arr = array ( "thumbnaildisplaycode"=>$thumbnaildisplaycode, "embed_display"=>$thumbnaildisplaycode, "lastthumbnumber"=>"break" );
 
 
 
6126
  return $arr;
 
6127
  } //can't open movie
6128
 
6129
  }
@@ -6154,6 +6930,8 @@ function kgvid_callffmpeg() {
6154
  if (isset($_POST['generate_button'])) { $generate_button = $_POST['generate_button']; }
6155
 
6156
  if (isset($_POST['encodeformats'])) { $encode_checked = $_POST['encodeformats']; }
 
 
6157
 
6158
  if (isset($_POST['poster'])) { $poster = $_POST['poster']; }
6159
  if (isset($_POST['parent_id'])) { $parent_id = $_POST['parent_id']; }
@@ -6169,7 +6947,7 @@ function kgvid_callffmpeg() {
6169
  echo json_encode($arr);
6170
  }
6171
  if ( $action == "enqueue" && current_user_can('encode_videos') ) {
6172
- $arr = kgvid_enqueue_videos($postID, $movieurl, $encode_checked, $parent_id);
6173
  echo json_encode($arr);
6174
  }
6175
  if ( $action == "submit" && current_user_can('make_video_thumbnails') ) { kgivd_save_singleurl_poster($parent_id, $poster, $movieurl, $set_featured); }
@@ -6234,6 +7012,8 @@ function kgvid_encode_videos() {
6234
  extract($queue_info, EXTR_OVERWRITE);
6235
  $video = $video_encode_queue[$video_key];
6236
 
 
 
6237
  $ffmpegPath = $options['app_path']."/".$options['video_app'];
6238
  $moviefilepath = '';
6239
  if ( get_post_type($video['attachmentID']) == "attachment" ) { $moviefilepath = get_attached_file($video['attachmentID']); }
@@ -6363,6 +7143,9 @@ function kgvid_encode_videos() {
6363
 
6364
  } //if there's a queue
6365
  $arr = array ( "embed_display"=>"<strong>".$embed_display."</strong>", "video_key"=>$video_key, "format"=>$queued_format, "actualwidth"=>$movie_info['width'], "actualheight"=>$movie_info['height'] );
 
 
 
6366
  return $arr;
6367
 
6368
  }
@@ -6396,9 +7179,9 @@ function kgvid_test_ffmpeg() {
6396
  $arr['output'] .= kgvid_fix_moov_atom($uploads['path']."/sample-video-h264".$suffix);
6397
  }
6398
 
6399
- if ( $options['ffmpeg_watermark']['url'] != "" ) {
6400
  if (!file_exists($uploads['path'].'/thumb_tmp')) { mkdir($uploads['path'].'/thumb_tmp'); }
6401
- $cmd = escapeshellcmd($options['app_path'].'/'.$options['video_app'].' -y -i "'.$uploads['path']."/sample-video-h264".$suffix.'" -vframes 1 -f mjpeg '.$uploads['path'].'/thumb_tmp/watermark_test.jpg');
6402
  kgvid_schedule_cleanup_generated_files('thumbs');
6403
  exec ( $cmd );
6404
  if ( file_exists($uploads['path'].'/thumb_tmp/watermark_test.jpg') ) {
@@ -6425,7 +7208,10 @@ function kgvid_encode_progress($video_key, $format, $page) {
6425
 
6426
  $video_entry = $video_encode_queue[$video_key];
6427
 
6428
- if ( array_key_exists('blog_id', $video_entry) ) { $blog_id = $video_entry['blog_id']; }
 
 
 
6429
  else { $blog_id = false; }
6430
 
6431
  $script_function = 'kgvid_redraw_encode_checkboxes("'.$video_entry['movieurl'].'", "'.$video_entry['attachmentID'].'", "'.$page.'", "'.$blog_id.'")';
@@ -6478,6 +7264,7 @@ function kgvid_encode_progress($video_key, $format, $page) {
6478
  if ( is_array($time_matches) && array_key_exists(1, $time_matches) != true ) { //if something other than the regular FFMPEG encoding output check for these
6479
  preg_match('/video:(.*?) /', $lastline, $video_matches);
6480
  preg_match('/libx264 (.*?) /', $lastline, $libx264_matches);
 
6481
  $queue_match = preg_match('/queue on closing/', $lastline);
6482
  }
6483
 
@@ -6516,7 +7303,7 @@ function kgvid_encode_progress($video_key, $format, $page) {
6516
  $embed_display = '<strong>'.__('Encoding', 'video-embed-thumbnail-generator').'</strong><br /><div class="kgvid_meter"><div class="kgvid_meter_bar" style="width:'.$percent_done.'%;"><div class="kgvid_meter_text">'.$percent_done_text.'</div></div></div>';
6517
 
6518
  if ( current_user_can('encode_videos') && $pid ) {
6519
- $embed_display .= '<a href="javascript:void(0);" class="kgvid_cancel_button" id="attachments-'.$video_entry["attachmentID"].'-kgflashmediaplayer-cancelencode" onclick="kgvid_cancel_encode('.$pid.', \''.$video_entry["attachmentID"].'\', \''.$video_key.'\', \''.$format.'\');">'.__('Cancel', 'video-embed-thumbnail-generator').'</a>';
6520
  }
6521
 
6522
  $embed_display .= '<div class="kgvid_encoding_small_text"><small>'.__('Elapsed:', 'video-embed-thumbnail-generator').' '.date('H:i:s',$time_elapsed).'. '.__('Remaining:', 'video-embed-thumbnail-generator').' '.$time_remaining.'. '._x('FPS:', 'Frames per second', 'video-embed-thumbnail-generator').' '.$fps_match.'</small></div>';
@@ -6530,11 +7317,10 @@ function kgvid_encode_progress($video_key, $format, $page) {
6530
  elseif (
6531
  ( is_array($video_matches) && array_key_exists(1, $video_matches) == true )
6532
  || ( is_array($libx264_matches) && array_key_exists(1, $libx264_matches) == true )
 
6533
  || ( $queue_match )
6534
  ) { //encoding complete
6535
 
6536
- if ( $blog_id ) { switch_to_blog($blog_id); }
6537
-
6538
  $percent_done = 100;
6539
  $ended = filemtime($logfile);
6540
  $time_elapsed = $ended - $started;
@@ -6609,14 +7395,12 @@ function kgvid_encode_progress($video_key, $format, $page) {
6609
 
6610
  if ( (empty($next_video['format']) || $next_video['video_key'] != $video_key) && $video_encode_queue[$video_key]['encode_formats']['fullres']['status'] == "Encoding Complete" ) { //if there's nothing left to encode in this video and we've encoded the fullres
6611
  $new_movie_url = kgvid_replace_video( $video_key, 'fullres' );
6612
- $script_function = 'kgvid_redraw_encode_checkboxes("'.$new_movie_url.'", "'.$video_entry['attachmentID'].'", "'.$page.'")';
6613
 
6614
  $embed_display = '<strong>'.__('Encoding Complete', 'video-embed-thumbnail-generator').'</strong>';
6615
 
6616
  }//fullres encoding complete
6617
 
6618
- if ( $blog_id ) { restore_current_blog(); }
6619
-
6620
  }//encoding complete
6621
 
6622
  else { //there was an unexpected output and the encoded file hasn't been modified in more than 10 seconds
@@ -6624,7 +7408,7 @@ function kgvid_encode_progress($video_key, $format, $page) {
6624
  if ( strpos($lastline, "signal 15") !== false ) { //if the encoding was intentionally canceled
6625
  $lastline = __("Encoding was canceled.", 'video-embed-thumbnail-generator');
6626
  }
6627
- $video_encode_queue[$video_key]['encode_formats'][$format]['status'] = "error";
6628
 
6629
  }
6630
 
@@ -6636,10 +7420,70 @@ function kgvid_encode_progress($video_key, $format, $page) {
6636
 
6637
  }
6638
 
6639
- if ( $video_encode_queue[$video_key]['encode_formats'][$format]['status'] == "error" ) {
 
6640
  $video_encode_queue[$video_key]['encode_formats'][$format]['lastline'] = addslashes($lastline);
6641
- kgvid_save_encode_queue($video_encode_queue);
6642
  $embed_display = '<strong>'.__('Error:', 'video-embed-thumbnail-generator').' </strong><span class="kgvid_warning">'.stripslashes($lastline).'.</span>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6643
  $next_video = kgvid_encode_videos(); //start the next queued video
6644
  if ( !empty($next_video['format']) ) {
6645
  $args = array($next_video['video_key'], $next_video['format'], $page);
@@ -6654,6 +7498,9 @@ function kgvid_encode_progress($video_key, $format, $page) {
6654
  else { $embed_display = "<strong>".__('Waiting...', 'video-embed-thumbnail-generator')."</strong>"; }
6655
 
6656
  $arr = array ( 'embed_display' => $embed_display, 'time_to_wait' => $time_to_wait );
 
 
 
6657
  return $arr;
6658
 
6659
  }//end if queue entry exists
@@ -6676,6 +7523,7 @@ add_action('wp_ajax_kgvid_encode_progress', 'kgvid_ajax_encode_progress');
6676
 
6677
  function kgvid_replace_video( $video_key, $format ) {
6678
 
 
6679
  $video_encode_queue = kgvid_get_encode_queue();
6680
  $video_formats = kgvid_video_formats();
6681
  $encoded_filename = $video_encode_queue[$video_key]['encode_formats'][$format]['filepath'];
@@ -6724,6 +7572,18 @@ function kgvid_replace_video( $video_key, $format ) {
6724
  if ( file_exists($encoded_filename) ) {
6725
  rename($encoded_filename, $new_filename);
6726
  if ( file_exists($original_filename) && $original_filename != $new_filename ) { unlink($original_filename); }
 
 
 
 
 
 
 
 
 
 
 
 
6727
  }
6728
  $video_encode_queue[$video_key]['encode_formats'][$format]['url'] = $new_url;
6729
 
@@ -6764,8 +7624,6 @@ function kgvid_replace_video( $video_key, $format ) {
6764
  $post = get_post($video_id);
6765
  $new_guid = str_replace( $path_parts['extension'], $new_mime['ext'], $post->guid );
6766
 
6767
-
6768
-
6769
  if ( $new_guid != $post->guid ) {
6770
  $post->guid = $new_guid;
6771
  global $wpdb;
@@ -6783,6 +7641,12 @@ function kgvid_replace_video( $video_key, $format ) {
6783
  $post_update = array('ID' => $video_id, 'post_mime_type' => $new_mime['type']);
6784
  wp_update_post($post_update);
6785
 
 
 
 
 
 
 
6786
  return $new_url;
6787
 
6788
  }//end replace true
@@ -6792,6 +7656,8 @@ add_action('kgvid_cron_replace_video_check', 'kgvid_replace_video', 10, 2);
6792
 
6793
  function kgvid_clear_completed_queue($type, $scope = 'site') {
6794
 
 
 
6795
  $video_encode_queue = kgvid_get_encode_queue();
6796
 
6797
  if ( !empty($video_encode_queue) ) {
@@ -6803,8 +7669,18 @@ function kgvid_clear_completed_queue($type, $scope = 'site') {
6803
  if ( !empty($queue_entry['encode_formats']) ) {
6804
  foreach ( $queue_entry['encode_formats'] as $format => $value ) {
6805
  if ( $value['status'] == "encoding" ) { //if it's not completed yet
6806
- $keep[$video_key] = true;
6807
- break;
 
 
 
 
 
 
 
 
 
 
6808
  }
6809
  if ( ($type == "manual" && $value['status'] == "queued")
6810
  || ($type == "queued" && $value['status'] == "Encoding Complete")
@@ -6816,7 +7692,11 @@ function kgvid_clear_completed_queue($type, $scope = 'site') {
6816
  $keep[$video_key] = true;
6817
  }
6818
  }
6819
- if ( !is_network_admin() && $scope == 'site' && array_key_exists('blog_id', $queue_entry) && $queue_entry['blog_id'] != get_current_blog_id() ) { //only clear entries from current blog
 
 
 
 
6820
  $keep[$video_key] = true;
6821
  break;
6822
  }
@@ -7364,7 +8244,9 @@ function kgvid_add_contextual_help_tab() {
7364
  <li><code>downloadlink="true/false"</code> '.__('generates a link below the video to make it easier for users to save the video file to their computers.', 'video-embed-thumbnail-generator').'</li>
7365
  <li><code>right_click="true/false"</code> '.__('allow or disable right-clicking on the video player.', 'video-embed-thumbnail-generator').'</li>
7366
  <li><code>resize="true/false"</code> '.__('allow or disable responsive resizing.', 'video-embed-thumbnail-generator').'</li>
7367
- <li><code>auto_res="automatic/highest/lowest"</code> '.__('specify the video resolution when the page loads.', 'video-embed-thumbnail-generator').'</li></ul>
 
 
7368
 
7369
  <p><strong>'.__('These options will add a subtitle/caption track.', 'video-embed-thumbnail-generator').'</strong></p>
7370
  <ul><li><code>track_src="http://www.example.com/subtitles.vtt_.txt"</code> '.__('URL of the WebVTT file.', 'video-embed-thumbnail-generator').'</li>
@@ -7374,7 +8256,9 @@ function kgvid_add_contextual_help_tab() {
7374
  <li><code>track_default="default"</code> '.__('track is enabled by default.', 'video-embed-thumbnail-generator').'</li></ul>
7375
 
7376
  <p><strong>'.__('These options will only affect Video.js playback', 'video-embed-thumbnail-generator').'</strong></p>
7377
- <ul><li><code>skin="example-css-class"</code> '.sprintf( __('Completely change the look of the video player. %sInstructions here.', 'video-embed-thumbnail-generator'), '<a href="https://github.com/zencoder/video-js/blob/master/docs/skins.md">' ).'</a></li></ul>
 
 
7378
 
7379
  <p><strong>'.__('These options will only affect Flash playback in Strobe Media Playback video elements. They will have no effect on other players.', 'video-embed-thumbnail-generator').'</p></strong>
7380
  <ul><li><code>autohide="true/false"</code> '.__('specify whether to autohide the control bar after a few seconds.', 'video-embed-thumbnail-generator').'</li>
@@ -7402,6 +8286,31 @@ function kgvid_add_contextual_help_tab() {
7402
  add_action( 'admin_head-post.php', 'kgvid_add_contextual_help_tab' );
7403
  add_action( 'admin_head-post-new.php', 'kgvid_add_contextual_help_tab' );
7404
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7405
 
7406
  function kgvid_clear_cron_and_roles() {
7407
 
3
  Plugin Name: Video Embed & Thumbnail Generator
4
  Plugin URI: http://www.kylegilman.net/2011/01/18/video-embed-thumbnail-generator-wordpress-plugin/
5
  Description: Generates thumbnails, HTML5-compliant videos, and embed codes for locally hosted videos. Requires FFMPEG or LIBAV for encoding.
6
+ Version: 4.6
7
  Author: Kyle Gilman
8
  Author URI: http://www.kylegilman.net/
9
  Text Domain: video-embed-thumbnail-generator
59
  $edit_others_capable = kgvid_check_if_capable('edit_others_posts');
60
 
61
  $options = array(
62
+ "version" => 4.6,
63
  "embed_method" => "Video.js",
64
  "jw_player_id" => "",
65
  "template" => false,
97
  "watermark_url" => "",
98
  "overlay_title" => "on",
99
  "overlay_embedcode" => false,
100
+ "twitter_button" => false,
101
+ "twitter_username" => kgvid_get_jetpack_twitter_username(),
102
+ "facebook_button" => false,
103
  "downloadlink" => false,
104
  "click_download" => "on",
105
  "view_count" => false,
109
  "width" => "640",
110
  "height" => "360",
111
  "minimum_width" => false,
112
+ "fullwidth" => "on",
113
  "gallery_width" => "960",
114
  "gallery_thumb" => "250",
115
  "gallery_end" => "",
116
  "gallery_pagination" => false,
117
  "gallery_per_page" => false,
118
  "gallery_title" => "on",
119
+ "nativecontrolsfortouch" => false,
120
  "controlbar_style" => "docked",
121
  "autoplay" => false,
122
  "loop" => false,
146
  "h264_profile" => "baseline",
147
  "h264_level" => "3.0",
148
  "auto_encode" => false,
149
+ "auto_encode_gif" => false,
150
  "auto_thumb" => false,
151
  "auto_thumb_number" => 1,
152
  "auto_thumb_position" => 50,
153
  "right_click" => "on",
154
  "resize" => "on",
155
  "auto_res" => "automatic",
156
+ "pixel_ratio" => "on",
157
  "capabilities" => array(
158
  "make_video_thumbnails" => $upload_capable,
159
  "encode_videos" => $upload_capable,
160
  "edit_others_video_encodes" => $edit_others_capable
161
  ),
162
+ "open_graph" => false,
163
+ "schema" => "on",
164
+ "twitter_card" => false,
165
+ "oembed_provider" => false,
166
  "oembed_security" => false,
167
  "htaccess_login" => "",
168
  "htaccess_password" => "",
169
  "sample_format" => "mobile",
170
+ "sample_rotate" => false,
171
  "ffmpeg_watermark" => array(
172
  "url" => "",
173
  "scale" => "9",
176
  "x" => "6",
177
  "y" => "5"
178
  ),
179
+ "simultaneous_encodes" => 1,
180
+ "error_email" => "nobody"
181
  );
182
 
183
  return $options;
199
  'ffmpeg_exists' => $default_options['ffmpeg_exists'],
200
  'default_capabilities' => $default_options['capabilities'],
201
  'superadmin_only_ffmpeg_settings' => false,
202
+ 'simultaneous_encodes' => $default_options['simultaneous_encodes'],
203
+ 'network_error_email' => $default_options['error_email']
204
  );
205
 
206
  return $network_options;
220
 
221
  }
222
 
223
+ function kgvid_get_jetpack_twitter_username() {
224
+
225
+ $jetpack_options = get_option('jetpack_options');
226
+ $jetpack_twitter_cards_site_tag = get_option('jetpack-twitter-cards-site-tag');
227
+ if ( is_array($jetpack_options)
228
+ && array_key_exists('publicize_connections', $jetpack_options)
229
+ && array_key_exists('twitter', $jetpack_options['publicize_connections'])
230
+ && array_key_exists('external_name', $jetpack_options['publicize_connections']['twitter'])
231
+ && !empty($jetpack_options['publicize_connections']['twitter']['external_name'])
232
+ ) {
233
+ $twitter_username = $jetpack_options['publicize_connections']['twitter']['external_name'];
234
+ }
235
+ elseif ( !empty($jetpack_twitter_cards_site_tag) ) {
236
+ $twitter_username = $jetpack_twitter_cards_site_tag;
237
+ }
238
+ else { $twitter_username = ''; }
239
+
240
+ return $twitter_username;
241
+
242
+ }
243
+
244
  function kgvid_get_attachment_meta($post_id) {
245
 
246
  $options = kgvid_get_options();
284
  'gallery_order' => '',
285
  'gallery_id' => '',
286
  'duration' => '',
287
+ 'aspect' => '',
288
+ 'original_replaced' => ''
289
  );
290
 
291
  if ( $kgvid_postmeta == '' ) {
373
  $video_formats = array(
374
  "fullres" => array(
375
  "name" => __("same resolution H.264", 'video-embed-thumbnail-generator'),
376
+ "label" => __('Full', 'video-embed-thumbnail-generator'),
377
  "width" => INF,
378
  "height" => INF,
379
  "type" => "h264",
457
 
458
  $video_formats = $video_formats + array(
459
  "custom_h264" => array(
460
+ "name" => __('Custom MP4', 'video-embed-thumbnail-generator'),
461
+ "label" => __('Custom MP4', 'video-embed-thumbnail-generator'),
462
  "width" => 0,
463
  "height" => 0,
464
  "type" => "h264",
468
  "vcodec" => "libx264"
469
  ),
470
  "custom_webm" => array(
471
+ "name" => __('Custom WEBM', 'video-embed-thumbnail-generator'),
472
+ "label" => __('Custom WEBM', 'video-embed-thumbnail-generator'),
473
  "width" => 0,
474
  "height" => 0,
475
  "type" => "webm",
479
  "vcodec" => "libvpx"
480
  ),
481
  "custom_ogg" => array(
482
+ "name" => __('Custom OGV', 'video-embed-thumbnail-generator'),
483
+ "label" => __('Custom OGV', 'video-embed-thumbnail-generator'),
484
  "width" => 0,
485
  "height" => 0,
486
  "type" => "ogv",
701
  function kgvid_aac_encoders() {
702
 
703
  $aac_array = array("libfdk_aac", "libfaac", "aac", "libvo_aacenc");
704
+ return apply_filters('kgvid_aac_encoders', $aac_array);
705
 
706
  }
707
 
732
 
733
  }
734
 
735
+ function kgvid_is_animated_gif($filename) {
736
+ if(!($fh = @fopen($filename, 'rb')))
737
+ return false;
738
+ $count = 0;
739
+ //an animated gif contains multiple "frames", with each frame having a
740
+ //header made up of:
741
+ // * a static 4-byte sequence (\x00\x21\xF9\x04)
742
+ // * 4 variable bytes
743
+ // * a static 2-byte sequence (\x00\x2C) (some variants may use \x00\x21 ?)
744
+
745
+ // We read through the file til we reach the end of the file, or we've found
746
+ // at least 2 frame headers
747
+ while(!feof($fh) && $count < 2) {
748
+ $chunk = fread($fh, 1024 * 100); //read 100kb at a time
749
+ $count += preg_match_all('#\x00\x21\xF9\x04.{4}\x00(\x2C|\x21)#s', $chunk, $matches);
750
+ }
751
+
752
+ fclose($fh);
753
+ return $count > 1;
754
+ }
755
+
756
+ function kgvid_is_video($post) {
757
+
758
+ if ( $post->post_mime_type == 'image/gif' ) {
759
+ $moviefile = get_attached_file($post->ID);
760
+ $is_animated = kgvid_is_animated_gif($moviefile);
761
+ }
762
+ else { $is_animated = false; }
763
+
764
+ if ( substr($post->post_mime_type, 0, 5) == 'video' &&
765
+ ( empty($post->post_parent)
766
+ || (strpos(get_post_mime_type( $post->post_parent ), 'video') === false && get_post_meta($post->ID, '_kgflashmediaplayer-externalurl', true) == '' )
767
+ )
768
+ || $is_animated
769
+ ) { //if the attachment is a video with no parent or if it has a parent the parent is not a video and the video doesn't have the externalurl post meta
770
+
771
+ return true;
772
+
773
+ }
774
+ else {
775
+ return false;
776
+ }
777
+
778
+ }
779
+
780
  function kgvid_url_exists($url) {
781
  $hdrs = @get_headers($url);
782
  return is_array($hdrs) ? preg_match('/^HTTP\\/\\d+\\.\\d+\\s+2\\d\\d\\s+.*$/',$hdrs[0]) : false;
983
  $kgvid_postmeta['height'] = round(intval($kgvid_postmeta['width'])*$aspect_ratio);
984
 
985
  $dimensions = array( 'width' => strval($kgvid_postmeta['width']), 'height' => strval($kgvid_postmeta['height']), 'actualwidth' => strval($kgvid_postmeta['actualwidth']), 'actualheight' => strval($kgvid_postmeta['actualheight']) );
986
+
987
  return $dimensions;
988
 
989
  }
1126
  if ( is_writable($location['filepath']) ) { $encodevideo_info[$format]['writable'] = true; }
1127
  break;
1128
  }
1129
+ elseif ( !empty($postID) && !$encodevideo_info['sameserver'] && $name != "html5encodes" ) { //last resort if it's not on the same server, check url_exists
1130
 
1131
  $already_checked_url = get_post_meta($postID, '_kgflashmediaplayer-'.$sanitized_url['singleurl_id'].'-'.$format, true);
1132
  if ( empty($already_checked_url) ) {
1149
  }//end potential locations loop
1150
 
1151
  if ( !$encodevideo_info[$format]['exists'] ) {
1152
+ if ( get_post_type($postID) == "attachment" && is_writeable($encodevideo_info['encodepath']) ) {
1153
+ $encodevideo_info[$format]['url'] = $sanitized_url['noextension'].$format_stats['suffix'];
1154
+ $encodevideo_info[$format]['filepath'] = $encodevideo_info['encodepath'].$encodevideo_info['moviefilebasename'].$format_stats['suffix'];
1155
+ }
1156
+ else {
1157
+ $encodevideo_info[$format]['url'] = $uploads['url'].'/'.$encodevideo_info['moviefilebasename'].$format_stats['suffix'];
1158
+ $encodevideo_info[$format]['filepath'] = $uploads['path'].'/'.$encodevideo_info['moviefilebasename'].$format_stats['suffix'];
1159
+ }
1160
  }
1161
 
1162
  }//end format loop
1163
 
1164
+ return apply_filters('kgvid_encodevideo_info', $encodevideo_info, $movieurl, $postID);
1165
  }
1166
 
1167
  /**
1218
  else { $rotate = "0"; }
1219
 
1220
  switch ($rotate) {
1221
+ case "90": $movie_info['rotate'] = 90; break;
1222
+ case "180": $movie_info['rotate'] = 180; break;
1223
+ case "270": $movie_info['rotate'] = 270; break;
1224
+ case "-90": $movie_info['rotate'] = 270; break;
1225
  default: $movie_info['rotate'] = ""; break;
1226
  }
1227
 
1243
  $movie_info['worked'] = false;
1244
  }
1245
 
1246
+ return apply_filters('kgvid_get_video_dimensions', $movie_info, $video);
1247
  }
1248
 
1249
  function kgvid_generate_flashvars($content, $query_atts, $encodevideo_info, $id) {
1334
  $rate_control_flag = " -".$video_bitrate_flag." ".round(floatval($options['bitrate_multiplier'])*$width*$height*30/1024)."k";
1335
  }
1336
 
1337
+ if ( $rotate === false || $options['ffmpeg_vpre'] == "on" ) { $rotate = ""; }
1338
+ switch ($rotate) { //if it's a sideways mobile video
1339
+
1340
+ case 90:
1341
+ if ( empty($options['ffmpeg_watermark']['url']) ) {
1342
+ $rotate = ' -vf "transpose=1"';
1343
+ }
1344
+ else {
1345
+ $rotate = '';
1346
+ $rotate_complex = 'transpose=1[rotate];[rotate]';
1347
+ }
1348
+
1349
+ if ( $options['video_bitrate_flag'] == "on" || $options['ffmpeg_old_rotation'] == "on" ) {
1350
+ $rotate .= " -metadata rotate=0";
1351
+ }
1352
+ else {
1353
+ $rotate .= " -metadata:s:v:0 rotate=0";
1354
+ $width ^= $height ^= $width ^= $height; //swap height & width
1355
+ }
1356
+
1357
+ break;
1358
+
1359
+ case 270:
1360
+
1361
+ if ( empty($options['ffmpeg_watermark']['url']) ) {
1362
+ $rotate = ' -vf "transpose=2"';
1363
+ }
1364
+ else {
1365
+ $rotate = '';
1366
+ $rotate_complex = 'transpose=2[rotate];[rotate]';
1367
+ }
1368
+
1369
+ if ( $options['video_bitrate_flag'] == "on" || $options['ffmpeg_old_rotation'] == "on" ) {
1370
+ $rotate .= " -metadata rotate=0";
1371
+ }
1372
+ else {
1373
+ $rotate .= " -metadata:s:v:0 rotate=0";
1374
+ $width ^= $height ^= $width ^= $height; //swap height & width
1375
+ }
1376
+
1377
+ break;
1378
+
1379
+ case 180:
1380
+
1381
+ if ( empty($options['ffmpeg_watermark']['url']) ) {
1382
+ $rotate = ' -vf "hflip,vflip"';
1383
+ }
1384
+ else {
1385
+ $rotate = '';
1386
+ $rotate_complex = 'hflip,vflip[rotate];[rotate]';
1387
+ }
1388
+
1389
+ if ( $options['video_bitrate_flag'] == "on" || $options['ffmpeg_old_rotation'] == "on" ) { $rotate .= " -metadata rotate=0"; }
1390
+ else { $rotate .= " -metadata:s:v:0 rotate=0"; }
1391
+
1392
+ break;
1393
+
1394
+ default:
1395
+ $rotate = '';
1396
+ $rotate_complex = '';
1397
+ break;
1398
+ }
1399
+
1400
  if ( $options['ffmpeg_watermark']['url'] != "" ) {
1401
 
1402
  $watermark_width = strval(round(intval($movie_info['width'])*(intval($options['ffmpeg_watermark']['scale'])/100)));
1428
  }
1429
 
1430
  $watermark_input = '-i "'.$options['ffmpeg_watermark']['url'].'" ';
1431
+ $watermark_filter = ' -filter_complex "[1:v]scale='.$watermark_width.':-1[watermark];[0:v]'.$rotate_complex.'[watermark]overlay='.$watermark_align.'main_w*'.round($options['ffmpeg_watermark']['x']/100, 3).':'.$watermark_valign.'main_w*'.round($options['ffmpeg_watermark']['y']/100, 3).'"';
1432
  }
1433
  else {
1434
  $watermark_input = "";
1435
  $watermark_filter = "";
1436
  }
1437
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1438
  if ( $video_formats[$format]['type'] == 'h264' ) {
1439
 
1440
  $aac_array = kgvid_aac_encoders();
1495
 
1496
  } //if FFMPEG is found
1497
 
1498
+ return apply_filters('kgvid_generate_encode_string', $encode_string, $input, $output, $movie_info, $format, $width, $height, $rotate);
1499
 
1500
  }
1501
 
1555
  }// class Process
1556
 
1557
  function kgvid_video_embed_enqueue_scripts() {
1558
+
1559
  $options = kgvid_get_options();
1560
 
1561
  //Video.js styles
1562
  if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
1563
+ wp_enqueue_style( 'video-js', plugins_url("", __FILE__).'/video-js/video-js.css', '', '5.5.3' );
1564
  if ( $options['js_skin'] == 'kg-video-js-skin' ){ wp_enqueue_style( 'video-js-kg-skin', plugins_url("", __FILE__).'/video-js/kg-video-js-skin.css', '', $options['version'] ); }
1565
  }
1566
 
1567
+ //plugin-related frontend styles, requires dashicons
1568
+ wp_enqueue_style( 'kgvid_video_styles', plugins_url("/css/kgvid_styles.css", __FILE__), array( 'dashicons' ), $options['version'] );
1569
 
1570
  }
1571
  add_action('wp_enqueue_scripts', 'kgvid_video_embed_enqueue_scripts', 12);
1572
 
1573
  function enqueue_kgvid_script() { //loads plugin-related scripts in the admin area
1574
 
1575
+ if ( !wp_script_is('kgvid_video_plugin_admin', 'enqueued') ) {
1576
+
1577
+ $options = kgvid_get_options();
1578
 
1579
+ wp_enqueue_script( 'kgvid_video_plugin_admin', plugins_url('/js/kgvid_video_plugin_admin.js', __FILE__), array('jquery'), $options['version'], true );
1580
+ wp_enqueue_style( 'video_embed_thumbnail_generator_style', plugins_url('/css/video-embed-thumbnail-generator_admin.css', __FILE__), '', $options['version'] );
1581
+
1582
+ wp_localize_script( 'kgvid_video_plugin_admin', 'kgvidL10n', array(
1583
+ 'wait' => _x('Wait', 'please wait', 'video-embed-thumbnail-generator'),
1584
+ 'hidevideo' => __('Hide video...', 'video-embed-thumbnail-generator'),
1585
+ 'choosefromvideo' => __('Choose from video...', 'video-embed-thumbnail-generator'),
1586
+ 'cantloadvideo' => __('Can\'t load video', 'video-embed-thumbnail-generator'),
1587
+ 'choosethumbnail' => __('Choose Thumbnail:', 'video-embed-thumbnail-generator'),
1588
+ 'saveallthumbnails' => __('Save All Thumbnails', 'video-embed-thumbnail-generator'),
1589
+ 'saving' => __('Saving...', 'video-embed-thumbnail-generator'),
1590
+ 'loading' => __('Loading...', 'video-embed-thumbnail-generator'),
1591
+ 'generate' => __('Generate', 'video-embed-thumbnail-generator'),
1592
+ 'randomize' => __('Randomize', 'video-embed-thumbnail-generator'),
1593
+ 'ffmpegnotfound' => sprintf( __('%s not found', 'video-embed-thumbnail-generator'), strtoupper($options['video_app']) ),
1594
+ 'validurlalert' => __("Please enter a URL that points to a valid video file. Video sharing sites are not supported by this plugin.\nTo embed from YouTube, Vimeo, etc, just paste the link directly into the post window and WordPress will handle the rest.", 'video-embed-thumbnail-generator'),
1595
+ 'pleasevalidurl' => __('Please enter a valid video URL', 'video-embed-thumbnail-generator'),
1596
+ 'deletemessage' => __("You are about to permanently delete the encoded video.\n 'Cancel' to stop, 'OK' to delete.", 'video-embed-thumbnail-generator'),
1597
+ 'saved' => __('Saved.', 'video-embed-thumbnail-generator'),
1598
+ 'runningtest' => __('Running test...', 'video-embed-thumbnail-generator'),
1599
+ 'ffmpegrequired' => __('FFMPEG or LIBAV required for these functions.', 'video-embed-thumbnail-generator'),
1600
+ 'featuredwarning' => __("You are about to set all existing video thumbnails previously generated by this plugin as the featured images for their posts. There is no 'undo' button, so proceed at your own risk.", 'video-embed-thumbnail-generator'),
1601
+ 'autothumbnailwarning' => __("You are about to create thumbnails for every video in your Media Library that doesn't already have one. This might take a long time. There is no 'undo' button, so proceed at your own risk.\n\nNumber of videos without thumbnails: ", 'video-embed-thumbnail-generator'),
1602
+ 'autoencodewarning' => __("You are about to add every video in your Media Library to the video encode queue if it hasn't already been encoded. This might take a long time.", 'video-embed-thumbnail-generator'),
1603
+ 'nothumbstomake' => __("No thumbnails generated. All videos have thumbnails already.", 'video-embed-thumbnail-generator'),
1604
+ 'cancel_ok' => __("'Cancel' to stop, 'OK' to proceed.", 'video-embed-thumbnail-generator'),
1605
+ 'processing' => __('Processing...', 'video-embed-thumbnail-generator'),
1606
+ 'parentwarning_posts' => __("You are about to set all existing video thumbnails previously generated by this plugin as attachments of their posts rather than their associated videos. Proceed at your own risk.", 'video-embed-thumbnail-generator'),
1607
+ 'parentwarning_videos' => __("You are about to set all existing video thumbnails previously generated by this plugin as attachments of their videos rather than their associated posts. Proceed at your own risk.", 'video-embed-thumbnail-generator'),
1608
+ 'clearqueuedwarning' => __("You are about to clear all videos not yet encoded.", 'video-embed-thumbnail-generator'),
1609
+ 'clearallwarning' => __("You are about to clear all videos currently encoding, not yet encoded, completed successfully, and completed with errors.", 'video-embed-thumbnail-generator'),
1610
+ 'complete' => __('Complete', 'video-embed-thumbnail-generator'),
1611
+ 'tracktype' => __('Track type:', 'video-embed-thumbnail-generator'),
1612
+ 'subtitles' => __('subtitles', 'video-embed-thumbnail-generator'),
1613
+ 'captions' => __('captions', 'video-embed-thumbnail-generator'),
1614
+ 'chapters' => __('chapters', 'video-embed-thumbnail-generator'),
1615
+ 'choosetextfile' => __('Choose a Text File', 'video-embed-thumbnail-generator'),
1616
+ 'settracksource' => __('Set as track source', 'video-embed-thumbnail-generator'),
1617
+ 'choosefromlibrary' => __('Choose from Library', 'video-embed-thumbnail-generator'),
1618
+ 'languagecode' => __('Language code:', 'video-embed-thumbnail-generator'),
1619
+ 'label' => _x('Label:', 'noun', 'video-embed-thumbnail-generator'),
1620
+ 'trackdefault' => __('Default:', 'video-embed-thumbnail-generator'),
1621
+ 'custom' => _x('Custom', 'Custom format', 'video-embed-thumbnail-generator')
1622
+ ) );
1623
+ }
1624
 
1625
  }
1626
  add_action('admin_enqueue_scripts', 'enqueue_kgvid_script');
1627
  add_action('wp_enqueue_media', 'enqueue_kgvid_script');
1628
 
1629
+ function kgvid_get_first_embedded_video( $post ) {
1630
+
1631
+ $url = '';
1632
+ $attributes = array();
1633
+
1634
+ $first_embedded_video_meta = get_post_meta($post->ID, '_kgvid_first_embedded_video', true);
1635
+
1636
+ if ( !empty($first_embedded_video_meta) ) {
1637
+
1638
+ if ( is_array($first_embedded_video_meta['atts']) ) {
1639
+ $dataattributes = array_map(function($value, $key) {
1640
+ return $key.'="'.$value.'"';
1641
+ }, array_values($first_embedded_video_meta['atts']), array_keys($first_embedded_video_meta['atts']));
1642
+
1643
+ $dataattributes = ' '.implode(' ', $dataattributes);
1644
+ }
1645
+ else { $dataattributes = $first_embedded_video_meta['atts']; }
1646
+
1647
+ $shortcode_text = '[KGVID'.$dataattributes.']'.$first_embedded_video_meta['content'].'[/KGVID]';
1648
+
1649
+ }
1650
+ else { $shortcode_text = $post->post_content; }
1651
 
 
 
 
1652
  $pattern = get_shortcode_regex();
1653
+ preg_match_all( '/'. $pattern .'/s', $shortcode_text, $matches );
1654
 
1655
+ if ( is_array($matches)
1656
+ && array_key_exists( 2, $matches ) && array_key_exists( 5, $matches )
1657
+ && ( in_array( 'KGVID', $matches[2] ) || in_array( 'FMP', $matches[2] ) )
1658
+ ) { //if KGVID or FMP shortcode is in posts on this page.
1659
 
1660
+ if ( isset($matches) ) {
 
 
 
 
 
 
 
1661
 
1662
+ $first_key = array_search('KGVID', $matches[2]);
1663
+ if ( $first_key === false ) { $first_key = array_search('FMP', $matches[2]); }
1664
 
1665
+ if ( $first_key !== false ) {
 
1666
 
1667
+ $attributes = array();
1668
+ $url = "";
1669
 
1670
+ if ( array_key_exists( 3, $matches ) ) {
1671
+ $attributes = shortcode_parse_atts($matches[3][$first_key]);
1672
+ }
1673
 
1674
+ if ( !empty($matches[5][$first_key]) ) { //there's a URL
 
 
1675
 
1676
+ $url = $matches[5][$first_key];
1677
+ $attributes['id'] = kgvid_url_to_id($matches[5][$first_key]);
1678
 
1679
+ }//if there's a URL
 
1680
 
1681
+ elseif ( is_array($attributes) && array_key_exists( 'id', $attributes ) ) {
1682
+ $url = wp_get_attachment_url($attributes['id']);
1683
+ }//if there's no URL but there's an ID attribute
1684
 
1685
+ elseif ( ( is_array($attributes) && !array_key_exists( 'id', $attributes ) )
1686
+ || empty($attributes)
1687
+ ) {
1688
 
1689
+ $post_id = $post->ID;
 
 
1690
 
1691
+ $args = array(
1692
+ 'numberposts' => 1,
1693
+ 'post_mime_type' => 'video',
1694
+ 'post_parent' => $post_id,
1695
+ 'post_status' => null,
1696
+ 'post_type' => 'attachment'
1697
+ );
1698
+ $video_attachment = get_posts($args);
1699
 
1700
+ if ( $video_attachment ) {
1701
+ $attributes['id'] = $video_attachment[0]->ID;
1702
+ $url = wp_get_attachment_url($attributes['id']);
1703
+ }
 
 
 
 
1704
 
1705
+ }//if no URL or ID attribute
 
 
 
1706
 
1707
+ }//if there's a KGVID shortcode in the post
1708
+ }//if there's a shortcode in the post
1709
+ elseif ( is_attachment() ) {
1710
+ $attributes['id'] = $post->ID;
1711
+ $attributes['url'] = wp_get_attachment_url($post->ID);
1712
+ }
 
 
1713
 
1714
+ if ( array_key_exists( 'id', $attributes ) ) {
1715
+
1716
+ $kgvid_postmeta = kgvid_get_attachment_meta($attributes['id']);
1717
+ $kgvid_postmeta['poster'] = get_post_meta($attributes['id'], "_kgflashmediaplayer-poster", true);
1718
+ $dimensions = kgvid_set_video_dimensions($attributes['id']);
1719
+ $attributes = array_merge($dimensions, array_filter($kgvid_postmeta), $attributes);
1720
+
1721
+ }
1722
+
1723
+ }
1724
+
1725
+ $attributes['url'] = $url;
1726
+ return $attributes;
1727
+
1728
+ }
1729
+
1730
+ function kgvid_video_embed_print_scripts() {
1731
+
1732
+ global $wp_query;
1733
+ global $wpdb;
1734
+ global $wp_version;
1735
+ $posts = $wp_query->posts;
1736
+ $pattern = get_shortcode_regex();
1737
+ $options = kgvid_get_options();
1738
+
1739
+ //echo '<script type="text/javascript">document.createElement(\'video\');document.createElement(\'audio\');</script>'."\n";
1740
 
1741
+ if ( !empty($posts) && is_array($posts) ) {
1742
+ foreach ( $posts as $post ) {
1743
+ $first_embedded_video = kgvid_get_first_embedded_video( $post );
1744
+ if ( !empty($first_embedded_video['url']) ) { //if KGVID or FMP shortcode is in posts on this page.
1745
 
1746
+ if ( $options['open_graph'] == "on" ) {
1747
+
1748
+ remove_action('wp_head','jetpack_og_tags');
1749
+ echo '<meta property="og:url" content="'.esc_attr(get_permalink($post)).'" />'."\n";
1750
+ echo '<meta property="og:title" content="'.esc_attr(get_the_title($post)).'" />'."\n";
1751
+ echo '<meta property="og:description" content="'.esc_attr(kgvid_generate_video_description($first_embedded_video, $post)).'" />'."\n";
1752
+ echo '<meta property="og:video" content="'.$first_embedded_video['url'].'" />'."\n";
1753
+ $secure_url = str_replace('http://', 'https://', $first_embedded_video['url']);
1754
  echo '<meta property="og:video:secure_url" content="'.$secure_url.'" />'."\n";
1755
+ $mime_type_check = wp_check_filetype($first_embedded_video['url']);
1756
  echo '<meta property="og:video:type" content="'.$mime_type_check['type'].'" />'."\n";
1757
 
1758
+ if ( array_key_exists( 'width', $first_embedded_video ) ) {
1759
+ echo '<meta property="og:video:width" content="'.$first_embedded_video['width'].'" />'."\n";
1760
+ if ( array_key_exists( 'height', $first_embedded_video ) ) {
1761
+ echo '<meta property="og:video:height" content="'.$first_embedded_video['height'].'" />'."\n";
1762
  }
1763
  }
 
1764
 
1765
+ if ( array_key_exists( 'poster', $first_embedded_video) ) {
1766
+ echo '<meta property="og:image" content="'.$first_embedded_video['poster'].'" />'."\n";
1767
+ if ( array_key_exists( 'width', $first_embedded_video ) ) {
1768
+ echo '<meta property="og:image:width" content="'.$first_embedded_video['width'].'" />'."\n";
1769
+ if ( array_key_exists( 'height', $first_embedded_video ) ) {
1770
+ echo '<meta property="og:image:height" content="'.$first_embedded_video['height'].'" />'."\n";
1771
+ }
1772
+ }
1773
+ }
1774
+
1775
+ }
1776
 
1777
+ if ( $options['twitter_card'] == "on" && array_key_exists('id', $first_embedded_video) && !empty($first_embedded_video['id']) ) {
 
 
1778
 
1779
+ add_filter( 'jetpack_disable_twitter_cards', '__return_true', 99 );
1780
 
1781
+ echo '<meta name="twitter:card" content="player">'."\n";
1782
+ if ( !empty($options['twitter_username']) ) { echo '<meta name="twitter:site" content="@'.esc_attr($options['twitter_username']).'">'."\n"; }
1783
+ echo '<meta name="twitter:title" content="'.esc_attr($post->post_title).'">'."\n";
1784
+ echo '<meta name="twitter:description" content="'.substr(esc_attr(kgvid_generate_video_description($first_embedded_video, $post)), 0, 200).'">'."\n";
1785
+ if ( array_key_exists('poster', $first_embedded_video) ) {
1786
+ echo '<meta name="twitter:image" content="'.esc_attr(str_replace('http://', 'https://', $first_embedded_video['poster'])).'">'."\n";
1787
+ }
1788
+ echo '<meta name="twitter:player" content="'.esc_attr(str_replace('http://', 'https://', get_attachment_link($first_embedded_video['id']))).'?kgvid_video_embed%5Benable%5D=true'.'">'."\n";
1789
+ if ( array_key_exists( 'width', $first_embedded_video ) ) {
1790
+ echo '<meta name="twitter:player:width" content="'.esc_attr($first_embedded_video['width']).'">'."\n";
1791
+ }
1792
+ if ( array_key_exists( 'height', $first_embedded_video ) ) {
1793
+ echo '<meta name="twitter:player:height" content="'.esc_attr($first_embedded_video['height']).'">'."\n";
1794
+ }
1795
 
1796
+ $encodevideo_info = kgvid_encodevideo_info($first_embedded_video['url'], $first_embedded_video['id']);
1797
+ $twitter_stream = false;
1798
+ if ( array_key_exists('mobile', $encodevideo_info) && $encodevideo_info['mobile']['exists'] ) {
1799
+ $twitter_stream = $encodevideo_info['mobile']['url'];
1800
  }
1801
+ elseif ( get_post_mime_type($first_embedded_video['id']) == 'video/mp4' ) {
1802
+ $twitter_stream = $first_embedded_video['url'];
1803
+ }
1804
+ if ( $twitter_stream ) {
1805
+ echo '<meta name="twitter:player:stream" content="'.esc_attr(str_replace('http://', 'https://', $twitter_stream)).'">'."\n";
1806
+ echo '<meta name="twitter:player:stream:content_type" content="video/mp4; codecs=&quot;avc1.42E01E1, mp4a.40.2&quot;">'."\n";
1807
+ }
1808
+
1809
+
1810
+ }
1811
+
1812
+ if ( $wp_version < 4.4 && array_key_exists( 'id', $first_embedded_video ) && $options['oembed_provider'] == "on" && is_singular() ) {
1813
+
1814
+ echo '<link rel="alternate" type="application/json+oembed" href="' . site_url('/?kgvid_video_embed[oembed]=json&amp;kgvid_video_embed[post_id]=' .$first_embedded_video['id']).'" />'."\n";
1815
+ echo '<link rel="alternate" type="application/xml+oembed" href="' . site_url('/?kgvid_video_embed[oembed]=xml&amp;kgvid_video_embed[post_id]='.$first_embedded_video['id']).'" />'."\n";
1816
 
1817
  }
1818
 
1823
  }//end if posts
1824
 
1825
  }
1826
+ add_action('wp_head', 'kgvid_video_embed_print_scripts', 9 );
1827
+
1828
+ function kgvid_change_oembed_data( $data, $post, $width, $height ) {
1829
+
1830
+ $options = kgvid_get_options();
1831
+
1832
+ $first_embedded_video = kgvid_get_first_embedded_video( $post );
1833
+
1834
+ if ( !empty($data) && !empty($first_embedded_video['url']) && $options['oembed_provider'] == "on" ) {
1835
+
1836
+ $data['type'] = 'video';
1837
+
1838
+ if ( !empty($first_embedded_video['poster']) ) { $data['thumbnail_url'] = $first_embedded_video['poster']; }
1839
+
1840
+ }
1841
+
1842
+ return apply_filters('kgvid_change_oembed_data', $data, $post, $width, $height );
1843
+
1844
+ }
1845
+ if ( function_exists('get_oembed_response_data') ) { add_filter( 'oembed_response_data', 'kgvid_change_oembed_data', 11, 4 ); }
1846
+
1847
+ function kgvid_change_oembed_iframe_url ( $embed_url, $post ) {
1848
+
1849
+ $options = kgvid_get_options();
1850
+
1851
+ if ( $options['oembed_provider'] == "on" ) {
1852
+
1853
+ $first_embedded_video = kgvid_get_first_embedded_video( $post );
1854
+
1855
+ if ( array_key_exists( 'id', $first_embedded_video ) ) {
1856
+
1857
+ $embed_url = site_url('/')."?attachment_id=".$first_embedded_video['id']."&amp;kgvid_video_embed[enable]=true";
1858
+
1859
+ }
1860
+
1861
+ }
1862
+
1863
+ return apply_filters('kgvid_change_oembed_iframe_url', $embed_url, $post);
1864
+
1865
+ }
1866
+ if ( function_exists('get_post_embed_url') ) { add_filter( 'post_embed_url', 'kgvid_change_oembed_iframe_url', 11, 2 ); } //added in WP version 4.4
1867
+
1868
+ function kgvid_change_oembed_html($output, $post, $width, $height) {
1869
+
1870
+ $output = preg_replace('/<blockquote(.*)<\/script>/s', '', $output);
1871
+
1872
+ return $output;
1873
+
1874
+ }
1875
+ if ( function_exists('get_post_embed_html') ) { add_filter( 'embed_html', 'kgvid_change_oembed_html', 11, 4 ); } //added in WP version 4.4
1876
+
1877
+ /* function kgvid_replace_oembed_content($template) {
1878
+
1879
+ $options = kgvid_get_options();
1880
+
1881
+ if ( $options['oembed_provider'] == "on" ) {
1882
+
1883
+ global $post;
1884
+ if ( $post ) { $first_embedded_video = kgvid_get_first_embedded_video( $post ); }
1885
+ if ( $first_embedded_video && !empty($first_embedded_video['id']) && basename($template) == 'embed.php' ) {
1886
+ $template = plugin_dir_path( __FILE__ ) . 'includes/embed.php';
1887
+ }
1888
+ }
1889
+
1890
+ return $template;
1891
+
1892
+ }
1893
+ add_filter( 'template_include', 'kgvid_replace_oembed_content', 99 ); */
1894
 
1895
  function kgvid_enqueue_shortcode_scripts() {
1896
 
1898
 
1899
  if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
1900
  wp_enqueue_script( 'video-quality-selector', plugins_url("", __FILE__).'/video-js/video-quality-selector.js', array('video-js'), $options['version'], true );
1901
+ wp_enqueue_script( 'video-js', plugins_url("", __FILE__).'/video-js/video.js', '', '5.5.3', true );
1902
  add_action('wp_footer', 'kgvid_print_videojs_footer', 99);
1903
  }
1904
 
1906
  wp_enqueue_script( 'swfobject' );
1907
  }
1908
 
1909
+ if ( !wp_script_is('kgvid_video_embed', 'enqueued') ) {
1910
 
1911
+ wp_enqueue_script( 'kgvid_video_embed', plugins_url("/js/kgvid_video_embed.js", __FILE__), array('jquery'), $options['version'], true );
1912
+
1913
+ wp_localize_script( 'kgvid_video_embed', 'kgvidL10n_frontend', array(
1914
+ 'ajaxurl' => admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' ),
1915
+ 'ajax_nonce' => wp_create_nonce('kgvid_frontend_nonce'),
1916
+ 'playstart' => _x("Play Start", 'noun for Google Analytics event', 'video-embed-thumbnail-generator'),
1917
+ 'completeview' => _x("Complete View", 'noun for Google Analytics event', 'video-embed-thumbnail-generator'),
1918
+ 'next' => _x("Next", 'button text to play next video', 'video-embed-thumbnail-generator'),
1919
+ 'previous' => _x("Previous", 'button text to play previous video', 'video-embed-thumbnail-generator'),
1920
+ 'quality' => _x("Quality", 'text above list of video resolutions', 'video-embed-thumbnail-generator')
1921
+ ) );
1922
+
1923
+ }
1924
 
1925
  }
1926
 
1927
  function kgvid_print_videojs_footer() { //called by the shortcode if Video.js is used
1928
 
1929
+ echo '<script type="text/javascript">if(typeof videojs !== "undefined") { videojs.options.flash.swf = "'.plugins_url("", __FILE__).'/video-js/video-js.swf?5.0.1"; }</script>'."\n";
1930
 
1931
  }
1932
 
1991
  $below_video = 0;
1992
  if ( !empty($query_atts['caption']) ) { $below_video = 1; }
1993
  $kgvid_postmeta = kgvid_get_attachment_meta( $attachment->ID );
 
1994
 
1995
  $play_button_html = '';
1996
 
2026
  if ( $kgvid_postmeta['downloadlink'] == "on" ) { $atts['downloadlink'] = "true"; }
2027
 
2028
  $popup_atts = kgvid_shortcode_atts($atts);
2029
+ if ( in_the_loop() ) { $post_id = get_the_ID(); }
2030
+ else { $post_id = 1; }
2031
  $content = '';
2032
+ $popup_code = kgvid_single_video_code($popup_atts, $atts, $content, $post_id);
2033
 
2034
  preg_match('/data-kgvid_video_vars=.*? /', $popup_code, $video_vars);
2035
  $popup_code = str_replace(array("\r", "\n", "\t", $video_vars[0]), "", $popup_code);
2067
 
2068
  } //if there are attachments
2069
 
2070
+ return apply_filters('kgvid_gallery_page', $code, $kgvid_video_id);
2071
 
2072
  }
2073
 
2087
  add_action( 'wp_ajax_kgvid_switch_gallery_page', 'kgvid_switch_gallery_page' ); // ajax for logged in users
2088
  add_action( 'wp_ajax_nopriv_kgvid_switch_gallery_page', 'kgvid_switch_gallery_page' ); // ajax for not logged in users
2089
 
2090
+ function kgvid_generate_video_description($query_atts, $post = false) {
2091
+
2092
+ if ( array_key_exists('description', $query_atts) && !empty($query_atts['description']) && $query_atts['description'] != "false" ) {
2093
+ $description = $query_atts['description'];
2094
+ }
2095
+ elseif ( array_key_exists('description', $query_atts) && !empty($query_atts['caption']) && $query_atts['caption'] != "false" ) {
2096
+ $description = $query_atts['caption'];
2097
+ }
2098
+ elseif ( $post != false || ( in_the_loop() && !is_attachment() ) ) {
2099
+
2100
+ if ( $post == false ) { global $post; }
2101
+
2102
+ $yoast_meta = get_post_meta( $post->ID, '_yoast_wpseo_metadesc', true ); //try Yoast SEO meta description tag
2103
+ $aioseop_meta = get_post_meta( $post->ID, '_aioseop_description', true ); //try All in one SEO Pack meta description tag
2104
+
2105
+ if ( !empty($yoast_meta) ) {
2106
+ $description = $yoast_meta;
2107
+ }
2108
+ elseif ( !empty($aioseop_meta) ) {
2109
+ $description = $aioseop_meta;
2110
+ }
2111
+ elseif ( !empty($post->post_excerpt) ) {
2112
+ $description = $post->post_excerpt;
2113
+ }
2114
+ else {
2115
+ $description = wp_trim_words(strip_tags(strip_shortcodes($post->post_content)));
2116
+ }
2117
+ }
2118
+ if ( empty($description) ) { $description = __('Video', 'video-embed-thumbnail-generator'); }
2119
+
2120
+ return apply_filters('kgvid_generate_video_description', $description, $query_atts);
2121
+
2122
+ }
2123
+
2124
+ function kgvid_single_video_code($query_atts, $atts, $content, $post_id) {
2125
 
2126
  global $content_width;
2127
  $content_width_save = $content_width;
2133
  $code = "";
2134
  $id_array = array();
2135
  $video_formats = kgvid_video_formats();
2136
+ $compatible = array("flv", "f4v", "mp4", "mov", "m4v", "ogv", "ogg", "webm");
2137
+ $h264compatible = array("mp4", "mov", "m4v");
2138
 
2139
  if ( empty($content) ) {
2140
  if ( !empty($query_atts["id"]) ) {
2141
  $id_array[0] = $query_atts["id"];
2142
  }
2143
+ elseif ( $post_id != 1 ) {
2144
  $args = array(
2145
  'numberposts' => $query_atts['videos'],
2146
  'post_mime_type' => 'video',
2147
+ 'post_parent' => $post_id,
2148
  'post_status' => null,
2149
  'post_type' => 'attachment',
2150
  'orderby' => $query_atts['orderby'],
2179
  $mp4already = false;
2180
  $dimensions = array();
2181
 
2182
+ if ( $query_atts['gallery'] == 'false' && $kgvid_video_id === 0 && $post_id != 1 ) {
2183
+ $first_embedded_video['atts'] = $atts;
2184
+ $first_embedded_video['content'] = $content;
2185
+ $first_embedded_video_meta = get_post_meta($post_id, '_kgvid_first_embedded_video', true);
2186
+ if ( $first_embedded_video_meta != $first_embedded_video ) {
2187
+ update_post_meta($post_id, '_kgvid_first_embedded_video', $first_embedded_video);
2188
+ }
2189
+ }
2190
 
2191
  if ( !empty($id) ) { //if the video is an attachment in the WordPress db
2192
 
2226
  $stats_title = $query_atts['title'];
2227
  }
2228
  else { $stats_title = $attachment_info->post_title; }
2229
+ if ( empty($query_atts['caption']) ) { $query_atts['caption'] = trim($attachment_info->post_excerpt); }
2230
+ if ( empty($query_atts['description']) ) { $query_atts['description'] = trim($attachment_info->post_content); }
2231
 
2232
  $countable = true;
2233
  }
2234
  else { //video is not in the database
2235
 
2236
+ $encodevideo_info = kgvid_encodevideo_info($content, $post_id); //send the id of the post the video's embedded in
2237
  if ( $query_atts['title'] == "true" ) {
2238
  $query_atts['title'] = "false";
2239
  }
2293
  }
2294
 
2295
  if ( ( $query_atts['title'] != "false" && $options['embed_method'] != "JW Player" )
2296
+ || $query_atts['embedcode'] != "false"
2297
+ || $query_atts['downloadlink'] == "true"
2298
+ || $options['twitter_button'] == 'on'
2299
+ || $options['facebook_button'] == 'on'
2300
+ ) { //generate content overlaid on video
2301
  $kgvid_meta = true;
2302
  }
2303
  else { $kgvid_meta = false; }
2317
  'endofvideooverlay' => $query_atts['endofvideooverlay'],
2318
  'resize' => $query_atts['resize'],
2319
  'auto_res' => $query_atts['auto_res'],
2320
+ 'pixel_ratio' => $query_atts['pixel_ratio'],
2321
  'right_click' => $query_atts['right_click']
2322
  );
2323
 
2324
+ if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
2325
+
2326
+ $locale = get_locale();
2327
+
2328
+ $enable_resolutions_plugin = false;
2329
+ $x = 20;
2330
+ $h264_resolutions = array();
2331
+
2332
+ foreach ($video_formats as $format => $format_stats) {
2333
+ if ( $format != "original" && $encodevideo_info[$format]["url"] == $content ) { unset($sources['original']); }
2334
+ if ( $encodevideo_info[$format]["exists"] ) {
2335
+
2336
+ if ( array_key_exists('height', $encodevideo_info[$format]) && $format_stats['type'] == 'h264' ) {
2337
+ $source_key = $encodevideo_info[$format]['height'];
2338
+ $format_stats['label'] = $encodevideo_info[$format]['height'].'p';
2339
+ }
2340
+ else { $source_key = $x; }
2341
+
2342
+ $sources[$source_key] = "\t\t\t\t\t".'<source src="'.esc_attr($encodevideo_info[$format]["url"]).'?id='.$kgvid_video_id.'" type="'.$format_stats["mime"].'"';
2343
+ if ( $format == 'vp9' ) { $sources[$source_key] .= ' codecs="vp9, vorbis"'; }
2344
+ if ( $format_stats['type'] == 'h264' ) {
2345
+ $sources[$source_key] .= ' data-res="'.$format_stats['label'].'"';
2346
+ if ( $mp4already ) { //there is more than one resolution available
2347
+ $enable_resolutions_plugin = true;
2348
+ }
2349
+ $mp4already = true;
2350
+ $h264_resolutions[] = $format_stats['label'];
2351
+ }
2352
+ else { $sources[$source_key] .= ' data-res="'.$format_stats['name'].'"'; }
2353
+ $sources[$source_key] .= '>'."\n";
2354
+ }
2355
+ $x--;
2356
+ }
2357
+ krsort($sources);
2358
+ natsort($h264_resolutions);
2359
+
2360
+ $video_variables['nativecontrolsfortouch'] = $query_atts['nativecontrolsfortouch'];
2361
+ $video_variables['locale'] = substr($locale, 0, 2);
2362
+
2363
+ if ( $enable_resolutions_plugin ) {
2364
+ $video_variables['enable_resolutions_plugin'] = "true";
2365
+ if ( $query_atts["auto_res"] == "highest" ) { $video_variables['default_res'] = end($h264_resolutions); }
2366
+ if ( $query_atts["auto_res"] == "lowest" ) { $video_variables['default_res'] = reset($h264_resolutions); }
2367
+ elseif ( in_array($query_atts["auto_res"], $h264_resolutions) ) { $video_variables['default_res'] = $query_atts["auto_res"]; }
2368
+ else { $video_variables['default_res'] = false; }
2369
+ }
2370
+ else { $video_variables['enable_resolutions_plugin'] = false; }
2371
+
2372
+ }
2373
+
2374
  if ( $options['embed_method'] == "Strobe Media Playback" && $flash_settings['flash_source_found'] ) {
2375
 
2376
  $video_variables['swfurl'] = plugins_url('', __FILE__)."/flash/StrobeMediaPlayback.swf";
2381
  } //if Strobe Media
2382
 
2383
  $code .= '<div id="kgvid_'.$div_suffix.'_wrapper" class="kgvid_wrapper'.$aligncode.'">'."\n\t\t\t";
2384
+ $code .= '<div id="video_'.$div_suffix.'_div" class="fitvidsignore kgvid_videodiv" data-id="'.$div_suffix.'" data-kgvid_video_vars="'.esc_attr(json_encode($video_variables)).'" ';
2385
+ if ( $query_atts["schema"] == "true" ) {
2386
+ $code .= 'itemprop="video" itemscope itemtype="https://schema.org/VideoObject">';
2387
+ if ( $query_atts["poster"] != '' ) { $code .= '<meta itemprop="thumbnailUrl" content="'.esc_attr($query_atts["poster"]).'" />'; }
2388
+ if ( !empty($id) && $options['embeddable'] == "on" ) { $schema_embedURL = site_url('/')."?attachment_id=".$id."&amp;kgvid_video_embed[enable]=true"; }
2389
+ else { $schema_embedURL = $content; }
2390
+ $code .= '<meta itemprop="embedUrl" content="'.esc_attr($schema_embedURL).'" />';
2391
+ $code .= '<meta itemprop="contentUrl" content="'.$content.'" />';
2392
+
2393
+ if ( !empty($query_atts['title']) && $query_atts['title'] != "false" ) { $code .= '<meta itemprop="name" content="'.esc_attr($query_atts['title']).'" />'; }
2394
+ elseif ( in_the_loop() && !is_attachment() ) {
2395
+ global $post;
2396
+ if ( !empty($post->post_title) ) { $code .= '<meta itemprop="name" content="'.esc_attr($post->post_title).'" />'; }
 
 
2397
  }
 
 
 
 
 
 
2398
 
2399
+ $description = kgvid_generate_video_description($query_atts);
2400
+
2401
+ $code .= '<meta itemprop="description" content="'.esc_attr($description).'" />';
2402
+
2403
+ if ( !empty($id) ) { $upload_date = get_the_date('c', $id); }
2404
+ elseif ( $post_id != 1 ) { $upload_date = get_the_date('c', $post_id); }
2405
+ else { $upload_date = current_time('c'); }
2406
+ $code .= '<meta itemprop="uploadDate" content="'.esc_attr($upload_date).'" />';
2407
+ }
2408
+ else { $code .= '>'; } //schema disabled
2409
 
2410
  $track_keys = array('kind', 'srclang', 'src', 'label', 'default');
2411
  if ( !isset($kgvid_postmeta) || ( is_array($kgvid_postmeta) && !is_array($kgvid_postmeta['track']) ) ) {
2422
  foreach ( $track_attribute as $attribute => $value ) {
2423
  if ( empty($value) ) { $track_attribute[$attribute] = $query_atts['track_'.$attribute]; }
2424
  }
2425
+
2426
  if ( $options['embed_method'] == "WordPress Default" && $track_attribute['kind'] == 'captions' ) { $track_attribute['kind'] = 'subtitles'; }
2427
+ $track_code .= "<track id='".$div_suffix."_text_".$track."' kind='".esc_attr($track_attribute['kind'])."' src='".esc_attr($track_attribute['src'])."' srclang='".esc_attr($track_attribute['srclang'])."' label='".esc_attr($track_attribute['label'])."' ".$track_attribute['default']." />";
2428
  }
2429
  }
2430
 
2431
  if ( $options['embed_method'] == "WordPress Default" ) {
2432
+
2433
+ $enable_resolutions_plugin = false;
2434
+ $x = 20;
2435
+ $h264_resolutions = array();
2436
  $attr = array();
2437
+
2438
  foreach ($video_formats as $format => $format_stats) {
2439
+
2440
  if ( $format != "original" && $encodevideo_info[$format]["url"] == $content ) { unset($sources['original']); }
2441
+
2442
  if ( $encodevideo_info[$format]["exists"] ) {
2443
+
2444
+ if ( array_key_exists('height', $encodevideo_info[$format]) && $format_stats['type'] == 'h264' ) {
2445
+ $source_key = $encodevideo_info[$format]['height'];
2446
+ $format_stats['label'] = $encodevideo_info[$format]['height'].'p';
2447
+ }
2448
+ else { $source_key = $x; }
2449
+
2450
+ $sources[$source_key] = '<source src="'.esc_attr($encodevideo_info[$format]["url"]).'?id='.$kgvid_video_id.'" type="'.$format_stats["mime"].'"';
2451
+ if ( $format == 'vp9' ) { $sources[$source_key] .= ' codecs="vp9, vorbis"'; }
2452
+ if ( $format_stats['type'] == 'h264' ) {
2453
+ $sources[$source_key] .= ' data-res="'.$format_stats['label'].'"';
2454
+ if ( $mp4already ) { //there is more than one resolution available
2455
+ $enable_resolutions_plugin = true;
2456
+ }
2457
+ $h264_resolutions[] = $format_stats['label'];
2458
+ }
2459
+ else { $sources[$source_key] .= ' data-res="'.$format_stats['name'].'"'; }
2460
+
2461
+ if ( $format_stats['type'] != "h264" || !$mp4already ) { //build wp_video_shortcode attributes. Sources will be replaced later
2462
  $shortcode_type = wp_check_filetype( $encodevideo_info[$format]["url"], wp_get_mime_types() );
2463
  $attr[$shortcode_type['ext']] = $encodevideo_info[$format]["url"];
2464
+ if ( $format_stats['type'] == "h264" ) {
2465
  $mp4already = true;
2466
  }
2467
  }
 
2468
  }
2469
+ $x--;
2470
+ }
2471
+ krsort($sources);
2472
+ natsort($h264_resolutions);
2473
+
2474
+ if ( $enable_resolutions_plugin ) {
2475
+
2476
+ $default_key = false;
2477
+
2478
+ if ( $query_atts["auto_res"] == "highest" ) {
2479
+ $res_label = end($h264_resolutions);
2480
+ }
2481
+ elseif ( $query_atts["auto_res"] == "lowest" ) {
2482
+ $res_label = reset($h264_resolutions);
2483
+ }
2484
+ elseif ( in_array($query_atts["auto_res"], $h264_resolutions) ) {
2485
+ $res_label = $query_atts["auto_res"];
2486
+ }
2487
+ else { $res_label = false; }
2488
+
2489
+ foreach ( $sources as $key => $source ) {
2490
+ if ( strpos($source, 'data-res="'.$res_label.'"') !== false ) { $default_key = $key; }
2491
+ }
2492
+
2493
+ if ( $default_key !== false ) { $sources[$default_key] .= ' data-default_res="true"'; }
2494
+
2495
  }
2496
 
2497
  if ( $query_atts["poster"] != '' ) { $attr['poster'] = esc_attr($query_atts["poster"]); }
2501
  $attr['width'] = $query_atts['width'];
2502
  $attr['height'] = $query_atts['height'];
2503
 
2504
+ if ( $enable_resolutions_plugin && !wp_script_is('mejs_sourcechooser', 'enqueued') ) {
2505
+ wp_enqueue_script( 'mejs_sourcechooser', plugins_url( 'js/mep-feature-sourcechooser.js', __FILE__ ), array( 'mediaelement' ), $options['version'], true );
2506
+ wp_localize_script( 'wp-mediaelement', '_wpmejsSettings', array(
2507
+ 'features' => array( 'playpause', 'progress', 'volume', 'tracks', 'sourcechooser', 'fullscreen' ),
2508
+ 'pluginPath' => includes_url( 'js/mediaelement/', 'relative' ),
2509
+ 'success' => 'kgvid_mejs_success'
2510
+ ) );
2511
+ }
2512
+ elseif ( $kgvid_video_id === 0 ) {
2513
+ wp_localize_script( 'wp-mediaelement', '_wpmejsSettings', array(
2514
+ 'features' => array( 'playpause', 'progress', 'volume', 'fullscreen' ),
2515
+ 'pluginPath' => includes_url( 'js/mediaelement/', 'relative' ),
2516
+ 'success' => 'kgvid_mejs_success'
2517
+ ) );
2518
+ }
2519
+
2520
  $content_width = $query_atts['width'];
2521
  if ( function_exists('wp_video_shortcode') ) { $executed_shortcode = wp_video_shortcode($attr); }
2522
  else { $executed_shortcode = 'WordPress video shortcode function does not exist.'; }
2523
  $content_width = $content_width_save;
2524
+
2525
+ if ( $enable_resolutions_plugin ) {
2526
+ $executed_shortcode = preg_replace( '/<source .*<a /', implode(' />', $sources).'<a ', $executed_shortcode );
2527
  }
2528
+ if ( !empty($track_code) ) {
2529
+ $executed_shortcode = preg_replace( '/<a /', $track_code.'<a ', $executed_shortcode );
 
2530
  }
2531
+
2532
  $code .= $executed_shortcode;
2533
  }
2534
 
2574
  if ( $query_atts["autoplay"] == 'true' ) { $jw_shortcode .= 'autostart="true" '; }
2575
  if ( $query_atts["controlbar"] == 'none') { $jw_shortcode .= 'controls="false" '; }
2576
  if ( $query_atts['title'] != "false" ) { $jw_shortcode .= ' title="'.$query_atts['title'].'" '; }
2577
+ if ( $query_atts['jw_player_id'] != "") {
2578
+ $jw_player_config = get_option('jwp6_player_config_'.$query_atts['jw_player_id']);
2579
+ if ( !empty($jw_player_config) ) { $jw_shortcode .= ' player="'.$query_atts['jw_player_id'].'" '; }
2580
  }
2581
 
2582
  if ( !empty($query_atts['custom_atts']) && is_array($query_atts['custom_atts']) ) {
2601
 
2602
  if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
2603
 
2604
+ $code .= "\n\t\t\t\t".'<video id="video_'.$div_suffix.'" ';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2605
  if ( $query_atts["loop"] == 'true') { $code .= 'loop '; }
2606
  if ( $query_atts["autoplay"] == 'true') { $code .= 'autoplay '; }
2607
  if ( $query_atts["controlbar"] != 'none') { $code .= 'controls '; }
2608
  $code .= 'preload="'.$options['preload'].'" ';
2609
  if ( $query_atts["poster"] != '' ) { $code .= 'poster="'.esc_attr($query_atts["poster"]).'" '; }
2610
  $code .= 'width="'.$query_atts["width"].'" height="'.esc_attr($query_atts["height"]).'"';
 
2611
  if ( $options['js_skin'] == "" ) { $options['js_skin'] = "vjs-default-skin"; }
2612
  if ( is_array($atts) && array_key_exists('skin', $atts) ) {
2613
  $options['js_skin'] = $atts['skin']; //allows user to set skin for individual videos using the skin="" attribute
2614
  }
2615
+ $code .= ' class="fitvidsignore '.esc_attr('video-js '.$options['js_skin']).'">'."\n";
 
 
 
 
 
 
 
 
 
2616
 
2617
  $code .= implode("", $sources); //add the <source> tags created earlier
2618
  $code .= $track_code; //if there's a text track
2621
  }
2622
  $code .= "\t\t\t</div>\n";
2623
  $show_views = false;
2624
+ if ( ( !empty($id) && $query_atts['view_count'] == "true" ) || !empty($query_atts['caption']) || $content == plugins_url('/images/sample-video-h264.mp4', __FILE__) ) { //generate content below the video
2625
  if ( is_array($kgvid_postmeta) && array_key_exists('starts', $kgvid_postmeta) ) { $view_count = number_format(intval($kgvid_postmeta['starts'])); }
2626
  else { $view_count = "0"; }
2627
  if ( $content == plugins_url('/images/sample-video-h264.mp4', __FILE__) ) { $view_count = "XX"; }
2629
  if ( !empty($query_atts['caption']) || $show_views || $query_atts['downloadlink'] == "true" ) {
2630
  $code .= "\t\t\t".'<div class="kgvid_below_video" id="video_'.$div_suffix.'_below">';
2631
  if ( $show_views ) { $code .= '<div class="kgvid-viewcount" id="video_'.$div_suffix.'_viewcount">'.sprintf( _n( '%s view', '%s views', intval(str_replace(',', '', $view_count)) , 'video-embed-thumbnail-generator'), $view_count ).'</div>'; }
2632
+ if ( !empty($query_atts['caption']) ) {
2633
+ $code .= '<div class="kgvid-caption" id="video_'.$div_suffix.'_caption">'.$query_atts['caption'].'</div>';
 
 
 
 
 
 
 
 
 
 
 
 
 
2634
  }
2635
  $code .= '</div>';
2636
  }
2637
  }
2638
 
2639
  if ( $kgvid_meta == true ) { //generate content overlaid on video
2640
+ $code .= "\t\t\t<div style=\"display:none;\" id=\"video_".$div_suffix."_meta\" class=\"kgvid_video_meta kgvid_video_meta_hover ";
 
 
 
 
 
 
2641
  if ( $query_atts['title'] != "false" && $options['embed_method'] != "JW Player" ) {
2642
+ $show_title = true;
2643
+ $code .= "\">";
2644
+ }
2645
+ else {
2646
+ $show_title = false;
2647
+ if ( $options['embed_method'] == "JW Player" ) { $code .= "kgvid_jwplayer_meta "; }
2648
+ $code .= "kgvid_no_title_meta\">";
2649
+ } //no title
2650
+
2651
+ $code .= "\n\t\t\t\t<span class='kgvid_meta_icons'>";
2652
+
2653
+ if ( $query_atts['downloadlink'] == "true" ) {
2654
+ $forceable = false;
2655
+ if ( !empty($id) && $options['click_download'] == 'on' ) {
2656
+ $filepath = get_attached_file($id);
2657
+ if ( file_exists($filepath) ) {
2658
+ $forceable = true;
2659
+ $download_code = '<a href="'.site_url('/').'?attachment_id='.$id.'&kgvid_video_embed[download]=true" title="'.__('Click to download', 'video-embed-thumbnail-generator').'">';
2660
+ }
2661
+ }
2662
+ if ( !$forceable ) { $download_code = '<a href="'.$content.'" title="'.__('Right-click or ctrl-click to download', 'video-embed-thumbnail-generator').'">'; }
2663
+ $download_code .= '<span class="dashicons dashicons-download"></span></a>';
2664
+ }
2665
+ else { $download_code = ''; }
2666
+
2667
+ if ( $query_atts['embedcode'] != "false" || $options['twitter_button'] == 'on' || $options['facebook_button'] == 'on' ) {
2668
+
2669
+ $embed_code = "\t\t\t\t<span id='kgvid_".$div_suffix."_shareicon' class='dashicons dashicons-share' onclick='kgvid_share_icon_click(\"".$div_suffix."\");'></span>\n";
2670
+ $embed_code .= "\t\t\t\t<div id='click_trap_".$div_suffix."' class='kgvid_click_trap'></div><div id='video_".$div_suffix."_embed' class='kgvid_share_container";
2671
+ if ( $show_title == false ) { $embed_code .= " kgvid_no_title_meta"; }
2672
+ $embed_code .= "'><div class='kgvid_share_icons'>";
2673
+ if ( $query_atts['embedcode'] != "false" ) {
2674
+ if ( $query_atts['embedcode'] == "true" ) { $iframeurl = site_url('/')."?attachment_id=".$id."&amp;kgvid_video_embed[enable]=true"; }
2675
+ else { $iframeurl = $query_atts['embedcode']; }
2676
+ $iframecode = "<iframe allowfullscreen src='".$iframeurl."' frameborder='0' scrolling='no' width='".esc_attr($query_atts['width'])."' height='".esc_attr($query_atts["height"])."'></iframe>";
2677
+ $iframecode = apply_filters('kgvid_embedcode', $iframecode, $iframeurl, $id, $query_atts);
2678
+ $embed_code .= "<span class='dashicons dashicons-editor-code'></span><span>"._x('Embed:', 'precedes code for embedding video', 'video-embed-thumbnail-generator')." </span><input type='text' value='".esc_attr($iframecode)."' onClick='this.select();'></span>";
2679
+ } //embed code
2680
+
2681
+ if ( $options['twitter_button'] == 'on' || $options['facebook_button'] == 'on' ) {
2682
+
2683
+ $embed_code .= "<div class='kgvid_social_icons'>";
2684
+ if ( in_the_loop() ) { $permalink = get_permalink(); }
2685
+ elseif ( !empty($id) ) { $permalink = get_attachment_link($id); }
2686
+ else { $permalink = $content; }
2687
+
2688
+ if ( $options['twitter_button'] == 'on' ) {
2689
+ $embed_code .= "<a href='https://twitter.com/share?text=".urlencode($query_atts['title'])."&url=".urlencode($permalink);
2690
+ if ( !empty($options['twitter_username']) ) { $embed_code .= "&via=".urlencode($options['twitter_username']); }
2691
+ $embed_code .= "' onclick='window.open(this.href, \"\", \"menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=260,width=600\");return false;'><span class='dashicons dashicons-twitter'></span></a>";
2692
+ }
2693
+
2694
+ if ( $options['facebook_button'] == 'on' ) {
2695
+ $embed_code .= "&nbsp;<a href='https://www.facebook.com/sharer/sharer.php?u=".urlencode($permalink)."' onclick='window.open(this.href, \"\", \"menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=260,width=600\");return false;'><span class='kgvid_facebook_icon_holder'><span class='dashicons dashicons-facebook'></span></span></a>";
2696
+ }
2697
+
2698
+ $embed_code .= "</div>";
2699
+
2700
+ }
2701
+
2702
+ $embed_code .= "</div></div>\n";
2703
+ }
2704
+ else { $embed_code = ''; }
2705
+
2706
+ if ( $options['embed_method'] != "JW Player" ) {
2707
+ $code .= $download_code.$embed_code;
2708
  }
2709
+ else {
2710
+ $code .= $embed_code.$download_code;
2711
+ }
2712
+
2713
+ $code .= "</span>";
2714
+ if ( $show_title == true ) { $code .= "\n\t\t\t\t<span id='video_".$div_suffix."_title' class='kgvid_title'>".$query_atts['title']."</span>\n"; }
2715
+ $code .= "</div>\n";
2716
  }
2717
 
2718
  if ( !empty($query_atts["watermark"]) && $query_atts["watermark"] != "false" ) {
2767
 
2768
  } //end id_array loop
2769
 
2770
+ return apply_filters('kgvid_single_video_code', $code, $query_atts, $atts, $content, $post_id);
2771
 
2772
  }
2773
 
2775
 
2776
  $options = kgvid_get_options();
2777
 
2778
+ if ( in_the_loop() ) { $post_id = get_the_ID(); }
2779
+ else { $post_id = 1; }
2780
 
2781
  $default_atts = array(
2782
  'id' => '',
2810
  'gallery_order' => 'ASC',
2811
  'gallery_exclude' => '',
2812
  'gallery_include' => '',
2813
+ 'gallery_id' => $post_id,
2814
  'gallery_end' => $options['gallery_end'],
2815
  'gallery_title' => $options['gallery_title'],
2816
  'volume' => $options['volume'],
2825
  'right_click' => $options['right_click'],
2826
  'resize' => $options['resize'],
2827
  'auto_res' => $options['auto_res'],
2828
+ 'pixel_ratio' => $options['pixel_ratio'],
2829
+ 'nativecontrolsfortouch' => $options['nativecontrolsfortouch'],
2830
+ 'jw_player_id' => $options['jw_player_id'],
2831
+ 'schema' => $options['schema'],
2832
  'track_kind' => 'subtitles',
2833
  'track_srclang' => substr(get_bloginfo('language'), 0, 2),
2834
  'track_src' => '',
2865
  "downloadlink",
2866
  "mute",
2867
  "fullwidth",
2868
+ "gallery_title",
2869
+ "nativecontrolsfortouch",
2870
+ "pixel_ratio",
2871
+ "schema"
2872
  );
2873
  foreach ( $checkbox_convert as $query ) {
2874
  if ( $query_atts[$query] == "on" ) { $query_atts[$query] = "true"; }
2880
  if ( $query_atts['orderby'] == 'menu_order' ) { $query_atts['orderby'] = 'menu_order ID'; }
2881
  if ( $query_atts['track_default'] == 'true' ) { $query_atts['track_default'] = 'default'; }
2882
 
2883
+ return apply_filters('kgvid_shortcode_atts', $query_atts);
2884
 
2885
  }
2886
 
2893
 
2894
  kgvid_enqueue_shortcode_scripts();
2895
 
2896
+ if ( in_the_loop() ) { $post_id = get_the_ID(); }
2897
+ else { $post_id = 1; }
2898
 
2899
  $query_atts = kgvid_shortcode_atts($atts);
2900
 
2901
  if ( $query_atts["gallery"] != "true" ) { //if this is not a pop-up gallery
2902
 
2903
+ $code = kgvid_single_video_code($query_atts, $atts, $content, $post_id);
2904
 
2905
  } //if not gallery
2906
 
2941
 
2942
  } //if not feed
2943
 
2944
+ return apply_filters('KGVID_shortcode', $code, $query_atts, $content);
2945
 
2946
  }
2947
  add_shortcode('FMP', 'KGVID_shortcode');
2961
  $video_id = $_POST['video_id'];
2962
  $parent_id = $_POST['parent_id'];
2963
  $format = $_POST['format'];
2964
+ if ( isset($_POST['blog_id']) ) { $blog_id = $_POST['blog_id']; }
2965
+ else { $blog_id = false; }
2966
+
2967
+ if ( !empty($blog_id) && $blog_id != 'false' ) { switch_to_blog($blog_id); }
2968
 
2969
+ $video_encode_queue = kgvid_get_encode_queue();
2970
+
2971
+ if ( $video_encode_queue ) {
2972
+
2973
+ foreach ( $video_encode_queue as $video_key => $video_entry ) {
2974
+ if ( !empty($video_entry['attachmentID']) && $video_entry['attachmentID'] == $parent_id
2975
+ && ( array_key_exists('blog_id', $video_entry) && $video_entry['blog_id'] == $blog_id || $blog_id == 'false' )
2976
+ && array_key_exists('encode_formats', $video_entry)
2977
+ && array_key_exists($format, $video_entry['encode_formats'])
2978
+ && array_key_exists('status', $video_entry['encode_formats'][$format])
2979
+ ) {
2980
+ $video_encode_queue[$video_key]['encode_formats'][$format]['status'] = 'notchecked';
2981
+ kgvid_save_encode_queue($video_encode_queue);
2982
+ break;
2983
+ }
2984
+ }
2985
+
2986
+ }
2987
 
2988
  $post = get_post($video_id);
2989
  update_post_meta( $video_id, '_kgflashmediaplayer-format', $format );
2991
  $post->post_parent = $parent_id;
2992
  wp_update_post($post);
2993
 
2994
+ if ( !empty($blog_id) && $blog_id != 'false' ) { restore_current_blog(); }
2995
 
2996
  die();
2997
+
2998
  }
2999
  add_action('wp_ajax_kgvid_update_child_format', 'kgvid_update_child_format');
3000
 
3026
  check_ajax_referer( 'video-embed-thumbnail-generator-nonce', 'security' );
3027
 
3028
  if ( isset( $_POST['page'] ) ) { $page = $_POST['page']; }
3029
+ else { die(); }
3030
 
3031
  $video_encode_queue = kgvid_get_encode_queue();
3032
 
3034
 
3035
  foreach ( $video_encode_queue as $video_key => $video_entry ) {
3036
 
3037
+ if ( $page == 'attachment' && array_key_exists('blog_id', $video_entry) && get_current_blog_id() != $video_entry['blog_id'] ) { //remove all entries from other blogs on attachment pages
3038
+ unset($video_encode_queue[$video_key]);
3039
+ continue;
3040
+ }
3041
+
3042
  if ( !empty($video_entry['movieurl']) && !empty($video_entry['attachmentID']) ) {
3043
  $encodevideo_info = kgvid_encodevideo_info($video_entry['movieurl'], $video_entry['attachmentID']);
3044
  }
3076
  $something_to_encode = false;
3077
  $encoding_now = false;
3078
  $time_to_wait = 5000;
3079
+ $user_delete_capability = false;
3080
+
3081
+ if ( is_multisite() ) { $blog_id = get_current_blog_id(); }
3082
+ else { $blog_id = false; }
3083
 
3084
  if ( get_post_type($post_id) == "attachment" ) {
3085
  $kgvid_postmeta = kgvid_get_attachment_meta($post_id);
3086
  if ( array_key_exists('encode'.$format, $kgvid_postmeta) ) { $encodeset = $kgvid_postmeta['encode'.$format]; }
3087
  else { $encodeset = 'false'; }
3088
+ $post = get_post($post_id);
3089
+ $current_user = wp_get_current_user();
3090
+ if ( $post && ( $current_user->ID == $post->post_author )
3091
+ || ( current_user_can('edit_others_video_encodes') )
3092
+ ) {
3093
+ $user_delete_capability = true;
3094
+ }
3095
+
3096
  }
3097
  if ( $encodeset == "false" && strpos($format, 'custom_') === false ) { $encodeset = $options['encode_'.$format]; }
3098
 
3106
  }
3107
 
3108
  if ( !empty($encodevideo_info) ) {
3109
+
3110
  if ( $encodevideo_info[$format]['exists'] ) { //if the video file exists
3111
 
3112
  if ( array_key_exists('id', $encodevideo_info[$format]) ) {
3113
  $child_id = $encodevideo_info[$format]['id'];
3114
+ $was_picked = get_post_meta( $child_id, '_kgflashmediaplayer-pickedformat', true );
3115
  }
3116
  else { $was_picked = false; }
3117
 
3118
  if ( $status != "encoding" ) { // not currently encoding
3119
+
3120
  if ( $status == "notchecked" ) {
3121
  if ( $was_picked != false ) { $meta = ' <strong>Set: '.basename($encodevideo_info[$format]['filepath']).'</strong>'; }
3122
  else { $meta = ' <strong>Encoded</strong>'; }
3123
  }
3124
  if ( $status != "canceling" ) {
3125
 
 
 
3126
  if ( $encodevideo_info[$format]['writable']
3127
  && current_user_can('encode_videos')
3128
+ && $user_delete_capability == true
3129
  && $format != "fullres" ) {
3130
  if ( $was_picked != false ) {
3131
  $meta .= '<a id="unpick-'.$post_id.'-'.$format.'" class="kgvid_delete-format" onclick="kgvid_clear_video(\''.$movieurl.'\', \''.$post_id.'\', \''.$child_id.'\', \''.$blog_id.'\');" href="javascript:void(0)">'.__('Clear Format', 'video-embed-thumbnail-generator').'</a>';
3167
  $something_to_encode = false;
3168
  }
3169
 
3170
+ $meta_array = array( 'checked' => $checked, 'disabled' => $disabled, 'meta' => $meta, 'time_to_wait'=> $time_to_wait, 'something_to_encode' => $something_to_encode, 'encoding_now' => $encoding_now, 'blog_id' => $blog_id );
3171
 
3172
  return $meta_array;
3173
 
3202
 
3203
  function kgvid_generate_encode_checkboxes($movieurl, $post_id, $page, $blog_id = false) {
3204
 
3205
+ global $user_ID;
3206
+
3207
  $options = kgvid_get_options();
3208
  $video_encode_queue = kgvid_get_encode_queue();
3209
  $video_formats = kgvid_video_formats();
3218
  $encodevideo_info = array();
3219
  $is_attachment = false;
3220
 
3221
+ if ( !empty($blog_id) && $blog_id != 'false' ) {
3222
+ switch_to_blog($blog_id);
3223
+ $blog_name_text = '['.$blog_id.']';
3224
+ $blog_id_text = $blog_id.'-';
3225
+ }
3226
+ else {
3227
+ $blog_name_text = '';
3228
+ $blog_id_text = '';
3229
+ }
3230
 
3231
+ if ( !empty($movieurl) ) {
3232
 
3233
  $encodevideo_info = kgvid_encodevideo_info($movieurl, $post_id);
3234
  $sanitized_url = kgvid_sanitize_url($movieurl);
3235
  $movieurl = $sanitized_url['movieurl'];
3236
  if ( get_post_type($post_id) == "attachment" ) { //if the video is in the database
3237
  $is_attachment = true;
3238
+ $kgvid_postmeta = kgvid_get_attachment_meta($post_id);
3239
  $post_mime_type = get_post_mime_type($post_id);
3240
  $dimensions = kgvid_set_video_dimensions($post_id);
3241
  $actualwidth = $dimensions['actualwidth'];
3242
  $actualheight = $dimensions['actualheight'];
3243
+ $post = get_post($post_id);
3244
  }
3245
  else { //video's not in the database
3246
  $is_attachment = false;
3247
  unset($video_formats['fullres']);
3248
 
3249
+ $check_mime_type = wp_check_filetype($movieurl);
3250
+ $post_mime_type = $check_mime_type['type'];
3251
 
3252
  if ( !empty($video_encode_queue) ) {
3253
  foreach ($video_encode_queue as $video_key => $video_entry) {
3279
  }
3280
  else { $ffmpeg_disabled_text = ""; }
3281
 
3282
+ if ( ($is_attachment && $user_ID != $post->post_author && !current_user_can('edit_others_video_encodes') ) || !current_user_can('encode_videos') ) {
3283
+ $ffmpeg_disabled_text = ' disabled title="'.__('Insufficient priveleges to encode this video', 'video-embed-thumbnail-generator').'"';
3284
+ $security_disabled = true;
3285
+ }
3286
+ else { $security_disabled = false; }
3287
+
3288
  $video_key = false;
3289
  if ( !empty($video_encode_queue) && !empty($movieurl) ) {
3290
  foreach ($video_encode_queue as $video_key => $video_entry) {
3316
  }
3317
  }
3318
 
3319
+ if ( $post_mime_type == 'image/gif' ) {
3320
+ $fullres_only = array('fullres');
3321
+ $video_formats = array_intersect_key($video_formats, array_flip($fullres_only));
3322
+ }
3323
+
3324
+ $checkboxes = '<div id="attachments-'.$blog_id_text.$post_id.'-kgflashmediaplayer-encodeboxes" class="kgvid_checkboxes_section"><ul>';
3325
 
3326
  foreach ( $video_formats as $format => $format_stats ) {
3327
 
3343
 
3344
  if ( !empty($encodevideo_info) && !$encodevideo_info[$format]['exists'] && strpos($format, 'custom_') === 0 ) { continue; } //skip custom formats that don't exist
3345
 
3346
+ if ( $format == 'fullres' ) {
3347
+
3348
+ if ( $encodevideo_info['fullres']['exists'] == true && $format_stats['status'] != "encoding" ) {
3349
+ unlink($encodevideo_info[$format]['filepath']);
3350
+ $encodevideo_info['fullres']['exists'] = false;
3351
+ }
3352
+
3353
+ if ( isset($kgvid_postmeta)
3354
+ && array_key_exists('original_replaced', $kgvid_postmeta)
3355
+ && $kgvid_postmeta['original_replaced'] == $options['replace_format']
3356
+ ) {
3357
+ $format_stats['name'] = sprintf( _x('%s again', 'Replace original with full resolution format again', 'video-embed-thumbnail-generator'), $format_stats['name']);
3358
+ }
3359
+
3360
+ }
3361
+
3362
  if ( !array_key_exists('lastline', $format_stats) ) { $format_stats['lastline'] = ''; }
3363
  $meta_array = kgvid_encode_format_meta($encodevideo_info, $video_key, $format, $format_stats['status'], $format_stats['lastline'], $post_id, $movieurl, $page);
3364
 
3365
  if ( $meta_array['something_to_encode'] == true ) { $something_to_encode = true; }
3366
  if ( $meta_array['encoding_now'] == true ) { $encoding_now = true; }
3367
 
3368
+ $checkboxes .= "\n\t\t\t".'<li><input class="kgvid_encode_checkbox" type="checkbox" id="attachments-'.$blog_id_text.$post_id.'-kgflashmediaplayer-encode'.$format.'" name="attachments'.$blog_name_text.'['.$post_id.'][kgflashmediaplayer-encode'.$format.']" '.$meta_array['checked'].' '.$ffmpeg_disabled_text.$meta_array['disabled'].'> <label for="attachments-'.$blog_id_text.$post_id.'-kgflashmediaplayer-encode'.$format.'">'.$format_stats['name'].'</label> <span id="attachments-'.$blog_id_text.$post_id.'-kgflashmediaplayer-meta'.$format.'" class="kgvid_format_meta">'.$meta_array['meta'].'</span>';
3369
 
3370
+ if ( !$security_disabled && $is_attachment && empty($meta_array['disabled']) && $format != 'fullres' && $page != 'queue' ) { $checkboxes .= "<span id='pick-".$post_id."-".$format."' class='button-secondary kgvid_encode_checkbox_button' data-choose='".sprintf( __('Choose %s', 'video-embed-thumbnail-generator'), $format_stats['name'] )."' data-update='".sprintf( __('Set as %s', 'video-embed-thumbnail-generator'), $format_stats['name'] )."' onclick='kgvid_pick_format(this, \"".$post_id."\", \"".esc_attr($format_stats['mime'])."\", \"".$format."\", \"".esc_attr($movieurl)."\", \"".$blog_id."\");'>".__('Choose from Library', 'video-embed-thumbnail-generator')."</span>";
3371
  }
3372
  $checkboxes .= '</li>';
3373
 
3381
 
3382
  if ( $page == "queue" ) {
3383
  $button_text = _x('Update', 'Button text', 'video-embed-thumbnail-generator');
3384
+ $checkboxes .= "\n\t\t\t".'<input type="hidden" name="attachments'.$blog_name_text.'['.$post_id.'][kgflashmediaplayer-url]" value="'.$movieurl.'">';
3385
  }
3386
  else { $button_text = _x('Encode selected', 'Button text', 'video-embed-thumbnail-generator'); }
3387
 
3388
+ $checkboxes .= '<input type="button" id="attachments-'.$blog_id_text.$post_id.'-kgflashmediaplayer-encode" name="attachments'.$blog_name_text.'['.$post_id.'][kgflashmediaplayer-encode]" class="button-secondary" value="'.$button_text.'" onclick="kgvid_enqueue_video_encode(\''.$post_id.'\', \''.$blog_id.'\');" '.$ffmpeg_disabled_text.$encode_disabled.'/><div style="display:block;" id="attachments-'.$blog_id_text.$post_id.'-encodeplaceholder"></div>';
 
3389
 
3390
  if ( $page != "queue" ) {
3391
  $checkboxes .= '<small><em>'.__('Generates additional video formats compatible with most mobile & HTML5-compatible browsers', 'video-embed-thumbnail-generator').'</em></small>';
3398
  }
3399
 
3400
  if ( !$encoding_now && ($last_format['status'] == "queued" || $last_format['status'] == "canceling") ) {
3401
+ $checkboxes .= '<script type="text/javascript">percent_timeout = setTimeout(function(){ kgvid_redraw_encode_checkboxes("'.$video_entry['movieurl'].'", "'.$video_entry['attachmentID'].'", "'.$page.'", "'.$blog_id.'") }, 5000); jQuery(\'#wpwrap\').data("KGVIDCheckboxTimeout", percent_timeout);</script>';
3402
  }
3403
 
3404
  if ( $encoding_now ) {
3407
  }
3408
  $checkboxes .= '</div>'; //close encodeboxes div
3409
 
3410
+ if ( !empty($blog_id) && $blog_id != 'false' ) { restore_current_blog(); }
3411
 
3412
  $arr = array('checkboxes'=>$checkboxes, 'encoding'=>$encoding_now );
3413
 
3443
  $html = "";
3444
  $current_user = wp_get_current_user();
3445
  $video_encode_queue = kgvid_get_encode_queue();
3446
+ $nonce = wp_create_nonce('video-embed-thumbnail-generator-nonce');
3447
 
3448
  $crons = _get_cron_array();
3449
 
3475
  $video_formats = kgvid_video_formats();
3476
  $currently_encoding = array();
3477
  $queued = array();
3478
+
3479
  $html .= "<input type='hidden' name='attachments[kgflashmediaplayer-security]' value='".$nonce."' />";
3480
 
3481
  foreach ( $video_encode_queue as $order => $video_entry ) {
3482
 
3483
+ if ( array_key_exists('blog_id', $video_entry) ) {
3484
+
3485
+ $blog_id = $video_entry['blog_id'];
3486
+ $blog_name_text = '['.$blog_id.']';
3487
+ $blog_id_text = $blog_id.'-';
3488
+
3489
+ $same_blog = true;
3490
+
3491
+ if ( $video_entry['blog_id'] == get_current_blog_id() ) {
3492
+ $same_blog = true;
3493
+ }
3494
+ else {
3495
+ $same_blog = false;
3496
+ if ( is_network_admin() || $scope == "network" ) { switch_to_blog($blog_id); }
3497
+ }
3498
+
3499
+ }
3500
+ else {
3501
+ $blog_id = false;
3502
+ $blog_name_text = '';
3503
+ $blog_id_text = '';
3504
+ $same_blog = true;
3505
+ }
3506
+
3507
+ $html .= "\t<tr id='tr-".$blog_id_text.$video_entry['attachmentID']."'";
3508
 
3509
  if ( is_array($video_entry['encode_formats']) ) {
3510
  foreach ( $video_formats as $format => $format_stats ) {
3535
  elseif ( $queued[$order] ) { $html .= " class='kgvid_queued' "; }
3536
  else { $html .= " class='kgvid_complete' "; }
3537
 
 
 
 
3538
  $html .= ">";
3539
 
3540
  //Order
3541
+ $html .= "<td id='td-".$blog_id_text.$video_entry['attachmentID']."'>".strval(intval($order)+1)."</td>\n";
3542
 
3543
  //User
 
3544
  $post = get_post( $video_entry['attachmentID'] );
3545
 
3546
  if ( ( is_network_admin() || 'network' == $scope )
3547
+ || ( $same_blog && $post && $current_user->ID == $post->post_author )
3548
+ || ( current_user_can('edit_others_video_encodes') && $same_blog )
3549
+ ) {
3550
 
3551
+ if ( array_key_exists('user_id', $video_entry) && !empty($video_entry['user_id']) ) {
3552
+ $user = get_userdata($video_entry['user_id']);
3553
+ $html .= "<td>".$user->display_name."</td>\n";
3554
+ }
3555
+ elseif ( $post ) {
3556
  $user = get_userdata( $post->post_author );
3557
  $html .= "<td>".$user->display_name."</td>\n";
3558
  }
3561
  //Site
3562
  if ( (is_network_admin() || 'network' == $scope) && $blog_id ) {
3563
  $blog_details = get_bloginfo();
3564
+ $html .= "<td><a href='".get_admin_url($blog_id)."'>".$blog_details."</a><input type='hidden' name='attachments[blog_id][".$video_entry['attachmentID']."]' value='".$blog_id."'></td>\n";
3565
  }
3566
 
3567
  //Thumbnail
3583
  $html .= "\t\t\t\t\t<td><a href='".$attachmentlink."'> ".$thumbnail_html."</a></td>\n";
3584
  $path_info = pathinfo($moviefilepath);
3585
  $file_name = basename($moviefilepath,'.'.$path_info['extension']);
3586
+ $html .= "\t\t\t\t\t<td><a href='".$attachmentlink."'>".urldecode($file_name)."</a><input type='hidden' name='attachments".$blog_name_text."[".$video_entry['attachmentID']."][kgflashmediaplayer-url]' value='".$video_entry['movieurl']."'></td>\n";
3587
 
3588
  //Formats
3589
  $html .= "\t\t\t\t\t<td class='queue_encode_formats' id='formats_".$video_entry['attachmentID']."'>";
3590
+ $html .= "<input type='hidden' id='attachments-".$blog_id_text.$video_entry['attachmentID']."-kgflashmediaplayer-security' name='attachments".$blog_name_text."[".$video_entry['attachmentID']."][kgflashmediaplayer-security]' value='".$nonce."' />";
3591
 
3592
  if ( is_array($video_entry['encode_formats']) ) { $checkboxes = kgvid_generate_encode_checkboxes($video_entry['movieurl'], $video_entry['attachmentID'], 'queue', $blog_id); }
3593
  else { $checkboxes = array('checkboxes' => __('Please wait while this video is automatically added to the queue...', 'video-embed-thumbnail-generator') ); }
3596
 
3597
  //Actions
3598
  $html .= "\t\t\t\t\t<td>";
3599
+ $html .= "<a id='clear-".$blog_id_text.$video_entry['attachmentID']."' class='submitdelete' href='javascript:void(0)' onclick='kgvid_encode_queue(\"delete\", ".$order.", ".$video_entry['attachmentID'].", \"".$blog_id."\")'";
3600
  if ( $currently_encoding[$order] ) { $html .= " style='display:none;'"; }
3601
  $html .= ">Clear</a>";
3602
 
3603
  }//end if current user can see this stuff
3604
+ elseif ( $same_blog == false ) {
3605
+ $html .= "<td colspan='".strval($total_columns-1)."'><strong class='kgvid_queue_message'>".__("Other site's video", 'video-embed-thumbnail-generator')."</strong></td>";
3606
+ }
3607
+ else {
3608
+ $html .= "<td colspan='".strval($total_columns-1)."'><strong class='kgvid_queue_message'>".__("Other user's video", 'video-embed-thumbnail-generator')."</strong></td>";
3609
+ }
3610
  $html .= "</td></tr>\n";
3611
 
3612
  if ( (is_network_admin() || 'network' == $scope) && $blog_id ) { restore_current_blog(); }
3613
 
3614
  }
3615
  }
3616
+
3617
+ if ( empty($html) || $html == "<input type='hidden' name='attachments[kgflashmediaplayer-security]' value='".$nonce."' />" ) { $html = "\t<tr><td colspan='".strval($total_columns)."'><strong class='kgvid_queue_message'>".__('Queue is empty', 'video-embed-thumbnail-generator')."</strong></td></tr>\n"; }
3618
 
3619
  return $html;
3620
 
3637
 
3638
  function kgvid_FFMPEG_Queue_Page() {
3639
 
3640
+ wp_enqueue_media();
3641
+
3642
  ?>
3643
  <div class="wrap">
3644
  <div id="icon-tools" class="icon32"><br /></div>
3645
+ <h1><?php _e('Video Embed & Thumbnail Generator Encoding Queue', 'video-embed-thumbnail-generator') ?></h1>
3646
  <p></p>
3647
  <form method="post" action="tools.php?page=kgvid_video_encoding_queue">
3648
  <?php wp_nonce_field('video-embed-thumbnail-generator-nonce','video-embed-thumbnail-generator-nonce'); ?>
3659
  </tbody>
3660
  </table>
3661
  <p>
3662
+ <?php if ( current_user_can('edit_others_video_encodes') ) { echo "<div class='attachment-info'><div class='actions'><a href='javascript:void(0)' onclick='kgvid_encode_queue(\"clear_completed\", 0, 0);'>". __('Clear All Completed', 'video-embed-thumbnail-generator') ."</a> | <a href='javascript:void(0)' onclick='kgvid_encode_queue(\"clear_queued\", 0, 0, \"\");'>". __('Clear All Queued', 'video-embed-thumbnail-generator') ."</a> | <a href='javascript:void(0)' onclick='kgvid_encode_queue(\"clear_all\", 0, 0, \"\");'>". __('Clear All', 'video-embed-thumbnail-generator') ."</a></div></div>"; } ?>
3663
  </p>
3664
  </form>
3665
  </div>
3720
  ?>
3721
  <div class="wrap">
3722
  <div class="icon32" id="icon-options-general"><br></div>
3723
+ <h1>Video Embed & Thumbnail Generator Network Settings</h1>
3724
  <?php settings_errors( __FILE__ ); ?>
3725
  <form method="post">
3726
  <input type="hidden" name="action" value="update_kgvid_network_settings" />
3768
  <script type='text/javascript'>
3769
  jQuery(document).ready(function() {
3770
  kgvid_hide_plugin_settings();
3771
+ kgvid_moov_setting();
3772
  jQuery('form :input').change(function() {
3773
  kgvid_save_plugin_settings(this);
3774
  });
3782
  function kgvid_superadmin_capabilities_callback() {
3783
 
3784
  $network_options = get_site_option('kgvid_video_embed_network_options');
3785
+ echo "<input ".checked( $network_options['superadmin_only_ffmpeg_settings'], "on", false )." id='superadmin_only_ffmpeg_settings' name='kgvid_video_embed_options[superadmin_only_ffmpeg_settings]' type='checkbox' /> <label for='superadmin_only_ffmpeg_settings'>".sprintf( _x('Access %s settings tab.', 'Access FFMPEG settings tab', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($network_options['video_app'])."</strong>" )."</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__( sprintf( 'Only Super admins will be allowed to view and modify %s settings.', "<strong class='video_app_name'>".strtoupper($network_options['video_app'])."</strong>" ), 'video-embed-thumbnail-generator' )."</span></a><br>\n\t";
3786
+
3787
+ echo "<div class='kgvid_video_app_required'>";
3788
+ echo __('Email all encoding errors on the network to:', 'video-embed-thumbnail-generator')." <select id='network_error_email' name='kgvid_video_embed_options[network_error_email]'>";
3789
+ $network_super_admins = get_super_admins();
3790
+ if ( $network_super_admins ) {
3791
+ $authorized_users = array();
3792
+ foreach ( $network_super_admins as $network_super_admin ) {
3793
+ $user = get_user_by('login', $network_super_admin);
3794
+ $authorized_users[$network_super_admin] = $user->ID;
3795
+ }
3796
+ }
3797
+ $items = array_merge( array(
3798
+ __('Nobody', 'video-embed-thumbnail-generator') => 'nobody',
3799
+ __('User who initiated encoding', 'video-embed-thumbnail-generator') => 'encoder'
3800
+ ), $authorized_users
3801
+ );
3802
+ foreach($items as $name=>$value) {
3803
+ $selected = ($network_options['network_error_email']==$value) ? 'selected="selected"' : '';
3804
+ echo "<option value='$value' $selected>$name</option>";
3805
+ }
3806
+ echo "</select> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __( 'Can also be set on individual sites if the %s settings tab isn\'t disabled.' , 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($network_options['video_app'])."</strong>" )."</a></span>";
3807
+ echo "</div>\n\t";
3808
 
3809
  }
3810
 
3822
  ?>
3823
  <div class="wrap">
3824
  <div class="icon32" id="icon-options-general"><br></div>
3825
+ <h1>Video Embed & Thumbnail Generator</h1>
3826
  <?php if ( !is_multisite()
3827
  || ( function_exists( 'is_plugin_active_for_network' ) && is_plugin_active_for_network( plugin_basename(__FILE__) ) && $options['ffmpeg_exists'] == "on" && is_array($network_options) && (is_super_admin() || $network_options['superadmin_only_ffmpeg_settings'] == false) )
3828
  ) { ?>
3887
  }//end setting initial network options
3888
  else { //network options introduced in version 4.3 exist already
3889
 
3890
+ $network_options_old = $network_options;
3891
+
3892
  if ( !array_key_exists('superadmin_only_ffmpeg_settings', $network_options) ) {
3893
  $default_network_options = kgvid_default_network_options();
3894
  $network_options['superadmin_only_ffmpeg_settings'] = $default_network_options['superadmin_only_ffmpeg_settings'];
3895
+ }
3896
+
3897
+ if ( !array_key_exists('network_error_email', $network_options) ) {
3898
+ $network_options['network_error_email'] = 'nobody';
3899
+ }
3900
+
3901
+ if ( $network_options_old != $network_options ) {
3902
  update_site_option('kgvid_video_embed_network_options', $network_options);
3903
  }
3904
 
3967
  add_settings_field('playbutton', __('Play button overlay:', 'video-embed-thumbnail-generator'), 'kgvid_playbutton_callback', __FILE__, 'kgvid_video_embed_flash_settings', array( 'label_for' => 'playbutton' ) );
3968
 
3969
  add_settings_field('generate_thumbs', __('Default number of thumbnails to generate:', 'video-embed-thumbnail-generator'), 'kgvid_generate_thumbs_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'generate_thumbs' ) );
3970
+ add_settings_field('security', __('Video sharing:', 'video-embed-thumbnail-generator'), 'kgvid_security_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'right_click' ) );
 
3971
  add_settings_field('featured', __('Featured image:', 'video-embed-thumbnail-generator'), 'kgvid_featured_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'featured' ) );
3972
  add_settings_field('thumb_parent', __('Attach thumbnails to:', 'video-embed-thumbnail-generator'), 'kgvid_thumb_parent_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'thumb_parent' ) );
3973
+ add_settings_field('user_roles', __('User capabilities:', 'video-embed-thumbnail-generator'), 'kgvid_user_roles_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'user_roles' ) );
3974
  add_settings_field('delete_children', __('Delete associated attachments:', 'video-embed-thumbnail-generator'), 'kgvid_delete_children_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'delete_children' ) );
3975
  add_settings_field('titlecode', __('Video title text HTML formatting:', 'video-embed-thumbnail-generator'), 'kgvid_titlecode_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'titlecode' ) );
3976
  add_settings_field('template', __('Attachment page design:', 'video-embed-thumbnail-generator'), 'kgvid_template_callback', __FILE__, 'kgvid_video_embed_plugin_settings', array( 'label_for' => 'template' ) );
3984
  add_settings_field('encode_formats', __('Default video encode formats:', 'video-embed-thumbnail-generator'), 'kgvid_encode_formats_callback', __FILE__, 'kgvid_video_embed_encode_settings');
3985
  add_settings_field('automatic', __('Do automatically on upload:', 'video-embed-thumbnail-generator'), 'kgvid_automatic_callback', __FILE__, 'kgvid_video_embed_encode_settings', array( 'label_for' => 'auto_encode' ) );
3986
  add_settings_field('old_videos', __('For previously uploaded videos:', 'video-embed-thumbnail-generator'), 'kgvid_old_video_buttons_callback', __FILE__, 'kgvid_video_embed_encode_settings' );
3987
+ add_settings_field('error_email', __('Email encoding errors to:', 'video-embed-thumbnail-generator'), 'kgvid_error_email_callback', __FILE__, 'kgvid_video_embed_encode_settings', array( 'label_for' => 'error_email' ) );
3988
  add_settings_field('htaccess', __('htaccess login:', 'video-embed-thumbnail-generator'), 'kgvid_htaccess_callback', __FILE__, 'kgvid_video_embed_encode_settings', array( 'label_for' => 'htaccess_username' ) );
3989
  add_settings_field('ffmpeg_watermark', __('Add watermark to encoded files:', 'video-embed-thumbnail-generator'), 'kgvid_ffmpeg_watermark_callback', __FILE__, 'kgvid_video_embed_encode_settings', array( 'label_for' => 'ffmpeg_watermark' ) );
3990
  if ( !is_plugin_active_for_network( plugin_basename(__FILE__) ) ) {
4028
  //add the JW Player if available
4029
  $jw_player_select = "";
4030
  if ( class_exists('JWP6_Shortcode') ) {
4031
+ $players["JW Player"] = "JW Player 6";
4032
  $jw_players = get_option('jwp6_players');
4033
  if ( count($jw_players) > 1 ) {
4034
  $jw_player_select = " <div style='display:none;' id='jw_player_id_select'><select class='affects_player' onchange='kgvid_hide_plugin_settings();' id='jw_player_id' name='kgvid_video_embed_options[jw_player_id]'>";
4041
  else { $jw_player_config_description = $jw_player_id; }
4042
  $jw_player_select .= "<option value='$jw_player_id' $selected>".stripcslashes($jw_player_config_description)."</option>";
4043
  }
4044
+ $jw_player_select .= "</select> ".__('JW Player player', 'video-embed-thumbnail-generator')."</div>";
4045
  }
4046
  }
4047
 
4052
  $selected = ($options['embed_method']==$value) ? 'selected="selected"' : '';
4053
  echo "<option value='$value' $selected>$name</option>";
4054
  }
4055
+ echo "</select> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Video.js is the default player. Users running WordPress 3.6 or higher can choose the WordPress Default Mediaelement.js player which may already be skinned to match your theme. If the JW Player WordPress plugin is active it should be available as a video player. In the past this plugin used Adobe\'s Strobe Media Playback Flash player, which hasn\'t been updated since 2011 and is not recommended. It should still work, but new plugin functions are not guaranteed to be compatible.', 'video-embed-thumbnail-generator')."</span></span>".$jw_player_select."</td></tr></tbody></table>\n";
4056
 
4057
  $sampleheight = intval($options['height']) + 50;
4058
  echo "<div class='kgvid_setting_nearvid' style='width:".$options['width']."px;'>";
4059
+ echo "<div id='#kgvid_above_sample_vid'>";
4060
+ echo "<span><input class='affects_player' ".checked( $options['overlay_title'], "on", false )." id='overlay_title' name='kgvid_video_embed_options[overlay_title]' type='checkbox' /><label for='overlay_title'>".__('Overlay video title', 'video-embed-thumbnail-generator')."</label></span>";
4061
+ echo "<span><input class='affects_player' ".checked( $options['downloadlink'], "on", false )." id='downloadlink' name='kgvid_video_embed_options[downloadlink]' type='checkbox' /> <label for='downloadlink'>".__('Show download link', 'video-embed-thumbnail-generator')."</label></span>";
4062
+ echo "<span><span>".__('Sharing:','video-embed-thumbnail-generator')."</span><br>";
4063
+ echo "<input class='affects_player' ".checked( $options['overlay_embedcode'], "on", false )." id='overlay_embedcode' name='kgvid_video_embed_options[overlay_embedcode]' type='checkbox' ".$embed_disabled."/> <label for='overlay_embedcode'>".__('Embed code', 'video-embed-thumbnail-generator')."</label><br>";
4064
+ echo "<input class='affects_player' ".checked( $options['twitter_button'], "on", false )." id='twitter_button' name='kgvid_video_embed_options[twitter_button]' type='checkbox' onchange='kgvid_hide_plugin_settings();' /> <label for='twitter_button'>".__('Twitter button', 'video-embed-thumbnail-generator')."</label><span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Enter your Twitter username in the Video Sharing section below.', 'video-embed-thumbnail-generator')."</span></span><br />";
4065
+ echo "<input class='affects_player' ".checked( $options['facebook_button'], "on", false )." id='facebook_button' name='kgvid_video_embed_options[facebook_button]' type='checkbox' /> <label for='facebook_button'>".__('Facebook button', 'video-embed-thumbnail-generator')."</label></span></div>";
4066
  $iframeurl = site_url('/')."?kgvid_video_embed[enable]=true&kgvid_video_embed[sample]=true";
4067
  echo "<iframe id='kgvid_samplevideo' style='border:2px;' src='".$iframeurl."' scrolling='no' width='".$options['width']."' height='".$sampleheight."'></iframe>";
 
4068
  echo "<div style='float:right;'><input class='affects_player' ".checked( $options['view_count'], "on", false )." id='view_count' name='kgvid_video_embed_options[view_count]' type='checkbox' /> <label for='view_count'>".__('Show view count', 'video-embed-thumbnail-generator')."</label></div>";
4069
  echo "<hr style='width:100%;'></div>\n\t";
4070
  }
4123
 
4124
  function kgvid_resize_callback() {
4125
  $options = kgvid_get_options();
4126
+ $video_formats = kgvid_video_formats();
4127
+ echo "<div id='resize_div'><input ".checked( $options['resize'], "on", false )." id='resize' name='kgvid_video_embed_options[resize]' type='checkbox' /> <label for='resize'>".__('Make video player responsive.', 'video-embed-thumbnail-generator')."</label><br /></div>";
4128
  $items = array( __("automatic", 'video-embed-thumbnail-generator'), __("highest", 'video-embed-thumbnail-generator'), __("lowest", 'video-embed-thumbnail-generator') );
4129
+ foreach ( $video_formats as $format => $format_stats ) {
4130
+ if ( $format_stats['type'] == 'h264' && !empty($format_stats['label']) ) {
4131
+ $items[] = $format_stats['label'];
4132
+ }
4133
+ }
4134
+ echo __('Default playback resolution', 'video-embed-thumbnail-generator')." <select id='auto_res' name='kgvid_video_embed_options[auto_res]' onchange='kgvid_hide_plugin_settings()'>";
4135
+ foreach( $items as $name ) {
4136
  $selected = ($options['auto_res']==$name) ? 'selected="selected"' : '';
4137
  echo "<option value='$name' $selected>$name</option>";
4138
  }
4139
+ echo "</select> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('If multiple H.264 resolutions for a video are available, you can choose to load the highest or lowest available resolution by default, automatically select the resolution based on the size of the video window, or indicate a particular resolution to use every time.', 'video-embed-thumbnail-generator')."</span></span>";
4140
+ echo "<p id='pixel_ratio_p'><input ".checked( $options['pixel_ratio'], "on", false )." id='pixel_ratio' name='kgvid_video_embed_options[pixel_ratio]' type='checkbox' /><label for='pixel_ratio'>".__('Use display pixel ratio for resolution calculation', 'video-embed-thumbnail-generator')."</label><span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Most modern mobile devices and some very high-resolution desktop displays (what Apple calls a Retina display) use a pixel ratio to calculate the size of their viewport. Using the pixel ratio can result in a higher resolution being selected on mobile devices than on desktop devices. Because these devices actually have extremely high resolutions, and in a responsive design the video player usually takes up more of the screen than on a desktop browser, this is not a mistake, but your users might prefer to use less mobile data.', 'video-embed-thumbnail-generator')."</span></span></p>\n\t";
4141
 
4142
  }
4143
 
4144
  function kgvid_dimensions_callback() {
4145
  $options = kgvid_get_options();
4146
  echo __('Width:', 'video-embed-thumbnail-generator')." <input class='small-text affects_player' id='width' name='kgvid_video_embed_options[width]' type='text' value='".$options['width']."' /> ".__('Height:', 'video-embed-thumbnail-generator')." <input class='small-text affects_player' id='height' name='kgvid_video_embed_options[height]' type='text' value='".$options['height']."' /><br />";
4147
+ echo "<input ".checked( $options['minimum_width'], "on", false )." id='minimum_width' name='kgvid_video_embed_options[minimum_width]' type='checkbox' /> <label for='minimum_width'>".__('Enlarge lower resolution videos to max width.', 'video-embed-thumbnail-generator')."</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Usually if a video\'s resolution is less than the max width, the video player is set to the actual width of the video. Enabling this will always set the same width regardless of the quality of the video. When necessary you can override by setting the dimensions manually.', 'video-embed-thumbnail-generator')."</span></span><br />";
4148
+ echo "<input ".checked( $options['fullwidth'], "on", false )." id='fullwidth' name='kgvid_video_embed_options[fullwidth]' type='checkbox' /> <label for='fullwidth'>".__('Set all videos to expand to fill their containers.', 'video-embed-thumbnail-generator')."</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Enabling this will ignore any other width settings and set the width of the video to the width of the container it\'s in.', 'video-embed-thumbnail-generator')."</span></span><br />";
4149
  echo "<input ".checked( $options['inline'], "on", false )." id='inline' name='kgvid_video_embed_options[inline]' type='checkbox' /> <label for='inline'>".__('Allow other content on the same line as the video.', 'video-embed-thumbnail-generator')."</label>\n\t";
4150
  }
4151
 
4224
  $selected = ($options['preload']==$value) ? 'selected="selected"' : '';
4225
  echo "<option value='$value' $selected>$name</option>";
4226
  }
4227
+ echo "</select><span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>"._x('Controls how much of a video to load before the user starts playback. Mobile browsers never preload any video information. Selecting "metadata" will load the height and width and format information along with a few seconds of the video in some desktop browsers. "Auto" will preload nearly a minute of video in most desktop browsers. "None" will prevent all data from preloading.', 'Suggest not translating the words in quotation marks', 'video-embed-thumbnail-generator')."</span></span>\n\t";
4228
  }
4229
 
4230
  function kgvid_js_skin_callback() {
4234
 
4235
  function kgvid_nativecontrolsfortouch_callback() {
4236
  $options = kgvid_get_options();
4237
+ echo "<input class='affects_player' ".checked( $options['nativecontrolsfortouch'], "on", false )." id='nativecontrolsfortouch' name='kgvid_video_embed_options[nativecontrolsfortouch]' type='checkbox' /> <label for='nativecontrolsfortouch'>".__('Show native controls on mobile devices.', 'video-embed-thumbnail-generator')."</label><span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Disable Video.js styling and show the built-in video controls on mobile devices. This will disable the resolution selection button.', 'video-embed-thumbnail-generator')."</span></span>\n\t";
4238
  }
4239
 
4240
  function kgvid_custom_attributes_callback() {
4303
  echo "<input class='small-text' id='generate_thumbs' name='kgvid_video_embed_options[generate_thumbs]' maxlength='2' type='text' value='".strval($options['generate_thumbs'])."' />\n\t";
4304
  }
4305
 
4306
+ function kgvid_security_callback() {
4307
+ $options = kgvid_get_options();
4308
+
4309
+ if ( $options['embeddable'] != "on" ) { $embed_disabled = " disabled='disabled' title='".__('Embedding disabled', 'video-embed-thumbnail-generator')."'"; }
4310
+ else { $embed_disabled = ""; }
4311
+
4312
+ echo "<input class='affects_player' ".checked( $options['embeddable'], "on", false )." id='embeddable' name='kgvid_video_embed_options[embeddable]' type='checkbox' onclick='kgvid_embeddable_switch(this.checked);' /> <label for='embeddable'>".__('Allow users to embed your videos on other sites.', 'video-embed-thumbnail-generator')."</label><br />";
4313
+ echo "<input ".checked( $options['open_graph'], "on", false )." id='open_graph' name='kgvid_video_embed_options[open_graph]' type='checkbox'".$embed_disabled." /> <label for='open_graph'>"._x('Enable Facebook Open Graph video tags.', '"Open Graph" is a proper noun and might not need translation', 'video-embed-thumbnail-generator')."</label><span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Facebook and some other social media sites will use these tags to embed the first video in your post. Your video must be served via https in order to be embedded directly in Facebook and playback is handled by the unstyled built-in browser player. No statistics will be recorded for videos embedded this way and Open Graph tags generated by Jetpack will be disabled on pages with videos.', 'video-embed-thumbnail-generator')."</span></span><br />\n\t";
4314
+ echo "<input ".checked( $options['schema'], "on", false )." id='schema' name='kgvid_video_embed_options[schema]' type='checkbox'".$embed_disabled." /> <label for='schema'>".__('Enable Schema.org structured data markup for search engines.', 'video-embed-thumbnail-generator')."</label><span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Helps your videos appear in video searches on Google, Yahoo, and Bing.', 'video-embed-thumbnail-generator')."</span></span><br />\n\t";
4315
+ echo "<input ".checked( $options['twitter_card'], "on", false )." id='twitter_card' name='kgvid_video_embed_options[twitter_card]' type='checkbox'".$embed_disabled." onchange='kgvid_hide_plugin_settings();' /> <label for='twitter_card'>".__('Enable Twitter Cards.', 'video-embed-thumbnail-generator')."</label><span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __('Generates metadata for "player" Twitter Cards that will show a thumbnail and playable video in Twitter. Disables Jetpack Twitter metadata on any page with a video. Your site must have https enabled and you must request whitelist approval for your site using the %1$sTwitter card validator%2$s. Don\'t worry if your player card doesn\'t render. Twitter will most likely approve your request.', 'video-embed-thumbnail-generator'), '<a href="https://cards-dev.twitter.com/validator">', '</a>')."</span></span><br />\n\t";
4316
+ echo "<div id='twitter_username_div' style='margin:0px;'><input class='regular-text' id='twitter_username' style='width: 100px;' name='kgvid_video_embed_options[twitter_username]' type='text' value='".$options['twitter_username']."' /> <label for='twitter_username'>".__('Twitter username', 'video-embed-thumbnail-generator')."</label></div>";
4317
+ echo "<input class='affects_player' ".checked( $options['right_click'], "on", false )." id='right_click' name='kgvid_video_embed_options[right_click]' type='checkbox' /> <label for='right_click'>".__('Allow right-clicking on videos.', 'video-embed-thumbnail-generator')."</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('We can\'t prevent a user from simply saving the downloaded video file from the browser\'s cache, but disabling right-clicking will make it more difficult for casual users to save your videos.', 'video-embed-thumbnail-generator')."</span></span><br />";
4318
+ echo "<input ".checked( $options['click_download'], "on", false )." id='click_download' name='kgvid_video_embed_options[click_download]' type='checkbox' /> <label for='click_download'>".__('Allow single-click download link for videos.', 'video-embed-thumbnail-generator')."</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('The plugin creates a one-click method for users who want to allow easy video downloading, but if some of your videos are hidden or private, depending on the methods you use, someone who guesses a video\'s WordPress database ID could potentially use the method to download videos they might not otherwise have access to.', 'video-embed-thumbnail-generator')."</span></span><br />";
4319
+ echo "<input ".checked( $options['oembed_provider'], "on", false )." id='oembed_provider' name='kgvid_video_embed_options[oembed_provider]' type='checkbox'".$embed_disabled." /> <label for='oembed_provider'>"._x('Change oEmbed to video instead of WordPress default photo/excerpt.', '"oEmbed" is a proper noun and might not need translation', 'video-embed-thumbnail-generator')."</label><span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Allows users of other websites to embed your videos using just the post URL rather than the full iframe embed code, much like Vimeo or YouTube. However, most social media sites (including Facebook & Twitter) will not show videos through oEmbed unless your link is https. In order to display the video properly, this will also remove some of the security features included in the built-in WordPress oEmbed system.', 'video-embed-thumbnail-generator')."</span></span><br />";
4320
+ echo "<input ".checked( $options['oembed_security'], "on", false )." id='oembed_security' name='kgvid_video_embed_options[oembed_security]' type='checkbox' /> <label for='oembed_security'>"._x('Enable oEmbeds from unknown providers.', '"oEmbed" is a proper noun and might not need translation', 'video-embed-thumbnail-generator')."</label><span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Allows your own users to embed content from any oEmbed provider. User must have the "unfiltered_html" capability which is limited to Administrators and Editors by default.', 'video-embed-thumbnail-generator')."</span></span><br />\n\t";
4321
+ }
4322
+
4323
+ function kgvid_featured_callback() {
4324
+ $options = kgvid_get_options();
4325
+ echo "<input ".checked( $options['featured'], "on", false )." id='featured' name='kgvid_video_embed_options[featured]' type='checkbox' /> <label for='featured'>".__('Set generated video thumbnails as featured images.', 'video-embed-thumbnail-generator')."</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('If your theme uses the featured image meta tag, this will automatically set a video\'s parent post\'s featured image to the most recently saved thumbnail image.', 'video-embed-thumbnail-generator')."</span></span><br /> <a class='button-secondary' href='javascript:void(0);' onclick='kgvid_set_all_featured();'>"._x('Set all as featured', 'implied "Set all thumbnails as featured"', 'video-embed-thumbnail-generator')."</a> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('If you\'ve generated thumbnails before enabling this option, this will set all existing thumbnails as featured images. Be careful!', 'video-embed-thumbnail-generator')."</span></span>\n\t";
4326
+ }
4327
+
4328
  function kgvid_user_roles_callback($page_scope = 'site') {
4329
  global $wp_roles;
4330
  $options = kgvid_get_options();
4331
  $capabilities_checkboxes = array();
4332
+ $capabilities = array( 'make_video_thumbnails'=>__('Can make thumbnails', 'video-embed-thumbnail-generator'), 'encode_videos'=>__('Can encode videos', 'video-embed-thumbnail-generator'), 'edit_others_video_encodes' => __('Can view & modify other users encoded videos', 'video-embed-thumbnail-generator') );
4333
  foreach ( $capabilities as $capability => $capability_name ) {
4334
  $capabilities_checkboxes[] = "<div class='kgvid_user_roles'><strong>".$capability_name.":</strong><br>";
4335
 
4365
  echo implode("", $capabilities_checkboxes)."\n\t";
4366
  }
4367
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4368
  function kgvid_thumb_parent_callback() {
4369
  $options = kgvid_get_options();
4370
  $items = array("post", "video");
4373
  $selected = ($options['thumb_parent']==$item) ? 'selected="selected"' : '';
4374
  echo "<option value='$item' $selected>$item</option>";
4375
  }
4376
+ echo "</select> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('This depends on your theme. Thumbnails generated by the plugin can be saved as children of the video attachment or the post. Some themes use an image attached to a post instead of the built-in featured image meta tag. Version 3.x of this plugin saved all thumbnails as children of the video.', 'video-embed-thumbnail-generator')."</span></span><br /> <a class='button-secondary' href='javascript:void(0);' onclick='kgvid_switch_parents();'>".__('Set all parents', 'video-embed-thumbnail-generator')."</a> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('If you\'ve generated thumbnails before changing this option, this will set all existing thumbnails as children of your currently selected option.', 'video-embed-thumbnail-generator')."</span></span>\n\t";
4377
  }
4378
 
4379
  function kgvid_delete_children_callback() {
4387
  $selected = ($options['delete_children']==$value) ? 'selected="selected"' : '';
4388
  echo "<option value='$value' $selected>$name</option>";
4389
  }
4390
+ echo "</select> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('If you delete the original video you can choose to delete all associated attachments (thumbnails & videos) or keep the thumbnail.', 'video-embed-thumbnail-generator')."</span></span>\n\t";
4391
  }
4392
 
4393
  function kgvid_titlecode_callback() {
4394
  $options = kgvid_get_options();
4395
+ echo "<input class='regular-text code' id='titlecode' name='kgvid_video_embed_options[titlecode]' type='text' value='".htmlentities(stripslashes($options['titlecode']))."' /> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __('HTML tag applied to titles inserted above the video. Examples: %s. Corresponding closing tags will be applied to the end of the title automatically.', 'video-embed-thumbnail-generator'), "&lt;strong&gt;, &lt;em&gt;, &lt;H2&gt;, &lt;span class='videotitle'&gt;")."</span></span>\n\t";
4396
  }
4397
 
4398
  function kgvid_template_callback() {
4403
  $selected = ($options['template']==$value) ? 'selected="selected"' : '';
4404
  echo "<option value='$value' $selected>$name</option>";
4405
  }
4406
+ echo "</select> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('The plugin can filter your media attachment page to display videos using your chosen settings, or completely replace your attachment template to show only the video. If you were one of the few people using iframe embed codes before version 4.0 of this plugin then you should continue to use "Video only" but otherwise it\'s not recommended.', 'video-embed-thumbnail-generator')."</span></span>\n\t";
4407
  }
4408
 
4409
  function kgvid_encode_settings_section_callback() {
4417
  function kgvid_app_path_callback() {
4418
  $options = kgvid_get_options();
4419
  //if ( is_plugin_active_for_network( plugin_basename(__FILE__) ) ) { $options = get_site_option( 'kgvid_video_embed_network_options' ); }
4420
+ echo "<input class='affects_ffmpeg regular-text code' id='app_path' data-ffmpeg_exists='".$options['ffmpeg_exists']."' name='kgvid_video_embed_options[app_path]' type='text' value='".$options['app_path']."' /><span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __('This should be the folder where applications are installed on your server, not a direct path to an application, so it doesn\'t usually end with %1$s. Example: %2$s.', 'video-embed-thumbnail-generator'), "<code><strong class='video_app_name'>".strtoupper($options['video_app'])."</strong></code>", "<code>/usr/local/bin</code>" )."\n\t";
4421
  }
4422
 
4423
  function kgvid_video_app_callback() {
4429
  $selected = ($options['video_app']==$value) ? 'selected="selected"' : '';
4430
  echo "<option value='$value' $selected>$name</option>";
4431
  }
4432
+ echo "</select> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('FFMPEG split into two separate branches in 2011. The new branch is called LIBAV and executes using "avconv" instead of "ffmpeg." Both are still actively developed and FFMPEG frequently incorporates LIBAV features. Debian & Ubuntu users probably have LIBAV installed.', 'video-embed-thumbnail-generator')."</span></span>\n\t";
4433
  }
4434
 
4435
  function kgvid_browser_thumbnails_callback() {
4451
  echo "<div class='kgvid_video_app_required'>";
4452
  echo "<input ".checked( $options['encode_fullres'], "on", false )." id='encode_fullres' name='kgvid_video_embed_options[encode_fullres]' type='checkbox' /> <label for='encode_fullres'>".__('Replace original with', 'video-embed-thumbnail-generator');
4453
 
4454
+ echo " <select id='replace_format' name='kgvid_video_embed_options[replace_format]' class='affects_ffmpeg' onchange='kgvid_change_replace_format();'>";
4455
  foreach($items as $value=>$name) {
4456
  $selected = ($options['replace_format']==$value) ? 'selected="selected"' : '';
4457
  echo "<option value='$value' $selected>$name</option>";
4459
  echo "</select> ";
4460
 
4461
 
4462
+ echo "</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('If you have FFMPEG/LIBAV and the proper libraries installed, you can choose to replace your uploaded video with your preferred format, and also transcode into as many as seven additional formats depending on the resolution of your original source. Different browsers have different playback capabilities. Most desktop browsers can play H.264, and all modern mobile devices can play at least 360p H.264. If you create multiple H.264 resolutions, the highest resolution supported by the device will be served up automatically. The plugin will not upconvert your video, so if you upload a 720p video, it will not waste your time creating a 1080p version. There was a time when it seemed like a good idea to provide OGV or WEBM for some desktop browsers, but even Firefox allows H.264 playback on most operating systems now. I no longer recommend encoding OGV or WEBM unless you expect a large number of no-Flash sticklers visiting your site. WEBM VP9 is a new technology and requires a version of FFMPEG or LIBAV newer than October 2013.', 'video-embed-thumbnail-generator')."</span></span><br />";
4463
  echo "<input ".checked( $options['encode_1080'], "on", false )." id='encode_1080' name='kgvid_video_embed_options[encode_1080]' type='checkbox' /> <label for='encode_1080'>1080p H.264 <small><em>".__('(iPhone 4s+, iPad 2+, modern Android, Windows Phone 8, Chrome, Safari, IE 9+, Firefox)', 'video-embed-thumbnail-generator')."</em></small></label><br />";
4464
  echo "<input ".checked( $options['encode_720'], "on", false )." id='encode_720' name='kgvid_video_embed_options[encode_720]' type='checkbox' /> <label for='encode_720'>720p H.264 <small><em>".__('(iPhone 4+, iPad, most Android, Chrome, Safari, IE 9+, Firefox)', 'video-embed-thumbnail-generator')."</em></small></label><br />";
4465
  echo "<input ".checked( $options['encode_mobile'], "on", false )." id='encode_mobile' name='kgvid_video_embed_options[encode_mobile]' type='checkbox' /> <label for='encode_mobile'>360p H.264 <small><em>(iOS, Android, Windows Phone 7+, Chrome, Safari, IE 9+, Firefox)</em></small></label><br />";
4499
 
4500
  function kgvid_automatic_callback() {
4501
  $options = kgvid_get_options();
4502
+ $video_formats = kgvid_video_formats();
4503
  echo "<div class='kgvid_video_app_required'>";
4504
  echo "<input ".checked( $options['auto_encode'], "on", false )." id='auto_encode' name='kgvid_video_embed_options[auto_encode]' type='checkbox' /> <label for='auto_encode'>".__('Encode formats selected above.', 'video-embed-thumbnail-generator')."</label><br />";
4505
+ echo "<input ".checked( $options['auto_encode_gif'], "on", false )." id='auto_encode_gif' name='kgvid_video_embed_options[auto_encode_gif]' type='checkbox' /> <label for='auto_encode_gif'>".sprintf( __('Convert animated GIFs to %s.', 'video-embed-thumbnail-generator'), '<span class="kgvid_replace_format">'.strtoupper($video_formats['fullres']['type']).'</span>')."</label><br />";
4506
  if ( intval($options['auto_thumb_number']) == 1 ) {
4507
  $items = array(0, 25, 50, 75);
4508
  $percentage_select = "<select id='auto_thumb_position' name='kgvid_video_embed_options[auto_thumb_position]'>";
4522
  function kgvid_old_video_buttons_callback() {
4523
  $options = kgvid_get_options();
4524
  echo "<div class='kgvid_video_app_required'>";
4525
+ echo "<p><a id='generate_old_thumbs_button' class='button-secondary' href='javascript:void(0);' onclick='kgvid_auto_generate_old(\"thumbs\");'>".__('Generate thumbnails', 'video-embed-thumbnail-generator')."</a> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __('Use %s to automatically generate thumbnails for every video in the Media Library that doesn\'t already have them. Uses the automatic thumbnail settings above. This could take a very long time if you have a lot of videos. Proceed with caution!', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></span></p>";
4526
+ echo "<p><a id='generate_old_encode_button' class='button-secondary' href='javascript:void(0);' onclick='kgvid_auto_generate_old(\"encode\");'>".__('Encode videos', 'video-embed-thumbnail-generator')."</a> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __('Add every video in the Media Library to the encode queue if it hasn\'t already been encoded. Uses the default encode formats chosen above.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></span></p>";
4527
+ echo "</div>\n\t";
4528
+ }
4529
+
4530
+ function kgvid_error_email_callback() {
4531
+ $options = kgvid_get_options();
4532
+ echo "<div class='kgvid_video_app_required'>";
4533
+ echo " <select id='error_email' name='kgvid_video_embed_options[error_email]'>";
4534
+ $users = get_users( array( 'role__in' => array_keys($options['capabilities']['edit_others_video_encodes']) ) );
4535
+ if ( $users ) {
4536
+ $authorized_users = array();
4537
+ foreach ( $users as $user ) {
4538
+ $authorized_users[$user->user_login] = $user->ID;
4539
+ }
4540
+ }
4541
+ $items = array_merge( array(
4542
+ __('Nobody', 'video-embed-thumbnail-generator') => 'nobody',
4543
+ __('User who initiated encoding', 'video-embed-thumbnail-generator') => 'encoder'
4544
+ ), $authorized_users
4545
+ );
4546
+ foreach($items as $name=>$value) {
4547
+ $selected = ($options['error_email']==$value) ? 'selected="selected"' : '';
4548
+ echo "<option value='$value' $selected>$name</option>";
4549
+ }
4550
+ echo "</select>";
4551
  echo "</div>\n\t";
4552
  }
4553
 
4555
  $options = kgvid_get_options();
4556
  echo "<div class='kgvid_video_app_required'>";
4557
  echo "<table class='kgvid_htaccess'><tbody><tr><td>".__('Username:', 'video-embed-thumbnail-generator')."</td><td><input class='regular-text affects_ffmpeg' id='htaccess_login' name='kgvid_video_embed_options[htaccess_login]' type='text' value='".$options['htaccess_login']."' /></td></tr>";
4558
+ echo "<tr><td>".__('Password:', 'video-embed-thumbnail-generator')."</td><td><input class='regular-text affects_ffmpeg' id='htaccess_password' name='kgvid_video_embed_options[htaccess_password]' type='text' value='".$options['htaccess_password']."' /> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __('If your videos are htaccess protected, %s will access them using these credentials.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></span></td></tr></tbody></table>";
4559
  echo "</div>\n\t";
4560
  }
4561
 
4594
  if ( empty($options['moov_path']) ) { $options['moov_path'] = $options['app_path']; }
4595
  echo "<div class='kgvid_video_app_required'>";
4596
  $items = array(__("none", 'video-embed-thumbnail-generator')=>"none", "movflags faststart"=>"movflag", "qt-faststart"=>"qt-faststart", "MP4Box"=>"MP4Box");
4597
+ echo "<select onchange='kgvid_moov_setting()' id='moov' name='kgvid_video_embed_options[moov]' class='affects_ffmpeg'>";
4598
  foreach($items as $name => $value) {
4599
  $selected = ($options['moov']==$value) ? 'selected="selected"' : '';
4600
  echo "<option value='$value' $selected>$name</option>";
4601
  }
4602
+ echo "</select> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __('By default %1$s places moov atoms at the end of H.264 encoded files, which forces the entire file to download before playback can start and can prevent Flash players from playing them at all. Since approximately October 2012 %1$s can fix the problem at the end of the encoding process by using the option `movflags faststart`. This is the easiest and fastest way to correct the problem, but older versions of %1$s will not work if you select the movflags option. If you can\'t update to a new version of %1$s, select qt-faststart or MP4Box which will run after encoding is finished if they are installed on your server.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>")."</span></span>";
4603
  echo "<p id='moov_path_p'>".sprintf( __('Path to %s:', 'video-embed-thumbnail-generator'), "<span class='kgvid_moov_option'>".$options['moov']."</span>")." <input class='regular-text code affects_ffmpeg' id='moov_path' name='kgvid_video_embed_options[moov_path]' type='text' value='".$options['moov_path']."' /></p>";
4604
  echo "</div>\n\t";
4605
  }
4613
  $selected = ($options['rate_control']==$value) ? 'selected="selected"' : '';
4614
  echo "<option value='$value' $selected>$name</option>";
4615
  }
4616
+ echo "</select> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Constant Rate Factor (CRF) attempts to maintain a particular quality output for the entire video and only uses bits the encoder determines are necessary. Average Bit Rate is similar to the method used in older versions of this plugin. If CRF is selected, WEBM encoding will also use the ABR setting to set a max bit rate 25% higher than the ABR. Without a max bit rate setting WEBM files are terrible quality.', 'video-embed-thumbnail-generator')."</span></span>";
4617
  echo "</div>\n\t";
4618
  }
4619
 
4625
  $selected = ($options['h264_CRF']==$i) ? 'selected="selected"' : '';
4626
  echo "<option value='".$i."' $selected>".$i."</option>";
4627
  }
4628
+ echo "</select> H.264 <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Lower values are higher quality. 18 is considered visually lossless. Default is 23.', 'video-embed-thumbnail-generator')."</span></span><br />";
4629
 
4630
  echo "<select id='webm_CRF' name='kgvid_video_embed_options[webm_CRF]' class='affects_ffmpeg'>";
4631
  for ($i = 4; $i <= 63; $i++ ) {
4632
  $selected = ($options['webm_CRF']==$i) ? 'selected="selected"' : '';
4633
  echo "<option value='".$i."' $selected>".$i."</option>";
4634
  }
4635
+ echo "</select> WEBM <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Lower values are higher quality. Default is 10.', 'video-embed-thumbnail-generator')."</span></span><br />\n\t";
4636
 
4637
  echo "<select id='ogv_CRF' name='kgvid_video_embed_options[ogv_CRF]' class='affects_ffmpeg'>";
4638
  for ($i = 1; $i <= 10; $i++ ) {
4639
  $selected = ($options['ogv_CRF']==$i) ? 'selected="selected"' : '';
4640
  echo "<option value='".$i."' $selected>".$i."</option>";
4641
  }
4642
+ echo "</select> OGV (qscale) <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Higher values are higher quality. Default is 6.', 'video-embed-thumbnail-generator')."</span></span>";
4643
  echo "</div>\n\t";
4644
  }
4645
 
4651
  $selected = ($options['bitrate_multiplier']==strval($i)) ? 'selected="selected"' : '';
4652
  echo "<option value='$i' $selected>$i</option>";
4653
  }
4654
+ echo "</select> ".__('bits per pixel.', 'video-embed-thumbnail-generator')." <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Default is 0.1', 'video-embed-thumbnail-generator')."</span></span><br />";
4655
  echo "<span class='kgvid_gray_text'>1080p = <span id='1080_bitrate'>".round(floatval($options['bitrate_multiplier'])*1920*1080*30/1024)."</span> kbps<br />";
4656
  echo "720p = <span id='720_bitrate'>".round(floatval($options['bitrate_multiplier'])*1280*720*30/1024)."</span> kbps<br />";
4657
  echo "360p = <span id='360_bitrate'>".round(floatval($options['bitrate_multiplier'])*640*360*30/1024)."</span> kbps</span>";
4667
  $selected = ($options['h264_profile']==$item) ? 'selected="selected"' : '';
4668
  echo "<option value='$item' $selected>$item</option>";
4669
  }
4670
+ echo "</select> "._x('profile', 'H.264 profile. Might not need translation', 'video-embed-thumbnail-generator')." <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Lower profiles will slightly increase file sizes. This mostly depends on your need for compatability with Android devices. Main profile seems to work on recent phones, although officially Android only supports baseline. High profile is not recommended for mobile or Flash compatibility, and anything above high is designed for professional video and probably incompatible with consumer devices. Older versions of FFMPEG might ignore this setting altogether.', 'video-embed-thumbnail-generator')."</span></span><br />";
4671
  echo "<select id='h264_level' name='kgvid_video_embed_options[h264_level]' class='affects_ffmpeg'>";
4672
  $items = array("none", "1", "1.1", "1.2", "1.3", "2", "2.1", "2.2", "3", "3.1", "3.2", "4", "4.1", "4.2", "5", "5.1");
4673
  foreach($items as $item) {
4674
  $selected = ($options['h264_level']==$item) ? 'selected="selected"' : '';
4675
  echo "<option value='$item' $selected>$item</option>";
4676
  }
4677
+ echo "</select> "._x('level', 'H.264 level. Might not need translation', 'video-embed-thumbnail-generator')." <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('3.0 is default. Lower levels will lower maximum bit rates and decoding complexity. This mostly depends on your need for compatability with mobile devices. Older versions of FFMPEG might ignore this setting altogether.', 'video-embed-thumbnail-generator')."</span></span>";
4678
  echo "</div>\n\t";
4679
  }
4680
 
4694
  function kgvid_ffmpeg_options_callback() {
4695
  $options = kgvid_get_options();
4696
  echo "<div class='kgvid_video_app_required'>";
4697
+ echo "<input class='affects_ffmpeg' onchange='if(jQuery(\"#ffmpeg_vpre\").attr(\"checked\")==\"checked\"){jQuery(\"#video_bitrate_flag\").attr(\"checked\", \"checked\"); jQuery(\"#nostdin\").removeAttr(\"checked\");}' ".checked( $options['video_bitrate_flag'], "on", false )." id='video_bitrate_flag' name='kgvid_video_embed_options[video_bitrate_flag]' type='checkbox' /> <label for='video_bitrate_flag'>".__('Enable legacy FFMPEG "-b" and "-ba" bitrate flags.', 'video-embed-thumbnail-generator')."</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Enable if your installed version of FFMPEG is old enough that you can\'t use the newer -b:v flags (Dreamhost users must turn this on). It may cause newer versions of FFMPEG to fail.', 'video-embed-thumbnail-generator')."</span></span><br />";
4698
+ echo "<input class='affects_ffmpeg' onchange='if(jQuery(\"#ffmpeg_vpre\").attr(\"checked\")==\"checked\"){jQuery(\"#video_bitrate_flag\").attr(\"checked\", \"checked\"); jQuery(\"#nostdin\").removeAttr(\"checked\");}' ".checked( $options['ffmpeg_vpre'], "on", false )." id='ffmpeg_vpre' name='kgvid_video_embed_options[ffmpeg_vpre]' type='checkbox' /> <label for='ffmpeg_vpre'>".__('Enable legacy libx264 parameters.', 'video-embed-thumbnail-generator')."</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Enable if your installed version of FFMPEG is old enough that libx264 requires additional configuration to operate (Dreamhost users must turn this on). This should help if you can encode WEBM or OGV files but H264/Mobile files fail. It could cause newer versions of FFMPEG to fail.', 'video-embed-thumbnail-generator')."</span></span><br />";
4699
+ echo "<input class='affects_ffmpeg' ".checked( $options['ffmpeg_old_rotation'], "on", false )." id='ffmpeg_old_rotation' name='kgvid_video_embed_options[ffmpeg_old_rotation]' type='checkbox' /> <label for='ffmpeg_old_rotation'>".__('Enable legacy FFMPEG rotation method.', 'video-embed-thumbnail-generator')."</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Enable if vertical videos shot on mobile devices don\'t rotate correctly or generate errors. If legacy libx264 paramaters are necessary, rotation won\'t work at all.', 'video-embed-thumbnail-generator')."</span></span><br />";
4700
+ echo "<input class='affects_ffmpeg' ".checked( $options['nostdin'], "on", false )." id='nostdin' name='kgvid_video_embed_options[nostdin]' type='checkbox' /> <label for='nostdin'>".__('Disable stdin.', 'video-embed-thumbnail-generator')."</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".__('Turn off this checkbox if your installed version of FFMPEG is old enough that it does not recognize the nostdin flag (Dreamhost users must turn this off).', 'video-embed-thumbnail-generator')."</span></span>";
4701
  echo "</div>\n\t";
4702
  }
4703
 
4710
  $selected = ($options['simultaneous_encodes']==$i) ? 'selected="selected"' : '';
4711
  echo "<option value='".$i."' $selected>".$i."</option>";
4712
  }
4713
+ echo "</select> ".__('Simultaneous encodes.', 'video-embed-thumbnail-generator')." <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __('Increasing the number will allow %1$s to encode more than one file at a time, but may lead to %1$s monopolizing system resources.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></span><br />";
4714
 
4715
  echo "<select id='threads' name='kgvid_video_embed_options[threads]' class='affects_ffmpeg'>";
4716
  for ($i = 0; $i <= 16; $i++ ) {
4717
  $selected = ($options['threads']==$i) ? 'selected="selected"' : '';
4718
  echo "<option value='".$i."' $selected>".$i."</option>";
4719
  }
4720
+ echo "</select> "._x('threads', 'CPU threads. Might not need translating', 'video-embed-thumbnail-generator')." <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __('Default is 1, which limits encoding speed but prevents encoding from using too many system resources. Selecting 0 will allow %1$s to optimize the number of threads or you can set the number manually. This may lead to %1$s monopolizing system resources.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></span><br />";
4721
 
4722
+ echo "<input ".checked( $options['nice'], "on", false )." id='nice' name='kgvid_video_embed_options[nice]' class='affects_ffmpeg' type='checkbox' /> <label for='nice'>"._x('Run', 'execute program', 'video-embed-thumbnail-generator')." <code>nice</code>.</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __('Tells %1$s to run at a lower priority to avoid monopolizing system resources.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></span>";
4723
  echo "</div>";
4724
 
4725
  }
4727
  function kgvid_test_ffmpeg_options_callback( $scope = 'site' ) {
4728
 
4729
  $options = kgvid_get_options();
4730
+ $video_formats = kgvid_video_formats(false, false);
4731
  $encode_string = "";
4732
  if ( $options['ffmpeg_exists'] == "on" ) {
4733
 
4734
  $movie_info = kgvid_get_video_dimensions(plugin_dir_path(__FILE__)."images/sample-video-h264.mp4");
4735
  $uploads = wp_upload_dir();
4736
  $encode_dimensions = kgvid_set_encode_dimensions($movie_info, $video_formats[$options['sample_format']]);
4737
+ $encode_string = kgvid_generate_encode_string(plugin_dir_path(__FILE__)."images/sample-video-h264.mp4", $uploads['path']."/sample-video-h264".$video_formats[$options['sample_format']]['suffix'], $movie_info, $options['sample_format'], $encode_dimensions['width'], $encode_dimensions['height'], intval($options['sample_rotate']));
4738
  }
4739
 
4740
  if ( is_array($encode_string) ) { $encode_string_implode = implode('' , $encode_string); }
4753
  }
4754
  $sample_format_select .= "</select>";
4755
 
4756
+ echo "<div id='ffmpeg_sample_div'".$display_div."><p>".sprintf( __('Sample %2$s encode command', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>", $sample_format_select)."<br>";
4757
+ echo "<input ".checked( $options['sample_rotate'], 90, false )." id='sample_rotate' name='kgvid_video_embed_options[sample_rotate]' class='affects_ffmpeg' value='90' type='checkbox' /> <label for='sample_rotate'>".__('Test video rotation.', 'video-embed-thumbnail-generator')."</label> <span class='kgvid_tooltip wp-ui-text-highlight'><span class='kgvid_tooltip_classic'>".sprintf( __('Tests %1$s\'s ability to rotate vertical videos shot on mobile devices.', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>" )."</span></span><br /><textarea id='ffmpeg_h264_sample' class='ffmpeg_sample_code code' cols='100' rows='5' wrap='soft' readonly='yes'>".$encode_string_implode."</textarea></p>";
4758
  echo "<p>".sprintf( __('%s test output:', 'video-embed-thumbnail-generator'), "<strong class='video_app_name'>".strtoupper($options['video_app'])."</strong>")."<br /><textarea id='ffmpeg_output' class='ffmpeg_sample_code code' cols='100' rows='20' wrap='soft' readonly='yes'></textarea><br>".sprintf( __('For help interpreting this output, %s try our Wiki page on Github', 'video-embed-thumbnail-generator'), "<a href='https://github.com/kylegilman/video-embed-thumbnail-generator/wiki/Interpreting-FFMPEG-or-LIBAV-messages'>")."</a>.</p></div>\n\t";
4759
  }
4760
 
4949
  $options['ffmpeg_old_rotation'] = "on";
4950
  $options['click_download'] = "on";
4951
  }
4952
+ if ( $options['version'] < 4.6 ) {
4953
+ $options['version'] = 4.6;
4954
+ if ( !array_key_exists('nativecontrolsfortouch', $options) ) { $options['nativecontrolsfortouch'] = "on"; }
4955
+ $options['facebook_button'] = false;
4956
+ $options['sample_rotate'] = false;
4957
+ $options['twitter_button'] = false;
4958
+ $options['twitter_card'] = false;
4959
+ $options['schema'] = 'on';
4960
+ $options['error_email'] = 'nobody';
4961
+ $options['auto_encode_gif'] = false;
4962
+ $options['pixel_ratio'] = 'on';
4963
+ $options['twitter_username'] = kgvid_get_jetpack_twitter_username();
4964
+
4965
  }
4966
 
4967
  if ( $options['version'] != $default_options['version'] ) { $options['version'] = $default_options['version']; }
5128
  $uploads = wp_upload_dir();
5129
  $video_formats = kgvid_video_formats();
5130
  $encode_dimensions = kgvid_set_encode_dimensions($movie_info, $video_formats[$validated_options['sample_format']]);
5131
+ $encode_string = kgvid_generate_encode_string(plugin_dir_path(__FILE__)."images/sample-video-h264.mp4", $uploads['path']."/sample-video-h264".$video_formats[$validated_options['sample_format']]['suffix'], $movie_info, $validated_options['sample_format'], $encode_dimensions['width'], $encode_dimensions['height'], intval($validated_options['sample_rotate']));
5132
  $auto_thumb_label = kgvid_generate_auto_thumb_label();
5133
  }
5134
  }
5147
  function kgvid_add_attachment_handler($post_id) {
5148
 
5149
  $options = kgvid_get_options();
5150
+ $filename = get_attached_file($post_id);
5151
 
5152
  if ( $options['auto_encode'] == "on" || $options['auto_thumb'] == "on" ) {
5153
 
5154
  $post = get_post($post_id);
5155
+ $is_video = kgvid_is_video($post);
5156
 
5157
+ if ( $is_video ) {
 
 
5158
 
5159
  wp_schedule_single_event( time() + rand(0,10), 'kgvid_cron_new_attachment', array($post_id) );
 
5160
  $transient = get_transient( 'kgvid_new_attachment_transient' ); //error checking to avoid race conditions when using Add From Server
5161
  if ( is_array($transient) ) { $transient[] = $post_id; }
5162
  else { $transient = array($post_id); }
5163
  set_transient( 'kgvid_new_attachment_transient', $transient, DAY_IN_SECONDS );
5164
+
5165
  }
5166
 
5167
  }
5172
  function kgvid_cron_new_attachment_handler($post_id, $force = false) {
5173
 
5174
  $options = kgvid_get_options();
5175
+ if ( $force == 'thumbs' ) { $options['auto_encode'] = false; }
5176
+ if ( $force == 'encode' ) { $options['auto_thumb'] = false; }
5177
 
5178
  $post = get_post($post_id);
5179
  $movieurl = wp_get_attachment_url($post_id);
5180
+ $filepath = get_attached_file($post_id);
5181
+ $is_animated = kgvid_is_animated_gif($filepath);
5182
 
5183
+ if ( $post && $post->post_mime_type != 'image/gif' && ( $force == 'thumbs' || $options['auto_thumb'] == "on" ) ) {
5184
 
5185
  $thumb_output = array();
5186
  $thumb_id = array();
5265
  }
5266
  }//end setting main thumbnail
5267
 
 
5268
  }//end if auto_thumb is on
5269
 
5270
+ if ( $post && ( $force == 'encode' || $options['auto_encode'] == "on" )
5271
+ && ( !$is_animated || $options['auto_encode_gif'] == "on" )
5272
+ ) {
5273
+
5274
  $video_formats = kgvid_video_formats();
5275
+ $kgvid_postmeta = kgvid_get_attachment_meta($post_id);
5276
+ $extension = pathinfo($filepath, PATHINFO_EXTENSION);
5277
  $something_to_encode = false;
5278
  $encode_checked = array();
5279
+
5280
+ if ( substr(basename($filepath, '.'.$extension), -10) == '-noreplace'
5281
+ || ( array_key_exists('original_replaced', $kgvid_postmeta) && $kgvid_postmeta['original_replaced'] == $options['replace_format'] )
5282
+ ) {
5283
+ $options['encode_fullres'] = false;
5284
+ }
5285
+
5286
+ if ( $post->post_mime_type == 'image/gif' ) {
5287
+ $fullres_only = array('fullres');
5288
+ $video_formats = array_intersect_key($video_formats, array_flip($fullres_only));
5289
+ }
5290
+
5291
  foreach ( $video_formats as $format => $format_stats ) {
5292
+
5293
  if ( array_key_exists('encode_'.$format, $options) && $options['encode_'.$format] == "on" ) {
5294
  $encode_checked[$format] = "true";
5295
  $something_to_encode = true;
5296
  }
5297
+
5298
  else { $encode_checked[$format] = "notchecked"; }
5299
+
5300
  }
5301
+
5302
  if ( $something_to_encode ) {
5303
  $output = kgvid_enqueue_videos($post_id, $movieurl, $encode_checked, $post->post_parent);
5304
  $output = kgvid_encode_videos();
5305
+
5306
  }
5307
+
5308
+ }//end if auto_encode
5309
+
5310
  }
5311
  add_action('kgvid_cron_new_attachment', 'kgvid_cron_new_attachment_handler');
5312
 
5313
+ function kgvid_change_thumbnail_parent( $post_id, $parent_id ) {
5314
 
5315
  $args = array(
5316
  'post_type' => 'attachment',
5317
  'post_mime_type' => 'image',
5318
  'numberposts' => '-1',
5319
  'meta_key' => '_kgflashmediaplayer-video-id',
5320
+ 'meta_value' => $post_id,
5321
  );
5322
  $thumbnails = get_posts( $args ); //find all thumbnail children of the video in the database
5323
 
5328
  if ( $thumbnail->post_parent != $parent_id ) {
5329
 
5330
  if ( empty($parent_id) ) {
5331
+ $thumbnail->post_parent = $post_id;
5332
  }
5333
 
5334
+ else { //parent post exists
5335
  $thumbnail->post_parent = $parent_id;
5336
  }
5337
 
5360
  if ( isset( $_REQUEST['found_post_id'] ) ) { $parent_id = (int) $_REQUEST['found_post_id']; }
5361
  else { $parent_id = 0; }
5362
 
5363
+ foreach ( $_REQUEST['media'] as $post_id ) {
5364
+
5365
+ kgvid_change_thumbnail_parent( $post_id, $parent_id );
5366
 
5367
+ if ( $options['featured'] == 'on' && !has_post_thumbnail( $parent_id ) ) {
5368
+ $featured_id = get_post_meta($post_id, '_kgflashmediaplayer-poster-id', true);
5369
+ if ( !empty($featured_id) ) {
5370
+ set_post_thumbnail($parent_id, $featured_id);
5371
+ }
5372
+ }
5373
 
5374
  }//end loop through modified attachments
5375
 
5380
  }
5381
  add_filter( 'wp_redirect', 'kgvid_upload_page_change_thumbnail_parent' ); //when attachment parent is manually changed on the Media Library page
5382
 
5383
+ function kgvid_validate_post_updated( $post_id ) {
5384
 
5385
  $options = kgvid_get_options();
5386
+ $post = get_post($post_id);
5387
+ $is_video = kgvid_is_video($post);
5388
 
5389
+ if ( $is_video ) {
 
 
 
 
 
5390
 
5391
+ if ( $options['thumb_parent'] == 'post' ) {
5392
+ kgvid_change_thumbnail_parent( $post_id, $post->post_parent );
5393
+ }
5394
 
5395
+ if ( $options['featured'] == 'on' && !has_post_thumbnail( $post->post_parent ) ) {
5396
+ $featured_id = get_post_meta($post_id, '_kgflashmediaplayer-poster-id', true);
5397
+ if ( !empty($featured_id) ) {
5398
+ set_post_thumbnail($post->post_parent, $featured_id);
5399
+ }
5400
+ }
5401
  }
5402
 
5403
  }
5413
  function kgvid_image_attachment_fields_to_edit($form_fields, $post) {
5414
 
5415
  $options = kgvid_get_options();
5416
+ $is_video = kgvid_is_video($post);
5417
 
5418
+ if ( $is_video ) {
 
 
 
 
5419
 
5420
  wp_enqueue_media(); //allows using the media modal in the Media Library
5421
  wp_enqueue_script( 'kgvid_video_plugin_admin' );
5422
  wp_enqueue_style( 'video_embed_thumbnail_generator_style' );
5423
 
5424
+ global $user_ID;
5425
+
5426
  $field_id = kgvid_backwards_compatible($post->ID);
5427
  $movieurl = wp_get_attachment_url($post->ID);
5428
  $moviefile = get_attached_file($post->ID);
5429
  $kgvid_postmeta = kgvid_get_attachment_meta($post->ID);
5430
+ $created_time = time()-get_post_time('U', true, $post->ID);
5431
+
5432
+ if ( $user_ID == $post->post_author || current_user_can('edit_others_posts') ) {
5433
+ $readonly = '';
5434
+ $security_disabled = '';
5435
+ }
5436
+ else {
5437
+ $readonly = ' readonly';
5438
+ $security_disabled = ' disabled';
5439
+ }
5440
 
5441
  $form_fields["kgflashmediaplayer-url"]["input"] = "hidden";
5442
  $form_fields["kgflashmediaplayer-url"]["value"] = $movieurl;
5474
  $form_fields["kgflashmediaplayer-aspect"]["value"] = round($set['height']/$set['width'], 5);
5475
 
5476
  $nonce = wp_create_nonce('video-embed-thumbnail-generator-nonce');
5477
+ $form_fields["kgflashmediaplayer-security"]["input"] = "hidden";
5478
+ $form_fields["kgflashmediaplayer-security"]["value"] = $nonce;
5479
 
5480
+ if ( $post->post_mime_type != 'image/gif' ) {
5481
+ $form_fields["views"]["label"] = __('Video Stats', 'video-embed-thumbnail-generator');
5482
+ $form_fields["views"]["input"] = "html";
5483
+ $form_fields["views"]["html"] = sprintf( _n('%d Start', '%d Starts', intval($kgvid_postmeta['starts']), 'video-embed-thumbnail-generator'), intval($kgvid_postmeta['starts']) ).', '.sprintf( _n('%d Complete View', '%d Complete Views', intval($kgvid_postmeta['completeviews']), 'video-embed-thumbnail-generator'), intval($kgvid_postmeta['completeviews']) ).'<br />'.__('Video ID:', 'video-embed-thumbnail-generator').' '.$post->ID;
 
 
 
5484
 
5485
+ // ** Thumbnail section **//
 
 
 
 
 
 
5486
 
5487
+ $thumbnail_url = get_post_meta($post->ID, "_kgflashmediaplayer-poster", true);
5488
+ if ( is_ssl() ) { $thumbnail_url = str_replace('http:', 'https:', $thumbnail_url); }
5489
 
5490
+ $thumbnail_html = "";
5491
+ if ( !empty($kgvid_postmeta['autothumb-error']) && empty($thumbnail_url) ) {
5492
+ $thumbnail_html = '<div class="kgvid_thumbnail_box kgvid_chosen_thumbnail_box">'.$kgvid_postmeta['autothumb-error'].'</div>';
5493
+ }
5494
+ elseif ( !empty($thumbnail_url) ) {
5495
+ $thumbnail_html = '<div class="kgvid_thumbnail_box kgvid_chosen_thumbnail_box"><img width="200" src="'.$thumbnail_url.'"></div>';
5496
+ }
5497
 
5498
+ $choose_from_video_content = "";
5499
+ $generate_content = "";
5500
+ $thumbnail_timecode = "";
 
 
 
 
5501
 
5502
  if ( !isset($options['ffmpeg_exists']) || $options['ffmpeg_exists'] == "notchecked" ) {
5503
+ kgvid_check_ffmpeg_exists($options, true);
5504
+ }
5505
  if ( $options['ffmpeg_exists'] == "notinstalled" ) { $ffmpeg_disabled_text = 'disabled="disabled" title="'.sprintf( __('%1$s not found at %2$s and unable to load video in browser for thumbnail generation.', 'video-embed-thumbnail-generator'), strtoupper($options['video_app']), $options['app_path'] ).'"'; }
5506
  else { $ffmpeg_disabled_text = ""; }
5507
 
5508
  $update_script = "";
5509
+ if ( $options['ffmpeg_exists'] == "on" && $options['auto_thumb'] == "on" && !$thumbnail_url && $created_time < 60 ) {
5510
+ $update_script = '<script type="text/javascript">jQuery(document).ready(function() { setTimeout(function(){ kgvid_redraw_thumbnail_box("'.$post->ID.'") }, 5000); });</script>';
5511
+ $thumbnail_html = '<div class="kgvid_thumbnail_box kgvid_chosen_thumbnail_box" style="height:112px;"><span style="margin-top: 45px;
 
 
 
 
 
5512
  display: inline-block;">Loading thumbnail...</span></div>';
 
 
 
5513
  }
5514
 
5515
+ if ( empty($security_disabled) && current_user_can('make_video_thumbnails') ) {
 
 
5516
 
5517
+ if ( !empty($kgvid_postmeta['thumbtime']) ) { $kgvid_postmeta['numberofthumbs'] = "1"; }
 
 
5518
 
5519
+ $args = array(
5520
+ 'mime_type' => 'image/jpeg',
5521
+ 'methods' => array(
5522
+ 'save'
5523
+ )
5524
+ );
5525
+ $img_editor_works = wp_image_editor_supports($args);
 
5526
 
5527
+ $moviefiletype = pathinfo($movieurl, PATHINFO_EXTENSION);
5528
+ $h264compatible = array("mp4", "mov", "m4v");
5529
+ if ( $moviefiletype == "mov" || $moviefiletype == "m4v" ) { $moviefiletype = "mp4"; }
5530
 
5531
+ $video_formats = kgvid_video_formats();
5532
+ $encodevideo_info = kgvid_encodevideo_info($movieurl, $post->ID);
5533
+ if ( in_array($moviefiletype, $h264compatible) ) {
5534
+ $encodevideo_info["original"]["exists"] = true;
5535
+ $encodevideo_info["original"]["url"] = $movieurl;
5536
+ $video_formats = array( "original" => array("mime" => "video/".$moviefiletype) ) + $video_formats;
5537
+ }
5538
+ else { $encodevideo_info["original"]["exists"] = false; }
5539
+
5540
+ $sources = array();
5541
+
5542
+ foreach ($video_formats as $format => $format_stats) {
5543
+ if ( $format != "original" && $encodevideo_info[$format]["url"] == $movieurl ) { unset($sources['original']); }
5544
+ if ( $encodevideo_info[$format]["exists"] ) { $sources[$format] = '<source src="'.$encodevideo_info[$format]["url"].'" type="'.$format_stats["mime"].'">'; }
5545
+ }
5546
+
5547
+ if ( $img_editor_works ) {
5548
+ $choose_from_video_content = '<div style="display:none;" class="kgvid_thumbnail_box kgvid-tabs-content" id="thumb-video-'.$post->ID.'-container">
5549
+ <div class="kgvid-reveal-thumb-video" onclick="kgvid_reveal_thumb_video('.$post->ID.')" id="show-thumb-video-'.$post->ID.'"><span class="kgvid-right-arrow"></span><span class="kgvid-show-video">'.__('Choose from video...', 'video-embed-thumbnail-generator').'</span></div>
5550
+ <div style="display:none;" id="thumb-video-'.$post->ID.'-player">
5551
+ <video crossorigin="anonymous" preload="metadata" class="kgvid-thumb-video" width="200" data-allowed="'.$options['browser_thumbnails'].'" onloadedmetadata="kgvid_thumb_video_loaded(\''.$post->ID.'\');" id="thumb-video-'.$post->ID.'" controls>'.
5552
+ implode("\n", $sources).'
5553
+ </video>
5554
+ <div class="kgvid-video-controls">
5555
+ <div class="kgvid-play-pause"></div>
5556
+ <div class="kgvid-seek-bar">
5557
+ <div class="kgvid-play-progress"></div>
5558
+ <div class="kgvid-seek-handle"></div></div>
5559
+ </div>
5560
+ <span id="manual-thumbnail" class="button-secondary" onclick="kgvid_thumb_video_manual('.$post->ID.');">Use this frame</span>
5561
  </div>
5562
+ </div>';
5563
+ }
5564
+ else {
5565
+ $choose_from_video_content = '<div class="kgvid_thumbnail_box">Thumbnail selection requires GD or Imagick PHP libraries.</div>';
5566
+ }
5567
+ $generate_content = '<div id="generate-thumb-'.$post->ID.'-container" class="kgvid-tabs-content">
5568
+ <input id="attachments-'. $post->ID .'-kgflashmediaplayer-numberofthumbs" name="attachments['.$post->ID.'][kgflashmediaplayer-numberofthumbs]" type="text" value="'.$kgvid_postmeta['numberofthumbs'].'" maxlength="2" style="width:35px;text-align:center;" onchange="kgvid_disable_thumb_buttons(\''.$post->ID.'\', \'onchange\');document.getElementById(\''.$field_id['thumbtime'].'\').value =\'\';" '.$ffmpeg_disabled_text.$readonly.'/>
5569
+ <input type="button" id="attachments-'. $post->ID .'-thumbgenerate" class="button-secondary" value="'._x('Generate', 'Button text. Implied "Generate thumbnails"', 'video-embed-thumbnail-generator').'" name="thumbgenerate" onclick="kgvid_generate_thumb('. $post->ID .', \'generate\');" '.$ffmpeg_disabled_text.'/>
5570
+ <input type="button" id="attachments-'. $post->ID .'-thumbrandomize" class="button-secondary" value="'._x('Randomize', 'Button text. Implied "Randomize thumbnail generation"', 'video-embed-thumbnail-generator').'" name="thumbrandomize" onclick="kgvid_generate_thumb('. $post->ID .', \'random\');" '.$ffmpeg_disabled_text.'/>
5571
+ <span style="white-space:nowrap;"><input type="checkbox" id="attachments-'. $post->ID .'-firstframe" name="attachments['.$post->ID.'][kgflashmediaplayer-forcefirst]" onchange="document.getElementById(\''.$field_id['thumbtime'].'\').value =\'\';" '.checked( $kgvid_postmeta['forcefirst'], 'on', false ).' '.$ffmpeg_disabled_text.$readonly.'/> <label for="attachments-'. $post->ID .'-firstframe">'.__('Force 1st frame thumbnail', 'video-embed-thumbnail-generator').'</label></span></div>';
5572
+
5573
+ $thumbnail_timecode = __('Thumbnail timecode:', 'video-embed-thumbnail-generator').' <input name="attachments['. $post->ID .'][kgflashmediaplayer-thumbtime]" id="attachments-'. $post->ID .'-kgflashmediaplayer-thumbtime" type="text" value="'. $kgvid_postmeta['thumbtime'] .'" style="width:60px;"'.$readonly.'><br>';
5574
+
5575
  }
 
 
 
 
 
5576
 
 
5577
 
5578
+ $form_fields["kgflashmediaplayer-autothumb-error"]["input"] = "hidden";
5579
+ $form_fields["kgflashmediaplayer-autothumb-error"]["value"] = $kgvid_postmeta['autothumb-error'];
5580
+
5581
 
5582
+ $form_fields["generator"]["label"] = _x("Thumbnails", 'Header for thumbnail section', 'video-embed-thumbnail-generator');
5583
+ $form_fields["generator"]["input"] = "html";
5584
+ $form_fields["generator"]["html"] = $choose_from_video_content.'
5585
+ '.$generate_content.'
5586
+ '.$thumbnail_timecode.'
5587
+ <div id="attachments-'.$post->ID.'-thumbnailplaceholder" style="position:relative;">'. $thumbnail_html .'</div>';
5588
+ if ( empty($security_disabled) ) {
5589
+ $form_fields["generator"]["html"] .= '<span id="pick-thumbnail" class="button-secondary" style="margin:10px 0;" data-choose="'.__('Choose a Thumbnail', 'video-embed-thumbnail-generator').'" data-update="'.__('Set as video thumbnail', 'video-embed-thumbnail-generator').'" data-change="attachments-'. $post->ID .'-kgflashmediaplayer-poster" onclick="kgvid_pick_image(this);">'.__('Choose from Library', 'video-embed-thumbnail-generator').'</span><br />
5590
+ <input type="checkbox" id="attachments-'. $post->ID .'-featured" name="attachments['.$post->ID.'][kgflashmediaplayer-featured]" '.checked( $kgvid_postmeta['featured'], 'on', false ).' '.$ffmpeg_disabled_text.'/> <label for="attachments-'. $post->ID .'-featured">'.__('Set thumbnail as featured image', 'video-embed-thumbnail-generator').'</label>';
5591
+ }
5592
 
5593
+ $form_fields["generator"]["html"] .= $update_script;
 
 
 
 
 
 
 
 
5594
 
5595
+ if ( empty($security_disabled) ) {
5596
+ $form_fields["kgflashmediaplayer-poster"]["label"] = __("Thumbnail URL", 'video-embed-thumbnail-generator');
5597
+ $form_fields["kgflashmediaplayer-poster"]["value"] = get_post_meta($post->ID, "_kgflashmediaplayer-poster", true);
5598
+ $form_fields["kgflashmediaplayer-poster"]["helps"] = "<small>".sprintf( __('Leave blank to use %sdefault thumbnail', 'video-embed-thumbnail-generator'), "<a href='options-general.php?page=video-embed-thumbnail-generator/video-embed-thumbnail-generator.php' target='_blank'>" )."</a>.</small>";
5599
+ }
5600
 
5601
+ $form_fields["kgflashmediaplayer-dimensions"]["label"] = __("Video Embed Dimensions", 'video-embed-thumbnail-generator');
5602
+ $form_fields["kgflashmediaplayer-dimensions"]["input"] = "html";
5603
+ $form_fields["kgflashmediaplayer-dimensions"]["html"] = __('Width:', 'video-embed-thumbnail-generator').' <input name="attachments['. $post->ID .'][kgflashmediaplayer-width]" id="attachments-'. $post->ID .'-kgflashmediaplayer-width" type="text" value="'.$kgvid_postmeta['width'].'" style="width:50px;" data-minimum="'.$options['minimum_width'].'" onchange="kgvid_set_dimension('.$post->ID.', \'height\', this.value);" onkeyup="kgvid_set_dimension('.$post->ID.', \'height\', this.value);"'.$readonly.'> '.__('Height:', 'video-embed-thumbnail-generator').'
5604
+ <input name="attachments['. $post->ID .'][kgflashmediaplayer-height]" id="attachments-'. $post->ID .'-kgflashmediaplayer-height" type="text" value="'.$kgvid_postmeta['height'].'" style="width:50px;" onchange="kgvid_set_dimension('.$post->ID.', \'width\', this.value);" onkeyup="kgvid_set_dimension('.$post->ID.', \'width\', this.value);"'.$readonly.'> <br />
5605
+ <input type="checkbox" name="attachments['. $post->ID .'][kgflashmediaplayer-lockaspect]" id="attachments-'. $post->ID .'-kgflashmediaplayer-lockaspect" onclick="kgvid_set_aspect('.$post->ID.', this.checked);" '.checked( $kgvid_postmeta['lockaspect'], 'on', false ).$security_disabled.'>
5606
+ <label for="attachments-'. $post->ID .'-kgflashmediaplayer-lockaspect"><small>'.__('Lock to aspect ratio', 'video-embed-thumbnail-generator').'</small></label>';
5607
+ $form_fields["kgflashmediaplayer-dimensions"]["helps"] = "<small>".sprintf( __('Leave blank to use %sdefault dimensions', 'video-embed-thumbnail-generator'), "<a href='options-general.php?page=video-embed-thumbnail-generator/video-embed-thumbnail-generator.php' target='_blank'>" )."</a>.</small>";
5608
 
5609
+ } //end if not GIF
5610
 
5611
  $checkboxes = kgvid_generate_encode_checkboxes($movieurl, $post->ID, "attachment");
5612
 
5614
  $form_fields["kgflashmediaplayer-encode"]["input"] = "html";
5615
  $form_fields["kgflashmediaplayer-encode"]["html"] = $checkboxes['checkboxes'];
5616
 
5617
+ if ( $options['ffmpeg_exists'] == "on" && $options['auto_encode'] == "on" && $created_time < 60 ) {
5618
+ $form_fields["kgflashmediaplayer-encode"]["html"] .= '<script type="text/javascript">jQuery(document).ready(function() { percent_timeout = setTimeout(function(){ kgvid_redraw_encode_checkboxes("'.$movieurl.'", "'.$post->ID.'", "attachment", "") }, 5000); jQuery(\'#wpwrap\').data("KGVIDCheckboxTimeout", percent_timeout); });</script>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5619
  }
5620
 
 
 
 
5621
 
5622
+ if ( $post->post_mime_type != 'image/gif' ) {
5623
 
5624
+ $tracks_html = '';
5625
+ if ( is_array($kgvid_postmeta['track']) ) {
5626
+ foreach ( $kgvid_postmeta['track'] as $track => $track_attribute ) {
5627
+ if ( !empty($kgvid_postmeta['track'][$track]['src']) ) {
5628
+ $items = array(__("subtitles", 'video-embed-thumbnail-generator')=>"subtitles", __("captions", 'video-embed-thumbnail-generator')=>"captions", __("chapters", 'video-embed-thumbnail-generator')=>"chapters");
5629
+ $track_type_select = '<select name="attachments['.$post->ID.'][kgflashmediaplayer-track]['.$track.'][kind]" id="attachments-'.$post->ID.'-kgflashmediaplayer-track_'.$track.'_kind]"'.$security_disabled.'>';
5630
+ foreach($items as $name=>$value) {
5631
+ $selected = ($kgvid_postmeta['track'][$track]['kind']==$value) ? 'selected="selected"' : '';
5632
+ $track_type_select .= "<option value='$value'>$name</option>";
5633
+ }
5634
+ $track_type_select .= "</select>";
5635
 
5636
+ if ( !array_key_exists( 'default', $kgvid_postmeta['track'][$track] ) ) { $kgvid_postmeta['track'][$track]['default'] = false; }
 
 
 
 
 
 
 
 
5637
 
5638
+ $tracks_html .= '<div id="kgflashmediaplayer-'.$post->ID.'-trackdiv-'.$track.'" class="kgvid_thumbnail_box kgvid_track_box"><strong>'._x('Track', 'captions track', 'video-embed-thumbnail-generator').' '.strval($track+1).'</strong>';
5639
+ if ( empty($security_disabled) ) {
5640
+ $tracks_html .= '<span class="kgvid_track_box_removeable" data-trackid="'.$track.'" onclick="jQuery(this).siblings(\'input\').val(\'\').attr(\'checked\', \'\').change();">X</span>';
5641
+ }
5642
+ $tracks_html .= '<br />'.__('Track type:', 'video-embed-thumbnail-generator').' '.$track_type_select.'<br />';
5643
+ if ( empty($security_disabled) ) {
5644
+ $tracks_html .= '<span id="pick-track'.$track.'" class="button-secondary" style="margin:10px 0;" data-choose="'.__('Choose a Text File', 'video-embed-thumbnail-generator').'" data-update="'.__('Set as track source', 'video-embed-thumbnail-generator').'" data-change="attachments-'. $post->ID .'-kgflashmediaplayer-track_'.$track.'_src" onclick="kgvid_pick_attachment(this);">'.__('Choose from Library', 'video-embed-thumbnail-generator').'</span><br />';
5645
+ }
5646
+ $tracks_html .= 'URL: <input name="attachments['. $post->ID .'][kgflashmediaplayer-track]['.$track.'][src]" id="attachments-'. $post->ID .'-kgflashmediaplayer-track_'.$track.'_src" type="text" value="'.$kgvid_postmeta['track'][$track]['src'].'" class="text" style="width:180px;"'.$readonly.'><br />
5647
+ '._x('Language code:', 'two-letter code indicating track\'s language', 'video-embed-thumbnail-generator').' <input name="attachments['. $post->ID .'][kgflashmediaplayer-track]['.$track.'][srclang]" id="attachments-'. $post->ID .'-kgflashmediaplayer-track_'.$track.'_srclang" type="text" value="'.$kgvid_postmeta['track'][$track]['srclang'].'" maxlength="2" style="width:40px;"'.$readonly.'><br />
5648
+ '.__('Label:', 'video-embed-thumbnail-generator').' <input name="attachments['. $post->ID .'][kgflashmediaplayer-track]['.$track.'][label]" id="attachments-'. $post->ID .'-kgflashmediaplayer-track_'.$track.'_label" type="text" value="'.$kgvid_postmeta['track'][$track]['label'].'" class="text" style="width:172px;"'.$readonly.'><br />
5649
+ '.__('Default:', 'video-embed-thumbnail-generator').'<input '.checked($kgvid_postmeta['track'][$track]['default'], 'default', false).' name="attachments['. $post->ID .'][kgflashmediaplayer-track]['.$track.'][default]" id="attachments-'. $post->ID .'-kgflashmediaplayer-track_'.$track.'_default" type="checkbox" value="default"'.$security_disabled.'></div>';
5650
+ }
5651
+ }
5652
+ }
5653
 
5654
+ $form_fields["kgflashmediaplayer-track"]["label"] = __("Subtitles & Captions", 'video-embed-thumbnail-generator');
5655
+ $form_fields["kgflashmediaplayer-track"]["input"] = "html";
5656
+ $form_fields["kgflashmediaplayer-track"]["html"] = '<div id="kgflashmediaplayer-'.$post->ID.'-trackdiv">'.$tracks_html.'</div>';
5657
+ if ( empty($security_disabled) ) {
5658
+ $form_fields["kgflashmediaplayer-track"]["html"] .= '<span class="button-secondary" id="kgflashmediaplayer-add_track" onclick="kgvid_add_subtitles('.$post->ID.')">'.__('Add track', 'video-embed-thumbnail-generator').'</span>';
5659
+ }
5660
 
5661
+ $items = array(__("Single Video", 'video-embed-thumbnail-generator')=>"Single Video", __("Video Gallery", 'video-embed-thumbnail-generator')=>"Video Gallery", __("WordPress Default", 'video-embed-thumbnail-generator')=>"WordPress Default");
5662
+ $shortcode_select = '<select name="attachments['.$post->ID.'][kgflashmediaplayer-embed]" id="attachments['.$post->ID.'][kgflashmediaplayer-embed]">';
5663
+ foreach($items as $name=>$value) {
5664
+ $selected = ($kgvid_postmeta['embed']==$value) ? 'selected="selected"' : '';
5665
+ $shortcode_select .= "<option value='$value' $selected>$name</option>";
5666
  }
5667
+ $shortcode_select .= "</select>";
5668
+
5669
+ $form_fields["kgflashmediaplayer-options"]["label"] = __("Video Embed Options", 'video-embed-thumbnail-generator');
5670
+ $form_fields["kgflashmediaplayer-options"]["input"] = "html";
5671
+ $form_fields["kgflashmediaplayer-options"]["html"] = '<input type="checkbox" name="attachments['.$post->ID.'][kgflashmediaplayer-showtitle]" id="attachments-'.$post->ID.'-kgflashmediaplayer-showtitle" '.checked( $kgvid_postmeta['showtitle'], 'on', false ).$security_disabled.'>
5672
+ <label for="attachments-'.$post->ID.'-kgflashmediaplayer-showtitle">'.__('Insert title above video', 'video-embed-thumbnail-generator').'</label><br />
5673
+ <input type="checkbox" name="attachments['.$post->ID.'][kgflashmediaplayer-downloadlink]" id="attachments-'.$post->ID.'-kgflashmediaplayer-downloadlink" '.checked( $kgvid_postmeta['downloadlink'], 'on', false ).$security_disabled.'>
5674
+ <label for="attachments-'.$post->ID.'-kgflashmediaplayer-downloadlink">'.__('Show download icon', 'video-embed-thumbnail-generator').'<em><small><br />'.__('Makes it easier for users to download file.', 'video-embed-thumbnail-generator').'</em></small></label><br />
5675
+ <label for="attachments-'.$post->ID.'-kgflashmediaplayer-embed">'._x('Insert', 'verb', 'video-embed-thumbnail-generator').'</label>
5676
+ '.$shortcode_select.'
5677
+ <script type="text/javascript">jQuery(document).ready(function(){kgvid_hide_standard_wordpress_display_settings('.$post->ID.');});</script>';
5678
+
5679
+ if ( $kgvid_postmeta['embed'] == "Video Gallery" ) {
5680
+
5681
+ if ( empty($kgvid_postmeta['gallery_id']) ) { $kgvid_postmeta['gallery_id'] = $post->post_parent; }
5682
+
5683
+ $items = array("menu_order", "title", "post_date", "rand", "ID");
5684
+ $gallery_orderby_select = '<select name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_orderby]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_orderby">';
5685
+ foreach($items as $item) {
5686
+ $selected = ($kgvid_postmeta['gallery_orderby']==$item) ? 'selected="selected"' : '';
5687
+ $gallery_orderby_select .= "<option value='$item' $selected>$item</option>";
5688
+ }
5689
+ $gallery_orderby_select .= "</select>";
5690
 
5691
+ $items = array("ASC", "DESC");
5692
+ $gallery_order_select = '<select name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_order]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_order">';
5693
+ foreach($items as $item) {
5694
+ $selected = ($kgvid_postmeta['gallery_order']==$item) ? 'selected="selected"' : '';
5695
+ $gallery_order_select .= "<option value='$item' $selected>$item</option>";
5696
+ }
5697
+ $gallery_order_select .= "</select>";
5698
+
5699
+ $form_fields["kgflashmediaplayer-gallery"]["label"] = __("Gallery Settings (all optional)", 'video-embed-thumbnail-generator');
5700
+ $form_fields["kgflashmediaplayer-gallery"]["input"] = "html";
5701
+ $form_fields["kgflashmediaplayer-gallery"]["html"] = '<input name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_thumb_width]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_thumb_width" type ="text" value="'.$kgvid_postmeta['gallery_thumb_width'].'" class="kgvid_50_width"> <label for="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_thumb_width">'.__('Thumbnail Width', 'video-embed-thumbnail-generator').'</label><br />
5702
+ '.$gallery_orderby_select.' '.__('Order By', 'video-embed-thumbnail-generator').'<br />
5703
+ '.$gallery_order_select.' '.__('Sort Order', 'video-embed-thumbnail-generator').'<br />
5704
+ <input name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_exclude]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_exclude" type ="text" value="'.$kgvid_postmeta['gallery_exclude'].'" class="kgvid_50_width"> <label for="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_exclude">'.__('Exclude', 'video-embed-thumbnail-generator').'</label><br />
5705
+ <input name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_include]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_include" type ="text" value="'.$kgvid_postmeta['gallery_include'].'" class="kgvid_50_width"> <label for="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_include">'.__('Include', 'video-embed-thumbnail-generator').'</label><br />
5706
+ <input name="attachments['.$post->ID.'][kgflashmediaplayer-gallery_id]" id="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_id" type ="text" value="'.$kgvid_postmeta['gallery_id'].'" class="kgvid_50_width"> <label for="attachments-'.$post->ID.'-kgflashmediaplayer-gallery_id">'.__('Post ID', 'video-embed-thumbnail-generator').'</label>
5707
+ ';
5708
+
5709
+ } //if video gallery
5710
+ } //if not GIF
5711
  } //only add fields if attachment is the right kind of video
5712
  return $form_fields;
5713
  }
5800
  }
5801
  add_filter('icon_dir', 'kgvid_video_icon_dir');
5802
 
5803
+ function kgvid_decode_base64_png($raw_png, $tmp_posterpath) {
5804
+
5805
+ $raw_png = str_replace('data:image/png;base64,', '', $raw_png);
5806
+ $raw_png = str_replace('data:image/jpeg;base64,', '', $raw_png);
5807
+ $raw_png = str_replace(' ', '+', $raw_png);
5808
+ $decoded_png = base64_decode($raw_png);
5809
+ $success = file_put_contents($tmp_posterpath, $decoded_png);
5810
+ $editor = wp_get_image_editor( $tmp_posterpath );
5811
+
5812
+ return $editor;
5813
+
5814
+ }
5815
+
5816
  function kgvid_ajax_save_html5_thumb() {
5817
 
5818
  if ( current_user_can('make_video_thumbnails') ) {
5830
  $tmp_posterpath = $uploads['path'].'/thumb_tmp/'.$posterfile.'.png';
5831
  $thumb_url = $uploads['url'].'/'.$posterfile.'.jpg';
5832
 
5833
+ $editor = kgvid_decode_base64_png($raw_png, $tmp_posterpath);
5834
+
5835
+ if ( is_wp_error($editor) ) { //couldn't open the image. Try the alternate php://input
5836
+
5837
+ $raw_post = file_get_contents("php://input");
5838
+ parse_str($raw_post, $alt_post);
5839
+ $editor = kgvid_decode_base64_png($alt_post['raw_png'], $tmp_posterpath);
5840
 
 
 
 
 
 
 
 
5841
  }
5842
+
5843
+ if ( is_wp_error($editor) ) {
5844
+ $thumb_url = '';
5845
+ }
5846
+ else {
5847
+ $thumb_dimensions = $editor->get_size();
5848
+ if ( $thumb_dimensions ) {
5849
+ $kgvid_postmeta = kgvid_get_attachment_meta($post_id);
5850
+ $kgvid_postmeta['actualwidth'] = $thumb_dimensions['width'];
5851
+ $kgvid_postmeta['actualheight'] = $thumb_dimensions['height'];
5852
+ kgvid_save_attachment_meta($post_id, $kgvid_postmeta);
5853
+ }
5854
+ $editor->set_quality( 90 );
5855
+ $new_image_info = $editor->save( $uploads['path'].'/thumb_tmp/'.$posterfile.'.jpg', 'image/jpeg' );
5856
+ unlink($tmp_posterpath);
5857
+ if ( $total > 1 ) {
5858
+ $post_name = get_the_title($post_id);
5859
+ $thumb_id = kgvid_save_thumb($post_id, $post_name, $thumb_url, $index);
5860
+ }
5861
  }
5862
+
5863
  kgvid_schedule_cleanup_generated_files('thumbs');
5864
  echo ($thumb_url);
 
5865
  }
5866
+
5867
+ die();
5868
+
5869
  }
5870
  add_action('wp_ajax_kgvid_save_html5_thumb', 'kgvid_ajax_save_html5_thumb');
5871
 
5886
  $thumb_id = kgvid_save_thumb($post_id, $post_name, $thumb_url, $index);
5887
 
5888
  echo $thumb_id;
 
5889
  }
5890
 
5891
+ die();
5892
+
5893
  }
5894
  add_action('wp_ajax_kgvid_save_thumb', 'kgvid_ajax_save_thumb');
5895
 
6182
  if ( !empty($kgvid_postmeta['poster']) && empty($kgvid_postmeta['poster-id']) ) { $html .= ' poster="'.$kgvid_postmeta["poster"].'"'; }
6183
  if ( !empty($kgvid_postmeta['width']) ) { $html .= ' width="'.$kgvid_postmeta["width"].'"'; }
6184
  if ( !empty($kgvid_postmeta['height']) ) { $html .= ' height="'.$kgvid_postmeta["height"].'"'; }
 
6185
  $html .= ']'.$kgvid_postmeta["url"].'[/KGVID]<br />';
6186
  } //if embed code is enabled
6187
 
6285
  <td><div id="kgflashmediaplayer-singleurl-trackdiv" class="kgvid_thumbnail_box kgvid_track_box"><?php _e('Track type:', 'video-embed-thumbnail-generator') ?><select name="attachments[singleurl][kgflashmediaplayer-track][kind]" id="attachments-singleurl-kgflashmediaplayer-track_kind"><option value="subtitles"><?php _e('subtitles', 'video-embed-thumbnail-generator') ?></option><option value="captions"><?php _e('captions', 'video-embed-thumbnail-generator') ?></option><option value="chapters"><?php _e('chapters', 'video-embed-thumbnail-generator') ?></option></select><br />URL: <input name="attachments[singleurl][kgflashmediaplayer-track][src]" id="attachments-singleurl-kgflashmediaplayer-track_src" type="text" value="" class="text"><br /><?php _e('Language code:', 'video-embed-thumbnail-generator') ?> <input name="attachments[singleurl][kgflashmediaplayer-track][srclang]" id="attachments-singleurl-kgflashmediaplayer-track_srclang" type="text" value="" maxlength="2" style="width:40px;"><br /><?php _e('Label:', 'video-embed-thumbnail-generator') ?> <input name="attachments[singleurl][kgflashmediaplayer-track][label]" id="attachments-singleurl-kgflashmediaplayer-track_label" type="text" value="" class="text"><br /><?php _e('Default:', 'video-embed-thumbnail-generator') ?> <input name="attachments[singleurl][kgflashmediaplayer-track][default]" id="attachments-singleurl-kgflashmediaplayer-track_default" type="checkbox" value="default"></div></td>
6286
  <tr>
6287
  <th valign="top" scope="row" class="label"><span class="alignleft"><label>Options</span></label></th>
6288
+ <td><input type="checkbox" <?php echo checked( $options["downloadlink"], "on", false ); ?> name="downloadlink" id="downloadlink" value="true" class="field" /><label for="downloadlink"><?php _e('Show download icon', 'video-embed-thumbnail-generator') ?><br /><small></em><?php _e('Makes it easier for users to download video file', 'video-embed-thumbnail-generator') ?></em></small></label></td>
6289
  </tr>
6290
  <tr class="submit">
6291
  <td></td>
6341
  if ( $poster !="" ) { $shortcode .= ' poster="'.$poster.'"'; }
6342
  if ( !empty($dimensions['width']) ) { $shortcode .= ' width="'.$dimensions['width'].'"'; }
6343
  if ( !empty($dimensions['height']) ) { $shortcode .= ' height="'.$dimensions['height'].'"'; }
6344
+ if ( is_array($kgvid_video_embed) && array_key_exists('enable', $kgvid_video_embed) && $kgvid_video_embed['enable'] == 'true' ) { $shortcode .= ' fullwidth="true"'; }
6345
  if ( $kgvid_postmeta['downloadlink'] == "on" ) { $shortcode .= ' downloadlink="true"'; }
6346
  if (is_array($kgvid_video_embed) && array_key_exists('gallery', $kgvid_video_embed)) { $shortcode .= ' autoplay="true"'; }
6347
  if (is_array($kgvid_video_embed) && array_key_exists('sample', $kgvid_video_embed)) {
6386
  ob_start();
6387
  wp_head();
6388
  $html .= ob_get_clean();
6389
+ $html .= '<style>body:before, body:after{ content: none; } .kgvid_wrapper { margin:0 !important; }';
6390
  if ( array_key_exists('gallery', $kgvid_video_embed) ) { $html .= ' .kgvid_below_video { color:white; } .kgvid_below_video a { color:aaa; }'; }
6391
  $html .= '</style>';
6392
  $html .= '</head><body class="content" style="margin:0px; font-family: sans-serif; padding:0px; border:none;';
6400
  $html .= '</body></html>';
6401
  $content_width = $content_width_save; //reset $content_width
6402
 
6403
+ return apply_filters('kgvid_generate_embeddable_video', $html, $kgvid_video_embed);
6404
 
6405
  }
6406
 
6639
 
6640
  if ( $movie_info['rotate'] === false || $options['ffmpeg_vpre'] == "on" ) { $movie_info['rotate'] = ""; }
6641
  switch ($movie_info['rotate']) { //if it's a sideways mobile video
6642
+ case 90:
6643
+ case 270:
6644
  $movie_width ^= $movie_height ^= $movie_width ^= $movie_height; //swap height & width
6645
  break;
6646
  }
6690
  if ( is_file($thumbnailfilename[$i]) )
6691
  kgvid_schedule_cleanup_generated_files('thumbs');
6692
 
6693
+ $thumbnaildisplaycode = '<div class="kgvid_thumbnail_select" name="attachments['.$postID.'][thumb'.$i.']" id="attachments-'.$postID.'-thumb'.$i.'"><label for="kgflashmedia-'.$postID.'-thumbradio'.$i.'"><img src="'.$thumbnailurl.'?'.rand().'" width="200" height="'.$thumbnailheight.'" class="kgvid_thumbnail"></label><br /><input type="radio" name="attachments['.$postID.'][thumbradio_'.$postID.']" id="kgflashmedia-'.$postID.'-thumbradio'.$i.'" value="'.str_replace('/thumb_tmp/', '/', $thumbnailurl).'" onchange="kgvid_select_thumbnail(this.value, \''.$postID.'\', '.$movieoffset.', jQuery(this).parent().find(\'img\')[0]);"></div>';
6694
 
6695
  $i++;
6696
 
6708
 
6709
  }
6710
 
6711
+ function kgvid_enqueue_videos($postID, $movieurl, $encode_checked, $parent_id, $blog_id = false) {
6712
+
6713
+ if ( !empty($blog_id) && $blog_id != 'false' ) { switch_to_blog( $blog_id ); }
6714
 
6715
  $options = kgvid_get_options();
6716
  $ffmpegPath = $options['app_path']."/".$options['video_app'];
6725
  $video_formats = kgvid_video_formats(false, false);
6726
  $sanitized_url = kgvid_sanitize_url($movieurl);
6727
  $movieurl = $sanitized_url['movieurl'];
6728
+ $post_type = get_post_type($postID);
6729
+ if ( $post_type == "attachment" ) { $filepath = get_attached_file($postID); }
6730
  else { $filepath = $movieurl; }
6731
  $movie_info = kgvid_get_video_dimensions($filepath);
6732
 
6735
  $movie_width = $movie_info['width'];
6736
  $movie_height = $movie_info['height'];
6737
 
6738
+ if ( $post_type == "attachment" ) { //if the video is in the database
6739
 
6740
  $kgvid_postmeta = kgvid_get_attachment_meta($postID);
6741
  $keys = array( 'width' => 'actualwidth', 'height' => 'actualheight', 'duration' => 'duration', 'rotate' => 'rotate' );
6748
  $encodevideo_info = kgvid_encodevideo_info($movieurl, $postID);
6749
 
6750
  foreach ( $video_formats as $format => $format_stats ) {
6751
+ if ( array_key_exists($format, $encode_checked) && $encode_checked[$format] == "true" ) {
6752
  if ( !$encodevideo_info[$format]['exists'] ) {
6753
  if ( ($format == "1080" && $movie_height <= 1080) || ($format == "720" && $movie_height <= 720) ) {
6754
  $movie_extension = pathinfo($movieurl, PATHINFO_EXTENSION);
6771
  }
6772
  }//end loop through video formats
6773
 
6774
+ if ( isset($kgvid_postmeta) ) { kgvid_save_attachment_meta($postID, $kgvid_postmeta); }
6775
 
6776
  if ( !empty($encode_list) ) { //if there's anything to encode
6777
 
6778
  $video_encode_queue = kgvid_get_encode_queue();
6779
+ if ( empty($parent_id) && $post_type == "attachment" ) { $parent_id = get_post($postID)->post_parent; }
6780
+ $current_user_id = get_current_user_id();
6781
+ if ( $current_user_id == 0 && $post_type == "attachment" ) { $current_user_id = get_post($postID)->post_author; }
6782
 
6783
  $queue_entry = array (
6784
  'attachmentID' => $postID,
6785
  'parent_id' => $parent_id,
6786
  'movieurl' => $movieurl,
6787
  'encode_formats'=> $encode_formats,
6788
+ 'movie_info' => $movie_info,
6789
+ 'user_id' => $current_user_id
6790
  );
6791
  if ( function_exists( 'is_plugin_active_for_network' ) && is_plugin_active_for_network( plugin_basename(__FILE__) ) ) {
6792
  $queue_entry['blog_id'] = get_current_blog_id();
6884
  if ( empty($transient) ) { delete_transient( 'kgvid_new_attachment_transient' ); }
6885
  else { set_transient( 'kgvid_new_attachment_transient', $transient, DAY_IN_SECONDS ); }
6886
 
 
6887
  $arr = array ( "embed_display"=>$embed_display );
6888
+
6889
+ if ( !empty($blog_id) && $blog_id != 'false' ) { restore_current_blog(); }
6890
+
6891
  return $arr;
6892
+
6893
  }
6894
  else {
6895
+
6896
  $thumbnaildisplaycode = "<strong>".__('Can\'t open movie file.', 'video-embed-thumbnail-generator')."</strong><br />".$movie_info['output'];
6897
  $arr = array ( "thumbnaildisplaycode"=>$thumbnaildisplaycode, "embed_display"=>$thumbnaildisplaycode, "lastthumbnumber"=>"break" );
6898
+
6899
+ if ( !empty($blog_id) && $blog_id != 'false' ) { restore_current_blog(); }
6900
+
6901
  return $arr;
6902
+
6903
  } //can't open movie
6904
 
6905
  }
6930
  if (isset($_POST['generate_button'])) { $generate_button = $_POST['generate_button']; }
6931
 
6932
  if (isset($_POST['encodeformats'])) { $encode_checked = $_POST['encodeformats']; }
6933
+ if (isset($_POST['blog_id'])) { $blog_id = $_POST['blog_id']; }
6934
+ else { $blog_id = false; }
6935
 
6936
  if (isset($_POST['poster'])) { $poster = $_POST['poster']; }
6937
  if (isset($_POST['parent_id'])) { $parent_id = $_POST['parent_id']; }
6947
  echo json_encode($arr);
6948
  }
6949
  if ( $action == "enqueue" && current_user_can('encode_videos') ) {
6950
+ $arr = kgvid_enqueue_videos($postID, $movieurl, $encode_checked, $parent_id, $blog_id);
6951
  echo json_encode($arr);
6952
  }
6953
  if ( $action == "submit" && current_user_can('make_video_thumbnails') ) { kgivd_save_singleurl_poster($parent_id, $poster, $movieurl, $set_featured); }
7012
  extract($queue_info, EXTR_OVERWRITE);
7013
  $video = $video_encode_queue[$video_key];
7014
 
7015
+ if ( array_key_exists('blog_id', $video) ) { switch_to_blog( $video['blog_id'] ); }
7016
+
7017
  $ffmpegPath = $options['app_path']."/".$options['video_app'];
7018
  $moviefilepath = '';
7019
  if ( get_post_type($video['attachmentID']) == "attachment" ) { $moviefilepath = get_attached_file($video['attachmentID']); }
7143
 
7144
  } //if there's a queue
7145
  $arr = array ( "embed_display"=>"<strong>".$embed_display."</strong>", "video_key"=>$video_key, "format"=>$queued_format, "actualwidth"=>$movie_info['width'], "actualheight"=>$movie_info['height'] );
7146
+
7147
+ if ( array_key_exists('blog_id', $video) ) { restore_current_blog(); }
7148
+
7149
  return $arr;
7150
 
7151
  }
7179
  $arr['output'] .= kgvid_fix_moov_atom($uploads['path']."/sample-video-h264".$suffix);
7180
  }
7181
 
7182
+ if ( !empty($options['ffmpeg_watermark']['url']) ) {
7183
  if (!file_exists($uploads['path'].'/thumb_tmp')) { mkdir($uploads['path'].'/thumb_tmp'); }
7184
+ $cmd = escapeshellcmd($options['app_path'].'/'.$options['video_app'].' -y -i "'.$uploads['path']."/sample-video-h264".$suffix.'" -qscale 1 -vframes 1 -f mjpeg '.$uploads['path'].'/thumb_tmp/watermark_test.jpg');
7185
  kgvid_schedule_cleanup_generated_files('thumbs');
7186
  exec ( $cmd );
7187
  if ( file_exists($uploads['path'].'/thumb_tmp/watermark_test.jpg') ) {
7208
 
7209
  $video_entry = $video_encode_queue[$video_key];
7210
 
7211
+ if ( array_key_exists('blog_id', $video_entry) ) {
7212
+ $blog_id = $video_entry['blog_id'];
7213
+ switch_to_blog($blog_id);
7214
+ }
7215
  else { $blog_id = false; }
7216
 
7217
  $script_function = 'kgvid_redraw_encode_checkboxes("'.$video_entry['movieurl'].'", "'.$video_entry['attachmentID'].'", "'.$page.'", "'.$blog_id.'")';
7264
  if ( is_array($time_matches) && array_key_exists(1, $time_matches) != true ) { //if something other than the regular FFMPEG encoding output check for these
7265
  preg_match('/video:(.*?) /', $lastline, $video_matches);
7266
  preg_match('/libx264 (.*?) /', $lastline, $libx264_matches);
7267
+ preg_match('/aac (.*?) /', $lastline, $aac_matches);
7268
  $queue_match = preg_match('/queue on closing/', $lastline);
7269
  }
7270
 
7303
  $embed_display = '<strong>'.__('Encoding', 'video-embed-thumbnail-generator').'</strong><br /><div class="kgvid_meter"><div class="kgvid_meter_bar" style="width:'.$percent_done.'%;"><div class="kgvid_meter_text">'.$percent_done_text.'</div></div></div>';
7304
 
7305
  if ( current_user_can('encode_videos') && $pid ) {
7306
+ $embed_display .= '<a href="javascript:void(0);" class="kgvid_cancel_button" id="attachments-'.$video_entry["attachmentID"].'-kgflashmediaplayer-cancelencode" onclick="kgvid_cancel_encode('.$pid.', \''.$video_entry["attachmentID"].'\', \''.$video_key.'\', \''.$format.'\', \''.$blog_id.'\');">'.__('Cancel', 'video-embed-thumbnail-generator').'</a>';
7307
  }
7308
 
7309
  $embed_display .= '<div class="kgvid_encoding_small_text"><small>'.__('Elapsed:', 'video-embed-thumbnail-generator').' '.date('H:i:s',$time_elapsed).'. '.__('Remaining:', 'video-embed-thumbnail-generator').' '.$time_remaining.'. '._x('FPS:', 'Frames per second', 'video-embed-thumbnail-generator').' '.$fps_match.'</small></div>';
7317
  elseif (
7318
  ( is_array($video_matches) && array_key_exists(1, $video_matches) == true )
7319
  || ( is_array($libx264_matches) && array_key_exists(1, $libx264_matches) == true )
7320
+ || ( is_array($aac_matches) && array_key_exists(1, $aac_matches) == true )
7321
  || ( $queue_match )
7322
  ) { //encoding complete
7323
 
 
 
7324
  $percent_done = 100;
7325
  $ended = filemtime($logfile);
7326
  $time_elapsed = $ended - $started;
7395
 
7396
  if ( (empty($next_video['format']) || $next_video['video_key'] != $video_key) && $video_encode_queue[$video_key]['encode_formats']['fullres']['status'] == "Encoding Complete" ) { //if there's nothing left to encode in this video and we've encoded the fullres
7397
  $new_movie_url = kgvid_replace_video( $video_key, 'fullres' );
7398
+ $script_function = 'kgvid_redraw_encode_checkboxes("'.$new_movie_url.'", "'.$video_entry['attachmentID'].'", "'.$page.'", "'.$blog_id.'")';
7399
 
7400
  $embed_display = '<strong>'.__('Encoding Complete', 'video-embed-thumbnail-generator').'</strong>';
7401
 
7402
  }//fullres encoding complete
7403
 
 
 
7404
  }//encoding complete
7405
 
7406
  else { //there was an unexpected output and the encoded file hasn't been modified in more than 10 seconds
7408
  if ( strpos($lastline, "signal 15") !== false ) { //if the encoding was intentionally canceled
7409
  $lastline = __("Encoding was canceled.", 'video-embed-thumbnail-generator');
7410
  }
7411
+ $video_encode_queue[$video_key]['encode_formats'][$format]['status'] = "canceled";
7412
 
7413
  }
7414
 
7420
 
7421
  }
7422
 
7423
+ if ( $video_encode_queue[$video_key]['encode_formats'][$format]['status'] == "error" || $video_encode_queue[$video_key]['encode_formats'][$format]['status'] == "canceled" ) {
7424
+
7425
  $video_encode_queue[$video_key]['encode_formats'][$format]['lastline'] = addslashes($lastline);
7426
+
7427
  $embed_display = '<strong>'.__('Error:', 'video-embed-thumbnail-generator').' </strong><span class="kgvid_warning">'.stripslashes($lastline).'.</span>';
7428
+
7429
+ if ( $video_encode_queue[$video_key]['encode_formats'][$format]['status'] == "error" ) {
7430
+
7431
+ $options = kgvid_get_options();
7432
+
7433
+ if ( ( $options['error_email'] != 'nobody'
7434
+ || ( array_key_exists('network_error_email', $options) && $options['network_error_email'] != 'nobody' )
7435
+ )
7436
+ && !array_key_exists('mailed', $video_encode_queue[$video_key]['encode_formats'][$format])
7437
+ ) {
7438
+ $mailed = false;
7439
+ $blog_title = get_bloginfo();
7440
+ $admin_url = get_admin_url();
7441
+ $user = false;
7442
+ $super_user = false;
7443
+
7444
+ if ( $options['error_email'] == 'encoder'
7445
+ || ( array_key_exists('network_error_email', $options) && $options['network_error_email'] == 'encoder' )
7446
+ ) {
7447
+ if ( !empty($video_encode_queue[$video_key]['user_id']) ) {
7448
+ $user = get_userdata( $video_encode_queue[$video_key]['user_id'] );
7449
+ }
7450
+ }
7451
+ elseif( is_numeric($options['error_email']) ) {
7452
+ $user = get_userdata($options['error_email']);
7453
+ }
7454
+
7455
+ if ( array_key_exists('network_error_email', $options) && is_numeric($options['network_error_email']) ) {
7456
+ $super_user = get_userdata($options['network_error_email']);
7457
+ }
7458
+
7459
+ $headers = array('Content-Type: text/html; charset=UTF-8');
7460
+
7461
+ if ( $user instanceof WP_User ) {
7462
+ $mailed = wp_mail(
7463
+ $user->user_email,
7464
+ __('Video Encode Error', 'video-embed-thumbnail-generator'),
7465
+ sprintf( _x('Error message "%1$s" while encoding video file %2$s at %3$s', '1 is the error message, 2 is the filename, 3 is the website name.', 'video-embed-thumbnail-generator'), $video_encode_queue[$video_key]['encode_formats'][$format]['lastline'], basename($video_encode_queue[$video_key]['encode_formats'][$format]['filepath']), '<a href="'.$admin_url.'/tools.php?page=kgvid_video_encoding_queue">'.$blog_title.'</a>' ),
7466
+ $headers
7467
+ );
7468
+ }
7469
+
7470
+ if ( $super_user instanceof WP_User && $super_user != $user ) {
7471
+ $network_info = get_current_site();
7472
+ $mailed = wp_mail(
7473
+ $super_user->user_email,
7474
+ __('Video Encode Error', 'video-embed-thumbnail-generator'),
7475
+ sprintf( _x('Error message "%1$s" while encoding video file %2$s at %3$s', '1 is the error message, 2 is the filename, 3 is the website name.', 'video-embed-thumbnail-generator'), $video_encode_queue[$video_key]['encode_formats'][$format]['lastline'], basename($video_encode_queue[$video_key]['encode_formats'][$format]['filepath']), '<a href="'.$admin_url.'/tools.php?page=kgvid_video_encoding_queue">'.$blog_title.'</a>' ).' '.sprintf( _x('on the %s network.', 'on the [name of multisite network] network.', 'video-embed-thumbnail-generator'), '<a href="'.network_admin_url("settings.php?page=kgvid_network_video_encoding_queue").'">'.$network_info->site_name.'</a>' ),
7476
+ $headers
7477
+ );
7478
+ }
7479
+
7480
+ if ( $mailed ) { $video_encode_queue[$video_key]['encode_formats'][$format]['mailed'] = true; }
7481
+ }
7482
+
7483
+ }
7484
+
7485
+ kgvid_save_encode_queue($video_encode_queue);
7486
+
7487
  $next_video = kgvid_encode_videos(); //start the next queued video
7488
  if ( !empty($next_video['format']) ) {
7489
  $args = array($next_video['video_key'], $next_video['format'], $page);
7498
  else { $embed_display = "<strong>".__('Waiting...', 'video-embed-thumbnail-generator')."</strong>"; }
7499
 
7500
  $arr = array ( 'embed_display' => $embed_display, 'time_to_wait' => $time_to_wait );
7501
+
7502
+ if ( $blog_id ) { restore_current_blog(); }
7503
+
7504
  return $arr;
7505
 
7506
  }//end if queue entry exists
7523
 
7524
  function kgvid_replace_video( $video_key, $format ) {
7525
 
7526
+ $options = kgvid_get_options();
7527
  $video_encode_queue = kgvid_get_encode_queue();
7528
  $video_formats = kgvid_video_formats();
7529
  $encoded_filename = $video_encode_queue[$video_key]['encode_formats'][$format]['filepath'];
7572
  if ( file_exists($encoded_filename) ) {
7573
  rename($encoded_filename, $new_filename);
7574
  if ( file_exists($original_filename) && $original_filename != $new_filename ) { unlink($original_filename); }
7575
+
7576
+ if ( get_post_mime_type($video_id) == 'image/gif' ) {
7577
+ $was_gif = true;
7578
+ $gif_metadata = wp_get_attachment_metadata($video_id);
7579
+ if ( array_key_exists( 'sizes', $gif_metadata) ) {
7580
+ $uploads = wp_upload_dir();
7581
+ foreach ( $gif_metadata['sizes'] as $size => $info ) {
7582
+ $size_filename = $uploads['path'].'/'.$info['file'];
7583
+ if ( file_exists($size_filename) ) { unlink($size_filename); }
7584
+ }
7585
+ }
7586
+ }
7587
  }
7588
  $video_encode_queue[$video_key]['encode_formats'][$format]['url'] = $new_url;
7589
 
7624
  $post = get_post($video_id);
7625
  $new_guid = str_replace( $path_parts['extension'], $new_mime['ext'], $post->guid );
7626
 
 
 
7627
  if ( $new_guid != $post->guid ) {
7628
  $post->guid = $new_guid;
7629
  global $wpdb;
7641
  $post_update = array('ID' => $video_id, 'post_mime_type' => $new_mime['type']);
7642
  wp_update_post($post_update);
7643
 
7644
+ $kgvid_postmeta = kgvid_get_attachment_meta($video_id);
7645
+ $kgvid_postmeta['original_replaced'] = $options['replace_format'];
7646
+ kgvid_save_attachment_meta($video_id, $kgvid_postmeta);
7647
+
7648
+ if ( $options['auto_thumb'] == 'on' && isset($was_gif) ) { kgvid_cron_new_attachment_handler($video_id, 'thumbs'); }
7649
+
7650
  return $new_url;
7651
 
7652
  }//end replace true
7656
 
7657
  function kgvid_clear_completed_queue($type, $scope = 'site') {
7658
 
7659
+ global $user_ID;
7660
+
7661
  $video_encode_queue = kgvid_get_encode_queue();
7662
 
7663
  if ( !empty($video_encode_queue) ) {
7669
  if ( !empty($queue_entry['encode_formats']) ) {
7670
  foreach ( $queue_entry['encode_formats'] as $format => $value ) {
7671
  if ( $value['status'] == "encoding" ) { //if it's not completed yet
7672
+ if ( $type != "all" ) { $keep[$video_key] = true; }
7673
+ elseif ( (is_network_admin() && $scope == 'network')
7674
+ || (array_key_exists('blog_id', $queue_entry) && $queue_entry['blog_id'] == get_current_blog_id())
7675
+ ) {
7676
+ if ( array_key_exists( 'PID', $value ) && intval($value['PID']) > 0 ) {
7677
+ posix_kill($value['PID'], 15);
7678
+ }
7679
+ if ( array_key_exists( 'filepath', $value ) && file_exists($value['filepath']) ) {
7680
+ unlink($value['filepath']);
7681
+ }
7682
+ }
7683
+ else { $keep[$video_key] = true; }
7684
  }
7685
  if ( ($type == "manual" && $value['status'] == "queued")
7686
  || ($type == "queued" && $value['status'] == "Encoding Complete")
7692
  $keep[$video_key] = true;
7693
  }
7694
  }
7695
+ if ( ( $scope == 'site' && array_key_exists('blog_id', $queue_entry) && $queue_entry['blog_id'] != get_current_blog_id() )
7696
+ || ( !current_user_can('edit_others_video_encodes') && $user_ID != $queue_entry['user_id'] )
7697
+ || !current_user_can('encode_videos')
7698
+ || ( $scope != 'site' && !current_user_can('manage_network') )
7699
+ ) { //only clear entries from current blog
7700
  $keep[$video_key] = true;
7701
  break;
7702
  }
8244
  <li><code>downloadlink="true/false"</code> '.__('generates a link below the video to make it easier for users to save the video file to their computers.', 'video-embed-thumbnail-generator').'</li>
8245
  <li><code>right_click="true/false"</code> '.__('allow or disable right-clicking on the video player.', 'video-embed-thumbnail-generator').'</li>
8246
  <li><code>resize="true/false"</code> '.__('allow or disable responsive resizing.', 'video-embed-thumbnail-generator').'</li>
8247
+ <li><code>auto_res="automatic/highest/lowest/1080p/720p/360p/custom"</code> '.__('specify the video resolution when the page loads.', 'video-embed-thumbnail-generator').'</li>
8248
+ <li><code>pixel_ratio="true/false"</code> '.__('account for high-density (retina) displays when choosing automatic video resolution.', 'video-embed-thumbnail-generator').'</li>
8249
+ <li><code>schema="true/false"</code> '.__('allow or disable Schema.org search engine metadata.', 'video-embed-thumbnail-generator').'</li></ul>
8250
 
8251
  <p><strong>'.__('These options will add a subtitle/caption track.', 'video-embed-thumbnail-generator').'</strong></p>
8252
  <ul><li><code>track_src="http://www.example.com/subtitles.vtt_.txt"</code> '.__('URL of the WebVTT file.', 'video-embed-thumbnail-generator').'</li>
8256
  <li><code>track_default="default"</code> '.__('track is enabled by default.', 'video-embed-thumbnail-generator').'</li></ul>
8257
 
8258
  <p><strong>'.__('These options will only affect Video.js playback', 'video-embed-thumbnail-generator').'</strong></p>
8259
+ <ul><li><code>skin="example-css-class"</code> '.sprintf( __('Completely change the look of the video player. %sInstructions here.', 'video-embed-thumbnail-generator'), '<a href="https://github.com/zencoder/video-js/blob/master/docs/skins.md">' ).'</a></li>
8260
+ <li><code>nativecontrolsfortouch="true/false"</code> '.__('enables or disables native controls on touchscreen devices.', 'video-embed-thumbnail-generator').'</li>
8261
+ </ul>
8262
 
8263
  <p><strong>'.__('These options will only affect Flash playback in Strobe Media Playback video elements. They will have no effect on other players.', 'video-embed-thumbnail-generator').'</p></strong>
8264
  <ul><li><code>autohide="true/false"</code> '.__('specify whether to autohide the control bar after a few seconds.', 'video-embed-thumbnail-generator').'</li>
8286
  add_action( 'admin_head-post.php', 'kgvid_add_contextual_help_tab' );
8287
  add_action( 'admin_head-post-new.php', 'kgvid_add_contextual_help_tab' );
8288
 
8289
+ function kgvid_save_post($post_id) {
8290
+
8291
+ $options = kgvid_get_options();
8292
+
8293
+ if ( $options['open_graph'] == "on" ) {
8294
+ //render the post when it's saved in case there's a do_shortcode call in it so open graph metadata makes it into wp_head()
8295
+ $response = wp_remote_get( get_permalink($post_id), array('blocking' => false) );
8296
+ }
8297
+
8298
+ }
8299
+ add_action( 'save_post', 'kgvid_save_post' );
8300
+
8301
+ function kgvid_clear_first_embedded_video_meta() {
8302
+
8303
+ global $kgvid_video_id;
8304
+ global $post;
8305
+
8306
+ if ( $kgvid_video_id == null && $post ) {
8307
+ $first_embedded_video_meta = get_post_meta($post->ID, '_kgvid_first_embedded_video', true);
8308
+ if ( !empty($first_embedded_video_meta) ) {
8309
+ delete_post_meta($post->ID, '_kgvid_first_embedded_video');
8310
+ }
8311
+ }
8312
+ }
8313
+ add_action( 'wp_footer', 'kgvid_clear_first_embedded_video_meta', 12 );
8314
 
8315
  function kgvid_clear_cron_and_roles() {
8316
 
video-js/font/VideoJS.eot ADDED
Binary file
video-js/font/VideoJS.svg ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <defs>
5
+ <font id="VideoJS" horiz-adv-x="1792">
6
+ <font-face font-family="VideoJS"
7
+ units-per-em="1792" ascent="1792"
8
+ descent="0" />
9
+ <missing-glyph horiz-adv-x="0" />
10
+ <glyph glyph-name="play"
11
+ unicode="&#xF101;"
12
+ horiz-adv-x="1792" d=" M597.3333333333334 1418.6666666666665V373.3333333333333L1418.6666666666667 896z" />
13
+ <glyph glyph-name="play-circle"
14
+ unicode="&#xF102;"
15
+ horiz-adv-x="1792" d=" M746.6666666666667 560L1194.6666666666667 896L746.6666666666667 1232V560zM896 1642.6666666666667C483.4666666666667 1642.6666666666667 149.3333333333334 1308.5333333333333 149.3333333333334 896S483.4666666666667 149.3333333333333 896 149.3333333333333S1642.6666666666667 483.4666666666667 1642.6666666666667 896S1308.5333333333333 1642.6666666666667 896 1642.6666666666667zM896 298.6666666666665C566.72 298.6666666666665 298.6666666666667 566.7199999999998 298.6666666666667 896S566.72 1493.3333333333333 896 1493.3333333333333S1493.3333333333335 1225.28 1493.3333333333335 896S1225.2800000000002 298.6666666666665 896 298.6666666666665z" />
16
+ <glyph glyph-name="pause"
17
+ unicode="&#xF103;"
18
+ horiz-adv-x="1792" d=" M448 373.3333333333333H746.6666666666667V1418.6666666666665H448V373.3333333333333zM1045.3333333333335 1418.6666666666665V373.3333333333333H1344V1418.6666666666665H1045.3333333333335z" />
19
+ <glyph glyph-name="volume-mute"
20
+ unicode="&#xF104;"
21
+ horiz-adv-x="1792" d=" M1232 896C1232 1027.7866666666666 1155.8400000000001 1141.6533333333332 1045.3333333333335 1196.5333333333333V1031.52L1228.6399999999999 848.2133333333334C1230.88 863.8933333333334 1232 879.9466666666667 1232 896.0000000000001zM1418.6666666666667 896C1418.6666666666667 825.8133333333333 1403.3600000000001 759.7333333333333 1378.3466666666668 698.8799999999999L1491.466666666667 585.7599999999998C1540 678.72 1568 783.9999999999999 1568 896C1568 1215.5733333333333 1344.3733333333334 1482.88 1045.3333333333335 1550.8266666666666V1396.6399999999999C1261.1200000000001 1332.4266666666667 1418.6666666666667 1132.6933333333332 1418.6666666666667 896zM319.2000000000001 1568L224 1472.8L576.8 1120H224V672H522.6666666666667L896 298.6666666666665V800.8L1213.7066666666667 483.0933333333332C1163.68 444.6399999999999 1107.3066666666666 413.6533333333332 1045.3333333333335 394.9866666666665V240.7999999999998C1148 264.32 1241.7066666666667 311.3599999999997 1320.48 375.9466666666663L1472.8000000000002 224L1568 319.1999999999998L896 991.1999999999998L319.2000000000001 1568zM896 1493.3333333333333L739.9466666666667 1337.28L896 1181.2266666666667V1493.3333333333333z" />
22
+ <glyph glyph-name="volume-low"
23
+ unicode="&#xF105;"
24
+ horiz-adv-x="1792" d=" M522.6666666666667 1120V672H821.3333333333334L1194.6666666666667 298.6666666666665V1493.3333333333333L821.3333333333334 1120H522.6666666666667z" />
25
+ <glyph glyph-name="volume-mid"
26
+ unicode="&#xF106;"
27
+ horiz-adv-x="1792" d=" M1381.3333333333335 896C1381.3333333333335 1027.7866666666666 1305.1733333333334 1141.6533333333332 1194.6666666666667 1196.5333333333333V595.0933333333332C1305.1733333333334 650.3466666666666 1381.3333333333335 764.2133333333331 1381.3333333333335 896zM373.3333333333334 1120V672H672L1045.3333333333335 298.6666666666665V1493.3333333333333L672 1120H373.3333333333334z" />
28
+ <glyph glyph-name="volume-high"
29
+ unicode="&#xF107;"
30
+ horiz-adv-x="1792" d=" M224 1120V672H522.6666666666667L896 298.6666666666665V1493.3333333333333L522.6666666666667 1120H224zM1232 896C1232 1027.7866666666666 1155.8400000000001 1141.6533333333332 1045.3333333333335 1196.5333333333333V595.0933333333332C1155.8400000000001 650.3466666666666 1232 764.2133333333331 1232 896zM1045.3333333333335 1550.8266666666666V1396.6399999999999C1261.1200000000001 1332.4266666666667 1418.6666666666667 1132.6933333333332 1418.6666666666667 896S1261.1200000000001 459.5733333333333 1045.3333333333335 395.3600000000002V241.1733333333332C1344.3733333333334 309.1199999999999 1568 576.0533333333333 1568 896S1344.3733333333334 1482.88 1045.3333333333335 1550.8266666666666z" />
31
+ <glyph glyph-name="fullscreen-enter"
32
+ unicode="&#xF108;"
33
+ horiz-adv-x="1792" d=" M522.6666666666667 746.6666666666665H373.3333333333334V373.3333333333333H746.6666666666667V522.6666666666665H522.6666666666667V746.6666666666665zM373.3333333333334 1045.3333333333333H522.6666666666667V1269.3333333333333H746.6666666666667V1418.6666666666665H373.3333333333334V1045.3333333333333zM1269.3333333333335 522.6666666666665H1045.3333333333335V373.3333333333333H1418.6666666666667V746.6666666666665H1269.3333333333335V522.6666666666665zM1045.3333333333335 1418.6666666666665V1269.3333333333333H1269.3333333333335V1045.3333333333333H1418.6666666666667V1418.6666666666665H1045.3333333333335z" />
34
+ <glyph glyph-name="fullscreen-exit"
35
+ unicode="&#xF109;"
36
+ horiz-adv-x="1792" d=" M373.3333333333334 597.3333333333333H597.3333333333334V373.3333333333333H746.6666666666667V746.6666666666665H373.3333333333334V597.3333333333333zM597.3333333333334 1194.6666666666665H373.3333333333334V1045.3333333333333H746.6666666666667V1418.6666666666665H597.3333333333334V1194.6666666666665zM1045.3333333333335 373.3333333333333H1194.6666666666667V597.3333333333333H1418.6666666666667V746.6666666666665H1045.3333333333335V373.3333333333333zM1194.6666666666667 1194.6666666666665V1418.6666666666665H1045.3333333333335V1045.3333333333333H1418.6666666666667V1194.6666666666665H1194.6666666666667z" />
37
+ <glyph glyph-name="square"
38
+ unicode="&#xF10A;"
39
+ horiz-adv-x="1792" d=" M1344 1493.3333333333333H448C365.4933333333334 1493.3333333333333 298.6666666666667 1426.5066666666667 298.6666666666667 1344V448C298.6666666666667 365.4933333333331 365.4933333333334 298.6666666666665 448 298.6666666666665H1344C1426.506666666667 298.6666666666665 1493.3333333333335 365.4933333333331 1493.3333333333335 448V1344C1493.3333333333335 1426.5066666666667 1426.506666666667 1493.3333333333333 1344 1493.3333333333333zM1344 448H448V1344H1344V448z" />
40
+ <glyph glyph-name="spinner"
41
+ unicode="&#xF10B;"
42
+ horiz-adv-x="1792" d=" M701.8666666666668 1008L1057.6533333333334 1624.3733333333334C1005.7600000000002 1635.9466666666667 951.6266666666666 1642.6666666666667 896 1642.6666666666667C716.8000000000001 1642.6666666666667 552.9066666666668 1579.5733333333333 424.1066666666667 1474.2933333333333L697.76 1000.5333333333334L701.8666666666666 1008zM1608.32 1120C1539.6266666666666 1338.4 1373.1200000000001 1512.7466666666667 1160.6933333333332 1593.3866666666668L887.4133333333334 1120H1608.32zM1627.7333333333336 1045.3333333333333H1068.48L1090.1333333333334 1008L1445.92 392C1567.6266666666668 524.9066666666668 1642.6666666666667 701.4933333333333 1642.6666666666667 896C1642.6666666666667 947.1466666666666 1637.44 997.1733333333332 1627.7333333333336 1045.3333333333333zM637.2800000000001 896L346.08 1400C224.3733333333333 1267.0933333333332 149.3333333333334 1090.5066666666667 149.3333333333334 896C149.3333333333334 844.8533333333332 154.56 794.8266666666666 164.2666666666667 746.6666666666665H723.5200000000001L637.2800000000002 896zM183.68 672C252.3733333333334 453.5999999999999 418.88 279.2533333333334 631.3066666666667 198.6133333333332L904.5866666666668 672H183.68zM1025.1733333333334 672L733.9733333333334 167.6266666666666C786.24 156.0533333333333 840.3733333333334 149.3333333333333 896 149.3333333333333C1075.2 149.3333333333333 1239.0933333333332 212.4266666666665 1367.8933333333334 317.7066666666665L1094.24 791.4666666666666L1025.1733333333334 672z" />
43
+ <glyph glyph-name="subtitles"
44
+ unicode="&#xF10C;"
45
+ horiz-adv-x="1792" d=" M1493.3333333333335 1493.3333333333333H298.6666666666667C216.16 1493.3333333333333 149.3333333333334 1426.5066666666667 149.3333333333334 1344V448C149.3333333333334 365.4933333333331 216.16 298.6666666666665 298.6666666666667 298.6666666666665H1493.3333333333335C1575.8400000000001 298.6666666666665 1642.6666666666667 365.4933333333331 1642.6666666666667 448V1344C1642.6666666666667 1426.5066666666667 1575.8400000000001 1493.3333333333333 1493.3333333333335 1493.3333333333333zM298.6666666666667 896H597.3333333333334V746.6666666666665H298.6666666666667V896zM1045.3333333333335 448H298.6666666666667V597.3333333333333H1045.3333333333335V448zM1493.3333333333335 448H1194.6666666666667V597.3333333333333H1493.3333333333335V448zM1493.3333333333335 746.6666666666665H746.6666666666667V896H1493.3333333333335V746.6666666666665z" />
46
+ <glyph glyph-name="captions"
47
+ unicode="&#xF10D;"
48
+ horiz-adv-x="1792" d=" M1418.6666666666667 1493.3333333333333H373.3333333333334C290.8266666666667 1493.3333333333333 224 1426.5066666666667 224 1344V448C224 365.4933333333331 290.8266666666667 298.6666666666665 373.3333333333334 298.6666666666665H1418.6666666666667C1501.1733333333334 298.6666666666665 1568 365.4933333333331 1568 448V1344C1568 1426.5066666666667 1501.1733333333334 1493.3333333333333 1418.6666666666667 1493.3333333333333zM821.3333333333334 970.6666666666666H709.3333333333334V1008H560V783.9999999999999H709.3333333333334V821.3333333333333H821.3333333333334V746.6666666666665C821.3333333333334 705.5999999999999 788.1066666666667 672 746.6666666666667 672H522.6666666666667C481.2266666666667 672 448 705.5999999999999 448 746.6666666666665V1045.3333333333333C448 1086.4 481.2266666666667 1120 522.6666666666667 1120H746.6666666666667C788.1066666666667 1120 821.3333333333334 1086.4 821.3333333333334 1045.3333333333333V970.6666666666666zM1344 970.6666666666666H1232V1008H1082.6666666666667V783.9999999999999H1232V821.3333333333333H1344V746.6666666666665C1344 705.5999999999999 1310.7733333333333 672 1269.3333333333335 672H1045.3333333333335C1003.8933333333334 672 970.6666666666669 705.5999999999999 970.6666666666669 746.6666666666665V1045.3333333333333C970.6666666666669 1086.4 1003.8933333333334 1120 1045.3333333333335 1120H1269.3333333333335C1310.7733333333333 1120 1344 1086.4 1344 1045.3333333333333V970.6666666666666z" />
49
+ <glyph glyph-name="chapters"
50
+ unicode="&#xF10E;"
51
+ horiz-adv-x="1792" d=" M224 821.3333333333333H373.3333333333334V970.6666666666666H224V821.3333333333333zM224 522.6666666666665H373.3333333333334V672H224V522.6666666666665zM224 1120H373.3333333333334V1269.3333333333333H224V1120zM522.6666666666667 821.3333333333333H1568V970.6666666666666H522.6666666666667V821.3333333333333zM522.6666666666667 522.6666666666665H1568V672H522.6666666666667V522.6666666666665zM522.6666666666667 1269.3333333333333V1120H1568V1269.3333333333333H522.6666666666667z" />
52
+ <glyph glyph-name="share"
53
+ unicode="&#xF10F;"
54
+ horiz-adv-x="1792" d=" M1344 590.9866666666665C1287.2533333333333 590.9866666666665 1236.1066666666668 568.9599999999998 1197.2800000000002 533.4933333333331L665.2800000000001 843.7333333333333C669.3866666666667 860.5333333333333 672 878.08 672 896S669.3866666666667 931.4666666666666 665.2800000000001 948.2666666666667L1191.68 1255.52C1231.6266666666668 1218.1866666666665 1285.0133333333335 1195.04 1344 1195.04C1467.5733333333335 1195.04 1568 1295.4666666666665 1568 1419.04S1467.5733333333335 1643.04 1344 1643.04S1120 1542.6133333333332 1120 1419.04C1120 1401.12 1122.6133333333335 1383.5733333333333 1126.72 1366.773333333333L600.3199999999999 1059.5199999999998C560.3733333333333 1096.853333333333 506.9866666666666 1119.9999999999998 448 1119.9999999999998C324.4266666666666 1119.9999999999998 224 1019.5733333333332 224 895.9999999999998S324.4266666666666 671.9999999999998 448 671.9999999999998C506.9866666666666 671.9999999999998 560.3733333333333 695.1466666666665 600.3199999999999 732.4799999999998L1132.32 422.2399999999998C1128.5866666666666 406.5599999999997 1126.3466666666666 390.133333333333 1126.3466666666666 373.3333333333331C1126.3466666666666 253.1199999999997 1223.7866666666669 155.6799999999996 1344 155.6799999999996S1561.6533333333334 253.1199999999997 1561.6533333333334 373.3333333333331S1464.2133333333334 590.9866666666662 1344 590.9866666666662z" />
55
+ <glyph glyph-name="cog"
56
+ unicode="&#xF110;"
57
+ horiz-adv-x="1792" d=" M1450.7733333333333 823.1999999999999C1453.76 847.0933333333334 1456 871.3599999999999 1456 896S1453.76 944.9066666666666 1450.7733333333333 968.8L1608.6933333333336 1092.3733333333332C1622.8800000000003 1103.5733333333333 1626.986666666667 1123.7333333333331 1617.6533333333336 1140.1599999999999L1468.3200000000004 1398.8799999999999C1458.986666666667 1414.9333333333334 1439.5733333333335 1421.6533333333332 1422.7733333333338 1414.9333333333334L1236.8533333333337 1339.8933333333332C1198.4000000000003 1369.3866666666668 1156.2133333333338 1394.3999999999999 1110.6666666666672 1413.44L1082.6666666666667 1611.3066666666666C1079.3066666666668 1628.8533333333332 1064 1642.6666666666667 1045.3333333333335 1642.6666666666667H746.6666666666667C728 1642.6666666666667 712.6933333333334 1628.8533333333332 709.7066666666668 1611.3066666666666L681.7066666666668 1413.44C636.1600000000002 1394.4 593.9733333333335 1369.76 555.5200000000001 1339.8933333333332L369.6 1414.9333333333334C352.8000000000001 1421.28 333.3866666666667 1414.9333333333334 324.0533333333334 1398.88L174.72 1140.1599999999999C165.3866666666667 1124.1066666666666 169.4933333333334 1103.9466666666667 183.68 1092.3733333333332L341.2266666666667 968.8C338.2400000000001 944.9066666666666 336 920.64 336 896S338.2400000000001 847.0933333333334 341.2266666666667 823.1999999999999L183.68 699.6266666666668C169.4933333333334 688.4266666666667 165.3866666666667 668.2666666666667 174.72 651.8399999999999L324.0533333333334 393.1199999999999C333.3866666666667 377.0666666666666 352.8 370.3466666666666 369.6 377.0666666666666L555.5200000000001 452.1066666666666C593.9733333333334 422.6133333333333 636.16 397.5999999999999 681.7066666666668 378.56L709.7066666666668 180.6933333333334C712.6933333333334 163.1466666666668 728 149.3333333333333 746.6666666666667 149.3333333333333H1045.3333333333335C1064 149.3333333333333 1079.3066666666668 163.1466666666665 1082.2933333333333 180.6933333333334L1110.2933333333333 378.56C1155.84 397.5999999999999 1198.0266666666666 422.24 1236.48 452.1066666666666L1422.3999999999999 377.0666666666666C1439.2 370.7199999999998 1458.6133333333332 377.0666666666666 1467.9466666666665 393.1199999999999L1617.2799999999997 651.8399999999999C1626.6133333333332 667.8933333333332 1622.5066666666664 688.0533333333333 1608.3199999999997 699.6266666666668L1450.773333333333 823.1999999999999zM896 634.6666666666665C751.52 634.6666666666665 634.6666666666667 751.52 634.6666666666667 896S751.52 1157.3333333333333 896 1157.3333333333333S1157.3333333333335 1040.48 1157.3333333333335 896S1040.48 634.6666666666665 896 634.6666666666665z" />
58
+ <glyph glyph-name="circle"
59
+ unicode="&#xF111;"
60
+ horiz-adv-x="1792" d=" M149.3333333333334 896C149.3333333333334 483.6273867930074 483.6273867930075 149.3333333333333 896 149.3333333333333C1308.3726132069926 149.3333333333333 1642.6666666666667 483.6273867930074 1642.6666666666667 896C1642.6666666666667 1308.3726132069926 1308.3726132069926 1642.6666666666667 896 1642.6666666666667C483.6273867930075 1642.6666666666667 149.3333333333334 1308.3726132069926 149.3333333333334 896z" />
61
+ <glyph glyph-name="circle-outline"
62
+ unicode="&#xF112;"
63
+ horiz-adv-x="1792" d=" M896 1642.6666666666667C483.4666666666667 1642.6666666666667 149.3333333333334 1308.5333333333333 149.3333333333334 896S483.4666666666667 149.3333333333333 896 149.3333333333333S1642.6666666666667 483.4666666666667 1642.6666666666667 896S1308.5333333333333 1642.6666666666667 896 1642.6666666666667zM896 298.6666666666665C566.72 298.6666666666665 298.6666666666667 566.7199999999998 298.6666666666667 896S566.72 1493.3333333333333 896 1493.3333333333333S1493.3333333333335 1225.28 1493.3333333333335 896S1225.2800000000002 298.6666666666665 896 298.6666666666665z" />
64
+ <glyph glyph-name="circle-inner-circle"
65
+ unicode="&#xF113;"
66
+ horiz-adv-x="1792" d=" M896 1642.6666666666667C484.2133333333334 1642.6666666666667 149.3333333333334 1307.7866666666666 149.3333333333334 896S484.2133333333334 149.3333333333333 896 149.3333333333333S1642.6666666666667 484.2133333333331 1642.6666666666667 896S1307.7866666666669 1642.6666666666667 896 1642.6666666666667zM896 298.6666666666665C566.72 298.6666666666665 298.6666666666667 566.7199999999998 298.6666666666667 896S566.72 1493.3333333333333 896 1493.3333333333333S1493.3333333333335 1225.28 1493.3333333333335 896S1225.2800000000002 298.6666666666665 896 298.6666666666665zM1120 896C1120 772.4266666666666 1019.5733333333334 672 896 672S672 772.4266666666666 672 896S772.4266666666667 1120 896 1120S1120 1019.5733333333332 1120 896z" />
67
+ <glyph glyph-name="hd"
68
+ unicode="&#xF114;"
69
+ horiz-adv-x="1792" d=" M1418.6666666666667 1568H373.3333333333334C290.4533333333333 1568 224 1500.8 224 1418.6666666666665V373.3333333333333C224 291.1999999999998 290.4533333333334 224 373.3333333333334 224H1418.6666666666667C1500.8000000000002 224 1568 291.1999999999998 1568 373.3333333333333V1418.6666666666665C1568 1500.8 1500.8000000000002 1568 1418.6666666666667 1568zM821.3333333333334 672H709.3333333333334V821.3333333333333H560V672H448V1120H560V933.3333333333331H709.3333333333334V1120H821.3333333333334V672zM970.6666666666669 1120H1269.3333333333335C1310.4 1120 1344 1086.4 1344 1045.3333333333333V746.6666666666665C1344 705.5999999999999 1310.4 672 1269.3333333333335 672H970.6666666666669V1120zM1082.6666666666667 783.9999999999999H1232V1008H1082.6666666666667V783.9999999999999z" />
70
+ <glyph glyph-name="cancel"
71
+ unicode="&#xF115;"
72
+ horiz-adv-x="1792" d=" M896 1642.6666666666667C483.4666666666667 1642.6666666666667 149.3333333333334 1308.5333333333333 149.3333333333334 896S483.4666666666667 149.3333333333333 896 149.3333333333333S1642.6666666666667 483.4666666666667 1642.6666666666667 896S1308.5333333333333 1642.6666666666667 896 1642.6666666666667zM1269.3333333333335 628.3199999999999L1163.68 522.6666666666665L896 790.3466666666667L628.3199999999999 522.6666666666665L522.6666666666667 628.3199999999999L790.3466666666668 896L522.6666666666667 1163.68L628.3199999999999 1269.3333333333333L896 1001.6533333333332L1163.68 1269.3333333333333L1269.3333333333335 1163.68L1001.6533333333334 896L1269.3333333333335 628.3199999999999z" />
73
+ <glyph glyph-name="replay"
74
+ unicode="&#xF116;"
75
+ horiz-adv-x="1792" d=" M896 1418.6666666666665V1717.3333333333333L522.6666666666667 1344L896 970.6666666666666V1269.3333333333333C1143.52 1269.3333333333333 1344 1068.8533333333332 1344 821.3333333333333S1143.52 373.3333333333333 896 373.3333333333333S448 573.813333333333 448 821.3333333333333H298.6666666666667C298.6666666666667 491.3066666666664 565.9733333333334 224 896 224S1493.3333333333335 491.3066666666664 1493.3333333333335 821.3333333333333S1226.0266666666669 1418.6666666666665 896 1418.6666666666665z" />
76
+ <glyph glyph-name="facebook"
77
+ unicode="&#xF117;"
78
+ horiz-adv-x="1792" d=" M1343 1780V1516H1186Q1100 1516 1070 1480T1040 1372V1183H1333L1294 887H1040V128H734V887H479V1183H734V1401Q734 1587 838 1689.5T1115 1792Q1262 1792 1343 1780z" />
79
+ <glyph glyph-name="gplus"
80
+ unicode="&#xF118;"
81
+ horiz-adv-x="1792" d=" M799 996Q799 960 831 925.5T908.5 857.5T999 784T1076 680T1108 538Q1108 448 1060 365Q988 243 849 185.5T551 128Q419 128 304.5 169.5T133 307Q96 367 96 438Q96 519 140.5 588T259 703Q390 785 663 803Q631 845 615.5 877T600 950Q600 986 621 1035Q575 1031 553 1031Q405 1031 303.5 1127.5T202 1372Q202 1454 238 1531T337 1662Q414 1728 519.5 1760T737 1792H1155L1017 1704H886Q960 1641 998 1571T1036 1411Q1036 1339 1011.5 1281.5T952.5 1188.5T883 1123.5T823.5 1062T799 996zM653 1092Q691 1092 731 1108.5T797 1152Q850 1209 850 1311Q850 1369 833 1436T784.5 1565.5T700 1669T583 1710Q541 1710 500.5 1690.5T435 1638Q388 1579 388 1478Q388 1432 398 1380.5T429.5 1277.5T481.5 1185T556.5 1118T653 1092zM655 219Q713 219 766.5 232T865.5 271T938.5 344T966 453Q966 478 959 502T944.5 544T917.5 585.5T888 620.5T849.5 655T813 684T771.5 714T735 740Q719 742 687 742Q634 742 582 735T474.5 710T377.5 664T309 589.5T282 484Q282 414 317 360.5T408.5 277.5T527.5 233.5T655 219zM1465 1095H1678V987H1465V768H1360V987H1148V1095H1360V1312H1465V1095z" />
82
+ <glyph glyph-name="linkedin"
83
+ unicode="&#xF119;"
84
+ horiz-adv-x="1792" d=" M477 1167V176H147V1167H477zM498 1473Q499 1400 447.5 1351T312 1302H310Q228 1302 178 1351T128 1473Q128 1547 179.5 1595.5T314 1644T447 1595.5T498 1473zM1664 744V176H1335V706Q1335 811 1294.5 870.5T1168 930Q1105 930 1062.5 895.5T999 810Q988 780 988 729V176H659Q661 575 661 823T660 1119L659 1167H988V1023H986Q1006 1055 1027 1079T1083.5 1131T1170.5 1174.5T1285 1190Q1456 1190 1560 1076.5T1664 744z" />
85
+ <glyph glyph-name="twitter"
86
+ unicode="&#xF11A;"
87
+ horiz-adv-x="1792" d=" M1684 1384Q1617 1286 1522 1217Q1523 1203 1523 1175Q1523 1045 1485 915.5T1369.5 667T1185 456.5T927 310.5T604 256Q333 256 108 401Q143 397 186 397Q411 397 587 535Q482 537 399 599.5T285 759Q318 754 346 754Q389 754 431 765Q319 788 245.5 876.5T172 1082V1086Q240 1048 318 1045Q252 1089 213 1160T174 1314Q174 1402 218 1477Q339 1328 512.5 1238.5T884 1139Q876 1177 876 1213Q876 1347 970.5 1441.5T1199 1536Q1339 1536 1435 1434Q1544 1455 1640 1512Q1603 1397 1498 1334Q1591 1344 1684 1384z" />
88
+ <glyph glyph-name="tumblr"
89
+ unicode="&#xF11B;"
90
+ horiz-adv-x="1792" d=" M1328 463L1408 226Q1385 191 1297 160T1120 128Q1016 126 929.5 154T787 228T692 334T636.5 454T620 572V1116H452V1331Q524 1357 581 1400.5T672 1490.5T730 1592.5T764 1691.5T779 1780Q780 1785 783.5 1788.5T791 1792H1035V1368H1368V1116H1034V598Q1034 568 1040.5 542T1063 489.5T1112.5 448T1194 434Q1272 436 1328 463z" />
91
+ <glyph glyph-name="pinterest"
92
+ unicode="&#xF11C;"
93
+ horiz-adv-x="1792" d=" M1664 896Q1664 687 1561 510.5T1281.5 231T896 128Q785 128 678 160Q737 253 756 324Q765 358 810 535Q830 496 883 467.5T997 439Q1118 439 1213 507.5T1360 696T1412 966Q1412 1080 1352.5 1180T1180 1343T925 1406Q820 1406 729 1377T574.5 1300T465.5 1189.5T398.5 1060T377 926Q377 822 417 743T534 632Q564 620 572 652Q574 659 580 683T588 713Q594 736 577 756Q526 817 526 907Q526 1058 630.5 1166.5T904 1275Q1055 1275 1139.5 1193T1224 980Q1224 810 1155.5 691T980 572Q919 572 882 615.5T859 720Q867 755 885.5 813.5T915.5 916.5T927 992Q927 1042 900 1075T823 1108Q761 1108 718 1051T675 909Q675 836 700 787L601 369Q584 299 588 192Q382 283 255 473T128 896Q128 1105 231 1281.5T510.5 1561T896 1664T1281.5 1561T1561 1281.5T1664 896z" />
94
+ <glyph glyph-name="audio-description"
95
+ unicode="&#xF11D;"
96
+ horiz-adv-x="1792" d=" M795.5138904615 457.270933L795.5138904615 1221.5248286325C971.84576475 1225.085121904 1107.39330415 1232.12360523 1207.223857 1161.5835220499998C1303.033991 1093.8857027 1377.7922305 962.20560625 1364.3373135 792.9476205000001C1350.102593 613.9029365000001 1219.6655764999998 463.4600215 1050.12389545 448.2843645000001C965.8259268 440.7398275000001 798.21890505 448.2843645000001 798.21890505 448.2843645000001C798.21890505 448.2843645000001 795.2791410655 453.016494 795.5138904615 457.270933M966.1564647 649.0863960000001C1076.16084135 644.6767075 1152.385591 707.3020429999999 1163.8910079999998 807.9351875C1179.2994744999999 942.71878505 1089.73043585 1030.3691748 960.74508635 1020.7227954L960.74508635 658.08043C960.6196169500002 652.9482330000001 962.7606933 650.3134680000001 966.1564647 649.0863960000001 M1343.2299685 457.3517725000002C1389.9059734 444.3690160000001 1404.0840274999998 496.0596970000001 1424.48294065 532.2791494999999C1469.0084255 611.2788500000001 1502.5101322 712.8584189999999 1503.0416912 828.9881705C1503.8147453000001 995.5680973 1438.8404296 1117.7973688000002 1378.4383305 1200.62456881045L1348.652139905 1200.62456881045C1346.6001063899998 1187.06858424 1356.44474056 1175.024791325 1362.18395859 1164.6588891000001C1408.2649952 1081.49431985 1450.96645015 966.7230041 1451.57490975 834.9817034999999C1452.27106325 683.8655425000002 1402.00636065 557.5072264999999 1343.2299685 457.3517725000002 M1488.0379675 457.3517725000002C1534.7139723999999 444.3690160000001 1548.8825828 496.0671625 1569.29093965 532.2791494999999C1613.8164245 611.2788500000001 1647.3113856500001 712.8584189999999 1647.8496902000002 828.9881705C1648.6227442999998 995.5680973 1583.6484286 1117.7973688000002 1523.2463295 1200.62456881045L1493.460138905 1200.62456881045C1491.40810539 1187.06858424 1501.250041305 1175.021805755 1506.9919575899999 1164.6588891000001C1553.0729942 1081.49431985 1595.7757984 966.7230041 1596.3829087499998 834.9817034999999C1597.07906225 683.8655425000002 1546.8143596500001 557.5072264999999 1488.0379675 457.3517725000002 M1631.9130380000001 457.3517725000002C1678.5890429 444.3690160000001 1692.7576533 496.0671625 1713.1660101500001 532.2791494999999C1757.691495 611.2788500000001 1791.1864561500001 712.8584189999999 1791.7247607000002 828.9881705C1792.4978148 995.5680973 1727.5234991000002 1117.7973688000002 1667.1214 1200.62456881045L1637.3352094050001 1200.62456881045C1635.28317589 1187.06858424 1645.1251118050002 1175.02329854 1650.86702809 1164.6588891000001C1696.9480647 1081.49431985 1739.64951965 966.7230041 1740.25797925 834.9817034999999C1740.95413275 683.8655425000002 1690.6894301500001 557.5072264999999 1631.9130380000001 457.3517725000002 M15.66796875 451.481947L254.03034755 451.481947L319.0356932 551.1747990000001L543.6261075 551.6487970000001C543.6261075 551.6487970000001 543.8541115 483.7032095 543.8541115 451.481947L714.4993835 451.481947L714.4993835 1230.9210795L508.643051 1230.9210795C488.8579955 1197.5411595 15.66796875 451.481947 15.66796875 451.481947L15.66796875 451.481947zM550.0048155000001 959.9708615L550.0048155000001 710.916297L408.4199 711.8642895L550.0048155000001 959.9708615L550.0048155000001 959.9708615z" />
97
+ </font>
98
+ </defs>
99
+ </svg>
video-js/font/VideoJS.ttf ADDED
Binary file
video-js/font/VideoJS.woff ADDED
Binary file
video-js/font/vjs.eot DELETED
Binary file
video-js/font/vjs.svg DELETED
@@ -1,28 +0,0 @@
1
- <?xml version="1.0" standalone="no"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
- <svg xmlns="http://www.w3.org/2000/svg">
4
- <metadata>Generated by IcoMoon</metadata>
5
- <defs>
6
- <font id="icomoon" horiz-adv-x="1024">
7
- <font-face units-per-em="1024" ascent="960" descent="-64" />
8
- <missing-glyph horiz-adv-x="1024" />
9
- <glyph unicode="&#x20;" d="" horiz-adv-x="512" />
10
- <glyph unicode="&#xe000;" d="M1024 960v-416l-160 160-192-192-96 96 192 192-160 160zM448 288l-192-192 160-160h-416v416l160-160 192 192z" />
11
- <glyph unicode="&#xe001;" d="M192 832l640-384-640-384z" />
12
- <glyph unicode="&#xe002;" d="M128 832h320v-768h-320zM576 832h320v-768h-320z" />
13
- <glyph unicode="&#xe003;" d="M401.332 881.332c25.668 25.668 46.668 16.968 46.668-19.332v-828c0-36.3-21-44.998-46.668-19.33l-241.332 241.33h-160v384h160l241.332 241.332z" />
14
- <glyph unicode="&#xe004;" d="M549.020 218.98c-12.286 0-24.568 4.686-33.942 14.058-18.746 18.746-18.746 49.136 0 67.882 81.1 81.1 81.1 213.058 0 294.156-18.746 18.746-18.746 49.138 0 67.882 18.746 18.744 49.136 18.744 67.882 0 118.53-118.53 118.53-311.392 0-429.922-9.372-9.37-21.656-14.056-33.94-14.056zM401.332 881.332c25.668 25.668 46.668 16.968 46.668-19.332v-828c0-36.3-21-44.998-46.668-19.33l-241.332 241.33h-160v384h160l241.332 241.332z" />
15
- <glyph unicode="&#xe005;" d="M719.53 128.47c-12.286 0-24.568 4.686-33.942 14.058-18.744 18.744-18.744 49.136 0 67.882 131.006 131.006 131.006 344.17 0 475.176-18.744 18.746-18.744 49.138 0 67.882 18.744 18.742 49.138 18.744 67.882 0 81.594-81.592 126.53-190.076 126.53-305.468 0-115.39-44.936-223.876-126.53-305.47-9.372-9.374-21.656-14.060-33.94-14.060zM549.020 218.98c-12.286 0-24.568 4.686-33.942 14.058-18.746 18.746-18.746 49.136 0 67.882 81.1 81.1 81.1 213.058 0 294.156-18.746 18.746-18.746 49.138 0 67.882 18.746 18.744 49.136 18.744 67.882 0 118.53-118.53 118.53-311.392 0-429.922-9.372-9.37-21.656-14.056-33.94-14.056zM401.332 881.332c25.668 25.668 46.668 16.968 46.668-19.332v-828c0-36.3-21-44.998-46.668-19.33l-241.332 241.33h-160v384h160l241.332 241.332z" />
16
- <glyph unicode="&#xe006;" d="M890.040 37.96c-12.286 0-24.568 4.686-33.942 14.058-18.744 18.746-18.744 49.136 0 67.882 87.638 87.642 135.904 204.16 135.904 328.1 0 123.938-48.266 240.458-135.904 328.098-18.744 18.746-18.744 49.138 0 67.882 18.744 18.744 49.138 18.744 67.882 0 105.77-105.772 164.022-246.4 164.022-395.98 0-149.582-58.252-290.208-164.022-395.98-9.372-9.374-21.656-14.060-33.94-14.060zM719.53 128.47c-12.286 0-24.568 4.686-33.942 14.058-18.744 18.744-18.744 49.136 0 67.882 131.006 131.006 131.006 344.17 0 475.176-18.744 18.746-18.744 49.138 0 67.882 18.744 18.742 49.138 18.744 67.882 0 81.594-81.592 126.53-190.076 126.53-305.468 0-115.39-44.936-223.876-126.53-305.47-9.372-9.374-21.656-14.060-33.94-14.060zM549.020 218.98c-12.286 0-24.568 4.686-33.942 14.058-18.746 18.746-18.746 49.136 0 67.882 81.1 81.1 81.1 213.058 0 294.156-18.746 18.746-18.746 49.138 0 67.882 18.746 18.744 49.136 18.744 67.882 0 118.53-118.53 118.53-311.392 0-429.922-9.372-9.37-21.656-14.056-33.94-14.056zM401.332 881.332c25.668 25.668 46.668 16.968 46.668-19.332v-828c0-36.3-21-44.998-46.668-19.33l-241.332 241.33h-160v384h160l241.332 241.332z" horiz-adv-x="1088" />
17
- <glyph unicode="&#xe007;" d="M512 960l-320-512 320-512 320 512z" />
18
- <glyph unicode="&#xe008;" d="M0 960h1374.316v-1030.414h-1374.316v1030.414zM1245.462 449.276c-1.706 180.052-8.542 258.568-51.2 314.036-7.68 11.946-22.186 18.772-34.132 27.296-41.814 30.73-238.944 41.814-467.636 41.814-228.702 0-435.21-11.084-476.17-41.814-12.8-8.524-27.316-15.35-35.84-27.296-41.822-55.468-47.786-133.984-50.346-314.036 2.56-180.062 8.524-258.57 50.346-314.036 8.524-12.8 23.040-18.774 35.84-27.306 40.96-31.574 247.468-41.814 476.17-43.52 228.692 1.706 425.822 11.946 467.636 43.52 11.946 8.532 26.452 14.506 34.132 27.306 42.658 55.466 49.494 133.974 51.2 314.036zM662.358 495.904c-11.58 140.898-86.51 223.906-220.556 223.906-122.458 0-218.722-110.432-218.722-287.88 0-178.212 87.73-289.396 232.734-289.396 115.766 0 196.798 85.298 209.588 226.95h-138.302c-5.48-52.548-27.414-92.914-73.72-92.914-73.108 0-86.51 72.354-86.51 149.27 0 105.868 30.46 159.932 81.032 159.932 45.082 0 73.718-32.75 77.976-89.868h136.48zM1140.026 495.904c-11.57 140.898-86.51 223.906-220.546 223.906-122.466 0-218.722-110.432-218.722-287.88 0-178.212 87.73-289.396 232.734-289.396 115.758 0 196.788 85.298 209.58 226.95h-138.304c-5.47-52.548-27.404-92.914-73.71-92.914-73.116 0-86.518 72.354-86.518 149.27 0 105.868 30.468 159.932 81.030 159.932 45.084 0 73.728-32.75 77.986-89.868h136.47z" horiz-adv-x="1374" />
19
- <glyph unicode="&#xe009;" d="M128 832h768v-768h-768z" />
20
- <glyph unicode="&#xe00a;" d="M384 832c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM655.53 719.53c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM832 448c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64zM719.53 176.47c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64zM448.002 64c0 0 0 0 0 0 0-35.346 28.654-64 64-64 35.346 0 64 28.654 64 64 0 0 0 0 0 0 0 0 0 0 0 0 0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64s0 0 0 0zM176.472 176.47c0 0 0 0 0 0 0-35.346 28.654-64 64-64 35.346 0 64 28.654 64 64 0 0 0 0 0 0 0 0 0 0 0 0 0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64s0 0 0 0zM144.472 719.53c0 0 0 0 0 0 0-53.019 42.981-96 96-96 53.019 0 96 42.981 96 96 0 0 0 0 0 0 0 0 0 0 0 0 0 53.019-42.981 96-96 96-53.019 0-96-42.981-96-96s0 0 0 0zM56 448c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.765-32.235 72-72 72-39.765 0-72-32.235-72-72z" />
21
- <glyph unicode="&#xe00b;" d="M448 384v-416l-160 160-192-192-96 96 192 192-160 160zM1024 864l-192-192 160-160h-416v416l160-160 192 192z" />
22
- <glyph unicode="&#xe00c;" d="M512 896c282.77 0 512-186.25 512-416 0-229.752-229.23-416-512-416-27.156 0-53.81 1.734-79.824 5.044-109.978-109.978-241.25-129.7-368.176-132.596v26.916c68.536 33.578 128 94.74 128 164.636 0 9.754-0.758 19.33-2.164 28.696-115.796 76.264-189.836 192.754-189.836 323.304 0 229.75 229.23 416 512 416z" />
23
- <glyph unicode="&#xe00d;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 704c141.384 0 256-114.616 256-256s-114.616-256-256-256-256 114.616-256 256 114.616 256 256 256zM817.47 142.53c-81.594-81.594-190.080-126.53-305.47-126.53-115.392 0-223.876 44.936-305.47 126.53-81.594 81.594-126.53 190.078-126.53 305.47 0 115.39 44.936 223.876 126.53 305.47l67.882-67.882c0 0 0 0 0 0-131.006-131.006-131.006-344.17 0-475.176 63.462-63.462 147.838-98.412 237.588-98.412 89.748 0 174.124 34.95 237.588 98.412 131.006 131.006 131.006 344.168 0 475.176l67.882 67.882c81.594-81.594 126.53-190.080 126.53-305.47 0-115.392-44.936-223.876-126.53-305.47z" />
24
- <glyph unicode="&#xe00e;" d="M864 256c-45.16 0-85.92-18.738-115.012-48.83l-431.004 215.502c1.314 8.252 2.016 16.706 2.016 25.328s-0.702 17.076-2.016 25.326l431.004 215.502c29.092-30.090 69.852-48.828 115.012-48.828 88.366 0 160 71.634 160 160s-71.634 160-160 160-160-71.634-160-160c0-8.622 0.704-17.076 2.016-25.326l-431.004-215.504c-29.092 30.090-69.852 48.83-115.012 48.83-88.366 0-160-71.636-160-160 0-88.368 71.634-160 160-160 45.16 0 85.92 18.738 115.012 48.828l431.004-215.502c-1.312-8.25-2.016-16.704-2.016-25.326 0-88.368 71.634-160 160-160s160 71.632 160 160c0 88.364-71.634 160-160 160z" />
25
- <glyph unicode="&#xe01e;" d="M1024 448c-1.278 66.862-15.784 133.516-42.576 194.462-26.704 61-65.462 116.258-113.042 161.92-47.552 45.696-103.944 81.82-164.984 105.652-61.004 23.924-126.596 35.352-191.398 33.966-64.81-1.282-129.332-15.374-188.334-41.356-59.048-25.896-112.542-63.47-156.734-109.576-44.224-46.082-79.16-100.708-102.186-159.798-23.114-59.062-34.128-122.52-32.746-185.27 1.286-62.76 14.964-125.148 40.134-182.206 25.088-57.1 61.476-108.828 106.11-151.548 44.61-42.754 97.472-76.504 154.614-98.72 57.118-22.304 118.446-32.902 179.142-31.526 60.708 1.29 120.962 14.554 176.076 38.914 55.15 24.282 105.116 59.48 146.366 102.644 41.282 43.14 73.844 94.236 95.254 149.43 13.034 33.458 21.88 68.4 26.542 103.798 1.246-0.072 2.498-0.12 3.762-0.12 35.346 0 64 28.652 64 64 0 1.796-0.094 3.572-0.238 5.332h0.238zM922.306 278.052c-23.472-53.202-57.484-101.4-99.178-141.18-41.67-39.81-91-71.186-144.244-91.79-53.228-20.678-110.29-30.452-166.884-29.082-56.604 1.298-112.596 13.736-163.82 36.474-51.25 22.666-97.684 55.49-135.994 95.712-38.338 40.198-68.528 87.764-88.322 139.058-19.87 51.284-29.228 106.214-27.864 160.756 1.302 54.552 13.328 108.412 35.254 157.69 21.858 49.3 53.498 93.97 92.246 130.81 38.73 36.868 84.53 65.87 133.874 84.856 49.338 19.060 102.136 28.006 154.626 26.644 52.5-1.306 104.228-12.918 151.562-34.034 47.352-21.050 90.256-51.502 125.624-88.782 35.396-37.258 63.21-81.294 81.39-128.688 18.248-47.392 26.782-98.058 25.424-148.496h0.238c-0.144-1.76-0.238-3.536-0.238-5.332 0-33.012 24.992-60.174 57.086-63.624-6.224-34.822-16.53-68.818-30.78-100.992z" />
26
- <glyph unicode="&#xe01f;" d="M512 960c-278.748 0-505.458-222.762-511.848-499.974 5.92 241.864 189.832 435.974 415.848 435.974 229.75 0 416-200.576 416-448 0-53.020 42.98-96 96-96 53.020 0 96 42.98 96 96 0 282.77-229.23 512-512 512zM512-64c278.748 0 505.458 222.762 511.848 499.974-5.92-241.864-189.832-435.974-415.848-435.974-229.75 0-416 200.576-416 448 0 53.020-42.98 96-96 96-53.020 0-96-42.98-96-96 0-282.77 229.23-512 512-512z" />
27
- <glyph unicode="&#xe600;" d="M1024 351.906v192.188l-146.774 24.462c-5.958 18.132-13.222 35.668-21.694 52.5l86.454 121.034-135.896 135.898-120.826-86.304c-16.91 8.554-34.538 15.888-52.768 21.902l-24.402 146.414h-192.188l-24.402-146.416c-18.23-6.014-35.858-13.348-52.766-21.902l-120.828 86.304-135.898-135.898 86.454-121.036c-8.47-16.83-15.734-34.366-21.692-52.498l-146.774-24.46v-192.188l147.118-24.52c5.96-17.968 13.21-35.348 21.642-52.030l-86.748-121.448 135.898-135.896 121.654 86.894c16.602-8.35 33.89-15.528 51.764-21.434l24.578-147.472h192.188l24.578 147.474c17.874 5.906 35.162 13.084 51.766 21.432l121.652-86.892 135.896 135.896-86.744 121.446c8.432 16.682 15.678 34.062 21.64 52.032l147.118 24.518zM512 320c-70.692 0-128 57.306-128 128 0 70.692 57.308 128 128 128 70.694 0 128-57.308 128-128 0-70.694-57.306-128-128-128z" />
28
- </font></defs></svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
video-js/font/vjs.ttf DELETED
Binary file
video-js/font/vjs.woff DELETED
Binary file
video-js/kg-video-js-skin.css CHANGED
@@ -1,1039 +1,105 @@
1
- .kg-video-js-skin {
2
- color: #cccccc;
3
- }
4
- /* Custom Icon Font
5
- --------------------------------------------------------------------------------
6
- The control icons are from a custom font. Each icon corresponds to a character
7
- (e.g. "\e001"). Font icons allow for easy scaling and coloring of icons.
8
- */
9
- @font-face {
10
- font-family: 'VideoJS';
11
- src: url('font/vjs.eot');
12
- src: url('font/vjs.eot?#iefix') format('embedded-opentype'), url('font/vjs.woff') format('woff'), url('font/vjs.ttf') format('truetype'), url('font/vjs.svg#icomoon') format('svg');
13
- font-weight: normal;
14
- font-style: normal;
15
- }
16
- /* Base UI Component Classes
17
- --------------------------------------------------------------------------------
18
- */
19
- /* Slider - used for Volume bar and Seek bar */
20
- .kg-video-js-skin .vjs-slider {
21
- /* Replace browser focus highlight with handle highlight */
22
- outline: 0;
23
- position: relative;
24
- cursor: pointer;
25
- padding: 0;
26
- /* background-color-with-alpha */
27
- background-color: #333333;
28
- background-color: rgba(51, 51, 51, 0.9);
29
- }
30
- .kg-video-js-skin .vjs-slider:focus {
31
- /* box-shadow */
32
- -webkit-box-shadow: 0 0 2em #ffffff;
33
- -moz-box-shadow: 0 0 2em #ffffff;
34
- box-shadow: 0 0 2em #ffffff;
35
- }
36
- .kg-video-js-skin .vjs-slider-handle {
37
- position: absolute;
38
- /* Needed for IE6 */
39
- left: 0;
40
- top: 0;
41
- }
42
- .kg-video-js-skin .vjs-slider-handle:before {
43
- content: "\e009";
44
- font-family: VideoJS;
45
- font-size: 1em;
46
- line-height: 1;
47
- text-align: center;
48
- text-shadow: 0em 0em 1em #fff;
49
- position: absolute;
50
- top: 0;
51
- left: 0;
52
- /* Rotate the square icon to make a diamond */
53
- /* transform */
54
- -webkit-transform: rotate(-45deg);
55
- -moz-transform: rotate(-45deg);
56
- -ms-transform: rotate(-45deg);
57
- -o-transform: rotate(-45deg);
58
- transform: rotate(-45deg);
59
- }
60
- /* Control Bar
61
- --------------------------------------------------------------------------------
62
- The default control bar that is a container for most of the controls.
63
- */
64
- .kg-video-js-skin .vjs-control-bar {
65
- /* Start hidden */
66
- display: none;
67
- position: absolute;
68
- /* Place control bar at the bottom of the player box/video.
69
- If you want more margin below the control bar, add more height. */
70
- bottom: 0;
71
- /* Use left/right to stretch to 100% width of player div */
72
- left: 0;
73
- right: 0;
74
- /* Height includes any margin you want above or below control items */
75
- height: 3.0em;
76
- /* background-color-with-alpha */
77
- background-color: #282828;
78
- background-color: rgba(40, 40, 40, 0.7);
79
- }
80
- /* Show the control bar only once the video has started playing */
81
- .kg-video-js-skin.vjs-has-started .vjs-control-bar {
82
- display: block;
83
- /* Visibility needed to make sure things hide in older browsers too. */
84
 
85
- visibility: visible;
86
- opacity: 1;
87
- /* transition */
88
- -webkit-transition: visibility 0.1s, opacity 0.1s;
89
- -moz-transition: visibility 0.1s, opacity 0.1s;
90
- -o-transition: visibility 0.1s, opacity 0.1s;
91
- transition: visibility 0.1s, opacity 0.1s;
92
- }
93
- /* Hide the control bar when the video is playing and the user is inactive */
94
- .kg-video-js-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {
95
- display: block;
96
- visibility: hidden;
97
- opacity: 0;
98
- /* transition */
99
- -webkit-transition: visibility 1s, opacity 1s;
100
- -moz-transition: visibility 1s, opacity 1s;
101
- -o-transition: visibility 1s, opacity 1s;
102
- transition: visibility 1s, opacity 1s;
103
- }
104
- .kg-video-js-skin.vjs-controls-disabled .vjs-control-bar {
105
- display: none;
106
- }
107
- .kg-video-js-skin.vjs-using-native-controls .vjs-control-bar {
108
- display: none;
109
- }
110
- /* The control bar shouldn't show after an error */
111
- .kg-video-js-skin.vjs-error .vjs-control-bar {
112
- display: none;
113
- }
114
- /* Don't hide the control bar if it's audio */
115
- .vjs-audio.kg-video-js-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {
116
- opacity: 1;
117
- visibility: visible;
118
- }
119
- /* IE8 is flakey with fonts, and you have to change the actual content to force
120
- fonts to show/hide properly.
121
- - "\9" IE8 hack didn't work for this
122
- - Found in XP IE8 from http://modern.ie. Does not show up in "IE8 mode" in IE9
123
- */
124
- @media \0screen {
125
- .kg-video-js-skin.vjs-user-inactive.vjs-playing .vjs-control-bar :before {
126
- content: "";
127
- }
128
- }
129
- /* General styles for individual controls. */
130
- .kg-video-js-skin .vjs-control {
131
- outline: none;
132
- position: relative;
133
- float: left;
134
- text-align: center;
135
- margin: 0;
136
- padding: 0;
137
- height: 3.0em;
138
- width: 4em;
139
- }
140
- /* Font button icons */
141
- .kg-video-js-skin .vjs-control:before {
142
- font-family: VideoJS;
143
- font-size: 1.5em;
144
- line-height: 2;
145
- position: absolute;
146
- top: 0;
147
- left: 0;
148
- width: 100%;
149
- height: 100%;
150
- text-align: center;
151
- text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
152
- }
153
- /* Replacement for focus outline */
154
- .kg-video-js-skin .vjs-control:focus:before,
155
- .kg-video-js-skin .vjs-control:hover:before {
156
- text-shadow: 0em 0em 1em #ffffff;
157
- }
158
- .kg-video-js-skin .vjs-control:focus {
159
- /* outline: 0; */
160
- /* keyboard-only users cannot see the focus on several of the UI elements when
161
- this is set to 0 */
162
 
163
- }
164
- /* Hide control text visually, but have it available for screenreaders */
165
- .kg-video-js-skin .vjs-control-text {
166
- /* hide-visually */
167
- border: 0;
168
- clip: rect(0 0 0 0);
169
- height: 1px;
170
- margin: -1px;
171
- overflow: hidden;
172
- padding: 0;
173
- position: absolute;
174
- width: 1px;
175
- }
176
- /* Play/Pause
177
- --------------------------------------------------------------------------------
178
  */
179
- .kg-video-js-skin .vjs-play-control {
180
- width: 5em;
181
- cursor: pointer;
182
- }
183
- .kg-video-js-skin .vjs-play-control:before {
184
- content: "\e001";
185
- }
186
- .kg-video-js-skin.vjs-playing .vjs-play-control:before {
187
- content: "\e002";
188
- }
189
- /* Playback toggle
190
- --------------------------------------------------------------------------------
191
- */
192
- .kg-video-js-skin .vjs-playback-rate .vjs-playback-rate-value {
193
- font-size: 1.5em;
194
- line-height: 2;
195
- position: absolute;
196
- top: 0;
197
- left: 0;
198
- width: 100%;
199
- height: 100%;
200
- text-align: center;
201
- text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
202
- }
203
- .kg-video-js-skin .vjs-playback-rate.vjs-menu-button .vjs-menu .vjs-menu-content {
204
- width: 4em;
205
- left: -2em;
206
- list-style: none;
207
- }
208
- /* Volume/Mute
209
- -------------------------------------------------------------------------------- */
210
- .kg-video-js-skin .vjs-mute-control,
211
- .kg-video-js-skin .vjs-volume-menu-button {
212
- cursor: pointer;
213
- float: right;
214
- }
215
- .kg-video-js-skin .vjs-mute-control:before,
216
- .kg-video-js-skin .vjs-volume-menu-button:before {
217
- content: "\e006";
218
- }
219
- .kg-video-js-skin .vjs-mute-control.vjs-vol-0:before,
220
- .kg-video-js-skin .vjs-volume-menu-button.vjs-vol-0:before {
221
- content: "\e003";
222
- }
223
- .kg-video-js-skin .vjs-mute-control.vjs-vol-1:before,
224
- .kg-video-js-skin .vjs-volume-menu-button.vjs-vol-1:before {
225
- content: "\e004";
226
- }
227
- .kg-video-js-skin .vjs-mute-control.vjs-vol-2:before,
228
- .kg-video-js-skin .vjs-volume-menu-button.vjs-vol-2:before {
229
- content: "\e005";
230
- }
231
- .kg-video-js-skin .vjs-volume-control {
232
- width: 5em;
233
- float: right;
234
- }
235
- .kg-video-js-skin .vjs-volume-bar {
236
- width: 5em;
237
- height: 0.6em;
238
- margin: 1.1em auto 0;
239
- }
240
- .kg-video-js-skin .vjs-volume-menu-button .vjs-menu-content {
241
- height: 2.9em;
242
- }
243
- .kg-video-js-skin .vjs-volume-level {
244
- position: absolute;
245
- top: 0;
246
- left: 0;
247
- height: 0.5em;
248
- /* assuming volume starts at 1.0 */
249
-
250
- width: 100%;
251
- background: #66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat;
252
- }
253
- .kg-video-js-skin .vjs-volume-bar .vjs-volume-handle {
254
- width: 0.5em;
255
- height: 0.5em;
256
- /* Assumes volume starts at 1.0. If you change the size of the
257
- handle relative to the volume bar, you'll need to update this value
258
- too. */
259
-
260
- left: 4.5em;
261
- }
262
- .kg-video-js-skin .vjs-volume-handle:before {
263
- font-size: 0.9em;
264
- top: -0.2em;
265
- left: -0.2em;
266
- width: 1em;
267
- height: 1em;
268
- }
269
- /* The volume menu button is like menu buttons (captions/subtitles) but works
270
- a little differently. It needs to be possible to tab to the volume slider
271
- without hitting space bar on the menu button. To do this we're not using
272
- display:none to hide the slider menu by default, and instead setting the
273
- width and height to zero. */
274
- .kg-video-js-skin .vjs-volume-menu-button .vjs-menu {
275
- display: block;
276
- width: 0;
277
- height: 0;
278
- border-top-color: transparent;
279
- }
280
- .kg-video-js-skin .vjs-volume-menu-button .vjs-menu .vjs-menu-content {
281
- height: 0;
282
- width: 0;
283
  }
284
- .kg-video-js-skin .vjs-volume-menu-button:hover .vjs-menu,
285
- .kg-video-js-skin .vjs-volume-menu-button .vjs-menu.vjs-lock-showing {
286
- border-top-color: rgba(7, 40, 50, 0.5);
287
- /* Same as ul background */
288
 
289
- }
290
- .kg-video-js-skin .vjs-volume-menu-button:hover .vjs-menu .vjs-menu-content,
291
- .kg-video-js-skin .vjs-volume-menu-button .vjs-menu.vjs-lock-showing .vjs-menu-content {
292
- height: 2.9em;
293
- width: 10em;
294
- }
295
- /* Progress
296
- --------------------------------------------------------------------------------
297
- */
298
- .kg-video-js-skin .vjs-progress-control {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  position: absolute;
300
- left: 0;
301
- right: 0;
302
- width: auto;
303
- font-size: 0.3em;
304
- height: 1em;
305
- /* Set above the rest of the controls. */
306
- top: -1em;
307
- /* Shrink the bar slower than it grows. */
308
- /* transition */
309
- -webkit-transition: all 0.4s;
310
- -moz-transition: all 0.4s;
311
- -o-transition: all 0.4s;
312
- transition: all 0.4s;
313
- }
314
- /* On hover, make the progress bar grow to something that's more clickable.
315
- This simply changes the overall font for the progress bar, and this
316
- updates both the em-based widths and heights, as wells as the icon font */
317
- .kg-video-js-skin:hover .vjs-progress-control {
318
- font-size: .9em;
319
- /* Even though we're not changing the top/height, we need to include them in
320
- the transition so they're handled correctly. */
321
 
322
- /* transition */
323
- -webkit-transition: all 0.2s;
324
- -moz-transition: all 0.2s;
325
- -o-transition: all 0.2s;
326
- transition: all 0.2s;
327
- }
328
- /* Box containing play and load progresses. Also acts as seek scrubber. */
329
- .kg-video-js-skin .vjs-progress-holder {
330
- height: 100%;
331
  }
332
- /* Progress Bars */
333
- .kg-video-js-skin .vjs-progress-holder .vjs-play-progress,
334
- .kg-video-js-skin .vjs-progress-holder .vjs-load-progress {
335
- position: absolute;
336
- display: block;
337
- height: 100%;
338
- margin: 0;
339
- padding: 0;
340
- /* updated by javascript during playback */
341
 
342
- width: 0;
343
- /* Needed for IE6 */
344
- left: 0;
345
- top: 0;
 
 
 
 
 
346
  }
347
- .kg-video-js-skin .vjs-play-progress {
348
- /*
349
- Using a data URI to create the white diagonal lines with a transparent
350
- background. Surprisingly works in IE8.
351
- Created using http://www.patternify.com
352
- Changing the first color value will change the bar color.
353
- Also using a paralax effect to make the lines move backwards.
354
- The -50% left position makes that happen.
355
- */
356
 
357
- background: #66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat;
358
- }
359
- .kg-video-js-skin .vjs-load-progress {
360
- background: #646464 /* IE8- Fallback */;
361
- background: rgba(255, 255, 255, 0.4);
362
- }
363
- /* there are child elements of the load progress bar that represent the
364
- specific time ranges that have been buffered */
365
- .kg-video-js-skin .vjs-load-progress div {
366
- background: #787878 /* IE8- Fallback */;
367
- background: rgba(255, 255, 255, 0.1);
368
- }
369
- .kg-video-js-skin .vjs-seek-handle {
370
- width: 1.5em;
371
- height: 100%;
372
- }
373
- .kg-video-js-skin .vjs-seek-handle:before {
374
- padding-top: 0.1em /* Minor adjustment */;
375
- }
376
- /* Live Mode
377
- --------------------------------------------------------------------------------
378
- */
379
- .kg-video-js-skin.vjs-live .vjs-time-controls,
380
- .kg-video-js-skin.vjs-live .vjs-time-divider,
381
- .kg-video-js-skin.vjs-live .vjs-progress-control {
382
- display: none;
383
- }
384
- .kg-video-js-skin.vjs-live .vjs-live-display {
385
- display: block;
386
- }
387
- /* Live Display
388
- --------------------------------------------------------------------------------
389
- */
390
- .kg-video-js-skin .vjs-live-display {
391
- display: none;
392
- font-size: 1em;
393
- line-height: 3em;
394
- }
395
- /* Time Display
396
- --------------------------------------------------------------------------------
397
- */
398
- .kg-video-js-skin .vjs-time-controls {
399
- font-size: 1em;
400
- /* Align vertically by making the line height the same as the control bar */
401
- line-height: 3em;
402
- }
403
- .kg-video-js-skin .vjs-current-time {
404
- float: left;
405
- }
406
- .kg-video-js-skin .vjs-duration {
407
- float: left;
408
- }
409
- /* Remaining time is in the HTML, but not included in default design */
410
- .kg-video-js-skin .vjs-remaining-time {
411
- display: none;
412
- float: left;
413
- }
414
- .vjs-time-divider {
415
- float: left;
416
- line-height: 3em;
417
- }
418
- /* Fullscreen
419
- --------------------------------------------------------------------------------
420
- */
421
- .kg-video-js-skin .vjs-fullscreen-control {
422
- width: 3.8em;
423
- cursor: pointer;
424
- float: right;
425
- }
426
- .kg-video-js-skin .vjs-fullscreen-control:before {
427
- content: "\e000";
428
- }
429
- /* Switch to the exit icon when the player is in fullscreen */
430
- .kg-video-js-skin.vjs-fullscreen .vjs-fullscreen-control:before {
431
- content: "\e00b";
432
  }
433
- /* Big Play Button (play button at start)
434
- --------------------------------------------------------------------------------
435
- Positioning of the play button in the center or other corners can be done more
436
- easily in the skin designer. http://designer.videojs.com/
437
- */
438
- .kg-video-js-skin .vjs-big-play-button {
439
 
440
- display: block;
441
- z-index: 2;
442
- position: absolute;
443
- top: 49%;
444
- left: 49%;
445
- width: 8em;
446
- height: 8em;
447
- margin: -4em;
448
- text-align: center;
449
- vertical-align: middle;
450
- cursor: pointer;
451
- opacity: 1;
452
- box-sizing: content-box !important;
453
- -moz-box-sizing: content-box !important;
454
- -webkit-box-sizing: content-box !important;
455
- /* Need a slightly gray bg so it can be seen on black backgrounds */
456
- /* background-color-with-alpha */
457
- background-color: rgb(40, 40, 40);
458
- background-color: rgba(40, 40, 40, 0.6);
459
- border: 0.6em solid rgb(255, 255, 255);
460
- border-color: rgba(255, 255, 255, 0.7);
461
- /* border-radius */
462
- -webkit-border-radius: 100px;
463
- -moz-border-radius: 100px;
464
- border-radius: 100px;
465
- /* box-shadow
466
- -webkit-box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);
467
- -moz-box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);
468
- box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);
469
- */
470
- /* transition */
471
- -webkit-transition: all 0.4s;
472
- -moz-transition: all 0.4s;
473
- -o-transition: all 0.4s;
474
- transition: all 0.4s;
475
- }
476
- /* Hide if controls are disabled */
477
- .kg-video-js-skin.vjs-controls-disabled .vjs-big-play-button {
478
- display: none;
479
- }
480
- /* Hide when video starts playing */
481
- .kg-video-js-skin.vjs-has-started .vjs-big-play-button {
482
- display: none;
483
- }
484
- /* Hide on mobile devices. Remove when we stop using native controls
485
- by default on mobile */
486
- .kg-video-js-skin.vjs-using-native-controls .vjs-big-play-button {
487
- display: none;
488
- }
489
- .kg-video-js-skin:hover .vjs-big-play-button,
490
- .kg-video-js-skin .vjs-big-play-button:focus {
491
- outline: 0;
492
- border-color: #fff;
493
- /* IE8 needs a non-glow hover state */
494
- background-color: #505050;
495
- background-color: rgba(50, 50, 50, 0.75);
496
- /* box-shadow
497
- -webkit-box-shadow: 0 0 3em #ffffff;
498
- -moz-box-shadow: 0 0 3em #ffffff;
499
- box-shadow: 0 0 3em #ffffff;
500
- */
501
- /* transition */
502
- -webkit-transition: all 0s;
503
- -moz-transition: all 0s;
504
- -o-transition: all 0s;
505
- transition: all 0s;
506
- }
507
- .kg-video-js-skin:hover .vjs-big-play-button:before {
508
- color: white;
509
- transition-property: color;
510
- transition-duration: 0s;
511
- }
512
- .kg-video-js-skin .vjs-big-play-button:before {
513
- content: "\e001";
514
- font-family: VideoJS;
515
- line-height: 1.5em;
516
- font-size: 5.5em;
517
- text-align: center /* Needed for IE8 */;
518
- position: absolute;
519
- left: 2px;
520
- width: 100%;
521
- height: 100%;
522
- transition-property: color;
523
- transition-duration: 0.4s;
524
  }
525
- /* Error Display
526
- --------------------------------------------------------------------------------
527
- */
528
- .vjs-error-display {
529
- display: none;
530
- }
531
- .vjs-error .vjs-error-display {
532
- display: block;
533
- position: absolute;
534
- left: 0;
535
- top: 0;
536
- width: 100%;
537
- height: 100%;
538
- }
539
- .vjs-error .vjs-error-display:before {
540
- content: 'X';
541
- font-family: Arial;
542
- font-size: 4em;
543
- color: #666666;
544
- /* In order to center the play icon vertically we need to set the line height
545
- to the same as the button height */
546
 
547
- line-height: 1;
548
- text-shadow: 0.05em 0.05em 0.1em #000;
549
- text-align: center /* Needed for IE8 */;
550
- vertical-align: middle;
551
- position: absolute;
552
- left: 0;
553
- top: 50%;
554
- margin-top: -0.5em;
555
- width: 100%;
556
- }
557
- .vjs-error-display div {
558
- position: absolute;
559
- bottom: 1em;
560
- right: 0;
561
- left: 0;
562
- font-size: 1.4em;
563
- text-align: center;
564
- padding: 3px;
565
- background: #000000;
566
- background: rgba(0, 0, 0, 0.5);
567
- }
568
- .vjs-error-display a,
569
- .vjs-error-display a:visited {
570
- color: #F4A460;
571
- }
572
- /* Loading Spinner
573
- --------------------------------------------------------------------------------
574
- */
575
- .vjs-loading-spinner {
576
- /* Should be hidden by default */
577
- display: none;
578
- position: absolute;
579
- top: 50%;
580
- left: 50%;
581
- font-size: 4em;
582
- line-height: 1;
583
- width: 1em;
584
- height: 1em;
585
- margin-left: -0.5em;
586
- margin-top: -0.5em;
587
- opacity: 0.75;
588
- }
589
- /* Show the spinner when waiting for data and seeking to a new time */
590
- .vjs-waiting .vjs-loading-spinner,
591
- .vjs-seeking .vjs-loading-spinner {
592
- display: block;
593
- /* only animate when showing because it can be processor heavy */
594
- /* animation */
595
- -webkit-animation: spin 1.5s infinite linear;
596
- -moz-animation: spin 1.5s infinite linear;
597
- -o-animation: spin 1.5s infinite linear;
598
- animation: spin 1.5s infinite linear;
599
- }
600
- /* Errors are unrecoverable without user interaction so hide the spinner */
601
- .vjs-error .vjs-loading-spinner {
602
- display: none;
603
- /* ensure animation doesn't continue while hidden */
604
- /* animation */
605
- -webkit-animation: none;
606
- -moz-animation: none;
607
- -o-animation: none;
608
- animation: none;
609
- }
610
- .kg-video-js-skin .vjs-loading-spinner:before {
611
- content: "\e01e";
612
- font-family: VideoJS;
613
- position: absolute;
614
- top: 0;
615
- left: 0;
616
- width: 1em;
617
- height: 1em;
618
- text-align: center;
619
- text-shadow: 0em 0em 0.1em #000;
620
- }
621
- @-moz-keyframes spin {
622
- 0% {
623
- -moz-transform: rotate(0deg);
624
- }
625
- 100% {
626
- -moz-transform: rotate(359deg);
627
- }
628
- }
629
- @-webkit-keyframes spin {
630
- 0% {
631
- -webkit-transform: rotate(0deg);
632
- }
633
- 100% {
634
- -webkit-transform: rotate(359deg);
635
- }
636
- }
637
- @-o-keyframes spin {
638
- 0% {
639
- -o-transform: rotate(0deg);
640
- }
641
- 100% {
642
- -o-transform: rotate(359deg);
643
- }
644
- }
645
- @keyframes spin {
646
- 0% {
647
- transform: rotate(0deg);
648
- }
649
- 100% {
650
- transform: rotate(359deg);
651
- }
652
- }
653
- /* Menu Buttons (Captions/Subtitles/etc.)
654
- --------------------------------------------------------------------------------
655
- */
656
- .kg-video-js-skin .vjs-menu-button {
657
- float: right;
658
- cursor: pointer;
659
  }
660
- .kg-video-js-skin .vjs-menu {
661
- display: none;
662
- position: absolute;
663
- bottom: 0;
664
- left: 0em;
665
- /* (Width of vjs-menu - width of button) / 2 */
666
-
667
- width: 0em;
668
- height: 0em;
669
- margin-bottom: 3em;
670
- border-left: 2em solid transparent;
671
- border-right: 2em solid transparent;
672
- border-top: 1.55em solid #000000;
673
- /* Same width top as ul bottom */
674
-
675
- border-top-color: rgba(7, 40, 50, 0.5);
676
- /* Same as ul background */
677
 
 
 
 
 
 
 
 
678
  }
679
- /* Button Pop-up Menu */
680
- .kg-video-js-skin .vjs-menu-button .vjs-menu .vjs-menu-content {
681
- display: block;
682
- padding: 0;
683
- margin: 0;
684
- position: absolute;
685
- width: 10em;
686
- bottom: 1.5em;
687
- /* Same bottom as vjs-menu border-top */
688
 
689
- max-height: 15em;
690
- overflow: auto;
691
- left: -5em;
692
- /* Width of menu - width of button / 2 */
693
-
694
- /* background-color-with-alpha */
695
- background-color: #333321;
696
- background-color: rgba(20, 20, 20, 0.7);
697
- /* box-shadow */
698
- -webkit-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);
699
- -moz-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);
700
- box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);
701
- }
702
- .kg-video-js-skin .vjs-menu-button:hover .vjs-control-content .vjs-menu,
703
- .kg-video-js-skin .vjs-control-content .vjs-menu.vjs-lock-showing {
704
- display: block;
705
- }
706
- /* prevent menus from opening while scrubbing (FF, IE) */
707
- .kg-video-js-skin.vjs-scrubbing .vjs-menu-button:hover .vjs-control-content .vjs-menu {
708
- display: none;
709
- }
710
- .kg-video-js-skin .vjs-menu-button ul li {
711
- list-style: none;
712
- margin: 0;
713
- padding: 0.3em 0 0.3em 0;
714
- line-height: 1.4em;
715
- font-size: 1.2em;
716
- text-align: center;
717
- text-transform: lowercase;
718
- }
719
- .kg-video-js-skin .vjs-menu-button ul li.vjs-selected {
720
- background-color: #000;
721
- }
722
- .kg-video-js-skin .vjs-menu-button ul li:focus,
723
- .kg-video-js-skin .vjs-menu-button ul li:hover,
724
- .kg-video-js-skin .vjs-menu-button ul li.vjs-selected:focus,
725
- .kg-video-js-skin .vjs-menu-button ul li.vjs-selected:hover {
726
- outline: 0;
727
- color: #111;
728
- /* background-color-with-alpha */
729
- background-color: #ffffff;
730
- background-color: rgba(255, 255, 255, 0.75);
731
- /* box-shadow */
732
- -webkit-box-shadow: 0 0 1em #ffffff;
733
- -moz-box-shadow: 0 0 1em #ffffff;
734
- box-shadow: 0 0 1em #ffffff;
735
- }
736
- .kg-video-js-skin .vjs-menu-button ul li.vjs-menu-title {
737
  text-align: center;
738
- text-transform: uppercase;
739
- font-size: 1em;
740
- line-height: 2em;
741
- padding: 0;
742
- margin: 0 0 0.3em 0;
743
- font-weight: bold;
744
- cursor: default;
745
- }
746
- /* Subtitles Button */
747
- .kg-video-js-skin .vjs-subtitles-button:before {
748
- content: "\e00c";
749
- }
750
- /* Captions Button */
751
- .kg-video-js-skin .vjs-captions-button:before {
752
- content: "\e008";
753
- }
754
- /* Chapters Button */
755
- .kg-video-js-skin .vjs-chapters-button:before {
756
- content: "\e00c";
757
- }
758
- .kg-video-js-skin .vjs-chapters-button.vjs-menu-button .vjs-menu .vjs-menu-content {
759
- width: 24em;
760
- left: -12em;
761
- }
762
- /* Replacement for focus outline */
763
- .kg-video-js-skin .vjs-captions-button:focus .vjs-control-content:before,
764
- .kg-video-js-skin .vjs-captions-button:hover .vjs-control-content:before {
765
- /* box-shadow */
766
- -webkit-box-shadow: 0 0 1em #ffffff;
767
- -moz-box-shadow: 0 0 1em #ffffff;
768
- box-shadow: 0 0 1em #ffffff;
769
- }
770
- /*
771
- REQUIRED STYLES (be careful overriding)
772
- ================================================================================
773
- When loading the player, the video tag is replaced with a DIV,
774
- that will hold the video tag or object tag for other playback methods.
775
- The div contains the video playback element (Flash or HTML5) and controls,
776
- and sets the width and height of the video.
777
-
778
- ** If you want to add some kind of border/padding (e.g. a frame), or special
779
- positioning, use another containing element. Otherwise you risk messing up
780
- control positioning and full window mode. **
781
- */
782
- .video-js {
783
- background-color: #000;
784
- position: relative;
785
- padding: 0;
786
- /* Start with 10px for base font size so other dimensions can be em based and
787
- easily calculable. */
788
-
789
- font-size: 10px;
790
- /* Allow poster to be vertically aligned. */
791
-
792
- vertical-align: middle;
793
- /* display: table-cell; */
794
- /*This works in Safari but not Firefox.*/
795
-
796
- /* Provide some basic defaults for fonts */
797
-
798
- font-weight: normal;
799
- font-style: normal;
800
- /* Avoiding helvetica: issue #376 */
801
-
802
- font-family: Arial, sans-serif;
803
- /* Turn off user selection (text highlighting) by default.
804
- The majority of player components will not be text blocks.
805
- Text areas will need to turn user selection back on. */
806
-
807
- /* user-select */
808
- -webkit-user-select: none;
809
- -moz-user-select: none;
810
- -ms-user-select: none;
811
- user-select: none;
812
- }
813
- /* Playback technology elements expand to the width/height of the containing div
814
- <video> or <object> */
815
- .video-js .vjs-tech {
816
- position: absolute;
817
- top: 0;
818
- left: 0;
819
  width: 100%;
820
  height: 100%;
821
- }
822
- /* Fix for Firefox 9 fullscreen (only if it is enabled). Not needed when
823
- checking fullScreenEnabled. */
824
- .video-js:-moz-full-screen {
825
- position: absolute;
826
- }
827
- /* Fullscreen Styles */
828
- body.vjs-full-window {
829
- padding: 0;
830
- margin: 0;
831
- height: 100%;
832
- /* Fix for IE6 full-window. http://www.cssplay.co.uk/layouts/fixed.html */
833
- overflow-y: auto;
834
- }
835
- .video-js.vjs-fullscreen {
836
- position: fixed;
837
- overflow: hidden;
838
- z-index: 1000;
839
- left: 0;
840
- top: 0;
841
- bottom: 0;
842
- right: 0;
843
- width: 100% !important;
844
- height: 100% !important;
845
- /* IE6 full-window (underscore hack) */
846
- _position: absolute;
847
- }
848
- .video-js:-webkit-full-screen {
849
- width: 100% !important;
850
- height: 100% !important;
851
- }
852
- .video-js.vjs-fullscreen.vjs-user-inactive {
853
- cursor: none;
854
- }
855
- /* Poster Styles */
856
- .vjs-poster {
857
- background-repeat: no-repeat;
858
- background-position: 50% 50%;
859
- background-size: contain;
860
- background-color: #000000;
861
- cursor: pointer;
862
- margin: 0;
863
- padding: 0;
864
- position: absolute;
865
- top: 0;
866
- right: 0;
867
- bottom: 0;
868
- left: 0;
869
- }
870
- .vjs-poster img {
871
- display: block;
872
- margin: 0 auto;
873
- max-height: 100%;
874
- padding: 0;
875
- width: 100%;
876
- }
877
- /* Hide the poster after the video has started playing */
878
- .video-js.vjs-has-started .vjs-poster {
879
- display: none;
880
- }
881
- /* Don't hide the poster if we're playing audio */
882
- .video-js.vjs-audio.vjs-has-started .vjs-poster {
883
- display: block;
884
- }
885
- /* Hide the poster when controls are disabled because it's clickable
886
- and the native poster can take over */
887
- .video-js.vjs-controls-disabled .vjs-poster {
888
- display: none;
889
- }
890
- /* Hide the poster when native controls are used otherwise it covers them */
891
- .video-js.vjs-using-native-controls .vjs-poster {
892
- display: none;
893
- }
894
- /* Text Track Styles */
895
- /* Overall track holder for both captions and subtitles */
896
- .video-js .vjs-text-track-display {
897
- position: absolute;
898
- top: 0;
899
- left: 0;
900
- bottom: 3em;
901
- right: 0;
902
- pointer-events: none;
903
- }
904
- /* Captions Settings Dialog */
905
- .vjs-caption-settings {
906
- position: relative;
907
- top: 1em;
908
- background-color: #000;
909
- opacity: 0.75;
910
- color: #FFF;
911
- margin: 0 auto;
912
- padding: 0.5em;
913
- height: 15em;
914
- font-family: Arial, Helvetica, sans-serif;
915
- font-size: 12px;
916
- width: 40em;
917
- }
918
- .vjs-caption-settings .vjs-tracksettings {
919
- top: 0;
920
- bottom: 2em;
921
- left: 0;
922
- right: 0;
923
- position: absolute;
924
- overflow: auto;
925
- }
926
- .vjs-caption-settings .vjs-tracksettings-colors,
927
- .vjs-caption-settings .vjs-tracksettings-font {
928
- float: left;
929
- }
930
- .vjs-caption-settings .vjs-tracksettings-colors:after,
931
- .vjs-caption-settings .vjs-tracksettings-font:after,
932
- .vjs-caption-settings .vjs-tracksettings-controls:after {
933
- clear: both;
934
- }
935
- .vjs-caption-settings .vjs-tracksettings-controls {
936
  position: absolute;
937
- bottom: 1em;
938
- right: 1em;
939
  }
940
- .vjs-caption-settings .vjs-tracksetting {
941
- margin: 5px;
942
- padding: 3px;
943
- min-height: 40px;
944
- }
945
- .vjs-caption-settings .vjs-tracksetting label {
946
- display: block;
947
- width: 100px;
948
- margin-bottom: 5px;
949
- }
950
- .vjs-caption-settings .vjs-tracksetting span {
951
- display: inline;
952
- margin-left: 5px;
953
- }
954
- .vjs-caption-settings .vjs-tracksetting > div {
955
- margin-bottom: 5px;
956
- min-height: 20px;
957
- }
958
- .vjs-caption-settings .vjs-tracksetting > div:last-child {
959
- margin-bottom: 0;
960
- padding-bottom: 0;
961
- min-height: 0;
962
- }
963
- .vjs-caption-settings label > input {
964
- margin-right: 10px;
965
- }
966
- .vjs-caption-settings input[type="button"] {
967
- width: 40px;
968
- height: 40px;
969
- }
970
- /* Hide disabled or unsupported controls */
971
- .vjs-hidden {
972
- display: none !important;
973
- }
974
- .vjs-lock-showing {
975
- display: block !important;
976
- opacity: 1;
977
- visibility: visible;
978
- }
979
- /* In IE8 w/ no JavaScript (no HTML5 shim), the video tag doesn't register.
980
- The .video-js classname on the video tag also isn't considered.
981
- This optional paragraph inside the video tag can provide a message to users
982
- about what's required to play video. */
983
- .vjs-no-js {
984
- padding: 2em;
985
- color: #ccc;
986
- background-color: #333;
987
- font-size: 1.8em;
988
- font-family: Arial, sans-serif;
989
- text-align: center;
990
- width: 30em;
991
- height: 15em;
992
- margin: 0 auto;
993
- }
994
- .vjs-no-js a,
995
- .vjs-no-js a:visited {
996
- color: #F4A460;
997
- }
998
-
999
-
1000
-
1001
- /* Resolutions
1002
- -------------------------------------------------------------------------------- */
1003
-
1004
- @font-face{
1005
- font-family: 'VideoJS-Resolutions';
1006
- src: url('resolutions/Font/fonts/VideoJS-Resolutions.eot');
1007
- src: url('resolutions/Font/fonts/VideoJS-Resolutions.eot?#iefix') format('embedded-opentype'),
1008
- url('resolutions/Font/fonts/VideoJS-Resolutions.woff') format('woff'),
1009
- url('resolutions/Font/fonts/VideoJS-Resolutions.ttf') format('truetype');
1010
- font-weight: normal;
1011
- font-style: normal;
1012
- }
1013
-
1014
- .kg-video-js-skin .vjs-resolutions-button {
1015
- width: 5em;
1016
- cursor: pointer !important;
1017
- }
1018
-
1019
- /* Resolutions Icon */
1020
-
1021
- .kg-video-js-skin .vjs-resolutions-button .vjs-control-content:before {
1022
- font-family: VideoJS-Resolutions;
1023
- font-size: 1.5em;
1024
- line-height: 2em;
1025
- content: "\e000"; /* Gear icon */
1026
- width: 17px;
1027
- height: 17px;
1028
- margin: 0.5em auto 0;
1029
- }
1030
-
1031
- .kg-video-js-skin .vjs-control-content:hover:before {
1032
- text-shadow: 0em 0em 1em #FFF;
1033
- }
1034
-
1035
-
1036
-
1037
- /* -----------------------------------------------------------------------------
1038
- The original source of this file lives at
1039
- https://github.com/videojs/video.js/blob/master/src/css/video-js.less */
1
+ /*
2
+ Player Skin Designer for Video.js
3
+ http://videojs.com
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
+ To customize the player skin edit
6
+ the CSS below. Click "details"
7
+ below to add comments or questions.
8
+ This file uses some SCSS. Learn more
9
+ at http://sass-lang.com/guide)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
+ This designer can be linked to at:
12
+ http://codepen.io/heff/pen/EarCt/left/?editors=010
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  */
14
+ .kg-video-js-skin {
15
+ /* The base font size controls the size of everything, not just text.
16
+ All dimensions use em-based sizes so that the scale along with the font size.
17
+ Try increasing it to 15px and see what happens. */
18
+ font-size: 10px;
19
+ /* The main font color changes the ICON COLORS as well as the text */
20
+ color: #fff;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  }
 
 
 
 
22
 
23
+ /* The "Big Play Button" is the play button that shows before the video plays.
24
+ To center it set the align values to center and middle. The typical location
25
+ of the button is the center, but there is trend towards moving it to a corner
26
+ where it gets out of the way of valuable content in the poster image.*/
27
+ .kg-video-js-skin .vjs-big-play-button {
28
+ /* The font size is what makes the big play button...big.
29
+ All width/height values use ems, which are a multiple of the font size.
30
+ If the .kg-video-js-skin font-size is 10px, then 3em equals 30px.*/
31
+ font-size: 3em;
32
+ /* We're using SCSS vars here because the values are used in multiple places.
33
+ Now that font size is set, the following em values will be a multiple of the
34
+ new font size. If the font-size is 3em (30px), then setting any of
35
+ the following values to 3em would equal 30px. 3 * font-size. */
36
+ /* 1.5em = 45px default */
37
+ line-height: 3em;
38
+ height: 3em;
39
+ width: 3em;
40
+ /* 0.06666em = 2px default */
41
+ border: 0.16666em solid #fff;
42
+ /* 0.3em = 9px default */
43
+ border-radius: 3em;
44
+ /* Align center */
45
+ left: 50%;
46
+ top: 50%;
47
+ margin-left: -1.5em;
48
+ margin-top: -1.5em;
49
  position: absolute;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
 
51
+ box-sizing: border-box;
 
 
 
 
 
 
 
 
52
  }
 
 
 
 
 
 
 
 
 
53
 
54
+ /* The default color of control backgrounds is mostly black but with a little
55
+ bit of blue so it can still be seen on all-black video frames, which are common. */
56
+ .kg-video-js-skin .vjs-control-bar,
57
+ .kg-video-js-skin .vjs-big-play-button,
58
+ .kg-video-js-skin .vjs-menu-button .vjs-menu-content {
59
+ /* IE8 - has no alpha support */
60
+ background-color: #2B333F;
61
+ /* Opacity: 1.0 = 100%, 0.0 = 0% */
62
+ background-color: rgba(40, 40, 40, 0.75);
63
  }
 
 
 
 
 
 
 
 
 
64
 
65
+ /* Slider - used for Volume bar and Progress bar */
66
+ .kg-video-js-skin .vjs-slider {
67
+ background-color: #73859f;
68
+ background-color: rgba(115, 133, 159, 0.5);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  }
 
 
 
 
 
 
70
 
71
+ /* The slider bar color is used for the progress bar and the volume bar
72
+ (the first two can be removed after a fix that's coming) */
73
+ .kg-video-js-skin .vjs-volume-level,
74
+ .kg-video-js-skin .vjs-play-progress,
75
+ .kg-video-js-skin .vjs-slider-bar {
76
+ background: #fff;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
+ /* The main progress bar also has a bar that shows how much has been loaded. */
80
+ .kg-video-js-skin .vjs-load-progress {
81
+ /* For IE8 we'll lighten the color */
82
+ background: ligthen(#73859f, 25%);
83
+ /* Otherwise we'll rely on stacked opacities */
84
+ background: rgba(115, 133, 159, 0.5);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
+ /* The load progress bar also has internal divs that represent
88
+ smaller disconnected loaded time ranges */
89
+ .kg-video-js-skin .vjs-load-progress div {
90
+ /* For IE8 we'll lighten the color */
91
+ background: ligthen(#73859f, 50%);
92
+ /* Otherwise we'll rely on stacked opacities */
93
+ background: rgba(115, 133, 159, 0.75);
94
  }
 
 
 
 
 
 
 
 
 
95
 
96
+ .kg-video-js-skin .vjs-big-play-button::before {
97
+ content: '\f101';
98
+ font-size: 2.1em;
99
+ font-family: 'Videojs';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  text-align: center;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  width: 100%;
102
  height: 100%;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  position: absolute;
104
+ line-height: 1.3em;
 
105
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
video-js/lang/ar.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("ar",{
18
  "Captions": "التعليقات",
19
  "captions off": "ايقاف التعليقات",
20
  "Chapters": "فصول",
21
- "You aborted the video playback": "لقد ألغيت تشغيل الفيديو",
22
- "A network error caused the video download to fail part-way.": "تسبب خطأ في الشبكة بفشل تحميل الفيديو بالكامل.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "لا يمكن تحميل الفيديو بسبب فشل في الخادم أو الشبكة ، أو فشل بسبب عدم امكانية قراءة تنسيق الفيديو.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "تم ايقاف تشغيل الفيديو بسبب مشكلة فساد أو لأن الفيديو المستخدم يستخدم ميزات غير مدعومة من متصفحك.",
25
- "No compatible source was found for this video.": "فشل العثور على أي مصدر متوافق مع هذا الفيديو."
26
  });
18
  "Captions": "التعليقات",
19
  "captions off": "ايقاف التعليقات",
20
  "Chapters": "فصول",
21
+ "You aborted the media playback": "لقد ألغيت تشغيل الفيديو",
22
+ "A network error caused the media download to fail part-way.": "تسبب خطأ في الشبكة بفشل تحميل الفيديو بالكامل.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "لا يمكن تحميل الفيديو بسبب فشل في الخادم أو الشبكة ، أو فشل بسبب عدم امكانية قراءة تنسيق الفيديو.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "تم ايقاف تشغيل الفيديو بسبب مشكلة فساد أو لأن الفيديو المستخدم يستخدم ميزات غير مدعومة من متصفحك.",
25
+ "No compatible source was found for this media.": "فشل العثور على أي مصدر متوافق مع هذا الفيديو."
26
  });
video-js/lang/ba.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ videojs.addLanguage("ba",{
2
+ "Play": "Pusti",
3
+ "Pause": "Pauza",
4
+ "Current Time": "Trenutno vrijeme",
5
+ "Duration Time": "Vrijeme trajanja",
6
+ "Remaining Time": "Preostalo vrijeme",
7
+ "Stream Type": "Način strimovanja",
8
+ "LIVE": "UŽIVO",
9
+ "Loaded": "Učitan",
10
+ "Progress": "Progres",
11
+ "Fullscreen": "Puni ekran",
12
+ "Non-Fullscreen": "Mali ekran",
13
+ "Mute": "Prigušen",
14
+ "Unmuted": "Ne-prigušen",
15
+ "Playback Rate": "Stopa reprodukcije",
16
+ "Subtitles": "Podnaslov",
17
+ "subtitles off": "Podnaslov deaktiviran",
18
+ "Captions": "Titlovi",
19
+ "captions off": "Titlovi deaktivirani",
20
+ "Chapters": "Poglavlja",
21
+ "You aborted the media playback": "Isključili ste reprodukciju videa.",
22
+ "A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.",
25
+ "No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa."
26
+ });
video-js/lang/bg.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("bg",{
18
  "Captions": "Аудио надписи",
19
  "captions off": "Спряни аудио надписи",
20
  "Chapters": "Глави",
21
- "You aborted the video playback": "Спряхте възпроизвеждането на видеото",
22
- "A network error caused the video download to fail part-way.": "Грешка в мрежата провали изтеглянето на видеото.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Видеото не може да бъде заредено заради проблем със сървъра или мрежата или защото този формат не е поддържан.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "Възпроизвеждането на видеото беше прекъснато заради проблем с файла или защото видеото използва опции които браузърът Ви не поддържа.",
25
- "No compatible source was found for this video.": "Не беше намерен съвместим източник за това видео."
26
  });
18
  "Captions": "Аудио надписи",
19
  "captions off": "Спряни аудио надписи",
20
  "Chapters": "Глави",
21
+ "You aborted the media playback": "Спряхте възпроизвеждането на видеото",
22
+ "A network error caused the media download to fail part-way.": "Грешка в мрежата провали изтеглянето на видеото.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Видеото не може да бъде заредено заради проблем със сървъра или мрежата или защото този формат не е поддържан.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Възпроизвеждането на видеото беше прекъснато заради проблем с файла или защото видеото използва опции които браузърът Ви не поддържа.",
25
+ "No compatible source was found for this media.": "Не беше намерен съвместим източник за това видео."
26
  });
video-js/lang/ca.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("ca",{
18
  "Captions": "Llegendes",
19
  "captions off": "Llegendes desactivades",
20
  "Chapters": "Capítols",
21
- "You aborted the video playback": "Heu interromput la reproducció del vídeo.",
22
- "A network error caused the video download to fail part-way.": "Un error de la xarxa ha interromput la baixada del vídeo.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "No s'ha pogut carregar el vídeo perquè el servidor o la xarxa han fallat, o bé perquè el seu format no és compatible.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "La reproducció de vídeo s'ha interrumput per un problema de corrupció de dades o bé perquè el vídeo demanava funcions que el vostre navegador no ofereix.",
25
- "No compatible source was found for this video.": "No s'ha trobat cap font compatible amb el vídeo."
26
  });
18
  "Captions": "Llegendes",
19
  "captions off": "Llegendes desactivades",
20
  "Chapters": "Capítols",
21
+ "You aborted the media playback": "Heu interromput la reproducció del vídeo.",
22
+ "A network error caused the media download to fail part-way.": "Un error de la xarxa ha interromput la baixada del vídeo.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "No s'ha pogut carregar el vídeo perquè el servidor o la xarxa han fallat, o bé perquè el seu format no és compatible.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La reproducció de vídeo s'ha interrumput per un problema de corrupció de dades o bé perquè el vídeo demanava funcions que el vostre navegador no ofereix.",
25
+ "No compatible source was found for this media.": "No s'ha trobat cap font compatible amb el vídeo."
26
  });
video-js/lang/cs.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("cs",{
18
  "Captions": "Popisky",
19
  "captions off": "Popisky vypnuty",
20
  "Chapters": "Kapitoly",
21
- "You aborted the video playback": "Přehrávání videa je přerušeno.",
22
- "A network error caused the video download to fail part-way.": "Video nemohlo být načteno, kvůli chybě v síti.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Video nemohlo být načteno, buď kvůli chybě serveru nebo sítě nebo proto, že daný formát není podporován.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "Váš prohlížeč nepodporuje formát videa.",
25
- "No compatible source was found for this video.": "Špatně zadaný zdroj videa."
26
  });
18
  "Captions": "Popisky",
19
  "captions off": "Popisky vypnuty",
20
  "Chapters": "Kapitoly",
21
+ "You aborted the media playback": "Přehrávání videa je přerušeno.",
22
+ "A network error caused the media download to fail part-way.": "Video nemohlo být načteno, kvůli chybě v síti.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video nemohlo být načteno, buď kvůli chybě serveru nebo sítě nebo proto, že daný formát není podporován.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Váš prohlížeč nepodporuje formát videa.",
25
+ "No compatible source was found for this media.": "Špatně zadaný zdroj videa."
26
  });
video-js/lang/da.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ videojs.addLanguage("da",{
2
+ "Play": "Afspil",
3
+ "Pause": "Pause",
4
+ "Current Time": "Aktuel tid",
5
+ "Duration Time": "Varighed",
6
+ "Remaining Time": "Resterende tid",
7
+ "Stream Type": "Stream-type",
8
+ "LIVE": "LIVE",
9
+ "Loaded": "Indlæst",
10
+ "Progress": "Status",
11
+ "Fullscreen": "Fuldskærm",
12
+ "Non-Fullscreen": "Luk fuldskærm",
13
+ "Mute": "Uden lyd",
14
+ "Unmuted": "Med lyd",
15
+ "Playback Rate": "Afspilningsrate",
16
+ "Subtitles": "Undertekster",
17
+ "subtitles off": "Uden undertekster",
18
+ "Captions": "Undertekster for hørehæmmede",
19
+ "captions off": "Uden undertekster for hørehæmmede",
20
+ "Chapters": "Kapitler",
21
+ "You aborted the media playback": "Du afbrød videoafspilningen.",
22
+ "A network error caused the media download to fail part-way.": "En netværksfejl fik download af videoen til at fejle.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikke indlæses, enten fordi serveren eller netværket fejlede, eller fordi formatet ikke er understøttet.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoafspilningen blev afbrudt på grund af ødelagte data eller fordi videoen benyttede faciliteter som din browser ikke understøtter.",
25
+ "No compatible source was found for this media.": "Fandt ikke en kompatibel kilde for denne media."
26
+ });
video-js/lang/de.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("de",{
18
  "Captions": "Untertitel",
19
  "captions off": "Untertitel aus",
20
  "Chapters": "Kapitel",
21
- "You aborted the video playback": "Sie haben die Videowiedergabe abgebrochen.",
22
- "A network error caused the video download to fail part-way.": "Der Videodownload ist aufgrund eines Netzwerkfehlers fehlgeschlagen.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "Die Videowiedergabe wurde entweder wegen eines Problems mit einem beschädigten Video oder wegen verwendeten Funktionen, die vom Browser nicht unterstützt werden, abgebrochen.",
25
- "No compatible source was found for this video.": "Für dieses Video wurde keine kompatible Quelle gefunden."
26
  });
18
  "Captions": "Untertitel",
19
  "captions off": "Untertitel aus",
20
  "Chapters": "Kapitel",
21
+ "You aborted the media playback": "Sie haben die Videowiedergabe abgebrochen.",
22
+ "A network error caused the media download to fail part-way.": "Der Videodownload ist aufgrund eines Netzwerkfehlers fehlgeschlagen.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Die Videowiedergabe wurde entweder wegen eines Problems mit einem beschädigten Video oder wegen verwendeten Funktionen, die vom Browser nicht unterstützt werden, abgebrochen.",
25
+ "No compatible source was found for this media.": "Für dieses Video wurde keine kompatible Quelle gefunden."
26
  });
video-js/lang/es.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("es",{
18
  "Captions": "Subtítulos especiales",
19
  "captions off": "Subtítulos especiales desactivados",
20
  "Chapters": "Capítulos",
21
- "You aborted the video playback": "Ha interrumpido la reproducción del vídeo.",
22
- "A network error caused the video download to fail part-way.": "Un error de red ha interrumpido la descarga del vídeo.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "No se ha podido cargar el vídeo debido a un fallo de red o del servidor o porque el formato es incompatible.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "La reproducción de vídeo se ha interrumpido por un problema de corrupción de datos o porque el vídeo precisa funciones que su navegador no ofrece.",
25
- "No compatible source was found for this video.": "No se ha encontrado ninguna fuente compatible con este vídeo."
26
  });
18
  "Captions": "Subtítulos especiales",
19
  "captions off": "Subtítulos especiales desactivados",
20
  "Chapters": "Capítulos",
21
+ "You aborted the media playback": "Ha interrumpido la reproducción del vídeo.",
22
+ "A network error caused the media download to fail part-way.": "Un error de red ha interrumpido la descarga del vídeo.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "No se ha podido cargar el vídeo debido a un fallo de red o del servidor o porque el formato es incompatible.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La reproducción de vídeo se ha interrumpido por un problema de corrupción de datos o porque el vídeo precisa funciones que su navegador no ofrece.",
25
+ "No compatible source was found for this media.": "No se ha encontrado ninguna fuente compatible con este vídeo."
26
  });
video-js/lang/fi.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ videojs.addLanguage("fi",{
2
+ "Play": "Toisto",
3
+ "Pause": "Tauko",
4
+ "Current Time": "Tämänhetkinen aika",
5
+ "Duration Time": "Kokonaisaika",
6
+ "Remaining Time": "Jäljellä oleva aika",
7
+ "Stream Type": "Lähetystyyppi",
8
+ "LIVE": "LIVE",
9
+ "Loaded": "Ladattu",
10
+ "Progress": "Edistyminen",
11
+ "Fullscreen": "Koko näyttö",
12
+ "Non-Fullscreen": "Koko näyttö pois",
13
+ "Mute": "Ääni pois",
14
+ "Unmuted": "Ääni päällä",
15
+ "Playback Rate": "Toistonopeus",
16
+ "Subtitles": "Tekstitys",
17
+ "subtitles off": "Tekstitys pois",
18
+ "Captions": "Tekstitys",
19
+ "captions off": "Tekstitys pois",
20
+ "Chapters": "Kappaleet",
21
+ "You aborted the media playback": "Olet keskeyttänyt videotoiston.",
22
+ "A network error caused the media download to fail part-way.": "Verkkovirhe keskeytti videon latauksen.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videon lataus ei onnistunut joko palvelin- tai verkkovirheestä tai väärästä formaatista johtuen.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videon toisto keskeytyi, koska media on vaurioitunut tai käyttää käyttää toimintoja, joita selaimesi ei tue.",
25
+ "No compatible source was found for this media.": "Tälle videolle ei löytynyt yhteensopivaa lähdettä."
26
+ });
video-js/lang/fr.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("fr",{
18
  "Captions": "Sous-titres",
19
  "captions off": "Sous-titres désactivés",
20
  "Chapters": "Chapitres",
21
- "You aborted the video playback": "Vous avez interrompu la lecture de la vidéo.",
22
- "A network error caused the video download to fail part-way.": "Une erreur de réseau a interrompu le téléchargement de la vidéo.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Cette vidéo n'a pas pu être chargée, soit parce que le serveur ou le réseau a échoué ou parce que le format n'est pas reconnu.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "La lecture de la vidéo a été interrompue à cause d'un problème de corruption ou parce que la vidéo utilise des fonctionnalités non prises en charge par votre navigateur.",
25
- "No compatible source was found for this video.": "Aucune source compatible n'a été trouvée pour cette vidéo."
26
  });
18
  "Captions": "Sous-titres",
19
  "captions off": "Sous-titres désactivés",
20
  "Chapters": "Chapitres",
21
+ "You aborted the media playback": "Vous avez interrompu la lecture de la vidéo.",
22
+ "A network error caused the media download to fail part-way.": "Une erreur de réseau a interrompu le téléchargement de la vidéo.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Cette vidéo n'a pas pu être chargée, soit parce que le serveur ou le réseau a échoué ou parce que le format n'est pas reconnu.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La lecture de la vidéo a été interrompue à cause d'un problème de corruption ou parce que la vidéo utilise des fonctionnalités non prises en charge par votre navigateur.",
25
+ "No compatible source was found for this media.": "Aucune source compatible n'a été trouvée pour cette vidéo."
26
  });
video-js/lang/hr.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ videojs.addLanguage("hr",{
2
+ "Play": "Pusti",
3
+ "Pause": "Pauza",
4
+ "Current Time": "Trenutno vrijeme",
5
+ "Duration Time": "Vrijeme trajanja",
6
+ "Remaining Time": "Preostalo vrijeme",
7
+ "Stream Type": "Način strimovanja",
8
+ "LIVE": "UŽIVO",
9
+ "Loaded": "Učitan",
10
+ "Progress": "Progres",
11
+ "Fullscreen": "Puni ekran",
12
+ "Non-Fullscreen": "Mali ekran",
13
+ "Mute": "Prigušen",
14
+ "Unmuted": "Ne-prigušen",
15
+ "Playback Rate": "Stopa reprodukcije",
16
+ "Subtitles": "Podnaslov",
17
+ "subtitles off": "Podnaslov deaktiviran",
18
+ "Captions": "Titlovi",
19
+ "captions off": "Titlovi deaktivirani",
20
+ "Chapters": "Poglavlja",
21
+ "You aborted the media playback": "Isključili ste reprodukciju videa.",
22
+ "A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.",
25
+ "No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa."
26
+ });
video-js/lang/hu.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("hu",{
18
  "Captions": "Magyarázó szöveg",
19
  "captions off": "Magyarázó szöveg kikapcsolva",
20
  "Chapters": "Fejezetek",
21
- "You aborted the video playback": "Leállította a lejátszást",
22
- "A network error caused the video download to fail part-way.": "Hálózati hiba miatt a videó részlegesen töltődött le.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "A videó nem tölthető be hálózati vagy kiszolgálói hiba miatt, vagy a formátuma nem támogatott.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "A lejátszás adatsérülés miatt leállt, vagy a videó egyes tulajdonságait a böngészője nem támogatja.",
25
- "No compatible source was found for this video.": "Nincs kompatibilis forrás ehhez a videóhoz."
26
  });
18
  "Captions": "Magyarázó szöveg",
19
  "captions off": "Magyarázó szöveg kikapcsolva",
20
  "Chapters": "Fejezetek",
21
+ "You aborted the media playback": "Leállította a lejátszást",
22
+ "A network error caused the media download to fail part-way.": "Hálózati hiba miatt a videó részlegesen töltődött le.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "A videó nem tölthető be hálózati vagy kiszolgálói hiba miatt, vagy a formátuma nem támogatott.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "A lejátszás adatsérülés miatt leállt, vagy a videó egyes tulajdonságait a böngészője nem támogatja.",
25
+ "No compatible source was found for this media.": "Nincs kompatibilis forrás ehhez a videóhoz."
26
  });
video-js/lang/it.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("it",{
18
  "Captions": "Sottotitoli non udenti",
19
  "captions off": "Senza sottotitoli non udenti",
20
  "Chapters": "Capitolo",
21
- "You aborted the video playback": "La riproduzione del filmato è stata interrotta.",
22
- "A network error caused the video download to fail part-way.": "Il download del filmato è stato interrotto a causa di un problema rete.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Il filmato non può essere caricato a causa di un errore nel server o nella rete o perché il formato non viene supportato.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "La riproduzione del filmato è stata interrotta a causa di un file danneggiato o per l’utilizzo di impostazioni non supportate dal browser.",
25
- "No compatible source was found for this video.": "Non ci sono fonti compatibili per questo filmato."
26
  });
18
  "Captions": "Sottotitoli non udenti",
19
  "captions off": "Senza sottotitoli non udenti",
20
  "Chapters": "Capitolo",
21
+ "You aborted the media playback": "La riproduzione del filmato è stata interrotta.",
22
+ "A network error caused the media download to fail part-way.": "Il download del filmato è stato interrotto a causa di un problema rete.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Il filmato non può essere caricato a causa di un errore nel server o nella rete o perché il formato non viene supportato.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La riproduzione del filmato è stata interrotta a causa di un file danneggiato o per l’utilizzo di impostazioni non supportate dal browser.",
25
+ "No compatible source was found for this media.": "Non ci sono fonti compatibili per questo filmato."
26
  });
video-js/lang/ja.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("ja",{
18
  "Captions": "キャプション",
19
  "captions off": "キャプション オフ",
20
  "Chapters": "チャプター",
21
- "You aborted the video playback": "動画再生を中止しました",
22
- "A network error caused the video download to fail part-way.": "ネットワーク エラーにより動画のダウンロードが途中で失敗しました",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "サーバーまたはネットワークのエラー、またはフォーマットがサポートされていないため、動画をロードできませんでした",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "破損の問題、またはお使いのブラウザがサポートしていない機能が動画に使用されていたため、動画の再生が中止されました",
25
- "No compatible source was found for this video.": "この動画に対して互換性のあるソースが見つかりませんでした"
26
  });
18
  "Captions": "キャプション",
19
  "captions off": "キャプション オフ",
20
  "Chapters": "チャプター",
21
+ "You aborted the media playback": "動画再生を中止しました",
22
+ "A network error caused the media download to fail part-way.": "ネットワーク エラーにより動画のダウンロードが途中で失敗しました",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "サーバーまたはネットワークのエラー、またはフォーマットがサポートされていないため、動画をロードできませんでした",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "破損の問題、またはお使いのブラウザがサポートしていない機能が動画に使用されていたため、動画の再生が中止されました",
25
+ "No compatible source was found for this media.": "この動画に対して互換性のあるソースが見つかりませんでした"
26
  });
video-js/lang/ko.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("ko",{
18
  "Captions": "자막",
19
  "captions off": "자막 끄기",
20
  "Chapters": "챕터",
21
- "You aborted the video playback": "비디오 재생을 취소했습니다.",
22
- "A network error caused the video download to fail part-way.": "네트워크 오류로 인하여 비디오 일부를 다운로드하지 못 했습니다.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "비디오를 로드할 수 없습니다. 서버 혹은 네트워크 오류 때문이거나 지원되지 않는 형식 때문일 수 있습니다.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "비디오 재생이 취소됐습니다. 비디오가 손상되었거나 비디오가 사용하는 기능을 브라우저에서 지원하지 않는 것 같습니다.",
25
- "No compatible source was found for this video.": "비디오에 호환되지 않는 소스가 있습니다."
26
  });
18
  "Captions": "자막",
19
  "captions off": "자막 끄기",
20
  "Chapters": "챕터",
21
+ "You aborted the media playback": "비디오 재생을 취소했습니다.",
22
+ "A network error caused the media download to fail part-way.": "네트워크 오류로 인하여 비디오 일부를 다운로드하지 못 했습니다.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "비디오를 로드할 수 없습니다. 서버 혹은 네트워크 오류 때문이거나 지원되지 않는 형식 때문일 수 있습니다.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "비디오 재생이 취소됐습니다. 비디오가 손상되었거나 비디오가 사용하는 기능을 브라우저에서 지원하지 않는 것 같습니다.",
25
+ "No compatible source was found for this media.": "비디오에 호환되지 않는 소스가 있습니다."
26
  });
video-js/lang/nb.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ videojs.addLanguage("nb",{
2
+ "Play": "Spill",
3
+ "Pause": "Pause",
4
+ "Current Time": "Aktuell tid",
5
+ "Duration Time": "Varighet",
6
+ "Remaining Time": "Gjenstående tid",
7
+ "Stream Type": "Type strøm",
8
+ "LIVE": "DIREKTE",
9
+ "Loaded": "Lastet inn",
10
+ "Progress": "Status",
11
+ "Fullscreen": "Fullskjerm",
12
+ "Non-Fullscreen": "Lukk fullskjerm",
13
+ "Mute": "Lyd av",
14
+ "Unmute": "Lyd på",
15
+ "Playback Rate": "Avspillingsrate",
16
+ "Subtitles": "Undertekst på",
17
+ "subtitles off": "Undertekst av",
18
+ "Captions": "Undertekst for hørselshemmede på",
19
+ "captions off": "Undertekst for hørselshemmede av",
20
+ "Chapters": "Kapitler",
21
+ "You aborted the media playback": "Du avbrøt avspillingen.",
22
+ "A network error caused the media download to fail part-way.": "En nettverksfeil avbrøt nedlasting av videoen.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikke lastes ned, på grunn av nettverksfeil eller serverfeil, eller fordi formatet ikke er støttet.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoavspillingen ble avbrudt på grunn av ødelagte data eller fordi videoen ville gjøre noe som nettleseren din ikke har støtte for.",
25
+ "No compatible source was found for this media.": "Fant ikke en kompatibel kilde for dette mediainnholdet."
26
+ });
video-js/lang/nl.js CHANGED
@@ -1,26 +1,26 @@
1
  videojs.addLanguage("nl",{
2
  "Play": "Afspelen",
3
  "Pause": "Pauze",
4
- "Current Time": "Huidige Tijd",
5
  "Duration Time": "Looptijd",
6
- "Remaining Time": "Resterende Tijd",
7
- "Stream Type": "Stream Type",
8
  "LIVE": "LIVE",
9
  "Loaded": "Geladen",
10
  "Progress": "Status",
11
  "Fullscreen": "Volledig scherm",
12
  "Non-Fullscreen": "Geen volledig scherm",
13
- "Mute": "Geluid Uit",
14
- "Unmuted": "Geluid Aan",
15
- "Playback Rate": "Weergave Rate",
16
  "Subtitles": "Ondertiteling",
17
  "subtitles off": "Ondertiteling uit",
18
- "Captions": "Onderschriften",
19
- "captions off": "Onderschriften uit",
20
  "Chapters": "Hoofdstukken",
21
- "You aborted the video playback": "Je hebt de video weergave afgebroken.",
22
- "A network error caused the video download to fail part-way.": "De video download is mislukt door een netwerkfout.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "De video kon niet worden geladen, veroorzaakt door een server of netwerkfout of het formaat word niet ondersteund.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "De video weergave is afgebroken omdat deze beschadigd is of de video gebruikt functionaliteit die niet door je browser word ondersteund.",
25
- "No compatible source was found for this video.": "Voor deze video is geen ondersteunde bron gevonden."
26
  });
1
  videojs.addLanguage("nl",{
2
  "Play": "Afspelen",
3
  "Pause": "Pauze",
4
+ "Current Time": "Huidige tijd",
5
  "Duration Time": "Looptijd",
6
+ "Remaining Time": "Resterende tijd",
7
+ "Stream Type": "Streamtype",
8
  "LIVE": "LIVE",
9
  "Loaded": "Geladen",
10
  "Progress": "Status",
11
  "Fullscreen": "Volledig scherm",
12
  "Non-Fullscreen": "Geen volledig scherm",
13
+ "Mute": "Geluid uit",
14
+ "Unmuted": "Geluid aan",
15
+ "Playback Rate": "Weergavesnelheid",
16
  "Subtitles": "Ondertiteling",
17
  "subtitles off": "Ondertiteling uit",
18
+ "Captions": "Ondertiteling",
19
+ "captions off": "Ondertiteling uit",
20
  "Chapters": "Hoofdstukken",
21
+ "You aborted the media playback": "U hebt de mediaweergave afgebroken.",
22
+ "A network error caused the media download to fail part-way.": "De mediadownload is mislukt door een netwerkfout.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "De media kon niet worden geladen, vanwege een server- of netwerkfout of doordat het formaat niet wordt ondersteund.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "De mediaweergave is afgebroken vanwege beschadigde data of het mediabestand gebruikt functies die niet door uw browser worden ondersteund.",
25
+ "No compatible source was found for this media.": "Voor deze media is geen ondersteunde bron gevonden."
26
  });
video-js/lang/nn.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ videojs.addLanguage("nn",{
2
+ "Play": "Spel",
3
+ "Pause": "Pause",
4
+ "Current Time": "Aktuell tid",
5
+ "Duration Time": "Varigheit",
6
+ "Remaining Time": "Tid attende",
7
+ "Stream Type": "Type straum",
8
+ "LIVE": "DIREKTE",
9
+ "Loaded": "Lasta inn",
10
+ "Progress": "Status",
11
+ "Fullscreen": "Fullskjerm",
12
+ "Non-Fullscreen": "Stenga fullskjerm",
13
+ "Mute": "Ljod av",
14
+ "Unmute": "Ljod på",
15
+ "Playback Rate": "Avspelingsrate",
16
+ "Subtitles": "Teksting på",
17
+ "subtitles off": "Teksting av",
18
+ "Captions": "Teksting for høyrselshemma på",
19
+ "captions off": "Teksting for høyrselshemma av",
20
+ "Chapters": "Kapitel",
21
+ "You aborted the media playback": "Du avbraut avspelinga.",
22
+ "A network error caused the media download to fail part-way.": "Ein nettverksfeil avbraut nedlasting av videoen.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikkje lastas ned, på grunn av ein nettverksfeil eller serverfeil, eller av di formatet ikkje er stoda.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoavspelinga blei broten på grunn av øydelagde data eller av di videoen ville gjera noe som nettlesaren din ikkje stodar.",
25
+ "No compatible source was found for this media.": "Fant ikke en kompatibel kilde for dette mediainnholdet."
26
+ });
video-js/lang/pt-BR.js CHANGED
@@ -7,7 +7,7 @@ videojs.addLanguage("pt-BR",{
7
  "Stream Type": "Tipo de Stream",
8
  "LIVE": "AO VIVO",
9
  "Loaded": "Carregado",
10
- "Progress": "Progressão",
11
  "Fullscreen": "Tela Cheia",
12
  "Non-Fullscreen": "Tela Normal",
13
  "Mute": "Mudo",
@@ -18,9 +18,9 @@ videojs.addLanguage("pt-BR",{
18
  "Captions": "Anotações",
19
  "captions off": "Sem Anotações",
20
  "Chapters": "Capítulos",
21
- "You aborted the video playback": "Você parou a execução de vídeo.",
22
- "A network error caused the video download to fail part-way.": "Um erro na rede fez o vídeo parar parcialmente.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "O vídeo não pode ser carregado, ou porque houve um problema com sua rede ou pelo formato do vídeo não ser suportado.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "A Execução foi interrompida por um problema com o vídeo ou por seu navegador não dar suporte ao seu formato.",
25
- "No compatible source was found for this video.": "Não foi encontrada fonte de vídeo compatível."
26
  });
7
  "Stream Type": "Tipo de Stream",
8
  "LIVE": "AO VIVO",
9
  "Loaded": "Carregado",
10
+ "Progress": "Progresso",
11
  "Fullscreen": "Tela Cheia",
12
  "Non-Fullscreen": "Tela Normal",
13
  "Mute": "Mudo",
18
  "Captions": "Anotações",
19
  "captions off": "Sem Anotações",
20
  "Chapters": "Capítulos",
21
+ "You aborted the media playback": "Você parou a execução de vídeo.",
22
+ "A network error caused the media download to fail part-way.": "Um erro na rede fez o vídeo parar parcialmente.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "O vídeo não pode ser carregado, ou porque houve um problema com sua rede ou pelo formato do vídeo não ser suportado.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "A Execução foi interrompida por um problema com o vídeo ou por seu navegador não dar suporte ao seu formato.",
25
+ "No compatible source was found for this media.": "Não foi encontrada fonte de vídeo compatível."
26
  });
video-js/lang/ru.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("ru",{
18
  "Captions": "Подписи",
19
  "captions off": "Подписи выкл.",
20
  "Chapters": "Главы",
21
- "You aborted the video playback": "Вы прервали воспроизведение видео",
22
- "A network error caused the video download to fail part-way.": "Ошибка сети вызвала сбой во время загрузки видео.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Невозможно загрузить видео из-за сетевого или серверного сбоя либо формат не поддерживается.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "Воспроизведение видео было приостановлено из-за повреждения либо в связи с тем, что видео использует функции, неподдерживаемые вашим браузером.",
25
- "No compatible source was found for this video.": "Совместимые источники для этого видео отсутствуют."
26
  });
18
  "Captions": "Подписи",
19
  "captions off": "Подписи выкл.",
20
  "Chapters": "Главы",
21
+ "You aborted the media playback": "Вы прервали воспроизведение видео",
22
+ "A network error caused the media download to fail part-way.": "Ошибка сети вызвала сбой во время загрузки видео.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Невозможно загрузить видео из-за сетевого или серверного сбоя либо формат не поддерживается.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Воспроизведение видео было приостановлено из-за повреждения либо в связи с тем, что видео использует функции, неподдерживаемые вашим браузером.",
25
+ "No compatible source was found for this media.": "Совместимые источники для этого видео отсутствуют."
26
  });
video-js/lang/sr.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ videojs.addLanguage("sr",{
2
+ "Play": "Pusti",
3
+ "Pause": "Pauza",
4
+ "Current Time": "Trenutno vrijeme",
5
+ "Duration Time": "Vrijeme trajanja",
6
+ "Remaining Time": "Preostalo vrijeme",
7
+ "Stream Type": "Način strimovanja",
8
+ "LIVE": "UŽIVO",
9
+ "Loaded": "Učitan",
10
+ "Progress": "Progres",
11
+ "Fullscreen": "Puni ekran",
12
+ "Non-Fullscreen": "Mali ekran",
13
+ "Mute": "Prigušen",
14
+ "Unmuted": "Ne-prigušen",
15
+ "Playback Rate": "Stopa reprodukcije",
16
+ "Subtitles": "Podnaslov",
17
+ "subtitles off": "Podnaslov deaktiviran",
18
+ "Captions": "Titlovi",
19
+ "captions off": "Titlovi deaktivirani",
20
+ "Chapters": "Poglavlja",
21
+ "You aborted the media playback": "Isključili ste reprodukciju videa.",
22
+ "A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.",
25
+ "No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa."
26
+ });
video-js/lang/sv.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ videojs.addLanguage("sv",{
2
+ "Play": "Spela",
3
+ "Pause": "Pausa",
4
+ "Current Time": "Aktuell tid",
5
+ "Duration Time": "Total tid",
6
+ "Remaining Time": "Återstående tid",
7
+ "Stream Type": "Strömningstyp",
8
+ "LIVE": "LIVE",
9
+ "Loaded": "Laddad",
10
+ "Progress": "Förlopp",
11
+ "Fullscreen": "Fullskärm",
12
+ "Non-Fullscreen": "Ej fullskärm",
13
+ "Mute": "Ljud av",
14
+ "Unmuted": "Ljud på",
15
+ "Playback Rate": "Uppspelningshastighet",
16
+ "Subtitles": "Text på",
17
+ "subtitles off": "Text av",
18
+ "Captions": "Text på",
19
+ "captions off": "Text av",
20
+ "Chapters": "Kapitel",
21
+ "You aborted the media playback": "Du har avbrutit videouppspelningen.",
22
+ "A network error caused the media download to fail part-way.": "Ett nätverksfel gjorde att nedladdningen av videon avbröts.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Det gick inte att ladda videon, antingen på grund av ett server- eller nätverksfel, eller för att formatet inte stöds.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Uppspelningen avbröts på grund av att videon är skadad, eller också för att videon använder funktioner som din webbläsare inte stöder.",
25
+ "No compatible source was found for this media.": "Det gick inte att hitta någon kompatibel källa för den här videon."
26
+ });
video-js/lang/tr.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("tr",{
18
  "Captions": "Ek Açıklamalar",
19
  "captions off": "Ek Açıklamalar Kapalı",
20
  "Chapters": "Bölümler",
21
- "You aborted the video playback": "Video oynatmayı iptal ettiniz",
22
- "A network error caused the video download to fail part-way.": "Video indirilirken bağlantı sorunu oluştu.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Video oynatılamadı, yada sunucu hattası veya belirtilen format desteklenmiyor.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "Tarayıcınız desteklemediği için videoda hata oluştu.",
25
- "No compatible source was found for this video.": "Video için kaynak bulunamadı."
26
  });
18
  "Captions": "Ek Açıklamalar",
19
  "captions off": "Ek Açıklamalar Kapalı",
20
  "Chapters": "Bölümler",
21
+ "You aborted the media playback": "Video oynatmayı iptal ettiniz",
22
+ "A network error caused the media download to fail part-way.": "Video indirilirken bağlantı sorunu oluştu.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video oynatılamadı, ya da sunucu hatası veya belirtilen format desteklenmiyor.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Tarayıcınız desteklemediği için videoda hata oluştu.",
25
+ "No compatible source was found for this media.": "Video için kaynak bulunamadı."
26
  });
video-js/lang/uk.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("uk",{
18
  "Captions": "Підписи",
19
  "captions off": "Без підписів",
20
  "Chapters": "Розділи",
21
- "You aborted the video playback": "Ви припинили відтворення відео",
22
- "A network error caused the video download to fail part-way.": "Помилка мережі викликала збій під час завантаження відео.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Неможливо завантажити відео через мережевий чи серверний збій або формат не підтримується.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "Відтворення відео було припинено через пошкодження або у зв'язку з тим, що відео використовує функції, які не підтримуються вашим браузером.",
25
- "No compatible source was found for this video.": "Сумісні джерела для цього відео відсутні."
26
  });
18
  "Captions": "Підписи",
19
  "captions off": "Без підписів",
20
  "Chapters": "Розділи",
21
+ "You aborted the media playback": "Ви припинили відтворення відео",
22
+ "A network error caused the media download to fail part-way.": "Помилка мережі викликала збій під час завантаження відео.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Неможливо завантажити відео через мережевий чи серверний збій або формат не підтримується.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Відтворення відео було припинено через пошкодження або у зв'язку з тим, що відео використовує функції, які не підтримуються вашим браузером.",
25
+ "No compatible source was found for this media.": "Сумісні джерела для цього відео відсутні."
26
  });
video-js/lang/vi.js CHANGED
@@ -18,9 +18,9 @@ videojs.addLanguage("vi",{
18
  "Captions": "Chú thích",
19
  "captions off": "Tắt chú thích",
20
  "Chapters": "Chương",
21
- "You aborted the video playback": "Bạn đã hủy việc phát video.",
22
- "A network error caused the video download to fail part-way.": "Một lỗi mạng dẫn đến việc tải video bị lỗi.",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Video không tải được, mạng hay server có lỗi hoặc định dạng không được hỗ trợ.",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "Phát video đã bị hủy do một sai lỗi hoặc video sử dụng những tính năng trình duyệt không hỗ trợ.",
25
- "No compatible source was found for this video.": "Không có nguồn tương thích cho video này."
26
  });
18
  "Captions": "Chú thích",
19
  "captions off": "Tắt chú thích",
20
  "Chapters": "Chương",
21
+ "You aborted the media playback": "Bạn đã hủy việc phát media.",
22
+ "A network error caused the media download to fail part-way.": "Một lỗi mạng dẫn đến việc tải media bị lỗi.",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video không tải được, mạng hay server có lỗi hoặc định dạng không được hỗ trợ.",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Phát media đã bị hủy do một sai lỗi hoặc media sử dụng những tính năng trình duyệt không hỗ trợ.",
25
+ "No compatible source was found for this media.": "Không có nguồn tương thích cho media này."
26
  });
video-js/lang/zh-CN.js CHANGED
@@ -18,10 +18,10 @@ videojs.addLanguage("zh-CN",{
18
  "Captions": "内嵌字幕",
19
  "captions off": "内嵌字幕关闭",
20
  "Chapters": "节目段落",
21
- "You aborted the video playback": "视频播放被终止",
22
- "A network error caused the video download to fail part-way.": "网络错误导致视频下载中途失败。",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "视频因格式不支持或者服务器或网络的问题无法加载。",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "由于视频文件损坏或是该视频使用了你的浏览器不支持的功能,播放终止。",
25
- "No compatible source was found for this video.": "无法找到此视频兼容的源。",
26
- "The video is encrypted and we do not have the keys to decrypt it.": "视频已加密,无法解密。"
27
  });
18
  "Captions": "内嵌字幕",
19
  "captions off": "内嵌字幕关闭",
20
  "Chapters": "节目段落",
21
+ "You aborted the media playback": "视频播放被终止",
22
+ "A network error caused the media download to fail part-way.": "网络错误导致视频下载中途失败。",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "视频因格式不支持或者服务器或网络的问题无法加载。",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "由于视频文件损坏或是该视频使用了你的浏览器不支持的功能,播放终止。",
25
+ "No compatible source was found for this media.": "无法找到此视频兼容的源。",
26
+ "The media is encrypted and we do not have the keys to decrypt it.": "视频已加密,无法解密。"
27
  });
video-js/lang/zh-TW.js CHANGED
@@ -18,10 +18,10 @@ videojs.addLanguage("zh-TW",{
18
  "Captions": "內嵌字幕",
19
  "captions off": "關閉內嵌字幕",
20
  "Chapters": "章節",
21
- "You aborted the video playback": "影片播放已終止",
22
- "A network error caused the video download to fail part-way.": "網路錯誤導致影片下載失敗。",
23
- "The video could not be loaded, either because the server or network failed or because the format is not supported.": "影片因格式不支援或者伺服器或網路的問題無法載入。",
24
- "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "由於影片檔案損毀或是該影片使用了您的瀏覽器不支援的功能,播放終止。",
25
- "No compatible source was found for this video.": "無法找到相容此影片的來源。",
26
- "The video is encrypted and we do not have the keys to decrypt it.": "影片已加密,無法解密。"
27
  });
18
  "Captions": "內嵌字幕",
19
  "captions off": "關閉內嵌字幕",
20
  "Chapters": "章節",
21
+ "You aborted the media playback": "影片播放已終止",
22
+ "A network error caused the media download to fail part-way.": "網路錯誤導致影片下載失敗。",
23
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "影片因格式不支援或者伺服器或網路的問題無法載入。",
24
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "由於影片檔案損毀或是該影片使用了您的瀏覽器不支援的功能,播放終止。",
25
+ "No compatible source was found for this media.": "無法找到相容此影片的來源。",
26
+ "The media is encrypted and we do not have the keys to decrypt it.": "影片已加密,無法解密。"
27
  });
video-js/video-js.css CHANGED
@@ -1,5 +1 @@
1
- /*!
2
- Video.js Default Styles (http://videojs.com)
3
- Version 4.12.11
4
- Create your own skin at http://designer.videojs.com
5
- */.vjs-default-skin{color:#ccc}@font-face{font-family:VideoJS;src:url(font/vjs.eot);src:url(font/vjs.eot?#iefix) format('embedded-opentype'),url(font/vjs.woff) format('woff'),url(font/vjs.ttf) format('truetype'),url(font/vjs.svg#icomoon) format('svg');font-weight:400;font-style:normal}.vjs-default-skin .vjs-slider{outline:0;position:relative;cursor:pointer;padding:0;background-color:#333;background-color:rgba(51,51,51,.9)}.vjs-default-skin .vjs-slider:focus{-webkit-box-shadow:0 0 2em #fff;-moz-box-shadow:0 0 2em #fff;box-shadow:0 0 2em #fff}.vjs-default-skin .vjs-slider-handle{position:absolute;left:0;top:0}.vjs-default-skin .vjs-slider-handle:before{content:"\e009";font-family:VideoJS;font-size:1em;line-height:1;text-align:center;text-shadow:0 0 1em #fff;position:absolute;top:0;left:0;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.vjs-default-skin .vjs-control-bar{display:none;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#07141e;background-color:rgba(7,20,30,.7)}.vjs-default-skin.vjs-has-started .vjs-control-bar{display:block;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-default-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{display:block;visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-default-skin.vjs-controls-disabled .vjs-control-bar{display:none}.vjs-default-skin.vjs-using-native-controls .vjs-control-bar{display:none}.vjs-default-skin.vjs-error .vjs-control-bar{display:none}.vjs-audio.vjs-default-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible}@media \0screen{.vjs-default-skin.vjs-user-inactive.vjs-playing .vjs-control-bar :before{content:""}}.vjs-default-skin .vjs-control{outline:0;position:relative;float:left;text-align:center;margin:0;padding:0;height:3em;width:4em}.vjs-default-skin .vjs-control:before{font-family:VideoJS;font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.5)}.vjs-default-skin .vjs-control:focus:before,.vjs-default-skin .vjs-control:hover:before{text-shadow:0 0 1em #fff}.vjs-default-skin .vjs-control:focus{}.vjs-default-skin .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-default-skin .vjs-play-control{width:5em;cursor:pointer}.vjs-default-skin .vjs-play-control:before{content:"\e001"}.vjs-default-skin.vjs-playing .vjs-play-control:before{content:"\e002"}.vjs-default-skin .vjs-playback-rate .vjs-playback-rate-value{font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.5)}.vjs-default-skin .vjs-playback-rate.vjs-menu-button .vjs-menu .vjs-menu-content{width:4em;left:-2em;list-style:none}.vjs-default-skin .vjs-mute-control,.vjs-default-skin .vjs-volume-menu-button{cursor:pointer;float:right}.vjs-default-skin .vjs-mute-control:before,.vjs-default-skin .vjs-volume-menu-button:before{content:"\e006"}.vjs-default-skin .vjs-mute-control.vjs-vol-0:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-0:before{content:"\e003"}.vjs-default-skin .vjs-mute-control.vjs-vol-1:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-1:before{content:"\e004"}.vjs-default-skin .vjs-mute-control.vjs-vol-2:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-2:before{content:"\e005"}.vjs-default-skin .vjs-volume-control{width:5em;float:right}.vjs-default-skin .vjs-volume-bar{width:5em;height:.6em;margin:1.1em auto 0}.vjs-default-skin .vjs-volume-level{position:absolute;top:0;left:0;height:.5em;width:100%;background:#66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat}.vjs-default-skin .vjs-volume-bar .vjs-volume-handle{width:.5em;height:.5em;left:4.5em}.vjs-default-skin .vjs-volume-handle:before{font-size:.9em;top:-.2em;left:-.2em;width:1em;height:1em}.vjs-default-skin .vjs-volume-menu-button .vjs-menu{display:block;width:0;height:0;border-top-color:transparent}.vjs-default-skin .vjs-volume-menu-button .vjs-menu .vjs-menu-content{height:0;width:0}.vjs-default-skin .vjs-volume-menu-button:hover .vjs-menu,.vjs-default-skin .vjs-volume-menu-button .vjs-menu.vjs-lock-showing{border-top-color:rgba(7,40,50,.5)}.vjs-default-skin .vjs-volume-menu-button:hover .vjs-menu .vjs-menu-content,.vjs-default-skin .vjs-volume-menu-button .vjs-menu.vjs-lock-showing .vjs-menu-content{height:2.9em;width:10em}.vjs-default-skin .vjs-progress-control{position:absolute;left:0;right:0;width:auto;font-size:.3em;height:1em;top:-1em;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-default-skin:hover .vjs-progress-control{font-size:.9em;-webkit-transition:all .2s;-moz-transition:all .2s;-o-transition:all .2s;transition:all .2s}.vjs-default-skin .vjs-progress-holder{height:100%}.vjs-default-skin .vjs-progress-holder .vjs-play-progress,.vjs-default-skin .vjs-progress-holder .vjs-load-progress,.vjs-default-skin .vjs-progress-holder .vjs-load-progress div{position:absolute;display:block;height:100%;margin:0;padding:0;width:0;left:0;top:0}.vjs-default-skin .vjs-play-progress{background:#66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat}.vjs-default-skin .vjs-load-progress{background:#646464;background:rgba(255,255,255,.2)}.vjs-default-skin .vjs-load-progress div{background:#787878;background:rgba(255,255,255,.1)}.vjs-default-skin .vjs-seek-handle{width:1.5em;height:100%}.vjs-default-skin .vjs-seek-handle:before{padding-top:.1em}.vjs-default-skin.vjs-live .vjs-time-controls,.vjs-default-skin.vjs-live .vjs-time-divider,.vjs-default-skin.vjs-live .vjs-progress-control{display:none}.vjs-default-skin.vjs-live .vjs-live-display{display:block}.vjs-default-skin .vjs-live-display{display:none;font-size:1em;line-height:3em}.vjs-default-skin .vjs-time-controls{font-size:1em;line-height:3em}.vjs-default-skin .vjs-current-time{float:left}.vjs-default-skin .vjs-duration{float:left}.vjs-default-skin .vjs-remaining-time{display:none;float:left}.vjs-time-divider{float:left;line-height:3em}.vjs-default-skin .vjs-fullscreen-control{width:3.8em;cursor:pointer;float:right}.vjs-default-skin .vjs-fullscreen-control:before{content:"\e000"}.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control:before{content:"\e00b"}.vjs-default-skin .vjs-big-play-button{left:.5em;top:.5em;font-size:3em;display:block;z-index:2;position:absolute;width:4em;height:2.6em;text-align:center;vertical-align:middle;cursor:pointer;opacity:1;background-color:#07141e;background-color:rgba(7,20,30,.7);border:.1em solid #3b4249;-webkit-border-radius:.8em;-moz-border-radius:.8em;border-radius:.8em;-webkit-box-shadow:0 0 1em rgba(255,255,255,.25);-moz-box-shadow:0 0 1em rgba(255,255,255,.25);box-shadow:0 0 1em rgba(255,255,255,.25);-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-default-skin.vjs-big-play-centered .vjs-big-play-button{left:50%;margin-left:-2.1em;top:50%;margin-top:-1.4000000000000001em}.vjs-default-skin.vjs-controls-disabled .vjs-big-play-button{display:none}.vjs-default-skin.vjs-has-started .vjs-big-play-button{display:none}.vjs-default-skin.vjs-using-native-controls .vjs-big-play-button{display:none}.vjs-default-skin:hover .vjs-big-play-button,.vjs-default-skin .vjs-big-play-button:focus{outline:0;border-color:#fff;background-color:#505050;background-color:rgba(50,50,50,.75);-webkit-box-shadow:0 0 3em #fff;-moz-box-shadow:0 0 3em #fff;box-shadow:0 0 3em #fff;-webkit-transition:all 0s;-moz-transition:all 0s;-o-transition:all 0s;transition:all 0s}.vjs-default-skin .vjs-big-play-button:before{content:"\e001";font-family:VideoJS;line-height:2.6em;text-shadow:.05em .05em .1em #000;text-align:center;position:absolute;left:0;width:100%;height:100%}.vjs-error .vjs-big-play-button{display:none}.vjs-error-display{display:none}.vjs-error .vjs-error-display{display:block;position:absolute;left:0;top:0;width:100%;height:100%}.vjs-error .vjs-error-display:before{content:'X';font-family:Arial;font-size:4em;color:#666;line-height:1;text-shadow:.05em .05em .1em #000;text-align:center;vertical-align:middle;position:absolute;left:0;top:50%;margin-top:-.5em;width:100%}.vjs-error-display div{position:absolute;bottom:1em;right:0;left:0;font-size:1.4em;text-align:center;padding:3px;background:#000;background:rgba(0,0,0,.5)}.vjs-error-display a,.vjs-error-display a:visited{color:#F4A460}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;font-size:4em;line-height:1;width:1em;height:1em;margin-left:-.5em;margin-top:-.5em;opacity:.75}.vjs-waiting .vjs-loading-spinner,.vjs-seeking .vjs-loading-spinner{display:block;-webkit-animation:spin 1.5s infinite linear;-moz-animation:spin 1.5s infinite linear;-o-animation:spin 1.5s infinite linear;animation:spin 1.5s infinite linear}.vjs-error .vjs-loading-spinner{display:none;-webkit-animation:none;-moz-animation:none;-o-animation:none;animation:none}.vjs-default-skin .vjs-loading-spinner:before{content:"\e01e";font-family:VideoJS;position:absolute;top:0;left:0;width:1em;height:1em;text-align:center;text-shadow:0 0 .1em #000}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.vjs-default-skin .vjs-menu-button{float:right;cursor:pointer}.vjs-default-skin .vjs-menu{display:none;position:absolute;bottom:0;left:0;width:0;height:0;margin-bottom:3em;border-left:2em solid transparent;border-right:2em solid transparent;border-top:1.55em solid #000;border-top-color:rgba(7,40,50,.5)}.vjs-default-skin .vjs-menu-button .vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;position:absolute;width:10em;bottom:1.5em;max-height:15em;overflow:auto;left:-5em;background-color:#07141e;background-color:rgba(7,20,30,.7);-webkit-box-shadow:-.2em -.2em .3em rgba(255,255,255,.2);-moz-box-shadow:-.2em -.2em .3em rgba(255,255,255,.2);box-shadow:-.2em -.2em .3em rgba(255,255,255,.2)}.vjs-default-skin .vjs-menu-button:hover .vjs-control-content .vjs-menu,.vjs-default-skin .vjs-control-content .vjs-menu.vjs-lock-showing{display:block}.vjs-default-skin.vjs-scrubbing .vjs-menu-button:hover .vjs-control-content .vjs-menu{display:none}.vjs-default-skin .vjs-menu-button ul li{list-style:none;margin:0;padding:.3em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-default-skin .vjs-menu-button ul li.vjs-selected{background-color:#000}.vjs-default-skin .vjs-menu-button ul li:focus,.vjs-default-skin .vjs-menu-button ul li:hover,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:focus,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:hover{outline:0;color:#111;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.vjs-default-skin .vjs-menu-button ul li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em;font-weight:700;cursor:default}.vjs-default-skin .vjs-subtitles-button:before{content:"\e00c"}.vjs-default-skin .vjs-captions-button:before{content:"\e008"}.vjs-default-skin .vjs-chapters-button:before{content:"\e00c"}.vjs-default-skin .vjs-chapters-button.vjs-menu-button .vjs-menu .vjs-menu-content{width:24em;left:-12em}.vjs-default-skin .vjs-captions-button:focus .vjs-control-content:before,.vjs-default-skin .vjs-captions-button:hover .vjs-control-content:before{-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js{background-color:#000;position:relative;padding:0;font-size:10px;vertical-align:middle;font-weight:400;font-style:normal;font-family:Arial,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}.video-js:-moz-full-screen{position:absolute}body.vjs-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0;width:100%!important;height:100%!important;_position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-poster{background-repeat:no-repeat;background-position:50% 50%;background-size:contain;background-color:#000;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0}.vjs-poster img{display:block;margin:0 auto;max-height:100%;padding:0;width:100%}.video-js.vjs-has-started .vjs-poster{display:none}.video-js.vjs-audio.vjs-has-started .vjs-poster{display:block}.video-js.vjs-controls-disabled .vjs-poster{display:none}.video-js.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-text-track-display{position:absolute;top:0;left:0;bottom:3em;right:0;pointer-events:none}.vjs-caption-settings{position:relative;top:1em;background-color:#000;opacity:.75;color:#FFF;margin:0 auto;padding:.5em;height:15em;font-family:Arial,Helvetica,sans-serif;font-size:12px;width:40em}.vjs-caption-settings .vjs-tracksettings{top:0;bottom:2em;left:0;right:0;position:absolute;overflow:auto}.vjs-caption-settings .vjs-tracksettings-colors,.vjs-caption-settings .vjs-tracksettings-font{float:left}.vjs-caption-settings .vjs-tracksettings-colors:after,.vjs-caption-settings .vjs-tracksettings-font:after,.vjs-caption-settings .vjs-tracksettings-controls:after{clear:both}.vjs-caption-settings .vjs-tracksettings-controls{position:absolute;bottom:1em;right:1em}.vjs-caption-settings .vjs-tracksetting{margin:5px;padding:3px;min-height:40px}.vjs-caption-settings .vjs-tracksetting label{display:block;width:100px;margin-bottom:5px}.vjs-caption-settings .vjs-tracksetting span{display:inline;margin-left:5px}.vjs-caption-settings .vjs-tracksetting>div{margin-bottom:5px;min-height:20px}.vjs-caption-settings .vjs-tracksetting>div:last-child{margin-bottom:0;padding-bottom:0;min-height:0}.vjs-caption-settings label>input{margin-right:10px}.vjs-caption-settings input[type=button]{width:40px;height:40px}.vjs-hidden{display:none!important}.vjs-lock-showing{display:block!important;opacity:1;visibility:visible}.vjs-no-js{padding:2em;color:#ccc;background-color:#333;font-size:1.8em;font-family:Arial,sans-serif;text-align:center;width:30em;height:15em;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#F4A460}
1
+ @charset "UTF-8";.video-js .vjs-big-play-button:before,.video-js .vjs-control:before,.video-js .vjs-modal-dialog,.vjs-modal-dialog .vjs-modal-dialog-content{position:absolute;top:0;left:0;width:100%;height:100%}.video-js .vjs-big-play-button:before,.video-js .vjs-control:before{text-align:center}@font-face{font-family:VideoJS;src:url(font/VideoJS.eot?#iefix) format("eot")}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAA4wAAoAAAAAFfAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAD4AAABWUZFeBGNtYXAAAAE0AAAAOgAAAUriLxC2Z2x5ZgAAAXAAAAnnAAAO5OV/F/5oZWFkAAALWAAAACsAAAA2C4eUa2hoZWEAAAuEAAAAGAAAACQOogcfaG10eAAAC5wAAAAPAAAAeNIAAABsb2NhAAALrAAAAD4AAAA+MMgtQm1heHAAAAvsAAAAHwAAACABLwB5bmFtZQAADAwAAAElAAACCtXH9aBwb3N0AAANNAAAAPkAAAF5vawAenicY2BkZ2CcwMDKwMFSyPKMgYHhF4RmjmEIZzzHwMDEwMrMgBUEpLmmMDh8ZPwoyw7iLmSHCDOCCADu/Qo9AAB4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGD7K/v8PUvCREUTzM0DVAwEjG8OIBwCOWgbUAAB4nI1XfVBU1xV/574vlsUlj/14grDs48FuAgaR3X2LEnY3UZSgEkTwAySAgkIwI8bRfFDjTszYCWRMW9lNa4y2meokmq+2k5ia0dpkmknbkWgSSW3GyaaNf0RTx0wxX7A3Pe/tQmIgHXf3vXvvueeee+45v3POXQYY/PCD/CBDGAYkIE2sxg+OXSJmhmH1OaFX6MU5C5PDMCZi5Rg2i+ELGSthwM14NCbgYGSBIZfhFA1H6Zu0OS0NDkMVfg+npdFm+maCvigI0JBIQIMg0BdJGdTj9ylj7nr+b97+Hl8C1+H2xNAvjPqxjIgaKtItICkSnIISeo40QQls4xxjlzgHsnGGvi7BxQiMlSlkPMhfCh67rAUEUQ6CHxW2O7JARCkKnlUQ7UEIyAEQZe4MdDW9xr5OPFuKbubpRxcPDY8da4MOelDfAYJLW+sGKn/Vlmjfv5+NdB4oOfTazJn3tGxZtL9xFNZX7PPRUbjcRg/SMB2EL+gblXn7shbO/WUbF9u/H5XQ9eKO8iMMr9tY35qYoRi20wGuXV/CHaGDk2fdgHwCk5HUXQpCcgHfBV2NjV3jkq4PHTSUSBwuOQALvxPAps6fiftk6P6yJpcm5bB4dFkgoh195mbiSTnkL3jupq7jh4ZZdvjQRVB4PPx3SsVTu5D/6kd85RU66ttXAeuuXYN1E/Y2sMMzZkZiZNRZlRS/ynr9Xr8Cql2RVNbutXslYo7B9ngsFqcDbCQO22PxeIxcpgMxkh6PjUdwkvw6hvRpZeoCFKshDQzJVr++DWyLx+hAXJcGp3TJMV1ME45xCNvHLsWRrpOZSduOoG0zERuIIwuIkhNkBREglQKLiODD45FQE0BTiE214xE2wp8zOt9NjH3GRtDMk7Ehoq2tzCzGxdyMEQJuD0qGIrQ58ApoWQE3D2h1h6zwuB14wYFIDAA5CZ11jT+92gFZ7B7/p7+hV8jFxBl4aG03wLiVXtBbCylLfIJzkPUAvWAw0yvsVdKdBbC6nnruP/RFkHqWJLZ2Auxdtgy+6qTf7l1WswTJcJ6mGVxwXj92UtfU2WXUNX+qBUCxK6D4FR4f/cufG1sZbiSkMcwdMdoxBxTTEXIp4SCXMNhHoFjvTTFP4vkoPReNRmPRCTwa+3qY0DR7qn7Vjh612wRRTaI04HWCnZ+gIzvS/ZJP0+mynphCui4hzmG0id6+aLSv2BV3FQMYDTHrlGQ/SZ+q4ZdF8aLa5Ar8GW3tVNKEj13cF0buMaesx1i9CL/Uo1tM0h+74o9HjQ+UcPaxy8mH9ccwK8KpKA3rHdIUjTKpfIBxuokpxUGBIILm84ATvHh8tAIe2iZj8KvYwUOXawHMVNgxZvlwSa0z8Zkokkxn3ey2nYTsbMO3mPh8cji7zklsPLD9a9f2s2w/uSt/FgSytWzw5bmS3PielU1P56aGrlz6NzlnbT8h/Wtb+1OxIqxBbC9g7kINUbtAEDxsKWSCe46eltCPmaiUxy2IrODIB8EmixaQrU4IAQ6THg6BFpAdWsCquT16DkL9ccIC/FGeP5AuiDExe8bx+QtzWVsmHcm0kdzqecdn5IhRkTc/zfNPm3ns5sw4Pq86l9gyofh6jkTF5iFChjYbbzZQWFvYb8qZAWyGiV9ya+5bFgnzpuWt3FuX8KYMmsiYZepPseBgGhZcOMt0+4Q8fDOTftJjHIuhdaLsFXFM9AclTi9jbGRq8ZvIOykZei77kfo53eoppVPovbGiyV63p/p/dkWETTjmhjTIm8RP284b04bcNYlRsvO6Gp2JeaiIueVHsgJGF2aASlCQLuG8EsBomzb++/AXmwhaOoLhL7iQ4/uc449gWJ56/XWDARn74v/PL1bRBB4TBEyYrqezSkUPHaWjPWCm13ogAzJ66LVpbTEuXccDZlyXxBQ/IrzKOPS7gAkkIyZ0N6joE6M246aDsO1kgucTJ/EdFWA5pbAcTfoSP4hJeBCni7nEn5IclL4kpDgmMMuH8Kpk0+WrBUIeKCyWS0nPVz7NW86Hnl55GxR5KB3+9tszL+wVRulXNTUn6D8SJvIl3PzP46eZST/tQTllTDXTzmxCaTYna7eJAqcWuD1ulBXQsMz5fQEBCfowCF5FVDF/2yysB9OW5veVEtRAFOy41FoeJEiAOZhDiFstsKAwJ8Hijs72q1jWvWx+uKU5XFZDLx189OK8ojW1u0By5dtLHUN/rwkte68PnhnYVbt0bvWiub9w1+f4C0L3hIuXZ8+xlVSt0eb3tgQsmVZnem5R3U0uf/fmFdqiLTvY3nPnet5/v4f9pLB6QX2krnnFQ1tXtN+2ePlAaUNWcfiWwrncn4ca9ml3hFeHHm+u2bq4MhxUZs3bMH/3jgaPUtlVunFjg2/8yRzf3cHsssKZqlnOqyCWworWykW9lXnspk0ffrjpfCreIpjPWbwnFxt3PAkcQgkUuH1auUMf+txJQ0hK1k1zsNaqQdaLMxfoq9AGGxtJQ+fGw53cE/TY8pWhJruZHiMAcCexFS/eGDp6hntiXGE/gvI7163b29ExfiHxNsnqub/a6/QmPoAn4GpZ2c9cZRX5/57IWUNYuubiQBAddhuxAKe6PA5vuV5dkk0VXkMM3zk42W3Awrgka8LQgjZY+tQIffd5+vnHasnHL/cczldyS4r79i6su6Nu9oPQ8lbaid2Pt9/bXtTTynevq7bkPkITV47d+3NugOzo4M3y77Zxbnb2nhWrl0T/kO4u3H1ig33e1lD6JDYjiKkCHOioF0pZv6T6gxxipxLNhFc8xERA48vq5ZfXdL/QV6c8W3PfwjIsZyI3Csvo72e4FpTVwTv/UYNAKtY+8MB84vogZ1Xr5lW38iJdPZ74xunzO4Gk7BARIkytjlyCoPVoIb3IluMfAYRhEoAO2aGXKc2TNAJaSwdzQEeq7jC7TWYF2Y2jrEIXlyVEhunBs5t7K62a7Z6qB0923/+vPT2v7mwpqV/mTEsTiCB5zz735HOP9VbVWtKKZK08uDJ7vcQN02HogGegY5iNnKUHh12ti9/zzHvsauy+tx+e375j94LuA64MV/5MQbZVNT95/re7jlxZVaVuW5Nffsd9TXfOpXcv6m2Bn3x6FgXg/oz+P0h/ce8g2mTEWxVTzzQzrTruNCcRdbu6VY87gLVXc4uSjXfosak7XxWM4oyl+ockmzCFhJXaGwK8e6sCW2T3sLmPnh5qSZtx9JHFL6QBHGnsTjdtWQ8PFygWtQTIkrI84NILfQSC65FUMFsnOYFHEoSmUCD49a4rt3985PTsd8GzB/5KEnzmhhORgVOZPM+yb5KmpRu38jQqviH6826Lrdrxx6DZdFPo2fVbTiy9AUpDJ3SxGYvpK7u+Rhz8D4BCxssAeJxjYGRgYABi/vcdWfH8Nl8ZuNkZQODSliXbkWl2BrA4BwMTiAIAKDsJfgB4nGNgZGBgZwCChWASxGZkQAVyABOTANd4nGNnYGBgHwAMADNUANMAAAAAAAAOAFAAZgCyAMYA5gEeAUgBdAGcAfICLgKOAroDCgOOA7AD6gQ4BHwEuAToBQwFogXoBjYGbAbaB3IAAHicY2BkYGCQY8hlYGcAASYg5gJCBob/YD4DABa6AakAeJxdkE1qg0AYhl8Tk9AIoVDaVSmzahcF87PMARLIMoFAl0ZHY1BHdBJIT9AT9AQ9RQ9Qeqy+yteNMzDzfM+88w0K4BY/cNAMB6N2bUaPPBLukybCLvleeAAPj8JD+hfhMV7hC3u4wxs7OO4NzQSZcI/8Ltwnfwi75E/hAR7wJTyk/xYeY49fYQ/PztM+jbTZ7LY6OWdBJdX/pqs6NYWa+zMxa13oKrA6Uoerqi/JwtpYxZXJ1coUVmeZUWVlTjq0/tHacjmdxuL90OR8O0UEDYMNdtiSEpz5XQGqzlm30kzUdAYFFOb8R7NOZk0q2lwAyz1i7oAr1xoXvrOgtYhZx8wY5KRV269JZ5yGpmzPTjQhvY9je6vEElPOuJP3mWKnP5M3V+YAAAB4nG2P2XLCMAxFfYE4CWlZSveFP8hHOY4gHhw79VLav68hMNOH6kG60mg5YhM22pr9b1vGMMEUM2TgyFGgxBwVbnCLBZZYYY07bHCPBzziCc94wSve8I4PbGeDFj/VydVSOakpG0T0VH1ZHXuq+xhoftHaHq+yV+21o1P7brWLWnvpiExNJpBb/i18q8D9ZxSOcj8oY8iVPjZBBU2+kGIIypokuqTI+cx3qXMq7Z6PQIsx1DYGrQxtLul50YV50rVcCiNJc0enX4qdkNRYe8j2g46+SIMHapXJw1GFdIWH2DfalQknZeTDWsRW2bqlBK3ORIz9AqJUapQAAAA=) format("woff"),url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMlGRXgQAAAEoAAAAVmNtYXDiLxC2AAAB+AAAAUpnbHlm5X8X/gAAA4QAAA7kaGVhZAuHlGsAAADQAAAANmhoZWEOogcfAAAArAAAACRobXR40gAAAAAAAYAAAAB4bG9jYTDILUIAAANEAAAAPm1heHABLwB5AAABCAAAACBuYW1l1cf1oAAAEmgAAAIKcG9zdL2sAHoAABR0AAABeQABAAAHAAAAAKEHAAAAAAAHAAABAAAAAAAAAAAAAAAAAAAAHgABAAAAAQAAD+/W/l8PPPUACwcAAAAAANK0pLcAAAAA0rSktwAAAAAHAAcAAAAACAACAAAAAAAAAAEAAAAeAG0ABwAAAAAAAgAAAAoACgAAAP8AAAAAAAAAAQcAAZAABQAIBHEE5gAAAPoEcQTmAAADXABXAc4AAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA8QHxHQcAAAAAoQcAAAAAAAABAAAAAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADxHf//AAAAAPEB//8AAA8AAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AUABmALIAxgDmAR4BSAF0AZwB8gIuAo4CugMKA44DsAPqBDgEfAS4BOgFDAWiBegGNgZsBtoHcgAAAAEAAAAABYsFiwACAAABEQECVQM2BYv76gILAAADAAAAAAZrBmsAAgAOABoAAAkCEwQAAxIABSQAEwIAASYAJzYANxYAFwYAAusBwP5Alf7D/loICAGmAT0BPQGmCAj+Wv7D/f6uBgYBUv39AVIGBv6uAjABUAFQAZsI/lr+w/7D/loICAGmAT0BPQGm+sgGAVL9/QFSBgb+rv39/q4AAAACAAAAAAVABYsAAwAHAAABIREpAREhEQHAASv+1QJVASsBdQQW++oEFgAAAAQAAAAABiAGIAAGABMAJAAnAAABLgEnFRc2NwYHFz4BNSYAJxUWEgEHASERIQERAQYHFT4BNxc3AQcXBNABZVW4A7sCJ3ElKAX+3+Wlzvu3XwFh/p8BKwF1AT5MXU6KO5lf/WCcnAOAZJ4rpbgYGGpbcUacVPQBYziaNP70Aetf/p/+QP6LAfb+wjsdmhJEMZhfBJacnAAAAQAAAAAEqwXWAAUAAAERIQERAQILASoBdv6KBGD+QP6LBKr+iwAAAAIAAAAABWYF1gAGAAwAAAEuAScRPgEBESEBEQEFZQFlVFRl/BEBKwF1/osDgGSeK/2mK54BRP5A/osEqv6LAAADAAAAAAYgBg8ABQAMABoAABMRIQERAQUuAScRPgEDFRYSFwYCBxU2ADcmAOABKwF1/osCxQFlVVVluqXOAwPOpeUBIQUF/t8EYP5A/osEqv6L4GSeK/2mK54C85o0/vS1tf70NJo4AWL19QFiAAAABAAAAAAFiwWLAAUACwARABcAAAEjESE1IwMzNTM1IQEjFSERIwMVMxUzEQILlgF24JaW4P6KA4DgAXaW4OCWAuv+ipYCCuCW/ICWAXYCoJbgAXYABAAAAAAFiwWLAAUACwARABcAAAEzFTMRIRMjFSERIwEzNTM1IRM1IxEhNQF14Jb+iuDgAXaWAcCW4P6KlpYBdgJV4AF2AcCWAXb76uCWAcDg/oqWAAAAAAIAAAAABdYF1gAPABMAAAEhDgEHER4BFyE+ATcRLgEDIREhBUD8gD9VAQFVPwOAP1UBAVU//IADgAXVAVU//IA/VQEBVT8DgD9V++wDgAAABgAAAAAGawZrAAcADAATABsAIAAoAAAJASYnDgEHASUuAScBBSEBNhI3JgUBBgIHFhchBR4BFwEzARYXPgE3AQK+AWROVIfwYQESA4416aH+7gLl/dABelxoAQH8E/7dXGgBAQ4CMP3kNemhARJ4/t1OVIfwYf7uA/ACaBIBAVhQ/id3pfY+/idL/XNkAQGTTU0B+GT+/5NNSEul9j4B2f4IEgEBWFAB2QAAAAUAAAAABmsF1gAPABMAFwAbAB8AAAEhDgEHER4BFyE+ATcRLgEBIRUhASE1IQUhNSE1ITUhBdX7VkBUAgJUQASqQFQCAlT7FgEq/tYC6v0WAuoBwP7WASr9FgLqBdUBVT/8gD9VAQFVPwOAP1X9rJX+1ZWVlZaVAAMAAAAABiAF1gAPACcAPwAAASEOAQcRHgEXIT4BNxEuAQEjNSMVMzUzFRQGByMuAScRPgE3Mx4BFQUjNSMVMzUzFQ4BByMuATURNDY3Mx4BFwWL++o/VAICVD8EFj9UAgJU/WtwlZVwKiDgICoBASog4CAqAgtwlZVwASog4CAqKiDgICoBBdUBVT/8gD9VAQFVPwOAP1X99yXgJUogKgEBKiABKiAqAQEqIEol4CVKICoBASogASogKgEBKiAAAAYAAAAABiAE9gADAAcACwAPABMAFwAAEzM1IxEzNSMRMzUjASE1IREhNSERFSE14JWVlZWVlQErBBX76wQV++sEFQM1lv5AlQHAlf5Alv5AlQJVlZUAAAABAAAAAAYgBmwALgAAASIGBwE2NCcBHgEzPgE3LgEnDgEHFBcBLgEjDgEHHgEXMjY3AQYHHgEXPgE3LgEFQCtKHv3sBwcCDx5OLF9/AgJ/X19/Agf98R5OLF9/AgJ/XyxOHgIUBQEDe1xcewMDewJPHxsBNxk2GQE0HSACf19ffwICf18bGf7NHCACf19ffwIgHP7KFxpcewICe1xdewAAAgAAAAAGWQZrAEMATwAAATY0Jzc+AScDLgEPASYvAS4BJyEOAQ8BBgcnJgYHAwYWHwEGFBcHDgEXEx4BPwEWHwEeARchPgE/ATY3FxY2NxM2JicFLgEnPgE3HgEXDgEFqwUFngoGB5YHGQ26OkQcAxQP/tYPFAIcRTm6DRoHlQcFC50FBZ0LBQeVBxoNujlFHAIUDwEqDxQCHEU5ug0aB5UHBQv9OG+UAgKUb2+UAgKUAzckSiR7CRoNAQMMCQVLLRzGDhEBAREOxhwtSwUJDP79DBsJeyRKJHsJGg3+/QwJBUstHMYOEQEBEQ7GHC1LBQkMAQMMGwlBApRvb5QCApRvb5QAAAAAAQAAAAAGawZrAAsAABMSAAUkABMCACUEAJUIAaYBPQE9AaYICP5a/sP+w/5aA4D+w/5aCAgBpgE9AT0BpggI/loAAAACAAAAAAZrBmsACwAXAAABBAADEgAFJAATAgABJgAnNgA3FgAXBgADgP7D/loICAGmAT0BPQGmCAj+Wv7D/f6uBgYBUv39AVIGBv6uBmsI/lr+w/7D/loICAGmAT0BPQGm+sgGAVL9/QFSBgb+rv39/q4AAAMAAAAABmsGawALABcAIwAAAQQAAxIABSQAEwIAASYAJzYANxYAFwYAAw4BBy4BJz4BNx4BA4D+w/5aCAgBpgE9AT0BpggI/lr+w/3+rgYGAVL9/QFSBgb+rh0Cf19ffwICf19ffwZrCP5a/sP+w/5aCAgBpgE9AT0BpvrIBgFS/f0BUgYG/q79/f6uAk9ffwICf19ffwICfwAAAAQAAAAABiAGIAAPABsAJQApAAABIQ4BBxEeARchPgE3ES4BASM1IxUjETMVMzU7ASEeARcRDgEHITczNSMFi/vqP1QCAlQ/BBY/VAICVP1rcJVwcJVwlgEqICoBASog/tZwlZUGIAJUP/vqP1QCAlQ/BBY/VPyClZUBwLu7ASog/tYgKgFw4AACAAAAAAZrBmsACwAXAAABBAADEgAFJAATAgATBwkBJwkBNwkBFwEDgP7D/loICAGmAT0BPQGmCAj+Wjhp/vT+9GkBC/71aQEMAQxp/vUGawj+Wv7D/sP+WggIAaYBPQE9Aab8EWkBC/71aQEMAQxp/vUBC2n+9AABAAAAAAXWBrYAFgAAAREJAREeARcOAQcuAScjFgAXNgA3JgADgP6LAXW+/QUF/b6+/QWVBgFR/v4BUQYG/q8FiwEq/ov+iwEqBP2/vv0FBf2+/v6vBgYBUf7+AVEAAAABAAAAAAU/BwAAFAAAAREjIgYdASEDIxEhESMRMzU0NjMyBT+dVjwBJSf+/s7//9Ctkwb0/vhISL3+2P0JAvcBKNq6zQAAAAAEAAAAAAaOBwAAMABFAGAAbAAAARQeAxUUBwYEIyImJyY1NDY3NiUuATU0NwYjIiY1NDY3PgEzIQcjHgEVFA4DJzI2NzY1NC4CIyIGBwYVFB4DEzI+AjU0LgEvASYvAiYjIg4DFRQeAgEzFSMVIzUjNTM1MwMfQFtaQDBI/uqfhOU5JVlKgwERIB8VLhaUy0g/TdNwAaKKg0pMMUVGMZImUBo1Ij9qQCpRGS8UKz1ZNjprWzcODxMeChwlThAgNWhvUzZGcX0Da9XVadTUaQPkJEVDUIBOWlN6c1NgPEdRii5SEipAKSQxBMGUUpo2QkBYP4xaSHNHO0A+IRs5ZjqGfVInITtlLmdnUjT8lxo0Xj4ZMCQYIwsXHTgCDiQ4XTtGazsdA2xs29ts2QADAAAAAAaABmwAAwAOACoAAAERIREBFgYrASImNDYyFgERIRE0JiMiBgcGFREhEhAvASEVIz4DMzIWAd3+tgFfAWdUAlJkZ6ZkBI/+t1FWP1UVC/63AgEBAUkCFCpHZz+r0ASP/CED3wEySWJik2Fh/N39yAISaXdFMx4z/dcBjwHwMDCQIDA4H+MAAAEAAAAABpQGAAAxAAABBgcWFRQCDgEEIyAnFjMyNy4BJxYzMjcuAT0BFhcuATU0NxYEFyY1NDYzMhc2NwYHNgaUQ18BTJvW/tKs/vHhIyvhsGmmHyEcKypwk0ROQk4seQFbxgi9hoxgbWAlaV0FaGJFDhyC/v3ut22RBIoCfWEFCxexdQQmAyyOU1hLlbMKJiSGvWYVOXM/CgAAAAEAAAAABYAHAAAiAAABFw4BBwYuAzURIzU+BDc+ATsBESEVIREUHgI3NgUwUBewWWitcE4hqEhyRDAUBQEHBPQBTf6yDSBDME4Bz+0jPgECOFx4eDoCINcaV11vVy0FB/5Y/P36HjQ1HgECAAEAAAAABoAGgABKAAABFAIEIyInNj8BHgEzMj4BNTQuASMiDgMVFBYXFj8BNjc2JyY1NDYzMhYVFAYjIiY3PgI1NCYjIgYVFBcDBhcmAjU0EiQgBBIGgM7+n9FvazsTNhRqPXm+aHfijmm2f1srUE0eCAgGAgYRM9Gpl6mJaz1KDgglFzYyPlYZYxEEzv7OAWEBogFhzgOA0f6fziBdR9MnOYnwlnLIfjpgfYZDaJ4gDCAfGAYXFD1al9mkg6ruVz0jdVkfMkJyVUkx/l5Ga1sBfOnRAWHOzv6fAAAHAAAAAAcABM8ADgAXACoAPQBQAFoAXQAAARE2HgIHDgEHBiYjJyY3FjY3NiYHERQFFjY3PgE3LgEnIwYfAR4BFw4BFxY2Nz4BNy4BJyMGHwEeARcUBhcWNjc+ATcuAScjBh8BHgEXDgEFMz8BFTMRIwYDJRUnAxyEzZRbCA2rgketCAEBqlRoCglxYwF+IiEOIysBAkswHQEECiQ0AgE+YyIhDiIsAQJLMB4BBQokNAE/YyIhDiIsAQJLMB4BBQokNAEBPvmD7kHhqs0s0gEnjgHJAv0FD2a9gIrADwUFAwPDAlVMZ3MF/pUHwgc1HTyWV325PgsJED+oY3G9TAc1HTyWV325PgsJED+oY3G9TAc1HTyWV325PgsJED+oY3G9UmQBZQMMR/61g/kBAAAAAAAQAMYAAQAAAAAAAQAHAAAAAQAAAAAAAgAHAAcAAQAAAAAAAwAHAA4AAQAAAAAABAAHABUAAQAAAAAABQALABwAAQAAAAAABgAHACcAAQAAAAAACgArAC4AAQAAAAAACwATAFkAAwABBAkAAQAOAGwAAwABBAkAAgAOAHoAAwABBAkAAwAOAIgAAwABBAkABAAOAJYAAwABBAkABQAWAKQAAwABBAkABgAOALoAAwABBAkACgBWAMgAAwABBAkACwAmAR5WaWRlb0pTUmVndWxhclZpZGVvSlNWaWRlb0pTVmVyc2lvbiAxLjBWaWRlb0pTR2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20AVgBpAGQAZQBvAEoAUwBSAGUAZwB1AGwAYQByAFYAaQBkAGUAbwBKAFMAVgBpAGQAZQBvAEoAUwBWAGUAcgBzAGkAbwBuACAAMQAuADAAVgBpAGQAZQBvAEoAUwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAACAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4EcGxheQtwbGF5LWNpcmNsZQVwYXVzZQt2b2x1bWUtbXV0ZQp2b2x1bWUtbG93CnZvbHVtZS1taWQLdm9sdW1lLWhpZ2gQZnVsbHNjcmVlbi1lbnRlcg9mdWxsc2NyZWVuLWV4aXQGc3F1YXJlB3NwaW5uZXIJc3VidGl0bGVzCGNhcHRpb25zCGNoYXB0ZXJzBXNoYXJlA2NvZwZjaXJjbGUOY2lyY2xlLW91dGxpbmUTY2lyY2xlLWlubmVyLWNpcmNsZQJoZAZjYW5jZWwGcmVwbGF5CGZhY2Vib29rBWdwbHVzCGxpbmtlZGluB3R3aXR0ZXIGdHVtYmxyCXBpbnRlcmVzdBFhdWRpby1kZXNjcmlwdGlvbgAAAAAA) format("truetype");font-weight:400;font-style:normal}.vjs-icon-play,.video-js .vjs-big-play-button,.video-js .vjs-play-control{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play:before,.video-js .vjs-big-play-button:before,.video-js .vjs-play-control:before{content:'\f101'}.vjs-icon-play-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play-circle:before{content:'\f102'}.vjs-icon-pause,.video-js .vjs-play-control.vjs-playing{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pause:before,.video-js .vjs-play-control.vjs-playing:before{content:'\f103'}.vjs-icon-volume-mute,.video-js .vjs-mute-control.vjs-vol-0,.video-js .vjs-volume-menu-button.vjs-vol-0{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-mute:before,.video-js .vjs-mute-control.vjs-vol-0:before,.video-js .vjs-volume-menu-button.vjs-vol-0:before{content:'\f104'}.vjs-icon-volume-low,.video-js .vjs-mute-control.vjs-vol-1,.video-js .vjs-volume-menu-button.vjs-vol-1{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-low:before,.video-js .vjs-mute-control.vjs-vol-1:before,.video-js .vjs-volume-menu-button.vjs-vol-1:before{content:'\f105'}.vjs-icon-volume-mid,.video-js .vjs-mute-control.vjs-vol-2,.video-js .vjs-volume-menu-button.vjs-vol-2{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-mid:before,.video-js .vjs-mute-control.vjs-vol-2:before,.video-js .vjs-volume-menu-button.vjs-vol-2:before{content:'\f106'}.vjs-icon-volume-high,.video-js .vjs-mute-control,.video-js .vjs-volume-menu-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-high:before,.video-js .vjs-mute-control:before,.video-js .vjs-volume-menu-button:before{content:'\f107'}.vjs-icon-fullscreen-enter,.video-js .vjs-fullscreen-control{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-fullscreen-enter:before,.video-js .vjs-fullscreen-control:before{content:'\f108'}.vjs-icon-fullscreen-exit,.video-js.vjs-fullscreen .vjs-fullscreen-control{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-fullscreen-exit:before,.video-js.vjs-fullscreen .vjs-fullscreen-control:before{content:'\f109'}.vjs-icon-square{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-square:before{content:'\f10a'}.vjs-icon-spinner{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-spinner:before{content:'\f10b'}.vjs-icon-subtitles,.video-js .vjs-subtitles-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-subtitles:before,.video-js .vjs-subtitles-button:before{content:'\f10c'}.vjs-icon-captions,.video-js .vjs-captions-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-captions:before,.video-js .vjs-captions-button:before{content:'\f10d'}.vjs-icon-chapters,.video-js .vjs-chapters-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-chapters:before,.video-js .vjs-chapters-button:before{content:'\f10e'}.vjs-icon-share{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-share:before{content:'\f10f'}.vjs-icon-cog{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cog:before{content:'\f110'}.vjs-icon-circle,.video-js .vjs-mouse-display,.video-js .vjs-play-progress,.video-js .vjs-volume-level{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle:before,.video-js .vjs-mouse-display:before,.video-js .vjs-play-progress:before,.video-js .vjs-volume-level:before{content:'\f111'}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-outline:before{content:'\f112'}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-inner-circle:before{content:'\f113'}.vjs-icon-hd{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-hd:before{content:'\f114'}.vjs-icon-cancel,.video-js .vjs-control.vjs-close-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cancel:before,.video-js .vjs-control.vjs-close-button:before{content:'\f115'}.vjs-icon-replay{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-replay:before{content:'\f116'}.vjs-icon-facebook{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-facebook:before{content:'\f117'}.vjs-icon-gplus{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-gplus:before{content:'\f118'}.vjs-icon-linkedin{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-linkedin:before{content:'\f119'}.vjs-icon-twitter{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-twitter:before{content:'\f11a'}.vjs-icon-tumblr{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-tumblr:before{content:'\f11b'}.vjs-icon-pinterest{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pinterest:before{content:'\f11c'}.vjs-icon-audio-description{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-audio-description:before{content:'\f11d'}.video-js{display:block;vertical-align:top;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:400;font-style:normal;font-family:Arial,Helvetica,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js *,.video-js :before,.video-js :after{box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.video-js.vjs-fluid,.video-js.vjs-16-9,.video-js.vjs-4-3{width:100%;max-width:100%;height:0}.video-js.vjs-16-9{padding-top:56.25%}.video-js.vjs-4-3{padding-top:75%}.video-js.vjs-fill{width:100%;height:100%}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}body.vjs-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.vjs-full-window .video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.video-js.vjs-fullscreen{width:100%!important;height:100%!important;padding-top:0!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-hidden{display:none!important}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1;visibility:visible}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66A8CC}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.5em;width:3em;display:block;position:absolute;top:10px;left:10px;padding:0;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2B333F;background-color:rgba(43,51,63,.7);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-big-play-centered .vjs-big-play-button{top:50%;left:50%;margin-top:-.75em;margin-left:-1.5em}.video-js:hover .vjs-big-play-button,.video-js .vjs-big-play-button:focus{outline:0;border-color:#fff;background-color:#73859f;background-color:rgba(115,133,159,.5);-webkit-transition:all 0s;-moz-transition:all 0s;-o-transition:all 0s;transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button,.vjs-error .vjs-big-play-button{display:none}.video-js button{background:0 0;border:0;color:inherit;display:inline-block;overflow:visible;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.vjs-menu-button{cursor:pointer}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;overflow:auto}.vjs-scrubbing .vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-menu li:focus,.vjs-menu li:hover{outline:0;background-color:#73859f;background-color:rgba(115,133,159,.5)}.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2B333F}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em;font-weight:700;cursor:default}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0;margin-bottom:1.5em;border-top-color:rgba(43,51,63,.7)}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2B333F;background-color:rgba(43,51,63,.7);position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-menu-button-popup:hover .vjs-menu,.vjs-menu-button-popup .vjs-menu.vjs-lock-showing{display:block}.video-js .vjs-menu-button-inline{-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline:hover,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js.vjs-no-flex .vjs-menu-button-inline{width:12em}.video-js .vjs-menu-button-inline.vjs-slider-active{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-menu-button-inline:hover .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline.vjs-slider-active .vjs-menu{display:block;opacity:1}.vjs-no-flex .vjs-menu-button-inline .vjs-menu{display:block;opacity:1;position:relative;width:auto}.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu{width:auto}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2B333F;background-color:rgba(43,51,63,.7)}.vjs-has-started .vjs-control-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar,.vjs-error .vjs-control-bar{display:none!important}.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible}@media �screen{.vjs-user-inactive.vjs-playing .vjs-control-bar :before{content:""}}.vjs-has-started.vjs-no-flex .vjs-control-bar{display:table}.video-js .vjs-control{outline:0;position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.video-js .vjs-control:before{font-size:1.8em;line-height:1.67}.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before,.video-js .vjs-control:focus{text-shadow:0 0 1em #fff}.video-js .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-no-flex .vjs-control{display:table-cell;vertical-align:middle}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.vjs-live .vjs-progress-control{display:none}.video-js .vjs-progress-holder{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;-webkit-transition:all .2s;-moz-transition:all .2s;-o-transition:all .2s;transition:all .2s;height:.3em}.video-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.666666666666666666em}.video-js .vjs-progress-control:hover .vjs-mouse-display:after,.video-js .vjs-progress-control:hover .vjs-play-progress:after{display:block;font-size:.6em}.video-js .vjs-progress-holder .vjs-play-progress,.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div{position:absolute;display:block;height:.3em;margin:0;padding:0;width:0;left:0;top:0}.video-js .vjs-mouse-display:before{display:none}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{position:absolute;top:-.333333333333333em;right:-.5em;font-size:.9em}.video-js .vjs-mouse-display:after,.video-js .vjs-play-progress:after{display:none;position:absolute;top:-2.4em;right:-1.5em;font-size:.9em;color:#000;content:attr(data-current-time);padding:.2em .5em;background-color:#fff;background-color:rgba(255,255,255,.8);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em}.video-js .vjs-play-progress:before,.video-js .vjs-play-progress:after{z-index:1}.video-js .vjs-load-progress{background:#bfc7d3;background:rgba(115,133,159,.5)}.video-js .vjs-load-progress div{background:#fff;background:rgba(115,133,159,.75)}.video-js.vjs-no-flex .vjs-progress-control{width:auto}.video-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.vjs-no-flex .vjs-progress-control .vjs-mouse-display{z-index:0}.video-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display,.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display:after{visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display,.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display:after{display:none}.video-js .vjs-progress-control .vjs-mouse-display:after{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.video-js .vjs-slider{outline:0;position:relative;cursor:pointer;padding:0;margin:0 .45em;background-color:#73859f;background-color:rgba(115,133,159,.5)}.video-js .vjs-slider:focus{text-shadow:0 0 1em #fff;-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js .vjs-mute-control,.video-js .vjs-volume-menu-button{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.video-js .vjs-volume-control{width:5em;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before{position:absolute;font-size:.9em}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-.5em;left:-.3em}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{top:-.3em;right:-.5em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu{display:block;width:0;height:0;border-top-color:transparent}.vjs-menu-button-popup.vjs-volume-menu-button-vertical .vjs-menu{left:.5em;height:8em}.vjs-menu-button-popup.vjs-volume-menu-button-horizontal .vjs-menu{left:-2em}.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu-content{height:0;width:0;overflow-x:hidden;overflow-y:hidden}.vjs-volume-menu-button-vertical:hover .vjs-menu-content,.vjs-volume-menu-button-vertical .vjs-lock-showing .vjs-menu-content{height:8em;width:2.9em}.vjs-volume-menu-button-horizontal:hover .vjs-menu-content,.vjs-volume-menu-button-horizontal .vjs-lock-showing .vjs-menu-content{height:2.9em;width:8em}.vjs-volume-menu-button.vjs-menu-button-inline .vjs-menu-content{background-color:transparent!important}.vjs-poster{display:inline-block;vertical-align:middle;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%}.vjs-poster img{display:block;vertical-align:middle;margin:0 auto;max-height:100%;padding:0;width:100%}.vjs-has-started .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster{display:block}.vjs-controls-disabled .vjs-poster{display:none}.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-live-control{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;font-size:1em;line-height:3em}.vjs-no-flex .vjs-live-control{display:table-cell;width:auto;text-align:left}.video-js .vjs-time-control{-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none;font-size:1em;line-height:3em}.vjs-live .vjs-time-control{display:none}.video-js .vjs-current-time,.vjs-no-flex .vjs-current-time{display:none}.video-js .vjs-duration,.vjs-no-flex .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.vjs-live .vjs-time-divider{display:none}.video-js .vjs-play-control{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.vjs-text-track-display{position:absolute;bottom:3em;left:0;right:0;top:0;pointer-events:none}.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em;background-color:#000;background-color:rgba(0,0,0,.5)}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{-moz-transform:translateY(-3em);-ms-transform:translateY(-3em);-o-transform:translateY(-3em);-webkit-transform:translateY(-3em);transform:translateY(-3em)}.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{-moz-transform:translateY(-1.5em);-ms-transform:translateY(-1.5em);-o-transform:translateY(-1.5em);-webkit-transform:translateY(-1.5em);transform:translateY(-1.5em)}.video-js .vjs-fullscreen-control{width:3.8em;cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.vjs-playback-rate .vjs-playback-rate-value{font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-error .vjs-error-display:before{color:#fff;content:'X';font-family:Arial,Helvetica,sans-serif;font-size:4em;left:0;line-height:1;margin-top:-.5em;position:absolute;text-shadow:.05em .05em .1em #000;text-align:center;top:50%;vertical-align:middle;width:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;opacity:.85;text-align:left;border:6px solid rgba(43,51,63,.7);box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;border-radius:25px}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:block}.vjs-loading-spinner:before,.vjs-loading-spinner:after{content:"";position:absolute;margin:-6px;box-sizing:inherit;width:inherit;height:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:transparent;border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:before,.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}@keyframes vjs-spinner-spin{100%{transform:rotate(360deg)}}@-webkit-keyframes vjs-spinner-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}@-webkit-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}.vjs-chapters-button .vjs-menu{left:-10em;width:0}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-custom-control-spacer{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto}.video-js.vjs-layout-tiny:not(.vjs-fullscreen).vjs-no-flex .vjs-custom-control-spacer{width:auto}.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-progress-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-menu-button{display:none}.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-fullscreen-control{display:none}.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-subtitles-button{display:none}.vjs-caption-settings{position:relative;top:1em;background-color:#2B333F;background-color:rgba(43,51,63,.75);color:#fff;margin:0 auto;padding:.5em;height:15em;font-size:12px;width:40em}.vjs-caption-settings .vjs-tracksettings{top:0;bottom:2em;left:0;right:0;position:absolute;overflow:auto}.vjs-caption-settings .vjs-tracksettings-colors,.vjs-caption-settings .vjs-tracksettings-font{float:left}.vjs-caption-settings .vjs-tracksettings-colors:after,.vjs-caption-settings .vjs-tracksettings-font:after,.vjs-caption-settings .vjs-tracksettings-controls:after{clear:both}.vjs-caption-settings .vjs-tracksettings-controls{position:absolute;bottom:1em;right:1em}.vjs-caption-settings .vjs-tracksetting{margin:5px;padding:3px;min-height:40px}.vjs-caption-settings .vjs-tracksetting label{display:block;width:100px;margin-bottom:5px}.vjs-caption-settings .vjs-tracksetting span{display:inline;margin-left:5px}.vjs-caption-settings .vjs-tracksetting>div{margin-bottom:5px;min-height:20px}.vjs-caption-settings .vjs-tracksetting>div:last-child{margin-bottom:0;padding-bottom:0;min-height:0}.vjs-caption-settings label>input{margin-right:10px}.vjs-caption-settings input[type=button]{width:40px;height:40px}.video-js .vjs-modal-dialog{background:rgba(0,0,0,.8);background:-webkit-linear-gradient(-90deg,rgba(0,0,0,.8),rgba(255,255,255,0));background:linear-gradient(180deg,rgba(0,0,0,.8),rgba(255,255,255,0))}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}
 
 
 
 
video-js/video-js.swf CHANGED
Binary file
video-js/video-quality-selector.js CHANGED
@@ -8,6 +8,8 @@
8
  * <source data-res="480" src="..." />
9
  * <source data-res="240" src="..." />
10
  * </video>
 
 
11
  */
12
 
13
  (function( _V_ ) {
@@ -35,13 +37,13 @@
35
  /***********************************************************************************
36
  * Setup our resolution menu items
37
  ***********************************************************************************/
38
- _V_.ResolutionMenuItem = _V_.MenuItem.extend({
39
 
40
  // Call variable to prevent the resolution change from being called twice
41
  call_count : 0,
42
 
43
  /** @constructor */
44
- init : function( player, options ){
45
 
46
  var touchstart = false;
47
 
@@ -50,7 +52,7 @@
50
  options.selected = ( options.res.toString() === player.getCurrentRes().toString() );
51
 
52
  // Call the parent constructor
53
- _V_.MenuItem.call( this, player, options );
54
 
55
  // Store the resolution as a property
56
  this.resolution = options.res;
@@ -92,12 +94,12 @@
92
  /***********************************************************************************
93
  * Setup our resolution menu title item
94
  ***********************************************************************************/
95
- _V_.ResolutionTitleMenuItem = _V_.MenuItem.extend({
96
 
97
- init : function( player, options ) {
98
 
99
  // Call the parent constructor
100
- _V_.MenuItem.call( this, player, options );
101
 
102
  // No click handler for the menu title
103
  this.off( 'click' );
@@ -107,24 +109,26 @@
107
  /***********************************************************************************
108
  * Define our resolution selector button
109
  ***********************************************************************************/
110
- _V_.ResolutionSelector = _V_.MenuButton.extend({
111
 
112
  /** @constructor */
113
- init : function( player, options ) {
114
 
115
  // Add our list of available resolutions to the player object
116
  player.availableRes = options.available_res;
117
 
118
  // Call the parent constructor
119
- _V_.MenuButton.call( this, player, options );
120
 
121
  // Set the button text based on the option provided
122
- this.el().firstChild.firstChild.innerHTML = options.buttonText;
123
  }
124
  });
125
 
126
  // Set class for resolution selector button
127
- _V_.ResolutionSelector.prototype.className = 'vjs-res-button';
 
 
128
 
129
  // Create a menu item for each available resolution
130
  _V_.ResolutionSelector.prototype.createItems = function() {
@@ -136,10 +140,10 @@
136
  // Add the menu title item
137
  items.push( new _V_.ResolutionTitleMenuItem( player, {
138
 
139
- el : _V_.Component.prototype.createEl( 'li', {
140
 
141
  className : 'vjs-menu-title vjs-res-menu-title',
142
- innerHTML : 'Quality'
143
  })
144
  }));
145
 
@@ -182,13 +186,13 @@
182
  * Setup variables, parse settings
183
  *******************************************************************/
184
  var player = this,
185
- sources = player.options().sources,
186
  i = sources.length,
187
  j,
188
  found_type,
189
 
190
  // Override default options with those provided
191
- settings = _V_.util.mergeOptions({
192
 
193
  default_res : '', // (string) The resolution that should be selected by default ( '480' or '480,1080,240' )
194
  force_types : false // (array) List of media types. If passed, we need to have source for each type in each resolution or that resolution will not be an option
@@ -282,6 +286,15 @@
282
  * Add methods to player object
283
  *******************************************************************/
284
 
 
 
 
 
 
 
 
 
 
285
  // Helper function to get the current resolution
286
  player.getCurrentRes = function() {
287
 
@@ -293,7 +306,7 @@
293
 
294
  try {
295
 
296
- return res = player.options().sources[0]['data-res'];
297
 
298
  } catch(e) {
299
 
@@ -319,28 +332,54 @@
319
  // Make sure the loadedmetadata event will fire
320
  if ( 'none' == video_el.preload ) { video_el.preload = 'metadata'; }
321
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
322
  // Change the source and make sure we don't start the video over
323
- player.src( player.availableRes[target_resolution] ).one( 'loadedmetadata', function() {
 
324
 
325
- player.currentTime( current_time );
326
 
327
- if ( player.currentTime() == 0 && current_time != 0 ) {
328
- player.addClass( 'vjs-has-started' );
329
- player.one( 'loadeddata', function() { player.currentTime( current_time ); } );
330
- }
331
- if ( current_time != 0 ) { player.addClass( 'vjs-has-started' ); } // If the video was paused, don't show the big play button
332
 
333
- if ( ! is_paused ) { player.play(); }
 
 
 
 
334
 
335
- });
 
 
 
 
 
 
 
336
 
337
  // Save the newly selected resolution in our player options property
338
  player.currentRes = target_resolution;
339
 
340
  // Make sure the button has been added to the control bar
341
- if ( player.controlBar.resolutionSelector ) {
342
 
343
- button_nodes = player.controlBar.resolutionSelector.el().firstChild.children;
344
  button_node_count = button_nodes.length;
345
 
346
  // Update the button text
@@ -371,12 +410,16 @@
371
 
372
  // Add the resolution selector button
373
  resolutionSelector = new _V_.ResolutionSelector( player, {
374
- buttonText : ( current_res || 'Quality' ),
375
  available_res : available_res
376
  });
377
 
378
  // Add the button to the control bar object and the DOM
379
- player.controlBar.resolutionSelector = player.controlBar.addChild( resolutionSelector );
 
 
 
 
380
  });
381
 
382
  })( videojs );
8
  * <source data-res="480" src="..." />
9
  * <source data-res="240" src="..." />
10
  * </video>
11
+ *
12
+ * FIXME with hacks by User:TheDJ to make this video-js 5.0 compatible
13
  */
14
 
15
  (function( _V_ ) {
37
  /***********************************************************************************
38
  * Setup our resolution menu items
39
  ***********************************************************************************/
40
+ _V_.ResolutionMenuItem = _V_.extend( _V_.getComponent( 'MenuItem' ), {
41
 
42
  // Call variable to prevent the resolution change from being called twice
43
  call_count : 0,
44
 
45
  /** @constructor */
46
+ constructor : function( player, options ){
47
 
48
  var touchstart = false;
49
 
52
  options.selected = ( options.res.toString() === player.getCurrentRes().toString() );
53
 
54
  // Call the parent constructor
55
+ _V_.getComponent( 'MenuItem' ).call( this, player, options );
56
 
57
  // Store the resolution as a property
58
  this.resolution = options.res;
94
  /***********************************************************************************
95
  * Setup our resolution menu title item
96
  ***********************************************************************************/
97
+ _V_.ResolutionTitleMenuItem = _V_.extend( _V_.getComponent( 'MenuItem' ), {
98
 
99
+ constructor : function( player, options ) {
100
 
101
  // Call the parent constructor
102
+ _V_.getComponent( 'MenuItem' ).call( this, player, options );
103
 
104
  // No click handler for the menu title
105
  this.off( 'click' );
109
  /***********************************************************************************
110
  * Define our resolution selector button
111
  ***********************************************************************************/
112
+ _V_.ResolutionSelector = _V_.extend( _V_.getComponent( 'MenuButton' ), {
113
 
114
  /** @constructor */
115
+ constructor : function( player, options ) {
116
 
117
  // Add our list of available resolutions to the player object
118
  player.availableRes = options.available_res;
119
 
120
  // Call the parent constructor
121
+ _V_.getComponent( 'MenuButton' ).call( this, player, options );
122
 
123
  // Set the button text based on the option provided
124
+ this.el().firstChild.innerHTML = options.buttonText;
125
  }
126
  });
127
 
128
  // Set class for resolution selector button
129
+ _V_.ResolutionSelector.prototype.buildCSSClass = function buildCSSClass() {
130
+ return 'vjs-res-button ' + _V_.getComponent( 'MenuButton' ).prototype.buildCSSClass.call( this );
131
+ };
132
 
133
  // Create a menu item for each available resolution
134
  _V_.ResolutionSelector.prototype.createItems = function() {
140
  // Add the menu title item
141
  items.push( new _V_.ResolutionTitleMenuItem( player, {
142
 
143
+ el : _V_.getComponent( 'Component' ).prototype.createEl( 'li', {
144
 
145
  className : 'vjs-menu-title vjs-res-menu-title',
146
+ innerHTML : player.localize( 'Quality' )
147
  })
148
  }));
149
 
186
  * Setup variables, parse settings
187
  *******************************************************************/
188
  var player = this,
189
+ sources = this.options_.sources,
190
  i = sources.length,
191
  j,
192
  found_type,
193
 
194
  // Override default options with those provided
195
+ settings = _V_.mergeOptions({
196
 
197
  default_res : '', // (string) The resolution that should be selected by default ( '480' or '480,1080,240' )
198
  force_types : false // (array) List of media types. If passed, we need to have source for each type in each resolution or that resolution will not be an option
286
  * Add methods to player object
287
  *******************************************************************/
288
 
289
+ // Make sure we have player.localize() if it's not defined by Video.js
290
+ if ( typeof player.localize !== 'function' ) {
291
+
292
+ player.localize = function( string ) {
293
+
294
+ return string;
295
+ };
296
+ }
297
+
298
  // Helper function to get the current resolution
299
  player.getCurrentRes = function() {
300
 
306
 
307
  try {
308
 
309
+ return res = sources[0]['data-res'];
310
 
311
  } catch(e) {
312
 
332
  // Make sure the loadedmetadata event will fire
333
  if ( 'none' == video_el.preload ) { video_el.preload = 'metadata'; }
334
 
335
+ if ( current_time != 0 ) {
336
+
337
+ player.pause();
338
+
339
+ var canvas = document.createElement("canvas");
340
+ canvas.className = 'kgvid_temp_thumb';
341
+ canvas.width = player.width();
342
+ canvas.height = player.height();
343
+ var context = canvas.getContext('2d');
344
+ context.fillRect(0, 0, player.width(), player.height());
345
+ context.drawImage(video_el, 0, 0, player.width(), player.height());
346
+ jQuery(video_el).parent().append(canvas);
347
+
348
+ player.bigPlayButton.hide();
349
+
350
+ }
351
+
352
  // Change the source and make sure we don't start the video over
353
+ player.src( player.availableRes[target_resolution] )
354
+ .one( 'loadedmetadata', function() {
355
 
356
+ if ( current_time != 0 ) {
357
 
358
+ player.currentTime( current_time );
359
+ player.pause();
 
 
 
360
 
361
+ // If the video was paused, don't show the poster image again
362
+ player.addClass( 'vjs-has-started' );
363
+
364
+ if ( ! is_paused ) { player.play(); }
365
+ }
366
 
367
+ })
368
+ .one( 'seeked', function() {
369
+ if ( current_time != 0 ) {
370
+
371
+ jQuery(canvas).remove();
372
+
373
+ }
374
+ });
375
 
376
  // Save the newly selected resolution in our player options property
377
  player.currentRes = target_resolution;
378
 
379
  // Make sure the button has been added to the control bar
380
+ if ( player.getChild( 'controlBar' ).getChild( 'resolutionSelector' ) ) {
381
 
382
+ button_nodes = player.getChild( 'controlBar' ).getChild( 'resolutionSelector' ).el().firstChild.children;
383
  button_node_count = button_nodes.length;
384
 
385
  // Update the button text
410
 
411
  // Add the resolution selector button
412
  resolutionSelector = new _V_.ResolutionSelector( player, {
413
+ buttonText : player.localize( current_res || 'Quality' ),
414
  available_res : available_res
415
  });
416
 
417
  // Add the button to the control bar object and the DOM
418
+ this.on( 'ready' , function() {
419
+ player.controlBar.addChild( resolutionSelector );
420
+
421
+ player.controlBar.el().insertBefore(jQuery(player.controlBar.el()).find('.vjs-res-button')[0], player.controlBar.customControlSpacer.el());
422
+ } );
423
  });
424
 
425
  })( videojs );
video-js/video.js CHANGED
@@ -1,203 +1,25 @@
1
- /*! Video.js v4.12.11 Copyright 2014 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE */
2
- (function() {var b=void 0,f=!0,j=null,l=!1;function m(){return function(){}}function n(a){return function(){return this[a]}}function p(a){return function(){return a}}var s;document.createElement("video");document.createElement("audio");document.createElement("track");
3
- function t(a,c,d){if("string"===typeof a){0===a.indexOf("#")&&(a=a.slice(1));if(t.Da[a])return c&&t.log.warn('Player "'+a+'" is already initialised. Options will not be applied.'),d&&t.Da[a].I(d),t.Da[a];a=t.m(a)}if(!a||!a.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return a.player||new t.Player(a,c,d)}var videojs=window.videojs=t;t.jc="4.12";t.wd="https:"==document.location.protocol?"https://":"http://";t.VERSION="4.12.11";
4
- t.options={techOrder:["html5","flash"],html5:{},flash:{},width:300,height:150,defaultVolume:0,playbackRates:[],inactivityTimeout:2E3,children:{mediaLoader:{},posterImage:{},loadingSpinner:{},textTrackDisplay:{},bigPlayButton:{},controlBar:{},errorDisplay:{},textTrackSettings:{}},language:document.getElementsByTagName("html")[0].getAttribute("lang")||navigator.languages&&navigator.languages[0]||navigator.Jf||navigator.language||"en",languages:{},notSupportedMessage:"No compatible source was found for this video."};
5
- "GENERATED_CDN_VSN"!==t.jc&&(videojs.options.flash.swf=t.wd+"vjs.zencdn.net/"+t.jc+"/video-js.swf");t.Kd=function(a,c){t.options.languages[a]=t.options.languages[a]!==b?t.$.Ba(t.options.languages[a],c):c;return t.options.languages};t.Da={};"function"===typeof define&&define.amd?define("videojs",[],function(){return videojs}):"object"===typeof exports&&"object"===typeof module&&(module.exports=videojs);t.Ha=t.CoreObject=m();
6
- t.Ha.extend=function(a){var c,d;a=a||{};c=a.init||a.l||this.prototype.init||this.prototype.l||m();d=function(){c.apply(this,arguments)};d.prototype=t.i.create(this.prototype);d.prototype.constructor=d;d.extend=t.Ha.extend;d.create=t.Ha.create;for(var e in a)a.hasOwnProperty(e)&&(d.prototype[e]=a[e]);return d};t.Ha.create=function(){var a=t.i.create(this.prototype);this.apply(a,arguments);return a};
7
- t.b=function(a,c,d){if(t.i.isArray(c))return v(t.b,a,c,d);var e=t.getData(a);e.G||(e.G={});e.G[c]||(e.G[c]=[]);d.s||(d.s=t.s++);e.G[c].push(d);e.ca||(e.disabled=l,e.ca=function(c){if(!e.disabled){c=t.Qb(c);var d=e.G[c.type];if(d)for(var d=d.slice(0),k=0,q=d.length;k<q&&!c.Rc();k++)d[k].call(a,c)}});1==e.G[c].length&&(a.addEventListener?a.addEventListener(c,e.ca,l):a.attachEvent&&a.attachEvent("on"+c,e.ca))};
8
- t.n=function(a,c,d){if(t.Mc(a)){var e=t.getData(a);if(e.G){if(t.i.isArray(c))return v(t.n,a,c,d);if(c){var g=e.G[c];if(g){if(d){if(d.s)for(e=0;e<g.length;e++)g[e].s===d.s&&g.splice(e--,1)}else e.G[c]=[];t.Bc(a,c)}}else for(g in e.G)c=g,e.G[c]=[],t.Bc(a,c)}}};t.Bc=function(a,c){var d=t.getData(a);0===d.G[c].length&&(delete d.G[c],a.removeEventListener?a.removeEventListener(c,d.ca,l):a.detachEvent&&a.detachEvent("on"+c,d.ca));t.kb(d.G)&&(delete d.G,delete d.ca,delete d.disabled);t.kb(d)&&t.cd(a)};
9
- t.Qb=function(a){function c(){return f}function d(){return l}if(!a||!a.Wb){var e=a||window.event;a={};for(var g in e)"layerX"!==g&&("layerY"!==g&&"keyLocation"!==g)&&("returnValue"==g&&e.preventDefault||(a[g]=e[g]));a.target||(a.target=a.srcElement||document);a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;a.preventDefault=function(){e.preventDefault&&e.preventDefault();a.returnValue=l;a.je=c;a.defaultPrevented=f};a.je=d;a.defaultPrevented=l;a.stopPropagation=function(){e.stopPropagation&&
10
- e.stopPropagation();a.cancelBubble=f;a.Wb=c};a.Wb=d;a.stopImmediatePropagation=function(){e.stopImmediatePropagation&&e.stopImmediatePropagation();a.Rc=c;a.stopPropagation()};a.Rc=d;if(a.clientX!=j){g=document.documentElement;var h=document.body;a.pageX=a.clientX+(g&&g.scrollLeft||h&&h.scrollLeft||0)-(g&&g.clientLeft||h&&h.clientLeft||0);a.pageY=a.clientY+(g&&g.scrollTop||h&&h.scrollTop||0)-(g&&g.clientTop||h&&h.clientTop||0)}a.which=a.charCode||a.keyCode;a.button!=j&&(a.button=a.button&1?0:a.button&
11
- 4?1:a.button&2?2:0)}return a};t.o=function(a,c){var d=t.Mc(a)?t.getData(a):{},e=a.parentNode||a.ownerDocument;"string"===typeof c&&(c={type:c,target:a});c=t.Qb(c);d.ca&&d.ca.call(a,c);if(e&&!c.Wb()&&c.bubbles!==l)t.o(e,c);else if(!e&&!c.defaultPrevented&&(d=t.getData(c.target),c.target[c.type])){d.disabled=f;if("function"===typeof c.target[c.type])c.target[c.type]();d.disabled=l}return!c.defaultPrevented};
12
- t.N=function(a,c,d){function e(){t.n(a,c,e);d.apply(this,arguments)}if(t.i.isArray(c))return v(t.N,a,c,d);e.s=d.s=d.s||t.s++;t.b(a,c,e)};function v(a,c,d,e){t.xc.forEach(d,function(d){a(c,d,e)})}var w=Object.prototype.hasOwnProperty;t.f=function(a,c){var d;c=c||{};d=document.createElement(a||"div");t.i.da(c,function(a,c){-1!==a.indexOf("aria-")||"role"==a?d.setAttribute(a,c):d[a]=c});return d};t.wa=function(a){return a.charAt(0).toUpperCase()+a.slice(1)};t.i={};
13
- t.i.create=Object.create||function(a){function c(){}c.prototype=a;return new c};t.i.da=function(a,c,d){for(var e in a)w.call(a,e)&&c.call(d||this,e,a[e])};t.i.D=function(a,c){if(!c)return a;for(var d in c)w.call(c,d)&&(a[d]=c[d]);return a};t.i.Sd=function(a,c){var d,e,g;a=t.i.copy(a);for(d in c)w.call(c,d)&&(e=a[d],g=c[d],a[d]=t.i.lb(e)&&t.i.lb(g)?t.i.Sd(e,g):c[d]);return a};t.i.copy=function(a){return t.i.D({},a)};
14
- t.i.lb=function(a){return!!a&&"object"===typeof a&&"[object Object]"===a.toString()&&a.constructor===Object};t.i.isArray=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)};t.le=function(a){return a!==a};t.bind=function(a,c,d){function e(){return c.apply(a,arguments)}c.s||(c.s=t.s++);e.s=d?d+"_"+c.s:c.s;return e};t.va={};t.s=1;t.expando="vdata"+(new Date).getTime();t.getData=function(a){var c=a[t.expando];c||(c=a[t.expando]=t.s++);t.va[c]||(t.va[c]={});return t.va[c]};
15
- t.Mc=function(a){a=a[t.expando];return!(!a||t.kb(t.va[a]))};t.cd=function(a){var c=a[t.expando];if(c){delete t.va[c];try{delete a[t.expando]}catch(d){a.removeAttribute?a.removeAttribute(t.expando):a[t.expando]=j}}};t.kb=function(a){for(var c in a)if(a[c]!==j)return l;return f};t.Qa=function(a,c){return-1!==(" "+a.className+" ").indexOf(" "+c+" ")};t.p=function(a,c){t.Qa(a,c)||(a.className=""===a.className?c:a.className+" "+c)};
16
- t.r=function(a,c){var d,e;if(t.Qa(a,c)){d=a.className.split(" ");for(e=d.length-1;0<=e;e--)d[e]===c&&d.splice(e,1);a.className=d.join(" ")}};t.A=t.f("video");var x=document.createElement("track");x.Xb="captions";x.jd="en";x.label="English";t.A.appendChild(x);t.P=navigator.userAgent;t.Dd=/iPhone/i.test(t.P);t.Cd=/iPad/i.test(t.P);t.Ed=/iPod/i.test(t.P);t.Bd=t.Dd||t.Cd||t.Ed;var aa=t,y;var z=t.P.match(/OS (\d+)_/i);y=z&&z[1]?z[1]:b;aa.lf=y;t.Ad=/Android/i.test(t.P);var ba=t,B;
17
- var C=t.P.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i),D,E;C?(D=C[1]&&parseFloat(C[1]),E=C[2]&&parseFloat(C[2]),B=D&&E?parseFloat(C[1]+"."+C[2]):D?D:j):B=j;ba.ic=B;t.Fd=t.Ad&&/webkit/i.test(t.P)&&2.3>t.ic;t.kc=/Firefox/i.test(t.P);t.mf=/Chrome/i.test(t.P);t.qa=/MSIE\s8\.0/.test(t.P);t.Gb=!!("ontouchstart"in window||window.yd&&document instanceof window.yd);t.xd="backgroundSize"in t.A.style;
18
- t.ed=function(a,c){t.i.da(c,function(c,e){e===j||"undefined"===typeof e||e===l?a.removeAttribute(c):a.setAttribute(c,e===f?"":e)})};t.Pa=function(a){var c,d,e,g;c={};if(a&&a.attributes&&0<a.attributes.length){d=a.attributes;for(var h=d.length-1;0<=h;h--){e=d[h].name;g=d[h].value;if("boolean"===typeof a[e]||-1!==",autoplay,controls,loop,muted,default,".indexOf(","+e+","))g=g!==j?f:l;c[e]=g}}return c};
19
- t.wf=function(a,c){var d="";document.defaultView&&document.defaultView.getComputedStyle?d=document.defaultView.getComputedStyle(a,"").getPropertyValue(c):a.currentStyle&&(d=a["client"+c.substr(0,1).toUpperCase()+c.substr(1)]+"px");return d};t.Vb=function(a,c){c.firstChild?c.insertBefore(a,c.firstChild):c.appendChild(a)};t.eb={};t.m=function(a){0===a.indexOf("#")&&(a=a.slice(1));return document.getElementById(a)};
20
- t.Oa=function(a,c){c=c||a;var d=Math.floor(a%60),e=Math.floor(a/60%60),g=Math.floor(a/3600),h=Math.floor(c/60%60),k=Math.floor(c/3600);if(isNaN(a)||Infinity===a)g=e=d="-";g=0<g||0<k?g+":":"";return g+(((g||10<=h)&&10>e?"0"+e:e)+":")+(10>d?"0"+d:d)};t.Md=function(){document.body.focus();document.onselectstart=p(l)};t.bf=function(){document.onselectstart=p(f)};t.trim=function(a){return(a+"").replace(/^\s+|\s+$/g,"")};t.round=function(a,c){c||(c=0);return Math.round(a*Math.pow(10,c))/Math.pow(10,c)};
21
- t.ya=function(a,c){return a===b&&c===b?{length:0,start:function(){throw Error("This TimeRanges object is empty");},end:function(){throw Error("This TimeRanges object is empty");}}:{length:1,start:function(){return a},end:function(){return c}}};t.Ne=function(a){try{var c=window.localStorage||l;c&&(c.volume=a)}catch(d){22==d.code||1014==d.code?t.log("LocalStorage Full (VideoJS)",d):18==d.code?t.log("LocalStorage not allowed (VideoJS)",d):t.log("LocalStorage Error (VideoJS)",d)}};
22
- t.ae=function(a){a.match(/^https?:\/\//)||(a=t.f("div",{innerHTML:'<a href="'+a+'">x</a>'}).firstChild.href);return a};
23
- t.Fe=function(a){var c,d,e,g;g="protocol hostname port pathname search hash host".split(" ");d=t.f("a",{href:a});if(e=""===d.host&&"file:"!==d.protocol)c=t.f("div"),c.innerHTML='<a href="'+a+'"></a>',d=c.firstChild,c.setAttribute("style","display:none; position:absolute;"),document.body.appendChild(c);a={};for(var h=0;h<g.length;h++)a[g[h]]=d[g[h]];"http:"===a.protocol&&(a.host=a.host.replace(/:80$/,""));"https:"===a.protocol&&(a.host=a.host.replace(/:443$/,""));e&&document.body.removeChild(c);return a};
24
- function F(a,c){var d,e;d=Array.prototype.slice.call(c);e=m();e=window.console||{log:e,warn:e,error:e};a?d.unshift(a.toUpperCase()+":"):a="log";t.log.history.push(d);d.unshift("VIDEOJS:");if(e[a].apply)e[a].apply(e,d);else e[a](d.join(" "))}t.log=function(){F(j,arguments)};t.log.history=[];t.log.error=function(){F("error",arguments)};t.log.warn=function(){F("warn",arguments)};
25
- t.Zd=function(a){var c,d;a.getBoundingClientRect&&a.parentNode&&(c=a.getBoundingClientRect());if(!c)return{left:0,top:0};a=document.documentElement;d=document.body;return{left:t.round(c.left+(window.pageXOffset||d.scrollLeft)-(a.clientLeft||d.clientLeft||0)),top:t.round(c.top+(window.pageYOffset||d.scrollTop)-(a.clientTop||d.clientTop||0))}};t.xc={};t.xc.forEach=function(a,c,d){if(t.i.isArray(a)&&c instanceof Function)for(var e=0,g=a.length;e<g;++e)c.call(d||t,a[e],e,a);return a};
26
- t.gf=function(a,c){var d,e,g,h,k,q,r;"string"===typeof a&&(a={uri:a});videojs.$.Ba({method:"GET",timeout:45E3},a);c=c||m();q=function(){window.clearTimeout(k);c(j,e,e.response||e.responseText)};r=function(a){window.clearTimeout(k);if(!a||"string"===typeof a)a=Error(a);c(a,e)};d=window.XMLHttpRequest;"undefined"===typeof d&&(d=function(){try{return new window.ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new window.ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new window.ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw Error("This browser does not support XMLHttpRequest.");
27
- });e=new d;e.uri=a.uri;d=t.Fe(a.uri);g=window.location;d.protocol+d.host!==g.protocol+g.host&&window.XDomainRequest&&!("withCredentials"in e)?(e=new window.XDomainRequest,e.onload=q,e.onerror=r,e.onprogress=m(),e.ontimeout=m()):(h="file:"==d.protocol||"file:"==g.protocol,e.onreadystatechange=function(){if(4===e.readyState){if(e.Ze)return r("timeout");200===e.status||h&&0===e.status?q():r()}},a.timeout&&(k=window.setTimeout(function(){4!==e.readyState&&(e.Ze=f,e.abort())},a.timeout)));try{e.open(a.method||
28
- "GET",a.uri,f)}catch(u){r(u);return}a.withCredentials&&(e.withCredentials=f);a.responseType&&(e.responseType=a.responseType);try{e.send()}catch(A){r(A)}};t.$={};t.$.Ba=function(a,c){var d,e,g;a=t.i.copy(a);for(d in c)c.hasOwnProperty(d)&&(e=a[d],g=c[d],a[d]=t.i.lb(e)&&t.i.lb(g)?t.$.Ba(e,g):c[d]);return a};t.z=m();s=t.z.prototype;s.cb={};s.b=function(a,c){var d=this.addEventListener;this.addEventListener=Function.prototype;t.b(this,a,c);this.addEventListener=d};s.addEventListener=t.z.prototype.b;
29
- s.n=function(a,c){t.n(this,a,c)};s.removeEventListener=t.z.prototype.n;s.N=function(a,c){t.N(this,a,c)};s.o=function(a){var c=a.type||a;"string"===typeof a&&(a={type:c});a=t.Qb(a);if(this.cb[c]&&this["on"+c])this["on"+c](a);t.o(this,a)};s.dispatchEvent=t.z.prototype.o;
30
- t.a=t.Ha.extend({l:function(a,c,d){this.d=a;this.q=t.i.copy(this.q);c=this.options(c);this.Ra=c.id||c.el&&c.el.id;this.Ra||(this.Ra=(a.id&&a.id()||"no_player")+"_component_"+t.s++);this.ue=c.name||j;this.c=c.el||this.f();this.R=[];this.gb={};this.hb={};this.Oc();this.I(d);if(c.dd!==l){var e,g;this.k().reportUserActivity&&(e=t.bind(this.k(),this.k().reportUserActivity),this.b("touchstart",function(){e();this.clearInterval(g);g=this.setInterval(e,250)}),a=function(){e();this.clearInterval(g)},this.b("touchmove",
31
- e),this.b("touchend",a),this.b("touchcancel",a))}}});s=t.a.prototype;s.dispose=function(){this.o({type:"dispose",bubbles:l});if(this.R)for(var a=this.R.length-1;0<=a;a--)this.R[a].dispose&&this.R[a].dispose();this.hb=this.gb=this.R=j;this.n();this.c.parentNode&&this.c.parentNode.removeChild(this.c);t.cd(this.c);this.c=j};s.d=f;s.k=n("d");s.options=function(a){return a===b?this.q:this.q=t.$.Ba(this.q,a)};s.f=function(a,c){return t.f(a,c)};
32
- s.v=function(a){var c=this.d.language(),d=this.d.languages();return d&&d[c]&&d[c][a]?d[c][a]:a};s.m=n("c");s.xa=function(){return this.B||this.c};s.id=n("Ra");s.name=n("ue");s.children=n("R");s.be=function(a){return this.gb[a]};s.ea=function(a){return this.hb[a]};
33
- s.ba=function(a,c){var d,e;"string"===typeof a?(e=a,c=c||{},d=c.componentClass||t.wa(e),c.name=e,d=new window.videojs[d](this.d||this,c)):d=a;this.R.push(d);"function"===typeof d.id&&(this.gb[d.id()]=d);(e=e||d.name&&d.name())&&(this.hb[e]=d);"function"===typeof d.el&&d.el()&&this.xa().appendChild(d.el());return d};
34
- s.removeChild=function(a){"string"===typeof a&&(a=this.ea(a));if(a&&this.R){for(var c=l,d=this.R.length-1;0<=d;d--)if(this.R[d]===a){c=f;this.R.splice(d,1);break}c&&(this.gb[a.id()]=j,this.hb[a.name()]=j,(c=a.m())&&c.parentNode===this.xa()&&this.xa().removeChild(a.m()))}};
35
- s.Oc=function(){var a,c,d,e,g,h;a=this;c=a.options();if(d=c.children)if(h=function(d,e){c[d]!==b&&(e=c[d]);e!==l&&(a[d]=a.ba(d,e))},t.i.isArray(d))for(var k=0;k<d.length;k++)e=d[k],"string"==typeof e?(g=e,e={}):g=e.name,h(g,e);else t.i.da(d,h)};s.V=p("");
36
- s.b=function(a,c,d){var e,g,h;"string"===typeof a||t.i.isArray(a)?t.b(this.c,a,t.bind(this,c)):(e=t.bind(this,d),h=this,g=function(){h.n(a,c,e)},g.s=e.s,this.b("dispose",g),d=function(){h.n("dispose",g)},d.s=e.s,a.nodeName?(t.b(a,c,e),t.b(a,"dispose",d)):"function"===typeof a.b&&(a.b(c,e),a.b("dispose",d)));return this};
37
- s.n=function(a,c,d){!a||"string"===typeof a||t.i.isArray(a)?t.n(this.c,a,c):(d=t.bind(this,d),this.n("dispose",d),a.nodeName?(t.n(a,c,d),t.n(a,"dispose",d)):(a.n(c,d),a.n("dispose",d)));return this};s.N=function(a,c,d){var e,g,h;"string"===typeof a||t.i.isArray(a)?t.N(this.c,a,t.bind(this,c)):(e=t.bind(this,d),g=this,h=function(){g.n(a,c,h);e.apply(this,arguments)},h.s=e.s,this.b(a,c,h));return this};s.o=function(a){t.o(this.c,a);return this};
38
- s.I=function(a){a&&(this.za?a.call(this):(this.pb===b&&(this.pb=[]),this.pb.push(a)));return this};s.Xa=function(){this.za=f;var a=this.pb;if(a&&0<a.length){for(var c=0,d=a.length;c<d;c++)a[c].call(this);this.pb=[];this.o("ready")}};s.Qa=function(a){return t.Qa(this.c,a)};s.p=function(a){t.p(this.c,a);return this};s.r=function(a){t.r(this.c,a);return this};s.show=function(){this.r("vjs-hidden");return this};s.Y=function(){this.p("vjs-hidden");return this};function G(a){a.r("vjs-lock-showing")}
39
- s.width=function(a,c){return ca(this,"width",a,c)};s.height=function(a,c){return ca(this,"height",a,c)};s.Ud=function(a,c){return this.width(a,f).height(c)};function ca(a,c,d,e){if(d!==b){if(d===j||t.le(d))d=0;a.c.style[c]=-1!==(""+d).indexOf("%")||-1!==(""+d).indexOf("px")?d:"auto"===d?"":d+"px";e||a.o("resize");return a}if(!a.c)return 0;d=a.c.style[c];e=d.indexOf("px");return-1!==e?parseInt(d.slice(0,e),10):parseInt(a.c["offset"+t.wa(c)],10)}
40
- function da(a){var c,d,e,g,h,k,q,r;c=0;d=j;a.b("touchstart",function(a){1===a.touches.length&&(d=t.i.copy(a.touches[0]),c=(new Date).getTime(),g=f)});a.b("touchmove",function(a){1<a.touches.length?g=l:d&&(k=a.touches[0].pageX-d.pageX,q=a.touches[0].pageY-d.pageY,r=Math.sqrt(k*k+q*q),10<r&&(g=l))});h=function(){g=l};a.b("touchleave",h);a.b("touchcancel",h);a.b("touchend",function(a){d=j;g===f&&(e=(new Date).getTime()-c,200>e&&(a.preventDefault(),this.o("tap")))})}
41
- s.setTimeout=function(a,c){function d(){this.clearTimeout(e)}a=t.bind(this,a);var e=setTimeout(a,c);d.s="vjs-timeout-"+e;this.b("dispose",d);return e};s.clearTimeout=function(a){function c(){}clearTimeout(a);c.s="vjs-timeout-"+a;this.n("dispose",c);return a};s.setInterval=function(a,c){function d(){this.clearInterval(e)}a=t.bind(this,a);var e=setInterval(a,c);d.s="vjs-interval-"+e;this.b("dispose",d);return e};
42
- s.clearInterval=function(a){function c(){}clearInterval(a);c.s="vjs-interval-"+a;this.n("dispose",c);return a};t.w=t.a.extend({l:function(a,c){t.a.call(this,a,c);da(this);this.b("tap",this.u);this.b("click",this.u);this.b("focus",this.nb);this.b("blur",this.mb)}});s=t.w.prototype;
43
- s.f=function(a,c){var d;c=t.i.D({className:this.V(),role:"button","aria-live":"polite",tabIndex:0},c);d=t.a.prototype.f.call(this,a,c);c.innerHTML||(this.B=t.f("div",{className:"vjs-control-content"}),this.Lb=t.f("span",{className:"vjs-control-text",innerHTML:this.v(this.ua)||"Need Text"}),this.B.appendChild(this.Lb),d.appendChild(this.B));return d};s.V=function(){return"vjs-control "+t.a.prototype.V.call(this)};s.u=m();s.nb=function(){t.b(document,"keydown",t.bind(this,this.la))};
44
- s.la=function(a){if(32==a.which||13==a.which)a.preventDefault(),this.u()};s.mb=function(){t.n(document,"keydown",t.bind(this,this.la))};t.U=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.Ld=this.ea(this.q.barName);this.handle=this.ea(this.q.handleName);this.b("mousedown",this.ob);this.b("touchstart",this.ob);this.b("focus",this.nb);this.b("blur",this.mb);this.b("click",this.u);this.b(a,"controlsvisible",this.update);this.b(a,this.Yc,this.update)}});s=t.U.prototype;
45
- s.f=function(a,c){c=c||{};c.className+=" vjs-slider";c=t.i.D({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},c);return t.a.prototype.f.call(this,a,c)};s.ob=function(a){a.preventDefault();t.Md();this.p("vjs-sliding");this.b(document,"mousemove",this.ma);this.b(document,"mouseup",this.Ca);this.b(document,"touchmove",this.ma);this.b(document,"touchend",this.Ca);this.ma(a)};s.ma=m();
46
- s.Ca=function(){t.bf();this.r("vjs-sliding");this.n(document,"mousemove",this.ma);this.n(document,"mouseup",this.Ca);this.n(document,"touchmove",this.ma);this.n(document,"touchend",this.Ca);this.update()};s.update=function(){if(this.c){var a,c=this.Tb(),d=this.handle,e=this.Ld;if("number"!==typeof c||c!==c||0>c||Infinity===c)c=0;a=c;if(d){a=this.c.offsetWidth;var g=d.m().offsetWidth;a=g?g/a:0;c*=1-a;a=c+a/2;d.m().style.left=t.round(100*c,2)+"%"}e&&(e.m().style.width=t.round(100*a,2)+"%")}};
47
- function ea(a,c){var d,e,g,h;d=a.c;e=t.Zd(d);h=g=d.offsetWidth;d=a.handle;if(a.options().vertical)return h=e.top,e=c.changedTouches?c.changedTouches[0].pageY:c.pageY,d&&(d=d.m().offsetHeight,h+=d/2,g-=d),Math.max(0,Math.min(1,(h-e+g)/g));g=e.left;e=c.changedTouches?c.changedTouches[0].pageX:c.pageX;d&&(d=d.m().offsetWidth,g+=d/2,h-=d);return Math.max(0,Math.min(1,(e-g)/h))}s.nb=function(){this.b(document,"keydown",this.la)};
48
- s.la=function(a){if(37==a.which||40==a.which)a.preventDefault(),this.kd();else if(38==a.which||39==a.which)a.preventDefault(),this.ld()};s.mb=function(){this.n(document,"keydown",this.la)};s.u=function(a){a.stopImmediatePropagation();a.preventDefault()};t.ha=t.a.extend();t.ha.prototype.defaultValue=0;t.ha.prototype.f=function(a,c){c=c||{};c.className+=" vjs-slider-handle";c=t.i.D({innerHTML:'<span class="vjs-control-text">'+this.defaultValue+"</span>"},c);return t.a.prototype.f.call(this,"div",c)};
49
- t.ra=t.a.extend();function fa(a,c){a.ba(c);c.b("click",t.bind(a,function(){G(this)}))}t.ra.prototype.f=function(){var a=this.options().Dc||"ul";this.B=t.f(a,{className:"vjs-menu-content"});a=t.a.prototype.f.call(this,"div",{append:this.B,className:"vjs-menu"});a.appendChild(this.B);t.b(a,"click",function(a){a.preventDefault();a.stopImmediatePropagation()});return a};t.M=t.w.extend({l:function(a,c){t.w.call(this,a,c);this.selected(c.selected)}});
50
- t.M.prototype.f=function(a,c){return t.w.prototype.f.call(this,"li",t.i.D({className:"vjs-menu-item",innerHTML:this.v(this.q.label)},c))};t.M.prototype.u=function(){this.selected(f)};t.M.prototype.selected=function(a){a?(this.p("vjs-selected"),this.c.setAttribute("aria-selected",f)):(this.r("vjs-selected"),this.c.setAttribute("aria-selected",l))};
51
- t.O=t.w.extend({l:function(a,c){t.w.call(this,a,c);this.update();this.b("keydown",this.la);this.c.setAttribute("aria-haspopup",f);this.c.setAttribute("role","button")}});s=t.O.prototype;s.update=function(){var a=this.Ma();this.Aa&&this.removeChild(this.Aa);this.Aa=a;this.ba(a);this.H&&0===this.H.length?this.Y():this.H&&1<this.H.length&&this.show()};s.Ka=l;
52
- s.Ma=function(){var a=new t.ra(this.d);this.options().title&&a.xa().appendChild(t.f("li",{className:"vjs-menu-title",innerHTML:t.wa(this.options().title),Xe:-1}));if(this.H=this.createItems())for(var c=0;c<this.H.length;c++)fa(a,this.H[c]);return a};s.La=m();s.V=function(){return this.className+" vjs-menu-button "+t.w.prototype.V.call(this)};s.nb=m();s.mb=m();s.u=function(){this.N("mouseout",t.bind(this,function(){G(this.Aa);this.c.blur()}));this.Ka?H(this):ga(this)};
53
- s.la=function(a){32==a.which||13==a.which?(this.Ka?H(this):ga(this),a.preventDefault()):27==a.which&&(this.Ka&&H(this),a.preventDefault())};function ga(a){a.Ka=f;a.Aa.p("vjs-lock-showing");a.c.setAttribute("aria-pressed",f);a.H&&0<a.H.length&&a.H[0].m().focus()}function H(a){a.Ka=l;G(a.Aa);a.c.setAttribute("aria-pressed",l)}t.J=function(a){"number"===typeof a?this.code=a:"string"===typeof a?this.message=a:"object"===typeof a&&t.i.D(this,a);this.message||(this.message=t.J.Td[this.code]||"")};
54
- t.J.prototype.code=0;t.J.prototype.message="";t.J.prototype.status=j;t.J.jb="MEDIA_ERR_CUSTOM MEDIA_ERR_ABORTED MEDIA_ERR_NETWORK MEDIA_ERR_DECODE MEDIA_ERR_SRC_NOT_SUPPORTED MEDIA_ERR_ENCRYPTED".split(" ");
55
- t.J.Td={1:"You aborted the video playback",2:"A network error caused the video download to fail part-way.",3:"The video playback was aborted due to a corruption problem or because the video used features your browser did not support.",4:"The video could not be loaded, either because the server or network failed or because the format is not supported.",5:"The video is encrypted and we do not have the keys to decrypt it."};for(var I=0;I<t.J.jb.length;I++)t.J[t.J.jb[I]]=I,t.J.prototype[t.J.jb[I]]=I;
56
- var J,ha,K,L;
57
- J=["requestFullscreen exitFullscreen fullscreenElement fullscreenEnabled fullscreenchange fullscreenerror".split(" "),"webkitRequestFullscreen webkitExitFullscreen webkitFullscreenElement webkitFullscreenEnabled webkitfullscreenchange webkitfullscreenerror".split(" "),"webkitRequestFullScreen webkitCancelFullScreen webkitCurrentFullScreenElement webkitCancelFullScreen webkitfullscreenchange webkitfullscreenerror".split(" "),"mozRequestFullScreen mozCancelFullScreen mozFullScreenElement mozFullScreenEnabled mozfullscreenchange mozfullscreenerror".split(" "),"msRequestFullscreen msExitFullscreen msFullscreenElement msFullscreenEnabled MSFullscreenChange MSFullscreenError".split(" ")];
58
- ha=J[0];for(L=0;L<J.length;L++)if(J[L][1]in document){K=J[L];break}if(K){t.eb.Sb={};for(L=0;L<K.length;L++)t.eb.Sb[ha[L]]=K[L]}
59
- t.Player=t.a.extend({l:function(a,c,d){this.L=a;a.id=a.id||"vjs_video_"+t.s++;this.Ye=a&&t.Pa(a);c=t.i.D(ia(a),c);this.Tc=c.language||t.options.language;this.oe=c.languages||t.options.languages;this.K={};this.Zc=c.poster||"";this.Mb=!!c.controls;a.controls=l;c.dd=l;ja(this,"audio"===this.L.nodeName.toLowerCase());t.a.call(this,this,c,d);this.controls()?this.p("vjs-controls-enabled"):this.p("vjs-controls-disabled");ja(this)&&this.p("vjs-audio");t.Da[this.Ra]=this;c.plugins&&t.i.da(c.plugins,function(a,
60
- c){this[a](c)},this);var e,g,h,k,q;e=t.bind(this,this.reportUserActivity);this.b("mousedown",function(){e();this.clearInterval(g);g=this.setInterval(e,250)});this.b("mousemove",function(a){if(a.screenX!=k||a.screenY!=q)k=a.screenX,q=a.screenY,e()});this.b("mouseup",function(){e();this.clearInterval(g)});this.b("keydown",e);this.b("keyup",e);this.setInterval(function(){if(this.Ga){this.Ga=l;this.userActive(f);this.clearTimeout(h);var a=this.options().inactivityTimeout;0<a&&(h=this.setTimeout(function(){this.Ga||
61
- this.userActive(l)},a))}},250)}});s=t.Player.prototype;s.language=function(a){if(a===b)return this.Tc;this.Tc=a;return this};s.languages=n("oe");s.q=t.options;s.dispose=function(){this.o("dispose");this.n("dispose");t.Da[this.Ra]=j;this.L&&this.L.player&&(this.L.player=j);this.c&&this.c.player&&(this.c.player=j);this.h&&this.h.dispose();t.a.prototype.dispose.call(this)};
62
- function ia(a){var c,d,e={sources:[],tracks:[]};c=t.Pa(a);d=c["data-setup"];d!==j&&t.i.D(c,t.JSON.parse(d||"{}"));t.i.D(e,c);if(a.hasChildNodes()){var g,h;a=a.childNodes;g=0;for(h=a.length;g<h;g++)c=a[g],d=c.nodeName.toLowerCase(),"source"===d?e.sources.push(t.Pa(c)):"track"===d&&e.tracks.push(t.Pa(c))}return e}
63
- s.f=function(){var a=this.c=t.a.prototype.f.call(this,"div"),c=this.L,d;c.removeAttribute("width");c.removeAttribute("height");d=t.Pa(c);t.i.da(d,function(c){"class"==c?a.className=d[c]:a.setAttribute(c,d[c])});c.id+="_html5_api";c.className="vjs-tech";c.player=a.player=this;this.p("vjs-paused");this.width(this.q.width,f);this.height(this.q.height,f);c.he=c.networkState;c.parentNode&&c.parentNode.insertBefore(a,c);t.Vb(c,a);this.c=a;this.b("loadstart",this.ye);this.b("waiting",this.Ee);this.b(["canplay",
64
- "canplaythrough","playing","ended"],this.De);this.b("seeking",this.Be);this.b("seeked",this.Ae);this.b("ended",this.ve);this.b("play",this.ac);this.b("firstplay",this.we);this.b("pause",this.$b);this.b("progress",this.ze);this.b("durationchange",this.Wc);this.b("fullscreenchange",this.xe);return a};
65
- function ka(a,c,d){a.h&&(a.za=l,a.h.dispose(),a.h=l);"Html5"!==c&&a.L&&(t.e.Nb(a.L),a.L=j);a.Va=c;a.za=l;var e=t.i.D({source:d,parentEl:a.c},a.q[c.toLowerCase()]);d&&(a.Gc=d.type,d.src==a.K.src&&0<a.K.currentTime&&(e.startTime=a.K.currentTime),a.K.src=d.src);a.h=new window.videojs[c](a,e);a.h.I(function(){this.d.Xa()})}s.ye=function(){this.r("vjs-ended");this.error(j);this.paused()?la(this,l):this.o("firstplay")};s.Nc=l;
66
- function la(a,c){c!==b&&a.Nc!==c&&((a.Nc=c)?(a.p("vjs-has-started"),a.o("firstplay")):a.r("vjs-has-started"))}s.ac=function(){this.r("vjs-ended");this.r("vjs-paused");this.p("vjs-playing");la(this,f)};s.Ee=function(){this.p("vjs-waiting")};s.De=function(){this.r("vjs-waiting")};s.Be=function(){this.p("vjs-seeking")};s.Ae=function(){this.r("vjs-seeking")};s.we=function(){this.q.starttime&&this.currentTime(this.q.starttime);this.p("vjs-has-started")};s.$b=function(){this.r("vjs-playing");this.p("vjs-paused")};
67
- s.ze=function(){1==this.bufferedPercent()&&this.o("loadedalldata")};s.ve=function(){this.p("vjs-ended");this.q.loop?(this.currentTime(0),this.play()):this.paused()||this.pause()};s.Wc=function(){var a=M(this,"duration");a&&(0>a&&(a=Infinity),this.duration(a),Infinity===a?this.p("vjs-live"):this.r("vjs-live"))};s.xe=function(){this.isFullscreen()?this.p("vjs-fullscreen"):this.r("vjs-fullscreen")};
68
- function N(a,c,d){if(a.h&&!a.h.za)a.h.I(function(){this[c](d)});else try{a.h[c](d)}catch(e){throw t.log(e),e;}}function M(a,c){if(a.h&&a.h.za)try{return a.h[c]()}catch(d){throw a.h[c]===b?t.log("Video.js: "+c+" method not defined for "+a.Va+" playback technology.",d):"TypeError"==d.name?(t.log("Video.js: "+c+" unavailable on "+a.Va+" playback technology element.",d),a.h.za=l):t.log(d),d;}}s.play=function(){N(this,"play");return this};s.pause=function(){N(this,"pause");return this};
69
- s.paused=function(){return M(this,"paused")===l?l:f};s.currentTime=function(a){return a!==b?(N(this,"setCurrentTime",a),this):this.K.currentTime=M(this,"currentTime")||0};s.duration=function(a){if(a!==b)return this.K.duration=parseFloat(a),this;this.K.duration===b&&this.Wc();return this.K.duration||0};s.remainingTime=function(){return this.duration()-this.currentTime()};s.buffered=function(){var a=M(this,"buffered");if(!a||!a.length)a=t.ya(0,0);return a};
70
- s.bufferedPercent=function(){var a=this.duration(),c=this.buffered(),d=0,e,g;if(!a)return 0;for(var h=0;h<c.length;h++)e=c.start(h),g=c.end(h),g>a&&(g=a),d+=g-e;return d/a};s.volume=function(a){if(a!==b)return a=Math.max(0,Math.min(1,parseFloat(a))),this.K.volume=a,N(this,"setVolume",a),t.Ne(a),this;a=parseFloat(M(this,"volume"));return isNaN(a)?1:a};s.muted=function(a){return a!==b?(N(this,"setMuted",a),this):M(this,"muted")||l};s.Ua=function(){return M(this,"supportsFullScreen")||l};s.Qc=l;
71
- s.isFullscreen=function(a){return a!==b?(this.Qc=!!a,this):this.Qc};s.isFullScreen=function(a){t.log.warn('player.isFullScreen() has been deprecated, use player.isFullscreen() with a lowercase "s")');return this.isFullscreen(a)};
72
- s.requestFullscreen=function(){var a=t.eb.Sb;this.isFullscreen(f);a?(t.b(document,a.fullscreenchange,t.bind(this,function(c){this.isFullscreen(document[a.fullscreenElement]);this.isFullscreen()===l&&t.n(document,a.fullscreenchange,arguments.callee);this.o("fullscreenchange")})),this.c[a.requestFullscreen]()):this.h.Ua()?N(this,"enterFullScreen"):(this.Jc(),this.o("fullscreenchange"));return this};
73
- s.requestFullScreen=function(){t.log.warn('player.requestFullScreen() has been deprecated, use player.requestFullscreen() with a lowercase "s")');return this.requestFullscreen()};s.exitFullscreen=function(){var a=t.eb.Sb;this.isFullscreen(l);if(a)document[a.exitFullscreen]();else this.h.Ua()?N(this,"exitFullScreen"):(this.Ob(),this.o("fullscreenchange"));return this};s.cancelFullScreen=function(){t.log.warn("player.cancelFullScreen() has been deprecated, use player.exitFullscreen()");return this.exitFullscreen()};
74
- s.Jc=function(){this.ke=f;this.Vd=document.documentElement.style.overflow;t.b(document,"keydown",t.bind(this,this.Kc));document.documentElement.style.overflow="hidden";t.p(document.body,"vjs-full-window");this.o("enterFullWindow")};s.Kc=function(a){27===a.keyCode&&(this.isFullscreen()===f?this.exitFullscreen():this.Ob())};s.Ob=function(){this.ke=l;t.n(document,"keydown",this.Kc);document.documentElement.style.overflow=this.Vd;t.r(document.body,"vjs-full-window");this.o("exitFullWindow")};
75
- s.selectSource=function(a){for(var c=0,d=this.q.techOrder;c<d.length;c++){var e=t.wa(d[c]),g=window.videojs[e];if(g){if(g.isSupported())for(var h=0,k=a;h<k.length;h++){var q=k[h];if(g.canPlaySource(q))return{source:q,h:e}}}else t.log.error('The "'+e+'" tech is undefined. Skipped browser support check for that tech.')}return l};
76
- s.src=function(a){if(a===b)return M(this,"src");t.i.isArray(a)?ma(this,a):"string"===typeof a?this.src({src:a}):a instanceof Object&&(a.type&&!window.videojs[this.Va].canPlaySource(a)?ma(this,[a]):(this.K.src=a.src,this.Gc=a.type||"",this.I(function(){window.videojs[this.Va].prototype.hasOwnProperty("setSource")?N(this,"setSource",a):N(this,"src",a.src);"auto"==this.q.preload&&this.load();this.q.autoplay&&this.play()})));return this};
77
- function ma(a,c){var d=a.selectSource(c);d?d.h===a.Va?a.src(d.source):ka(a,d.h,d.source):(a.setTimeout(function(){this.error({code:4,message:this.v(this.options().notSupportedMessage)})},0),a.Xa())}s.load=function(){N(this,"load");return this};s.currentSrc=function(){return M(this,"currentSrc")||this.K.src||""};s.Rd=function(){return this.Gc||""};s.Sa=function(a){return a!==b?(N(this,"setPreload",a),this.q.preload=a,this):M(this,"preload")};
78
- s.autoplay=function(a){return a!==b?(N(this,"setAutoplay",a),this.q.autoplay=a,this):M(this,"autoplay")};s.loop=function(a){return a!==b?(N(this,"setLoop",a),this.q.loop=a,this):M(this,"loop")};s.poster=function(a){if(a===b)return this.Zc;a||(a="");this.Zc=a;N(this,"setPoster",a);this.o("posterchange");return this};
79
- s.controls=function(a){return a!==b?(a=!!a,this.Mb!==a&&((this.Mb=a)?(this.r("vjs-controls-disabled"),this.p("vjs-controls-enabled"),this.o("controlsenabled")):(this.r("vjs-controls-enabled"),this.p("vjs-controls-disabled"),this.o("controlsdisabled"))),this):this.Mb};t.Player.prototype.fc;s=t.Player.prototype;
80
- s.usingNativeControls=function(a){return a!==b?(a=!!a,this.fc!==a&&((this.fc=a)?(this.p("vjs-using-native-controls"),this.o("usingnativecontrols")):(this.r("vjs-using-native-controls"),this.o("usingcustomcontrols"))),this):this.fc};s.ka=j;s.error=function(a){if(a===b)return this.ka;if(a===j)return this.ka=a,this.r("vjs-error"),this;this.ka=a instanceof t.J?a:new t.J(a);this.o("error");this.p("vjs-error");t.log.error("(CODE:"+this.ka.code+" "+t.J.jb[this.ka.code]+")",this.ka.message,this.ka);return this};
81
- s.ended=function(){return M(this,"ended")};s.seeking=function(){return M(this,"seeking")};s.seekable=function(){return M(this,"seekable")};s.Ga=f;s.reportUserActivity=function(){this.Ga=f};s.ec=f;
82
- s.userActive=function(a){return a!==b?(a=!!a,a!==this.ec&&((this.ec=a)?(this.Ga=f,this.r("vjs-user-inactive"),this.p("vjs-user-active"),this.o("useractive")):(this.Ga=l,this.h&&this.h.N("mousemove",function(a){a.stopPropagation();a.preventDefault()}),this.r("vjs-user-active"),this.p("vjs-user-inactive"),this.o("userinactive"))),this):this.ec};s.playbackRate=function(a){return a!==b?(N(this,"setPlaybackRate",a),this):this.h&&this.h.featuresPlaybackRate?M(this,"playbackRate"):1};s.Pc=l;
83
- function ja(a,c){return c!==b?(a.Pc=!!c,a):a.Pc}s.networkState=function(){return M(this,"networkState")};s.readyState=function(){return M(this,"readyState")};s.textTracks=function(){return this.h&&this.h.textTracks()};s.Z=function(){return this.h&&this.h.remoteTextTracks()};s.addTextTrack=function(a,c,d){return this.h&&this.h.addTextTrack(a,c,d)};s.ia=function(a){return this.h&&this.h.addRemoteTextTrack(a)};s.Ea=function(a){this.h&&this.h.removeRemoteTextTrack(a)};t.wb=t.a.extend();
84
- t.wb.prototype.q={xf:"play",children:{playToggle:{},currentTimeDisplay:{},timeDivider:{},durationDisplay:{},remainingTimeDisplay:{},liveDisplay:{},progressControl:{},fullscreenToggle:{},volumeControl:{},muteToggle:{},playbackRateMenuButton:{},subtitlesButton:{},captionsButton:{},chaptersButton:{}}};t.wb.prototype.f=function(){return t.f("div",{className:"vjs-control-bar"})};t.lc=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});
85
- t.lc.prototype.f=function(){var a=t.a.prototype.f.call(this,"div",{className:"vjs-live-controls vjs-control"});this.B=t.f("div",{className:"vjs-live-display",innerHTML:'<span class="vjs-control-text">'+this.v("Stream Type")+"</span>"+this.v("LIVE"),"aria-live":"off"});a.appendChild(this.B);return a};t.oc=t.w.extend({l:function(a,c){t.w.call(this,a,c);this.b(a,"play",this.ac);this.b(a,"pause",this.$b)}});s=t.oc.prototype;s.ua="Play";s.V=function(){return"vjs-play-control "+t.w.prototype.V.call(this)};
86
- s.u=function(){this.d.paused()?this.d.play():this.d.pause()};s.ac=function(){this.r("vjs-paused");this.p("vjs-playing");this.c.children[0].children[0].innerHTML=this.v("Pause")};s.$b=function(){this.r("vjs-playing");this.p("vjs-paused");this.c.children[0].children[0].innerHTML=this.v("Play")};t.xb=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.b(a,"timeupdate",this.ga)}});
87
- t.xb.prototype.f=function(){var a=t.a.prototype.f.call(this,"div",{className:"vjs-current-time vjs-time-controls vjs-control"});this.B=t.f("div",{className:"vjs-current-time-display",innerHTML:'<span class="vjs-control-text">Current Time </span>0:00',"aria-live":"off"});a.appendChild(this.B);return a};t.xb.prototype.ga=function(){var a=this.d.qb?this.d.K.currentTime:this.d.currentTime();this.B.innerHTML='<span class="vjs-control-text">'+this.v("Current Time")+"</span> "+t.Oa(a,this.d.duration())};
88
- t.yb=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.b(a,"timeupdate",this.ga);this.b(a,"loadedmetadata",this.ga)}});t.yb.prototype.f=function(){var a=t.a.prototype.f.call(this,"div",{className:"vjs-duration vjs-time-controls vjs-control"});this.B=t.f("div",{className:"vjs-duration-display",innerHTML:'<span class="vjs-control-text">'+this.v("Duration Time")+"</span> 0:00","aria-live":"off"});a.appendChild(this.B);return a};
89
- t.yb.prototype.ga=function(){var a=this.d.duration();a&&(this.B.innerHTML='<span class="vjs-control-text">'+this.v("Duration Time")+"</span> "+t.Oa(a))};t.uc=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});t.uc.prototype.f=function(){return t.a.prototype.f.call(this,"div",{className:"vjs-time-divider",innerHTML:"<div><span>/</span></div>"})};t.Fb=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.b(a,"timeupdate",this.ga)}});
90
- t.Fb.prototype.f=function(){var a=t.a.prototype.f.call(this,"div",{className:"vjs-remaining-time vjs-time-controls vjs-control"});this.B=t.f("div",{className:"vjs-remaining-time-display",innerHTML:'<span class="vjs-control-text">'+this.v("Remaining Time")+"</span> -0:00","aria-live":"off"});a.appendChild(this.B);return a};t.Fb.prototype.ga=function(){this.d.duration()&&(this.B.innerHTML='<span class="vjs-control-text">'+this.v("Remaining Time")+"</span> -"+t.Oa(this.d.remainingTime()))};
91
- t.$a=t.w.extend({l:function(a,c){t.w.call(this,a,c)}});t.$a.prototype.ua="Fullscreen";t.$a.prototype.V=function(){return"vjs-fullscreen-control "+t.w.prototype.V.call(this)};t.$a.prototype.u=function(){this.d.isFullscreen()?(this.d.exitFullscreen(),this.Lb.innerHTML=this.v("Fullscreen")):(this.d.requestFullscreen(),this.Lb.innerHTML=this.v("Non-Fullscreen"))};t.Eb=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});t.Eb.prototype.q={children:{seekBar:{}}};
92
- t.Eb.prototype.f=function(){return t.a.prototype.f.call(this,"div",{className:"vjs-progress-control vjs-control"})};t.rc=t.U.extend({l:function(a,c){t.U.call(this,a,c);this.b(a,"timeupdate",this.Fa);a.I(t.bind(this,this.Fa))}});s=t.rc.prototype;s.q={children:{loadProgressBar:{},playProgressBar:{},seekHandle:{}},barName:"playProgressBar",handleName:"seekHandle"};s.Yc="timeupdate";s.f=function(){return t.U.prototype.f.call(this,"div",{className:"vjs-progress-holder","aria-label":"video progress bar"})};
93
- s.Fa=function(){var a=this.d.qb?this.d.K.currentTime:this.d.currentTime();this.c.setAttribute("aria-valuenow",t.round(100*this.Tb(),2));this.c.setAttribute("aria-valuetext",t.Oa(a,this.d.duration()))};s.Tb=function(){return this.d.currentTime()/this.d.duration()};s.ob=function(a){t.U.prototype.ob.call(this,a);this.d.qb=f;this.d.p("vjs-scrubbing");this.ef=!this.d.paused();this.d.pause()};s.ma=function(a){a=ea(this,a)*this.d.duration();a==this.d.duration()&&(a-=0.1);this.d.currentTime(a)};
94
- s.Ca=function(a){t.U.prototype.Ca.call(this,a);this.d.qb=l;this.d.r("vjs-scrubbing");this.ef&&this.d.play()};s.ld=function(){this.d.currentTime(this.d.currentTime()+5)};s.kd=function(){this.d.currentTime(this.d.currentTime()-5)};t.Bb=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.b(a,"progress",this.update)}});t.Bb.prototype.f=function(){return t.a.prototype.f.call(this,"div",{className:"vjs-load-progress",innerHTML:'<span class="vjs-control-text"><span>'+this.v("Loaded")+"</span>: 0%</span>"})};
95
- t.Bb.prototype.update=function(){var a,c,d,e,g=this.d.buffered();a=this.d.duration();var h,k=this.d;h=k.buffered();k=k.duration();h=h.end(h.length-1);h>k&&(h=k);k=this.c.children;this.c.style.width=100*(h/a||0)+"%";for(a=0;a<g.length;a++)c=g.start(a),d=g.end(a),(e=k[a])||(e=this.c.appendChild(t.f())),e.style.left=100*(c/h||0)+"%",e.style.width=100*((d-c)/h||0)+"%";for(a=k.length;a>g.length;a--)this.c.removeChild(k[a-1])};t.nc=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});
96
- t.nc.prototype.f=function(){return t.a.prototype.f.call(this,"div",{className:"vjs-play-progress",innerHTML:'<span class="vjs-control-text"><span>'+this.v("Progress")+"</span>: 0%</span>"})};t.ab=t.ha.extend({l:function(a,c){t.ha.call(this,a,c);this.b(a,"timeupdate",this.ga)}});t.ab.prototype.defaultValue="00:00";t.ab.prototype.f=function(){return t.ha.prototype.f.call(this,"div",{className:"vjs-seek-handle","aria-live":"off"})};
97
- t.ab.prototype.ga=function(){var a=this.d.qb?this.d.K.currentTime:this.d.currentTime();this.c.innerHTML='<span class="vjs-control-text">'+t.Oa(a,this.d.duration())+"</span>"};t.Ib=t.a.extend({l:function(a,c){t.a.call(this,a,c);a.h&&a.h.featuresVolumeControl===l&&this.p("vjs-hidden");this.b(a,"loadstart",function(){a.h.featuresVolumeControl===l?this.p("vjs-hidden"):this.r("vjs-hidden")})}});t.Ib.prototype.q={children:{volumeBar:{}}};
98
- t.Ib.prototype.f=function(){return t.a.prototype.f.call(this,"div",{className:"vjs-volume-control vjs-control"})};t.Hb=t.U.extend({l:function(a,c){t.U.call(this,a,c);this.b(a,"volumechange",this.Fa);a.I(t.bind(this,this.Fa))}});s=t.Hb.prototype;s.Fa=function(){this.c.setAttribute("aria-valuenow",t.round(100*this.d.volume(),2));this.c.setAttribute("aria-valuetext",t.round(100*this.d.volume(),2)+"%")};s.q={children:{volumeLevel:{},volumeHandle:{}},barName:"volumeLevel",handleName:"volumeHandle"};
99
- s.Yc="volumechange";s.f=function(){return t.U.prototype.f.call(this,"div",{className:"vjs-volume-bar","aria-label":"volume level"})};s.ma=function(a){this.d.muted()&&this.d.muted(l);this.d.volume(ea(this,a))};s.Tb=function(){return this.d.muted()?0:this.d.volume()};s.ld=function(){this.d.volume(this.d.volume()+0.1)};s.kd=function(){this.d.volume(this.d.volume()-0.1)};t.vc=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});
100
- t.vc.prototype.f=function(){return t.a.prototype.f.call(this,"div",{className:"vjs-volume-level",innerHTML:'<span class="vjs-control-text"></span>'})};t.Jb=t.ha.extend();t.Jb.prototype.defaultValue="00:00";t.Jb.prototype.f=function(){return t.ha.prototype.f.call(this,"div",{className:"vjs-volume-handle"})};
101
- t.sa=t.w.extend({l:function(a,c){t.w.call(this,a,c);this.b(a,"volumechange",this.update);a.h&&a.h.featuresVolumeControl===l&&this.p("vjs-hidden");this.b(a,"loadstart",function(){a.h.featuresVolumeControl===l?this.p("vjs-hidden"):this.r("vjs-hidden")})}});t.sa.prototype.f=function(){return t.w.prototype.f.call(this,"div",{className:"vjs-mute-control vjs-control",innerHTML:'<div><span class="vjs-control-text">'+this.v("Mute")+"</span></div>"})};
102
- t.sa.prototype.u=function(){this.d.muted(this.d.muted()?l:f)};t.sa.prototype.update=function(){var a=this.d.volume(),c=3;0===a||this.d.muted()?c=0:0.33>a?c=1:0.67>a&&(c=2);this.d.muted()?this.c.children[0].children[0].innerHTML!=this.v("Unmute")&&(this.c.children[0].children[0].innerHTML=this.v("Unmute")):this.c.children[0].children[0].innerHTML!=this.v("Mute")&&(this.c.children[0].children[0].innerHTML=this.v("Mute"));for(a=0;4>a;a++)t.r(this.c,"vjs-vol-"+a);t.p(this.c,"vjs-vol-"+c)};
103
- t.Ia=t.O.extend({l:function(a,c){t.O.call(this,a,c);this.b(a,"volumechange",this.ff);a.h&&a.h.featuresVolumeControl===l&&this.p("vjs-hidden");this.b(a,"loadstart",function(){a.h.featuresVolumeControl===l?this.p("vjs-hidden"):this.r("vjs-hidden")});this.p("vjs-menu-button")}});t.Ia.prototype.Ma=function(){var a=new t.ra(this.d,{Dc:"div"}),c=new t.Hb(this.d,this.q.volumeBar);c.b("focus",function(){a.p("vjs-lock-showing")});c.b("blur",function(){G(a)});a.ba(c);return a};
104
- t.Ia.prototype.u=function(){t.sa.prototype.u.call(this);t.O.prototype.u.call(this)};t.Ia.prototype.f=function(){return t.w.prototype.f.call(this,"div",{className:"vjs-volume-menu-button vjs-menu-button vjs-control",innerHTML:'<div><span class="vjs-control-text">'+this.v("Mute")+"</span></div>"})};t.Ia.prototype.ff=t.sa.prototype.update;t.pc=t.O.extend({l:function(a,c){t.O.call(this,a,c);this.td();this.sd();this.b(a,"loadstart",this.td);this.b(a,"ratechange",this.sd)}});s=t.pc.prototype;s.ua="Playback Rate";
105
- s.className="vjs-playback-rate";s.f=function(){var a=t.O.prototype.f.call(this);this.Sc=t.f("div",{className:"vjs-playback-rate-value",innerHTML:1});a.appendChild(this.Sc);return a};s.Ma=function(){var a=new t.ra(this.k()),c=this.k().options().playbackRates;if(c)for(var d=c.length-1;0<=d;d--)a.ba(new t.Db(this.k(),{rate:c[d]+"x"}));return a};s.Fa=function(){this.m().setAttribute("aria-valuenow",this.k().playbackRate())};
106
- s.u=function(){for(var a=this.k().playbackRate(),c=this.k().options().playbackRates,d=c[0],e=0;e<c.length;e++)if(c[e]>a){d=c[e];break}this.k().playbackRate(d)};function na(a){return a.k().h&&a.k().h.featuresPlaybackRate&&a.k().options().playbackRates&&0<a.k().options().playbackRates.length}s.td=function(){na(this)?this.r("vjs-hidden"):this.p("vjs-hidden")};s.sd=function(){na(this)&&(this.Sc.innerHTML=this.k().playbackRate()+"x")};
107
- t.Db=t.M.extend({Dc:"button",l:function(a,c){var d=this.label=c.rate,e=this.$c=parseFloat(d,10);c.label=d;c.selected=1===e;t.M.call(this,a,c);this.b(a,"ratechange",this.update)}});t.Db.prototype.u=function(){t.M.prototype.u.call(this);this.k().playbackRate(this.$c)};t.Db.prototype.update=function(){this.selected(this.k().playbackRate()==this.$c)};t.qc=t.w.extend({l:function(a,c){t.w.call(this,a,c);this.update();a.b("posterchange",t.bind(this,this.update))}});s=t.qc.prototype;
108
- s.dispose=function(){this.k().n("posterchange",this.update);t.w.prototype.dispose.call(this)};s.f=function(){var a=t.f("div",{className:"vjs-poster",tabIndex:-1});t.xd||(this.Pb=t.f("img"),a.appendChild(this.Pb));return a};s.update=function(){var a=this.k().poster();this.oa(a);a?this.show():this.Y()};s.oa=function(a){var c;this.Pb?this.Pb.src=a:(c="",a&&(c='url("'+a+'")'),this.c.style.backgroundImage=c)};s.u=function(){this.d.play()};t.mc=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});
109
- t.mc.prototype.f=function(){return t.a.prototype.f.call(this,"div",{className:"vjs-loading-spinner"})};t.ub=t.w.extend();t.ub.prototype.f=function(){return t.w.prototype.f.call(this,"div",{className:"vjs-big-play-button",innerHTML:'<span aria-hidden="true"></span>',"aria-label":"play video"})};t.ub.prototype.u=function(){this.d.play()};t.zb=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.update();this.b(a,"error",this.update)}});
110
- t.zb.prototype.f=function(){var a=t.a.prototype.f.call(this,"div",{className:"vjs-error-display"});this.B=t.f("div");a.appendChild(this.B);return a};t.zb.prototype.update=function(){this.k().error()&&(this.B.innerHTML=this.v(this.k().error().message))};var O;t.j=t.a.extend({l:function(a,c,d){c=c||{};c.dd=l;t.a.call(this,a,c,d);this.featuresProgressEvents||this.se();this.featuresTimeupdateEvents||this.te();this.ge();this.featuresNativeTextTracks||this.Wd();this.ie()}});s=t.j.prototype;
111
- s.ge=function(){var a,c;a=this.k();c=function(){a.controls()&&!a.usingNativeControls()&&this.Jd()};this.I(c);this.b(a,"controlsenabled",c);this.b(a,"controlsdisabled",this.Ie);this.I(function(){this.networkState&&0<this.networkState()&&this.k().o("loadstart")})};
112
- s.Jd=function(){var a;this.b("mousedown",this.u);this.b("touchstart",function(){a=this.d.userActive()});this.b("touchmove",function(){a&&this.k().reportUserActivity()});this.b("touchend",function(a){a.preventDefault()});da(this);this.b("tap",this.Ce)};s.Ie=function(){this.n("tap");this.n("touchstart");this.n("touchmove");this.n("touchleave");this.n("touchcancel");this.n("touchend");this.n("click");this.n("mousedown")};
113
- s.u=function(a){0===a.button&&this.k().controls()&&(this.k().paused()?this.k().play():this.k().pause())};s.Ce=function(){this.k().userActive(!this.k().userActive())};s.se=function(){this.Uc=f;this.af()};s.re=function(){this.Uc=l;this.md()};s.af=function(){this.He=this.setInterval(function(){var a=this.k().bufferedPercent();this.Nd!=a&&this.k().o("progress");this.Nd=a;1===a&&this.md()},500)};s.md=function(){this.clearInterval(this.He)};
114
- s.te=function(){var a=this.d;this.Zb=f;this.b(a,"play",this.qd);this.b(a,"pause",this.tb);this.N("timeupdate",function(){this.featuresTimeupdateEvents=f;this.Vc()})};s.Vc=function(){var a=this.d;this.Zb=l;this.tb();this.n(a,"play",this.qd);this.n(a,"pause",this.tb)};s.qd=function(){this.Fc&&this.tb();this.Fc=this.setInterval(function(){this.k().o("timeupdate")},250)};s.tb=function(){this.clearInterval(this.Fc);this.k().o("timeupdate")};s.dispose=function(){this.Uc&&this.re();this.Zb&&this.Vc();t.a.prototype.dispose.call(this)};
115
- s.cc=function(){this.Zb&&this.k().o("timeupdate")};s.ie=function(){function a(){var a=c.ea("textTrackDisplay");a&&a.C()}var c=this.d,d;if(d=this.textTracks())d.addEventListener("removetrack",a),d.addEventListener("addtrack",a),this.b("dispose",t.bind(this,function(){d.removeEventListener("removetrack",a);d.removeEventListener("addtrack",a)}))};
116
- s.Wd=function(){var a=this.d,c,d,e;window.WebVTT||(e=document.createElement("script"),e.src=a.options()["vtt.js"]||"../node_modules/vtt.js/dist/vtt.js",a.m().appendChild(e),window.WebVTT=f);if(d=this.textTracks())c=function(){var c,d,e;e=a.ea("textTrackDisplay");e.C();for(c=0;c<this.length;c++)d=this[c],d.removeEventListener("cuechange",t.bind(e,e.C)),"showing"===d.mode&&d.addEventListener("cuechange",t.bind(e,e.C))},d.addEventListener("change",c),this.b("dispose",t.bind(this,function(){d.removeEventListener("change",
117
- c)}))};s.textTracks=function(){this.d.pd=this.d.pd||new t.F;return this.d.pd};s.Z=function(){this.d.ad=this.d.ad||new t.F;return this.d.ad};O=function(a,c,d,e,g){var h=a.textTracks();g=g||{};g.kind=c;d&&(g.label=d);e&&(g.language=e);g.player=a.d;a=new t.t(g);P(h,a);return a};t.j.prototype.addTextTrack=function(a,c,d){if(!a)throw Error("TextTrack kind is required but was not provided");return O(this,a,c,d)};t.j.prototype.ia=function(a){a=O(this,a.kind,a.label,a.language,a);P(this.Z(),a);return{T:a}};
118
- t.j.prototype.Ea=function(a){Q(this.textTracks(),a);Q(this.Z(),a)};t.j.prototype.fd=m();t.j.prototype.featuresVolumeControl=f;t.j.prototype.featuresFullscreenResize=l;t.j.prototype.featuresPlaybackRate=l;t.j.prototype.featuresProgressEvents=l;t.j.prototype.featuresTimeupdateEvents=l;t.j.prototype.featuresNativeTextTracks=l;
119
- t.j.hc=function(a){a.Ta=function(c,d){var e=a.gd;e||(e=a.gd=[]);d===b&&(d=e.length);e.splice(d,0,c)};a.rb=function(c){for(var d=a.gd||[],e,g=0;g<d.length;g++)if(e=d[g].fb(c))return d[g];return j};a.Ac=function(c){var d=a.rb(c);return d?d.fb(c):""};a.prototype.na=function(c){var d=a.rb(c);d||(a.S?d=a.S:t.log.error("No source hander found for the current source."));this.ja();this.n("dispose",this.ja);this.ib=c;this.dc=d.Ub(c,this);this.b("dispose",this.ja);return this};a.prototype.ja=function(){this.dc&&
120
- this.dc.dispose&&this.dc.dispose()}};t.media={};
121
- t.e=t.j.extend({l:function(a,c,d){var e,g,h;if(c.nativeCaptions===l||c.nativeTextTracks===l)this.featuresNativeTextTracks=l;t.j.call(this,a,c,d);for(d=t.e.Ab.length-1;0<=d;d--)this.b(t.e.Ab[d],this.Xd);(c=c.source)&&(this.c.currentSrc!==c.src||a.L&&3===a.L.he)&&this.na(c);if(this.c.hasChildNodes()){d=this.c.childNodes;e=d.length;for(c=[];e--;)g=d[e],h=g.nodeName.toLowerCase(),"track"===h&&(this.featuresNativeTextTracks?P(this.Z(),g.track):c.push(g));for(d=0;d<c.length;d++)this.c.removeChild(c[d])}this.featuresNativeTextTracks&&
122
- this.b("loadstart",t.bind(this,this.fe));if(t.Gb&&a.options().nativeControlsForTouch===f){var k,q,r,u;k=this;q=this.k();c=q.controls();k.c.controls=!!c;r=function(){k.c.controls=f};u=function(){k.c.controls=l};q.b("controlsenabled",r);q.b("controlsdisabled",u);c=function(){q.n("controlsenabled",r);q.n("controlsdisabled",u)};k.b("dispose",c);q.b("usingcustomcontrols",c);q.usingNativeControls(f)}a.I(function(){this.src()&&(this.L&&this.q.autoplay&&this.paused())&&(delete this.L.poster,this.play())});
123
- this.Xa()}});s=t.e.prototype;s.dispose=function(){t.e.Nb(this.c);t.j.prototype.dispose.call(this)};
124
- s.f=function(){var a=this.d,c,d,e,g=a.L;if(!g||this.movingMediaElementInDOM===l){g?(e=g.cloneNode(l),t.e.Nb(g),g=e,a.L=j):(g=t.f("video"),e=videojs.$.Ba({},a.Ye),(!t.Gb||a.options().nativeControlsForTouch!==f)&&delete e.controls,t.ed(g,t.i.D(e,{id:a.id()+"_html5_api","class":"vjs-tech"})));g.player=a;if(a.q.rd)for(e=0;e<a.q.rd.length;e++)c=a.q.rd[e],d=document.createElement("track"),d.Xb=c.Xb,d.label=c.label,d.jd=c.jd,d.src=c.src,"default"in c&&d.setAttribute("default","default"),g.appendChild(d);
125
- t.Vb(g,a.m())}c=["autoplay","preload","loop","muted"];for(e=c.length-1;0<=e;e--){d=c[e];var h={};"undefined"!==typeof a.q[d]&&(h[d]=a.q[d]);t.ed(g,h)}return g};s.fe=function(){for(var a=this.c.querySelectorAll("track"),c,d=a.length,e={captions:1,subtitles:1};d--;)if((c=a[d].T)&&c.kind in e&&!a[d]["default"])c.mode="disabled"};s.Xd=function(a){"error"==a.type&&this.error()?this.k().error(this.error().code):(a.bubbles=l,this.k().o(a))};s.play=function(){this.c.play()};s.pause=function(){this.c.pause()};
126
- s.paused=function(){return this.c.paused};s.currentTime=function(){return this.c.currentTime};s.cc=function(a){try{this.c.currentTime=a}catch(c){t.log(c,"Video is not ready. (Video.js)")}};s.duration=function(){return this.c.duration||0};s.buffered=function(){return this.c.buffered};s.volume=function(){return this.c.volume};s.Te=function(a){this.c.volume=a};s.muted=function(){return this.c.muted};s.Pe=function(a){this.c.muted=a};s.width=function(){return this.c.offsetWidth};s.height=function(){return this.c.offsetHeight};
127
- s.Ua=function(){return"function"==typeof this.c.webkitEnterFullScreen&&(/Android/.test(t.P)||!/Chrome|Mac OS X 10.5/.test(t.P))?f:l};s.Ic=function(){var a=this.c;"webkitDisplayingFullscreen"in a&&this.N("webkitbeginfullscreen",function(){this.d.isFullscreen(f);this.N("webkitendfullscreen",function(){this.d.isFullscreen(l);this.d.o("fullscreenchange")});this.d.o("fullscreenchange")});a.paused&&a.networkState<=a.kf?(this.c.play(),this.setTimeout(function(){a.pause();a.webkitEnterFullScreen()},0)):a.webkitEnterFullScreen()};
128
- s.Yd=function(){this.c.webkitExitFullScreen()};function oa(a,c){var d=/^blob\:/i;return c&&a&&d.test(a)?c:a}s.src=function(a){var c=this.c.src;if(a===b)return oa(c,this.hd);this.oa(a)};s.oa=function(a){this.c.src=a};s.load=function(){this.c.load()};s.currentSrc=function(){var a=this.c.currentSrc;return!this.ib?a:oa(a,this.ib.src)};s.poster=function(){return this.c.poster};s.fd=function(a){this.c.poster=a};s.Sa=function(){return this.c.Sa};s.Re=function(a){this.c.Sa=a};s.autoplay=function(){return this.c.autoplay};
129
- s.Me=function(a){this.c.autoplay=a};s.controls=function(){return this.c.controls};s.loop=function(){return this.c.loop};s.Oe=function(a){this.c.loop=a};s.error=function(){return this.c.error};s.seeking=function(){return this.c.seeking};s.seekable=function(){return this.c.seekable};s.ended=function(){return this.c.ended};s.playbackRate=function(){return this.c.playbackRate};s.Qe=function(a){this.c.playbackRate=a};s.networkState=function(){return this.c.networkState};s.readyState=function(){return this.c.readyState};
130
- s.textTracks=function(){return!this.featuresNativeTextTracks?t.j.prototype.textTracks.call(this):this.c.textTracks};s.addTextTrack=function(a,c,d){return!this.featuresNativeTextTracks?t.j.prototype.addTextTrack.call(this,a,c,d):this.c.addTextTrack(a,c,d)};
131
- s.ia=function(a){if(!this.featuresNativeTextTracks)return t.j.prototype.ia.call(this,a);var c=document.createElement("track");a=a||{};a.kind&&(c.kind=a.kind);a.label&&(c.label=a.label);if(a.language||a.srclang)c.srclang=a.language||a.srclang;a["default"]&&(c["default"]=a["default"]);a.id&&(c.id=a.id);a.src&&(c.src=a.src);this.m().appendChild(c);c.track.mode="metadata"===c.T.kind?"hidden":"disabled";c.onload=function(){var a=c.track;2<=c.readyState&&("metadata"===a.kind&&"hidden"!==a.mode?a.mode="hidden":
132
- "metadata"!==a.kind&&"disabled"!==a.mode&&(a.mode="disabled"),c.onload=j)};P(this.Z(),c.T);return c};s.Ea=function(a){if(!this.featuresNativeTextTracks)return t.j.prototype.Ea.call(this,a);var c,d;Q(this.Z(),a);c=this.m().querySelectorAll("track");for(d=0;d<c.length;d++)if(c[d]===a||c[d].track===a){c[d].parentNode.removeChild(c[d]);break}};t.e.isSupported=function(){try{t.A.volume=0.5}catch(a){return l}return!!t.A.canPlayType};t.j.hc(t.e);var pa=t.e.prototype.na,qa=t.e.prototype.ja;
133
- t.e.prototype.na=function(a){var c=pa.call(this,a);this.hd=a.src;return c};t.e.prototype.ja=function(){this.hd=b;return qa.call(this)};t.e.S={};t.e.S.fb=function(a){function c(a){try{return t.A.canPlayType(a)}catch(c){return""}}return a.type?c(a.type):a.src?(a=(a=a.src.match(/\.([^.\/\?]+)(\?[^\/]+)?$/i))&&a[1],c("video/"+a)):""};t.e.S.Ub=function(a,c){c.oa(a.src)};t.e.S.dispose=m();t.e.Ta(t.e.S);t.e.Pd=function(){var a=t.A.volume;t.A.volume=a/2+0.1;return a!==t.A.volume};
134
- t.e.Od=function(){var a=t.A.playbackRate;t.A.playbackRate=a/2+0.1;return a!==t.A.playbackRate};t.e.We=function(){var a;(a=!!t.A.textTracks)&&0<t.A.textTracks.length&&(a="number"!==typeof t.A.textTracks[0].mode);a&&t.kc&&(a=l);return a};t.e.prototype.featuresVolumeControl=t.e.Pd();t.e.prototype.featuresPlaybackRate=t.e.Od();t.e.prototype.movingMediaElementInDOM=!t.Bd;t.e.prototype.featuresFullscreenResize=f;t.e.prototype.featuresProgressEvents=f;t.e.prototype.featuresNativeTextTracks=t.e.We();
135
- var S,ra=/^application\/(?:x-|vnd\.apple\.)mpegurl/i,sa=/^video\/mp4/i;t.e.Xc=function(){4<=t.ic&&(S||(S=t.A.constructor.prototype.canPlayType),t.A.constructor.prototype.canPlayType=function(a){return a&&ra.test(a)?"maybe":S.call(this,a)});t.Fd&&(S||(S=t.A.constructor.prototype.canPlayType),t.A.constructor.prototype.canPlayType=function(a){return a&&sa.test(a)?"maybe":S.call(this,a)})};t.e.cf=function(){var a=t.A.constructor.prototype.canPlayType;t.A.constructor.prototype.canPlayType=S;S=j;return a};
136
- t.e.Xc();t.e.Ab="loadstart suspend abort error emptied stalled loadedmetadata loadeddata canplay canplaythrough playing waiting seeking seeked ended durationchange timeupdate progress play pause ratechange volumechange".split(" ");t.e.Nb=function(a){if(a){a.player=j;for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute("src");if("function"===typeof a.load)try{a.load()}catch(c){}}};
137
- t.g=t.j.extend({l:function(a,c,d){t.j.call(this,a,c,d);var e=c.source;d=a.id()+"_flash_api";var g=a.q,g=t.i.D({readyFunction:"videojs.Flash.onReady",eventProxyFunction:"videojs.Flash.onEvent",errorEventProxyFunction:"videojs.Flash.onError",autoplay:g.autoplay,preload:g.Sa,loop:g.loop,muted:g.muted},c.flashVars),h=t.i.D({wmode:"opaque",bgcolor:"#000000"},c.params);d=t.i.D({id:d,name:d,"class":"vjs-tech"},c.attributes);e&&this.I(function(){this.na(e)});t.Vb(this.c,c.parentEl);c.startTime&&this.I(function(){this.load();
138
- this.play();this.currentTime(c.startTime)});t.kc&&this.I(function(){this.b("mousemove",function(){this.k().o({type:"mousemove",bubbles:l})})});a.b("stageclick",a.reportUserActivity);this.c=t.g.Hc(c.swf,this.c,g,h,d)}});s=t.g.prototype;s.dispose=function(){t.j.prototype.dispose.call(this)};s.play=function(){this.c.vjs_play()};s.pause=function(){this.c.vjs_pause()};s.src=function(a){return a===b?this.currentSrc():this.oa(a)};
139
- s.oa=function(a){a=t.ae(a);this.c.vjs_src(a);if(this.d.autoplay()){var c=this;this.setTimeout(function(){c.play()},0)}};t.g.prototype.setCurrentTime=function(a){this.pe=a;this.c.vjs_setProperty("currentTime",a);t.j.prototype.cc.call(this)};t.g.prototype.currentTime=function(){return this.seeking()?this.pe||0:this.c.vjs_getProperty("currentTime")};t.g.prototype.currentSrc=function(){return this.ib?this.ib.src:this.c.vjs_getProperty("currentSrc")};t.g.prototype.load=function(){this.c.vjs_load()};
140
- t.g.prototype.poster=function(){this.c.vjs_getProperty("poster")};t.g.prototype.setPoster=m();s=t.g.prototype;s.seekable=function(){return 0===this.duration()?t.ya():t.ya(0,this.duration())};s.buffered=function(){return!this.c.vjs_getProperty?t.ya():t.ya(0,this.c.vjs_getProperty("buffered"))};s.duration=function(){return!this.c.vjs_getProperty?0:this.c.vjs_getProperty("duration")};s.Ua=p(l);s.Ic=p(l);
141
- function ta(){var a=T[U],c=a.charAt(0).toUpperCase()+a.slice(1);ua["set"+c]=function(c){return this.c.vjs_setProperty(a,c)}}function va(a){ua[a]=function(){return this.c.vjs_getProperty(a)}}
142
- var ua=t.g.prototype,T="rtmpConnection rtmpStream preload defaultPlaybackRate playbackRate autoplay loop mediaGroup controller controls volume muted defaultMuted".split(" "),wa="error networkState readyState seeking initialTime startOffsetTime paused played ended videoTracks audioTracks videoWidth videoHeight".split(" "),U;for(U=0;U<T.length;U++)va(T[U]),ta();for(U=0;U<wa.length;U++)va(wa[U]);t.g.isSupported=function(){return 10<=t.g.version()[0]};t.j.hc(t.g);t.g.S={};
143
- t.g.S.fb=function(a){return!a.type?"":a.type.replace(/;.*/,"").toLowerCase()in t.g.$d?"maybe":""};t.g.S.Ub=function(a,c){c.oa(a.src)};t.g.S.dispose=m();t.g.Ta(t.g.S);t.g.$d={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"};t.g.onReady=function(a){var c;if(c=(a=t.m(a))&&a.parentNode&&a.parentNode.player)a.player=c,t.g.checkReady(c.h)};t.g.checkReady=function(a){a.m()&&(a.m().vjs_getProperty?a.Xa():this.setTimeout(function(){t.g.checkReady(a)},50))};
144
- t.g.onEvent=function(a,c){t.m(a).player.o(c)};t.g.onError=function(a,c){var d=t.m(a).player,e="FLASH: "+c;"srcnotfound"==c?d.error({code:4,message:e}):d.error(e)};
145
- t.g.version=function(){var a="0,0,0";try{a=(new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash")).GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(c){try{navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(d){}}return a.split(",")};
146
- t.g.Hc=function(a,c,d,e,g){a=t.g.de(a,d,e,g);a=t.f("div",{innerHTML:a}).childNodes[0];d=c.parentNode;c.parentNode.replaceChild(a,c);a[t.expando]=c[t.expando];var h=d.childNodes[0];setTimeout(function(){h.style.display="block"},1E3);return a};
147
- t.g.de=function(a,c,d,e){var g="",h="",k="";c&&t.i.da(c,function(a,c){g+=a+"="+c+"&amp;"});d=t.i.D({movie:a,flashvars:g,allowScriptAccess:"always",allowNetworking:"all"},d);t.i.da(d,function(a,c){h+='<param name="'+a+'" value="'+c+'" />'});e=t.i.D({data:a,width:"100%",height:"100%"},e);t.i.da(e,function(a,c){k+=a+'="'+c+'" '});return'<object type="application/x-shockwave-flash" '+k+">"+h+"</object>"};t.g.Ve={"rtmp/mp4":"MP4","rtmp/flv":"FLV"};t.g.If=function(a,c){return a+"&"+c};
148
- t.g.Ue=function(a){var c={Cc:"",nd:""};if(!a)return c;var d=a.indexOf("&"),e;-1!==d?e=d+1:(d=e=a.lastIndexOf("/")+1,0===d&&(d=e=a.length));c.Cc=a.substring(0,d);c.nd=a.substring(e,a.length);return c};t.g.ne=function(a){return a in t.g.Ve};t.g.Hd=/^rtmp[set]?:\/\//i;t.g.me=function(a){return t.g.Hd.test(a)};t.g.bc={};t.g.bc.fb=function(a){return t.g.ne(a.type)||t.g.me(a.src)?"maybe":""};t.g.bc.Ub=function(a,c){var d=t.g.Ue(a.src);c.setRtmpConnection(d.Cc);c.setRtmpStream(d.nd)};t.g.Ta(t.g.bc);
149
- t.Gd=t.a.extend({l:function(a,c,d){t.a.call(this,a,c,d);if(!a.q.sources||0===a.q.sources.length){c=0;for(d=a.q.techOrder;c<d.length;c++){var e=t.wa(d[c]),g=window.videojs[e];if(g&&g.isSupported()){ka(a,e);break}}}else a.src(a.q.sources)}});t.sc={disabled:"disabled",hidden:"hidden",showing:"showing"};t.Id={subtitles:"subtitles",captions:"captions",descriptions:"descriptions",chapters:"chapters",metadata:"metadata"};
150
- t.t=function(a){var c,d,e,g,h,k,q,r,u,A,R;a=a||{};if(!a.player)throw Error("A player was not provided.");c=this;if(t.qa)for(R in c=document.createElement("custom"),t.t.prototype)c[R]=t.t.prototype[R];c.d=a.player;e=t.sc[a.mode]||"disabled";g=t.Id[a.kind]||"subtitles";h=a.label||"";k=a.language||a.srclang||"";d=a.id||"vjs_text_track_"+t.s++;if("metadata"===g||"chapters"===g)e="hidden";c.X=[];c.Ja=[];q=new t.W(c.X);r=new t.W(c.Ja);A=l;u=t.bind(c,function(){this.activeCues;A&&(this.trigger("cuechange"),
151
- A=l)});"disabled"!==e&&c.d.b("timeupdate",u);Object.defineProperty(c,"kind",{get:function(){return g},set:Function.prototype});Object.defineProperty(c,"label",{get:function(){return h},set:Function.prototype});Object.defineProperty(c,"language",{get:function(){return k},set:Function.prototype});Object.defineProperty(c,"id",{get:function(){return d},set:Function.prototype});Object.defineProperty(c,"mode",{get:function(){return e},set:function(a){t.sc[a]&&(e=a,"showing"===e&&this.d.b("timeupdate",u),
152
- this.o("modechange"))}});Object.defineProperty(c,"cues",{get:function(){return!this.Yb?j:q},set:Function.prototype});Object.defineProperty(c,"activeCues",{get:function(){var a,c,d,e,g;if(!this.Yb)return j;if(0===this.cues.length)return r;e=this.d.currentTime();a=0;c=this.cues.length;for(d=[];a<c;a++)g=this.cues[a],g.startTime<=e&&g.endTime>=e?d.push(g):g.startTime===g.endTime&&(g.startTime<=e&&g.startTime+0.5>=e)&&d.push(g);A=l;if(d.length!==this.Ja.length)A=f;else for(a=0;a<d.length;a++)-1===xa.call(this.Ja,
153
- d[a])&&(A=f);this.Ja=d;r.sb(this.Ja);return r},set:Function.prototype});a.src?ya(a.src,c):c.Yb=f;if(t.qa)return c};t.t.prototype=t.i.create(t.z.prototype);t.t.prototype.constructor=t.t;t.t.prototype.cb={cuechange:"cuechange"};t.t.prototype.wc=function(a){var c=this.d.textTracks(),d=0;if(c)for(;d<c.length;d++)c[d]!==this&&c[d].bd(a);this.X.push(a);this.cues.sb(this.X)};t.t.prototype.bd=function(a){for(var c=0,d=this.X.length,e,g=l;c<d;c++)e=this.X[c],e===a&&(this.X.splice(c,1),g=f);g&&this.Ec.sb(this.X)};
154
- var ya,V,xa;ya=function(a,c){t.gf(a,t.bind(this,function(a,e,g){if(a)return t.log.error(a);c.Yb=f;V(g,c)}))};V=function(a,c){if("function"!==typeof window.WebVTT)window.setTimeout(function(){V(a,c)},25);else{var d=new window.WebVTT.Parser(window,window.vttjs,window.WebVTT.StringDecoder());d.oncue=function(a){c.wc(a)};d.onparsingerror=function(a){t.log.error(a)};d.parse(a);d.flush()}};
155
- xa=function(a,c){var d;if(this==j)throw new TypeError('"this" is null or not defined');var e=Object(this),g=e.length>>>0;if(0===g)return-1;d=+c||0;Infinity===Math.abs(d)&&(d=0);if(d>=g)return-1;for(d=Math.max(0<=d?d:g-Math.abs(d),0);d<g;){if(d in e&&e[d]===a)return d;d++}return-1};
156
- t.F=function(a){var c=this,d,e=0;if(t.qa)for(d in c=document.createElement("custom"),t.F.prototype)c[d]=t.F.prototype[d];a=a||[];c.Wa=[];for(Object.defineProperty(c,"length",{get:function(){return this.Wa.length}});e<a.length;e++)P(c,a[e]);if(t.qa)return c};t.F.prototype=t.i.create(t.z.prototype);t.F.prototype.constructor=t.F;t.F.prototype.cb={change:"change",addtrack:"addtrack",removetrack:"removetrack"};for(var za in t.F.prototype.cb)t.F.prototype["on"+za]=j;
157
- function P(a,c){var d=a.Wa.length;""+d in a||Object.defineProperty(a,d,{get:function(){return this.Wa[d]}});c.addEventListener("modechange",t.bind(a,function(){this.o("change")}));a.Wa.push(c);a.o({type:"addtrack",T:c})}function Q(a,c){for(var d=0,e=a.length,g;d<e;d++)if(g=a[d],g===c){a.Wa.splice(d,1);break}a.o({type:"removetrack",T:c})}t.F.prototype.ee=function(a){for(var c=0,d=this.length,e=j,g;c<d;c++)if(g=this[c],g.id===a){e=g;break}return e};
158
- t.W=function(a){var c=this,d;if(t.qa)for(d in c=document.createElement("custom"),t.W.prototype)c[d]=t.W.prototype[d];t.W.prototype.sb.call(c,a);Object.defineProperty(c,"length",{get:n("qe")});if(t.qa)return c};t.W.prototype.sb=function(a){var c=this.length||0,d=0,e=a.length;this.X=a;this.qe=a.length;a=function(a){""+a in this||Object.defineProperty(this,""+a,{get:function(){return this.X[a]}})};if(c<e)for(d=c;d<e;d++)a.call(this,d)};
159
- t.W.prototype.ce=function(a){for(var c=0,d=this.length,e=j,g;c<d;c++)if(g=this[c],g.id===a){e=g;break}return e};t.ta=t.a.extend({l:function(a,c,d){t.a.call(this,a,c,d);a.b("loadstart",t.bind(this,this.$e));a.I(t.bind(this,function(){if(a.h&&a.h.featuresNativeTextTracks)this.Y();else{var c,d,h;a.b("fullscreenchange",t.bind(this,this.C));d=a.q.tracks||[];for(c=0;c<d.length;c++)h=d[c],this.d.ia(h)}}))}});t.ta.prototype.$e=function(){this.d.h&&this.d.h.featuresNativeTextTracks?this.Y():this.show()};
160
- t.ta.prototype.f=function(){return t.a.prototype.f.call(this,"div",{className:"vjs-text-track-display"})};t.ta.prototype.Qd=function(){"function"===typeof window.WebVTT&&window.WebVTT.processCues(window,[],this.c)};function W(a,c){return"rgba("+parseInt(a[1]+a[1],16)+","+parseInt(a[2]+a[2],16)+","+parseInt(a[3]+a[3],16)+","+c+")"}
161
- var Aa={yf:"monospace",Ef:"sans-serif",Gf:"serif",zf:'"Andale Mono", "Lucida Console", monospace',Af:'"Courier New", monospace',Cf:"sans-serif",Df:"serif",pf:'"Comic Sans MS", Impact, fantasy',Ff:'"Monotype Corsiva", cursive',Hf:'"Andale Mono", "Lucida Console", monospace, sans-serif'};t.ta.prototype.C=function(){var a=this.d.textTracks(),c=0,d;this.Qd();if(a)for(;c<a.length;c++)d=a[c],"showing"===d.mode&&this.df(d)};
162
- t.ta.prototype.df=function(a){if("function"===typeof window.WebVTT&&a.activeCues){for(var c=0,d=this.d.textTrackSettings.Lc(),e,g=[];c<a.activeCues.length;c++)g.push(a.activeCues[c]);window.WebVTT.processCues(window,a.activeCues,this.c);for(c=g.length;c--;){a=g[c].qf;d.color&&(a.firstChild.style.color=d.color);if(d.od)try{a.firstChild.style.color=W(d.color||"#fff",d.od)}catch(h){}d.backgroundColor&&(a.firstChild.style.backgroundColor=d.backgroundColor);if(d.zc)try{a.firstChild.style.backgroundColor=
163
- W(d.backgroundColor||"#000",d.zc)}catch(k){}if(d.gc)if(d.vd)try{a.style.backgroundColor=W(d.gc,d.vd)}catch(q){}else a.style.backgroundColor=d.gc;d.Na&&("dropshadow"===d.Na?a.firstChild.style.textShadow="2px 2px 3px #222, 2px 2px 4px #222, 2px 2px 5px #222":"raised"===d.Na?a.firstChild.style.textShadow="1px 1px #222, 2px 2px #222, 3px 3px #222":"depressed"===d.Na?a.firstChild.style.textShadow="1px 1px #ccc, 0 1px #ccc, -1px -1px #222, 0 -1px #222":"uniform"===d.Na&&(a.firstChild.style.textShadow="0 0 4px #222, 0 0 4px #222, 0 0 4px #222, 0 0 4px #222"));
164
- d.Rb&&1!==d.Rb&&(e=window.Bf(a.style.fontSize),a.style.fontSize=e*d.Rb+"px",a.style.height="auto",a.style.top="auto",a.style.bottom="2px");d.fontFamily&&"default"!==d.fontFamily&&("small-caps"===d.fontFamily?a.firstChild.style.fontVariant="small-caps":a.firstChild.style.fontFamily=Aa[d.fontFamily])}}};
165
- t.aa=t.M.extend({l:function(a,c){var d=this.T=c.track,e=a.textTracks(),g,h;e&&(g=t.bind(this,function(){var a="showing"===this.T.mode,c,d,g;if(this instanceof t.Cb){a=f;d=0;for(g=e.length;d<g;d++)if(c=e[d],c.kind===this.T.kind&&"showing"===c.mode){a=l;break}}this.selected(a)}),e.addEventListener("change",g),a.b("dispose",function(){e.removeEventListener("change",g)}));c.label=d.label||d.language||"Unknown";c.selected=d["default"]||"showing"===d.mode;t.M.call(this,a,c);e&&e.onchange===b&&this.b(["tap",
166
- "click"],function(){if("object"!==typeof window.zd)try{h=new window.zd("change")}catch(a){}h||(h=document.createEvent("Event"),h.initEvent("change",f,f));e.dispatchEvent(h)})}});t.aa.prototype.u=function(){var a=this.T.kind,c=this.d.textTracks(),d,e=0;t.M.prototype.u.call(this);if(c)for(;e<c.length;e++)d=c[e],d.kind===a&&(d.mode=d===this.T?"showing":"disabled")};t.Cb=t.aa.extend({l:function(a,c){c.track={kind:c.kind,player:a,label:c.kind+" off","default":l,mode:"disabled"};t.aa.call(this,a,c);this.selected(f)}});
167
- t.vb=t.aa.extend({l:function(a,c){c.track={kind:c.kind,player:a,label:c.kind+" settings","default":l,mode:"disabled"};t.aa.call(this,a,c);this.p("vjs-texttrack-settings")}});t.vb.prototype.u=function(){this.k().ea("textTrackSettings").show()};
168
- t.Q=t.O.extend({l:function(a,c){var d,e;t.O.call(this,a,c);d=this.d.textTracks();1>=this.H.length&&this.Y();d&&(e=t.bind(this,this.update),d.addEventListener("removetrack",e),d.addEventListener("addtrack",e),this.d.b("dispose",function(){d.removeEventListener("removetrack",e);d.removeEventListener("addtrack",e)}))}});
169
- t.Q.prototype.La=function(){var a=[],c,d;this instanceof t.pa&&(!this.k().h||!this.k().h.featuresNativeTextTracks)&&a.push(new t.vb(this.d,{kind:this.fa}));a.push(new t.Cb(this.d,{kind:this.fa}));d=this.d.textTracks();if(!d)return a;for(var e=0;e<d.length;e++)c=d[e],c.kind===this.fa&&a.push(new t.aa(this.d,{track:c}));return a};t.pa=t.Q.extend({l:function(a,c,d){t.Q.call(this,a,c,d);this.c.setAttribute("aria-label","Captions Menu")}});t.pa.prototype.fa="captions";t.pa.prototype.ua="Captions";
170
- t.pa.prototype.className="vjs-captions-button";t.pa.prototype.update=function(){var a=2;t.Q.prototype.update.call(this);this.k().h&&this.k().h.featuresNativeTextTracks&&(a=1);this.H&&this.H.length>a?this.show():this.Y()};t.bb=t.Q.extend({l:function(a,c,d){t.Q.call(this,a,c,d);this.c.setAttribute("aria-label","Subtitles Menu")}});t.bb.prototype.fa="subtitles";t.bb.prototype.ua="Subtitles";t.bb.prototype.className="vjs-subtitles-button";
171
- t.Ya=t.Q.extend({l:function(a,c,d){t.Q.call(this,a,c,d);this.c.setAttribute("aria-label","Chapters Menu")}});s=t.Ya.prototype;s.fa="chapters";s.ua="Chapters";s.className="vjs-chapters-button";s.La=function(){var a=[],c,d;d=this.d.textTracks();if(!d)return a;for(var e=0;e<d.length;e++)c=d[e],c.kind===this.fa&&a.push(new t.aa(this.d,{track:c}));return a};
172
- s.Ma=function(){for(var a=this.d.textTracks()||[],c=0,d=a.length,e,g,h=this.H=[];c<d;c++)if(e=a[c],e.kind==this.fa)if(e.Ec){g=e;break}else e.mode="hidden",window.setTimeout(t.bind(this,function(){this.Ma()}),100);a=this.Aa;a===b&&(a=new t.ra(this.d),a.xa().appendChild(t.f("li",{className:"vjs-menu-title",innerHTML:t.wa(this.fa),Xe:-1})));if(g){e=g.cues;for(var k,c=0,d=e.length;c<d;c++)k=e[c],k=new t.Za(this.d,{track:g,cue:k}),h.push(k),a.ba(k);this.ba(a)}0<this.H.length&&this.show();return a};
173
- t.Za=t.M.extend({l:function(a,c){var d=this.T=c.track,e=this.cue=c.cue,g=a.currentTime();c.label=e.text;c.selected=e.startTime<=g&&g<e.endTime;t.M.call(this,a,c);d.addEventListener("cuechange",t.bind(this,this.update))}});t.Za.prototype.u=function(){t.M.prototype.u.call(this);this.d.currentTime(this.cue.startTime);this.update(this.cue.startTime)};t.Za.prototype.update=function(){var a=this.cue,c=this.d.currentTime();this.selected(a.startTime<=c&&c<a.endTime)};
174
- function X(a){var c;a.Le?c=a.Le[0]:a.options&&(c=a.options[a.options.selectedIndex]);return c.value}function Y(a,c){var d,e;if(c){for(d=0;d<a.options.length&&!(e=a.options[d],e.value===c);d++);a.selectedIndex=d}}
175
- t.tc=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.Y();t.b(this.m().querySelector(".vjs-done-button"),"click",t.bind(this,function(){this.Ke();this.Y()}));t.b(this.m().querySelector(".vjs-default-button"),"click",t.bind(this,function(){this.m().querySelector(".vjs-fg-color > select").selectedIndex=0;this.m().querySelector(".vjs-bg-color > select").selectedIndex=0;this.m().querySelector(".window-color > select").selectedIndex=0;this.m().querySelector(".vjs-text-opacity > select").selectedIndex=
176
- 0;this.m().querySelector(".vjs-bg-opacity > select").selectedIndex=0;this.m().querySelector(".vjs-window-opacity > select").selectedIndex=0;this.m().querySelector(".vjs-edge-style select").selectedIndex=0;this.m().querySelector(".vjs-font-family select").selectedIndex=0;this.m().querySelector(".vjs-font-percent select").selectedIndex=2;this.C()}));t.b(this.m().querySelector(".vjs-fg-color > select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-bg-color > select"),"change",t.bind(this,
177
- this.C));t.b(this.m().querySelector(".window-color > select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-text-opacity > select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-bg-opacity > select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-window-opacity > select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-font-percent select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-edge-style select"),"change",t.bind(this,
178
- this.C));t.b(this.m().querySelector(".vjs-font-family select"),"change",t.bind(this,this.C));a.options().persistTextTrackSettings&&this.Je()}});s=t.tc.prototype;s.f=function(){return t.a.prototype.f.call(this,"div",{className:"vjs-caption-settings vjs-modal-overlay",innerHTML:'<div class="vjs-tracksettings"><div class="vjs-tracksettings-colors"><div class="vjs-fg-color vjs-tracksetting"><label class="vjs-label">Foreground</label><select><option value="">---</option><option value="#FFF">White</option><option value="#000">Black</option><option value="#F00">Red</option><option value="#0F0">Green</option><option value="#00F">Blue</option><option value="#FF0">Yellow</option><option value="#F0F">Magenta</option><option value="#0FF">Cyan</option></select><span class="vjs-text-opacity vjs-opacity"><select><option value="">---</option><option value="1">Opaque</option><option value="0.5">Semi-Opaque</option></select></span></div><div class="vjs-bg-color vjs-tracksetting"><label class="vjs-label">Background</label><select><option value="">---</option><option value="#FFF">White</option><option value="#000">Black</option><option value="#F00">Red</option><option value="#0F0">Green</option><option value="#00F">Blue</option><option value="#FF0">Yellow</option><option value="#F0F">Magenta</option><option value="#0FF">Cyan</option></select><span class="vjs-bg-opacity vjs-opacity"><select><option value="">---</option><option value="1">Opaque</option><option value="0.5">Semi-Transparent</option><option value="0">Transparent</option></select></span></div><div class="window-color vjs-tracksetting"><label class="vjs-label">Window</label><select><option value="">---</option><option value="#FFF">White</option><option value="#000">Black</option><option value="#F00">Red</option><option value="#0F0">Green</option><option value="#00F">Blue</option><option value="#FF0">Yellow</option><option value="#F0F">Magenta</option><option value="#0FF">Cyan</option></select><span class="vjs-window-opacity vjs-opacity"><select><option value="">---</option><option value="1">Opaque</option><option value="0.5">Semi-Transparent</option><option value="0">Transparent</option></select></span></div></div><div class="vjs-tracksettings-font"><div class="vjs-font-percent vjs-tracksetting"><label class="vjs-label">Font Size</label><select><option value="0.50">50%</option><option value="0.75">75%</option><option value="1.00" selected>100%</option><option value="1.25">125%</option><option value="1.50">150%</option><option value="1.75">175%</option><option value="2.00">200%</option><option value="3.00">300%</option><option value="4.00">400%</option></select></div><div class="vjs-edge-style vjs-tracksetting"><label class="vjs-label">Text Edge Style</label><select><option value="none">None</option><option value="raised">Raised</option><option value="depressed">Depressed</option><option value="uniform">Uniform</option><option value="dropshadow">Dropshadow</option></select></div><div class="vjs-font-family vjs-tracksetting"><label class="vjs-label">Font Family</label><select><option value="">Default</option><option value="monospaceSerif">Monospace Serif</option><option value="proportionalSerif">Proportional Serif</option><option value="monospaceSansSerif">Monospace Sans-Serif</option><option value="proportionalSansSerif">Proportional Sans-Serif</option><option value="casual">Casual</option><option value="script">Script</option><option value="small-caps">Small Caps</option></select></div></div></div><div class="vjs-tracksettings-controls"><button class="vjs-default-button">Defaults</button><button class="vjs-done-button">Done</button></div>'})};
179
- s.Lc=function(){var a,c,d,e,g,h,k,q,r,u;a=this.m();g=X(a.querySelector(".vjs-edge-style select"));h=X(a.querySelector(".vjs-font-family select"));k=X(a.querySelector(".vjs-fg-color > select"));d=X(a.querySelector(".vjs-text-opacity > select"));q=X(a.querySelector(".vjs-bg-color > select"));c=X(a.querySelector(".vjs-bg-opacity > select"));r=X(a.querySelector(".window-color > select"));e=X(a.querySelector(".vjs-window-opacity > select"));a=window.parseFloat(X(a.querySelector(".vjs-font-percent > select")));
180
- c={backgroundOpacity:c,textOpacity:d,windowOpacity:e,edgeStyle:g,fontFamily:h,color:k,backgroundColor:q,windowColor:r,fontPercent:a};for(u in c)(""===c[u]||"none"===c[u]||"fontPercent"===u&&1===c[u])&&delete c[u];return c};
181
- s.Se=function(a){var c=this.m();Y(c.querySelector(".vjs-edge-style select"),a.Na);Y(c.querySelector(".vjs-font-family select"),a.fontFamily);Y(c.querySelector(".vjs-fg-color > select"),a.color);Y(c.querySelector(".vjs-text-opacity > select"),a.od);Y(c.querySelector(".vjs-bg-color > select"),a.backgroundColor);Y(c.querySelector(".vjs-bg-opacity > select"),a.zc);Y(c.querySelector(".window-color > select"),a.gc);Y(c.querySelector(".vjs-window-opacity > select"),a.vd);(a=a.Rb)&&(a=a.toFixed(2));Y(c.querySelector(".vjs-font-percent > select"),
182
- a)};s.Je=function(){var a;try{a=JSON.parse(window.localStorage.getItem("vjs-text-track-settings"))}catch(c){}a&&this.Se(a)};s.Ke=function(){var a;if(this.d.options().persistTextTrackSettings){a=this.Lc();try{t.kb(a)?window.localStorage.removeItem("vjs-text-track-settings"):window.localStorage.setItem("vjs-text-track-settings",JSON.stringify(a))}catch(c){}}};s.C=function(){var a=this.d.ea("textTrackDisplay");a&&a.C()};
183
- if("undefined"!==typeof window.JSON&&"function"===typeof window.JSON.parse)t.JSON=window.JSON;else{t.JSON={};var Z=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;t.JSON.parse=function(a,c){function d(a,e){var k,q,r=a[e];if(r&&"object"===typeof r)for(k in r)Object.prototype.hasOwnProperty.call(r,k)&&(q=d(r,k),q!==b?r[k]=q:delete r[k]);return c.call(a,e,r)}var e;a=String(a);Z.lastIndex=0;Z.test(a)&&(a=a.replace(Z,function(a){return"\\u"+("0000"+
184
- a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),"function"===typeof c?d({"":e},""):e;throw new SyntaxError("JSON.parse(): invalid or malformed JSON data");}}
185
- t.yc=function(){var a,c,d,e;a=document.getElementsByTagName("video");c=document.getElementsByTagName("audio");var g=[];if(a&&0<a.length){d=0;for(e=a.length;d<e;d++)g.push(a[d])}if(c&&0<c.length){d=0;for(e=c.length;d<e;d++)g.push(c[d])}if(g&&0<g.length){d=0;for(e=g.length;d<e;d++)if((c=g[d])&&c.getAttribute)c.player===b&&(a=c.getAttribute("data-setup"),a!==j&&videojs(c));else{t.Kb();break}}else t.ud||t.Kb()};t.Kb=function(){setTimeout(t.yc,1)};
186
- "complete"===document.readyState?t.ud=f:t.N(window,"load",function(){t.ud=f});t.Kb();t.Ge=function(a,c){t.Player.prototype[a]=c};var Ba=this;function $(a,c){var d=a.split("."),e=Ba;!(d[0]in e)&&e.execScript&&e.execScript("var "+d[0]);for(var g;d.length&&(g=d.shift());)!d.length&&c!==b?e[g]=c:e=e[g]?e[g]:e[g]={}};$("videojs",t);$("_V_",t);$("videojs.options",t.options);$("videojs.players",t.Da);$("videojs.TOUCH_ENABLED",t.Gb);$("videojs.cache",t.va);$("videojs.Component",t.a);t.a.prototype.player=t.a.prototype.k;t.a.prototype.options=t.a.prototype.options;t.a.prototype.init=t.a.prototype.l;t.a.prototype.dispose=t.a.prototype.dispose;t.a.prototype.createEl=t.a.prototype.f;t.a.prototype.contentEl=t.a.prototype.xa;t.a.prototype.el=t.a.prototype.m;t.a.prototype.addChild=t.a.prototype.ba;
187
- t.a.prototype.getChild=t.a.prototype.ea;t.a.prototype.getChildById=t.a.prototype.be;t.a.prototype.children=t.a.prototype.children;t.a.prototype.initChildren=t.a.prototype.Oc;t.a.prototype.removeChild=t.a.prototype.removeChild;t.a.prototype.on=t.a.prototype.b;t.a.prototype.off=t.a.prototype.n;t.a.prototype.one=t.a.prototype.N;t.a.prototype.trigger=t.a.prototype.o;t.a.prototype.triggerReady=t.a.prototype.Xa;t.a.prototype.show=t.a.prototype.show;t.a.prototype.hide=t.a.prototype.Y;
188
- t.a.prototype.width=t.a.prototype.width;t.a.prototype.height=t.a.prototype.height;t.a.prototype.dimensions=t.a.prototype.Ud;t.a.prototype.ready=t.a.prototype.I;t.a.prototype.addClass=t.a.prototype.p;t.a.prototype.removeClass=t.a.prototype.r;t.a.prototype.hasClass=t.a.prototype.Qa;t.a.prototype.buildCSSClass=t.a.prototype.V;t.a.prototype.localize=t.a.prototype.v;t.a.prototype.setInterval=t.a.prototype.setInterval;t.a.prototype.setTimeout=t.a.prototype.setTimeout;$("videojs.EventEmitter",t.z);
189
- t.z.prototype.on=t.z.prototype.b;t.z.prototype.addEventListener=t.z.prototype.addEventListener;t.z.prototype.off=t.z.prototype.n;t.z.prototype.removeEventListener=t.z.prototype.removeEventListener;t.z.prototype.one=t.z.prototype.N;t.z.prototype.trigger=t.z.prototype.o;t.z.prototype.dispatchEvent=t.z.prototype.dispatchEvent;t.Player.prototype.ended=t.Player.prototype.ended;t.Player.prototype.enterFullWindow=t.Player.prototype.Jc;t.Player.prototype.exitFullWindow=t.Player.prototype.Ob;
190
- t.Player.prototype.preload=t.Player.prototype.Sa;t.Player.prototype.remainingTime=t.Player.prototype.remainingTime;t.Player.prototype.supportsFullScreen=t.Player.prototype.Ua;t.Player.prototype.currentType=t.Player.prototype.Rd;t.Player.prototype.requestFullScreen=t.Player.prototype.requestFullScreen;t.Player.prototype.requestFullscreen=t.Player.prototype.requestFullscreen;t.Player.prototype.cancelFullScreen=t.Player.prototype.cancelFullScreen;t.Player.prototype.exitFullscreen=t.Player.prototype.exitFullscreen;
191
- t.Player.prototype.isFullScreen=t.Player.prototype.isFullScreen;t.Player.prototype.isFullscreen=t.Player.prototype.isFullscreen;t.Player.prototype.textTracks=t.Player.prototype.textTracks;t.Player.prototype.remoteTextTracks=t.Player.prototype.Z;t.Player.prototype.addTextTrack=t.Player.prototype.addTextTrack;t.Player.prototype.addRemoteTextTrack=t.Player.prototype.ia;t.Player.prototype.removeRemoteTextTrack=t.Player.prototype.Ea;t.Player.prototype.seekable=t.Player.prototype.seekable;
192
- $("videojs.MediaLoader",t.Gd);$("videojs.TextTrackDisplay",t.ta);$("videojs.ControlBar",t.wb);$("videojs.Button",t.w);$("videojs.PlayToggle",t.oc);$("videojs.FullscreenToggle",t.$a);$("videojs.BigPlayButton",t.ub);$("videojs.LoadingSpinner",t.mc);$("videojs.CurrentTimeDisplay",t.xb);$("videojs.DurationDisplay",t.yb);$("videojs.TimeDivider",t.uc);$("videojs.RemainingTimeDisplay",t.Fb);$("videojs.LiveDisplay",t.lc);$("videojs.ErrorDisplay",t.zb);$("videojs.Slider",t.U);$("videojs.ProgressControl",t.Eb);
193
- $("videojs.SeekBar",t.rc);$("videojs.LoadProgressBar",t.Bb);$("videojs.PlayProgressBar",t.nc);$("videojs.SeekHandle",t.ab);$("videojs.VolumeControl",t.Ib);$("videojs.VolumeBar",t.Hb);$("videojs.VolumeLevel",t.vc);$("videojs.VolumeMenuButton",t.Ia);$("videojs.VolumeHandle",t.Jb);$("videojs.MuteToggle",t.sa);$("videojs.PosterImage",t.qc);$("videojs.Menu",t.ra);$("videojs.MenuItem",t.M);$("videojs.MenuButton",t.O);$("videojs.PlaybackRateMenuButton",t.pc);$("videojs.ChaptersTrackMenuItem",t.Za);
194
- $("videojs.TextTrackButton",t.Q);$("videojs.TextTrackMenuItem",t.aa);$("videojs.OffTextTrackMenuItem",t.Cb);$("videojs.CaptionSettingsMenuItem",t.vb);t.O.prototype.createItems=t.O.prototype.La;t.Q.prototype.createItems=t.Q.prototype.La;t.Ya.prototype.createItems=t.Ya.prototype.La;$("videojs.SubtitlesButton",t.bb);$("videojs.CaptionsButton",t.pa);$("videojs.ChaptersButton",t.Ya);$("videojs.MediaTechController",t.j);t.j.withSourceHandlers=t.j.hc;t.j.prototype.featuresVolumeControl=t.j.prototype.vf;
195
- t.j.prototype.featuresFullscreenResize=t.j.prototype.rf;t.j.prototype.featuresPlaybackRate=t.j.prototype.sf;t.j.prototype.featuresProgressEvents=t.j.prototype.tf;t.j.prototype.featuresTimeupdateEvents=t.j.prototype.uf;t.j.prototype.setPoster=t.j.prototype.fd;t.j.prototype.textTracks=t.j.prototype.textTracks;t.j.prototype.remoteTextTracks=t.j.prototype.Z;t.j.prototype.addTextTrack=t.j.prototype.addTextTrack;t.j.prototype.addRemoteTextTrack=t.j.prototype.ia;t.j.prototype.removeRemoteTextTrack=t.j.prototype.Ea;
196
- $("videojs.Html5",t.e);t.e.Events=t.e.Ab;t.e.isSupported=t.e.isSupported;t.e.canPlaySource=t.e.Ac;t.e.patchCanPlayType=t.e.Xc;t.e.unpatchCanPlayType=t.e.cf;t.e.prototype.setCurrentTime=t.e.prototype.cc;t.e.prototype.setVolume=t.e.prototype.Te;t.e.prototype.setMuted=t.e.prototype.Pe;t.e.prototype.setPreload=t.e.prototype.Re;t.e.prototype.setAutoplay=t.e.prototype.Me;t.e.prototype.setLoop=t.e.prototype.Oe;t.e.prototype.enterFullScreen=t.e.prototype.Ic;t.e.prototype.exitFullScreen=t.e.prototype.Yd;
197
- t.e.prototype.playbackRate=t.e.prototype.playbackRate;t.e.prototype.setPlaybackRate=t.e.prototype.Qe;t.e.registerSourceHandler=t.e.Ta;t.e.selectSourceHandler=t.e.rb;t.e.prototype.setSource=t.e.prototype.na;t.e.prototype.disposeSourceHandler=t.e.prototype.ja;t.e.prototype.textTracks=t.e.prototype.textTracks;t.e.prototype.remoteTextTracks=t.e.prototype.Z;t.e.prototype.addTextTrack=t.e.prototype.addTextTrack;t.e.prototype.addRemoteTextTrack=t.e.prototype.ia;t.e.prototype.removeRemoteTextTrack=t.e.prototype.Ea;
198
- $("videojs.Flash",t.g);t.g.isSupported=t.g.isSupported;t.g.canPlaySource=t.g.Ac;t.g.onReady=t.g.onReady;t.g.embed=t.g.Hc;t.g.version=t.g.version;t.g.prototype.setSource=t.g.prototype.na;t.g.registerSourceHandler=t.g.Ta;t.g.selectSourceHandler=t.g.rb;t.g.prototype.setSource=t.g.prototype.na;t.g.prototype.disposeSourceHandler=t.g.prototype.ja;$("videojs.TextTrack",t.t);$("videojs.TextTrackList",t.F);$("videojs.TextTrackCueList",t.W);$("videojs.TextTrackSettings",t.tc);t.t.prototype.id=t.t.prototype.id;
199
- t.t.prototype.label=t.t.prototype.label;t.t.prototype.kind=t.t.prototype.Xb;t.t.prototype.mode=t.t.prototype.mode;t.t.prototype.cues=t.t.prototype.Ec;t.t.prototype.activeCues=t.t.prototype.of;t.t.prototype.addCue=t.t.prototype.wc;t.t.prototype.removeCue=t.t.prototype.bd;t.F.prototype.getTrackById=t.F.prototype.ee;t.W.prototype.getCueById=t.F.prototype.ce;$("videojs.CaptionsTrack",t.hf);$("videojs.SubtitlesTrack",t.nf);$("videojs.ChaptersTrack",t.jf);$("videojs.autoSetup",t.yc);
200
- $("videojs.plugin",t.Ge);$("videojs.createTimeRange",t.ya);$("videojs.util",t.$);t.$.mergeOptions=t.$.Ba;t.addLanguage=t.Kd;})();
201
 
202
- /* vtt.js - v0.12.1 (https://github.com/mozilla/vtt.js) built on 08-07-2015 */
203
- !function(a){var b=a.vttjs={},c=b.VTTCue,d=b.VTTRegion,e=a.VTTCue,f=a.VTTRegion;b.shim=function(){b.VTTCue=c,b.VTTRegion=d},b.restore=function(){b.VTTCue=e,b.VTTRegion=f}}(this),function(a,b){function c(a){if("string"!=typeof a)return!1;var b=h[a.toLowerCase()];return b?a.toLowerCase():!1}function d(a){if("string"!=typeof a)return!1;var b=i[a.toLowerCase()];return b?a.toLowerCase():!1}function e(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)a[d]=c[d]}return a}function f(a,b,f){var h=this,i=/MSIE\s8\.0/.test(navigator.userAgent),j={};i?h=document.createElement("custom"):j.enumerable=!0,h.hasBeenReset=!1;var k="",l=!1,m=a,n=b,o=f,p=null,q="",r=!0,s="auto",t="start",u=50,v="middle",w=50,x="middle";return Object.defineProperty(h,"id",e({},j,{get:function(){return k},set:function(a){k=""+a}})),Object.defineProperty(h,"pauseOnExit",e({},j,{get:function(){return l},set:function(a){l=!!a}})),Object.defineProperty(h,"startTime",e({},j,{get:function(){return m},set:function(a){if("number"!=typeof a)throw new TypeError("Start time must be set to a number.");m=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"endTime",e({},j,{get:function(){return n},set:function(a){if("number"!=typeof a)throw new TypeError("End time must be set to a number.");n=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"text",e({},j,{get:function(){return o},set:function(a){o=""+a,this.hasBeenReset=!0}})),Object.defineProperty(h,"region",e({},j,{get:function(){return p},set:function(a){p=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"vertical",e({},j,{get:function(){return q},set:function(a){var b=c(a);if(b===!1)throw new SyntaxError("An invalid or illegal string was specified.");q=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"snapToLines",e({},j,{get:function(){return r},set:function(a){r=!!a,this.hasBeenReset=!0}})),Object.defineProperty(h,"line",e({},j,{get:function(){return s},set:function(a){if("number"!=typeof a&&a!==g)throw new SyntaxError("An invalid number or illegal string was specified.");s=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"lineAlign",e({},j,{get:function(){return t},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");t=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"position",e({},j,{get:function(){return u},set:function(a){if(0>a||a>100)throw new Error("Position must be between 0 and 100.");u=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"positionAlign",e({},j,{get:function(){return v},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");v=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"size",e({},j,{get:function(){return w},set:function(a){if(0>a||a>100)throw new Error("Size must be between 0 and 100.");w=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"align",e({},j,{get:function(){return x},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");x=b,this.hasBeenReset=!0}})),h.displayState=void 0,i?h:void 0}var g="auto",h={"":!0,lr:!0,rl:!0},i={start:!0,middle:!0,end:!0,left:!0,right:!0};f.prototype.getCueAsHTML=function(){return WebVTT.convertCueToDOMTree(window,this.text)},a.VTTCue=a.VTTCue||f,b.VTTCue=f}(this,this.vttjs||{}),function(a,b){function c(a){if("string"!=typeof a)return!1;var b=f[a.toLowerCase()];return b?a.toLowerCase():!1}function d(a){return"number"==typeof a&&a>=0&&100>=a}function e(){var a=100,b=3,e=0,f=100,g=0,h=100,i="";Object.defineProperties(this,{width:{enumerable:!0,get:function(){return a},set:function(b){if(!d(b))throw new Error("Width must be between 0 and 100.");a=b}},lines:{enumerable:!0,get:function(){return b},set:function(a){if("number"!=typeof a)throw new TypeError("Lines must be set to a number.");b=a}},regionAnchorY:{enumerable:!0,get:function(){return f},set:function(a){if(!d(a))throw new Error("RegionAnchorX must be between 0 and 100.");f=a}},regionAnchorX:{enumerable:!0,get:function(){return e},set:function(a){if(!d(a))throw new Error("RegionAnchorY must be between 0 and 100.");e=a}},viewportAnchorY:{enumerable:!0,get:function(){return h},set:function(a){if(!d(a))throw new Error("ViewportAnchorY must be between 0 and 100.");h=a}},viewportAnchorX:{enumerable:!0,get:function(){return g},set:function(a){if(!d(a))throw new Error("ViewportAnchorX must be between 0 and 100.");g=a}},scroll:{enumerable:!0,get:function(){return i},set:function(a){var b=c(a);if(b===!1)throw new SyntaxError("An invalid or illegal string was specified.");i=b}}})}var f={"":!0,up:!0};a.VTTRegion=a.VTTRegion||e,b.VTTRegion=e}(this,this.vttjs||{}),function(a){function b(a,b){this.name="ParsingError",this.code=a.code,this.message=b||a.message}function c(a){function b(a,b,c,d){return 3600*(0|a)+60*(0|b)+(0|c)+(0|d)/1e3}var c=a.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return c?c[3]?b(c[1],c[2],c[3].replace(":",""),c[4]):c[1]>59?b(c[1],c[2],0,c[4]):b(0,c[1],c[2],c[4]):null}function d(){this.values=o(null)}function e(a,b,c,d){var e=d?a.split(d):[a];for(var f in e)if("string"==typeof e[f]){var g=e[f].split(c);if(2===g.length){var h=g[0],i=g[1];b(h,i)}}}function f(a,f,g){function h(){var d=c(a);if(null===d)throw new b(b.Errors.BadTimeStamp,"Malformed timestamp: "+k);return a=a.replace(/^[^\sa-zA-Z-]+/,""),d}function i(a,b){var c=new d;e(a,function(a,b){switch(a){case"region":for(var d=g.length-1;d>=0;d--)if(g[d].id===b){c.set(a,g[d].region);break}break;case"vertical":c.alt(a,b,["rl","lr"]);break;case"line":var e=b.split(","),f=e[0];c.integer(a,f),c.percent(a,f)?c.set("snapToLines",!1):null,c.alt(a,f,["auto"]),2===e.length&&c.alt("lineAlign",e[1],["start","middle","end"]);break;case"position":e=b.split(","),c.percent(a,e[0]),2===e.length&&c.alt("positionAlign",e[1],["start","middle","end"]);break;case"size":c.percent(a,b);break;case"align":c.alt(a,b,["start","middle","end","left","right"])}},/:/,/\s/),b.region=c.get("region",null),b.vertical=c.get("vertical",""),b.line=c.get("line","auto"),b.lineAlign=c.get("lineAlign","start"),b.snapToLines=c.get("snapToLines",!0),b.size=c.get("size",100),b.align=c.get("align","middle"),b.position=c.get("position",{start:0,left:0,middle:50,end:100,right:100},b.align),b.positionAlign=c.get("positionAlign",{start:"start",left:"start",middle:"middle",end:"end",right:"end"},b.align)}function j(){a=a.replace(/^\s+/,"")}var k=a;if(j(),f.startTime=h(),j(),"-->"!==a.substr(0,3))throw new b(b.Errors.BadTimeStamp,"Malformed time stamp (time stamps must be separated by '-->'): "+k);a=a.substr(3),j(),f.endTime=h(),j(),i(a,f)}function g(a,b){function d(){function a(a){return b=b.substr(a.length),a}if(!b)return null;var c=b.match(/^([^<]*)(<[^>]+>?)?/);return a(c[1]?c[1]:c[2])}function e(a){return p[a]}function f(a){for(;o=a.match(/&(amp|lt|gt|lrm|rlm|nbsp);/);)a=a.replace(o[0],e);return a}function g(a,b){return!s[b.localName]||s[b.localName]===a.localName}function h(b,c){var d=q[b];if(!d)return null;var e=a.document.createElement(d);e.localName=d;var f=r[b];return f&&c&&(e[f]=c.trim()),e}for(var i,j=a.document.createElement("div"),k=j,l=[];null!==(i=d());)if("<"!==i[0])k.appendChild(a.document.createTextNode(f(i)));else{if("/"===i[1]){l.length&&l[l.length-1]===i.substr(2).replace(">","")&&(l.pop(),k=k.parentNode);continue}var m,n=c(i.substr(1,i.length-2));if(n){m=a.document.createProcessingInstruction("timestamp",n),k.appendChild(m);continue}var o=i.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/);if(!o)continue;if(m=h(o[1],o[3]),!m)continue;if(!g(k,m))continue;o[2]&&(m.className=o[2].substr(1).replace("."," ")),l.push(o[1]),k.appendChild(m),k=m}return j}function h(a){function b(a,b){for(var c=b.childNodes.length-1;c>=0;c--)a.push(b.childNodes[c])}function c(a){if(!a||!a.length)return null;var d=a.pop(),e=d.textContent||d.innerText;if(e){var f=e.match(/^.*(\n|\r)/);return f?(a.length=0,f[0]):e}return"ruby"===d.tagName?c(a):d.childNodes?(b(a,d),c(a)):void 0}var d,e=[],f="";if(!a||!a.childNodes)return"ltr";for(b(e,a);f=c(e);)for(var g=0;g<f.length;g++){d=f.charCodeAt(g);for(var h=0;h<t.length;h++)if(t[h]===d)return"rtl"}return"ltr"}function i(a){if("number"==typeof a.line&&(a.snapToLines||a.line>=0&&a.line<=100))return a.line;if(!a.track||!a.track.textTrackList||!a.track.textTrackList.mediaElement)return-1;for(var b=a.track,c=b.textTrackList,d=0,e=0;e<c.length&&c[e]!==b;e++)"showing"===c[e].mode&&d++;return-1*++d}function j(){}function k(a,b,c){var d=/MSIE\s8\.0/.test(navigator.userAgent),e="rgba(255, 255, 255, 1)",f="rgba(0, 0, 0, 0.8)";d&&(e="rgb(255, 255, 255)",f="rgb(0, 0, 0)"),j.call(this),this.cue=b,this.cueDiv=g(a,b.text);var i={color:e,backgroundColor:f,position:"relative",left:0,right:0,top:0,bottom:0,display:"inline"};d||(i.writingMode=""===b.vertical?"horizontal-tb":"lr"===b.vertical?"vertical-lr":"vertical-rl",i.unicodeBidi="plaintext"),this.applyStyles(i,this.cueDiv),this.div=a.document.createElement("div"),i={textAlign:"middle"===b.align?"center":b.align,font:c.font,whiteSpace:"pre-line",position:"absolute"},d||(i.direction=h(this.cueDiv),i.writingMode=""===b.vertical?"horizontal-tb":"lr"===b.vertical?"vertical-lr":"vertical-rl".stylesunicodeBidi="plaintext"),this.applyStyles(i),this.div.appendChild(this.cueDiv);var k=0;switch(b.positionAlign){case"start":k=b.position;break;case"middle":k=b.position-b.size/2;break;case"end":k=b.position-b.size}this.applyStyles(""===b.vertical?{left:this.formatStyle(k,"%"),width:this.formatStyle(b.size,"%")}:{top:this.formatStyle(k,"%"),height:this.formatStyle(b.size,"%")}),this.move=function(a){this.applyStyles({top:this.formatStyle(a.top,"px"),bottom:this.formatStyle(a.bottom,"px"),left:this.formatStyle(a.left,"px"),right:this.formatStyle(a.right,"px"),height:this.formatStyle(a.height,"px"),width:this.formatStyle(a.width,"px")})}}function l(a){var b,c,d,e,f=/MSIE\s8\.0/.test(navigator.userAgent);if(a.div){c=a.div.offsetHeight,d=a.div.offsetWidth,e=a.div.offsetTop;var g=(g=a.div.childNodes)&&(g=g[0])&&g.getClientRects&&g.getClientRects();a=a.div.getBoundingClientRect(),b=g?Math.max(g[0]&&g[0].height||0,a.height/g.length):0}this.left=a.left,this.right=a.right,this.top=a.top||e,this.height=a.height||c,this.bottom=a.bottom||e+(a.height||c),this.width=a.width||d,this.lineHeight=void 0!==b?b:a.lineHeight,f&&!this.lineHeight&&(this.lineHeight=13)}function m(a,b,c,d){function e(a,b){for(var e,f=new l(a),g=1,h=0;h<b.length;h++){for(;a.overlapsOppositeAxis(c,b[h])||a.within(c)&&a.overlapsAny(d);)a.move(b[h]);if(a.within(c))return a;var i=a.intersectPercentage(c);g>i&&(e=new l(a),g=i),a=new l(f)}return e||f}var f=new l(b),g=b.cue,h=i(g),j=[];if(g.snapToLines){var k;switch(g.vertical){case"":j=["+y","-y"],k="height";break;case"rl":j=["+x","-x"],k="width";break;case"lr":j=["-x","+x"],k="width"}var m=f.lineHeight,n=m*Math.round(h),o=c[k]+m,p=j[0];Math.abs(n)>o&&(n=0>n?-1:1,n*=Math.ceil(o/m)*m),0>h&&(n+=""===g.vertical?c.height:c.width,j=j.reverse()),f.move(p,n)}else{var q=f.lineHeight/c.height*100;switch(g.lineAlign){case"middle":h-=q/2;break;case"end":h-=q}switch(g.vertical){case"":b.applyStyles({top:b.formatStyle(h,"%")});break;case"rl":b.applyStyles({left:b.formatStyle(h,"%")});break;case"lr":b.applyStyles({right:b.formatStyle(h,"%")})}j=["+y","-x","+x","-y"],f=new l(b)}var r=e(f,j);b.move(r.toCSSCompatValues(c))}function n(){}var o=Object.create||function(){function a(){}return function(b){if(1!==arguments.length)throw new Error("Object.create shim only accepts one parameter.");return a.prototype=b,new a}}();b.prototype=o(Error.prototype),b.prototype.constructor=b,b.Errors={BadSignature:{code:0,message:"Malformed WebVTT signature."},BadTimeStamp:{code:1,message:"Malformed time stamp."}},d.prototype={set:function(a,b){this.get(a)||""===b||(this.values[a]=b)},get:function(a,b,c){return c?this.has(a)?this.values[a]:b[c]:this.has(a)?this.values[a]:b},has:function(a){return a in this.values},alt:function(a,b,c){for(var d=0;d<c.length;++d)if(b===c[d]){this.set(a,b);break}},integer:function(a,b){/^-?\d+$/.test(b)&&this.set(a,parseInt(b,10))},percent:function(a,b){var c;return(c=b.match(/^([\d]{1,3})(\.[\d]*)?%$/))&&(b=parseFloat(b),b>=0&&100>=b)?(this.set(a,b),!0):!1}};var p={"&amp;":"&","&lt;":"<","&gt;":">","&lrm;":"‎","&rlm;":"‏","&nbsp;":" "},q={c:"span",i:"i",b:"b",u:"u",ruby:"ruby",rt:"rt",v:"span",lang:"span"},r={v:"title",lang:"lang"},s={rt:"ruby"},t=[1470,1472,1475,1478,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1520,1521,1522,1523,1524,1544,1547,1549,1563,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1645,1646,1647,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1765,1766,1774,1775,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1807,1808,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1969,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2e3,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2036,2037,2042,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2074,2084,2088,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2142,2208,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,8207,64285,64287,64288,64289,64290,64291,64292,64293,64294,64295,64296,64298,64299,64300,64301,64302,64303,64304,64305,64306,64307,64308,64309,64310,64312,64313,64314,64315,64316,64318,64320,64321,64323,64324,64326,64327,64328,64329,64330,64331,64332,64333,64334,64335,64336,64337,64338,64339,64340,64341,64342,64343,64344,64345,64346,64347,64348,64349,64350,64351,64352,64353,64354,64355,64356,64357,64358,64359,64360,64361,64362,64363,64364,64365,64366,64367,64368,64369,64370,64371,64372,64373,64374,64375,64376,64377,64378,64379,64380,64381,64382,64383,64384,64385,64386,64387,64388,64389,64390,64391,64392,64393,64394,64395,64396,64397,64398,64399,64400,64401,64402,64403,64404,64405,64406,64407,64408,64409,64410,64411,64412,64413,64414,64415,64416,64417,64418,64419,64420,64421,64422,64423,64424,64425,64426,64427,64428,64429,64430,64431,64432,64433,64434,64435,64436,64437,64438,64439,64440,64441,64442,64443,64444,64445,64446,64447,64448,64449,64467,64468,64469,64470,64471,64472,64473,64474,64475,64476,64477,64478,64479,64480,64481,64482,64483,64484,64485,64486,64487,64488,64489,64490,64491,64492,64493,64494,64495,64496,64497,64498,64499,64500,64501,64502,64503,64504,64505,64506,64507,64508,64509,64510,64511,64512,64513,64514,64515,64516,64517,64518,64519,64520,64521,64522,64523,64524,64525,64526,64527,64528,64529,64530,64531,64532,64533,64534,64535,64536,64537,64538,64539,64540,64541,64542,64543,64544,64545,64546,64547,64548,64549,64550,64551,64552,64553,64554,64555,64556,64557,64558,64559,64560,64561,64562,64563,64564,64565,64566,64567,64568,64569,64570,64571,64572,64573,64574,64575,64576,64577,64578,64579,64580,64581,64582,64583,64584,64585,64586,64587,64588,64589,64590,64591,64592,64593,64594,64595,64596,64597,64598,64599,64600,64601,64602,64603,64604,64605,64606,64607,64608,64609,64610,64611,64612,64613,64614,64615,64616,64617,64618,64619,64620,64621,64622,64623,64624,64625,64626,64627,64628,64629,64630,64631,64632,64633,64634,64635,64636,64637,64638,64639,64640,64641,64642,64643,64644,64645,64646,64647,64648,64649,64650,64651,64652,64653,64654,64655,64656,64657,64658,64659,64660,64661,64662,64663,64664,64665,64666,64667,64668,64669,64670,64671,64672,64673,64674,64675,64676,64677,64678,64679,64680,64681,64682,64683,64684,64685,64686,64687,64688,64689,64690,64691,64692,64693,64694,64695,64696,64697,64698,64699,64700,64701,64702,64703,64704,64705,64706,64707,64708,64709,64710,64711,64712,64713,64714,64715,64716,64717,64718,64719,64720,64721,64722,64723,64724,64725,64726,64727,64728,64729,64730,64731,64732,64733,64734,64735,64736,64737,64738,64739,64740,64741,64742,64743,64744,64745,64746,64747,64748,64749,64750,64751,64752,64753,64754,64755,64756,64757,64758,64759,64760,64761,64762,64763,64764,64765,64766,64767,64768,64769,64770,64771,64772,64773,64774,64775,64776,64777,64778,64779,64780,64781,64782,64783,64784,64785,64786,64787,64788,64789,64790,64791,64792,64793,64794,64795,64796,64797,64798,64799,64800,64801,64802,64803,64804,64805,64806,64807,64808,64809,64810,64811,64812,64813,64814,64815,64816,64817,64818,64819,64820,64821,64822,64823,64824,64825,64826,64827,64828,64829,64848,64849,64850,64851,64852,64853,64854,64855,64856,64857,64858,64859,64860,64861,64862,64863,64864,64865,64866,64867,64868,64869,64870,64871,64872,64873,64874,64875,64876,64877,64878,64879,64880,64881,64882,64883,64884,64885,64886,64887,64888,64889,64890,64891,64892,64893,64894,64895,64896,64897,64898,64899,64900,64901,64902,64903,64904,64905,64906,64907,64908,64909,64910,64911,64914,64915,64916,64917,64918,64919,64920,64921,64922,64923,64924,64925,64926,64927,64928,64929,64930,64931,64932,64933,64934,64935,64936,64937,64938,64939,64940,64941,64942,64943,64944,64945,64946,64947,64948,64949,64950,64951,64952,64953,64954,64955,64956,64957,64958,64959,64960,64961,64962,64963,64964,64965,64966,64967,65008,65009,65010,65011,65012,65013,65014,65015,65016,65017,65018,65019,65020,65136,65137,65138,65139,65140,65142,65143,65144,65145,65146,65147,65148,65149,65150,65151,65152,65153,65154,65155,65156,65157,65158,65159,65160,65161,65162,65163,65164,65165,65166,65167,65168,65169,65170,65171,65172,65173,65174,65175,65176,65177,65178,65179,65180,65181,65182,65183,65184,65185,65186,65187,65188,65189,65190,65191,65192,65193,65194,65195,65196,65197,65198,65199,65200,65201,65202,65203,65204,65205,65206,65207,65208,65209,65210,65211,65212,65213,65214,65215,65216,65217,65218,65219,65220,65221,65222,65223,65224,65225,65226,65227,65228,65229,65230,65231,65232,65233,65234,65235,65236,65237,65238,65239,65240,65241,65242,65243,65244,65245,65246,65247,65248,65249,65250,65251,65252,65253,65254,65255,65256,65257,65258,65259,65260,65261,65262,65263,65264,65265,65266,65267,65268,65269,65270,65271,65272,65273,65274,65275,65276,67584,67585,67586,67587,67588,67589,67592,67594,67595,67596,67597,67598,67599,67600,67601,67602,67603,67604,67605,67606,67607,67608,67609,67610,67611,67612,67613,67614,67615,67616,67617,67618,67619,67620,67621,67622,67623,67624,67625,67626,67627,67628,67629,67630,67631,67632,67633,67634,67635,67636,67637,67639,67640,67644,67647,67648,67649,67650,67651,67652,67653,67654,67655,67656,67657,67658,67659,67660,67661,67662,67663,67664,67665,67666,67667,67668,67669,67671,67672,67673,67674,67675,67676,67677,67678,67679,67840,67841,67842,67843,67844,67845,67846,67847,67848,67849,67850,67851,67852,67853,67854,67855,67856,67857,67858,67859,67860,67861,67862,67863,67864,67865,67866,67867,67872,67873,67874,67875,67876,67877,67878,67879,67880,67881,67882,67883,67884,67885,67886,67887,67888,67889,67890,67891,67892,67893,67894,67895,67896,67897,67903,67968,67969,67970,67971,67972,67973,67974,67975,67976,67977,67978,67979,67980,67981,67982,67983,67984,67985,67986,67987,67988,67989,67990,67991,67992,67993,67994,67995,67996,67997,67998,67999,68e3,68001,68002,68003,68004,68005,68006,68007,68008,68009,68010,68011,68012,68013,68014,68015,68016,68017,68018,68019,68020,68021,68022,68023,68030,68031,68096,68112,68113,68114,68115,68117,68118,68119,68121,68122,68123,68124,68125,68126,68127,68128,68129,68130,68131,68132,68133,68134,68135,68136,68137,68138,68139,68140,68141,68142,68143,68144,68145,68146,68147,68160,68161,68162,68163,68164,68165,68166,68167,68176,68177,68178,68179,68180,68181,68182,68183,68184,68192,68193,68194,68195,68196,68197,68198,68199,68200,68201,68202,68203,68204,68205,68206,68207,68208,68209,68210,68211,68212,68213,68214,68215,68216,68217,68218,68219,68220,68221,68222,68223,68352,68353,68354,68355,68356,68357,68358,68359,68360,68361,68362,68363,68364,68365,68366,68367,68368,68369,68370,68371,68372,68373,68374,68375,68376,68377,68378,68379,68380,68381,68382,68383,68384,68385,68386,68387,68388,68389,68390,68391,68392,68393,68394,68395,68396,68397,68398,68399,68400,68401,68402,68403,68404,68405,68416,68417,68418,68419,68420,68421,68422,68423,68424,68425,68426,68427,68428,68429,68430,68431,68432,68433,68434,68435,68436,68437,68440,68441,68442,68443,68444,68445,68446,68447,68448,68449,68450,68451,68452,68453,68454,68455,68456,68457,68458,68459,68460,68461,68462,68463,68464,68465,68466,68472,68473,68474,68475,68476,68477,68478,68479,68608,68609,68610,68611,68612,68613,68614,68615,68616,68617,68618,68619,68620,68621,68622,68623,68624,68625,68626,68627,68628,68629,68630,68631,68632,68633,68634,68635,68636,68637,68638,68639,68640,68641,68642,68643,68644,68645,68646,68647,68648,68649,68650,68651,68652,68653,68654,68655,68656,68657,68658,68659,68660,68661,68662,68663,68664,68665,68666,68667,68668,68669,68670,68671,68672,68673,68674,68675,68676,68677,68678,68679,68680,126464,126465,126466,126467,126469,126470,126471,126472,126473,126474,126475,126476,126477,126478,126479,126480,126481,126482,126483,126484,126485,126486,126487,126488,126489,126490,126491,126492,126493,126494,126495,126497,126498,126500,126503,126505,126506,126507,126508,126509,126510,126511,126512,126513,126514,126516,126517,126518,126519,126521,126523,126530,126535,126537,126539,126541,126542,126543,126545,126546,126548,126551,126553,126555,126557,126559,126561,126562,126564,126567,126568,126569,126570,126572,126573,126574,126575,126576,126577,126578,126580,126581,126582,126583,126585,126586,126587,126588,126590,126592,126593,126594,126595,126596,126597,126598,126599,126600,126601,126603,126604,126605,126606,126607,126608,126609,126610,126611,126612,126613,126614,126615,126616,126617,126618,126619,126625,126626,126627,126629,126630,126631,126632,126633,126635,126636,126637,126638,126639,126640,126641,126642,126643,126644,126645,126646,126647,126648,126649,126650,126651,1114109];j.prototype.applyStyles=function(a,b){b=b||this.div;for(var c in a)a.hasOwnProperty(c)&&(b.style[c]=a[c])},j.prototype.formatStyle=function(a,b){return 0===a?0:a+b},k.prototype=o(j.prototype),k.prototype.constructor=k,l.prototype.move=function(a,b){switch(b=void 0!==b?b:this.lineHeight,a){case"+x":this.left+=b,this.right+=b;break;case"-x":this.left-=b,this.right-=b;break;case"+y":this.top+=b,this.bottom+=b;break;case"-y":this.top-=b,this.bottom-=b}},l.prototype.overlaps=function(a){return this.left<a.right&&this.right>a.left&&this.top<a.bottom&&this.bottom>a.top},l.prototype.overlapsAny=function(a){for(var b=0;b<a.length;b++)if(this.overlaps(a[b]))return!0;return!1},l.prototype.within=function(a){return this.top>=a.top&&this.bottom<=a.bottom&&this.left>=a.left&&this.right<=a.right},l.prototype.overlapsOppositeAxis=function(a,b){switch(b){case"+x":return this.left<a.left;case"-x":return this.right>a.right;case"+y":return this.top<a.top;case"-y":return this.bottom>a.bottom}},l.prototype.intersectPercentage=function(a){var b=Math.max(0,Math.min(this.right,a.right)-Math.max(this.left,a.left)),c=Math.max(0,Math.min(this.bottom,a.bottom)-Math.max(this.top,a.top)),d=b*c;return d/(this.height*this.width)},l.prototype.toCSSCompatValues=function(a){return{top:this.top-a.top,bottom:a.bottom-this.bottom,left:this.left-a.left,right:a.right-this.right,height:this.height,width:this.width}},l.getSimpleBoxPosition=function(a){var b=a.div?a.div.offsetHeight:a.tagName?a.offsetHeight:0,c=a.div?a.div.offsetWidth:a.tagName?a.offsetWidth:0,d=a.div?a.div.offsetTop:a.tagName?a.offsetTop:0;a=a.div?a.div.getBoundingClientRect():a.tagName?a.getBoundingClientRect():a;var e={left:a.left,right:a.right,top:a.top||d,height:a.height||b,bottom:a.bottom||d+(a.height||b),width:a.width||c};return e},n.StringDecoder=function(){return{decode:function(a){if(!a)return"";if("string"!=typeof a)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(a))}}},n.convertCueToDOMTree=function(a,b){return a&&b?g(a,b):null};var u=.05,v="sans-serif",w="1.5%";n.processCues=function(a,b,c){function d(a){for(var b=0;b<a.length;b++)if(a[b].hasBeenReset||!a[b].displayState)return!0;return!1}if(!a||!b||!c)return null;for(;c.firstChild;)c.removeChild(c.firstChild);var e=a.document.createElement("div");if(e.style.position="absolute",e.style.left="0",e.style.right="0",e.style.top="0",e.style.bottom="0",e.style.margin=w,c.appendChild(e),d(b)){var f=[],g=l.getSimpleBoxPosition(e),h=Math.round(g.height*u*100)/100,i={font:h+"px "+v};!function(){for(var c,d,h=0;h<b.length;h++)d=b[h],c=new k(a,d,i),e.appendChild(c.div),m(a,c,g,f),d.displayState=c.div,f.push(l.getSimpleBoxPosition(c))}()}else for(var j=0;j<b.length;j++)e.appendChild(b[j].displayState)},n.Parser=function(a,b,c){c||(c=b,b={}),b||(b={}),this.window=a,this.vttjs=b,this.state="INITIAL",this.buffer="",this.decoder=c||new TextDecoder("utf8"),this.regionList=[]},n.Parser.prototype={reportOrThrowError:function(a){if(!(a instanceof b))throw a;this.onparsingerror&&this.onparsingerror(a)},parse:function(a){function c(){for(var a=i.buffer,b=0;b<a.length&&"\r"!==a[b]&&"\n"!==a[b];)++b;var c=a.substr(0,b);return"\r"===a[b]&&++b,"\n"===a[b]&&++b,i.buffer=a.substr(b),c}function g(a){var b=new d;if(e(a,function(a,c){switch(a){case"id":b.set(a,c);break;case"width":b.percent(a,c);break;case"lines":b.integer(a,c);break;case"regionanchor":case"viewportanchor":var e=c.split(",");if(2!==e.length)break;var f=new d;if(f.percent("x",e[0]),f.percent("y",e[1]),!f.has("x")||!f.has("y"))break;b.set(a+"X",f.get("x")),b.set(a+"Y",f.get("y"));break;case"scroll":b.alt(a,c,["up"])}},/=/,/\s/),b.has("id")){var c=new(i.vttjs.VTTRegion||i.window.VTTRegion);c.width=b.get("width",100),c.lines=b.get("lines",3),c.regionAnchorX=b.get("regionanchorX",0),c.regionAnchorY=b.get("regionanchorY",100),c.viewportAnchorX=b.get("viewportanchorX",0),c.viewportAnchorY=b.get("viewportanchorY",100),c.scroll=b.get("scroll",""),i.onregion&&i.onregion(c),i.regionList.push({id:b.get("id"),region:c})}}function h(a){e(a,function(a,b){switch(a){case"Region":g(b)}},/:/)}var i=this;a&&(i.buffer+=i.decoder.decode(a,{stream:!0}));try{var j;if("INITIAL"===i.state){if(!/\r\n|\n/.test(i.buffer))return this;j=c();var k=j.match(/^WEBVTT([ \t].*)?$/);if(!k||!k[0])throw new b(b.Errors.BadSignature);i.state="HEADER"}for(var l=!1;i.buffer;){if(!/\r\n|\n/.test(i.buffer))return this;switch(l?l=!1:j=c(),i.state){case"HEADER":/:/.test(j)?h(j):j||(i.state="ID");continue;case"NOTE":j||(i.state="ID");continue;case"ID":if(/^NOTE($|[ \t])/.test(j)){i.state="NOTE";break}if(!j)continue;if(i.cue=new(i.vttjs.VTTCue||i.window.VTTCue)(0,0,""),i.state="CUE",-1===j.indexOf("-->")){i.cue.id=j;continue}case"CUE":try{f(j,i.cue,i.regionList)}catch(m){i.reportOrThrowError(m),i.cue=null,i.state="BADCUE";continue}i.state="CUETEXT";continue;case"CUETEXT":var n=-1!==j.indexOf("-->");if(!j||n&&(l=!0)){i.oncue&&i.oncue(i.cue),i.cue=null,i.state="ID";continue}i.cue.text&&(i.cue.text+="\n"),i.cue.text+=j;continue;case"BADCUE":j||(i.state="ID");continue}}}catch(m){i.reportOrThrowError(m),"CUETEXT"===i.state&&i.cue&&i.oncue&&i.oncue(i.cue),i.cue=null,i.state="INITIAL"===i.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var a=this;try{if(a.buffer+=a.decoder.decode(),(a.cue||"HEADER"===a.state)&&(a.buffer+="\n\n",a.parse()),"INITIAL"===a.state)throw new b(b.Errors.BadSignature)}catch(c){a.reportOrThrowError(c)}return a.onflush&&a.onflush(),this}},a.WebVTT=n}(this,this.vttjs||{});
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * @license
3
+ * Video.js 5.5.3 <http://videojs.com/>
4
+ * Copyright Brightcove, Inc. <https://www.brightcove.com/>
5
+ * Available under Apache License Version 2.0
6
+ * <https://github.com/videojs/video.js/blob/master/LICENSE>
7
+ *
8
+ * Includes vtt.js <https://github.com/mozilla/vtt.js>
9
+ * Available under Apache License Version 2.0
10
+ * <https://github.com/mozilla/vtt.js/blob/master/LICENSE>
11
+ */
12
+ !function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.videojs=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b){(function(c){var d="undefined"!=typeof c?c:"undefined"!=typeof window?window:{},e=a("min-document");if("undefined"!=typeof document)b.exports=document;else{var f=d["__GLOBAL_DOCUMENT_CACHE@4"];f||(f=d["__GLOBAL_DOCUMENT_CACHE@4"]=e),b.exports=f}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"min-document":3}],2:[function(a,b){(function(a){b.exports="undefined"!=typeof window?window:"undefined"!=typeof a?a:"undefined"!=typeof self?self:{}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(){},{}],4:[function(a,b){var c=a("../internal/getNative"),d=c(Date,"now"),e=d||function(){return(new Date).getTime()};b.exports=e},{"../internal/getNative":20}],5:[function(a,b){function c(a,b,c){function h(){r&&clearTimeout(r),n&&clearTimeout(n),t=0,n=r=s=void 0}function i(b,c){c&&clearTimeout(c),n=r=s=void 0,b&&(t=e(),o=a.apply(q,m),r||n||(m=q=void 0))}function j(){var a=b-(e()-p);0>=a||a>b?i(s,n):r=setTimeout(j,a)}function k(){i(v,r)}function l(){if(m=arguments,p=e(),q=this,s=v&&(r||!w),u===!1)var c=w&&!r;else{n||w||(t=p);var d=u-(p-t),f=0>=d||d>u;f?(n&&(n=clearTimeout(n)),t=p,o=a.apply(q,m)):n||(n=setTimeout(k,d))}return f&&r?r=clearTimeout(r):r||b===u||(r=setTimeout(j,b)),c&&(f=!0,o=a.apply(q,m)),!f||r||n||(m=q=void 0),o}var m,n,o,p,q,r,s,t=0,u=!1,v=!0;if("function"!=typeof a)throw new TypeError(f);if(b=0>b?0:+b||0,c===!0){var w=!0;v=!1}else d(c)&&(w=!!c.leading,u="maxWait"in c&&g(+c.maxWait||0,b),v="trailing"in c?!!c.trailing:v);return l.cancel=h,l}var d=a("../lang/isObject"),e=a("../date/now"),f="Expected a function",g=Math.max;b.exports=c},{"../date/now":4,"../lang/isObject":33}],6:[function(a,b){function c(a,b){if("function"!=typeof a)throw new TypeError(d);return b=e(void 0===b?a.length-1:+b||0,0),function(){for(var c=arguments,d=-1,f=e(c.length-b,0),g=Array(f);++d<f;)g[d]=c[b+d];switch(b){case 0:return a.call(this,g);case 1:return a.call(this,c[0],g);case 2:return a.call(this,c[0],c[1],g)}var h=Array(b+1);for(d=-1;++d<b;)h[d]=c[d];return h[b]=g,a.apply(this,h)}}var d="Expected a function",e=Math.max;b.exports=c},{}],7:[function(a,b){function c(a,b,c){var g=!0,h=!0;if("function"!=typeof a)throw new TypeError(f);return c===!1?g=!1:e(c)&&(g="leading"in c?!!c.leading:g,h="trailing"in c?!!c.trailing:h),d(a,b,{leading:g,maxWait:+b,trailing:h})}var d=a("./debounce"),e=a("../lang/isObject"),f="Expected a function";b.exports=c},{"../lang/isObject":33,"./debounce":5}],8:[function(a,b){function c(a,b){var c=-1,d=a.length;for(b||(b=Array(d));++c<d;)b[c]=a[c];return b}b.exports=c},{}],9:[function(a,b){function c(a,b){for(var c=-1,d=a.length;++c<d&&b(a[c],c,a)!==!1;);return a}b.exports=c},{}],10:[function(a,b){function c(a,b,c){c||(c={});for(var d=-1,e=b.length;++d<e;){var f=b[d];c[f]=a[f]}return c}b.exports=c},{}],11:[function(a,b){var c=a("./createBaseFor"),d=c();b.exports=d},{"./createBaseFor":18}],12:[function(a,b){function c(a,b){return d(a,b,e)}var d=a("./baseFor"),e=a("../object/keysIn");b.exports=c},{"../object/keysIn":39,"./baseFor":11}],13:[function(a,b){function c(a,b,l,m,n){if(!h(a))return a;var o=g(b)&&(f(b)||j(b)),p=o?void 0:k(b);return d(p||b,function(d,f){if(p&&(f=d,d=b[f]),i(d))m||(m=[]),n||(n=[]),e(a,b,f,c,l,m,n);else{var g=a[f],h=l?l(g,d,f,a,b):void 0,j=void 0===h;j&&(h=d),void 0===h&&(!o||f in a)||!j&&(h===h?h===g:g!==g)||(a[f]=h)}}),a}var d=a("./arrayEach"),e=a("./baseMergeDeep"),f=a("../lang/isArray"),g=a("./isArrayLike"),h=a("../lang/isObject"),i=a("./isObjectLike"),j=a("../lang/isTypedArray"),k=a("../object/keys");b.exports=c},{"../lang/isArray":30,"../lang/isObject":33,"../lang/isTypedArray":36,"../object/keys":38,"./arrayEach":9,"./baseMergeDeep":14,"./isArrayLike":21,"./isObjectLike":26}],14:[function(a,b){function c(a,b,c,k,l,m,n){for(var o=m.length,p=b[c];o--;)if(m[o]==p)return void(a[c]=n[o]);var q=a[c],r=l?l(q,p,c,a,b):void 0,s=void 0===r;s&&(r=p,g(p)&&(f(p)||i(p))?r=f(q)?q:g(q)?d(q):[]:h(p)||e(p)?r=e(q)?j(q):h(q)?q:{}:s=!1),m.push(p),n.push(r),s?a[c]=k(r,p,l,m,n):(r===r?r!==q:q===q)&&(a[c]=r)}var d=a("./arrayCopy"),e=a("../lang/isArguments"),f=a("../lang/isArray"),g=a("./isArrayLike"),h=a("../lang/isPlainObject"),i=a("../lang/isTypedArray"),j=a("../lang/toPlainObject");b.exports=c},{"../lang/isArguments":29,"../lang/isArray":30,"../lang/isPlainObject":34,"../lang/isTypedArray":36,"../lang/toPlainObject":37,"./arrayCopy":8,"./isArrayLike":21}],15:[function(a,b){function c(a){return function(b){return null==b?void 0:d(b)[a]}}var d=a("./toObject");b.exports=c},{"./toObject":28}],16:[function(a,b){function c(a,b,c){if("function"!=typeof a)return d;if(void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 3:return function(c,d,e){return a.call(b,c,d,e)};case 4:return function(c,d,e,f){return a.call(b,c,d,e,f)};case 5:return function(c,d,e,f,g){return a.call(b,c,d,e,f,g)}}return function(){return a.apply(b,arguments)}}var d=a("../utility/identity");b.exports=c},{"../utility/identity":42}],17:[function(a,b){function c(a){return f(function(b,c){var f=-1,g=null==b?0:c.length,h=g>2?c[g-2]:void 0,i=g>2?c[2]:void 0,j=g>1?c[g-1]:void 0;for("function"==typeof h?(h=d(h,j,5),g-=2):(h="function"==typeof j?j:void 0,g-=h?1:0),i&&e(c[0],c[1],i)&&(h=3>g?void 0:h,g=1);++f<g;){var k=c[f];k&&a(b,k,h)}return b})}var d=a("./bindCallback"),e=a("./isIterateeCall"),f=a("../function/restParam");b.exports=c},{"../function/restParam":6,"./bindCallback":16,"./isIterateeCall":24}],18:[function(a,b){function c(a){return function(b,c,e){for(var f=d(b),g=e(b),h=g.length,i=a?h:-1;a?i--:++i<h;){var j=g[i];if(c(f[j],j,f)===!1)break}return b}}var d=a("./toObject");b.exports=c},{"./toObject":28}],19:[function(a,b){var c=a("./baseProperty"),d=c("length");b.exports=d},{"./baseProperty":15}],20:[function(a,b){function c(a,b){var c=null==a?void 0:a[b];return d(c)?c:void 0}var d=a("../lang/isNative");b.exports=c},{"../lang/isNative":32}],21:[function(a,b){function c(a){return null!=a&&e(d(a))}var d=a("./getLength"),e=a("./isLength");b.exports=c},{"./getLength":19,"./isLength":25}],22:[function(a,b){var c=function(){try{Object({toString:0}+"")}catch(a){return function(){return!1}}return function(a){return"function"!=typeof a.toString&&"string"==typeof(a+"")}}();b.exports=c},{}],23:[function(a,b){function c(a,b){return a="number"==typeof a||d.test(a)?+a:-1,b=null==b?e:b,a>-1&&a%1==0&&b>a}var d=/^\d+$/,e=9007199254740991;b.exports=c},{}],24:[function(a,b){function c(a,b,c){if(!f(c))return!1;var g=typeof b;if("number"==g?d(c)&&e(b,c.length):"string"==g&&b in c){var h=c[b];return a===a?a===h:h!==h}return!1}var d=a("./isArrayLike"),e=a("./isIndex"),f=a("../lang/isObject");b.exports=c},{"../lang/isObject":33,"./isArrayLike":21,"./isIndex":23}],25:[function(a,b){function c(a){return"number"==typeof a&&a>-1&&a%1==0&&d>=a}var d=9007199254740991;b.exports=c},{}],26:[function(a,b){function c(a){return!!a&&"object"==typeof a}b.exports=c},{}],27:[function(a,b){function c(a){for(var b=i(a),c=b.length,j=c&&a.length,l=!!j&&g(j)&&(e(a)||d(a)||h(a)),m=-1,n=[];++m<c;){var o=b[m];(l&&f(o,j)||k.call(a,o))&&n.push(o)}return n}var d=a("../lang/isArguments"),e=a("../lang/isArray"),f=a("./isIndex"),g=a("./isLength"),h=a("../lang/isString"),i=a("../object/keysIn"),j=Object.prototype,k=j.hasOwnProperty;b.exports=c},{"../lang/isArguments":29,"../lang/isArray":30,"../lang/isString":35,"../object/keysIn":39,"./isIndex":23,"./isLength":25}],28:[function(a,b){function c(a){if(f.unindexedChars&&e(a)){for(var b=-1,c=a.length,g=Object(a);++b<c;)g[b]=a.charAt(b);return g}return d(a)?a:Object(a)}var d=a("../lang/isObject"),e=a("../lang/isString"),f=a("../support");b.exports=c},{"../lang/isObject":33,"../lang/isString":35,"../support":41}],29:[function(a,b){function c(a){return e(a)&&d(a)&&g.call(a,"callee")&&!h.call(a,"callee")}var d=a("../internal/isArrayLike"),e=a("../internal/isObjectLike"),f=Object.prototype,g=f.hasOwnProperty,h=f.propertyIsEnumerable;b.exports=c},{"../internal/isArrayLike":21,"../internal/isObjectLike":26}],30:[function(a,b){var c=a("../internal/getNative"),d=a("../internal/isLength"),e=a("../internal/isObjectLike"),f="[object Array]",g=Object.prototype,h=g.toString,i=c(Array,"isArray"),j=i||function(a){return e(a)&&d(a.length)&&h.call(a)==f};b.exports=j},{"../internal/getNative":20,"../internal/isLength":25,"../internal/isObjectLike":26}],31:[function(a,b){function c(a){return d(a)&&g.call(a)==e}var d=a("./isObject"),e="[object Function]",f=Object.prototype,g=f.toString;b.exports=c},{"./isObject":33}],32:[function(a,b){function c(a){return null==a?!1:d(a)?k.test(i.call(a)):f(a)&&(e(a)?k:g).test(a)}var d=a("./isFunction"),e=a("../internal/isHostObject"),f=a("../internal/isObjectLike"),g=/^\[object .+?Constructor\]$/,h=Object.prototype,i=Function.prototype.toString,j=h.hasOwnProperty,k=RegExp("^"+i.call(j).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");b.exports=c},{"../internal/isHostObject":22,"../internal/isObjectLike":26,"./isFunction":31}],33:[function(a,b){function c(a){var b=typeof a;return!!a&&("object"==b||"function"==b)}b.exports=c},{}],34:[function(a,b){function c(a){var b;if(!g(a)||l.call(a)!=i||f(a)||e(a)||!k.call(a,"constructor")&&(b=a.constructor,"function"==typeof b&&!(b instanceof b)))return!1;var c;return h.ownLast?(d(a,function(a,b,d){return c=k.call(d,b),!1}),c!==!1):(d(a,function(a,b){c=b}),void 0===c||k.call(a,c))}var d=a("../internal/baseForIn"),e=a("./isArguments"),f=a("../internal/isHostObject"),g=a("../internal/isObjectLike"),h=a("../support"),i="[object Object]",j=Object.prototype,k=j.hasOwnProperty,l=j.toString;b.exports=c},{"../internal/baseForIn":12,"../internal/isHostObject":22,"../internal/isObjectLike":26,"../support":41,"./isArguments":29}],35:[function(a,b){function c(a){return"string"==typeof a||d(a)&&g.call(a)==e}var d=a("../internal/isObjectLike"),e="[object String]",f=Object.prototype,g=f.toString;b.exports=c},{"../internal/isObjectLike":26}],36:[function(a,b){function c(a){return e(a)&&d(a.length)&&!!C[E.call(a)]}var d=a("../internal/isLength"),e=a("../internal/isObjectLike"),f="[object Arguments]",g="[object Array]",h="[object Boolean]",i="[object Date]",j="[object Error]",k="[object Function]",l="[object Map]",m="[object Number]",n="[object Object]",o="[object RegExp]",p="[object Set]",q="[object String]",r="[object WeakMap]",s="[object ArrayBuffer]",t="[object Float32Array]",u="[object Float64Array]",v="[object Int8Array]",w="[object Int16Array]",x="[object Int32Array]",y="[object Uint8Array]",z="[object Uint8ClampedArray]",A="[object Uint16Array]",B="[object Uint32Array]",C={};C[t]=C[u]=C[v]=C[w]=C[x]=C[y]=C[z]=C[A]=C[B]=!0,C[f]=C[g]=C[s]=C[h]=C[i]=C[j]=C[k]=C[l]=C[m]=C[n]=C[o]=C[p]=C[q]=C[r]=!1;var D=Object.prototype,E=D.toString;b.exports=c},{"../internal/isLength":25,"../internal/isObjectLike":26}],37:[function(a,b){function c(a){return d(a,e(a))}var d=a("../internal/baseCopy"),e=a("../object/keysIn");b.exports=c},{"../internal/baseCopy":10,"../object/keysIn":39}],38:[function(a,b){var c=a("../internal/getNative"),d=a("../internal/isArrayLike"),e=a("../lang/isObject"),f=a("../internal/shimKeys"),g=a("../support"),h=c(Object,"keys"),i=h?function(a){var b=null==a?void 0:a.constructor;return"function"==typeof b&&b.prototype===a||("function"==typeof a?g.enumPrototypes:d(a))?f(a):e(a)?h(a):[]}:f;b.exports=i},{"../internal/getNative":20,"../internal/isArrayLike":21,"../internal/shimKeys":27,"../lang/isObject":33,"../support":41}],39:[function(a,b){function c(a){if(null==a)return[];j(a)||(a=Object(a));var b=a.length;b=b&&i(b)&&(f(a)||e(a)||k(a))&&b||0;for(var c=a.constructor,d=-1,m=g(c)&&c.prototype||x,n=m===a,o=Array(b),q=b>0,r=l.enumErrorProps&&(a===w||a instanceof Error),t=l.enumPrototypes&&g(a);++d<b;)o[d]=d+"";for(var C in a)t&&"prototype"==C||r&&("message"==C||"name"==C)||q&&h(C,b)||"constructor"==C&&(n||!z.call(a,C))||o.push(C);if(l.nonEnumShadows&&a!==x){var D=a===y?u:a===w?p:A.call(a),E=B[D]||B[s];for(D==s&&(m=x),b=v.length;b--;){C=v[b];var F=E[C];n&&F||(F?!z.call(a,C):a[C]===m[C])||o.push(C)}}return o}var d=a("../internal/arrayEach"),e=a("../lang/isArguments"),f=a("../lang/isArray"),g=a("../lang/isFunction"),h=a("../internal/isIndex"),i=a("../internal/isLength"),j=a("../lang/isObject"),k=a("../lang/isString"),l=a("../support"),m="[object Array]",n="[object Boolean]",o="[object Date]",p="[object Error]",q="[object Function]",r="[object Number]",s="[object Object]",t="[object RegExp]",u="[object String]",v=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],w=Error.prototype,x=Object.prototype,y=String.prototype,z=x.hasOwnProperty,A=x.toString,B={};B[m]=B[o]=B[r]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},B[n]=B[u]={constructor:!0,toString:!0,valueOf:!0},B[p]=B[q]=B[t]={constructor:!0,toString:!0},B[s]={constructor:!0},d(v,function(a){for(var b in B)if(z.call(B,b)){var c=B[b];c[a]=z.call(c,a)}}),b.exports=c},{"../internal/arrayEach":9,"../internal/isIndex":23,"../internal/isLength":25,"../lang/isArguments":29,"../lang/isArray":30,"../lang/isFunction":31,"../lang/isObject":33,"../lang/isString":35,"../support":41}],40:[function(a,b){var c=a("../internal/baseMerge"),d=a("../internal/createAssigner"),e=d(c);b.exports=e},{"../internal/baseMerge":13,"../internal/createAssigner":17}],41:[function(a,b){var c=Array.prototype,d=Error.prototype,e=Object.prototype,f=e.propertyIsEnumerable,g=c.splice,h={};!function(a){var b=function(){this.x=a},c={0:a,length:a},e=[];b.prototype={valueOf:a,y:a};for(var i in new b)e.push(i);h.enumErrorProps=f.call(d,"message")||f.call(d,"name"),h.enumPrototypes=f.call(b,"prototype"),h.nonEnumShadows=!/valueOf/.test(e),h.ownLast="x"!=e[0],h.spliceObjects=(g.call(c,0,1),!c[0]),h.unindexedChars="x"[0]+Object("x")[0]!="xx"}(1,0),b.exports=h},{}],42:[function(a,b){function c(a){return a}b.exports=c},{}],43:[function(a,b){"use strict";var c=a("object-keys");b.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var a={},b=Symbol("test");if("string"==typeof b)return!1;var d=42;a[b]=d;for(b in a)return!1;if(0!==c(a).length)return!1;if("function"==typeof Object.keys&&0!==Object.keys(a).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(a).length)return!1;var e=Object.getOwnPropertySymbols(a);if(1!==e.length||e[0]!==b)return!1;if(!Object.prototype.propertyIsEnumerable.call(a,b))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var f=Object.getOwnPropertyDescriptor(a,b);if(f.value!==d||f.enumerable!==!0)return!1}return!0}},{"object-keys":49}],44:[function(a,b){"use strict";var c=a("object-keys"),d=a("function-bind"),e=function(a){return"undefined"!=typeof a&&null!==a},f=a("./hasSymbols")(),g=Object,h=d.call(Function.call,Array.prototype.push),i=d.call(Function.call,Object.prototype.propertyIsEnumerable);b.exports=function(a){if(!e(a))throw new TypeError("target must be an object");var b,d,j,k,l,m,n,o=g(a);for(b=1;b<arguments.length;++b){if(d=g(arguments[b]),k=c(d),f&&Object.getOwnPropertySymbols)for(l=Object.getOwnPropertySymbols(d),j=0;j<l.length;++j)n=l[j],i(d,n)&&h(k,n);for(j=0;j<k.length;++j)n=k[j],m=d[n],i(d,n)&&(o[n]=m)}return o}},{"./hasSymbols":43,"function-bind":48,"object-keys":49}],45:[function(a,b){"use strict";var c=a("define-properties"),d=a("./implementation"),e=a("./polyfill"),f=a("./shim");c(d,{implementation:d,getPolyfill:e,shim:f}),b.exports=d},{"./implementation":44,"./polyfill":51,"./shim":52,"define-properties":46}],46:[function(a,b){"use strict";var c=a("object-keys"),d=a("foreach"),e="function"==typeof Symbol&&"symbol"==typeof Symbol(),f=Object.prototype.toString,g=function(a){return"function"==typeof a&&"[object Function]"===f.call(a)},h=function(){var a={};try{Object.defineProperty(a,"x",{enumerable:!1,value:a});for(var b in a)return!1;return a.x===a}catch(c){return!1}},i=Object.defineProperty&&h(),j=function(a,b,c,d){(!(b in a)||g(d)&&d())&&(i?Object.defineProperty(a,b,{configurable:!0,enumerable:!1,value:c,writable:!0}):a[b]=c)},k=function(a,b){var f=arguments.length>2?arguments[2]:{},g=c(b);e&&(g=g.concat(Object.getOwnPropertySymbols(b))),d(g,function(c){j(a,c,b[c],f[c])})};k.supportsDescriptors=!!i,b.exports=k},{foreach:47,"object-keys":49}],47:[function(a,b){var c=Object.prototype.hasOwnProperty,d=Object.prototype.toString;b.exports=function(a,b,e){if("[object Function]"!==d.call(b))throw new TypeError("iterator must be a function");var f=a.length;if(f===+f)for(var g=0;f>g;g++)b.call(e,a[g],g,a);else for(var h in a)c.call(a,h)&&b.call(e,a[h],h,a)}},{}],48:[function(a,b){var c="Function.prototype.bind called on incompatible ",d=Array.prototype.slice,e=Object.prototype.toString,f="[object Function]";b.exports=function(a){var b=this;if("function"!=typeof b||e.call(b)!==f)throw new TypeError(c+b);for(var g=d.call(arguments,1),h=function(){if(this instanceof l){var c=b.apply(this,g.concat(d.call(arguments)));return Object(c)===c?c:this}return b.apply(a,g.concat(d.call(arguments)))},i=Math.max(0,b.length-g.length),j=[],k=0;i>k;k++)j.push("$"+k);var l=Function("binder","return function ("+j.join(",")+"){ return binder.apply(this,arguments); }")(h);if(b.prototype){var m=function(){};m.prototype=b.prototype,l.prototype=new m,m.prototype=null}return l}},{}],49:[function(a,b){"use strict";var c=Object.prototype.hasOwnProperty,d=Object.prototype.toString,e=Array.prototype.slice,f=a("./isArguments"),g=!{toString:null}.propertyIsEnumerable("toString"),h=function(){}.propertyIsEnumerable("prototype"),i=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],j=function(a){var b=a.constructor;return b&&b.prototype===a},k={$console:!0,$frame:!0,$frameElement:!0,$frames:!0,$parent:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},l=function(){if("undefined"==typeof window)return!1;for(var a in window)try{if(!k["$"+a]&&c.call(window,a)&&null!==window[a]&&"object"==typeof window[a])try{j(window[a])}catch(b){return!0}}catch(b){return!0}return!1}(),m=function(a){if("undefined"==typeof window||!l)return j(a);try{return j(a)}catch(b){return!1}},n=function(a){var b=null!==a&&"object"==typeof a,e="[object Function]"===d.call(a),j=f(a),k=b&&"[object String]"===d.call(a),l=[];if(!b&&!e&&!j)throw new TypeError("Object.keys called on a non-object");var n=h&&e;if(k&&a.length>0&&!c.call(a,0))for(var o=0;o<a.length;++o)l.push(String(o));if(j&&a.length>0)for(var p=0;p<a.length;++p)l.push(String(p));else for(var q in a)n&&"prototype"===q||!c.call(a,q)||l.push(String(q));if(g)for(var r=m(a),s=0;s<i.length;++s)r&&"constructor"===i[s]||!c.call(a,i[s])||l.push(i[s]);return l};n.shim=function(){if(Object.keys){var a=function(){return 2===(Object.keys(arguments)||"").length}(1,2);if(!a){var b=Object.keys;Object.keys=function(a){return b(f(a)?e.call(a):a)}}}else Object.keys=n;return Object.keys||n},b.exports=n},{"./isArguments":50}],50:[function(a,b){"use strict";var c=Object.prototype.toString;b.exports=function(a){var b=c.call(a),d="[object Arguments]"===b;return d||(d="[object Array]"!==b&&null!==a&&"object"==typeof a&&"number"==typeof a.length&&a.length>=0&&"[object Function]"===c.call(a.callee)),d}},{}],51:[function(a,b){"use strict";var c=a("./implementation"),d=function(){if(!Object.assign)return!1;for(var a="abcdefghijklmnopqrst",b=a.split(""),c={},d=0;d<b.length;++d)c[b[d]]=b[d];var e=Object.assign({},c),f="";for(var g in e)f+=g;return a!==f},e=function(){if(!Object.assign||!Object.preventExtensions)return!1;var a=Object.preventExtensions({1:2});try{Object.assign(a,"xy")}catch(b){return"y"===a[1]}};b.exports=function(){return Object.assign?d()?c:e()?c:Object.assign:c}},{"./implementation":44}],52:[function(a,b){"use strict";var c=a("define-properties"),d=a("./polyfill");b.exports=function(){var a=d();return c(Object,{assign:a},{assign:function(){return Object.assign!==a}}),a}},{"./polyfill":51,"define-properties":46}],53:[function(a,b){function c(a,b){var c,d=null;try{c=JSON.parse(a,b)}catch(e){d=e}return[d,c]}b.exports=c},{}],54:[function(a,b){function c(a){return a.replace(/\n\r?\s*/g,"")}b.exports=function(a){for(var b="",d=0;d<arguments.length;d++)b+=c(a[d])+(arguments[d+1]||"");return b}},{}],55:[function(a,b){"use strict";function c(a,b){for(var c=0;c<a.length;c++)b(a[c])}function d(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function e(a,b,c){var d=a;return k(b)?(c=b,"string"==typeof a&&(d={uri:a})):d=m(b,{uri:a}),d.callback=c,d}function f(a,b,c){return b=e(a,b,c),g(b)}function g(a){function b(){4===k.readyState&&g()}function c(){var a=void 0;if(k.response?a=k.response:"text"!==k.responseType&&k.responseType||(a=k.responseText||k.responseXML),u)try{a=JSON.parse(a)}catch(b){}return a}function e(a){clearTimeout(o),a instanceof Error||(a=new Error(""+(a||"Unknown XMLHttpRequest Error"))),a.statusCode=0,h(a,i)}function g(){if(!n){var b;clearTimeout(o),b=a.useXDR&&void 0===k.status?200:1223===k.status?204:k.status;var d=i,e=null;0!==b?(d={body:c(),statusCode:b,method:q,headers:{},url:p,rawRequest:k},k.getAllResponseHeaders&&(d.headers=l(k.getAllResponseHeaders()))):e=new Error("Internal XMLHttpRequest Error"),h(e,d,d.body)}}var h=a.callback;if("undefined"==typeof h)throw new Error("callback argument missing");h=j(h);var i={body:void 0,headers:{},statusCode:0,method:q,url:p,rawRequest:k},k=a.xhr||null;k||(k=a.cors||a.useXDR?new f.XDomainRequest:new f.XMLHttpRequest);var m,n,o,p=k.url=a.uri||a.url,q=k.method=a.method||"GET",r=a.body||a.data||null,s=k.headers=a.headers||{},t=!!a.sync,u=!1;if("json"in a&&(u=!0,s.accept||s.Accept||(s.Accept="application/json"),"GET"!==q&&"HEAD"!==q&&(s["content-type"]||s["Content-Type"]||(s["Content-Type"]="application/json"),r=JSON.stringify(a.json))),k.onreadystatechange=b,k.onload=g,k.onerror=e,k.onprogress=function(){},k.ontimeout=e,k.open(q,p,!t,a.username,a.password),t||(k.withCredentials=!!a.withCredentials),!t&&a.timeout>0&&(o=setTimeout(function(){n=!0,k.abort("timeout");var a=new Error("XMLHttpRequest timeout");a.code="ETIMEDOUT",e(a)},a.timeout)),k.setRequestHeader)for(m in s)s.hasOwnProperty(m)&&k.setRequestHeader(m,s[m]);else if(a.headers&&!d(a.headers))throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in a&&(k.responseType=a.responseType),"beforeSend"in a&&"function"==typeof a.beforeSend&&a.beforeSend(k),k.send(r),k}function h(){}var i=a("global/window"),j=a("once"),k=a("is-function"),l=a("parse-headers"),m=a("xtend");b.exports=f,f.XMLHttpRequest=i.XMLHttpRequest||h,f.XDomainRequest="withCredentials"in new f.XMLHttpRequest?f.XMLHttpRequest:i.XDomainRequest,c(["get","put","post","patch","head","delete"],function(a){f["delete"===a?"del":a]=function(b,c,d){return c=e(b,c,d),c.method=a.toUpperCase(),g(c)}})},{"global/window":2,"is-function":56,once:57,"parse-headers":60,xtend:61}],56:[function(a,b){function c(a){var b=d.call(a);return"[object Function]"===b||"function"==typeof a&&"[object RegExp]"!==b||"undefined"!=typeof window&&(a===window.setTimeout||a===window.alert||a===window.confirm||a===window.prompt)}b.exports=c;var d=Object.prototype.toString},{}],57:[function(a,b){function c(a){var b=!1;return function(){return b?void 0:(b=!0,a.apply(this,arguments))}}b.exports=c,c.proto=c(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return c(this)},configurable:!0})})},{}],58:[function(a,b){function c(a,b,c){if(!g(b))throw new TypeError("iterator must be a function");arguments.length<3&&(c=this),"[object Array]"===h.call(a)?d(a,b,c):"string"==typeof a?e(a,b,c):f(a,b,c)}function d(a,b,c){for(var d=0,e=a.length;e>d;d++)i.call(a,d)&&b.call(c,a[d],d,a)}function e(a,b,c){for(var d=0,e=a.length;e>d;d++)b.call(c,a.charAt(d),d,a)}function f(a,b,c){for(var d in a)i.call(a,d)&&b.call(c,a[d],d,a)}var g=a("is-function");b.exports=c;var h=Object.prototype.toString,i=Object.prototype.hasOwnProperty},{"is-function":56}],59:[function(a,b,c){function d(a){return a.replace(/^\s*|\s*$/g,"")}c=b.exports=d,c.left=function(a){return a.replace(/^\s*/,"")},c.right=function(a){return a.replace(/\s*$/,"")}},{}],60:[function(a,b){var c=a("trim"),d=a("for-each"),e=function(a){return"[object Array]"===Object.prototype.toString.call(a)};b.exports=function(a){if(!a)return{};var b={};return d(c(a).split("\n"),function(a){var d=a.indexOf(":"),f=c(a.slice(0,d)).toLowerCase(),g=c(a.slice(d+1));"undefined"==typeof b[f]?b[f]=g:e(b[f])?b[f].push(g):b[f]=[b[f],g]}),b}},{"for-each":58,trim:59}],61:[function(a,b){function c(){for(var a={},b=0;b<arguments.length;b++){var c=arguments[b];for(var e in c)d.call(c,e)&&(a[e]=c[e])}return a}b.exports=c;var d=Object.prototype.hasOwnProperty},{}],62:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("./button.js"),h=d(g),i=a("./component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),a.call(this,c,d)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-big-play-button"},b.prototype.handleClick=function(){this.player_.play()},b}(h["default"]);k.prototype.controlText_="Play Video",j["default"].registerComponent("BigPlayButton",k),c["default"]=k,b.exports=c["default"]},{"./button.js":63,"./component.js":65}],63:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./component"),i=e(h),j=a("./utils/dom.js"),k=d(j),l=a("./utils/events.js"),m=d(l),n=a("./utils/fn.js"),o=d(n),p=a("global/document"),q=e(p),r=a("object.assign"),s=e(r),t=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.emitTapEvents(),this.on("tap",this.handleClick),this.on("click",this.handleClick),this.on("focus",this.handleFocus),this.on("blur",this.handleBlur)}return g(b,a),b.prototype.createEl=function(){var b=arguments.length<=0||void 0===arguments[0]?"button":arguments[0],c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];c=s["default"]({className:this.buildCSSClass(),tabIndex:0},c),d=s["default"]({role:"button",type:"button","aria-live":"polite"},d);var e=a.prototype.createEl.call(this,b,c,d);return this.controlTextEl_=k.createEl("span",{className:"vjs-control-text"}),e.appendChild(this.controlTextEl_),this.controlText(this.controlText_),e},b.prototype.controlText=function(a){return a?(this.controlText_=a,this.controlTextEl_.innerHTML=this.localize(this.controlText_),this):this.controlText_||"Need Text"},b.prototype.buildCSSClass=function(){return"vjs-control vjs-button "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){},b.prototype.handleFocus=function(){m.on(q["default"],"keydown",o.bind(this,this.handleKeyPress))},b.prototype.handleKeyPress=function(a){(32===a.which||13===a.which)&&(a.preventDefault(),this.handleClick(a))},b.prototype.handleBlur=function(){m.off(q["default"],"keydown",o.bind(this,this.handleKeyPress))},b}(i["default"]);i["default"].registerComponent("Button",t),c["default"]=t,b.exports=c["default"]},{"./component":65,"./utils/dom.js":128,"./utils/events.js":129,"./utils/fn.js":130,"global/document":1,"object.assign":45}],64:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("./button"),h=d(g),i=a("./component"),j=d(i),k=function(a){function b(c,d){e(this,b),a.call(this,c,d),this.controlText(d&&d.controlText||this.localize("Close"))}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-close-button "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.trigger({type:"close",bubbles:!1})},b}(h["default"]);j["default"].registerComponent("CloseButton",k),c["default"]=k,b.exports=c["default"]},{"./button":63,"./component":65}],65:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}c.__esModule=!0;var g=a("global/window"),h=e(g),i=a("./utils/dom.js"),j=d(i),k=a("./utils/fn.js"),l=d(k),m=a("./utils/guid.js"),n=d(m),o=a("./utils/events.js"),p=d(o),q=a("./utils/log.js"),r=e(q),s=a("./utils/to-title-case.js"),t=e(s),u=a("object.assign"),v=e(u),w=a("./utils/merge-options.js"),x=e(w),y=function(){function a(b,c,d){if(f(this,a),this.player_=!b&&this.play?b=this:b,this.options_=x["default"]({},this.options_),c=this.options_=x["default"](this.options_,c),this.id_=c.id||c.el&&c.el.id,!this.id_){var e=b&&b.id&&b.id()||"no_player";this.id_=e+"_component_"+n.newGUID()}this.name_=c.name||null,c.el?this.el_=c.el:c.createEl!==!1&&(this.el_=this.createEl()),this.children_=[],this.childIndex_={},this.childNameIndex_={},c.initChildren!==!1&&this.initChildren(),this.ready(d),c.reportTouchActivity!==!1&&this.enableTouchActivity()}return a.prototype.dispose=function(){if(this.trigger({type:"dispose",bubbles:!1}),this.children_)for(var a=this.children_.length-1;a>=0;a--)this.children_[a].dispose&&this.children_[a].dispose();this.children_=null,this.childIndex_=null,this.childNameIndex_=null,this.off(),this.el_.parentNode&&this.el_.parentNode.removeChild(this.el_),j.removeElData(this.el_),this.el_=null},a.prototype.player=function(){return this.player_},a.prototype.options=function(a){return r["default"].warn("this.options() has been deprecated and will be moved to the constructor in 6.0"),a?(this.options_=x["default"](this.options_,a),this.options_):this.options_},a.prototype.el=function(){return this.el_},a.prototype.createEl=function(a,b,c){return j.createEl(a,b,c)},a.prototype.localize=function(a){
13
+ var b=this.player_.language&&this.player_.language(),c=this.player_.languages&&this.player_.languages();if(!b||!c)return a;var d=c[b];if(d&&d[a])return d[a];var e=b.split("-")[0],f=c[e];return f&&f[a]?f[a]:a},a.prototype.contentEl=function(){return this.contentEl_||this.el_},a.prototype.id=function(){return this.id_},a.prototype.name=function(){return this.name_},a.prototype.children=function(){return this.children_},a.prototype.getChildById=function(a){return this.childIndex_[a]},a.prototype.getChild=function(a){return this.childNameIndex_[a]},a.prototype.addChild=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=void 0,e=void 0;if("string"==typeof b){e=b,c||(c={}),c===!0&&(r["default"].warn("Initializing a child component with `true` is deprecated. Children should be defined in an array when possible, but if necessary use an object instead of `true`."),c={});var f=c.componentClass||t["default"](e);c.name=e;var g=a.getComponent(f);if(!g)throw new Error("Component "+f+" does not exist");if("function"!=typeof g)return null;d=new g(this.player_||this,c)}else d=b;return this.children_.push(d),"function"==typeof d.id&&(this.childIndex_[d.id()]=d),e=e||d.name&&d.name(),e&&(this.childNameIndex_[e]=d),"function"==typeof d.el&&d.el()&&this.contentEl().appendChild(d.el()),d},a.prototype.removeChild=function(a){if("string"==typeof a&&(a=this.getChild(a)),a&&this.children_){for(var b=!1,c=this.children_.length-1;c>=0;c--)if(this.children_[c]===a){b=!0,this.children_.splice(c,1);break}if(b){this.childIndex_[a.id()]=null,this.childNameIndex_[a.name()]=null;var d=a.el();d&&d.parentNode===this.contentEl()&&this.contentEl().removeChild(a.el())}}},a.prototype.initChildren=function(){var b=this,c=this.options_.children;c&&!function(){var d=b.options_,e=function(a){var c=a.name,e=a.opts;if(void 0!==d[c]&&(e=d[c]),e!==!1){e===!0&&(e={}),e.playerOptions=b.options_.playerOptions;var f=b.addChild(c,e);f&&(b[c]=f)}},f=void 0,g=a.getComponent("Tech");f=Array.isArray(c)?c:Object.keys(c),f.concat(Object.keys(b.options_).filter(function(a){return!f.some(function(b){return"string"==typeof b?a===b:a===b.name})})).map(function(a){var d=void 0,e=void 0;return"string"==typeof a?(d=a,e=c[d]||b.options_[d]||{}):(d=a.name,e=a),{name:d,opts:e}}).filter(function(b){var c=a.getComponent(b.opts.componentClass||t["default"](b.name));return c&&!g.isTech(c)}).forEach(e)}()},a.prototype.buildCSSClass=function(){return""},a.prototype.on=function(a,b,c){var d=this;return"string"==typeof a||Array.isArray(a)?p.on(this.el_,a,l.bind(this,b)):!function(){var e=a,f=b,g=l.bind(d,c),h=function(){return d.off(e,f,g)};h.guid=g.guid,d.on("dispose",h);var i=function(){return d.off("dispose",h)};i.guid=g.guid,a.nodeName?(p.on(e,f,g),p.on(e,"dispose",i)):"function"==typeof a.on&&(e.on(f,g),e.on("dispose",i))}(),this},a.prototype.off=function(a,b,c){if(!a||"string"==typeof a||Array.isArray(a))p.off(this.el_,a,b);else{var d=a,e=b,f=l.bind(this,c);this.off("dispose",f),a.nodeName?(p.off(d,e,f),p.off(d,"dispose",f)):(d.off(e,f),d.off("dispose",f))}return this},a.prototype.one=function(a,b,c){var d=this,e=arguments;return"string"==typeof a||Array.isArray(a)?p.one(this.el_,a,l.bind(this,b)):!function(){var f=a,g=b,h=l.bind(d,c),i=function j(){d.off(f,g,j),h.apply(null,e)};i.guid=h.guid,d.on(f,g,i)}(),this},a.prototype.trigger=function(a,b){return p.trigger(this.el_,a,b),this},a.prototype.ready=function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1];return a&&(this.isReady_?b?a.call(this):this.setTimeout(a,1):(this.readyQueue_=this.readyQueue_||[],this.readyQueue_.push(a))),this},a.prototype.triggerReady=function(){this.isReady_=!0,this.setTimeout(function(){var a=this.readyQueue_;this.readyQueue_=[],a&&a.length>0&&a.forEach(function(a){a.call(this)},this),this.trigger("ready")},1)},a.prototype.$=function(a,b){return j.$(a,b||this.contentEl())},a.prototype.$$=function(a,b){return j.$$(a,b||this.contentEl())},a.prototype.hasClass=function(a){return j.hasElClass(this.el_,a)},a.prototype.addClass=function(a){return j.addElClass(this.el_,a),this},a.prototype.removeClass=function(a){return j.removeElClass(this.el_,a),this},a.prototype.toggleClass=function(a,b){return j.toggleElClass(this.el_,a,b),this},a.prototype.show=function(){return this.removeClass("vjs-hidden"),this},a.prototype.hide=function(){return this.addClass("vjs-hidden"),this},a.prototype.lockShowing=function(){return this.addClass("vjs-lock-showing"),this},a.prototype.unlockShowing=function(){return this.removeClass("vjs-lock-showing"),this},a.prototype.width=function(a,b){return this.dimension("width",a,b)},a.prototype.height=function(a,b){return this.dimension("height",a,b)},a.prototype.dimensions=function(a,b){return this.width(a,!0).height(b)},a.prototype.dimension=function(a,b,c){if(void 0!==b)return(null===b||b!==b)&&(b=0),this.el_.style[a]=-1!==(""+b).indexOf("%")||-1!==(""+b).indexOf("px")?b:"auto"===b?"":b+"px",c||this.trigger("resize"),this;if(!this.el_)return 0;var d=this.el_.style[a],e=d.indexOf("px");return-1!==e?parseInt(d.slice(0,e),10):parseInt(this.el_["offset"+t["default"](a)],10)},a.prototype.emitTapEvents=function(){var a=0,b=null,c=10,d=200,e=void 0;this.on("touchstart",function(c){1===c.touches.length&&(b=v["default"]({},c.touches[0]),a=(new Date).getTime(),e=!0)}),this.on("touchmove",function(a){if(a.touches.length>1)e=!1;else if(b){var d=a.touches[0].pageX-b.pageX,f=a.touches[0].pageY-b.pageY,g=Math.sqrt(d*d+f*f);g>c&&(e=!1)}});var f=function(){e=!1};this.on("touchleave",f),this.on("touchcancel",f),this.on("touchend",function(c){if(b=null,e===!0){var f=(new Date).getTime()-a;d>f&&(c.preventDefault(),this.trigger("tap"))}})},a.prototype.enableTouchActivity=function(){if(this.player()&&this.player().reportUserActivity){var a=l.bind(this.player(),this.player().reportUserActivity),b=void 0;this.on("touchstart",function(){a(),this.clearInterval(b),b=this.setInterval(a,250)});var c=function(){a(),this.clearInterval(b)};this.on("touchmove",a),this.on("touchend",c),this.on("touchcancel",c)}},a.prototype.setTimeout=function(a,b){a=l.bind(this,a);var c=h["default"].setTimeout(a,b),d=function(){this.clearTimeout(c)};return d.guid="vjs-timeout-"+c,this.on("dispose",d),c},a.prototype.clearTimeout=function(a){h["default"].clearTimeout(a);var b=function(){};return b.guid="vjs-timeout-"+a,this.off("dispose",b),a},a.prototype.setInterval=function(a,b){a=l.bind(this,a);var c=h["default"].setInterval(a,b),d=function(){this.clearInterval(c)};return d.guid="vjs-interval-"+c,this.on("dispose",d),c},a.prototype.clearInterval=function(a){h["default"].clearInterval(a);var b=function(){};return b.guid="vjs-interval-"+a,this.off("dispose",b),a},a.registerComponent=function(b,c){return a.components_||(a.components_={}),a.components_[b]=c,c},a.getComponent=function(b){return a.components_&&a.components_[b]?a.components_[b]:h["default"]&&h["default"].videojs&&h["default"].videojs[b]?(r["default"].warn("The "+b+" component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)"),h["default"].videojs[b]):void 0},a.extend=function(b){b=b||{},r["default"].warn("Component.extend({}) has been deprecated, use videojs.extend(Component, {}) instead");var c=b.init||b.init||this.prototype.init||this.prototype.init||function(){},d=function(){c.apply(this,arguments)};d.prototype=Object.create(this.prototype),d.prototype.constructor=d,d.extend=a.extend;for(var e in b)b.hasOwnProperty(e)&&(d.prototype[e]=b[e]);return d},a}();y.registerComponent("Component",y),c["default"]=y,b.exports=c["default"]},{"./utils/dom.js":128,"./utils/events.js":129,"./utils/fn.js":130,"./utils/guid.js":132,"./utils/log.js":133,"./utils/merge-options.js":134,"./utils/to-title-case.js":137,"global/window":2,"object.assign":45}],66:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("../component.js"),h=d(g),i=a("./play-toggle.js"),j=(d(i),a("./time-controls/current-time-display.js")),k=(d(j),a("./time-controls/duration-display.js")),l=(d(k),a("./time-controls/time-divider.js")),m=(d(l),a("./time-controls/remaining-time-display.js")),n=(d(m),a("./live-display.js")),o=(d(n),a("./progress-control/progress-control.js")),p=(d(o),a("./fullscreen-toggle.js")),q=(d(p),a("./volume-control/volume-control.js")),r=(d(q),a("./volume-menu-button.js")),s=(d(r),a("./mute-toggle.js")),t=(d(s),a("./text-track-controls/chapters-button.js")),u=(d(t),a("./text-track-controls/subtitles-button.js")),v=(d(u),a("./text-track-controls/captions-button.js")),w=(d(v),a("./playback-rate-menu/playback-rate-menu-button.js")),x=(d(w),a("./spacer-controls/custom-control-spacer.js")),y=(d(x),function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-control-bar"})},b}(h["default"]));y.prototype.options_={loadEvent:"play",children:["playToggle","volumeMenuButton","currentTimeDisplay","timeDivider","durationDisplay","progressControl","liveDisplay","remainingTimeDisplay","customControlSpacer","playbackRateMenuButton","chaptersButton","subtitlesButton","captionsButton","fullscreenToggle"]},h["default"].registerComponent("ControlBar",y),c["default"]=y,b.exports=c["default"]},{"../component.js":65,"./fullscreen-toggle.js":67,"./live-display.js":68,"./mute-toggle.js":69,"./play-toggle.js":70,"./playback-rate-menu/playback-rate-menu-button.js":71,"./progress-control/progress-control.js":76,"./spacer-controls/custom-control-spacer.js":78,"./text-track-controls/captions-button.js":81,"./text-track-controls/chapters-button.js":82,"./text-track-controls/subtitles-button.js":85,"./time-controls/current-time-display.js":88,"./time-controls/duration-display.js":89,"./time-controls/remaining-time-display.js":90,"./time-controls/time-divider.js":91,"./volume-control/volume-control.js":93,"./volume-menu-button.js":95}],67:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-fullscreen-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.player_.isFullscreen()?(this.player_.exitFullscreen(),this.controlText("Fullscreen")):(this.player_.requestFullscreen(),this.controlText("Non-Fullscreen"))},b}(h["default"]);k.prototype.controlText_="Fullscreen",j["default"].registerComponent("FullscreenToggle",k),c["default"]=k,b.exports=c["default"]},{"../button.js":63,"../component.js":65}],68:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../component"),i=e(h),j=a("../utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.updateShowing(),this.on(this.player(),"durationchange",this.updateShowing)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-live-control vjs-control"});return this.contentEl_=k.createEl("div",{className:"vjs-live-display",innerHTML:'<span class="vjs-control-text">'+this.localize("Stream Type")+"</span>"+this.localize("LIVE")},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateShowing=function(){this.player().duration()===1/0?this.show():this.hide()},b}(i["default"]);i["default"].registerComponent("LiveDisplay",l),c["default"]=l,b.exports=c["default"]},{"../component":65,"../utils/dom.js":128}],69:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../button"),i=e(h),j=a("../component"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"volumechange",this.update),c.tech_&&c.tech_.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){this.update(),c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")})}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-mute-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.player_.muted(this.player_.muted()?!1:!0)},b.prototype.update=function(){var a=this.player_.volume(),b=3;0===a||this.player_.muted()?b=0:.33>a?b=1:.67>a&&(b=2);var c=this.player_.muted()?"Unmute":"Mute",d=this.localize(c);this.controlText()!==d&&this.controlText(d);for(var e=0;4>e;e++)m.removeElClass(this.el_,"vjs-vol-"+e);m.addElClass(this.el_,"vjs-vol-"+b)},b}(i["default"]);n.prototype.controlText_="Mute",k["default"].registerComponent("MuteToggle",n),c["default"]=n,b.exports=c["default"]},{"../button":63,"../component":65,"../utils/dom.js":128}],70:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),a.call(this,c,d),this.on(c,"play",this.handlePlay),this.on(c,"pause",this.handlePause)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-play-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.player_.paused()?this.player_.play():this.player_.pause()},b.prototype.handlePlay=function(){this.removeClass("vjs-paused"),this.addClass("vjs-playing"),this.controlText("Pause")},b.prototype.handlePause=function(){this.removeClass("vjs-playing"),this.addClass("vjs-paused"),this.controlText("Play")},b}(h["default"]);k.prototype.controlText_="Play",j["default"].registerComponent("PlayToggle",k),c["default"]=k,b.exports=c["default"]},{"../button.js":63,"../component.js":65}],71:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../menu/menu-button.js"),i=e(h),j=a("../../menu/menu.js"),k=e(j),l=a("./playback-rate-menu-item.js"),m=e(l),n=a("../../component.js"),o=e(n),p=a("../../utils/dom.js"),q=d(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.updateVisibility(),this.updateLabel(),this.on(c,"loadstart",this.updateVisibility),this.on(c,"ratechange",this.updateLabel)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this);return this.labelEl_=q.createEl("div",{className:"vjs-playback-rate-value",innerHTML:1}),b.appendChild(this.labelEl_),b},b.prototype.buildCSSClass=function(){return"vjs-playback-rate "+a.prototype.buildCSSClass.call(this)},b.prototype.createMenu=function(){var a=new k["default"](this.player()),b=this.playbackRates();if(b)for(var c=b.length-1;c>=0;c--)a.addChild(new m["default"](this.player(),{rate:b[c]+"x"}));return a},b.prototype.updateARIAAttributes=function(){this.el().setAttribute("aria-valuenow",this.player().playbackRate())},b.prototype.handleClick=function(){for(var a=this.player().playbackRate(),b=this.playbackRates(),c=b[0],d=0;d<b.length;d++)if(b[d]>a){c=b[d];break}this.player().playbackRate(c)},b.prototype.playbackRates=function(){return this.options_.playbackRates||this.options_.playerOptions&&this.options_.playerOptions.playbackRates},b.prototype.playbackRateSupported=function(){return this.player().tech_&&this.player().tech_.featuresPlaybackRate&&this.playbackRates()&&this.playbackRates().length>0},b.prototype.updateVisibility=function(){this.playbackRateSupported()?this.removeClass("vjs-hidden"):this.addClass("vjs-hidden")},b.prototype.updateLabel=function(){this.playbackRateSupported()&&(this.labelEl_.innerHTML=this.player().playbackRate()+"x")},b}(i["default"]);r.prototype.controlText_="Playback Rate",o["default"].registerComponent("PlaybackRateMenuButton",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":65,"../../menu/menu-button.js":102,"../../menu/menu.js":104,"../../utils/dom.js":128,"./playback-rate-menu-item.js":72}],72:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("../../menu/menu-item.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b);var f=d.rate,g=parseFloat(f,10);d.label=f,d.selected=1===g,a.call(this,c,d),this.label=f,this.rate=g,this.on(c,"ratechange",this.update)}return f(b,a),b.prototype.handleClick=function(){a.prototype.handleClick.call(this),this.player().playbackRate(this.rate)},b.prototype.update=function(){this.selected(this.player().playbackRate()===this.rate)},b}(h["default"]);k.prototype.contentElType="button",j["default"].registerComponent("PlaybackRateMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":65,"../../menu/menu-item.js":103}],73:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=e(h),j=a("../../utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"progress",this.update)}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-load-progress",innerHTML:'<span class="vjs-control-text"><span>'+this.localize("Loaded")+"</span>: 0%</span>"})},b.prototype.update=function(){var a=this.player_.buffered(),b=this.player_.duration(),c=this.player_.bufferedEnd(),d=this.el_.children,e=function(a,b){var c=a/b||0;return 100*(c>=1?1:c)+"%"};this.el_.style.width=e(c,b);for(var f=0;f<a.length;f++){var g=a.start(f),h=a.end(f),i=d[f];i||(i=this.el_.appendChild(k.createEl())),i.style.left=e(g,c),i.style.width=e(h-g,c)}for(var f=d.length;f>a.length;f--)this.el_.removeChild(d[f-1])},b}(i["default"]);i["default"].registerComponent("LoadProgressBar",l),c["default"]=l,b.exports=c["default"]},{"../../component.js":65,"../../utils/dom.js":128}],74:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/fn.js"),m=d(l),n=a("../../utils/format-time.js"),o=e(n),p=a("lodash-compat/function/throttle"),q=e(p),r=function(a){function b(c,d){var e=this;f(this,b),a.call(this,c,d),this.update(0,0),c.on("ready",function(){e.on(c.controlBar.progressControl.el(),"mousemove",q["default"](m.bind(e,e.handleMouseMove),25))})}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-mouse-display"})},b.prototype.handleMouseMove=function(a){var b=this.player_.duration(),c=this.calculateDistance(a)*b,d=a.pageX-k.findElPosition(this.el().parentNode).left;this.update(c,d)},b.prototype.update=function(a,b){var c=o["default"](a,this.player_.duration());this.el().style.left=b+"px",this.el().setAttribute("data-current-time",c)},b.prototype.calculateDistance=function(a){return k.getPointerPosition(this.el().parentNode,a).x},b}(i["default"]);i["default"].registerComponent("MouseTimeDisplay",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":65,"../../utils/dom.js":128,"../../utils/fn.js":130,"../../utils/format-time.js":131,"lodash-compat/function/throttle":7}],75:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=e(h),j=a("../../utils/fn.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.updateDataAttr(),this.on(c,"timeupdate",this.updateDataAttr),c.ready(k.bind(this,this.updateDataAttr))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-play-progress vjs-slider-bar",innerHTML:'<span class="vjs-control-text"><span>'+this.localize("Progress")+"</span>: 0%</span>"})},b.prototype.updateDataAttr=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("data-current-time",m["default"](a,this.player_.duration()))},b}(i["default"]);i["default"].registerComponent("PlayProgressBar",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":65,"../../utils/fn.js":130,"../../utils/format-time.js":131}],76:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("../../component.js"),h=d(g),i=a("./seek-bar.js"),j=(d(i),a("./mouse-time-display.js")),k=(d(j),function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-control vjs-control"})},b}(h["default"]));k.prototype.options_={children:["seekBar"]},h["default"].registerComponent("ProgressControl",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":65,"./mouse-time-display.js":74,"./seek-bar.js":77}],77:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../slider/slider.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("./load-progress-bar.js"),m=(e(l),a("./play-progress-bar.js")),n=(e(m),a("../../utils/fn.js")),o=d(n),p=a("../../utils/format-time.js"),q=e(p),r=a("object.assign"),s=(e(r),function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateARIAAttributes),c.ready(o.bind(this,this.updateARIAAttributes))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-holder"},{"aria-label":"video progress bar"})},b.prototype.updateARIAAttributes=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("aria-valuenow",(100*this.getPercent()).toFixed(2)),this.el_.setAttribute("aria-valuetext",q["default"](a,this.player_.duration()))},b.prototype.getPercent=function(){var a=this.player_.currentTime()/this.player_.duration();return a>=1?1:a},b.prototype.handleMouseDown=function(b){a.prototype.handleMouseDown.call(this,b),this.player_.scrubbing(!0),this.videoWasPlaying=!this.player_.paused(),this.player_.pause()},b.prototype.handleMouseMove=function(a){var b=this.calculateDistance(a)*this.player_.duration();b===this.player_.duration()&&(b-=.1),this.player_.currentTime(b)},b.prototype.handleMouseUp=function(b){a.prototype.handleMouseUp.call(this,b),this.player_.scrubbing(!1),this.videoWasPlaying&&this.player_.play()},b.prototype.stepForward=function(){this.player_.currentTime(this.player_.currentTime()+5)},b.prototype.stepBack=function(){this.player_.currentTime(this.player_.currentTime()-5)},b}(i["default"]));s.prototype.options_={children:["loadProgressBar","mouseTimeDisplay","playProgressBar"],barName:"playProgressBar"},s.prototype.playerEvent="timeupdate",k["default"].registerComponent("SeekBar",s),c["default"]=s,b.exports=c["default"]},{"../../component.js":65,"../../slider/slider.js":110,"../../utils/fn.js":130,"../../utils/format-time.js":131,"./load-progress-bar.js":73,"./play-progress-bar.js":75,"object.assign":45}],78:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("./spacer.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-custom-control-spacer "+a.prototype.buildCSSClass.call(this)},b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,{className:this.buildCSSClass()});return b.innerHTML="&nbsp;",b},b}(h["default"]);j["default"].registerComponent("CustomControlSpacer",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":65,"./spacer.js":79}],79:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-spacer "+a.prototype.buildCSSClass.call(this)},b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:this.buildCSSClass()})},b}(h["default"]);h["default"].registerComponent("Spacer",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":65}],80:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("./text-track-menu-item.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),d.track={kind:d.kind,player:c,label:d.kind+" settings","default":!1,mode:"disabled"},a.call(this,c,d),this.addClass("vjs-texttrack-settings")}return f(b,a),b.prototype.handleClick=function(){this.player().getChild("textTrackSettings").show()},b}(h["default"]);j["default"].registerComponent("CaptionSettingsMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":65,"./text-track-menu-item.js":87}],81:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
+ }function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("./text-track-button.js"),h=d(g),i=a("../../component.js"),j=d(i),k=a("./caption-settings-menu-item.js"),l=d(k),m=function(a){function b(c,d,f){e(this,b),a.call(this,c,d,f),this.el_.setAttribute("aria-label","Captions Menu")}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-captions-button "+a.prototype.buildCSSClass.call(this)},b.prototype.update=function(){var b=2;a.prototype.update.call(this),this.player().tech_&&this.player().tech_.featuresNativeTextTracks&&(b=1),this.items&&this.items.length>b?this.show():this.hide()},b.prototype.createItems=function(){var b=[];return this.player().tech_&&this.player().tech_.featuresNativeTextTracks||b.push(new l["default"](this.player_,{kind:this.kind_})),a.prototype.createItems.call(this,b)},b}(h["default"]);m.prototype.kind_="captions",m.prototype.controlText_="Captions",j["default"].registerComponent("CaptionsButton",m),c["default"]=m,b.exports=c["default"]},{"../../component.js":65,"./caption-settings-menu-item.js":80,"./text-track-button.js":86}],82:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./text-track-button.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("./text-track-menu-item.js"),m=e(l),n=a("./chapters-track-menu-item.js"),o=e(n),p=a("../../menu/menu.js"),q=e(p),r=a("../../utils/dom.js"),s=d(r),t=a("../../utils/fn.js"),u=(d(t),a("../../utils/to-title-case.js")),v=e(u),w=a("global/window"),x=(e(w),function(a){function b(c,d,e){f(this,b),a.call(this,c,d,e),this.el_.setAttribute("aria-label","Chapters Menu")}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-chapters-button "+a.prototype.buildCSSClass.call(this)},b.prototype.createItems=function(){var a=[],b=this.player_.textTracks();if(!b)return a;for(var c=0;c<b.length;c++){var d=b[c];d.kind===this.kind_&&a.push(new m["default"](this.player_,{track:d}))}return a},b.prototype.createMenu=function(){for(var a=this,b=this.player_.textTracks()||[],c=void 0,d=this.items=[],e=0,f=b.length;f>e;e++){var g=b[e];if(g.kind===this.kind_){c=g;break}}var h=this.menu;if(void 0===h&&(h=new q["default"](this.player_),h.contentEl().appendChild(s.createEl("li",{className:"vjs-menu-title",innerHTML:v["default"](this.kind_),tabIndex:-1}))),c&&null==c.cues){c.mode="hidden";var i=this.player_.remoteTextTrackEls().getTrackElementByTrack_(c);i&&i.addEventListener("load",function(){return a.update()})}if(c&&c.cues&&c.cues.length>0){for(var j=c.cues,k=void 0,e=0,l=j.length;l>e;e++){k=j[e];var m=new o["default"](this.player_,{track:c,cue:k});d.push(m),h.addChild(m)}this.addChild(h)}return this.items.length>0&&this.show(),h},b}(i["default"]));x.prototype.kind_="chapters",x.prototype.controlText_="Chapters",k["default"].registerComponent("ChaptersButton",x),c["default"]=x,b.exports=c["default"]},{"../../component.js":65,"../../menu/menu.js":104,"../../utils/dom.js":128,"../../utils/fn.js":130,"../../utils/to-title-case.js":137,"./chapters-track-menu-item.js":83,"./text-track-button.js":86,"./text-track-menu-item.js":87,"global/window":2}],83:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../menu/menu-item.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=function(a){function b(c,d){f(this,b);var e=d.track,g=d.cue,h=c.currentTime();d.label=g.text,d.selected=g.startTime<=h&&h<g.endTime,a.call(this,c,d),this.track=e,this.cue=g,e.addEventListener("cuechange",m.bind(this,this.update))}return g(b,a),b.prototype.handleClick=function(){a.prototype.handleClick.call(this),this.player_.currentTime(this.cue.startTime),this.update(this.cue.startTime)},b.prototype.update=function(){var a=this.cue,b=this.player_.currentTime();this.selected(a.startTime<=b&&b<a.endTime)},b}(i["default"]);k["default"].registerComponent("ChaptersTrackMenuItem",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":65,"../../menu/menu-item.js":103,"../../utils/fn.js":130}],84:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("./text-track-menu-item.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),d.track={kind:d.kind,player:c,label:d.kind+" off","default":!1,mode:"disabled"},a.call(this,c,d),this.selected(!0)}return f(b,a),b.prototype.handleTracksChange=function(){for(var a=this.player().textTracks(),b=!0,c=0,d=a.length;d>c;c++){var e=a[c];if(e.kind===this.track.kind&&"showing"===e.mode){b=!1;break}}this.selected(b)},b}(h["default"]);j["default"].registerComponent("OffTextTrackMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":65,"./text-track-menu-item.js":87}],85:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("./text-track-button.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d,f){e(this,b),a.call(this,c,d,f),this.el_.setAttribute("aria-label","Subtitles Menu")}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-subtitles-button "+a.prototype.buildCSSClass.call(this)},b}(h["default"]);k.prototype.kind_="subtitles",k.prototype.controlText_="Subtitles",j["default"].registerComponent("SubtitlesButton",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":65,"./text-track-button.js":86}],86:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../menu/menu-button.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=a("./text-track-menu-item.js"),o=e(n),p=a("./off-text-track-menu-item.js"),q=e(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d);var e=this.player_.textTracks();if(this.items.length<=1&&this.hide(),e){var g=m.bind(this,this.update);e.addEventListener("removetrack",g),e.addEventListener("addtrack",g),this.player_.on("dispose",function(){e.removeEventListener("removetrack",g),e.removeEventListener("addtrack",g)})}}return g(b,a),b.prototype.createItems=function(){var a=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];a.push(new q["default"](this.player_,{kind:this.kind_}));var b=this.player_.textTracks();if(!b)return a;for(var c=0;c<b.length;c++){var d=b[c];d.kind===this.kind_&&a.push(new o["default"](this.player_,{track:d}))}return a},b}(i["default"]);k["default"].registerComponent("TextTrackButton",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":65,"../../menu/menu-button.js":102,"../../utils/fn.js":130,"./off-text-track-menu-item.js":84,"./text-track-menu-item.js":87}],87:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../menu/menu-item.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=a("global/window"),o=e(n),p=a("global/document"),q=e(p),r=function(a){function b(c,d){var e=this;f(this,b);var g=d.track,h=c.textTracks();d.label=g.label||g.language||"Unknown",d.selected=g["default"]||"showing"===g.mode,a.call(this,c,d),this.track=g,h&&!function(){var a=m.bind(e,e.handleTracksChange);h.addEventListener("change",a),e.on("dispose",function(){h.removeEventListener("change",a)})}(),h&&void 0===h.onchange&&!function(){var a=void 0;e.on(["tap","click"],function(){if("object"!=typeof o["default"].Event)try{a=new o["default"].Event("change")}catch(b){}a||(a=q["default"].createEvent("Event"),a.initEvent("change",!0,!0)),h.dispatchEvent(a)})}()}return g(b,a),b.prototype.handleClick=function(b){var c=this.track.kind,d=this.player_.textTracks();if(a.prototype.handleClick.call(this,b),d)for(var e=0;e<d.length;e++){var f=d[e];f.kind===c&&(f.mode=f===this.track?"showing":"disabled")}},b.prototype.handleTracksChange=function(){this.selected("showing"===this.track.mode)},b}(i["default"]);k["default"].registerComponent("TextTrackMenuItem",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":65,"../../menu/menu-item.js":103,"../../utils/fn.js":130,"global/document":1,"global/window":2}],88:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateContent)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-current-time vjs-time-control vjs-control"});return this.contentEl_=k.createEl("div",{className:"vjs-current-time-display",innerHTML:'<span class="vjs-control-text">Current Time </span>0:00'},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime(),b=this.localize("Current Time"),c=m["default"](a,this.player_.duration());this.contentEl_.innerHTML='<span class="vjs-control-text">'+b+"</span> "+c},b}(i["default"]);i["default"].registerComponent("CurrentTimeDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":65,"../../utils/dom.js":128,"../../utils/format-time.js":131}],89:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateContent),this.on(c,"loadedmetadata",this.updateContent)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-duration vjs-time-control vjs-control"});return this.contentEl_=k.createEl("div",{className:"vjs-duration-display",innerHTML:'<span class="vjs-control-text">'+this.localize("Duration Time")+"</span> 0:00"},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){var a=this.player_.duration();if(a){var b=this.localize("Duration Time"),c=m["default"](a);this.contentEl_.innerHTML='<span class="vjs-control-text">'+b+"</span> "+c}},b}(i["default"]);i["default"].registerComponent("DurationDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":65,"../../utils/dom.js":128,"../../utils/format-time.js":131}],90:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateContent)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-remaining-time vjs-time-control vjs-control"});return this.contentEl_=k.createEl("div",{className:"vjs-remaining-time-display",innerHTML:'<span class="vjs-control-text">'+this.localize("Remaining Time")+"</span> -0:00"},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){if(this.player_.duration()){var a=this.localize("Remaining Time"),b=m["default"](this.player_.remainingTime());this.contentEl_.innerHTML='<span class="vjs-control-text">'+a+"</span> -"+b}},b}(i["default"]);i["default"].registerComponent("RemainingTimeDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":65,"../../utils/dom.js":128,"../../utils/format-time.js":131}],91:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-time-control vjs-time-divider",innerHTML:"<div><span>/</span></div>"})},b}(h["default"]);h["default"].registerComponent("TimeDivider",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":65}],92:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../slider/slider.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=a("./volume-level.js"),o=(e(n),function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"volumechange",this.updateARIAAttributes),c.ready(m.bind(this,this.updateARIAAttributes))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-bar vjs-slider-bar"},{"aria-label":"volume level"})},b.prototype.handleMouseMove=function(a){this.player_.muted()&&this.player_.muted(!1),this.player_.volume(this.calculateDistance(a))},b.prototype.getPercent=function(){return this.player_.muted()?0:this.player_.volume()},b.prototype.stepForward=function(){this.player_.volume(this.player_.volume()+.1)},b.prototype.stepBack=function(){this.player_.volume(this.player_.volume()-.1)},b.prototype.updateARIAAttributes=function(){var a=(100*this.player_.volume()).toFixed(2);this.el_.setAttribute("aria-valuenow",a),this.el_.setAttribute("aria-valuetext",a+"%")},b}(i["default"]));o.prototype.options_={children:["volumeLevel"],barName:"volumeLevel"},o.prototype.playerEvent="volumechange",k["default"].registerComponent("VolumeBar",o),c["default"]=o,b.exports=c["default"]},{"../../component.js":65,"../../slider/slider.js":110,"../../utils/fn.js":130,"./volume-level.js":94}],93:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("../../component.js"),h=d(g),i=a("./volume-bar.js"),j=(d(i),function(a){function b(c,d){e(this,b),a.call(this,c,d),c.tech_&&c.tech_.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")})}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-control vjs-control"})},b}(h["default"]));j.prototype.options_={children:["volumeBar"]},h["default"].registerComponent("VolumeControl",j),c["default"]=j,b.exports=c["default"]},{"../../component.js":65,"./volume-bar.js":92}],94:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-level",innerHTML:'<span class="vjs-control-text"></span>'})},b}(h["default"]);h["default"].registerComponent("VolumeLevel",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":65}],95:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../button.js"),i=(e(h),a("../utils/fn.js")),j=d(i),k=a("../component.js"),l=e(k),m=a("../menu/menu.js"),n=e(m),o=a("../menu/menu-button.js"),p=e(o),q=a("./mute-toggle.js"),r=e(q),s=a("./volume-control/volume-bar.js"),t=e(s),u=a("global/document"),v=e(u),w=function(a){function b(c){function d(){c.tech_&&c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];f(this,b),void 0===e.inline&&(e.inline=!0),void 0===e.vertical&&(e.vertical=e.inline?!1:!0),e.volumeBar=e.volumeBar||{},e.volumeBar.vertical=!!e.vertical,a.call(this,c,e),this.on(c,"volumechange",this.volumeUpdate),this.on(c,"loadstart",this.volumeUpdate),d.call(this),this.on(c,"loadstart",d),this.on(this.volumeBar,["slideractive","focus"],function(){this.addClass("vjs-slider-active")}),this.on(this.volumeBar,["sliderinactive","blur"],function(){this.removeClass("vjs-slider-active")})}return g(b,a),b.prototype.buildCSSClass=function(){var b="";return b=this.options_.vertical?"vjs-volume-menu-button-vertical":"vjs-volume-menu-button-horizontal","vjs-volume-menu-button "+a.prototype.buildCSSClass.call(this)+" "+b},b.prototype.createMenu=function(){var a=new n["default"](this.player_,{contentElType:"div"}),b=new t["default"](this.player_,this.options_.volumeBar);return a.addChild(b),this.volumeBar=b,this.attachVolumeBarEvents(),a},b.prototype.handleClick=function(){r["default"].prototype.handleClick.call(this),a.prototype.handleClick.call(this)},b.prototype.attachVolumeBarEvents=function(){this.on(["mousedown","touchdown"],this.handleMouseDown)},b.prototype.handleMouseDown=function(){this.on(["mousemove","touchmove"],j.bind(this.volumeBar,this.volumeBar.handleMouseMove)),this.on(v["default"],["mouseup","touchend"],this.handleMouseUp)},b.prototype.handleMouseUp=function(){this.off(["mousemove","touchmove"],j.bind(this.volumeBar,this.volumeBar.handleMouseMove))},b}(p["default"]);w.prototype.volumeUpdate=r["default"].prototype.update,w.prototype.controlText_="Mute",l["default"].registerComponent("VolumeMenuButton",w),c["default"]=w,b.exports=c["default"]},{"../button.js":63,"../component.js":65,"../menu/menu-button.js":102,"../menu/menu.js":104,"../utils/fn.js":130,"./mute-toggle.js":69,"./volume-control/volume-bar.js":92,"global/document":1}],96:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./component"),i=e(h),j=a("./modal-dialog"),k=e(j),l=a("./utils/dom"),m=(d(l),a("./utils/merge-options")),n=e(m),o=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"error",this.open)}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-error-display "+a.prototype.buildCSSClass.call(this)},b.prototype.content=function(){var a=this.player().error();return a?this.localize(a.message):""},b}(k["default"]);o.prototype.options_=n["default"](k["default"].prototype.options_,{fillAlways:!0,temporary:!1,uncloseable:!0}),i["default"].registerComponent("ErrorDisplay",o),c["default"]=o,b.exports=c["default"]},{"./component":65,"./modal-dialog":105,"./utils/dom":128,"./utils/merge-options":134}],97:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}c.__esModule=!0;var e=a("./utils/events.js"),f=d(e),g=function(){};g.prototype.allowedEvents_={},g.prototype.on=function(a,b){var c=this.addEventListener;this.addEventListener=Function.prototype,f.on(this,a,b),this.addEventListener=c},g.prototype.addEventListener=g.prototype.on,g.prototype.off=function(a,b){f.off(this,a,b)},g.prototype.removeEventListener=g.prototype.off,g.prototype.one=function(a,b){f.one(this,a,b)},g.prototype.trigger=function(a){var b=a.type||a;"string"==typeof a&&(a={type:b}),a=f.fixEvent(a),this.allowedEvents_[b]&&this["on"+b]&&this["on"+b](a),f.trigger(this,a)},g.prototype.dispatchEvent=g.prototype.trigger,c["default"]=g,b.exports=c["default"]},{"./utils/events.js":129}],98:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./utils/log"),f=d(e),g=function(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(a.super_=b)},h=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=function(){a.apply(this,arguments)},d={};"object"==typeof b?("function"==typeof b.init&&(f["default"].warn("Constructor logic via init() is deprecated; please use constructor() instead."),b.constructor=b.init),b.constructor!==Object.prototype.constructor&&(c=b.constructor),d=b):"function"==typeof b&&(c=b),g(c,a);for(var e in d)d.hasOwnProperty(e)&&(c.prototype[e]=d[e]);return c};c["default"]=h,b.exports=c["default"]},{"./utils/log":133}],99:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;for(var e=a("global/document"),f=d(e),g={},h=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],i=h[0],j=void 0,k=0;k<h.length;k++)if(h[k][1]in f["default"]){j=h[k];break}if(j)for(var k=0;k<j.length;k++)g[i[k]]=j[k];c["default"]=g,b.exports=c["default"]},{"global/document":1}],100:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("./component"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-loading-spinner"})},b}(h["default"]);h["default"].registerComponent("LoadingSpinner",i),c["default"]=i,b.exports=c["default"]},{"./component":65}],101:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("object.assign"),f=d(e),g=function i(a){"number"==typeof a?this.code=a:"string"==typeof a?this.message=a:"object"==typeof a&&f["default"](this,a),this.message||(this.message=i.defaultMessages[this.code]||"")};g.prototype.code=0,g.prototype.message="",g.prototype.status=null,g.errorTypes=["MEDIA_ERR_CUSTOM","MEDIA_ERR_ABORTED","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","MEDIA_ERR_ENCRYPTED"],g.defaultMessages={1:"You aborted the media playback",2:"A network error caused the media download to fail part-way.",3:"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.",4:"The media could not be loaded, either because the server or network failed or because the format is not supported.",5:"The media is encrypted and we do not have the keys to decrypt it."};for(var h=0;h<g.errorTypes.length;h++)g[g.errorTypes[h]]=h,g.prototype[g.errorTypes[h]]=h;c["default"]=g,b.exports=c["default"]},{"object.assign":45}],102:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../button.js"),i=e(h),j=a("../component.js"),k=e(j),l=a("./menu.js"),m=e(l),n=a("../utils/dom.js"),o=d(n),p=a("../utils/fn.js"),q=d(p),r=a("../utils/to-title-case.js"),s=e(r),t=function(a){function b(c){var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];f(this,b),a.call(this,c,d),this.update(),this.on("keydown",this.handleKeyPress),this.el_.setAttribute("aria-haspopup",!0),this.el_.setAttribute("role","button")}return g(b,a),b.prototype.update=function(){var a=this.createMenu();this.menu&&this.removeChild(this.menu),this.menu=a,this.addChild(a),this.buttonPressed_=!1,this.items&&0===this.items.length?this.hide():this.items&&this.items.length>1&&this.show();
16
+
17
+ },b.prototype.createMenu=function(){var a=new m["default"](this.player_);if(this.options_.title&&a.contentEl().appendChild(o.createEl("li",{className:"vjs-menu-title",innerHTML:s["default"](this.options_.title),tabIndex:-1})),this.items=this.createItems(),this.items)for(var b=0;b<this.items.length;b++)a.addItem(this.items[b]);return a},b.prototype.createItems=function(){},b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:this.buildCSSClass()})},b.prototype.buildCSSClass=function(){var b="vjs-menu-button";return b+=this.options_.inline===!0?"-inline":"-popup","vjs-menu-button "+b+" "+a.prototype.buildCSSClass.call(this)},b.prototype.handleFocus=function(){},b.prototype.handleBlur=function(){},b.prototype.handleClick=function(){this.one("mouseout",q.bind(this,function(){this.menu.unlockShowing(),this.el_.blur()})),this.buttonPressed_?this.unpressButton():this.pressButton()},b.prototype.handleKeyPress=function(a){32===a.which||13===a.which?(this.buttonPressed_?this.unpressButton():this.pressButton(),a.preventDefault()):27===a.which&&(this.buttonPressed_&&this.unpressButton(),a.preventDefault())},b.prototype.pressButton=function(){this.buttonPressed_=!0,this.menu.lockShowing(),this.el_.setAttribute("aria-pressed",!0),this.items&&this.items.length>0&&this.items[0].el().focus()},b.prototype.unpressButton=function(){this.buttonPressed_=!1,this.menu.unlockShowing(),this.el_.setAttribute("aria-pressed",!1)},b}(i["default"]);k["default"].registerComponent("MenuButton",t),c["default"]=t,b.exports=c["default"]},{"../button.js":63,"../component.js":65,"../utils/dom.js":128,"../utils/fn.js":130,"../utils/to-title-case.js":137,"./menu.js":104}],103:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=a("object.assign"),l=d(k),m=function(a){function b(c,d){e(this,b),a.call(this,c,d),this.selected(d.selected)}return f(b,a),b.prototype.createEl=function(b,c,d){return a.prototype.createEl.call(this,"li",l["default"]({className:"vjs-menu-item",innerHTML:this.localize(this.options_.label)},c),d)},b.prototype.handleClick=function(){this.selected(!0)},b.prototype.selected=function(a){a?(this.addClass("vjs-selected"),this.el_.setAttribute("aria-selected",!0)):(this.removeClass("vjs-selected"),this.el_.setAttribute("aria-selected",!1))},b}(h["default"]);j["default"].registerComponent("MenuItem",m),c["default"]=m,b.exports=c["default"]},{"../button.js":63,"../component.js":65,"object.assign":45}],104:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../component.js"),i=e(h),j=a("../utils/dom.js"),k=d(j),l=a("../utils/fn.js"),m=d(l),n=a("../utils/events.js"),o=d(n),p=function(a){function b(){f(this,b),a.apply(this,arguments)}return g(b,a),b.prototype.addItem=function(a){this.addChild(a),a.on("click",m.bind(this,function(){this.unlockShowing()}))},b.prototype.createEl=function(){var b=this.options_.contentElType||"ul";this.contentEl_=k.createEl(b,{className:"vjs-menu-content"});var c=a.prototype.createEl.call(this,"div",{append:this.contentEl_,className:"vjs-menu"});return c.appendChild(this.contentEl_),o.on(c,"click",function(a){a.preventDefault(),a.stopImmediatePropagation()}),c},b}(i["default"]);i["default"].registerComponent("Menu",p),c["default"]=p,b.exports=c["default"]},{"../component.js":65,"../utils/dom.js":128,"../utils/events.js":129,"../utils/fn.js":130}],105:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("global/document"),i=e(h),j=a("./utils/dom"),k=d(j),l=a("./utils/fn"),m=d(l),n=a("./utils/log"),o=(e(n),a("./component")),p=e(o),q=a("./close-button"),r=(e(q),"vjs-modal-dialog"),s=27,t=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.opened_=this.hasBeenOpened_=this.hasBeenFilled_=!1,this.closeable(!this.options_.uncloseable),this.content(this.options_.content),this.contentEl_=k.createEl("div",{className:r+"-content"},{role:"document"}),this.descEl_=k.createEl("p",{className:r+"-description vjs-offscreen",id:this.el().getAttribute("aria-describedby")}),k.textContent(this.descEl_,this.description()),this.el_.appendChild(this.descEl_),this.el_.appendChild(this.contentEl_)}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:this.buildCSSClass(),tabIndex:-1},{"aria-describedby":this.id()+"_description","aria-hidden":"true","aria-label":this.label(),role:"dialog"})},b.prototype.buildCSSClass=function(){return r+" vjs-hidden "+a.prototype.buildCSSClass.call(this)},b.prototype.handleKeyPress=function(a){a.which===s&&this.closeable()&&this.close()},b.prototype.label=function(){return this.options_.label||this.localize("Modal Window")},b.prototype.description=function(){var a=this.options_.description||this.localize("This is a modal window.");return this.closeable()&&(a+=" "+this.localize("This modal can be closed by pressing the Escape key or activating the close button.")),a},b.prototype.open=function(){if(!this.opened_){var a=this.player();this.trigger("beforemodalopen"),this.opened_=!0,(this.options_.fillAlways||!this.hasBeenOpened_&&!this.hasBeenFilled_)&&this.fill(),this.wasPlaying_=!a.paused(),this.wasPlaying_&&a.pause(),this.closeable()&&this.on(i["default"],"keydown",m.bind(this,this.handleKeyPress)),a.controls(!1),this.show(),this.el().setAttribute("aria-hidden","false"),this.trigger("modalopen"),this.hasBeenOpened_=!0}return this},b.prototype.opened=function(a){return"boolean"==typeof a&&this[a?"open":"close"](),this.opened_},b.prototype.close=function(){if(this.opened_){var a=this.player();this.trigger("beforemodalclose"),this.opened_=!1,this.wasPlaying_&&a.play(),this.closeable()&&this.off(i["default"],"keydown",m.bind(this,this.handleKeyPress)),a.controls(!0),this.hide(),this.el().setAttribute("aria-hidden","true"),this.trigger("modalclose"),this.options_.temporary&&this.dispose()}return this},b.prototype.closeable=function c(a){if("boolean"==typeof a){var c=this.closeable_=!!a,b=this.getChild("closeButton");if(c&&!b){var d=this.contentEl_;this.contentEl_=this.el_,b=this.addChild("closeButton"),this.contentEl_=d,this.on(b,"close",this.close)}!c&&b&&(this.off(b,"close",this.close),this.removeChild(b),b.dispose())}return this.closeable_},b.prototype.fill=function(){return this.fillWith(this.content())},b.prototype.fillWith=function(a){var b=this.contentEl(),c=b.parentNode,d=b.nextSibling;return this.trigger("beforemodalfill"),this.hasBeenFilled_=!0,c.removeChild(b),this.empty(),k.insertContent(b,a),this.trigger("modalfill"),d?c.insertBefore(b,d):c.appendChild(b),this},b.prototype.empty=function(){return this.trigger("beforemodalempty"),k.emptyEl(this.contentEl()),this.trigger("modalempty"),this},b.prototype.content=function(a){return"undefined"!=typeof a&&(this.content_=a),this.content_},b}(p["default"]);t.prototype.options_={temporary:!0},p["default"].registerComponent("ModalDialog",t),c["default"]=t,b.exports=c["default"]},{"./close-button":64,"./component":65,"./utils/dom":128,"./utils/fn":130,"./utils/log":133,"global/document":1}],106:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./component.js"),i=e(h),j=a("global/document"),k=e(j),l=a("global/window"),m=e(l),n=a("./utils/events.js"),o=d(n),p=a("./utils/dom.js"),q=d(p),r=a("./utils/fn.js"),s=d(r),t=a("./utils/guid.js"),u=d(t),v=a("./utils/browser.js"),w=(d(v),a("./utils/log.js")),x=e(w),y=a("./utils/to-title-case.js"),z=e(y),A=a("./utils/time-ranges.js"),B=a("./utils/buffer.js"),C=a("./utils/stylesheet.js"),D=d(C),E=a("./fullscreen-api.js"),F=e(E),G=a("./media-error.js"),H=e(G),I=a("safe-json-parse/tuple"),J=e(I),K=a("object.assign"),L=e(K),M=a("./utils/merge-options.js"),N=e(M),O=a("./tracks/text-track-list-converter.js"),P=e(O),Q=a("./tech/loader.js"),R=(e(Q),a("./poster-image.js")),S=(e(R),a("./tracks/text-track-display.js")),T=(e(S),a("./loading-spinner.js")),U=(e(T),a("./big-play-button.js")),V=(e(U),a("./control-bar/control-bar.js")),W=(e(V),a("./error-display.js")),X=(e(W),a("./tracks/text-track-settings.js")),Y=(e(X),a("./modal-dialog")),Z=e(Y),$=a("./tech/tech.js"),_=e($),aa=a("./tech/html5.js"),ba=(e(aa),function(a){function b(c,d,e){var g=this;if(f(this,b),c.id=c.id||"vjs_video_"+u.newGUID(),d=L["default"](b.getTagSettings(c),d),d.initChildren=!1,d.createEl=!1,d.reportTouchActivity=!1,a.call(this,null,d,e),!this.options_||!this.options_.techOrder||!this.options_.techOrder.length)throw new Error("No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?");this.tag=c,this.tagAttributes=c&&q.getElAttributes(c),this.language(this.options_.language),d.languages?!function(){var a={};Object.getOwnPropertyNames(d.languages).forEach(function(b){a[b.toLowerCase()]=d.languages[b]}),g.languages_=a}():this.languages_=b.prototype.options_.languages,this.cache_={},this.poster_=d.poster||"",this.controls_=!!d.controls,c.controls=!1,this.scrubbing_=!1,this.el_=this.createEl();var h=N["default"](this.options_);d.plugins&&!function(){var a=d.plugins;Object.getOwnPropertyNames(a).forEach(function(b){"function"==typeof this[b]?this[b](a[b]):x["default"].error("Unable to find plugin:",b)},g)}(),this.options_.playerOptions=h,this.initChildren(),this.isAudio("audio"===c.nodeName.toLowerCase()),this.addClass(this.controls()?"vjs-controls-enabled":"vjs-controls-disabled"),this.isAudio()&&this.addClass("vjs-audio"),this.flexNotSupported_()&&this.addClass("vjs-no-flex"),b.players[this.id_]=this,this.userActive(!0),this.reportUserActivity(),this.listenForUserActivity_(),this.on("fullscreenchange",this.handleFullscreenChange_),this.on("stageclick",this.handleStageClick_)}return g(b,a),b.prototype.dispose=function(){this.trigger("dispose"),this.off("dispose"),this.styleEl_&&this.styleEl_.parentNode&&this.styleEl_.parentNode.removeChild(this.styleEl_),b.players[this.id_]=null,this.tag&&this.tag.player&&(this.tag.player=null),this.el_&&this.el_.player&&(this.el_.player=null),this.tech_&&this.tech_.dispose(),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var b=this.el_=a.prototype.createEl.call(this,"div"),c=this.tag;c.removeAttribute("width"),c.removeAttribute("height");var d=q.getElAttributes(c);Object.getOwnPropertyNames(d).forEach(function(a){"class"===a?b.className=d[a]:b.setAttribute(a,d[a])}),c.playerId=c.id,c.id+="_html5_api",c.className="vjs-tech",c.player=b.player=this,this.addClass("vjs-paused"),this.styleEl_=D.createStyleElement("vjs-styles-dimensions");var e=q.$(".vjs-styles-defaults"),f=q.$("head");return f.insertBefore(this.styleEl_,e?e.nextSibling:f.firstChild),this.width(this.options_.width),this.height(this.options_.height),this.fluid(this.options_.fluid),this.aspectRatio(this.options_.aspectRatio),c.initNetworkState_=c.networkState,c.parentNode&&c.parentNode.insertBefore(b,c),q.insertElFirst(c,b),this.el_=b,b},b.prototype.width=function(a){return this.dimension("width",a)},b.prototype.height=function(a){return this.dimension("height",a)},b.prototype.dimension=function(a,b){var c=a+"_";if(void 0===b)return this[c]||0;if(""===b)this[c]=void 0;else{var d=parseFloat(b);if(isNaN(d))return x["default"].error('Improper value "'+b+'" supplied for for '+a),this;this[c]=d}return this.updateStyleEl_(),this},b.prototype.fluid=function(a){return void 0===a?!!this.fluid_:(this.fluid_=!!a,void(a?this.addClass("vjs-fluid"):this.removeClass("vjs-fluid")))},b.prototype.aspectRatio=function(a){if(void 0===a)return this.aspectRatio_;if(!/^\d+\:\d+$/.test(a))throw new Error("Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.");this.aspectRatio_=a,this.fluid(!0),this.updateStyleEl_()},b.prototype.updateStyleEl_=function(){var a=void 0,b=void 0,c=void 0,d=void 0;c=void 0!==this.aspectRatio_&&"auto"!==this.aspectRatio_?this.aspectRatio_:this.videoWidth()?this.videoWidth()+":"+this.videoHeight():"16:9";var e=c.split(":"),f=e[1]/e[0];a=void 0!==this.width_?this.width_:void 0!==this.height_?this.height_/f:this.videoWidth()||300,b=void 0!==this.height_?this.height_:a*f,d=/^[^a-zA-Z]/.test(this.id())?"dimensions-"+this.id():this.id()+"-dimensions",this.addClass(d),D.setTextContent(this.styleEl_,"\n ."+d+" {\n width: "+a+"px;\n height: "+b+"px;\n }\n\n ."+d+".vjs-fluid {\n padding-top: "+100*f+"%;\n }\n ")},b.prototype.loadTech_=function(a,b){this.tech_&&this.unloadTech_(),"Html5"!==a&&this.tag&&(_["default"].getTech("Html5").disposeMediaElement(this.tag),this.tag.player=null,this.tag=null),this.techName_=a,this.isReady_=!1;var c=L["default"]({nativeControlsForTouch:this.options_.nativeControlsForTouch,source:b,playerId:this.id(),techId:this.id()+"_"+a+"_api",textTracks:this.textTracks_,autoplay:this.options_.autoplay,preload:this.options_.preload,loop:this.options_.loop,muted:this.options_.muted,poster:this.poster(),language:this.language(),"vtt.js":this.options_["vtt.js"]},this.options_[a.toLowerCase()]);this.tag&&(c.tag=this.tag),b&&(this.currentType_=b.type,b.src===this.cache_.src&&this.cache_.currentTime>0&&(c.startTime=this.cache_.currentTime),this.cache_.src=b.src);var d=_["default"].getTech(a);d||(d=i["default"].getComponent(a)),this.tech_=new d(c),this.tech_.ready(s.bind(this,this.handleTechReady_),!0),P["default"].jsonToTextTracks(this.textTracksJson_||[],this.tech_),this.on(this.tech_,"loadstart",this.handleTechLoadStart_),this.on(this.tech_,"waiting",this.handleTechWaiting_),this.on(this.tech_,"canplay",this.handleTechCanPlay_),this.on(this.tech_,"canplaythrough",this.handleTechCanPlayThrough_),this.on(this.tech_,"playing",this.handleTechPlaying_),this.on(this.tech_,"ended",this.handleTechEnded_),this.on(this.tech_,"seeking",this.handleTechSeeking_),this.on(this.tech_,"seeked",this.handleTechSeeked_),this.on(this.tech_,"play",this.handleTechPlay_),this.on(this.tech_,"firstplay",this.handleTechFirstPlay_),this.on(this.tech_,"pause",this.handleTechPause_),this.on(this.tech_,"progress",this.handleTechProgress_),this.on(this.tech_,"durationchange",this.handleTechDurationChange_),this.on(this.tech_,"fullscreenchange",this.handleTechFullscreenChange_),this.on(this.tech_,"error",this.handleTechError_),this.on(this.tech_,"suspend",this.handleTechSuspend_),this.on(this.tech_,"abort",this.handleTechAbort_),this.on(this.tech_,"emptied",this.handleTechEmptied_),this.on(this.tech_,"stalled",this.handleTechStalled_),this.on(this.tech_,"loadedmetadata",this.handleTechLoadedMetaData_),this.on(this.tech_,"loadeddata",this.handleTechLoadedData_),this.on(this.tech_,"timeupdate",this.handleTechTimeUpdate_),this.on(this.tech_,"ratechange",this.handleTechRateChange_),this.on(this.tech_,"volumechange",this.handleTechVolumeChange_),this.on(this.tech_,"texttrackchange",this.handleTechTextTrackChange_),this.on(this.tech_,"loadedmetadata",this.updateStyleEl_),this.on(this.tech_,"posterchange",this.handleTechPosterChange_),this.usingNativeControls(this.techGet_("controls")),this.controls()&&!this.usingNativeControls()&&this.addTechControlsListeners_(),this.tech_.el().parentNode===this.el()||"Html5"===a&&this.tag||q.insertElFirst(this.tech_.el(),this.el()),this.tag&&(this.tag.player=null,this.tag=null)},b.prototype.unloadTech_=function(){this.textTracks_=this.textTracks(),this.textTracksJson_=P["default"].textTracksToJson(this.tech_),this.isReady_=!1,this.tech_.dispose(),this.tech_=!1},b.prototype.tech=function(a){if(a&&a.IWillNotUseThisInPlugins)return this.tech_;var b="\n Please make sure that you are not using this inside of a plugin.\n To disable this alert and error, please pass in an object with\n `IWillNotUseThisInPlugins` to the `tech` method. See\n https://github.com/videojs/video.js/issues/2617 for more info.\n ";throw m["default"].alert(b),new Error(b)},b.prototype.addTechControlsListeners_=function(){this.removeTechControlsListeners_(),this.on(this.tech_,"mousedown",this.handleTechClick_),this.on(this.tech_,"touchstart",this.handleTechTouchStart_),this.on(this.tech_,"touchmove",this.handleTechTouchMove_),this.on(this.tech_,"touchend",this.handleTechTouchEnd_),this.on(this.tech_,"tap",this.handleTechTap_)},b.prototype.removeTechControlsListeners_=function(){this.off(this.tech_,"tap",this.handleTechTap_),this.off(this.tech_,"touchstart",this.handleTechTouchStart_),this.off(this.tech_,"touchmove",this.handleTechTouchMove_),this.off(this.tech_,"touchend",this.handleTechTouchEnd_),this.off(this.tech_,"mousedown",this.handleTechClick_)},b.prototype.handleTechReady_=function(){this.triggerReady(),this.cache_.volume&&this.techCall_("setVolume",this.cache_.volume),this.handleTechPosterChange_(),this.handleTechDurationChange_(),this.src()&&this.tag&&this.options_.autoplay&&this.paused()&&(delete this.tag.poster,this.play())},b.prototype.handleTechLoadStart_=function(){this.removeClass("vjs-ended"),this.error(null),this.paused()?(this.hasStarted(!1),this.trigger("loadstart")):(this.trigger("loadstart"),this.trigger("firstplay"))},b.prototype.hasStarted=function(a){return void 0!==a?(this.hasStarted_!==a&&(this.hasStarted_=a,a?(this.addClass("vjs-has-started"),this.trigger("firstplay")):this.removeClass("vjs-has-started")),this):!!this.hasStarted_},b.prototype.handleTechPlay_=function(){this.removeClass("vjs-ended"),this.removeClass("vjs-paused"),this.addClass("vjs-playing"),this.hasStarted(!0),this.trigger("play")},b.prototype.handleTechWaiting_=function(){this.addClass("vjs-waiting"),this.trigger("waiting")},b.prototype.handleTechCanPlay_=function(){this.removeClass("vjs-waiting"),this.trigger("canplay")},b.prototype.handleTechCanPlayThrough_=function(){this.removeClass("vjs-waiting"),this.trigger("canplaythrough")},b.prototype.handleTechPlaying_=function(){this.removeClass("vjs-waiting"),this.trigger("playing")},b.prototype.handleTechSeeking_=function(){this.addClass("vjs-seeking"),this.trigger("seeking")},b.prototype.handleTechSeeked_=function(){this.removeClass("vjs-seeking"),this.trigger("seeked")},b.prototype.handleTechFirstPlay_=function(){this.options_.starttime&&this.currentTime(this.options_.starttime),this.addClass("vjs-has-started"),this.trigger("firstplay")},b.prototype.handleTechPause_=function(){this.removeClass("vjs-playing"),this.addClass("vjs-paused"),this.trigger("pause")},b.prototype.handleTechProgress_=function(){this.trigger("progress")},b.prototype.handleTechEnded_=function(){this.addClass("vjs-ended"),this.options_.loop?(this.currentTime(0),this.play()):this.paused()||this.pause(),this.trigger("ended")},b.prototype.handleTechDurationChange_=function(){this.duration(this.techGet_("duration"))},b.prototype.handleTechClick_=function(a){0===a.button&&this.controls()&&(this.paused()?this.play():this.pause())},b.prototype.handleTechTap_=function(){this.userActive(!this.userActive())},b.prototype.handleTechTouchStart_=function(){this.userWasActive=this.userActive()},b.prototype.handleTechTouchMove_=function(){this.userWasActive&&this.reportUserActivity()},b.prototype.handleTechTouchEnd_=function(a){a.preventDefault()},b.prototype.handleFullscreenChange_=function(){this.isFullscreen()?this.addClass("vjs-fullscreen"):this.removeClass("vjs-fullscreen")},b.prototype.handleStageClick_=function(){this.reportUserActivity()},b.prototype.handleTechFullscreenChange_=function(a,b){b&&this.isFullscreen(b.isFullscreen),this.trigger("fullscreenchange")},b.prototype.handleTechError_=function(){var a=this.tech_.error();this.error(a&&a.code)},b.prototype.handleTechSuspend_=function(){this.trigger("suspend")},b.prototype.handleTechAbort_=function(){this.trigger("abort")},b.prototype.handleTechEmptied_=function(){this.trigger("emptied")},b.prototype.handleTechStalled_=function(){this.trigger("stalled")},b.prototype.handleTechLoadedMetaData_=function(){this.trigger("loadedmetadata")},b.prototype.handleTechLoadedData_=function(){this.trigger("loadeddata")},b.prototype.handleTechTimeUpdate_=function(){this.trigger("timeupdate")},b.prototype.handleTechRateChange_=function(){this.trigger("ratechange")},b.prototype.handleTechVolumeChange_=function(){this.trigger("volumechange")},b.prototype.handleTechTextTrackChange_=function(){this.trigger("texttrackchange")},b.prototype.getCache=function(){return this.cache_},b.prototype.techCall_=function(a,b){if(this.tech_&&!this.tech_.isReady_)this.tech_.ready(function(){this[a](b)},!0);else try{this.tech_[a](b)}catch(c){throw x["default"](c),c}},b.prototype.techGet_=function(a){if(this.tech_&&this.tech_.isReady_)try{return this.tech_[a]()}catch(b){throw void 0===this.tech_[a]?x["default"]("Video.js: "+a+" method not defined for "+this.techName_+" playback technology.",b):"TypeError"===b.name?(x["default"]("Video.js: "+a+" unavailable on "+this.techName_+" playback technology element.",b),this.tech_.isReady_=!1):x["default"](b),b}},b.prototype.play=function(){return this.techCall_("play"),this},b.prototype.pause=function(){return this.techCall_("pause"),this},b.prototype.paused=function(){return this.techGet_("paused")===!1?!1:!0},b.prototype.scrubbing=function(a){return void 0!==a?(this.scrubbing_=!!a,a?this.addClass("vjs-scrubbing"):this.removeClass("vjs-scrubbing"),this):this.scrubbing_},b.prototype.currentTime=function(a){return void 0!==a?(this.techCall_("setCurrentTime",a),this):this.cache_.currentTime=this.techGet_("currentTime")||0},b.prototype.duration=function(a){return void 0===a?this.cache_.duration||0:(a=parseFloat(a)||0,0>a&&(a=1/0),a!==this.cache_.duration&&(this.cache_.duration=a,a===1/0?this.addClass("vjs-live"):this.removeClass("vjs-live"),this.trigger("durationchange")),this)},b.prototype.remainingTime=function(){return this.duration()-this.currentTime()},b.prototype.buffered=function c(){var c=this.techGet_("buffered");return c&&c.length||(c=A.createTimeRange(0,0)),c},b.prototype.bufferedPercent=function(){return B.bufferedPercent(this.buffered(),this.duration())},b.prototype.bufferedEnd=function(){var a=this.buffered(),b=this.duration(),c=a.end(a.length-1);return c>b&&(c=b),c},b.prototype.volume=function(a){var b=void 0;return void 0!==a?(b=Math.max(0,Math.min(1,parseFloat(a))),this.cache_.volume=b,this.techCall_("setVolume",b),this):(b=parseFloat(this.techGet_("volume")),isNaN(b)?1:b)},b.prototype.muted=function(a){return void 0!==a?(this.techCall_("setMuted",a),this):this.techGet_("muted")||!1},b.prototype.supportsFullScreen=function(){return this.techGet_("supportsFullScreen")||!1},b.prototype.isFullscreen=function(a){return void 0!==a?(this.isFullscreen_=!!a,this):!!this.isFullscreen_},b.prototype.requestFullscreen=function(){var a=F["default"];return this.isFullscreen(!0),a.requestFullscreen?(o.on(k["default"],a.fullscreenchange,s.bind(this,function b(){this.isFullscreen(k["default"][a.fullscreenElement]),this.isFullscreen()===!1&&o.off(k["default"],a.fullscreenchange,b),this.trigger("fullscreenchange")})),this.el_[a.requestFullscreen]()):this.tech_.supportsFullScreen()?this.techCall_("enterFullScreen"):(this.enterFullWindow(),this.trigger("fullscreenchange")),this},b.prototype.exitFullscreen=function(){var a=F["default"];return this.isFullscreen(!1),a.requestFullscreen?k["default"][a.exitFullscreen]():this.tech_.supportsFullScreen()?this.techCall_("exitFullScreen"):(this.exitFullWindow(),this.trigger("fullscreenchange")),this},b.prototype.enterFullWindow=function(){this.isFullWindow=!0,this.docOrigOverflow=k["default"].documentElement.style.overflow,o.on(k["default"],"keydown",s.bind(this,this.fullWindowOnEscKey)),k["default"].documentElement.style.overflow="hidden",q.addElClass(k["default"].body,"vjs-full-window"),this.trigger("enterFullWindow")},b.prototype.fullWindowOnEscKey=function(a){27===a.keyCode&&(this.isFullscreen()===!0?this.exitFullscreen():this.exitFullWindow())},b.prototype.exitFullWindow=function(){this.isFullWindow=!1,o.off(k["default"],"keydown",this.fullWindowOnEscKey),k["default"].documentElement.style.overflow=this.docOrigOverflow,q.removeElClass(k["default"].body,"vjs-full-window"),this.trigger("exitFullWindow")},b.prototype.canPlayType=function(a){for(var b=void 0,c=0,d=this.options_.techOrder;c<d.length;c++){var e=z["default"](d[c]),f=_["default"].getTech(e);if(f||(f=i["default"].getComponent(e)),f){if(f.isSupported()&&(b=f.canPlayType(a)))return b}else x["default"].error('The "'+e+'" tech is undefined. Skipped browser support check for that tech.')}return""},b.prototype.selectSource=function(a){var b=this.options_.techOrder.map(z["default"]).map(function(a){return[a,_["default"].getTech(a)||i["default"].getComponent(a)]}).filter(function(a){var b=a[0],c=a[1];return c?c.isSupported():(x["default"].error('The "'+b+'" tech is undefined. Skipped browser support check for that tech.'),!1)}),c=function(a,b,c){var d=void 0;return a.some(function(a){return b.some(function(b){return d=c(a,b),d?!0:void 0})}),d},d=void 0,e=function(a){return function(b,c){return a(c,b)}},f=function(a,b){var c=a[0],d=a[1];return d.canPlaySource(b)?{source:b,tech:c}:void 0};return d=this.options_.sourceOrder?c(a,b,e(f)):c(b,a,f),d||!1},b.prototype.src=function(a){if(void 0===a)return this.techGet_("src");var b=_["default"].getTech(this.techName_);return b||(b=i["default"].getComponent(this.techName_)),Array.isArray(a)?this.sourceList_(a):"string"==typeof a?this.src({src:a}):a instanceof Object&&(a.type&&!b.canPlaySource(a)?this.sourceList_([a]):(this.cache_.src=a.src,this.currentType_=a.type||"",this.ready(function(){b.prototype.hasOwnProperty("setSource")?this.techCall_("setSource",a):this.techCall_("src",a.src),"auto"===this.options_.preload&&this.load(),this.options_.autoplay&&this.play()},!0))),this},b.prototype.sourceList_=function(a){var b=this.selectSource(a);b?b.tech===this.techName_?this.src(b.source):this.loadTech_(b.tech,b.source):(this.setTimeout(function(){this.error({code:4,message:this.localize(this.options_.notSupportedMessage)})},0),this.triggerReady())},b.prototype.load=function(){return this.techCall_("load"),this},b.prototype.reset=function(){return this.loadTech_(z["default"](this.options_.techOrder[0]),null),this.techCall_("reset"),this},b.prototype.currentSrc=function(){return this.techGet_("currentSrc")||this.cache_.src||""},b.prototype.currentType=function(){return this.currentType_||""},b.prototype.preload=function(a){return void 0!==a?(this.techCall_("setPreload",a),this.options_.preload=a,this):this.techGet_("preload")},b.prototype.autoplay=function(a){return void 0!==a?(this.techCall_("setAutoplay",a),this.options_.autoplay=a,this):this.techGet_("autoplay",a)},b.prototype.loop=function(a){return void 0!==a?(this.techCall_("setLoop",a),this.options_.loop=a,this):this.techGet_("loop")},b.prototype.poster=function(a){return void 0===a?this.poster_:(a||(a=""),this.poster_=a,this.techCall_("setPoster",a),this.trigger("posterchange"),this)},b.prototype.handleTechPosterChange_=function(){!this.poster_&&this.tech_&&this.tech_.poster&&(this.poster_=this.tech_.poster()||"",this.trigger("posterchange"))},b.prototype.controls=function(a){return void 0!==a?(a=!!a,this.controls_!==a&&(this.controls_=a,this.usingNativeControls()&&this.techCall_("setControls",a),a?(this.removeClass("vjs-controls-disabled"),this.addClass("vjs-controls-enabled"),this.trigger("controlsenabled"),this.usingNativeControls()||this.addTechControlsListeners_()):(this.removeClass("vjs-controls-enabled"),this.addClass("vjs-controls-disabled"),this.trigger("controlsdisabled"),this.usingNativeControls()||this.removeTechControlsListeners_())),this):!!this.controls_},b.prototype.usingNativeControls=function(a){return void 0!==a?(a=!!a,this.usingNativeControls_!==a&&(this.usingNativeControls_=a,a?(this.addClass("vjs-using-native-controls"),this.trigger("usingnativecontrols")):(this.removeClass("vjs-using-native-controls"),this.trigger("usingcustomcontrols"))),this):!!this.usingNativeControls_},b.prototype.error=function(a){return void 0===a?this.error_||null:null===a?(this.error_=a,this.removeClass("vjs-error"),this.errorDisplay.close(),this):(this.error_=a instanceof H["default"]?a:new H["default"](a),this.addClass("vjs-error"),x["default"].error("(CODE:"+this.error_.code+" "+H["default"].errorTypes[this.error_.code]+")",this.error_.message,this.error_),this.trigger("error"),this)},b.prototype.ended=function(){return this.techGet_("ended")},b.prototype.seeking=function(){return this.techGet_("seeking")},b.prototype.seekable=function(){return this.techGet_("seekable")},b.prototype.reportUserActivity=function(){this.userActivity_=!0},b.prototype.userActive=function(a){return void 0!==a?(a=!!a,a!==this.userActive_&&(this.userActive_=a,a?(this.userActivity_=!0,this.removeClass("vjs-user-inactive"),this.addClass("vjs-user-active"),this.trigger("useractive")):(this.userActivity_=!1,this.tech_&&this.tech_.one("mousemove",function(a){a.stopPropagation(),a.preventDefault()}),this.removeClass("vjs-user-active"),this.addClass("vjs-user-inactive"),this.trigger("userinactive"))),this):this.userActive_},b.prototype.listenForUserActivity_=function(){var a=void 0,b=void 0,c=void 0,d=s.bind(this,this.reportUserActivity),e=function(a){(a.screenX!==b||a.screenY!==c)&&(b=a.screenX,c=a.screenY,d())},f=function(){d(),this.clearInterval(a),a=this.setInterval(d,250)},g=function(){d(),this.clearInterval(a)};this.on("mousedown",f),this.on("mousemove",e),this.on("mouseup",g),this.on("keydown",d),this.on("keyup",d);{var h=void 0;this.setInterval(function(){if(this.userActivity_){this.userActivity_=!1,this.userActive(!0),this.clearTimeout(h);var a=this.options_.inactivityTimeout;a>0&&(h=this.setTimeout(function(){this.userActivity_||this.userActive(!1)},a))}},250)}},b.prototype.playbackRate=function(a){return void 0!==a?(this.techCall_("setPlaybackRate",a),this):this.tech_&&this.tech_.featuresPlaybackRate?this.techGet_("playbackRate"):1},b.prototype.isAudio=function(a){
18
+ return void 0!==a?(this.isAudio_=!!a,this):!!this.isAudio_},b.prototype.networkState=function(){return this.techGet_("networkState")},b.prototype.readyState=function(){return this.techGet_("readyState")},b.prototype.textTracks=function(){return this.tech_&&this.tech_.textTracks()},b.prototype.remoteTextTracks=function(){return this.tech_&&this.tech_.remoteTextTracks()},b.prototype.remoteTextTrackEls=function(){return this.tech_&&this.tech_.remoteTextTrackEls()},b.prototype.addTextTrack=function(a,b,c){return this.tech_&&this.tech_.addTextTrack(a,b,c)},b.prototype.addRemoteTextTrack=function(a){return this.tech_&&this.tech_.addRemoteTextTrack(a)},b.prototype.removeRemoteTextTrack=function(a){this.tech_&&this.tech_.removeRemoteTextTrack(a)},b.prototype.videoWidth=function(){return this.tech_&&this.tech_.videoWidth&&this.tech_.videoWidth()||0},b.prototype.videoHeight=function(){return this.tech_&&this.tech_.videoHeight&&this.tech_.videoHeight()||0},b.prototype.language=function(a){return void 0===a?this.language_:(this.language_=(""+a).toLowerCase(),this)},b.prototype.languages=function(){return N["default"](b.prototype.options_.languages,this.languages_)},b.prototype.toJSON=function(){var a=N["default"](this.options_),b=a.tracks;a.tracks=[];for(var c=0;c<b.length;c++){var d=b[c];d=N["default"](d),d.player=void 0,a.tracks[c]=d}return a},b.prototype.createModal=function(a,b){var c=this;b=b||{},b.content=a||"";var d=new Z["default"](c,b);return c.addChild(d),d.on("dispose",function(){c.removeChild(d)}),d.open()},b.getTagSettings=function(a){var b={sources:[],tracks:[]},c=q.getElAttributes(a),d=c["data-setup"];if(null!==d){var e=J["default"](d||"{}"),f=e[0],g=e[1];f&&x["default"].error(f),L["default"](c,g)}if(L["default"](b,c),a.hasChildNodes())for(var h=a.childNodes,i=0,j=h.length;j>i;i++){var k=h[i],l=k.nodeName.toLowerCase();"source"===l?b.sources.push(q.getElAttributes(k)):"track"===l&&b.tracks.push(q.getElAttributes(k))}return b},b}(i["default"]));ba.players={};var ca=m["default"].navigator;ba.prototype.options_={techOrder:["html5","flash"],html5:{},flash:{},defaultVolume:0,inactivityTimeout:2e3,playbackRates:[],children:["mediaLoader","posterImage","textTrackDisplay","loadingSpinner","bigPlayButton","controlBar","errorDisplay","textTrackSettings"],language:k["default"].getElementsByTagName("html")[0].getAttribute("lang")||ca.languages&&ca.languages[0]||ca.userLanguage||ca.language||"en",languages:{},notSupportedMessage:"No compatible source was found for this video."},ba.prototype.handleLoadedMetaData_,ba.prototype.handleLoadedData_,ba.prototype.handleUserActive_,ba.prototype.handleUserInactive_,ba.prototype.handleTimeUpdate_,ba.prototype.handleTechEnded_,ba.prototype.handleVolumeChange_,ba.prototype.handleError_,ba.prototype.flexNotSupported_=function(){var a=k["default"].createElement("i");return!("flexBasis"in a.style||"webkitFlexBasis"in a.style||"mozFlexBasis"in a.style||"msFlexBasis"in a.style||"msFlexOrder"in a.style)},i["default"].registerComponent("Player",ba),c["default"]=ba,b.exports=c["default"]},{"./big-play-button.js":62,"./component.js":65,"./control-bar/control-bar.js":66,"./error-display.js":96,"./fullscreen-api.js":99,"./loading-spinner.js":100,"./media-error.js":101,"./modal-dialog":105,"./poster-image.js":108,"./tech/html5.js":113,"./tech/loader.js":114,"./tech/tech.js":115,"./tracks/text-track-display.js":119,"./tracks/text-track-list-converter.js":121,"./tracks/text-track-settings.js":123,"./utils/browser.js":125,"./utils/buffer.js":126,"./utils/dom.js":128,"./utils/events.js":129,"./utils/fn.js":130,"./utils/guid.js":132,"./utils/log.js":133,"./utils/merge-options.js":134,"./utils/stylesheet.js":135,"./utils/time-ranges.js":136,"./utils/to-title-case.js":137,"global/document":1,"global/window":2,"object.assign":45,"safe-json-parse/tuple":53}],107:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./player.js"),f=d(e),g=function(a,b){f["default"].prototype[a]=b};c["default"]=g,b.exports=c["default"]},{"./player.js":106}],108:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./button.js"),i=e(h),j=a("./component.js"),k=e(j),l=a("./utils/fn.js"),m=d(l),n=a("./utils/dom.js"),o=d(n),p=a("./utils/browser.js"),q=d(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.update(),c.on("posterchange",m.bind(this,this.update))}return g(b,a),b.prototype.dispose=function(){this.player().off("posterchange",this.update),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var a=o.createEl("div",{className:"vjs-poster",tabIndex:-1});return q.BACKGROUND_SIZE_SUPPORTED||(this.fallbackImg_=o.createEl("img"),a.appendChild(this.fallbackImg_)),a},b.prototype.update=function(){var a=this.player().poster();this.setSrc(a),a?this.show():this.hide()},b.prototype.setSrc=function(a){if(this.fallbackImg_)this.fallbackImg_.src=a;else{var b="";a&&(b='url("'+a+'")'),this.el_.style.backgroundImage=b}},b.prototype.handleClick=function(){this.player_.paused()?this.player_.play():this.player_.pause()},b}(i["default"]);k["default"].registerComponent("PosterImage",r),c["default"]=r,b.exports=c["default"]},{"./button.js":63,"./component.js":65,"./utils/browser.js":125,"./utils/dom.js":128,"./utils/fn.js":130}],109:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}c.__esModule=!0;var f=a("./utils/events.js"),g=e(f),h=a("global/document"),i=d(h),j=a("global/window"),k=d(j),l=!1,m=void 0,n=function(){var a=i["default"].getElementsByTagName("video"),b=i["default"].getElementsByTagName("audio"),c=[];if(a&&a.length>0)for(var d=0,e=a.length;e>d;d++)c.push(a[d]);if(b&&b.length>0)for(var d=0,e=b.length;e>d;d++)c.push(b[d]);if(c&&c.length>0)for(var d=0,e=c.length;e>d;d++){var f=c[d];if(!f||!f.getAttribute){o(1);break}if(void 0===f.player){var g=f.getAttribute("data-setup");if(null!==g){m(f)}}}else l||o(1)},o=function(a,b){m=b,setTimeout(n,a)};"complete"===i["default"].readyState?l=!0:g.one(k["default"],"load",function(){l=!0});var p=function(){return l};c.autoSetup=n,c.autoSetupTimeout=o,c.hasLoaded=p},{"./utils/events.js":129,"global/document":1,"global/window":2}],110:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../component.js"),i=e(h),j=a("../utils/dom.js"),k=d(j),l=a("global/document"),m=e(l),n=a("object.assign"),o=e(n),p=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.bar=this.getChild(this.options_.barName),this.vertical(!!this.options_.vertical),this.on("mousedown",this.handleMouseDown),this.on("touchstart",this.handleMouseDown),this.on("focus",this.handleFocus),this.on("blur",this.handleBlur),this.on("click",this.handleClick),this.on(c,"controlsvisible",this.update),this.on(c,this.playerEvent,this.update)}return g(b,a),b.prototype.createEl=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];return c.className=c.className+" vjs-slider",c=o["default"]({tabIndex:0},c),d=o["default"]({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},d),a.prototype.createEl.call(this,b,c,d)},b.prototype.handleMouseDown=function(a){a.preventDefault(),k.blockTextSelection(),this.addClass("vjs-sliding"),this.trigger("slideractive"),this.on(m["default"],"mousemove",this.handleMouseMove),this.on(m["default"],"mouseup",this.handleMouseUp),this.on(m["default"],"touchmove",this.handleMouseMove),this.on(m["default"],"touchend",this.handleMouseUp),this.handleMouseMove(a)},b.prototype.handleMouseMove=function(){},b.prototype.handleMouseUp=function(){k.unblockTextSelection(),this.removeClass("vjs-sliding"),this.trigger("sliderinactive"),this.off(m["default"],"mousemove",this.handleMouseMove),this.off(m["default"],"mouseup",this.handleMouseUp),this.off(m["default"],"touchmove",this.handleMouseMove),this.off(m["default"],"touchend",this.handleMouseUp),this.update()},b.prototype.update=function(){if(this.el_){var a=this.getPercent(),b=this.bar;if(b){("number"!=typeof a||a!==a||0>a||a===1/0)&&(a=0);var c=(100*a).toFixed(2)+"%";this.vertical()?b.el().style.height=c:b.el().style.width=c}}},b.prototype.calculateDistance=function(a){var b=k.getPointerPosition(this.el_,a);return this.vertical()?b.y:b.x},b.prototype.handleFocus=function(){this.on(m["default"],"keydown",this.handleKeyPress)},b.prototype.handleKeyPress=function(a){37===a.which||40===a.which?(a.preventDefault(),this.stepBack()):(38===a.which||39===a.which)&&(a.preventDefault(),this.stepForward())},b.prototype.handleBlur=function(){this.off(m["default"],"keydown",this.handleKeyPress)},b.prototype.handleClick=function(a){a.stopImmediatePropagation(),a.preventDefault()},b.prototype.vertical=function(a){return void 0===a?this.vertical_||!1:(this.vertical_=!!a,this.addClass(this.vertical_?"vjs-slider-vertical":"vjs-slider-horizontal"),this)},b}(i["default"]);i["default"].registerComponent("Slider",p),c["default"]=p,b.exports=c["default"]},{"../component.js":65,"../utils/dom.js":128,"global/document":1,"object.assign":45}],111:[function(a,b,c){"use strict";function d(a){return a.streamingFormats={"rtmp/mp4":"MP4","rtmp/flv":"FLV"},a.streamFromParts=function(a,b){return a+"&"+b},a.streamToParts=function(a){var b={connection:"",stream:""};if(!a)return b;var c=a.search(/&(?!\w+=)/),d=void 0;return-1!==c?d=c+1:(c=d=a.lastIndexOf("/")+1,0===c&&(c=d=a.length)),b.connection=a.substring(0,c),b.stream=a.substring(d,a.length),b},a.isStreamingType=function(b){return b in a.streamingFormats},a.RTMP_RE=/^rtmp[set]?:\/\//i,a.isStreamingSrc=function(b){return a.RTMP_RE.test(b)},a.rtmpSourceHandler={},a.rtmpSourceHandler.canPlayType=function(b){return a.isStreamingType(b)?"maybe":""},a.rtmpSourceHandler.canHandleSource=function(b){var c=a.rtmpSourceHandler.canPlayType(b.type);return c?c:a.isStreamingSrc(b.src)?"maybe":""},a.rtmpSourceHandler.handleSource=function(b,c){var d=a.streamToParts(b.src);c.setRtmpConnection(d.connection),c.setRtmpStream(d.stream)},a.registerSourceHandler(a.rtmpSourceHandler),a}c.__esModule=!0,c["default"]=d,b.exports=c["default"]},{}],112:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function h(a){var b=a.charAt(0).toUpperCase()+a.slice(1);A["set"+b]=function(b){return this.el_.vjs_setProperty(a,b)}}function i(a){A[a]=function(){return this.el_.vjs_getProperty(a)}}c.__esModule=!0;for(var j=a("./tech"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=a("../utils/url.js"),o=d(n),p=a("../utils/time-ranges.js"),q=a("./flash-rtmp"),r=e(q),s=a("../component"),t=e(s),u=a("global/window"),v=e(u),w=a("object.assign"),x=e(w),y=v["default"].navigator,z=function(a){function b(c,d){f(this,b),a.call(this,c,d),c.source&&this.ready(function(){this.setSource(c.source)},!0),c.startTime&&this.ready(function(){this.load(),this.play(),this.currentTime(c.startTime)},!0),v["default"].videojs=v["default"].videojs||{},v["default"].videojs.Flash=v["default"].videojs.Flash||{},v["default"].videojs.Flash.onReady=b.onReady,v["default"].videojs.Flash.onEvent=b.onEvent,v["default"].videojs.Flash.onError=b.onError,this.on("seeked",function(){this.lastSeekTarget_=void 0})}return g(b,a),b.prototype.createEl=function(){var a=this.options_;a.swf||(a.swf="//vjs.zencdn.net/swf/5.0.1/video-js.swf");var c=a.techId,d=x["default"]({readyFunction:"videojs.Flash.onReady",eventProxyFunction:"videojs.Flash.onEvent",errorEventProxyFunction:"videojs.Flash.onError",autoplay:a.autoplay,preload:a.preload,loop:a.loop,muted:a.muted},a.flashVars),e=x["default"]({wmode:"opaque",bgcolor:"#000000"},a.params),f=x["default"]({id:c,name:c,"class":"vjs-tech"},a.attributes);return this.el_=b.embed(a.swf,d,e,f),this.el_.tech=this,this.el_},b.prototype.play=function(){this.ended()&&this.setCurrentTime(0),this.el_.vjs_play()},b.prototype.pause=function(){this.el_.vjs_pause()},b.prototype.src=function(a){return void 0===a?this.currentSrc():this.setSrc(a)},b.prototype.setSrc=function(a){if(a=o.getAbsoluteURL(a),this.el_.vjs_src(a),this.autoplay()){var b=this;this.setTimeout(function(){b.play()},0)}},b.prototype.seeking=function(){return void 0!==this.lastSeekTarget_},b.prototype.setCurrentTime=function(b){var c=this.seekable();c.length&&(b=b>c.start(0)?b:c.start(0),b=b<c.end(c.length-1)?b:c.end(c.length-1),this.lastSeekTarget_=b,this.trigger("seeking"),this.el_.vjs_setProperty("currentTime",b),a.prototype.setCurrentTime.call(this))},b.prototype.currentTime=function(){return this.seeking()?this.lastSeekTarget_||0:this.el_.vjs_getProperty("currentTime")},b.prototype.currentSrc=function(){return this.currentSource_?this.currentSource_.src:this.el_.vjs_getProperty("currentSrc")},b.prototype.load=function(){this.el_.vjs_load()},b.prototype.poster=function(){this.el_.vjs_getProperty("poster")},b.prototype.setPoster=function(){},b.prototype.seekable=function(){var a=this.duration();return 0===a?p.createTimeRange():p.createTimeRange(0,a)},b.prototype.buffered=function(){var a=this.el_.vjs_getProperty("buffered");return 0===a.length?p.createTimeRange():p.createTimeRange(a[0][0],a[0][1])},b.prototype.supportsFullScreen=function(){return!1},b.prototype.enterFullScreen=function(){return!1},b}(k["default"]),A=z.prototype,B="rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted".split(","),C="networkState,readyState,initialTime,duration,startOffsetTime,paused,ended,videoTracks,audioTracks,videoWidth,videoHeight".split(","),D=0;D<B.length;D++)i(B[D]),h(B[D]);for(var D=0;D<C.length;D++)i(C[D]);z.isSupported=function(){return z.version()[0]>=10},k["default"].withSourceHandlers(z),z.nativeSourceHandler={},z.nativeSourceHandler.canPlayType=function(a){return a in z.formats?"maybe":""},z.nativeSourceHandler.canHandleSource=function(a){function b(a){var b=o.getFileExtension(a);return b?"video/"+b:""}var c;return c=a.type?a.type.replace(/;.*/,"").toLowerCase():b(a.src),z.nativeSourceHandler.canPlayType(c)},z.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},z.nativeSourceHandler.dispose=function(){},z.registerSourceHandler(z.nativeSourceHandler),z.formats={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"},z.onReady=function(a){var b=m.getEl(a),c=b&&b.tech;c&&c.el()&&z.checkReady(c)},z.checkReady=function(a){a.el()&&(a.el().vjs_getProperty?a.triggerReady():this.setTimeout(function(){z.checkReady(a)},50))},z.onEvent=function(a,b){var c=m.getEl(a).tech;c.trigger(b)},z.onError=function(a,b){var c=m.getEl(a).tech;return"srcnotfound"===b?c.error(4):void c.error("FLASH: "+b)},z.version=function(){var a="0,0,0";try{a=new v["default"].ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(b){try{y.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(y.plugins["Shockwave Flash 2.0"]||y.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(c){}}return a.split(",")},z.embed=function(a,b,c,d){var e=z.getEmbedCode(a,b,c,d),f=m.createEl("div",{innerHTML:e}).childNodes[0];return f},z.getEmbedCode=function(a,b,c,d){var e='<object type="application/x-shockwave-flash" ',f="",g="",h="";return b&&Object.getOwnPropertyNames(b).forEach(function(a){f+=a+"="+b[a]+"&amp;"}),c=x["default"]({movie:a,flashvars:f,allowScriptAccess:"always",allowNetworking:"all"},c),Object.getOwnPropertyNames(c).forEach(function(a){g+='<param name="'+a+'" value="'+c[a]+'" />'}),d=x["default"]({data:a,width:"100%",height:"100%"},d),Object.getOwnPropertyNames(d).forEach(function(a){h+=a+'="'+d[a]+'" '}),""+e+h+">"+g+"</object>"},r["default"](z),t["default"].registerComponent("Flash",z),k["default"].registerTech("Flash",z),c["default"]=z,b.exports=c["default"]},{"../component":65,"../utils/dom.js":128,"../utils/time-ranges.js":136,"../utils/url.js":138,"./flash-rtmp":111,"./tech":115,"global/window":2,"object.assign":45}],113:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./tech.js"),i=e(h),j=a("../component"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=a("../utils/url.js"),o=d(n),p=a("../utils/fn.js"),q=d(p),r=a("../utils/log.js"),s=e(r),t=a("../utils/browser.js"),u=d(t),v=a("global/document"),w=e(v),x=a("global/window"),y=e(x),z=a("object.assign"),A=e(z),B=a("../utils/merge-options.js"),C=e(B),D=function(a){function b(c,d){f(this,b),a.call(this,c,d);var e=c.source;if(e&&(this.el_.currentSrc!==e.src||c.tag&&3===c.tag.initNetworkState_)?this.setSource(e):this.handleLateInit_(this.el_),this.el_.hasChildNodes()){for(var g=this.el_.childNodes,h=g.length,i=[];h--;){var j=g[h],k=j.nodeName.toLowerCase();"track"===k&&(this.featuresNativeTextTracks?(this.remoteTextTrackEls().addTrackElement_(j),this.remoteTextTracks().addTrack_(j.track)):i.push(j))}for(var l=0;l<i.length;l++)this.el_.removeChild(i[l])}this.featuresNativeTextTracks&&(this.handleTextTrackChange_=q.bind(this,this.handleTextTrackChange),this.handleTextTrackAdd_=q.bind(this,this.handleTextTrackAdd),this.handleTextTrackRemove_=q.bind(this,this.handleTextTrackRemove),this.proxyNativeTextTracks_()),(u.TOUCH_ENABLED&&c.nativeControlsForTouch===!0||u.IS_IPHONE||u.IS_NATIVE_ANDROID)&&this.setControls(!0),this.triggerReady()}return g(b,a),b.prototype.dispose=function(){var c=this.el().textTracks,d=this.textTracks();c&&c.removeEventListener&&(c.removeEventListener("change",this.handleTextTrackChange_),c.removeEventListener("addtrack",this.handleTextTrackAdd_),c.removeEventListener("removetrack",this.handleTextTrackRemove_));for(var e=d.length;e--;)d.removeTrack_(d[e]);b.disposeMediaElement(this.el_),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var a=this.options_.tag;if(!a||this.movingMediaElementInDOM===!1)if(a){var c=a.cloneNode(!0);a.parentNode.insertBefore(c,a),b.disposeMediaElement(a),a=c}else{a=w["default"].createElement("video");var d=this.options_.tag&&m.getElAttributes(this.options_.tag),e=C["default"]({},d);u.TOUCH_ENABLED&&this.options_.nativeControlsForTouch===!0||delete e.controls,m.setElAttributes(a,A["default"](e,{id:this.options_.techId,"class":"vjs-tech"}))}for(var f=["autoplay","preload","loop","muted"],g=f.length-1;g>=0;g--){var h=f[g],i={};"undefined"!=typeof this.options_[h]&&(i[h]=this.options_[h]),m.setElAttributes(a,i)}return a},b.prototype.handleLateInit_=function(a){var b=this;if(0!==a.networkState&&3!==a.networkState){if(0===a.readyState){var c=function(){var a=!1,c=function(){a=!0};b.on("loadstart",c);var d=function(){a||this.trigger("loadstart")};return b.on("loadedmetadata",d),b.ready(function(){this.off("loadstart",c),this.off("loadedmetadata",d),a||this.trigger("loadstart")}),{v:void 0}}();if("object"==typeof c)return c.v}var d=["loadstart"];d.push("loadedmetadata"),a.readyState>=2&&d.push("loadeddata"),a.readyState>=3&&d.push("canplay"),a.readyState>=4&&d.push("canplaythrough"),this.ready(function(){d.forEach(function(a){this.trigger(a)},this)})}},b.prototype.proxyNativeTextTracks_=function(){var a=this.el().textTracks;a&&a.addEventListener&&(a.addEventListener("change",this.handleTextTrackChange_),a.addEventListener("addtrack",this.handleTextTrackAdd_),a.addEventListener("removetrack",this.handleTextTrackRemove_))},b.prototype.handleTextTrackChange=function(){var a=this.textTracks();this.textTracks().trigger({type:"change",target:a,currentTarget:a,srcElement:a})},b.prototype.handleTextTrackAdd=function(a){this.textTracks().addTrack_(a.track)},b.prototype.handleTextTrackRemove=function(a){this.textTracks().removeTrack_(a.track)},b.prototype.play=function(){this.el_.play()},b.prototype.pause=function(){this.el_.pause()},b.prototype.paused=function(){return this.el_.paused},b.prototype.currentTime=function(){return this.el_.currentTime},b.prototype.setCurrentTime=function(a){try{this.el_.currentTime=a}catch(b){s["default"](b,"Video is not ready. (Video.js)")}},b.prototype.duration=function(){return this.el_.duration||0},b.prototype.buffered=function(){return this.el_.buffered},b.prototype.volume=function(){return this.el_.volume},b.prototype.setVolume=function(a){this.el_.volume=a},b.prototype.muted=function(){return this.el_.muted},b.prototype.setMuted=function(a){this.el_.muted=a},b.prototype.width=function(){return this.el_.offsetWidth},b.prototype.height=function(){return this.el_.offsetHeight},b.prototype.supportsFullScreen=function(){if("function"==typeof this.el_.webkitEnterFullScreen){var a=y["default"].navigator.userAgent;if(/Android/.test(a)||!/Chrome|Mac OS X 10.5/.test(a))return!0}return!1},b.prototype.enterFullScreen=function(){var a=this.el_;"webkitDisplayingFullscreen"in a&&this.one("webkitbeginfullscreen",function(){this.one("webkitendfullscreen",function(){this.trigger("fullscreenchange",{isFullscreen:!1})}),this.trigger("fullscreenchange",{isFullscreen:!0})}),a.paused&&a.networkState<=a.HAVE_METADATA?(this.el_.play(),this.setTimeout(function(){a.pause(),a.webkitEnterFullScreen()},0)):a.webkitEnterFullScreen()},b.prototype.exitFullScreen=function(){this.el_.webkitExitFullScreen()},b.prototype.src=function(a){return void 0===a?this.el_.src:void this.setSrc(a)},b.prototype.setSrc=function(a){this.el_.src=a},b.prototype.load=function(){this.el_.load()},b.prototype.reset=function(){b.resetMediaElement(this.el_)},b.prototype.currentSrc=function(){return this.currentSource_?this.currentSource_.src:this.el_.currentSrc},b.prototype.poster=function(){return this.el_.poster},b.prototype.setPoster=function(a){this.el_.poster=a},b.prototype.preload=function(){return this.el_.preload},b.prototype.setPreload=function(a){this.el_.preload=a},b.prototype.autoplay=function(){return this.el_.autoplay},b.prototype.setAutoplay=function(a){this.el_.autoplay=a},b.prototype.controls=function(){return this.el_.controls},b.prototype.setControls=function(a){this.el_.controls=!!a},b.prototype.loop=function(){return this.el_.loop},b.prototype.setLoop=function(a){this.el_.loop=a},b.prototype.error=function(){return this.el_.error},b.prototype.seeking=function(){return this.el_.seeking},b.prototype.seekable=function(){return this.el_.seekable},b.prototype.ended=function(){return this.el_.ended},b.prototype.defaultMuted=function(){return this.el_.defaultMuted},b.prototype.playbackRate=function(){return this.el_.playbackRate},b.prototype.played=function(){return this.el_.played},b.prototype.setPlaybackRate=function(a){this.el_.playbackRate=a},b.prototype.networkState=function(){return this.el_.networkState},b.prototype.readyState=function(){return this.el_.readyState},b.prototype.videoWidth=function(){return this.el_.videoWidth},b.prototype.videoHeight=function(){return this.el_.videoHeight},b.prototype.textTracks=function(){return a.prototype.textTracks.call(this)},b.prototype.addTextTrack=function(b,c,d){return this.featuresNativeTextTracks?this.el_.addTextTrack(b,c,d):a.prototype.addTextTrack.call(this,b,c,d)},b.prototype.addRemoteTextTrack=function(){var b=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];if(!this.featuresNativeTextTracks)return a.prototype.addRemoteTextTrack.call(this,b);var c=w["default"].createElement("track");return b.kind&&(c.kind=b.kind),b.label&&(c.label=b.label),(b.language||b.srclang)&&(c.srclang=b.language||b.srclang),b["default"]&&(c["default"]=b["default"]),b.id&&(c.id=b.id),b.src&&(c.src=b.src),this.el().appendChild(c),this.remoteTextTrackEls().addTrackElement_(c),this.remoteTextTracks().addTrack_(c.track),c},b.prototype.removeRemoteTextTrack=function(b){if(!this.featuresNativeTextTracks)return a.prototype.removeRemoteTextTrack.call(this,b);var c=void 0,d=void 0,e=this.remoteTextTrackEls().getTrackElementByTrack_(b);for(this.remoteTextTrackEls().removeTrackElement_(e),this.remoteTextTracks().removeTrack_(b),c=this.$$("track"),d=c.length;d--;)(b===c[d]||b===c[d].track)&&this.el().removeChild(c[d])},b}(i["default"]);D.TEST_VID=w["default"].createElement("video");var E=w["default"].createElement("track");E.kind="captions",E.srclang="en",E.label="English",D.TEST_VID.appendChild(E),D.isSupported=function(){try{D.TEST_VID.volume=.5}catch(a){return!1}return!!D.TEST_VID.canPlayType},i["default"].withSourceHandlers(D),D.nativeSourceHandler={},D.nativeSourceHandler.canPlayType=function(a){try{return D.TEST_VID.canPlayType(a)}catch(b){return""}},D.nativeSourceHandler.canHandleSource=function(a){var b;return a.type?D.nativeSourceHandler.canPlayType(a.type):a.src?(b=o.getFileExtension(a.src),D.nativeSourceHandler.canPlayType("video/"+b)):""},D.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},D.nativeSourceHandler.dispose=function(){},D.registerSourceHandler(D.nativeSourceHandler),D.canControlVolume=function(){var a=D.TEST_VID.volume;return D.TEST_VID.volume=a/2+.1,a!==D.TEST_VID.volume},D.canControlPlaybackRate=function(){var a=D.TEST_VID.playbackRate;return D.TEST_VID.playbackRate=a/2+.1,a!==D.TEST_VID.playbackRate},D.supportsNativeTextTracks=function(){var a;return a=!!D.TEST_VID.textTracks,a&&D.TEST_VID.textTracks.length>0&&(a="number"!=typeof D.TEST_VID.textTracks[0].mode),a&&u.IS_FIREFOX&&(a=!1),!a||"onremovetrack"in D.TEST_VID.textTracks||(a=!1),a},D.Events=["loadstart","suspend","abort","error","emptied","stalled","loadedmetadata","loadeddata","canplay","canplaythrough","playing","waiting","seeking","seeked","ended","durationchange","timeupdate","progress","play","pause","ratechange","volumechange"],D.prototype.featuresVolumeControl=D.canControlVolume(),D.prototype.featuresPlaybackRate=D.canControlPlaybackRate(),D.prototype.movingMediaElementInDOM=!u.IS_IOS,D.prototype.featuresFullscreenResize=!0,D.prototype.featuresProgressEvents=!0,D.prototype.featuresNativeTextTracks=D.supportsNativeTextTracks();var F=void 0,G=/^application\/(?:x-|vnd\.apple\.)mpegurl/i,H=/^video\/mp4/i;D.patchCanPlayType=function(){u.ANDROID_VERSION>=4&&(F||(F=D.TEST_VID.constructor.prototype.canPlayType),D.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&G.test(a)?"maybe":F.call(this,a)}),u.IS_OLD_ANDROID&&(F||(F=D.TEST_VID.constructor.prototype.canPlayType),D.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&H.test(a)?"maybe":F.call(this,a)})},D.unpatchCanPlayType=function(){var a=D.TEST_VID.constructor.prototype.canPlayType;return D.TEST_VID.constructor.prototype.canPlayType=F,F=null,a},D.patchCanPlayType(),D.disposeMediaElement=function(a){if(a){for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute("src"),"function"==typeof a.load&&!function(){try{a.load()}catch(b){}}()}},D.resetMediaElement=function(a){if(a){for(var b=a.querySelectorAll("source"),c=b.length;c--;)a.removeChild(b[c]);a.removeAttribute("src"),"function"==typeof a.load&&!function(){try{a.load()}catch(b){}}()}},k["default"].registerComponent("Html5",D),i["default"].registerTech("Html5",D),c["default"]=D,b.exports=c["default"]},{"../component":65,"../utils/browser.js":125,"../utils/dom.js":128,"../utils/fn.js":130,"../utils/log.js":133,"../utils/merge-options.js":134,"../utils/url.js":138,"./tech.js":115,"global/document":1,"global/window":2,"object.assign":45}],114:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var g=a("../component.js"),h=d(g),i=a("./tech.js"),j=d(i),k=a("global/window"),l=(d(k),a("../utils/to-title-case.js")),m=d(l),n=function(a){function b(c,d,f){if(e(this,b),a.call(this,c,d,f),d.playerOptions.sources&&0!==d.playerOptions.sources.length)c.src(d.playerOptions.sources);else for(var g=0,i=d.playerOptions.techOrder;g<i.length;g++){var k=m["default"](i[g]),l=j["default"].getTech(k);if(k||(l=h["default"].getComponent(k)),l&&l.isSupported()){c.loadTech_(k);break}}}return f(b,a),b}(h["default"]);h["default"].registerComponent("MediaLoader",n),c["default"]=n,b.exports=c["default"]},{"../component.js":65,"../utils/to-title-case.js":137,"./tech.js":115,"global/window":2}],115:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../component"),i=e(h),j=a("../tracks/html-track-element"),k=e(j),l=a("../tracks/html-track-element-list"),m=e(l),n=a("../utils/merge-options.js"),o=e(n),p=a("../tracks/text-track"),q=e(p),r=a("../tracks/text-track-list"),s=e(r),t=a("../utils/fn.js"),u=d(t),v=a("../utils/log.js"),w=e(v),x=a("../utils/time-ranges.js"),y=a("../utils/buffer.js"),z=a("../media-error.js"),A=e(z),B=a("global/window"),C=e(B),D=a("global/document"),E=e(D),F=function(a){function b(){var c=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],d=arguments.length<=1||void 0===arguments[1]?function(){}:arguments[1];
19
+
20
+ f(this,b),c.reportTouchActivity=!1,a.call(this,null,c,d),this.hasStarted_=!1,this.on("playing",function(){this.hasStarted_=!0}),this.on("loadstart",function(){this.hasStarted_=!1}),this.textTracks_=c.textTracks,this.featuresProgressEvents||this.manualProgressOn(),this.featuresTimeupdateEvents||this.manualTimeUpdatesOn(),(c.nativeCaptions===!1||c.nativeTextTracks===!1)&&(this.featuresNativeTextTracks=!1),this.featuresNativeTextTracks||this.on("ready",this.emulateTextTracks),this.initTextTrackListeners(),this.emitTapEvents()}/*! Time Tracking -------------------------------------------------------------- */
21
+ return g(b,a),b.prototype.manualProgressOn=function(){this.on("durationchange",this.onDurationChange),this.manualProgress=!0,this.one("ready",this.trackProgress)},b.prototype.manualProgressOff=function(){this.manualProgress=!1,this.stopTrackingProgress(),this.off("durationchange",this.onDurationChange)},b.prototype.trackProgress=function(){this.stopTrackingProgress(),this.progressInterval=this.setInterval(u.bind(this,function(){var a=this.bufferedPercent();this.bufferedPercent_!==a&&this.trigger("progress"),this.bufferedPercent_=a,1===a&&this.stopTrackingProgress()}),500)},b.prototype.onDurationChange=function(){this.duration_=this.duration()},b.prototype.buffered=function(){return x.createTimeRange(0,0)},b.prototype.bufferedPercent=function(){return y.bufferedPercent(this.buffered(),this.duration_)},b.prototype.stopTrackingProgress=function(){this.clearInterval(this.progressInterval)},b.prototype.manualTimeUpdatesOn=function(){this.manualTimeUpdates=!0,this.on("play",this.trackCurrentTime),this.on("pause",this.stopTrackingCurrentTime)},b.prototype.manualTimeUpdatesOff=function(){this.manualTimeUpdates=!1,this.stopTrackingCurrentTime(),this.off("play",this.trackCurrentTime),this.off("pause",this.stopTrackingCurrentTime)},b.prototype.trackCurrentTime=function(){this.currentTimeInterval&&this.stopTrackingCurrentTime(),this.currentTimeInterval=this.setInterval(function(){this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},250)},b.prototype.stopTrackingCurrentTime=function(){this.clearInterval(this.currentTimeInterval),this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},b.prototype.dispose=function(){var b=this.textTracks();if(b)for(var c=b.length;c--;)this.removeRemoteTextTrack(b[c]);this.manualProgress&&this.manualProgressOff(),this.manualTimeUpdates&&this.manualTimeUpdatesOff(),a.prototype.dispose.call(this)},b.prototype.reset=function(){},b.prototype.error=function(a){return void 0!==a&&(this.error_=a instanceof A["default"]?a:new A["default"](a),this.trigger("error")),this.error_},b.prototype.played=function(){return this.hasStarted_?x.createTimeRange(0,0):x.createTimeRange()},b.prototype.setCurrentTime=function(){this.manualTimeUpdates&&this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},b.prototype.initTextTrackListeners=function(){var a=u.bind(this,function(){this.trigger("texttrackchange")}),b=this.textTracks();b&&(b.addEventListener("removetrack",a),b.addEventListener("addtrack",a),this.on("dispose",u.bind(this,function(){b.removeEventListener("removetrack",a),b.removeEventListener("addtrack",a)})))},b.prototype.emulateTextTracks=function(){var a=this,b=this.textTracks();if(b){if(!C["default"].WebVTT&&null!=this.el().parentNode){var c=E["default"].createElement("script");c.src=this.options_["vtt.js"]||"https://cdn.rawgit.com/gkatsev/vtt.js/vjs-v0.12.1/dist/vtt.min.js",this.el().parentNode.appendChild(c),C["default"].WebVTT=!0}var d=function(){return a.trigger("texttrackchange")},e=function(){d();for(var a=0;a<b.length;a++){var c=b[a];c.removeEventListener("cuechange",d),"showing"===c.mode&&c.addEventListener("cuechange",d)}};e(),b.addEventListener("change",e),this.on("dispose",function(){b.removeEventListener("change",e)})}},b.prototype.textTracks=function(){return this.textTracks_=this.textTracks_||new s["default"],this.textTracks_},b.prototype.remoteTextTracks=function(){return this.remoteTextTracks_=this.remoteTextTracks_||new s["default"],this.remoteTextTracks_},b.prototype.remoteTextTrackEls=function(){return this.remoteTextTrackEls_=this.remoteTextTrackEls_||new m["default"],this.remoteTextTrackEls_},b.prototype.addTextTrack=function(a,b,c){if(!a)throw new Error("TextTrack kind is required but was not provided");return G(this,a,b,c)},b.prototype.addRemoteTextTrack=function(a){var b=o["default"](a,{tech:this}),c=new k["default"](b);return this.remoteTextTrackEls().addTrackElement_(c),this.remoteTextTracks().addTrack_(c.track),this.textTracks().addTrack_(c.track),c},b.prototype.removeRemoteTextTrack=function(a){this.textTracks().removeTrack_(a);var b=this.remoteTextTrackEls().getTrackElementByTrack_(a);this.remoteTextTrackEls().removeTrackElement_(b),this.remoteTextTracks().removeTrack_(a)},b.prototype.setPoster=function(){},b.prototype.canPlayType=function(){return""},b.isTech=function(a){return a.prototype instanceof b||a instanceof b||a===b},b.registerTech=function(a,c){if(b.techs_||(b.techs_={}),!b.isTech(c))throw new Error("Tech "+a+" must be a Tech");return b.techs_[a]=c,c},b.getTech=function(a){return b.techs_&&b.techs_[a]?b.techs_[a]:C["default"]&&C["default"].videojs&&C["default"].videojs[a]?(w["default"].warn("The "+a+" tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)"),C["default"].videojs[a]):void 0},b}(i["default"]);F.prototype.textTracks_;var G=function(a,b,c,d){var e=arguments.length<=4||void 0===arguments[4]?{}:arguments[4],f=a.textTracks();e.kind=b,c&&(e.label=c),d&&(e.language=d),e.tech=a;var g=new q["default"](e);return f.addTrack_(g),g};F.prototype.featuresVolumeControl=!0,F.prototype.featuresFullscreenResize=!1,F.prototype.featuresPlaybackRate=!1,F.prototype.featuresProgressEvents=!1,F.prototype.featuresTimeupdateEvents=!1,F.prototype.featuresNativeTextTracks=!1,F.withSourceHandlers=function(a){a.registerSourceHandler=function(b,c){var d=a.sourceHandlers;d||(d=a.sourceHandlers=[]),void 0===c&&(c=d.length),d.splice(c,0,b)},a.canPlayType=function(b){for(var c=a.sourceHandlers||[],d=void 0,e=0;e<c.length;e++)if(d=c[e].canPlayType(b))return d;return""},a.selectSourceHandler=function(b){for(var c=a.sourceHandlers||[],d=void 0,e=0;e<c.length;e++)if(d=c[e].canHandleSource(b))return c[e];return null},a.canPlaySource=function(b){var c=a.selectSourceHandler(b);return c?c.canHandleSource(b):""};var b=["seekable","duration"];b.forEach(function(a){var b=this[a];"function"==typeof b&&(this[a]=function(){return this.sourceHandler_&&this.sourceHandler_[a]?this.sourceHandler_[a].apply(this.sourceHandler_,arguments):b.apply(this,arguments)})},a.prototype),a.prototype.setSource=function(b){var c=a.selectSourceHandler(b);return c||(a.nativeSourceHandler?c=a.nativeSourceHandler:w["default"].error("No source hander found for the current source.")),this.disposeSourceHandler(),this.off("dispose",this.disposeSourceHandler),this.currentSource_=b,this.sourceHandler_=c.handleSource(b,this),this.on("dispose",this.disposeSourceHandler),this},a.prototype.disposeSourceHandler=function(){this.sourceHandler_&&this.sourceHandler_.dispose&&this.sourceHandler_.dispose()}},i["default"].registerComponent("Tech",F),i["default"].registerComponent("MediaTechController",F),F.registerTech("Tech",F),c["default"]=F,b.exports=c["default"]},{"../component":65,"../media-error.js":101,"../tracks/html-track-element":117,"../tracks/html-track-element-list":116,"../tracks/text-track":124,"../tracks/text-track-list":122,"../utils/buffer.js":126,"../utils/fn.js":130,"../utils/log.js":133,"../utils/merge-options.js":134,"../utils/time-ranges.js":136,"global/document":1,"global/window":2}],116:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}c.__esModule=!0;var g=a("../utils/browser.js"),h=e(g),i=a("global/document"),j=d(i),k=function(){function a(){var b=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];f(this,a);var c=this;if(h.IS_IE8){c=j["default"].createElement("custom");for(var d in a.prototype)"constructor"!==d&&(c[d]=a.prototype[d])}c.trackElements_=[],Object.defineProperty(c,"length",{get:function(){return this.trackElements_.length}});for(var e=0,g=b.length;g>e;e++)c.addTrackElement_(b[e]);return h.IS_IE8?c:void 0}return a.prototype.addTrackElement_=function(a){this.trackElements_.push(a)},a.prototype.getTrackElementByTrack_=function(a){for(var b=void 0,c=0,d=this.trackElements_.length;d>c;c++)if(a===this.trackElements_[c].track){b=this.trackElements_[c];break}return b},a.prototype.removeTrackElement_=function(a){for(var b=0,c=this.trackElements_.length;c>b;b++)if(a===this.trackElements_[b]){this.trackElements_.splice(b,1);break}},a}();c["default"]=k,b.exports=c["default"]},{"../utils/browser.js":125,"global/document":1}],117:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../utils/browser.js"),i=e(h),j=a("global/document"),k=d(j),l=a("../event-target"),m=d(l),n=a("../tracks/text-track"),o=d(n),p=0,q=1,r=2,s=3,t=function(a){function b(){var c=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];f(this,b),a.call(this);var d=void 0,e=this;if(i.IS_IE8){e=k["default"].createElement("custom");for(var g in b.prototype)"constructor"!==g&&(e[g]=b.prototype[g])}var h=new o["default"](c);return e.kind=h.kind,e.src=h.src,e.srclang=h.language,e.label=h.label,e["default"]=h["default"],Object.defineProperty(e,"readyState",{get:function(){return d}}),Object.defineProperty(e,"track",{get:function(){return h}}),d=p,h.addEventListener("loadeddata",function(){d=r,e.trigger({type:"load",target:e})}),i.IS_IE8?e:void 0}return g(b,a),b}(m["default"]);t.prototype.allowedEvents_={load:"load"},t.NONE=p,t.LOADING=q,t.LOADED=r,t.ERROR=s,c["default"]=t,b.exports=c["default"]},{"../event-target":97,"../tracks/text-track":124,"../utils/browser.js":125,"global/document":1}],118:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}c.__esModule=!0;var f=a("../utils/browser.js"),g=e(f),h=a("global/document"),i=d(h),j=function k(a){var b=this;if(g.IS_IE8){b=i["default"].createElement("custom");for(var c in k.prototype)"constructor"!==c&&(b[c]=k.prototype[c])}return k.prototype.setCues_.call(b,a),Object.defineProperty(b,"length",{get:function(){return this.length_}}),g.IS_IE8?b:void 0};j.prototype.setCues_=function(a){var b=this.length||0,c=0,d=a.length;this.cues_=a,this.length_=a.length;var e=function(a){""+a in this||Object.defineProperty(this,""+a,{get:function(){return this.cues_[a]}})};if(d>b)for(c=b;d>c;c++)e.call(this,c)},j.prototype.getCueById=function(a){for(var b=null,c=0,d=this.length;d>c;c++){var e=this[c];if(e.id===a){b=e;break}}return b},c["default"]=j,b.exports=c["default"]},{"../utils/browser.js":125,"global/document":1}],119:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function h(a,b){return"rgba("+parseInt(a[1]+a[1],16)+","+parseInt(a[2]+a[2],16)+","+parseInt(a[3]+a[3],16)+","+b+")"}function i(a,b,c){try{a.style[b]=c}catch(d){}}c.__esModule=!0;var j=a("../component"),k=e(j),l=a("../menu/menu.js"),m=(e(l),a("../menu/menu-item.js")),n=(e(m),a("../menu/menu-button.js")),o=(e(n),a("../utils/fn.js")),p=d(o),q=a("global/document"),r=(e(q),a("global/window")),s=e(r),t="#222",u="#ccc",v={monospace:"monospace",sansSerif:"sans-serif",serif:"serif",monospaceSansSerif:'"Andale Mono", "Lucida Console", monospace',monospaceSerif:'"Courier New", monospace',proportionalSansSerif:"sans-serif",proportionalSerif:"serif",casual:'"Comic Sans MS", Impact, fantasy',script:'"Monotype Corsiva", cursive',smallcaps:'"Andale Mono", "Lucida Console", monospace, sans-serif'},w=function(a){function b(c,d,e){f(this,b),a.call(this,c,d,e),c.on("loadstart",p.bind(this,this.toggleDisplay)),c.on("texttrackchange",p.bind(this,this.updateDisplay)),c.ready(p.bind(this,function(){if(c.tech_&&c.tech_.featuresNativeTextTracks)return void this.hide();c.on("fullscreenchange",p.bind(this,this.updateDisplay));for(var a=this.options_.playerOptions.tracks||[],b=0;b<a.length;b++){var d=a[b];this.player_.addRemoteTextTrack(d)}}))}return g(b,a),b.prototype.toggleDisplay=function(){this.player_.tech_&&this.player_.tech_.featuresNativeTextTracks?this.hide():this.show()},b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-text-track-display"})},b.prototype.clearDisplay=function(){"function"==typeof s["default"].WebVTT&&s["default"].WebVTT.processCues(s["default"],[],this.el_)},b.prototype.updateDisplay=function(){var a=this.player_.textTracks();if(this.clearDisplay(),a)for(var b=0;b<a.length;b++){var c=a[b];"showing"===c.mode&&this.updateForTrack(c)}},b.prototype.updateForTrack=function(a){if("function"==typeof s["default"].WebVTT&&a.activeCues){for(var b=this.player_.textTrackSettings.getValues(),c=[],d=0;d<a.activeCues.length;d++)c.push(a.activeCues[d]);s["default"].WebVTT.processCues(s["default"],a.activeCues,this.el_);for(var e=c.length;e--;){var f=c[e];if(f){var g=f.displayState;if(b.color&&(g.firstChild.style.color=b.color),b.textOpacity&&i(g.firstChild,"color",h(b.color||"#fff",b.textOpacity)),b.backgroundColor&&(g.firstChild.style.backgroundColor=b.backgroundColor),b.backgroundOpacity&&i(g.firstChild,"backgroundColor",h(b.backgroundColor||"#000",b.backgroundOpacity)),b.windowColor&&(b.windowOpacity?i(g,"backgroundColor",h(b.windowColor,b.windowOpacity)):g.style.backgroundColor=b.windowColor),b.edgeStyle&&("dropshadow"===b.edgeStyle?g.firstChild.style.textShadow="2px 2px 3px "+t+", 2px 2px 4px "+t+", 2px 2px 5px "+t:"raised"===b.edgeStyle?g.firstChild.style.textShadow="1px 1px "+t+", 2px 2px "+t+", 3px 3px "+t:"depressed"===b.edgeStyle?g.firstChild.style.textShadow="1px 1px "+u+", 0 1px "+u+", -1px -1px "+t+", 0 -1px "+t:"uniform"===b.edgeStyle&&(g.firstChild.style.textShadow="0 0 4px "+t+", 0 0 4px "+t+", 0 0 4px "+t+", 0 0 4px "+t)),b.fontPercent&&1!==b.fontPercent){var j=s["default"].parseFloat(g.style.fontSize);g.style.fontSize=j*b.fontPercent+"px",g.style.height="auto",g.style.top="auto",g.style.bottom="2px"}b.fontFamily&&"default"!==b.fontFamily&&("small-caps"===b.fontFamily?g.firstChild.style.fontVariant="small-caps":g.firstChild.style.fontFamily=v[b.fontFamily])}}}},b}(k["default"]);k["default"].registerComponent("TextTrackDisplay",w),c["default"]=w,b.exports=c["default"]},{"../component":65,"../menu/menu-button.js":102,"../menu/menu-item.js":103,"../menu/menu.js":104,"../utils/fn.js":130,"global/document":1,"global/window":2}],120:[function(a,b,c){"use strict";c.__esModule=!0;var d={disabled:"disabled",hidden:"hidden",showing:"showing"},e={subtitles:"subtitles",captions:"captions",descriptions:"descriptions",chapters:"chapters",metadata:"metadata"};c.TextTrackMode=d,c.TextTrackKind=e},{}],121:[function(a,b,c){"use strict";c.__esModule=!0;var d=function(a){var b=["kind","label","language","id","inBandMetadataTrackDispatchType","mode","src"].reduce(function(b,c){return a[c]&&(b[c]=a[c]),b},{cues:a.cues&&Array.prototype.map.call(a.cues,function(a){return{startTime:a.startTime,endTime:a.endTime,text:a.text,id:a.id}})});return b},e=function(a){var b=a.$$("track"),c=Array.prototype.map.call(b,function(a){return a.track}),e=Array.prototype.map.call(b,function(a){var b=d(a.track);return a.src&&(b.src=a.src),b});return e.concat(Array.prototype.filter.call(a.textTracks(),function(a){return-1===c.indexOf(a)}).map(d))},f=function(a,b){return a.forEach(function(a){var c=b.addRemoteTextTrack(a).track;!a.src&&a.cues&&a.cues.forEach(function(a){return c.addCue(a)})}),b.textTracks()};c["default"]={textTracksToJson:e,jsonToTextTracks:f,trackToJson_:d},b.exports=c["default"]},{}],122:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var f=a("../event-target"),g=e(f),h=a("../utils/fn.js"),i=d(h),j=a("../utils/browser.js"),k=d(j),l=a("global/document"),m=e(l),n=function p(a){var b=this;if(k.IS_IE8){b=m["default"].createElement("custom");for(var c in p.prototype)"constructor"!==c&&(b[c]=p.prototype[c])}a=a||[],b.tracks_=[],Object.defineProperty(b,"length",{get:function(){return this.tracks_.length}});for(var d=0;d<a.length;d++)b.addTrack_(a[d]);return k.IS_IE8?b:void 0};n.prototype=Object.create(g["default"].prototype),n.prototype.constructor=n,n.prototype.allowedEvents_={change:"change",addtrack:"addtrack",removetrack:"removetrack"};for(var o in n.prototype.allowedEvents_)n.prototype["on"+o]=null;n.prototype.addTrack_=function(a){var b=this.tracks_.length;""+b in this||Object.defineProperty(this,b,{get:function(){return this.tracks_[b]}}),a.addEventListener("modechange",i.bind(this,function(){this.trigger("change")})),this.tracks_.push(a),this.trigger({type:"addtrack",track:a})},n.prototype.removeTrack_=function(a){for(var b=void 0,c=0,d=this.length;d>c;c++)if(this[c]===a){b=this[c],this.tracks_.splice(c,1);break}b&&this.trigger({type:"removetrack",track:b})},n.prototype.getTrackById=function(a){for(var b=null,c=0,d=this.length;d>c;c++){var e=this[c];if(e.id===a){b=e;break}}return b},c["default"]=n,b.exports=c["default"]},{"../event-target":97,"../utils/browser.js":125,"../utils/fn.js":130,"global/document":1}],123:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function h(a){var b=void 0;return a.selectedOptions?b=a.selectedOptions[0]:a.options&&(b=a.options[a.options.selectedIndex]),b.value}function i(a,b){if(b){var c=void 0;for(c=0;c<a.options.length;c++){var d=a.options[c];if(d.value===b)break}a.selectedIndex=c}}function j(){var a='<div class="vjs-tracksettings">\n <div class="vjs-tracksettings-colors">\n <div class="vjs-fg-color vjs-tracksetting">\n <label class="vjs-label">Foreground</label>\n <select>\n <option value="">---</option>\n <option value="#FFF">White</option>\n <option value="#000">Black</option>\n <option value="#F00">Red</option>\n <option value="#0F0">Green</option>\n <option value="#00F">Blue</option>\n <option value="#FF0">Yellow</option>\n <option value="#F0F">Magenta</option>\n <option value="#0FF">Cyan</option>\n </select>\n <span class="vjs-text-opacity vjs-opacity">\n <select>\n <option value="">---</option>\n <option value="1">Opaque</option>\n <option value="0.5">Semi-Opaque</option>\n </select>\n </span>\n </div> <!-- vjs-fg-color -->\n <div class="vjs-bg-color vjs-tracksetting">\n <label class="vjs-label">Background</label>\n <select>\n <option value="">---</option>\n <option value="#FFF">White</option>\n <option value="#000">Black</option>\n <option value="#F00">Red</option>\n <option value="#0F0">Green</option>\n <option value="#00F">Blue</option>\n <option value="#FF0">Yellow</option>\n <option value="#F0F">Magenta</option>\n <option value="#0FF">Cyan</option>\n </select>\n <span class="vjs-bg-opacity vjs-opacity">\n <select>\n <option value="">---</option>\n <option value="1">Opaque</option>\n <option value="0.5">Semi-Transparent</option>\n <option value="0">Transparent</option>\n </select>\n </span>\n </div> <!-- vjs-bg-color -->\n <div class="window-color vjs-tracksetting">\n <label class="vjs-label">Window</label>\n <select>\n <option value="">---</option>\n <option value="#FFF">White</option>\n <option value="#000">Black</option>\n <option value="#F00">Red</option>\n <option value="#0F0">Green</option>\n <option value="#00F">Blue</option>\n <option value="#FF0">Yellow</option>\n <option value="#F0F">Magenta</option>\n <option value="#0FF">Cyan</option>\n </select>\n <span class="vjs-window-opacity vjs-opacity">\n <select>\n <option value="">---</option>\n <option value="1">Opaque</option>\n <option value="0.5">Semi-Transparent</option>\n <option value="0">Transparent</option>\n </select>\n </span>\n </div> <!-- vjs-window-color -->\n </div> <!-- vjs-tracksettings -->\n <div class="vjs-tracksettings-font">\n <div class="vjs-font-percent vjs-tracksetting">\n <label class="vjs-label">Font Size</label>\n <select>\n <option value="0.50">50%</option>\n <option value="0.75">75%</option>\n <option value="1.00" selected>100%</option>\n <option value="1.25">125%</option>\n <option value="1.50">150%</option>\n <option value="1.75">175%</option>\n <option value="2.00">200%</option>\n <option value="3.00">300%</option>\n <option value="4.00">400%</option>\n </select>\n </div> <!-- vjs-font-percent -->\n <div class="vjs-edge-style vjs-tracksetting">\n <label class="vjs-label">Text Edge Style</label>\n <select>\n <option value="none">None</option>\n <option value="raised">Raised</option>\n <option value="depressed">Depressed</option>\n <option value="uniform">Uniform</option>\n <option value="dropshadow">Dropshadow</option>\n </select>\n </div> <!-- vjs-edge-style -->\n <div class="vjs-font-family vjs-tracksetting">\n <label class="vjs-label">Font Family</label>\n <select>\n <option value="">Default</option>\n <option value="monospaceSerif">Monospace Serif</option>\n <option value="proportionalSerif">Proportional Serif</option>\n <option value="monospaceSansSerif">Monospace Sans-Serif</option>\n <option value="proportionalSansSerif">Proportional Sans-Serif</option>\n <option value="casual">Casual</option>\n <option value="script">Script</option>\n <option value="small-caps">Small Caps</option>\n </select>\n </div> <!-- vjs-font-family -->\n </div>\n </div>\n <div class="vjs-tracksettings-controls">\n <button class="vjs-default-button">Defaults</button>\n <button class="vjs-done-button">Done</button>\n </div>';return a}c.__esModule=!0;var k=a("../component"),l=e(k),m=a("../utils/events.js"),n=d(m),o=a("../utils/fn.js"),p=d(o),q=a("../utils/log.js"),r=e(q),s=a("safe-json-parse/tuple"),t=e(s),u=a("global/window"),v=e(u),w=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.hide(),void 0===d.persistTextTrackSettings&&(this.options_.persistTextTrackSettings=this.options_.playerOptions.persistTextTrackSettings),n.on(this.$(".vjs-done-button"),"click",p.bind(this,function(){this.saveSettings(),this.hide()})),n.on(this.$(".vjs-default-button"),"click",p.bind(this,function(){this.$(".vjs-fg-color > select").selectedIndex=0,this.$(".vjs-bg-color > select").selectedIndex=0,this.$(".window-color > select").selectedIndex=0,this.$(".vjs-text-opacity > select").selectedIndex=0,this.$(".vjs-bg-opacity > select").selectedIndex=0,this.$(".vjs-window-opacity > select").selectedIndex=0,this.$(".vjs-edge-style select").selectedIndex=0,this.$(".vjs-font-family select").selectedIndex=0,this.$(".vjs-font-percent select").selectedIndex=2,this.updateDisplay()})),n.on(this.$(".vjs-fg-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.$(".vjs-bg-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.$(".window-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.$(".vjs-text-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.$(".vjs-bg-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.$(".vjs-window-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.$(".vjs-font-percent select"),"change",p.bind(this,this.updateDisplay)),n.on(this.$(".vjs-edge-style select"),"change",p.bind(this,this.updateDisplay)),n.on(this.$(".vjs-font-family select"),"change",p.bind(this,this.updateDisplay)),this.options_.persistTextTrackSettings&&this.restoreSettings()}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-caption-settings vjs-modal-overlay",innerHTML:j()})},b.prototype.getValues=function(){var a=h(this.$(".vjs-edge-style select")),b=h(this.$(".vjs-font-family select")),c=h(this.$(".vjs-fg-color > select")),d=h(this.$(".vjs-text-opacity > select")),e=h(this.$(".vjs-bg-color > select")),f=h(this.$(".vjs-bg-opacity > select")),g=h(this.$(".window-color > select")),i=h(this.$(".vjs-window-opacity > select")),j=v["default"].parseFloat(h(this.$(".vjs-font-percent > select"))),k={backgroundOpacity:f,textOpacity:d,windowOpacity:i,edgeStyle:a,fontFamily:b,color:c,backgroundColor:e,windowColor:g,fontPercent:j};for(var l in k)(""===k[l]||"none"===k[l]||"fontPercent"===l&&1===k[l])&&delete k[l];return k},b.prototype.setValues=function(a){i(this.$(".vjs-edge-style select"),a.edgeStyle),i(this.$(".vjs-font-family select"),a.fontFamily),i(this.$(".vjs-fg-color > select"),a.color),i(this.$(".vjs-text-opacity > select"),a.textOpacity),i(this.$(".vjs-bg-color > select"),a.backgroundColor),i(this.$(".vjs-bg-opacity > select"),a.backgroundOpacity),i(this.$(".window-color > select"),a.windowColor),i(this.$(".vjs-window-opacity > select"),a.windowOpacity);var b=a.fontPercent;b&&(b=b.toFixed(2)),i(this.$(".vjs-font-percent > select"),b)},b.prototype.restoreSettings=function(){var a=t["default"](v["default"].localStorage.getItem("vjs-text-track-settings")),b=a[0],c=a[1];b&&r["default"].error(b),c&&this.setValues(c)},b.prototype.saveSettings=function(){if(this.options_.persistTextTrackSettings){var a=this.getValues();try{Object.getOwnPropertyNames(a).length>0?v["default"].localStorage.setItem("vjs-text-track-settings",JSON.stringify(a)):v["default"].localStorage.removeItem("vjs-text-track-settings")}catch(b){}}},b.prototype.updateDisplay=function(){var a=this.player_.getChild("textTrackDisplay");a&&a.updateDisplay()},b}(l["default"]);l["default"].registerComponent("TextTrackSettings",w),c["default"]=w,b.exports=c["default"]},{"../component":65,"../utils/events.js":129,"../utils/fn.js":130,"../utils/log.js":133,"global/window":2,"safe-json-parse/tuple":53}],124:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var f=a("./text-track-cue-list"),g=e(f),h=a("../utils/fn.js"),i=d(h),j=a("../utils/guid.js"),k=d(j),l=a("../utils/browser.js"),m=d(l),n=a("./text-track-enums"),o=d(n),p=a("../utils/log.js"),q=e(p),r=a("../event-target"),s=e(r),t=a("global/document"),u=e(t),v=a("global/window"),w=e(v),x=a("../utils/url.js"),y=a("xhr"),z=e(y),A=function E(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];if(!a.tech)throw new Error("A tech was not provided.");var b=this;if(m.IS_IE8){b=u["default"].createElement("custom");for(var c in E.prototype)"constructor"!==c&&(b[c]=E.prototype[c])}b.tech_=a.tech;var d=o.TextTrackMode[a.mode]||"disabled",e=o.TextTrackKind[a.kind]||"subtitles",f=a.label||"",h=a.language||a.srclang||"",j=a.id||"vjs_text_track_"+k.newGUID();("metadata"===e||"chapters"===e)&&(d="hidden"),b.cues_=[],b.activeCues_=[];var l=new g["default"](b.cues_),n=new g["default"](b.activeCues_),p=!1,q=i.bind(b,function(){this.activeCues,p&&(this.trigger("cuechange"),p=!1)});return"disabled"!==d&&b.tech_.on("timeupdate",q),Object.defineProperty(b,"kind",{get:function(){return e},set:Function.prototype}),Object.defineProperty(b,"label",{get:function(){return f},set:Function.prototype}),Object.defineProperty(b,"language",{get:function(){return h},set:Function.prototype}),Object.defineProperty(b,"id",{get:function(){return j},set:Function.prototype}),Object.defineProperty(b,"mode",{get:function(){return d},set:function(a){o.TextTrackMode[a]&&(d=a,"showing"===d&&this.tech_.on("timeupdate",q),this.trigger("modechange"))}}),Object.defineProperty(b,"cues",{get:function(){return this.loaded_?l:null},set:Function.prototype}),Object.defineProperty(b,"activeCues",{get:function(){if(!this.loaded_)return null;if(0===this.cues.length)return n;for(var a=this.tech_.currentTime(),b=[],c=0,d=this.cues.length;d>c;c++){var e=this.cues[c];e.startTime<=a&&e.endTime>=a?b.push(e):e.startTime===e.endTime&&e.startTime<=a&&e.startTime+.5>=a&&b.push(e)}if(p=!1,b.length!==this.activeCues_.length)p=!0;else for(var c=0;c<b.length;c++)-1===D.call(this.activeCues_,b[c])&&(p=!0);return this.activeCues_=b,n.setCues_(this.activeCues_),n},set:Function.prototype}),a.src?(b.src=a.src,C(a.src,b)):b.loaded_=!0,m.IS_IE8?b:void 0};A.prototype=Object.create(s["default"].prototype),A.prototype.constructor=A,A.prototype.allowedEvents_={cuechange:"cuechange"},A.prototype.addCue=function(a){var b=this.tech_.textTracks();if(b)for(var c=0;c<b.length;c++)b[c]!==this&&b[c].removeCue(a);this.cues_.push(a),this.cues.setCues_(this.cues_)},A.prototype.removeCue=function(a){for(var b=!1,c=0,d=this.cues_.length;d>c;c++){var e=this.cues_[c];e===a&&(this.cues_.splice(c,1),b=!0)}b&&this.cues.setCues_(this.cues_)};var B=function(a,b){var c=new w["default"].WebVTT.Parser(w["default"],w["default"].vttjs,w["default"].WebVTT.StringDecoder());c.oncue=function(a){b.addCue(a)},c.onparsingerror=function(a){q["default"].error(a)},c.onflush=function(){b.trigger({type:"loadeddata",target:b})},c.parse(a),c.flush()},C=function(a,b){var c={uri:a},d=x.isCrossOrigin(a);d&&(c.cors=d),z["default"](c,i.bind(this,function(a,c,d){return a?q["default"].error(a,c):(b.loaded_=!0,void("function"!=typeof w["default"].WebVTT?w["default"].setTimeout(function(){B(d,b)},100):B(d,b)))}))},D=function(a,b){if(null==this)throw new TypeError('"this" is null or not defined');var c=Object(this),d=c.length>>>0;if(0===d)return-1;
22
+
23
+ var e=+b||0;if(Math.abs(e)===1/0&&(e=0),e>=d)return-1;for(var f=Math.max(e>=0?e:d-Math.abs(e),0);d>f;){if(f in c&&c[f]===a)return f;f++}return-1};c["default"]=A,b.exports=c["default"]},{"../event-target":97,"../utils/browser.js":125,"../utils/fn.js":130,"../utils/guid.js":132,"../utils/log.js":133,"../utils/url.js":138,"./text-track-cue-list":118,"./text-track-enums":120,"global/document":1,"global/window":2,xhr:55}],125:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=h["default"].navigator.userAgent,j=/AppleWebKit\/([\d.]+)/i.exec(i),k=j?parseFloat(j.pop()):null,l=/iPhone/i.test(i);c.IS_IPHONE=l;var m=/iPad/i.test(i);c.IS_IPAD=m;var n=/iPod/i.test(i);c.IS_IPOD=n;var o=l||m||n;c.IS_IOS=o;var p=function(){var a=i.match(/OS (\d+)_/i);return a&&a[1]?a[1]:void 0}();c.IOS_VERSION=p;var q=/Android/i.test(i);c.IS_ANDROID=q;var r=function(){var a,b,c=i.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);return c?(a=c[1]&&parseFloat(c[1]),b=c[2]&&parseFloat(c[2]),a&&b?parseFloat(c[1]+"."+c[2]):a?a:null):null}();c.ANDROID_VERSION=r;var s=q&&/webkit/i.test(i)&&2.3>r;c.IS_OLD_ANDROID=s;var t=q&&5>r&&537>k;c.IS_NATIVE_ANDROID=t;var u=/Firefox/i.test(i);c.IS_FIREFOX=u;var v=/Chrome/i.test(i);c.IS_CHROME=v;var w=/MSIE\s8\.0/.test(i);c.IS_IE8=w;var x=!!("ontouchstart"in h["default"]||h["default"].DocumentTouch&&f["default"]instanceof h["default"].DocumentTouch);c.TOUCH_ENABLED=x;var y="backgroundSize"in f["default"].createElement("video").style;c.BACKGROUND_SIZE_SUPPORTED=y},{"global/document":1,"global/window":2}],126:[function(a,b,c){"use strict";function d(a,b){var c,d,f=0;if(!b)return 0;a&&a.length||(a=e.createTimeRange(0,0));for(var g=0;g<a.length;g++)c=a.start(g),d=a.end(g),d>b&&(d=b),f+=d-c;return f/b}c.__esModule=!0,c.bufferedPercent=d;var e=a("./time-ranges.js")},{"./time-ranges.js":136}],127:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./log.js"),f=d(e),g={get:function(a,b){return a[b]},set:function(a,b,c){return a[b]=c,!0}};c["default"]=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];if("function"==typeof Proxy){var c=function(){var c={};return Object.keys(b).forEach(function(a){g.hasOwnProperty(a)&&(c[a]=function(){return f["default"].warn(b[a]),g[a].apply(this,arguments)})}),{v:new Proxy(a,c)}}();if("object"==typeof c)return c.v}return a},b.exports=c["default"]},{"./log.js":133}],128:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){return a.raw=b,a}function g(a){return"string"==typeof a&&/\S/.test(a)}function h(a){if(/\s/.test(a))throw new Error("class has illegal whitespace characters")}function i(a){return new RegExp("(^|\\s)"+a+"($|\\s)")}function j(a){return function(b,c){return g(b)?(g(c)&&(c=J["default"].querySelector(c)),(B(c)?c:J["default"])[a](b)):J["default"][a](null)}}function k(a){return 0===a.indexOf("#")&&(a=a.slice(1)),J["default"].getElementById(a)}function l(){var a=arguments.length<=0||void 0===arguments[0]?"div":arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?{}:arguments[2],d=J["default"].createElement(a);return Object.getOwnPropertyNames(b).forEach(function(a){var c=b[a];-1!==a.indexOf("aria-")||"role"===a||"type"===a?(P["default"].warn(R["default"](H,a,c)),d.setAttribute(a,c)):d[a]=c}),Object.getOwnPropertyNames(c).forEach(function(a){c[a];d.setAttribute(a,c[a])}),d}function m(a,b){"undefined"==typeof a.textContent?a.innerText=b:a.textContent=b}function n(a,b){b.firstChild?b.insertBefore(a,b.firstChild):b.appendChild(a)}function o(a){var b=a[T];return b||(b=a[T]=N.newGUID()),S[b]||(S[b]={}),S[b]}function p(a){var b=a[T];return b?!!Object.getOwnPropertyNames(S[b]).length:!1}function q(a){var b=a[T];if(b){delete S[b];try{delete a[T]}catch(c){a.removeAttribute?a.removeAttribute(T):a[T]=null}}}function r(a,b){return a.classList?a.classList.contains(b):(h(b),i(b).test(a.className))}function s(a,b){return a.classList?a.classList.add(b):r(a,b)||(a.className=(a.className+" "+b).trim()),a}function t(a,b){return a.classList?a.classList.remove(b):(h(b),a.className=a.className.split(/\s+/).filter(function(a){return a!==b}).join(" ")),a}function u(a,b,c){var d=r(a,b);return"function"==typeof c&&(c=c(a,b)),"boolean"!=typeof c&&(c=!d),c!==d?(c?s(a,b):t(a,b),a):void 0}function v(a,b){Object.getOwnPropertyNames(b).forEach(function(c){var d=b[c];null===d||"undefined"==typeof d||d===!1?a.removeAttribute(c):a.setAttribute(c,d===!0?"":d)})}function w(a){var b,c,d,e,f;if(b={},c=",autoplay,controls,loop,muted,default,",a&&a.attributes&&a.attributes.length>0){d=a.attributes;for(var g=d.length-1;g>=0;g--)e=d[g].name,f=d[g].value,("boolean"==typeof a[e]||-1!==c.indexOf(","+e+","))&&(f=null!==f?!0:!1),b[e]=f}return b}function x(){J["default"].body.focus(),J["default"].onselectstart=function(){return!1}}function y(){J["default"].onselectstart=function(){return!0}}function z(a){var b=void 0;if(a.getBoundingClientRect&&a.parentNode&&(b=a.getBoundingClientRect()),!b)return{left:0,top:0};var c=J["default"].documentElement,d=J["default"].body,e=c.clientLeft||d.clientLeft||0,f=L["default"].pageXOffset||d.scrollLeft,g=b.left+f-e,h=c.clientTop||d.clientTop||0,i=L["default"].pageYOffset||d.scrollTop,j=b.top+i-h;return{left:Math.round(g),top:Math.round(j)}}function A(a,b){var c={},d=z(a),e=a.offsetWidth,f=a.offsetHeight,g=d.top,h=d.left,i=b.pageY,j=b.pageX;return b.changedTouches&&(j=b.changedTouches[0].pageX,i=b.changedTouches[0].pageY),c.y=Math.max(0,Math.min(1,(g-i+f)/f)),c.x=Math.max(0,Math.min(1,(j-h)/e)),c}function B(a){return!!a&&"object"==typeof a&&1===a.nodeType}function C(a){return!!a&&"object"==typeof a&&3===a.nodeType}function D(a){for(;a.firstChild;)a.removeChild(a.firstChild);return a}function E(a){return"function"==typeof a&&(a=a()),(Array.isArray(a)?a:[a]).map(function(a){return"function"==typeof a&&(a=a()),B(a)||C(a)?a:"string"==typeof a&&/\S/.test(a)?J["default"].createTextNode(a):void 0}).filter(function(a){return a})}function F(a,b){return E(b).forEach(function(b){return a.appendChild(b)}),a}function G(a,b){return F(D(a),b)}c.__esModule=!0,c.getEl=k,c.createEl=l,c.textContent=m,c.insertElFirst=n,c.getElData=o,c.hasElData=p,c.removeElData=q,c.hasElClass=r,c.addElClass=s,c.removeElClass=t,c.toggleElClass=u,c.setElAttributes=v,c.getElAttributes=w,c.blockTextSelection=x,c.unblockTextSelection=y,c.findElPosition=z,c.getPointerPosition=A,c.isEl=B,c.isTextNode=C,c.emptyEl=D,c.normalizeContent=E,c.appendContent=F,c.insertContent=G;var H=f(["Setting attributes in the second argument of createEl()\n has been deprecated. Use the third argument instead.\n createEl(type, properties, attributes). Attempting to set "," to ","."],["Setting attributes in the second argument of createEl()\n has been deprecated. Use the third argument instead.\n createEl(type, properties, attributes). Attempting to set "," to ","."]),I=a("global/document"),J=e(I),K=a("global/window"),L=e(K),M=a("./guid.js"),N=d(M),O=a("./log.js"),P=e(O),Q=a("tsml"),R=e(Q),S={},T="vdata"+(new Date).getTime(),U=j("querySelector");c.$=U;var V=j("querySelectorAll");c.$$=V},{"./guid.js":132,"./log.js":133,"global/document":1,"global/window":2,tsml:54}],129:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b,c){if(Array.isArray(b))return l(f,a,b,c);var d=n.getElData(a);d.handlers||(d.handlers={}),d.handlers[b]||(d.handlers[b]=[]),c.guid||(c.guid=p.newGUID()),d.handlers[b].push(c),d.dispatcher||(d.disabled=!1,d.dispatcher=function(b,c){if(!d.disabled){b=j(b);var e=d.handlers[b.type];if(e)for(var f=e.slice(0),g=0,h=f.length;h>g&&!b.isImmediatePropagationStopped();g++)f[g].call(a,b,c)}}),1===d.handlers[b].length&&(a.addEventListener?a.addEventListener(b,d.dispatcher,!1):a.attachEvent&&a.attachEvent("on"+b,d.dispatcher))}function g(a,b,c){if(n.hasElData(a)){var d=n.getElData(a);if(d.handlers){if(Array.isArray(b))return l(g,a,b,c);var e=function(b){d.handlers[b]=[],k(a,b)};if(b){var f=d.handlers[b];if(f){if(!c)return void e(b);if(c.guid)for(var h=0;h<f.length;h++)f[h].guid===c.guid&&f.splice(h--,1);k(a,b)}}else for(var i in d.handlers)e(i)}}}function h(a,b,c){var d=n.hasElData(a)?n.getElData(a):{},e=a.parentNode||a.ownerDocument;if("string"==typeof b&&(b={type:b,target:a}),b=j(b),d.dispatcher&&d.dispatcher.call(a,b,c),e&&!b.isPropagationStopped()&&b.bubbles===!0)h.call(null,e,b,c);else if(!e&&!b.defaultPrevented){var f=n.getElData(b.target);b.target[b.type]&&(f.disabled=!0,"function"==typeof b.target[b.type]&&b.target[b.type](),f.disabled=!1)}return!b.defaultPrevented}function i(a,b,c){if(Array.isArray(b))return l(i,a,b,c);var d=function e(){g(a,b,e),c.apply(this,arguments)};d.guid=c.guid=c.guid||p.newGUID(),f(a,b,d)}function j(a){function b(){return!0}function c(){return!1}if(!a||!a.isPropagationStopped){var d=a||r["default"].event;a={};for(var e in d)"layerX"!==e&&"layerY"!==e&&"keyLocation"!==e&&"webkitMovementX"!==e&&"webkitMovementY"!==e&&("returnValue"===e&&d.preventDefault||(a[e]=d[e]));if(a.target||(a.target=a.srcElement||t["default"]),a.relatedTarget||(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement),a.preventDefault=function(){d.preventDefault&&d.preventDefault(),a.returnValue=!1,d.returnValue=!1,a.defaultPrevented=!0},a.defaultPrevented=!1,a.stopPropagation=function(){d.stopPropagation&&d.stopPropagation(),a.cancelBubble=!0,d.cancelBubble=!0,a.isPropagationStopped=b},a.isPropagationStopped=c,a.stopImmediatePropagation=function(){d.stopImmediatePropagation&&d.stopImmediatePropagation(),a.isImmediatePropagationStopped=b,a.stopPropagation()},a.isImmediatePropagationStopped=c,null!=a.clientX){var f=t["default"].documentElement,g=t["default"].body;a.pageX=a.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=a.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)}a.which=a.charCode||a.keyCode,null!=a.button&&(a.button=1&a.button?0:4&a.button?1:2&a.button?2:0)}return a}function k(a,b){var c=n.getElData(a);0===c.handlers[b].length&&(delete c.handlers[b],a.removeEventListener?a.removeEventListener(b,c.dispatcher,!1):a.detachEvent&&a.detachEvent("on"+b,c.dispatcher)),Object.getOwnPropertyNames(c.handlers).length<=0&&(delete c.handlers,delete c.dispatcher,delete c.disabled),0===Object.getOwnPropertyNames(c).length&&n.removeElData(a)}function l(a,b,c,d){c.forEach(function(c){a(b,c,d)})}c.__esModule=!0,c.on=f,c.off=g,c.trigger=h,c.one=i,c.fixEvent=j;var m=a("./dom.js"),n=e(m),o=a("./guid.js"),p=e(o),q=a("global/window"),r=d(q),s=a("global/document"),t=d(s)},{"./dom.js":128,"./guid.js":132,"global/document":1,"global/window":2}],130:[function(a,b,c){"use strict";c.__esModule=!0;var d=a("./guid.js"),e=function(a,b,c){b.guid||(b.guid=d.newGUID());var e=function(){return b.apply(a,arguments)};return e.guid=c?c+"_"+b.guid:b.guid,e};c.bind=e},{"./guid.js":132}],131:[function(a,b,c){"use strict";function d(a){var b=arguments.length<=1||void 0===arguments[1]?a:arguments[1];return function(){a=0>a?0:a;var c=Math.floor(a%60),d=Math.floor(a/60%60),e=Math.floor(a/3600),f=Math.floor(b/60%60),g=Math.floor(b/3600);return(isNaN(a)||a===1/0)&&(e=d=c="-"),e=e>0||g>0?e+":":"",d=((e||f>=10)&&10>d?"0"+d:d)+":",c=10>c?"0"+c:c,e+d+c}()}c.__esModule=!0,c["default"]=d,b.exports=c["default"]},{}],132:[function(a,b,c){"use strict";function d(){return e++}c.__esModule=!0,c.newGUID=d;var e=1},{}],133:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){var c=Array.prototype.slice.call(b),d=function(){},e=g["default"].console||{log:d,warn:d,error:d};a?c.unshift(a.toUpperCase()+":"):a="log",h.history.push(c),c.unshift("VIDEOJS:"),e[a].apply?e[a].apply(e,c):e[a](c.join(" "))}c.__esModule=!0;var f=a("global/window"),g=d(f),h=function(){e(null,arguments)};h.history=[],h.error=function(){e("error",arguments)},h.warn=function(){e("warn",arguments)},c["default"]=h,b.exports=c["default"]},{"global/window":2}],134:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){return!!a&&"object"==typeof a&&"[object Object]"===a.toString()&&a.constructor===Object}function f(){var a=Array.prototype.slice.call(arguments);return a.unshift({}),a.push(i),h["default"].apply(null,a),a[0]}c.__esModule=!0,c["default"]=f;var g=a("lodash-compat/object/merge"),h=d(g),i=function(a,b){return e(b)?e(a)?void 0:f(b):b};b.exports=c["default"]},{"lodash-compat/object/merge":40}],135:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=function(a){var b=f["default"].createElement("style");return b.className=a,b};c.createStyleElement=g;var h=function(a,b){a.styleSheet?a.styleSheet.cssText=b:a.textContent=b};c.setTextContent=h},{"global/document":1}],136:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){return Array.isArray(a)?f(a):void 0===a||void 0===b?f():f([[a,b]])}function f(a){return void 0===a||0===a.length?{length:0,start:function(){throw new Error("This TimeRanges object is empty")},end:function(){throw new Error("This TimeRanges object is empty")}}:{length:a.length,start:g.bind(null,"start",0,a),end:g.bind(null,"end",1,a)}}function g(a,b,c,d){return void 0===d&&(j["default"].warn("DEPRECATED: Function '"+a+"' on 'TimeRanges' called without an index argument."),d=0),h(a,d,c.length-1),c[d][b]}function h(a,b,c){if(0>b||b>c)throw new Error("Failed to execute '"+a+"' on 'TimeRanges': The index provided ("+b+") is greater than or equal to the maximum bound ("+c+").")}c.__esModule=!0,c.createTimeRanges=e;var i=a("./log.js"),j=d(i);c.createTimeRange=e},{"./log.js":133}],137:[function(a,b,c){"use strict";function d(a){return a.charAt(0).toUpperCase()+a.slice(1)}c.__esModule=!0,c["default"]=d,b.exports=c["default"]},{}],138:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=function(a){var b=["protocol","hostname","port","pathname","search","hash","host"],c=f["default"].createElement("a");c.href=a;var d=""===c.host&&"file:"!==c.protocol,e=void 0;d&&(e=f["default"].createElement("div"),e.innerHTML='<a href="'+a+'"></a>',c=e.firstChild,e.setAttribute("style","display:none; position:absolute;"),f["default"].body.appendChild(e));for(var g={},h=0;h<b.length;h++)g[b[h]]=c[b[h]];return"http:"===g.protocol&&(g.host=g.host.replace(/:80$/,"")),"https:"===g.protocol&&(g.host=g.host.replace(/:443$/,"")),d&&f["default"].body.removeChild(e),g};c.parseUrl=i;var j=function(a){if(!a.match(/^https?:\/\//)){var b=f["default"].createElement("div");b.innerHTML='<a href="'+a+'">x</a>',a=b.firstChild.href}return a};c.getAbsoluteURL=j;var k=function(a){if("string"==typeof a){var b=/^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/i,c=b.exec(a);if(c)return c.pop().toLowerCase()}return""};c.getFileExtension=k;var l=function(a){var b=h["default"].location,c=i(a),d=":"===c.protocol?b.protocol:c.protocol,e=d+c.host!==b.protocol+b.host;return e};c.isCrossOrigin=l},{"global/document":1,"global/window":2}],139:[function(b,c,d){"use strict";function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a){return a&&a.__esModule?a:{"default":a}}d.__esModule=!0;{var g=b("global/document"),h=f(g),i=b("./setup"),j=e(i),k=b("./utils/stylesheet.js"),l=e(k),m=b("./component"),n=f(m),o=b("./event-target"),p=f(o),q=b("./utils/events.js"),r=e(q),s=b("./player"),t=f(s),u=b("./plugins.js"),v=f(u),w=b("../../src/js/utils/merge-options.js"),x=f(w),y=b("./utils/fn.js"),z=e(y),A=b("./tracks/text-track.js"),B=f(A),C=b("object.assign"),D=(f(C),b("./utils/time-ranges.js")),E=b("./utils/format-time.js"),F=f(E),G=b("./utils/log.js"),H=f(G),I=b("./utils/dom.js"),J=e(I),K=b("./utils/browser.js"),L=e(K),M=b("./utils/url.js"),N=e(M),O=b("./extend.js"),P=f(O),Q=b("lodash-compat/object/merge"),R=f(Q),S=b("./utils/create-deprecation-proxy.js"),T=f(S),U=b("xhr"),V=f(U),W=b("./tech/tech.js"),X=f(W),Y=b("./tech/html5.js"),Z=(f(Y),b("./tech/flash.js"));f(Z)}"undefined"==typeof HTMLVideoElement&&(h["default"].createElement("video"),h["default"].createElement("audio"),h["default"].createElement("track"));var $=function ba(a,b,c){var d=void 0;if("string"==typeof a){if(0===a.indexOf("#")&&(a=a.slice(1)),ba.getPlayers()[a])return b&&H["default"].warn('Player "'+a+'" is already initialised. Options will not be applied.'),c&&ba.getPlayers()[a].ready(c),ba.getPlayers()[a];d=J.getEl(a)}else d=a;if(!d||!d.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return d.player||t["default"].players[d.playerId]||new t["default"](d,b,c)},_=J.$(".vjs-styles-defaults");if(!_){_=l.createStyleElement("vjs-styles-defaults");var aa=J.$("head");aa.insertBefore(_,aa.firstChild),l.setTextContent(_,"\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid {\n padding-top: 56.25%\n }\n ")}j.autoSetupTimeout(1,$),$.VERSION="5.5.3",$.options=t["default"].prototype.options_,$.getPlayers=function(){return t["default"].players},$.players=T["default"](t["default"].players,{get:"Access to videojs.players is deprecated; use videojs.getPlayers instead",set:"Modification of videojs.players is deprecated"}),$.getComponent=n["default"].getComponent,$.registerComponent=function(a,b){X["default"].isTech(b)&&H["default"].warn("The "+a+" tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)"),n["default"].registerComponent.call(n["default"],a,b)},$.getTech=X["default"].getTech,$.registerTech=X["default"].registerTech,$.browser=L,$.TOUCH_ENABLED=L.TOUCH_ENABLED,$.extend=P["default"],$.mergeOptions=x["default"],$.bind=z.bind,$.plugin=v["default"],$.addLanguage=function(a,b){var c;return a=(""+a).toLowerCase(),R["default"]($.options.languages,(c={},c[a]=b,c))[a]},$.log=H["default"],$.createTimeRange=$.createTimeRanges=D.createTimeRanges,$.formatTime=F["default"],$.parseUrl=N.parseUrl,$.isCrossOrigin=N.isCrossOrigin,$.EventTarget=p["default"],$.on=r.on,$.one=r.one,$.off=r.off,$.trigger=r.trigger,$.xhr=V["default"],$.TextTrack=B["default"],$.isEl=J.isEl,$.isTextNode=J.isTextNode,$.createEl=J.createEl,$.hasClass=J.hasElClass,$.addClass=J.addElClass,$.removeClass=J.removeElClass,$.toggleClass=J.toggleElClass,$.setAttributes=J.setElAttributes,$.getAttributes=J.getElAttributes,$.emptyEl=J.emptyEl,$.appendContent=J.appendContent,$.insertContent=J.insertContent,"function"==typeof a&&a.amd?a("videojs",[],function(){return $}):"object"==typeof d&&"object"==typeof c&&(c.exports=$),d["default"]=$,c.exports=d["default"]},{"../../src/js/utils/merge-options.js":134,"./component":65,"./event-target":97,"./extend.js":98,"./player":106,"./plugins.js":107,"./setup":109,"./tech/flash.js":112,"./tech/html5.js":113,"./tech/tech.js":115,"./tracks/text-track.js":124,"./utils/browser.js":125,"./utils/create-deprecation-proxy.js":127,"./utils/dom.js":128,"./utils/events.js":129,"./utils/fn.js":130,"./utils/format-time.js":131,"./utils/log.js":133,"./utils/stylesheet.js":135,"./utils/time-ranges.js":136,"./utils/url.js":138,"global/document":1,"lodash-compat/object/merge":40,"object.assign":45,xhr:55}]},{},[139])(139)}),function(a){var b=a.vttjs={},c=b.VTTCue,d=b.VTTRegion,e=a.VTTCue,f=a.VTTRegion;b.shim=function(){b.VTTCue=c,b.VTTRegion=d},b.restore=function(){b.VTTCue=e,b.VTTRegion=f}}(this),function(a,b){function c(a){if("string"!=typeof a)return!1;var b=h[a.toLowerCase()];return b?a.toLowerCase():!1}function d(a){if("string"!=typeof a)return!1;var b=i[a.toLowerCase()];return b?a.toLowerCase():!1}function e(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)a[d]=c[d]}return a}function f(a,b,f){var h=this,i=/MSIE\s8\.0/.test(navigator.userAgent),j={};i?h=document.createElement("custom"):j.enumerable=!0,h.hasBeenReset=!1;var k="",l=!1,m=a,n=b,o=f,p=null,q="",r=!0,s="auto",t="start",u=50,v="middle",w=50,x="middle";return Object.defineProperty(h,"id",e({},j,{get:function(){return k},set:function(a){k=""+a}})),Object.defineProperty(h,"pauseOnExit",e({},j,{get:function(){return l},set:function(a){l=!!a}})),Object.defineProperty(h,"startTime",e({},j,{get:function(){return m},set:function(a){if("number"!=typeof a)throw new TypeError("Start time must be set to a number.");m=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"endTime",e({},j,{get:function(){return n},set:function(a){if("number"!=typeof a)throw new TypeError("End time must be set to a number.");n=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"text",e({},j,{get:function(){return o},set:function(a){o=""+a,this.hasBeenReset=!0}})),Object.defineProperty(h,"region",e({},j,{get:function(){return p},set:function(a){p=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"vertical",e({},j,{get:function(){return q},set:function(a){var b=c(a);if(b===!1)throw new SyntaxError("An invalid or illegal string was specified.");q=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"snapToLines",e({},j,{get:function(){return r},set:function(a){r=!!a,this.hasBeenReset=!0}})),Object.defineProperty(h,"line",e({},j,{get:function(){return s},set:function(a){if("number"!=typeof a&&a!==g)throw new SyntaxError("An invalid number or illegal string was specified.");s=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"lineAlign",e({},j,{get:function(){return t},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");t=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"position",e({},j,{get:function(){return u},set:function(a){if(0>a||a>100)throw new Error("Position must be between 0 and 100.");u=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"positionAlign",e({},j,{get:function(){return v},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");v=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"size",e({},j,{get:function(){return w},set:function(a){if(0>a||a>100)throw new Error("Size must be between 0 and 100.");w=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"align",e({},j,{get:function(){return x},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");x=b,this.hasBeenReset=!0}})),h.displayState=void 0,i?h:void 0}var g="auto",h={"":!0,lr:!0,rl:!0},i={start:!0,middle:!0,end:!0,left:!0,right:!0};f.prototype.getCueAsHTML=function(){return WebVTT.convertCueToDOMTree(window,this.text)},a.VTTCue=a.VTTCue||f,b.VTTCue=f}(this,this.vttjs||{}),function(a,b){function c(a){if("string"!=typeof a)return!1;var b=f[a.toLowerCase()];return b?a.toLowerCase():!1}function d(a){return"number"==typeof a&&a>=0&&100>=a}function e(){var a=100,b=3,e=0,f=100,g=0,h=100,i="";Object.defineProperties(this,{width:{enumerable:!0,get:function(){return a},set:function(b){if(!d(b))throw new Error("Width must be between 0 and 100.");a=b}},lines:{enumerable:!0,get:function(){return b},set:function(a){if("number"!=typeof a)throw new TypeError("Lines must be set to a number.");b=a}},regionAnchorY:{enumerable:!0,get:function(){return f},set:function(a){if(!d(a))throw new Error("RegionAnchorX must be between 0 and 100.");f=a}},regionAnchorX:{enumerable:!0,get:function(){return e},set:function(a){if(!d(a))throw new Error("RegionAnchorY must be between 0 and 100.");e=a}},viewportAnchorY:{enumerable:!0,get:function(){return h},set:function(a){if(!d(a))throw new Error("ViewportAnchorY must be between 0 and 100.");h=a}},viewportAnchorX:{enumerable:!0,get:function(){return g},set:function(a){if(!d(a))throw new Error("ViewportAnchorX must be between 0 and 100.");g=a}},scroll:{enumerable:!0,get:function(){return i},set:function(a){var b=c(a);if(b===!1)throw new SyntaxError("An invalid or illegal string was specified.");i=b}}})}var f={"":!0,up:!0};a.VTTRegion=a.VTTRegion||e,b.VTTRegion=e}(this,this.vttjs||{}),function(a){function b(a,b){this.name="ParsingError",this.code=a.code,this.message=b||a.message}function c(a){function b(a,b,c,d){return 3600*(0|a)+60*(0|b)+(0|c)+(0|d)/1e3}var c=a.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return c?c[3]?b(c[1],c[2],c[3].replace(":",""),c[4]):c[1]>59?b(c[1],c[2],0,c[4]):b(0,c[1],c[2],c[4]):null}function d(){this.values=o(null)}function e(a,b,c,d){var e=d?a.split(d):[a];for(var f in e)if("string"==typeof e[f]){var g=e[f].split(c);if(2===g.length){var h=g[0],i=g[1];b(h,i)}}}function f(a,f,g){function h(){var d=c(a);if(null===d)throw new b(b.Errors.BadTimeStamp,"Malformed timestamp: "+k);return a=a.replace(/^[^\sa-zA-Z-]+/,""),d}function i(a,b){var c=new d;e(a,function(a,b){switch(a){case"region":for(var d=g.length-1;d>=0;d--)if(g[d].id===b){c.set(a,g[d].region);break}break;case"vertical":c.alt(a,b,["rl","lr"]);break;case"line":var e=b.split(","),f=e[0];c.integer(a,f),c.percent(a,f)?c.set("snapToLines",!1):null,c.alt(a,f,["auto"]),2===e.length&&c.alt("lineAlign",e[1],["start","middle","end"]);break;case"position":e=b.split(","),c.percent(a,e[0]),2===e.length&&c.alt("positionAlign",e[1],["start","middle","end"]);break;case"size":c.percent(a,b);break;case"align":c.alt(a,b,["start","middle","end","left","right"])}},/:/,/\s/),b.region=c.get("region",null),b.vertical=c.get("vertical",""),b.line=c.get("line","auto"),b.lineAlign=c.get("lineAlign","start"),b.snapToLines=c.get("snapToLines",!0),b.size=c.get("size",100),b.align=c.get("align","middle"),b.position=c.get("position",{start:0,left:0,middle:50,end:100,right:100},b.align),b.positionAlign=c.get("positionAlign",{start:"start",left:"start",middle:"middle",end:"end",right:"end"},b.align)}function j(){a=a.replace(/^\s+/,"")}var k=a;if(j(),f.startTime=h(),j(),"-->"!==a.substr(0,3))throw new b(b.Errors.BadTimeStamp,"Malformed time stamp (time stamps must be separated by '-->'): "+k);a=a.substr(3),j(),f.endTime=h(),j(),i(a,f)}function g(a,b){function d(){function a(a){return b=b.substr(a.length),a}if(!b)return null;var c=b.match(/^([^<]*)(<[^>]+>?)?/);return a(c[1]?c[1]:c[2])}function e(a){return p[a]}function f(a){for(;o=a.match(/&(amp|lt|gt|lrm|rlm|nbsp);/);)a=a.replace(o[0],e);return a}function g(a,b){return!s[b.localName]||s[b.localName]===a.localName}function h(b,c){var d=q[b];if(!d)return null;var e=a.document.createElement(d);e.localName=d;var f=r[b];return f&&c&&(e[f]=c.trim()),e}for(var i,j=a.document.createElement("div"),k=j,l=[];null!==(i=d());)if("<"!==i[0])k.appendChild(a.document.createTextNode(f(i)));else{if("/"===i[1]){l.length&&l[l.length-1]===i.substr(2).replace(">","")&&(l.pop(),k=k.parentNode);continue}var m,n=c(i.substr(1,i.length-2));if(n){m=a.document.createProcessingInstruction("timestamp",n),k.appendChild(m);continue}var o=i.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/);if(!o)continue;if(m=h(o[1],o[3]),!m)continue;if(!g(k,m))continue;o[2]&&(m.className=o[2].substr(1).replace("."," ")),l.push(o[1]),k.appendChild(m),k=m}return j}function h(a){function b(a,b){for(var c=b.childNodes.length-1;c>=0;c--)a.push(b.childNodes[c])}function c(a){if(!a||!a.length)return null;var d=a.pop(),e=d.textContent||d.innerText;if(e){var f=e.match(/^.*(\n|\r)/);return f?(a.length=0,f[0]):e}return"ruby"===d.tagName?c(a):d.childNodes?(b(a,d),c(a)):void 0}var d,e=[],f="";if(!a||!a.childNodes)return"ltr";for(b(e,a);f=c(e);)for(var g=0;g<f.length;g++){d=f.charCodeAt(g);for(var h=0;h<t.length;h++)if(t[h]===d)return"rtl"}return"ltr"}function i(a){if("number"==typeof a.line&&(a.snapToLines||a.line>=0&&a.line<=100))return a.line;if(!a.track||!a.track.textTrackList||!a.track.textTrackList.mediaElement)return-1;for(var b=a.track,c=b.textTrackList,d=0,e=0;e<c.length&&c[e]!==b;e++)"showing"===c[e].mode&&d++;return-1*++d}function j(){}function k(a,b,c){var d=/MSIE\s8\.0/.test(navigator.userAgent),e="rgba(255, 255, 255, 1)",f="rgba(0, 0, 0, 0.8)";d&&(e="rgb(255, 255, 255)",f="rgb(0, 0, 0)"),j.call(this),this.cue=b,this.cueDiv=g(a,b.text);var i={color:e,backgroundColor:f,position:"relative",left:0,right:0,top:0,bottom:0,display:"inline"};d||(i.writingMode=""===b.vertical?"horizontal-tb":"lr"===b.vertical?"vertical-lr":"vertical-rl",i.unicodeBidi="plaintext"),this.applyStyles(i,this.cueDiv),this.div=a.document.createElement("div"),i={textAlign:"middle"===b.align?"center":b.align,font:c.font,whiteSpace:"pre-line",position:"absolute"},d||(i.direction=h(this.cueDiv),i.writingMode=""===b.vertical?"horizontal-tb":"lr"===b.vertical?"vertical-lr":"vertical-rl".stylesunicodeBidi="plaintext"),this.applyStyles(i),this.div.appendChild(this.cueDiv);var k=0;switch(b.positionAlign){case"start":k=b.position;break;case"middle":k=b.position-b.size/2;break;case"end":k=b.position-b.size}this.applyStyles(""===b.vertical?{left:this.formatStyle(k,"%"),width:this.formatStyle(b.size,"%")}:{top:this.formatStyle(k,"%"),height:this.formatStyle(b.size,"%")}),this.move=function(a){this.applyStyles({top:this.formatStyle(a.top,"px"),bottom:this.formatStyle(a.bottom,"px"),left:this.formatStyle(a.left,"px"),right:this.formatStyle(a.right,"px"),height:this.formatStyle(a.height,"px"),width:this.formatStyle(a.width,"px")})}}function l(a){var b,c,d,e,f=/MSIE\s8\.0/.test(navigator.userAgent);if(a.div){c=a.div.offsetHeight,d=a.div.offsetWidth,e=a.div.offsetTop;var g=(g=a.div.childNodes)&&(g=g[0])&&g.getClientRects&&g.getClientRects();a=a.div.getBoundingClientRect(),b=g?Math.max(g[0]&&g[0].height||0,a.height/g.length):0}this.left=a.left,this.right=a.right,this.top=a.top||e,this.height=a.height||c,this.bottom=a.bottom||e+(a.height||c),this.width=a.width||d,this.lineHeight=void 0!==b?b:a.lineHeight,f&&!this.lineHeight&&(this.lineHeight=13)}function m(a,b,c,d){function e(a,b){for(var e,f=new l(a),g=1,h=0;h<b.length;h++){for(;a.overlapsOppositeAxis(c,b[h])||a.within(c)&&a.overlapsAny(d);)a.move(b[h]);if(a.within(c))return a;var i=a.intersectPercentage(c);g>i&&(e=new l(a),g=i),a=new l(f)}return e||f}var f=new l(b),g=b.cue,h=i(g),j=[];if(g.snapToLines){var k;switch(g.vertical){case"":j=["+y","-y"],k="height";break;case"rl":j=["+x","-x"],k="width";break;case"lr":j=["-x","+x"],k="width"}var m=f.lineHeight,n=m*Math.round(h),o=c[k]+m,p=j[0];Math.abs(n)>o&&(n=0>n?-1:1,n*=Math.ceil(o/m)*m),0>h&&(n+=""===g.vertical?c.height:c.width,j=j.reverse()),f.move(p,n)}else{var q=f.lineHeight/c.height*100;switch(g.lineAlign){case"middle":h-=q/2;break;case"end":h-=q}switch(g.vertical){case"":b.applyStyles({top:b.formatStyle(h,"%")});break;case"rl":b.applyStyles({left:b.formatStyle(h,"%")});break;case"lr":b.applyStyles({right:b.formatStyle(h,"%")})}j=["+y","-x","+x","-y"],f=new l(b)}var r=e(f,j);b.move(r.toCSSCompatValues(c))}function n(){}var o=Object.create||function(){function a(){}return function(b){if(1!==arguments.length)throw new Error("Object.create shim only accepts one parameter.");return a.prototype=b,new a}}();b.prototype=o(Error.prototype),b.prototype.constructor=b,b.Errors={BadSignature:{code:0,message:"Malformed WebVTT signature."},BadTimeStamp:{code:1,message:"Malformed time stamp."}},d.prototype={set:function(a,b){this.get(a)||""===b||(this.values[a]=b)},get:function(a,b,c){return c?this.has(a)?this.values[a]:b[c]:this.has(a)?this.values[a]:b},has:function(a){return a in this.values},alt:function(a,b,c){for(var d=0;d<c.length;++d)if(b===c[d]){this.set(a,b);break}},integer:function(a,b){/^-?\d+$/.test(b)&&this.set(a,parseInt(b,10))},percent:function(a,b){var c;return(c=b.match(/^([\d]{1,3})(\.[\d]*)?%$/))&&(b=parseFloat(b),
24
+ b>=0&&100>=b)?(this.set(a,b),!0):!1}};var p={"&amp;":"&","&lt;":"<","&gt;":">","&lrm;":"‎","&rlm;":"‏","&nbsp;":" "},q={c:"span",i:"i",b:"b",u:"u",ruby:"ruby",rt:"rt",v:"span",lang:"span"},r={v:"title",lang:"lang"},s={rt:"ruby"},t=[1470,1472,1475,1478,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1520,1521,1522,1523,1524,1544,1547,1549,1563,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1645,1646,1647,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1765,1766,1774,1775,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1807,1808,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1969,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2e3,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2036,2037,2042,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2074,2084,2088,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2142,2208,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,8207,64285,64287,64288,64289,64290,64291,64292,64293,64294,64295,64296,64298,64299,64300,64301,64302,64303,64304,64305,64306,64307,64308,64309,64310,64312,64313,64314,64315,64316,64318,64320,64321,64323,64324,64326,64327,64328,64329,64330,64331,64332,64333,64334,64335,64336,64337,64338,64339,64340,64341,64342,64343,64344,64345,64346,64347,64348,64349,64350,64351,64352,64353,64354,64355,64356,64357,64358,64359,64360,64361,64362,64363,64364,64365,64366,64367,64368,64369,64370,64371,64372,64373,64374,64375,64376,64377,64378,64379,64380,64381,64382,64383,64384,64385,64386,64387,64388,64389,64390,64391,64392,64393,64394,64395,64396,64397,64398,64399,64400,64401,64402,64403,64404,64405,64406,64407,64408,64409,64410,64411,64412,64413,64414,64415,64416,64417,64418,64419,64420,64421,64422,64423,64424,64425,64426,64427,64428,64429,64430,64431,64432,64433,64434,64435,64436,64437,64438,64439,64440,64441,64442,64443,64444,64445,64446,64447,64448,64449,64467,64468,64469,64470,64471,64472,64473,64474,64475,64476,64477,64478,64479,64480,64481,64482,64483,64484,64485,64486,64487,64488,64489,64490,64491,64492,64493,64494,64495,64496,64497,64498,64499,64500,64501,64502,64503,64504,64505,64506,64507,64508,64509,64510,64511,64512,64513,64514,64515,64516,64517,64518,64519,64520,64521,64522,64523,64524,64525,64526,64527,64528,64529,64530,64531,64532,64533,64534,64535,64536,64537,64538,64539,64540,64541,64542,64543,64544,64545,64546,64547,64548,64549,64550,64551,64552,64553,64554,64555,64556,64557,64558,64559,64560,64561,64562,64563,64564,64565,64566,64567,64568,64569,64570,64571,64572,64573,64574,64575,64576,64577,64578,64579,64580,64581,64582,64583,64584,64585,64586,64587,64588,64589,64590,64591,64592,64593,64594,64595,64596,64597,64598,64599,64600,64601,64602,64603,64604,64605,64606,64607,64608,64609,64610,64611,64612,64613,64614,64615,64616,64617,64618,64619,64620,64621,64622,64623,64624,64625,64626,64627,64628,64629,64630,64631,64632,64633,64634,64635,64636,64637,64638,64639,64640,64641,64642,64643,64644,64645,64646,64647,64648,64649,64650,64651,64652,64653,64654,64655,64656,64657,64658,64659,64660,64661,64662,64663,64664,64665,64666,64667,64668,64669,64670,64671,64672,64673,64674,64675,64676,64677,64678,64679,64680,64681,64682,64683,64684,64685,64686,64687,64688,64689,64690,64691,64692,64693,64694,64695,64696,64697,64698,64699,64700,64701,64702,64703,64704,64705,64706,64707,64708,64709,64710,64711,64712,64713,64714,64715,64716,64717,64718,64719,64720,64721,64722,64723,64724,64725,64726,64727,64728,64729,64730,64731,64732,64733,64734,64735,64736,64737,64738,64739,64740,64741,64742,64743,64744,64745,64746,64747,64748,64749,64750,64751,64752,64753,64754,64755,64756,64757,64758,64759,64760,64761,64762,64763,64764,64765,64766,64767,64768,64769,64770,64771,64772,64773,64774,64775,64776,64777,64778,64779,64780,64781,64782,64783,64784,64785,64786,64787,64788,64789,64790,64791,64792,64793,64794,64795,64796,64797,64798,64799,64800,64801,64802,64803,64804,64805,64806,64807,64808,64809,64810,64811,64812,64813,64814,64815,64816,64817,64818,64819,64820,64821,64822,64823,64824,64825,64826,64827,64828,64829,64848,64849,64850,64851,64852,64853,64854,64855,64856,64857,64858,64859,64860,64861,64862,64863,64864,64865,64866,64867,64868,64869,64870,64871,64872,64873,64874,64875,64876,64877,64878,64879,64880,64881,64882,64883,64884,64885,64886,64887,64888,64889,64890,64891,64892,64893,64894,64895,64896,64897,64898,64899,64900,64901,64902,64903,64904,64905,64906,64907,64908,64909,64910,64911,64914,64915,64916,64917,64918,64919,64920,64921,64922,64923,64924,64925,64926,64927,64928,64929,64930,64931,64932,64933,64934,64935,64936,64937,64938,64939,64940,64941,64942,64943,64944,64945,64946,64947,64948,64949,64950,64951,64952,64953,64954,64955,64956,64957,64958,64959,64960,64961,64962,64963,64964,64965,64966,64967,65008,65009,65010,65011,65012,65013,65014,65015,65016,65017,65018,65019,65020,65136,65137,65138,65139,65140,65142,65143,65144,65145,65146,65147,65148,65149,65150,65151,65152,65153,65154,65155,65156,65157,65158,65159,65160,65161,65162,65163,65164,65165,65166,65167,65168,65169,65170,65171,65172,65173,65174,65175,65176,65177,65178,65179,65180,65181,65182,65183,65184,65185,65186,65187,65188,65189,65190,65191,65192,65193,65194,65195,65196,65197,65198,65199,65200,65201,65202,65203,65204,65205,65206,65207,65208,65209,65210,65211,65212,65213,65214,65215,65216,65217,65218,65219,65220,65221,65222,65223,65224,65225,65226,65227,65228,65229,65230,65231,65232,65233,65234,65235,65236,65237,65238,65239,65240,65241,65242,65243,65244,65245,65246,65247,65248,65249,65250,65251,65252,65253,65254,65255,65256,65257,65258,65259,65260,65261,65262,65263,65264,65265,65266,65267,65268,65269,65270,65271,65272,65273,65274,65275,65276,67584,67585,67586,67587,67588,67589,67592,67594,67595,67596,67597,67598,67599,67600,67601,67602,67603,67604,67605,67606,67607,67608,67609,67610,67611,67612,67613,67614,67615,67616,67617,67618,67619,67620,67621,67622,67623,67624,67625,67626,67627,67628,67629,67630,67631,67632,67633,67634,67635,67636,67637,67639,67640,67644,67647,67648,67649,67650,67651,67652,67653,67654,67655,67656,67657,67658,67659,67660,67661,67662,67663,67664,67665,67666,67667,67668,67669,67671,67672,67673,67674,67675,67676,67677,67678,67679,67840,67841,67842,67843,67844,67845,67846,67847,67848,67849,67850,67851,67852,67853,67854,67855,67856,67857,67858,67859,67860,67861,67862,67863,67864,67865,67866,67867,67872,67873,67874,67875,67876,67877,67878,67879,67880,67881,67882,67883,67884,67885,67886,67887,67888,67889,67890,67891,67892,67893,67894,67895,67896,67897,67903,67968,67969,67970,67971,67972,67973,67974,67975,67976,67977,67978,67979,67980,67981,67982,67983,67984,67985,67986,67987,67988,67989,67990,67991,67992,67993,67994,67995,67996,67997,67998,67999,68e3,68001,68002,68003,68004,68005,68006,68007,68008,68009,68010,68011,68012,68013,68014,68015,68016,68017,68018,68019,68020,68021,68022,68023,68030,68031,68096,68112,68113,68114,68115,68117,68118,68119,68121,68122,68123,68124,68125,68126,68127,68128,68129,68130,68131,68132,68133,68134,68135,68136,68137,68138,68139,68140,68141,68142,68143,68144,68145,68146,68147,68160,68161,68162,68163,68164,68165,68166,68167,68176,68177,68178,68179,68180,68181,68182,68183,68184,68192,68193,68194,68195,68196,68197,68198,68199,68200,68201,68202,68203,68204,68205,68206,68207,68208,68209,68210,68211,68212,68213,68214,68215,68216,68217,68218,68219,68220,68221,68222,68223,68352,68353,68354,68355,68356,68357,68358,68359,68360,68361,68362,68363,68364,68365,68366,68367,68368,68369,68370,68371,68372,68373,68374,68375,68376,68377,68378,68379,68380,68381,68382,68383,68384,68385,68386,68387,68388,68389,68390,68391,68392,68393,68394,68395,68396,68397,68398,68399,68400,68401,68402,68403,68404,68405,68416,68417,68418,68419,68420,68421,68422,68423,68424,68425,68426,68427,68428,68429,68430,68431,68432,68433,68434,68435,68436,68437,68440,68441,68442,68443,68444,68445,68446,68447,68448,68449,68450,68451,68452,68453,68454,68455,68456,68457,68458,68459,68460,68461,68462,68463,68464,68465,68466,68472,68473,68474,68475,68476,68477,68478,68479,68608,68609,68610,68611,68612,68613,68614,68615,68616,68617,68618,68619,68620,68621,68622,68623,68624,68625,68626,68627,68628,68629,68630,68631,68632,68633,68634,68635,68636,68637,68638,68639,68640,68641,68642,68643,68644,68645,68646,68647,68648,68649,68650,68651,68652,68653,68654,68655,68656,68657,68658,68659,68660,68661,68662,68663,68664,68665,68666,68667,68668,68669,68670,68671,68672,68673,68674,68675,68676,68677,68678,68679,68680,126464,126465,126466,126467,126469,126470,126471,126472,126473,126474,126475,126476,126477,126478,126479,126480,126481,126482,126483,126484,126485,126486,126487,126488,126489,126490,126491,126492,126493,126494,126495,126497,126498,126500,126503,126505,126506,126507,126508,126509,126510,126511,126512,126513,126514,126516,126517,126518,126519,126521,126523,126530,126535,126537,126539,126541,126542,126543,126545,126546,126548,126551,126553,126555,126557,126559,126561,126562,126564,126567,126568,126569,126570,126572,126573,126574,126575,126576,126577,126578,126580,126581,126582,126583,126585,126586,126587,126588,126590,126592,126593,126594,126595,126596,126597,126598,126599,126600,126601,126603,126604,126605,126606,126607,126608,126609,126610,126611,126612,126613,126614,126615,126616,126617,126618,126619,126625,126626,126627,126629,126630,126631,126632,126633,126635,126636,126637,126638,126639,126640,126641,126642,126643,126644,126645,126646,126647,126648,126649,126650,126651,1114109];j.prototype.applyStyles=function(a,b){b=b||this.div;for(var c in a)a.hasOwnProperty(c)&&(b.style[c]=a[c])},j.prototype.formatStyle=function(a,b){return 0===a?0:a+b},k.prototype=o(j.prototype),k.prototype.constructor=k,l.prototype.move=function(a,b){switch(b=void 0!==b?b:this.lineHeight,a){case"+x":this.left+=b,this.right+=b;break;case"-x":this.left-=b,this.right-=b;break;case"+y":this.top+=b,this.bottom+=b;break;case"-y":this.top-=b,this.bottom-=b}},l.prototype.overlaps=function(a){return this.left<a.right&&this.right>a.left&&this.top<a.bottom&&this.bottom>a.top},l.prototype.overlapsAny=function(a){for(var b=0;b<a.length;b++)if(this.overlaps(a[b]))return!0;return!1},l.prototype.within=function(a){return this.top>=a.top&&this.bottom<=a.bottom&&this.left>=a.left&&this.right<=a.right},l.prototype.overlapsOppositeAxis=function(a,b){switch(b){case"+x":return this.left<a.left;case"-x":return this.right>a.right;case"+y":return this.top<a.top;case"-y":return this.bottom>a.bottom}},l.prototype.intersectPercentage=function(a){var b=Math.max(0,Math.min(this.right,a.right)-Math.max(this.left,a.left)),c=Math.max(0,Math.min(this.bottom,a.bottom)-Math.max(this.top,a.top)),d=b*c;return d/(this.height*this.width)},l.prototype.toCSSCompatValues=function(a){return{top:this.top-a.top,bottom:a.bottom-this.bottom,left:this.left-a.left,right:a.right-this.right,height:this.height,width:this.width}},l.getSimpleBoxPosition=function(a){var b=a.div?a.div.offsetHeight:a.tagName?a.offsetHeight:0,c=a.div?a.div.offsetWidth:a.tagName?a.offsetWidth:0,d=a.div?a.div.offsetTop:a.tagName?a.offsetTop:0;a=a.div?a.div.getBoundingClientRect():a.tagName?a.getBoundingClientRect():a;var e={left:a.left,right:a.right,top:a.top||d,height:a.height||b,bottom:a.bottom||d+(a.height||b),width:a.width||c};return e},n.StringDecoder=function(){return{decode:function(a){if(!a)return"";if("string"!=typeof a)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(a))}}},n.convertCueToDOMTree=function(a,b){return a&&b?g(a,b):null};var u=.05,v="sans-serif",w="1.5%";n.processCues=function(a,b,c){function d(a){for(var b=0;b<a.length;b++)if(a[b].hasBeenReset||!a[b].displayState)return!0;return!1}if(!a||!b||!c)return null;for(;c.firstChild;)c.removeChild(c.firstChild);var e=a.document.createElement("div");if(e.style.position="absolute",e.style.left="0",e.style.right="0",e.style.top="0",e.style.bottom="0",e.style.margin=w,c.appendChild(e),d(b)){var f=[],g=l.getSimpleBoxPosition(e),h=Math.round(g.height*u*100)/100,i={font:h+"px "+v};!function(){for(var c,d,h=0;h<b.length;h++)d=b[h],c=new k(a,d,i),e.appendChild(c.div),m(a,c,g,f),d.displayState=c.div,f.push(l.getSimpleBoxPosition(c))}()}else for(var j=0;j<b.length;j++)e.appendChild(b[j].displayState)},n.Parser=function(a,b,c){c||(c=b,b={}),b||(b={}),this.window=a,this.vttjs=b,this.state="INITIAL",this.buffer="",this.decoder=c||new TextDecoder("utf8"),this.regionList=[]},n.Parser.prototype={reportOrThrowError:function(a){if(!(a instanceof b))throw a;this.onparsingerror&&this.onparsingerror(a)},parse:function(a){function c(){for(var a=i.buffer,b=0;b<a.length&&"\r"!==a[b]&&"\n"!==a[b];)++b;var c=a.substr(0,b);return"\r"===a[b]&&++b,"\n"===a[b]&&++b,i.buffer=a.substr(b),c}function g(a){var b=new d;if(e(a,function(a,c){switch(a){case"id":b.set(a,c);break;case"width":b.percent(a,c);break;case"lines":b.integer(a,c);break;case"regionanchor":case"viewportanchor":var e=c.split(",");if(2!==e.length)break;var f=new d;if(f.percent("x",e[0]),f.percent("y",e[1]),!f.has("x")||!f.has("y"))break;b.set(a+"X",f.get("x")),b.set(a+"Y",f.get("y"));break;case"scroll":b.alt(a,c,["up"])}},/=/,/\s/),b.has("id")){var c=new(i.vttjs.VTTRegion||i.window.VTTRegion);c.width=b.get("width",100),c.lines=b.get("lines",3),c.regionAnchorX=b.get("regionanchorX",0),c.regionAnchorY=b.get("regionanchorY",100),c.viewportAnchorX=b.get("viewportanchorX",0),c.viewportAnchorY=b.get("viewportanchorY",100),c.scroll=b.get("scroll",""),i.onregion&&i.onregion(c),i.regionList.push({id:b.get("id"),region:c})}}function h(a){e(a,function(a,b){switch(a){case"Region":g(b)}},/:/)}var i=this;a&&(i.buffer+=i.decoder.decode(a,{stream:!0}));try{var j;if("INITIAL"===i.state){if(!/\r\n|\n/.test(i.buffer))return this;j=c();var k=j.match(/^WEBVTT([ \t].*)?$/);if(!k||!k[0])throw new b(b.Errors.BadSignature);i.state="HEADER"}for(var l=!1;i.buffer;){if(!/\r\n|\n/.test(i.buffer))return this;switch(l?l=!1:j=c(),i.state){case"HEADER":/:/.test(j)?h(j):j||(i.state="ID");continue;case"NOTE":j||(i.state="ID");continue;case"ID":if(/^NOTE($|[ \t])/.test(j)){i.state="NOTE";break}if(!j)continue;if(i.cue=new(i.vttjs.VTTCue||i.window.VTTCue)(0,0,""),i.state="CUE",-1===j.indexOf("-->")){i.cue.id=j;continue}case"CUE":try{f(j,i.cue,i.regionList)}catch(m){i.reportOrThrowError(m),i.cue=null,i.state="BADCUE";continue}i.state="CUETEXT";continue;case"CUETEXT":var n=-1!==j.indexOf("-->");if(!j||n&&(l=!0)){i.oncue&&i.oncue(i.cue),i.cue=null,i.state="ID";continue}i.cue.text&&(i.cue.text+="\n"),i.cue.text+=j;continue;case"BADCUE":j||(i.state="ID");continue}}}catch(m){i.reportOrThrowError(m),"CUETEXT"===i.state&&i.cue&&i.oncue&&i.oncue(i.cue),i.cue=null,i.state="INITIAL"===i.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var a=this;try{if(a.buffer+=a.decoder.decode(),(a.cue||"HEADER"===a.state)&&(a.buffer+="\n\n",a.parse()),"INITIAL"===a.state)throw new b(b.Errors.BadSignature)}catch(c){a.reportOrThrowError(c)}return a.onflush&&a.onflush(),this}},a.WebVTT=n}(this,this.vttjs||{});
25
+ //# sourceMappingURL=video.min.js.map