webshims-rails 1.14.3 → 1.14.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/webshims-rails/version.rb +2 -2
- data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +4 -0
- data/vendor/assets/javascripts/webshims/polyfiller.js +141 -139
- data/vendor/assets/javascripts/webshims/shims/color-picker.js +1 -3
- data/vendor/assets/javascripts/webshims/shims/combos/1.js +22 -33
- data/vendor/assets/javascripts/webshims/shims/combos/10.js +76 -73
- data/vendor/assets/javascripts/webshims/shims/combos/11.js +73 -61
- data/vendor/assets/javascripts/webshims/shims/combos/12.js +37 -41
- data/vendor/assets/javascripts/webshims/shims/combos/13.js +36 -40
- data/vendor/assets/javascripts/webshims/shims/combos/14.js +7 -7
- data/vendor/assets/javascripts/webshims/shims/combos/15.js +23 -32
- data/vendor/assets/javascripts/webshims/shims/combos/16.js +36 -57
- data/vendor/assets/javascripts/webshims/shims/combos/17.js +73 -61
- data/vendor/assets/javascripts/webshims/shims/combos/18.js +611 -4604
- data/vendor/assets/javascripts/webshims/shims/combos/2.js +27 -47
- data/vendor/assets/javascripts/webshims/shims/combos/21.js +61 -31
- data/vendor/assets/javascripts/webshims/shims/combos/22.js +24 -16
- data/vendor/assets/javascripts/webshims/shims/combos/23.js +13 -25
- data/vendor/assets/javascripts/webshims/shims/combos/25.js +40 -27
- data/vendor/assets/javascripts/webshims/shims/combos/27.js +167 -166
- data/vendor/assets/javascripts/webshims/shims/combos/28.js +11 -12
- data/vendor/assets/javascripts/webshims/shims/combos/29.js +5 -5
- data/vendor/assets/javascripts/webshims/shims/combos/3.js +14 -22
- data/vendor/assets/javascripts/webshims/shims/combos/30.js +16 -24
- data/vendor/assets/javascripts/webshims/shims/combos/31.js +14 -22
- data/vendor/assets/javascripts/webshims/shims/combos/33.js +2 -2
- data/vendor/assets/javascripts/webshims/shims/combos/34.js +27 -28
- data/vendor/assets/javascripts/webshims/shims/combos/4.js +5 -14
- data/vendor/assets/javascripts/webshims/shims/combos/5.js +78 -66
- data/vendor/assets/javascripts/webshims/shims/combos/6.js +80 -68
- data/vendor/assets/javascripts/webshims/shims/combos/7.js +29 -49
- data/vendor/assets/javascripts/webshims/shims/combos/8.js +27 -47
- data/vendor/assets/javascripts/webshims/shims/combos/9.js +78 -75
- data/vendor/assets/javascripts/webshims/shims/combos/97.js +42 -29
- data/vendor/assets/javascripts/webshims/shims/combos/98.js +116 -40
- data/vendor/assets/javascripts/webshims/shims/combos/99.js +112 -38
- data/vendor/assets/javascripts/webshims/shims/dom-extend.js +3 -12
- data/vendor/assets/javascripts/webshims/shims/es5.js +4 -4
- data/vendor/assets/javascripts/webshims/shims/es6.js +1887 -0
- data/vendor/assets/javascripts/webshims/shims/form-core.js +9 -8
- data/vendor/assets/javascripts/webshims/shims/form-datalist.js +2 -2
- data/vendor/assets/javascripts/webshims/shims/form-inputmode.js +52 -0
- data/vendor/assets/javascripts/webshims/shims/form-message.js +2 -2
- data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +4 -5
- data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +73 -61
- data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +7 -8
- data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +164 -163
- data/vendor/assets/javascripts/webshims/shims/form-validation.js +121 -144
- data/vendor/assets/javascripts/webshims/shims/jme/_icons.scss +3 -0
- data/vendor/assets/javascripts/webshims/shims/jme/alternate-media.js +184 -0
- data/vendor/assets/javascripts/webshims/shims/jme/{b.js → base.js} +38 -27
- data/vendor/assets/javascripts/webshims/shims/jme/controls.css +129 -39
- data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +145 -44
- data/vendor/assets/javascripts/webshims/shims/jme/jme.eot +0 -0
- data/vendor/assets/javascripts/webshims/shims/jme/jme.svg +0 -0
- data/vendor/assets/javascripts/webshims/shims/jme/jme.ttf +0 -0
- data/vendor/assets/javascripts/webshims/shims/jme/jme.woff +0 -0
- data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols-lazy.js +448 -90
- data/vendor/assets/javascripts/webshims/shims/jme/{c.js → mediacontrols.js} +74 -11
- data/vendor/assets/javascripts/webshims/shims/jme/{p.js → playlist.js} +4 -2
- data/vendor/assets/javascripts/webshims/shims/matchMedia.js +122 -0
- data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +12 -24
- data/vendor/assets/javascripts/webshims/shims/mediaelement-debug.js +1 -1
- data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +37 -15
- data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +3 -3
- data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +4 -5
- data/vendor/assets/javascripts/webshims/shims/picture.js +13 -54
- data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +13 -20
- data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +24 -18
- data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +32 -10
- data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +43 -47
- data/vendor/assets/javascripts/webshims/shims/styles/shim.css +30 -18
- data/vendor/assets/javascripts/webshims/shims/styles/transparent.png +0 -0
- data/vendor/assets/javascripts/webshims/shims/styles/widget.eot +0 -0
- data/vendor/assets/javascripts/webshims/shims/styles/widget.svg +0 -0
- data/vendor/assets/javascripts/webshims/shims/styles/widget.ttf +0 -0
- data/vendor/assets/javascripts/webshims/shims/styles/widget.woff +0 -0
- data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
- data/vendor/assets/javascripts/webshims/shims/swfmini.js +1 -1
- data/vendor/assets/javascripts/webshims/shims/track-ui.js +4 -5
- data/vendor/assets/javascripts/webshims/shims/track.js +24 -16
- metadata +9 -8
- data/vendor/assets/javascripts/webshims/shims/combos/19.js +0 -4745
- data/vendor/assets/javascripts/webshims/shims/combos/20.js +0 -4522
- data/vendor/assets/javascripts/webshims/shims/combos/32.js +0 -2443
- data/vendor/assets/javascripts/webshims/shims/combos/comboinfo.json +0 -1
@@ -1,4 +1,4 @@
|
|
1
|
-
webshims.register('
|
1
|
+
webshims.register('jmebase', function($, webshims, window, doc, undefined){
|
2
2
|
"use strict";
|
3
3
|
var props = {};
|
4
4
|
var fns = {};
|
@@ -9,8 +9,11 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
9
9
|
|
10
10
|
webshims.cfg.mediaelement.jme = options;
|
11
11
|
|
12
|
+
if(!$.jme){
|
13
|
+
$.jme = {};
|
14
|
+
}
|
12
15
|
|
13
|
-
$.jme
|
16
|
+
$.extend($.jme, {
|
14
17
|
pluginsClasses: [],
|
15
18
|
pluginsSel: '',
|
16
19
|
plugins: {},
|
@@ -56,6 +59,10 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
56
59
|
}
|
57
60
|
this.runPlugin('.'+plugin.className);
|
58
61
|
},
|
62
|
+
configmenuPlugins: {},
|
63
|
+
addToConfigmenu: function(name, create){
|
64
|
+
this.configmenuPlugins[name] = create;
|
65
|
+
},
|
59
66
|
defineMethod: function(name, fn){
|
60
67
|
fns[name] = fn;
|
61
68
|
},
|
@@ -95,7 +102,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
95
102
|
}
|
96
103
|
}
|
97
104
|
}
|
98
|
-
};
|
105
|
+
});
|
99
106
|
|
100
107
|
$.fn.jmeProp = function(name, value){
|
101
108
|
return $.access( this, $.jme.prop, name, value, arguments.length > 1 );
|
@@ -105,6 +112,10 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
105
112
|
var args = slice.call( arguments, 1 );
|
106
113
|
var ret;
|
107
114
|
this.each(function(){
|
115
|
+
if(!$.jme.data(this).media){
|
116
|
+
$(this).closest(baseSelector).jmePlayer();
|
117
|
+
webshims.warn('jmeFn called to early or on wrong element!');
|
118
|
+
}
|
108
119
|
ret = (fns[fn] || $.prop(this, fn)).apply(this, args);
|
109
120
|
if(ret !== undefined){
|
110
121
|
return false;
|
@@ -182,11 +193,9 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
182
193
|
$.fn.jmePlayer = function(opts){
|
183
194
|
|
184
195
|
return this.each(function(){
|
185
|
-
if(opts){
|
186
|
-
$.jme.data(this, $.extend(true, {}, opts));
|
187
|
-
}
|
188
196
|
|
189
|
-
|
197
|
+
|
198
|
+
var mediaUpdateFn, canPlay, removeCanPlay, canplayTimer, lastState, stopEmptiedEvent, forceRender;
|
190
199
|
var media = $('audio, video', this).eq(0);
|
191
200
|
var base = $(this);
|
192
201
|
|
@@ -198,7 +207,9 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
198
207
|
mediaData.player = base;
|
199
208
|
mediaData.media = media;
|
200
209
|
if(!jmeData.media){
|
201
|
-
|
210
|
+
forceRender = function(){
|
211
|
+
base[0].className = base[0].className;
|
212
|
+
};
|
202
213
|
removeCanPlay = function(){
|
203
214
|
media.off('canplay', canPlay);
|
204
215
|
clearTimeout(canplayTimer);
|
@@ -257,6 +268,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
257
268
|
if(state){
|
258
269
|
lastState = state;
|
259
270
|
base.attr('data-state', state);
|
271
|
+
setTimeout(forceRender);
|
260
272
|
}
|
261
273
|
};
|
262
274
|
|
@@ -340,16 +352,16 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
340
352
|
return [{src: src}];
|
341
353
|
}
|
342
354
|
srces = $.map($('source', data.media).get(), function(source){
|
355
|
+
var i, len;
|
343
356
|
var src = {
|
344
357
|
src: $.prop(source, 'src')
|
345
358
|
};
|
346
|
-
var
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
src.type = tmp;
|
359
|
+
var attributes = source.attributes;
|
360
|
+
|
361
|
+
for(i = 0, len = attributes.length; i < len; i++){
|
362
|
+
if(!('specified' in attributes[i]) || attributes[i].specified){
|
363
|
+
src[attributes[i].nodeName] = attributes[i].nodeValue;
|
364
|
+
}
|
353
365
|
}
|
354
366
|
return src;
|
355
367
|
});
|
@@ -421,18 +433,17 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
421
433
|
data.player.triggerHandler('controlsadded');
|
422
434
|
}
|
423
435
|
});
|
424
|
-
|
425
|
-
webshims.
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
}
|
436
|
+
|
437
|
+
webshims.ready('DOM mediaelement', function(){
|
438
|
+
webshims.isReady('jme', true);
|
439
|
+
webshims.addReady($.jme.initJME);
|
440
|
+
webshims.isReady('jme-base', true);
|
441
|
+
|
442
|
+
if(webshims.cfg.debug !== false && document.getElementsByTagName('video').length && !document.querySelector(baseSelector)){
|
443
|
+
webshims.warn("found video element but video wasn't wrapped inside a ."+ baseSelector +" element. Will not add control UI");
|
444
|
+
}
|
445
|
+
});
|
446
|
+
|
436
447
|
});
|
437
448
|
;webshims.register('mediacontrols', function($, webshims, window){
|
438
449
|
"use strict";
|
@@ -441,9 +452,9 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
441
452
|
var options = webshims.cfg.mediaelement.jme;
|
442
453
|
var baseSelector = options.selector;
|
443
454
|
var jme = $.jme;
|
444
|
-
var
|
455
|
+
var unknownStructure = '<div class="{%class%}"></div>';
|
445
456
|
var btnStructure = '<button class="{%class%}" type="button" aria-label="{%text%}"></button>';
|
446
|
-
var slideStructure = '<div class="{%class%} media-range"></div>';
|
457
|
+
var slideStructure = '<div class="{%class%} media-range" aria-label="{%text%}"></div>';
|
447
458
|
var timeStructure = '<div class="{%class%}">00:00</div>';
|
448
459
|
|
449
460
|
var noVolumeClass = (function(){
|
@@ -475,7 +486,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
475
486
|
if(plugin){
|
476
487
|
if(!plugin.structure){
|
477
488
|
webshims.warn('no structure option provided for plugin: '+ matchName +'. Fallback to standard div');
|
478
|
-
plugin.structure =
|
489
|
+
plugin.structure = unknownStructure;
|
479
490
|
}
|
480
491
|
return plugin.structure.replace('{%class%}', matchName).replace('{%text%}', plugin.text || '');
|
481
492
|
}
|
@@ -580,18 +591,55 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
580
591
|
}
|
581
592
|
};
|
582
593
|
})();
|
594
|
+
var $poster = $('<div class="ws-poster" />').insertAfter(data.media);
|
583
595
|
var posterState = (function(){
|
584
|
-
var lastPosterState, lastYoutubeState;
|
596
|
+
var lastPosterState, lastYoutubeState, lastPoster;
|
585
597
|
var hasFlash = window.swfmini && swfmini.hasFlashPlayerVersion('10.0.3');
|
586
598
|
var regYt = /youtube\.com\/[watch\?|v\/]+/i;
|
599
|
+
|
600
|
+
var isInitial = data.media.prop('paused');
|
601
|
+
if(isInitial){
|
602
|
+
data.player.addClass('initial-state');
|
603
|
+
}
|
604
|
+
if(!('backgroundSize' in $poster[0].style)){
|
605
|
+
data.player.addClass('no-backgroundsize');
|
606
|
+
}
|
607
|
+
data.media.on('playing waiting seeked seeking', function(){
|
608
|
+
if(isInitial){
|
609
|
+
isInitial = false;
|
610
|
+
data.player.removeClass('initial-state');
|
611
|
+
}
|
612
|
+
});
|
587
613
|
return function(){
|
588
|
-
var
|
589
|
-
var
|
614
|
+
var poster = data.media.attr('poster');
|
615
|
+
var hasPoster = !!poster;
|
616
|
+
var currentSrc = data.media.prop('currentSrc') || '';
|
617
|
+
var isYt = regYt.test(currentSrc);
|
618
|
+
var hasYt = (hasFlash && hasPoster) ? false : isYt;
|
619
|
+
|
620
|
+
if(!hasPoster && isYt){
|
621
|
+
poster = currentSrc.match(/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i) || '';
|
622
|
+
if(poster){
|
623
|
+
poster = 'https://img.youtube.com/vi/'+ poster[1] +'/0.jpg';
|
624
|
+
hasPoster = !!poster;
|
625
|
+
}
|
626
|
+
}
|
627
|
+
|
628
|
+
if(lastPoster !== poster){
|
629
|
+
lastPoster = poster;
|
630
|
+
$poster[0].style.backgroundImage = poster ? 'url('+poster+')' : '';
|
631
|
+
}
|
632
|
+
|
590
633
|
if(lastPosterState !== hasPoster){
|
591
634
|
lastPosterState = hasPoster;
|
592
635
|
data.player[hasPoster ? 'removeClass' : 'addClass']('no-poster');
|
593
636
|
}
|
594
637
|
|
638
|
+
if(data.media.prop('paused')){
|
639
|
+
data.player.addClass('initial-state');
|
640
|
+
isInitial = true;
|
641
|
+
}
|
642
|
+
|
595
643
|
if(lastYoutubeState !== hasYt){
|
596
644
|
lastYoutubeState = hasYt;
|
597
645
|
data.player[hasYt ? 'addClass' : 'removeClass']('has-ytposter');
|
@@ -602,13 +650,15 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
602
650
|
|
603
651
|
userActivity._create(data.player, data.media, data.player);
|
604
652
|
|
605
|
-
data.media.on('emptied',
|
653
|
+
data.media.on('emptied loadstart', function(){
|
654
|
+
setTimeout(posterState);
|
655
|
+
});
|
606
656
|
|
607
657
|
playerSize();
|
608
658
|
posterState();
|
609
659
|
webshims.ready('dom-support', function(){
|
610
660
|
data.player.onWSOff('updateshadowdom', playerSize);
|
611
|
-
controls.add(data._controlbar).addClass(webshims.shadowClass);
|
661
|
+
controls.add(data._controlbar).add($poster).addClass(webshims.shadowClass);
|
612
662
|
webshims.addShadowDom();
|
613
663
|
});
|
614
664
|
}
|
@@ -641,7 +691,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
641
691
|
|
642
692
|
jme.registerPlugin('volume-slider', {
|
643
693
|
structure: slideStructure,
|
644
|
-
|
694
|
+
text: 'volume level',
|
645
695
|
_create: lazyLoadPlugin()
|
646
696
|
});
|
647
697
|
|
@@ -651,6 +701,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
651
701
|
options: {
|
652
702
|
format: ['mm', 'ss']
|
653
703
|
},
|
704
|
+
text: 'time position',
|
654
705
|
_create: lazyLoadPlugin()
|
655
706
|
});
|
656
707
|
|
@@ -725,12 +776,18 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
725
776
|
_create: lazyLoadPlugin()
|
726
777
|
});
|
727
778
|
|
779
|
+
jme.registerPlugin('mediaconfigmenu', {
|
780
|
+
structure: btnStructure,
|
781
|
+
text: 'configuration',
|
782
|
+
_create: lazyLoadPlugin()
|
783
|
+
});
|
784
|
+
|
728
785
|
|
729
786
|
jme.registerPlugin('captions', {
|
730
787
|
structure: btnStructure,
|
731
788
|
text: 'subtitles',
|
732
789
|
_create: function(control, media, base){
|
733
|
-
var trackElems = media.find('track');
|
790
|
+
var trackElems = media.find('track').filter(':not([kind]), [kind="subtitles"], [data-kind="subtitles"], [kind="captions"], [data-kind="captions"]');
|
734
791
|
control.wsclonedcheckbox = $(control).clone().attr({role: 'checkbox'}).insertBefore(control);
|
735
792
|
base.attr('data-tracks', trackElems.length > 1 ? 'many' : trackElems.length);
|
736
793
|
control.attr('aria-haspopup', 'true');
|
@@ -738,9 +795,26 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
738
795
|
}
|
739
796
|
});
|
740
797
|
|
798
|
+
|
799
|
+
jme.registerPlugin('chapters', {
|
800
|
+
structure: btnStructure,
|
801
|
+
text: 'chapters',
|
802
|
+
_create: function(control, media, base){
|
803
|
+
var trackElems = media.find('track').filter('[kind="chapters"], [data-kind="chapters"]');
|
804
|
+
control.attr('aria-haspopup', 'true');
|
805
|
+
if(trackElems.length){
|
806
|
+
webshims._polyfill(['track']);
|
807
|
+
base.addClass('has-chapter-tracks');
|
808
|
+
}
|
809
|
+
lazyLoadPlugin().apply(this, arguments);
|
810
|
+
}
|
811
|
+
});
|
812
|
+
|
813
|
+
|
814
|
+
|
741
815
|
webshims.ready(webshims.cfg.mediaelement.plugins.concat(['mediaelement', 'jme-base']), function(){
|
742
816
|
if(!options.barTemplate){
|
743
|
-
options.barTemplate = '<div class="play-pause-container">{{play-pause}}</div><div class="playlist-container"><div class="playlist-box">{{playlist-prev}}{{playlist-next}}</div></div><div class="currenttime-container">{{currenttime-display}}</div><div class="progress-container">{{time-slider}}</div><div class="duration-container">{{duration-display}}</div><div class="mute-container">{{mute-unmute}}</div><div class="volume-container">{{volume-slider}}</div><div class="subtitle-container"><div class="subtitle-controls">{{captions}}</div></div><div class="fullscreen-container">{{fullscreen}}</div>';
|
817
|
+
options.barTemplate = '<div class="play-pause-container">{{play-pause}}</div><div class="playlist-container"><div class="playlist-box"><div class="playlist-button-container">{{playlist-prev}}</div><div class="playlist-button-container">{{playlist-next}}</div></div></div><div class="currenttime-container">{{currenttime-display}}</div><div class="progress-container">{{time-slider}}</div><div class="duration-container">{{duration-display}}</div><div class="mute-container">{{mute-unmute}}</div><div class="volume-container">{{volume-slider}}</div><div class="chapters-container"><div class="chapters-controls mediamenu-wrapper">{{chapters}}</div></div><div class="subtitle-container mediamenu-wrapper"><div class="subtitle-controls">{{captions}}</div></div><div class="mediaconfig-container"><div class="mediaconfig-controls mediamenu-wrapper">{{mediaconfigmenu}}</div></div><div class="fullscreen-container">{{fullscreen}}</div>';
|
744
818
|
}
|
745
819
|
if(!options.barStructure){
|
746
820
|
options.barStructure = '<div class="jme-media-overlay"></div><div class="jme-controlbar'+ noVolumeClass +'" tabindex="-1"><div class="jme-cb-box"></div></div>';
|
@@ -752,7 +826,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
752
826
|
});
|
753
827
|
webshims.ready('WINDOWLOAD', loadLazy);
|
754
828
|
});
|
755
|
-
;webshims.ready('jme DOM', function(){
|
829
|
+
;webshims.ready('jme-base DOM', function(){
|
756
830
|
"use strict";
|
757
831
|
var webshims = window.webshims;
|
758
832
|
var $ = webshims.$;
|
@@ -1139,7 +1213,9 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
1139
1213
|
$.each(item.tracks || [], function(i, track){
|
1140
1214
|
$('<track />').attr(track).appendTo(media);
|
1141
1215
|
});
|
1142
|
-
|
1216
|
+
if(!item.srces){
|
1217
|
+
item.srces = item;
|
1218
|
+
}
|
1143
1219
|
media.jmeProp('srces', item.srces);
|
1144
1220
|
},
|
1145
1221
|
_getItem: function(item){
|
@@ -1,4 +1,4 @@
|
|
1
|
-
webshims.register('
|
1
|
+
webshims.register('jmebase', function($, webshims, window, doc, undefined){
|
2
2
|
"use strict";
|
3
3
|
var props = {};
|
4
4
|
var fns = {};
|
@@ -9,8 +9,11 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
9
9
|
|
10
10
|
webshims.cfg.mediaelement.jme = options;
|
11
11
|
|
12
|
+
if(!$.jme){
|
13
|
+
$.jme = {};
|
14
|
+
}
|
12
15
|
|
13
|
-
$.jme
|
16
|
+
$.extend($.jme, {
|
14
17
|
pluginsClasses: [],
|
15
18
|
pluginsSel: '',
|
16
19
|
plugins: {},
|
@@ -56,6 +59,10 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
56
59
|
}
|
57
60
|
this.runPlugin('.'+plugin.className);
|
58
61
|
},
|
62
|
+
configmenuPlugins: {},
|
63
|
+
addToConfigmenu: function(name, create){
|
64
|
+
this.configmenuPlugins[name] = create;
|
65
|
+
},
|
59
66
|
defineMethod: function(name, fn){
|
60
67
|
fns[name] = fn;
|
61
68
|
},
|
@@ -95,7 +102,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
95
102
|
}
|
96
103
|
}
|
97
104
|
}
|
98
|
-
};
|
105
|
+
});
|
99
106
|
|
100
107
|
$.fn.jmeProp = function(name, value){
|
101
108
|
return $.access( this, $.jme.prop, name, value, arguments.length > 1 );
|
@@ -105,6 +112,10 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
105
112
|
var args = slice.call( arguments, 1 );
|
106
113
|
var ret;
|
107
114
|
this.each(function(){
|
115
|
+
if(!$.jme.data(this).media){
|
116
|
+
$(this).closest(baseSelector).jmePlayer();
|
117
|
+
webshims.warn('jmeFn called to early or on wrong element!');
|
118
|
+
}
|
108
119
|
ret = (fns[fn] || $.prop(this, fn)).apply(this, args);
|
109
120
|
if(ret !== undefined){
|
110
121
|
return false;
|
@@ -182,11 +193,9 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
182
193
|
$.fn.jmePlayer = function(opts){
|
183
194
|
|
184
195
|
return this.each(function(){
|
185
|
-
if(opts){
|
186
|
-
$.jme.data(this, $.extend(true, {}, opts));
|
187
|
-
}
|
188
196
|
|
189
|
-
|
197
|
+
|
198
|
+
var mediaUpdateFn, canPlay, removeCanPlay, canplayTimer, lastState, stopEmptiedEvent, forceRender;
|
190
199
|
var media = $('audio, video', this).eq(0);
|
191
200
|
var base = $(this);
|
192
201
|
|
@@ -198,7 +207,9 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
198
207
|
mediaData.player = base;
|
199
208
|
mediaData.media = media;
|
200
209
|
if(!jmeData.media){
|
201
|
-
|
210
|
+
forceRender = function(){
|
211
|
+
base[0].className = base[0].className;
|
212
|
+
};
|
202
213
|
removeCanPlay = function(){
|
203
214
|
media.off('canplay', canPlay);
|
204
215
|
clearTimeout(canplayTimer);
|
@@ -257,6 +268,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
257
268
|
if(state){
|
258
269
|
lastState = state;
|
259
270
|
base.attr('data-state', state);
|
271
|
+
setTimeout(forceRender);
|
260
272
|
}
|
261
273
|
};
|
262
274
|
|
@@ -340,16 +352,16 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
340
352
|
return [{src: src}];
|
341
353
|
}
|
342
354
|
srces = $.map($('source', data.media).get(), function(source){
|
355
|
+
var i, len;
|
343
356
|
var src = {
|
344
357
|
src: $.prop(source, 'src')
|
345
358
|
};
|
346
|
-
var
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
src.type = tmp;
|
359
|
+
var attributes = source.attributes;
|
360
|
+
|
361
|
+
for(i = 0, len = attributes.length; i < len; i++){
|
362
|
+
if(!('specified' in attributes[i]) || attributes[i].specified){
|
363
|
+
src[attributes[i].nodeName] = attributes[i].nodeValue;
|
364
|
+
}
|
353
365
|
}
|
354
366
|
return src;
|
355
367
|
});
|
@@ -421,18 +433,17 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
421
433
|
data.player.triggerHandler('controlsadded');
|
422
434
|
}
|
423
435
|
});
|
424
|
-
|
425
|
-
webshims.
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
}
|
436
|
+
|
437
|
+
webshims.ready('DOM mediaelement', function(){
|
438
|
+
webshims.isReady('jme', true);
|
439
|
+
webshims.addReady($.jme.initJME);
|
440
|
+
webshims.isReady('jme-base', true);
|
441
|
+
|
442
|
+
if(webshims.cfg.debug !== false && document.getElementsByTagName('video').length && !document.querySelector(baseSelector)){
|
443
|
+
webshims.warn("found video element but video wasn't wrapped inside a ."+ baseSelector +" element. Will not add control UI");
|
444
|
+
}
|
445
|
+
});
|
446
|
+
|
436
447
|
});
|
437
448
|
;webshims.register('mediacontrols', function($, webshims, window){
|
438
449
|
"use strict";
|
@@ -441,9 +452,9 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
441
452
|
var options = webshims.cfg.mediaelement.jme;
|
442
453
|
var baseSelector = options.selector;
|
443
454
|
var jme = $.jme;
|
444
|
-
var
|
455
|
+
var unknownStructure = '<div class="{%class%}"></div>';
|
445
456
|
var btnStructure = '<button class="{%class%}" type="button" aria-label="{%text%}"></button>';
|
446
|
-
var slideStructure = '<div class="{%class%} media-range"></div>';
|
457
|
+
var slideStructure = '<div class="{%class%} media-range" aria-label="{%text%}"></div>';
|
447
458
|
var timeStructure = '<div class="{%class%}">00:00</div>';
|
448
459
|
|
449
460
|
var noVolumeClass = (function(){
|
@@ -475,7 +486,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
475
486
|
if(plugin){
|
476
487
|
if(!plugin.structure){
|
477
488
|
webshims.warn('no structure option provided for plugin: '+ matchName +'. Fallback to standard div');
|
478
|
-
plugin.structure =
|
489
|
+
plugin.structure = unknownStructure;
|
479
490
|
}
|
480
491
|
return plugin.structure.replace('{%class%}', matchName).replace('{%text%}', plugin.text || '');
|
481
492
|
}
|
@@ -580,18 +591,55 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
580
591
|
}
|
581
592
|
};
|
582
593
|
})();
|
594
|
+
var $poster = $('<div class="ws-poster" />').insertAfter(data.media);
|
583
595
|
var posterState = (function(){
|
584
|
-
var lastPosterState, lastYoutubeState;
|
596
|
+
var lastPosterState, lastYoutubeState, lastPoster;
|
585
597
|
var hasFlash = window.swfmini && swfmini.hasFlashPlayerVersion('10.0.3');
|
586
598
|
var regYt = /youtube\.com\/[watch\?|v\/]+/i;
|
599
|
+
|
600
|
+
var isInitial = data.media.prop('paused');
|
601
|
+
if(isInitial){
|
602
|
+
data.player.addClass('initial-state');
|
603
|
+
}
|
604
|
+
if(!('backgroundSize' in $poster[0].style)){
|
605
|
+
data.player.addClass('no-backgroundsize');
|
606
|
+
}
|
607
|
+
data.media.on('playing waiting seeked seeking', function(){
|
608
|
+
if(isInitial){
|
609
|
+
isInitial = false;
|
610
|
+
data.player.removeClass('initial-state');
|
611
|
+
}
|
612
|
+
});
|
587
613
|
return function(){
|
588
|
-
var
|
589
|
-
var
|
614
|
+
var poster = data.media.attr('poster');
|
615
|
+
var hasPoster = !!poster;
|
616
|
+
var currentSrc = data.media.prop('currentSrc') || '';
|
617
|
+
var isYt = regYt.test(currentSrc);
|
618
|
+
var hasYt = (hasFlash && hasPoster) ? false : isYt;
|
619
|
+
|
620
|
+
if(!hasPoster && isYt){
|
621
|
+
poster = currentSrc.match(/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i) || '';
|
622
|
+
if(poster){
|
623
|
+
poster = 'https://img.youtube.com/vi/'+ poster[1] +'/0.jpg';
|
624
|
+
hasPoster = !!poster;
|
625
|
+
}
|
626
|
+
}
|
627
|
+
|
628
|
+
if(lastPoster !== poster){
|
629
|
+
lastPoster = poster;
|
630
|
+
$poster[0].style.backgroundImage = poster ? 'url('+poster+')' : '';
|
631
|
+
}
|
632
|
+
|
590
633
|
if(lastPosterState !== hasPoster){
|
591
634
|
lastPosterState = hasPoster;
|
592
635
|
data.player[hasPoster ? 'removeClass' : 'addClass']('no-poster');
|
593
636
|
}
|
594
637
|
|
638
|
+
if(data.media.prop('paused')){
|
639
|
+
data.player.addClass('initial-state');
|
640
|
+
isInitial = true;
|
641
|
+
}
|
642
|
+
|
595
643
|
if(lastYoutubeState !== hasYt){
|
596
644
|
lastYoutubeState = hasYt;
|
597
645
|
data.player[hasYt ? 'addClass' : 'removeClass']('has-ytposter');
|
@@ -602,13 +650,15 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
602
650
|
|
603
651
|
userActivity._create(data.player, data.media, data.player);
|
604
652
|
|
605
|
-
data.media.on('emptied',
|
653
|
+
data.media.on('emptied loadstart', function(){
|
654
|
+
setTimeout(posterState);
|
655
|
+
});
|
606
656
|
|
607
657
|
playerSize();
|
608
658
|
posterState();
|
609
659
|
webshims.ready('dom-support', function(){
|
610
660
|
data.player.onWSOff('updateshadowdom', playerSize);
|
611
|
-
controls.add(data._controlbar).addClass(webshims.shadowClass);
|
661
|
+
controls.add(data._controlbar).add($poster).addClass(webshims.shadowClass);
|
612
662
|
webshims.addShadowDom();
|
613
663
|
});
|
614
664
|
}
|
@@ -641,7 +691,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
641
691
|
|
642
692
|
jme.registerPlugin('volume-slider', {
|
643
693
|
structure: slideStructure,
|
644
|
-
|
694
|
+
text: 'volume level',
|
645
695
|
_create: lazyLoadPlugin()
|
646
696
|
});
|
647
697
|
|
@@ -651,6 +701,7 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
651
701
|
options: {
|
652
702
|
format: ['mm', 'ss']
|
653
703
|
},
|
704
|
+
text: 'time position',
|
654
705
|
_create: lazyLoadPlugin()
|
655
706
|
});
|
656
707
|
|
@@ -725,12 +776,18 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
725
776
|
_create: lazyLoadPlugin()
|
726
777
|
});
|
727
778
|
|
779
|
+
jme.registerPlugin('mediaconfigmenu', {
|
780
|
+
structure: btnStructure,
|
781
|
+
text: 'configuration',
|
782
|
+
_create: lazyLoadPlugin()
|
783
|
+
});
|
784
|
+
|
728
785
|
|
729
786
|
jme.registerPlugin('captions', {
|
730
787
|
structure: btnStructure,
|
731
788
|
text: 'subtitles',
|
732
789
|
_create: function(control, media, base){
|
733
|
-
var trackElems = media.find('track');
|
790
|
+
var trackElems = media.find('track').filter(':not([kind]), [kind="subtitles"], [data-kind="subtitles"], [kind="captions"], [data-kind="captions"]');
|
734
791
|
control.wsclonedcheckbox = $(control).clone().attr({role: 'checkbox'}).insertBefore(control);
|
735
792
|
base.attr('data-tracks', trackElems.length > 1 ? 'many' : trackElems.length);
|
736
793
|
control.attr('aria-haspopup', 'true');
|
@@ -738,9 +795,26 @@ webshims.register('jme', function($, webshims, window, doc, undefined){
|
|
738
795
|
}
|
739
796
|
});
|
740
797
|
|
798
|
+
|
799
|
+
jme.registerPlugin('chapters', {
|
800
|
+
structure: btnStructure,
|
801
|
+
text: 'chapters',
|
802
|
+
_create: function(control, media, base){
|
803
|
+
var trackElems = media.find('track').filter('[kind="chapters"], [data-kind="chapters"]');
|
804
|
+
control.attr('aria-haspopup', 'true');
|
805
|
+
if(trackElems.length){
|
806
|
+
webshims._polyfill(['track']);
|
807
|
+
base.addClass('has-chapter-tracks');
|
808
|
+
}
|
809
|
+
lazyLoadPlugin().apply(this, arguments);
|
810
|
+
}
|
811
|
+
});
|
812
|
+
|
813
|
+
|
814
|
+
|
741
815
|
webshims.ready(webshims.cfg.mediaelement.plugins.concat(['mediaelement', 'jme-base']), function(){
|
742
816
|
if(!options.barTemplate){
|
743
|
-
options.barTemplate = '<div class="play-pause-container">{{play-pause}}</div><div class="playlist-container"><div class="playlist-box">{{playlist-prev}}{{playlist-next}}</div></div><div class="currenttime-container">{{currenttime-display}}</div><div class="progress-container">{{time-slider}}</div><div class="duration-container">{{duration-display}}</div><div class="mute-container">{{mute-unmute}}</div><div class="volume-container">{{volume-slider}}</div><div class="subtitle-container"><div class="subtitle-controls">{{captions}}</div></div><div class="fullscreen-container">{{fullscreen}}</div>';
|
817
|
+
options.barTemplate = '<div class="play-pause-container">{{play-pause}}</div><div class="playlist-container"><div class="playlist-box"><div class="playlist-button-container">{{playlist-prev}}</div><div class="playlist-button-container">{{playlist-next}}</div></div></div><div class="currenttime-container">{{currenttime-display}}</div><div class="progress-container">{{time-slider}}</div><div class="duration-container">{{duration-display}}</div><div class="mute-container">{{mute-unmute}}</div><div class="volume-container">{{volume-slider}}</div><div class="chapters-container"><div class="chapters-controls mediamenu-wrapper">{{chapters}}</div></div><div class="subtitle-container mediamenu-wrapper"><div class="subtitle-controls">{{captions}}</div></div><div class="mediaconfig-container"><div class="mediaconfig-controls mediamenu-wrapper">{{mediaconfigmenu}}</div></div><div class="fullscreen-container">{{fullscreen}}</div>';
|
744
818
|
}
|
745
819
|
if(!options.barStructure){
|
746
820
|
options.barStructure = '<div class="jme-media-overlay"></div><div class="jme-controlbar'+ noVolumeClass +'" tabindex="-1"><div class="jme-cb-box"></div></div>';
|
@@ -62,7 +62,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
|
62
62
|
var supportHrefNormalized = !('hrefNormalized' in $.support) || $.support.hrefNormalized;
|
63
63
|
var supportGetSetAttribute = !('getSetAttribute' in $.support) || $.support.getSetAttribute;
|
64
64
|
var has = Object.prototype.hasOwnProperty;
|
65
|
-
webshims.assumeARIA =
|
65
|
+
webshims.assumeARIA = true;
|
66
66
|
|
67
67
|
if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
|
68
68
|
webshims.error("IE browser modes are busted in IE10+. Please test your HTML/CSS/JS with a real IE version or at least IETester or similiar tools");
|
@@ -81,15 +81,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
|
81
81
|
}
|
82
82
|
window.jQuery = webshims.$;
|
83
83
|
}
|
84
|
-
if(webshims.M != Modernizr){
|
85
|
-
webshims.error("Modernizr was included more than once. Make sure to include it only once! Webshims and other scripts might not work properly.");
|
86
|
-
for(var i in Modernizr){
|
87
|
-
if(!(i in webshims.M)){
|
88
|
-
webshims.M[i] = Modernizr[i];
|
89
|
-
}
|
90
|
-
}
|
91
|
-
Modernizr = webshims.M;
|
92
|
-
}
|
93
84
|
};
|
94
85
|
switch$();
|
95
86
|
setTimeout(switch$, 90);
|
@@ -418,7 +409,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
|
418
409
|
var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
|
419
410
|
|
420
411
|
//see also: https://github.com/lojjic/PIE/issues/40 | https://prototype.lighthouseapp.com/projects/8886/tickets/1107-ie8-fatal-crash-when-prototypejs-is-loaded-with-rounded-cornershtc
|
421
|
-
var isExtendNativeSave =
|
412
|
+
var isExtendNativeSave = webshims.support.advancedObjectProperties && webshims.support.objectAccessor;
|
422
413
|
return function(nodeName, prop, desc){
|
423
414
|
var elem , elemProto;
|
424
415
|
if( isExtendNativeSave && (elem = document.createElement(nodeName)) && (elemProto = webshims.getPrototypeOf(elem)) && UNKNOWN !== elemProto && ( !elem[prop] || !has.call(elem, prop) ) ){
|
@@ -729,7 +720,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
|
729
720
|
});
|
730
721
|
}
|
731
722
|
webshims.ready('WINDOWLOAD', this.test);
|
732
|
-
$(document).on('updatelayout.webshim pageinit popupafteropen panelbeforeopen tabsactivate collapsibleexpand shown.bs.modal shown.bs.collapse slid.bs.carousel', this.handler);
|
723
|
+
$(document).on('updatelayout.webshim pageinit popupafteropen panelbeforeopen tabsactivate collapsibleexpand shown.bs.modal shown.bs.collapse slid.bs.carousel playerdimensionchange', this.handler);
|
733
724
|
$(window).on('resize', this.handler);
|
734
725
|
}
|
735
726
|
}
|