vendor/assets/javascripts/webshims/shims/jme/b.js in webshims-rails-1.14.1 vs vendor/assets/javascripts/webshims/shims/jme/b.js in webshims-rails-1.14.3
- old
+ new
@@ -1,41 +1,62 @@
webshims.register('jme', function($, webshims, window, doc, undefined){
"use strict";
var props = {};
var fns = {};
var slice = Array.prototype.slice;
-
+ var readyLength = 0;
var options = $.extend({selector: '.mediaplayer'}, webshims.cfg.mediaelement.jme);
+ var baseSelector = options.selector;
+
webshims.cfg.mediaelement.jme = options;
$.jme = {
+ pluginsClasses: [],
+ pluginsSel: '',
plugins: {},
+ props: props,
+ fns: fns,
data: function(elem, name, value){
var data = $(elem).data('jme') || $.data(elem, 'jme', {});
if(value === undefined){
return (name) ? data[name] : data;
} else {
data[name] = value;
}
},
+ runPlugin: function(sel){
+ if(readyLength){
+ $(document.querySelectorAll(baseSelector)).each(function(){
+ var controls = this.querySelectorAll(sel);
+ if(controls.length){
+ $(this).jmeFn('addControls', controls);
+ }
+ });
+ }
+ },
registerPlugin: function(name, plugin){
this.plugins[name] = plugin;
if(!plugin.nodeName){
plugin.nodeName = '';
}
if(!plugin.className){
plugin.className = name;
}
+ this.pluginsClasses.push('.'+plugin.className);
+
+ this.pluginsSel = this.pluginsClasses.join(', ');
+
options[name] = $.extend(plugin.options || {}, options[name]);
if(options[name] && options[name].text){
plugin.text = options[name].text;
} else if(options.i18n && options.i18n[name]){
plugin.text = options.i18n[name];
}
+ this.runPlugin('.'+plugin.className);
},
defineMethod: function(name, fn){
fns[name] = fn;
},
defineProp: function(name, desc){
@@ -98,14 +119,12 @@
var unwaitingEvents = {
canplay: 1, canplaythrough: 1
};
- var baseSelector = options.selector;
-
$.jme.initJME = function(context, insertedElement){
- $(baseSelector, context).add(insertedElement.filter(baseSelector)).jmePlayer();
+ readyLength += $(context.querySelectorAll(baseSelector)).add(insertedElement.filter(baseSelector)).jmePlayer().length;
};
$.jme.getDOMList = function(attr){
var list = [];
@@ -284,11 +303,13 @@
volume = 'high';
}
base.attr('data-volume', volume);
})
;
-
+ if($.jme.pluginsSel){
+ base.jmeFn('addControls', $(base[0].querySelectorAll($.jme.pluginsSel)));
+ }
if(mediaUpdateFn){
media.on('updateJMEState', mediaUpdateFn).triggerHandler('updateJMEState');
}
}
});
@@ -363,39 +384,53 @@
var data = $.jme.data(this) || {};
if(!data.media){return;}
var oldControls = $.jme.data(data.player[0], 'controlElements') || $([]);
controls = $(controls);
- $.each($.jme.plugins, function(name, plugin){
- controls
- .filter('.'+plugin.className)
- .add(controls.find('.'+plugin.className))
- .each(function(){
- var control = $(this);
- var options = $.jme.data(this);
+ if($.jme.pluginsSel){
+ controls = controls.find($.jme.pluginsSel).add(controls.filter($.jme.pluginsSel));
+ }
+ if(controls.length){
+ $.each($.jme.plugins, function(name, plugin){
+ var control, options, i, opt;
+ var pluginControls = controls.filter('.'+plugin.className);
+
+ for(i = 0; i < pluginControls.length; i++){
+ control = $(pluginControls[i]);
+ options = $.jme.data(pluginControls[i]);
options.player = data.player;
options.media = data.media;
- if(options._rendered){return;}
- options._rendered = true;
+ if(!options._rendered){
+ options._rendered = true;
- if(plugin.options){
- $.each(plugin.options, function(option, value){
- if(!(option in options)){
- options[option] = value;
+ if(plugin.options){
+ for(opt in plugin.options){
+ if(!(opt in options)){
+ options[opt] = plugin.options[opt];
+ }
}
- });
+ }
+
+ plugin._create(control, data.media, data.player, options);
}
- plugin._create(control, data.media, data.player, options);
- control = null;
- })
- ;
- });
+ }
- $.jme.data(data.player[0], 'controlElements', oldControls.add(controls));
+ });
- data.player.triggerHandler('controlsadded');
- });
+ $.jme.data(data.player[0], 'controlElements', oldControls.add(controls));
-
+ data.player.triggerHandler('controlsadded');
+ }
+ });
+ webshims.isReady('jme', true);
webshims.addReady($.jme.initJME);
webshims._polyfill(['mediaelement']);
+ webshims.isReady('jme-base', true);
+
+ if(webshims.cfg.debug !== false){
+ $(function(){
+ if(document.getElementsByTagName('video').length && !document.querySelector(baseSelector)){
+ webshims.warn("found video element but video wasn't wrapped inside a ."+ baseSelector +" element. Will not add control UI");
+ }
+ });
+ }
});