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"); + } + }); + } });