mediaelement-plugins
Advanced tools
Comparing version 2.6.0 to 2.6.1
# Version History | ||
## *2.6.1 (2021/10/08)* | ||
### QUALITY PLUGIN | ||
* Adds aria-controls and aria-expanded status. | ||
* Rewrites EventListeners to handle showing/hiding the flyout with keyboard and mouse events. | ||
* Adding focus highlighting | ||
* Converting px to rem | ||
* Removing unnecessary CSS | ||
## *2.6.0 (2021/09/20)* | ||
@@ -4,0 +13,0 @@ |
@@ -41,2 +41,332 @@ /*! | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*//*! | ||
* MediaElement.js | ||
* http://www.mediaelementjs.com/ | ||
* | ||
* Wrapper that mimics native HTML5 MediaElement (audio and video) | ||
* using a variety of technologies (pure JavaScript, Flash, iframe) | ||
* | ||
* Copyright 2010-2017, John Dyer (http://j.hn/) | ||
* License: MIT | ||
* | ||
*/(function e(t, n, r) { function s(o, u) { if (!n[o]) { if (!t[o]) { var a = typeof require == "function" && require; if (!u && a) return a(o, !0); if (i) return i(o, !0); var f = new Error("Cannot find module '" + o + "'"); throw f.code = "MODULE_NOT_FOUND", f } var l = n[o] = { exports: {} }; t[o][0].call(l.exports, function (e) { var n = t[o][1][e]; return s(n ? n : e) }, l, l.exports, e, t, n, r) } return n[o].exports } var i = typeof require == "function" && require; for (var o = 0; o < r.length; o++)s(r[o]); return s })({ | ||
@@ -43,0 +373,0 @@ 1: [function (_dereq_, module, exports) { |
@@ -122,7 +122,8 @@ /*! | ||
player.qualitiesButton = document.createElement('div'); | ||
player.qualitiesButton.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'qualities-button'; | ||
player.qualitiesButton.innerHTML = '<button type="button" aria-controls="' + t.id + '" title="' + qualityTitle + '" ' + ('aria-label="' + qualityTitle + '" tabindex="0">' + defaultValue + '</button>') + ('<div class="' + t.options.classPrefix + 'qualities-selector ' + t.options.classPrefix + 'offscreen">') + ('<ul class="' + t.options.classPrefix + 'qualities-selector-list"></ul>') + '</div>'; | ||
var generateId = Math.floor(Math.random() * 100); | ||
player.qualitiesContainer = document.createElement('div'); | ||
player.qualitiesContainer.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'qualities-button'; | ||
player.qualitiesContainer.innerHTML = '<button type="button" title="' + qualityTitle + '" aria-label="' + qualityTitle + '" aria-controls="qualitieslist-' + generateId + '" aria-expanded="false">' + defaultValue + '</button>' + ('<div class="' + t.options.classPrefix + 'qualities-selector ' + t.options.classPrefix + 'offscreen">') + ('<ul class="' + t.options.classPrefix + 'qualities-selector-list" id="qualitieslist-' + generateId + '" tabindex="-1"></ul></div>'); | ||
t.addControlElement(player.qualitiesButton, 'qualities'); | ||
t.addControlElement(player.qualitiesContainer, 'qualities'); | ||
@@ -134,29 +135,63 @@ qualityMap.forEach(function (value, key) { | ||
inputId = t.id + '-qualities-' + quality; | ||
player.qualitiesButton.querySelector('ul').innerHTML += '<li class="' + t.options.classPrefix + 'qualities-selector-list-item">' + ('<input class="' + t.options.classPrefix + 'qualities-selector-input" type="radio" name="' + t.id + '_qualities"') + ('disabled="disabled" value="' + quality + '" id="' + inputId + '" ') + ((quality === defaultValue ? ' checked="checked"' : '') + '/>') + ('<label for="' + inputId + '" class="' + t.options.classPrefix + 'qualities-selector-label') + ((quality === defaultValue ? ' ' + t.options.classPrefix + 'qualities-selected' : '') + '">') + ((src.title || quality) + '</label>') + '</li>'; | ||
player.qualitiesContainer.querySelector('ul').innerHTML += '<li class="' + t.options.classPrefix + 'qualities-selector-list-item">' + ('<input class="' + t.options.classPrefix + 'qualities-selector-input" type="radio" name="' + t.id + '_qualities" disabled="disabled"') + ('value="' + quality + '" id="' + inputId + '" ' + (quality === defaultValue ? ' checked="checked"' : '') + ' />') + ('<label for="' + inputId + '" class="' + t.options.classPrefix + 'qualities-selector-label ' + (quality === defaultValue ? ' ' + t.options.classPrefix + 'qualities-selected' : '') + '">') + ((src.title || quality) + ' </label></li>'); | ||
} | ||
}); | ||
var inEvents = ['mouseenter', 'focusin'], | ||
outEvents = ['mouseleave', 'focusout'], | ||
radios = player.qualitiesButton.querySelectorAll('input[type="radio"]'), | ||
labels = player.qualitiesButton.querySelectorAll('.' + t.options.classPrefix + 'qualities-selector-label'), | ||
selector = player.qualitiesButton.querySelector('.' + t.options.classPrefix + 'qualities-selector'); | ||
for (var i = 0, total = inEvents.length; i < total; i++) { | ||
player.qualitiesButton.addEventListener(inEvents[i], function () { | ||
mejs.Utils.removeClass(selector, t.options.classPrefix + 'offscreen'); | ||
selector.style.height = selector.querySelector('ul').offsetHeight + 'px'; | ||
selector.style.top = -1 * parseFloat(selector.offsetHeight) + 'px'; | ||
}); | ||
var isHidden = true; | ||
var qualityContainer = player.qualitiesContainer, | ||
qualityButton = player.qualitiesContainer.querySelector('button'), | ||
qualitiesSelector = player.qualitiesContainer.querySelector('.' + t.options.classPrefix + 'qualities-selector'), | ||
qualitiesList = player.qualitiesContainer.querySelector('.' + t.options.classPrefix + 'qualities-selector-list'), | ||
radios = player.qualitiesContainer.querySelectorAll('input[type="radio"]'), | ||
labels = player.qualitiesContainer.querySelectorAll('.' + t.options.classPrefix + 'qualities-selector-label'); | ||
function hideSelector() { | ||
mejs.Utils.addClass(qualitiesSelector, t.options.classPrefix + 'offscreen'); | ||
qualityButton.removeAttribute('aria-expanded'); | ||
qualityButton.setAttribute('aria-expanded', 'false'); | ||
qualityButton.focus(); | ||
isHidden = true; | ||
} | ||
for (var _i = 0, _total = outEvents.length; _i < _total; _i++) { | ||
player.qualitiesButton.addEventListener(outEvents[_i], function () { | ||
setTimeout(function () { | ||
mejs.Utils.addClass(selector, t.options.classPrefix + 'offscreen'); | ||
}, 50); | ||
}); | ||
function showSelector() { | ||
mejs.Utils.removeClass(qualitiesSelector, t.options.classPrefix + 'offscreen'); | ||
qualitiesSelector.style.height = qualitiesSelector.querySelector('ul').offsetHeight + 'px'; | ||
qualitiesSelector.style.top = -1 * parseFloat(qualitiesSelector.offsetHeight) + 'px'; | ||
qualityButton.setAttribute('aria-expanded', 'true'); | ||
qualitiesList.focus(); | ||
isHidden = false; | ||
} | ||
for (var _i2 = 0, _total2 = radios.length; _i2 < _total2; _i2++) { | ||
var radio = radios[_i2]; | ||
qualityButton.addEventListener('click', function () { | ||
if (isHidden === true) { | ||
showSelector(); | ||
} else { | ||
hideSelector(); | ||
} | ||
}); | ||
qualitiesList.addEventListener('focusout', function (event) { | ||
if (!qualityContainer.contains(event.relatedTarget)) { | ||
hideSelector(); | ||
} | ||
}); | ||
qualityButton.addEventListener('mouseenter', function () { | ||
showSelector(); | ||
}); | ||
qualityContainer.addEventListener('mouseleave', function () { | ||
hideSelector(); | ||
}); | ||
qualityContainer.addEventListener('keydown', function (event) { | ||
if (event.key === "Escape") { | ||
hideSelector(); | ||
} | ||
event.stopPropagation(); | ||
}); | ||
for (var i = 0, total = radios.length; i < total; i++) { | ||
var radio = radios[i]; | ||
radio.disabled = false; | ||
@@ -196,4 +231,5 @@ radio.addEventListener('change', function () { | ||
} | ||
for (var _i3 = 0, _total3 = labels.length; _i3 < _total3; _i3++) { | ||
labels[_i3].addEventListener('click', function () { | ||
for (var _i = 0, _total = labels.length; _i < _total; _i++) { | ||
labels[_i].addEventListener('click', function () { | ||
var radio = mejs.Utils.siblings(this, function (el) { | ||
@@ -206,11 +242,7 @@ return el.tagName === 'INPUT'; | ||
} | ||
selector.addEventListener('keydown', function (e) { | ||
e.stopPropagation(); | ||
}); | ||
}, | ||
cleanquality: function cleanquality(player) { | ||
if (player) { | ||
if (player.qualitiesButton) { | ||
player.qualitiesButton.remove(); | ||
if (player.qualitiesContainer) { | ||
player.qualitiesContainer.remove(); | ||
} | ||
@@ -276,3 +308,3 @@ } | ||
switchDashQuality: function switchDashQuality(player, media) { | ||
var radios = player.qualitiesButton.querySelectorAll('input[type="radio"]'); | ||
var radios = player.qualitiesContainer.querySelectorAll('input[type="radio"]'); | ||
for (var index = 0; index < radios.length; index++) { | ||
@@ -290,3 +322,3 @@ if (radios[index].checked) { | ||
switchHLSQuality: function switchHLSQuality(player, media) { | ||
var radios = player.qualitiesButton.querySelectorAll('input[type="radio"]'); | ||
var radios = player.qualitiesContainer.querySelectorAll('input[type="radio"]'); | ||
for (var index = 0; index < radios.length; index++) { | ||
@@ -307,3 +339,3 @@ if (radios[index].checked) { | ||
var selected = player.qualitiesButton.querySelectorAll('.' + t.options.classPrefix + 'qualities-selected'); | ||
var selected = player.qualitiesContainer.querySelectorAll('.' + t.options.classPrefix + 'qualities-selected'); | ||
for (var i = 0, total = selected.length; i < total; i++) { | ||
@@ -317,7 +349,7 @@ mejs.Utils.removeClass(selected[i], t.options.classPrefix + 'qualities-selected'); | ||
}); | ||
for (var j = 0, _total4 = siblings.length; j < _total4; j++) { | ||
for (var j = 0, _total2 = siblings.length; j < _total2; j++) { | ||
mejs.Utils.addClass(siblings[j], t.options.classPrefix + 'qualities-selected'); | ||
} | ||
player.qualitiesButton.querySelector('button').innerHTML = newQuality; | ||
player.qualitiesContainer.querySelector('button').innerHTML = newQuality; | ||
}, | ||
@@ -324,0 +356,0 @@ getQualityFromHeight: function getQualityFromHeight(height) { |
@@ -12,2 +12,2 @@ /*! | ||
*/ | ||
!function n(l,o,r){function u(t,e){if(!o[t]){if(!l[t]){var i="function"==typeof require&&require;if(!e&&i)return i(t,!0);if(c)return c(t,!0);var a=new Error("Cannot find module '"+t+"'");throw a.code="MODULE_NOT_FOUND",a}var s=o[t]={exports:{}};l[t][0].call(s.exports,function(e){return u(l[t][1][e]||e)},s,s.exports,n,l,o,r)}return o[t].exports}for(var c="function"==typeof require&&require,e=0;e<r.length;e++)u(r[e]);return u}({1:[function(e,t,i){"use strict";mejs.i18n.en["mejs.quality-chooser"]="Quality Chooser",Object.assign(mejs.MepDefaults,{defaultQuality:"auto",qualityText:null,autoGenerate:!1,autoDash:!1,autoHLS:!1,qualityChangeCallback:null}),Object.assign(MediaElementPlayer.prototype,{buildquality:function(i,e,t,a){for(var s=this,n=s.mediaFiles?s.mediaFiles:s.node.children,l=new Map,o=0,r=n.length;o<r;o++){var u=n[o],c=u instanceof HTMLElement?u.getAttribute("data-quality"):u["data-quality"];if("undefined"===c&&(c="Auto",s.options.autoGenerate=!0),s.mediaFiles){var d=document.createElement("source");d.src=u.src,d.type=u.type,s.addValueToKey(l,c,d)}else"SOURCE"===u.nodeName&&s.addValueToKey(l,c,u)}if(!(l.size<=1)){var f=0;a.addEventListener("error",function(e){if("No renderer found"===e.message&&l.get("").length>f+1){f+=1;var t=l.get("")[f].src;a.setSrc(t),a.load()}}),a.addEventListener("loadedmetadata",function(){if(a.hlsPlayer){var e=a.hlsPlayer.levels;s.options.autoGenerate&&1<e.length&&(e.forEach(function(e){var t=e.height,i=s.getQualityFromHeight(t);s.addValueToKey(l,i,"")}),s.options.autoHLS=!0,s.generateQualityButton(s,i,a,l,""))}else if(a.dashPlayer){var t=a.dashPlayer.getBitrateInfoListFor("video");s.options.autoGenerate&&1<t.length&&(t.forEach(function(e){var t=e.height,i=s.getQualityFromHeight(t);s.addValueToKey(l,i,"")}),s.options.autoDash=!0,s.generateQualityButton(s,i,a,l,""))}}),s.generateQualityButton(s,i,a,l,"")}},generateQualityButton:function(n,l,i,a,s){n.cleanquality(l);var e=mejs.Utils.isString(n.options.qualityText)?n.options.qualityText:mejs.i18n.t("mejs.quality-chooser"),o=function(e){var t=void 0;t="auto"===e?n.keyExist(a,e)?e:n.getMapIndex(a,0).key:e;return t}(n.options.defaultQuality);s=o,l.qualitiesButton=document.createElement("div"),l.qualitiesButton.className=n.options.classPrefix+"button "+n.options.classPrefix+"qualities-button",l.qualitiesButton.innerHTML='<button type="button" aria-controls="'+n.id+'" title="'+e+'" aria-label="'+e+'" tabindex="0">'+o+'</button><div class="'+n.options.classPrefix+"qualities-selector "+n.options.classPrefix+'offscreen"><ul class="'+n.options.classPrefix+'qualities-selector-list"></ul></div>',n.addControlElement(l.qualitiesButton,"qualities"),a.forEach(function(e,t){if("map_keys_1"!==t){var i=e[0],a=t,s=n.id+"-qualities-"+a;l.qualitiesButton.querySelector("ul").innerHTML+='<li class="'+n.options.classPrefix+'qualities-selector-list-item"><input class="'+n.options.classPrefix+'qualities-selector-input" type="radio" name="'+n.id+'_qualities"disabled="disabled" value="'+a+'" id="'+s+'" '+(a===o?' checked="checked"':"")+'/><label for="'+s+'" class="'+n.options.classPrefix+"qualities-selector-label"+(a===o?" "+n.options.classPrefix+"qualities-selected":"")+'">'+(i.title||a)+"</label></li>"}});for(var t=["mouseenter","focusin"],r=["mouseleave","focusout"],u=l.qualitiesButton.querySelectorAll('input[type="radio"]'),c=l.qualitiesButton.querySelectorAll("."+n.options.classPrefix+"qualities-selector-label"),d=l.qualitiesButton.querySelector("."+n.options.classPrefix+"qualities-selector"),f=0,h=t.length;f<h;f++)l.qualitiesButton.addEventListener(t[f],function(){mejs.Utils.removeClass(d,n.options.classPrefix+"offscreen"),d.style.height=d.querySelector("ul").offsetHeight+"px",d.style.top=-1*parseFloat(d.offsetHeight)+"px"});for(var y=0,p=r.length;y<p;y++)l.qualitiesButton.addEventListener(r[y],function(){setTimeout(function(){mejs.Utils.addClass(d,n.options.classPrefix+"offscreen")},50)});for(var v=0,q=u.length;v<q;v++){var g=u[v];g.disabled=!1,g.addEventListener("change",function(){if(n.options.autoDash)n.updateQualityButton(this,l,s),n.switchDashQuality(l,i);else if(n.options.autoHLS)n.updateQualityButton(this,l,s),n.switchHLSQuality(l,i);else{n.updateQualityButton(this,l,s);var t=i.currentTime,e=i.paused;e||i.pause(),n.updateVideoSource(i,a,s),i.setSrc(a.get(s)[0].src),i.load(),i.dispatchEvent(mejs.Utils.createEvent("seeking",i)),e||i.play(),i.addEventListener("canplay",function e(){i.setCurrentTime(t),i.removeEventListener("canplay",e)})}n.options.qualityChangeCallback&&n.options.qualityChangeCallback(i,i.originalNode,newQuality)})}for(var m=0,x=c.length;m<x;m++)c[m].addEventListener("click",function(){var e=mejs.Utils.siblings(this,function(e){return"INPUT"===e.tagName})[0],t=mejs.Utils.createEvent("click",e);e.dispatchEvent(t)});d.addEventListener("keydown",function(e){e.stopPropagation()})},cleanquality:function(e){e&&e.qualitiesButton&&e.qualitiesButton.remove()},addValueToKey:function(e,t,i){e.has("map_keys_1")?e.get("map_keys_1").push(t):e.set("map_keys_1",[]),e.has(t)||e.set(t,[]),e.get(t).push(i)},updateVideoSource:function(i,e,t){this.cleanMediaSource(i);for(var a=e.get(t),s=function(e){var t=i.children[e];"VIDEO"===t.tagName&&a.forEach(function(e){t.appendChild(e)})},n=0;n<i.children.length;n++)s(n)},cleanMediaSource:function(e){for(var t=0;t<e.children.length;t++){var i=e.children[t];if("VIDEO"===i.tagName)for(;i.firstChild;)i.removeChild(i.firstChild)}},getMapIndex:function(e,i){var a=-1,s={};return e.forEach(function(e,t){a===i&&(s.key=t,s.value=e),a++}),s},keyExist:function(e,t){return-1<e.get("map_keys_1").indexOf(t)},switchDashQuality:function(e,t){for(var i=e.qualitiesButton.querySelectorAll('input[type="radio"]'),a=0;a<i.length;a++)i[a].checked&&(0===a?t.dashPlayer.setAutoSwitchQuality(!0):(t.dashPlayer.setAutoSwitchQuality(!1),t.dashPlayer.setQualityFor("video",a-1)))},switchHLSQuality:function(e,t){for(var i=e.qualitiesButton.querySelectorAll('input[type="radio"]'),a=0;a<i.length;a++)i[a].checked&&(t.hlsPlayer.currentLevel=0===a?-1:a-1)},updateQualityButton:function(e,t,i){var a=this,s=e.value;for(var n=t.qualitiesButton.querySelectorAll("."+a.options.classPrefix+"qualities-selected"),l=0,o=n.length;l<o;l++)mejs.Utils.removeClass(n[l],a.options.classPrefix+"qualities-selected");e.checked=!0;for(var r=mejs.Utils.siblings(e,function(e){return mejs.Utils.hasClass(e,a.options.classPrefix+"qualities-selector-label")}),u=0,c=r.length;u<c;u++)mejs.Utils.addClass(r[u],a.options.classPrefix+"qualities-selected");t.qualitiesButton.querySelector("button").innerHTML=s},getQualityFromHeight:function(e){return 4320<=e?"8K UHD":2160<=e?"UHD":1440<=e?"QHD":1080<=e?"FHD":720<=e?"HD":"SD"}})},{}]},{},[1]); | ||
!function s(l,o,r){function u(t,e){if(!o[t]){if(!l[t]){var i="function"==typeof require&&require;if(!e&&i)return i(t,!0);if(c)return c(t,!0);var a=new Error("Cannot find module '"+t+"'");throw a.code="MODULE_NOT_FOUND",a}var n=o[t]={exports:{}};l[t][0].call(n.exports,function(e){return u(l[t][1][e]||e)},n,n.exports,s,l,o,r)}return o[t].exports}for(var c="function"==typeof require&&require,e=0;e<r.length;e++)u(r[e]);return u}({1:[function(e,t,i){"use strict";mejs.i18n.en["mejs.quality-chooser"]="Quality Chooser",Object.assign(mejs.MepDefaults,{defaultQuality:"auto",qualityText:null,autoGenerate:!1,autoDash:!1,autoHLS:!1,qualityChangeCallback:null}),Object.assign(MediaElementPlayer.prototype,{buildquality:function(i,e,t,a){for(var n=this,s=n.mediaFiles?n.mediaFiles:n.node.children,l=new Map,o=0,r=s.length;o<r;o++){var u=s[o],c=u instanceof HTMLElement?u.getAttribute("data-quality"):u["data-quality"];if("undefined"===c&&(c="Auto",n.options.autoGenerate=!0),n.mediaFiles){var d=document.createElement("source");d.src=u.src,d.type=u.type,n.addValueToKey(l,c,d)}else"SOURCE"===u.nodeName&&n.addValueToKey(l,c,u)}if(!(l.size<=1)){var f=0;a.addEventListener("error",function(e){if("No renderer found"===e.message&&l.get("").length>f+1){f+=1;var t=l.get("")[f].src;a.setSrc(t),a.load()}}),a.addEventListener("loadedmetadata",function(){if(a.hlsPlayer){var e=a.hlsPlayer.levels;n.options.autoGenerate&&1<e.length&&(e.forEach(function(e){var t=e.height,i=n.getQualityFromHeight(t);n.addValueToKey(l,i,"")}),n.options.autoHLS=!0,n.generateQualityButton(n,i,a,l,""))}else if(a.dashPlayer){var t=a.dashPlayer.getBitrateInfoListFor("video");n.options.autoGenerate&&1<t.length&&(t.forEach(function(e){var t=e.height,i=n.getQualityFromHeight(t);n.addValueToKey(l,i,"")}),n.options.autoDash=!0,n.generateQualityButton(n,i,a,l,""))}}),n.generateQualityButton(n,i,a,l,"")}},generateQualityButton:function(s,l,i,a,n){s.cleanquality(l);var e=mejs.Utils.isString(s.options.qualityText)?s.options.qualityText:mejs.i18n.t("mejs.quality-chooser"),o=function(e){var t=void 0;t="auto"===e?s.keyExist(a,e)?e:s.getMapIndex(a,0).key:e;return t}(s.options.defaultQuality);n=o;var t=Math.floor(100*Math.random());l.qualitiesContainer=document.createElement("div"),l.qualitiesContainer.className=s.options.classPrefix+"button "+s.options.classPrefix+"qualities-button",l.qualitiesContainer.innerHTML='<button type="button" title="'+e+'" aria-label="'+e+'" aria-controls="qualitieslist-'+t+'" aria-expanded="false">'+o+'</button><div class="'+s.options.classPrefix+"qualities-selector "+s.options.classPrefix+'offscreen"><ul class="'+s.options.classPrefix+'qualities-selector-list" id="qualitieslist-'+t+'" tabindex="-1"></ul></div>',s.addControlElement(l.qualitiesContainer,"qualities"),a.forEach(function(e,t){if("map_keys_1"!==t){var i=e[0],a=t,n=s.id+"-qualities-"+a;l.qualitiesContainer.querySelector("ul").innerHTML+='<li class="'+s.options.classPrefix+'qualities-selector-list-item"><input class="'+s.options.classPrefix+'qualities-selector-input" type="radio" name="'+s.id+'_qualities" disabled="disabled"value="'+a+'" id="'+n+'" '+(a===o?' checked="checked"':"")+' /><label for="'+n+'" class="'+s.options.classPrefix+"qualities-selector-label "+(a===o?" "+s.options.classPrefix+"qualities-selected":"")+'">'+(i.title||a)+" </label></li>"}});var r=!0,u=l.qualitiesContainer,c=l.qualitiesContainer.querySelector("button"),d=l.qualitiesContainer.querySelector("."+s.options.classPrefix+"qualities-selector"),f=l.qualitiesContainer.querySelector("."+s.options.classPrefix+"qualities-selector-list"),p=l.qualitiesContainer.querySelectorAll('input[type="radio"]'),h=l.qualitiesContainer.querySelectorAll("."+s.options.classPrefix+"qualities-selector-label");function y(){mejs.Utils.addClass(d,s.options.classPrefix+"offscreen"),c.removeAttribute("aria-expanded"),c.setAttribute("aria-expanded","false"),c.focus(),r=!0}function v(){mejs.Utils.removeClass(d,s.options.classPrefix+"offscreen"),d.style.height=d.querySelector("ul").offsetHeight+"px",d.style.top=-1*parseFloat(d.offsetHeight)+"px",c.setAttribute("aria-expanded","true"),f.focus(),r=!1}c.addEventListener("click",function(){!0===r?v():y()}),f.addEventListener("focusout",function(e){u.contains(e.relatedTarget)||y()}),c.addEventListener("mouseenter",function(){v()}),u.addEventListener("mouseleave",function(){y()}),u.addEventListener("keydown",function(e){"Escape"===e.key&&y(),e.stopPropagation()});for(var q=0,g=p.length;q<g;q++){var m=p[q];m.disabled=!1,m.addEventListener("change",function(){if(s.options.autoDash)s.updateQualityButton(this,l,n),s.switchDashQuality(l,i);else if(s.options.autoHLS)s.updateQualityButton(this,l,n),s.switchHLSQuality(l,i);else{s.updateQualityButton(this,l,n);var t=i.currentTime,e=i.paused;e||i.pause(),s.updateVideoSource(i,a,n),i.setSrc(a.get(n)[0].src),i.load(),i.dispatchEvent(mejs.Utils.createEvent("seeking",i)),e||i.play(),i.addEventListener("canplay",function e(){i.setCurrentTime(t),i.removeEventListener("canplay",e)})}s.options.qualityChangeCallback&&s.options.qualityChangeCallback(i,i.originalNode,newQuality)})}for(var x=0,C=h.length;x<C;x++)h[x].addEventListener("click",function(){var e=mejs.Utils.siblings(this,function(e){return"INPUT"===e.tagName})[0],t=mejs.Utils.createEvent("click",e);e.dispatchEvent(t)})},cleanquality:function(e){e&&e.qualitiesContainer&&e.qualitiesContainer.remove()},addValueToKey:function(e,t,i){e.has("map_keys_1")?e.get("map_keys_1").push(t):e.set("map_keys_1",[]),e.has(t)||e.set(t,[]),e.get(t).push(i)},updateVideoSource:function(i,e,t){this.cleanMediaSource(i);for(var a=e.get(t),n=function(e){var t=i.children[e];"VIDEO"===t.tagName&&a.forEach(function(e){t.appendChild(e)})},s=0;s<i.children.length;s++)n(s)},cleanMediaSource:function(e){for(var t=0;t<e.children.length;t++){var i=e.children[t];if("VIDEO"===i.tagName)for(;i.firstChild;)i.removeChild(i.firstChild)}},getMapIndex:function(e,i){var a=-1,n={};return e.forEach(function(e,t){a===i&&(n.key=t,n.value=e),a++}),n},keyExist:function(e,t){return-1<e.get("map_keys_1").indexOf(t)},switchDashQuality:function(e,t){for(var i=e.qualitiesContainer.querySelectorAll('input[type="radio"]'),a=0;a<i.length;a++)i[a].checked&&(0===a?t.dashPlayer.setAutoSwitchQuality(!0):(t.dashPlayer.setAutoSwitchQuality(!1),t.dashPlayer.setQualityFor("video",a-1)))},switchHLSQuality:function(e,t){for(var i=e.qualitiesContainer.querySelectorAll('input[type="radio"]'),a=0;a<i.length;a++)i[a].checked&&(t.hlsPlayer.currentLevel=0===a?-1:a-1)},updateQualityButton:function(e,t,i){var a=this,n=e.value;for(var s=t.qualitiesContainer.querySelectorAll("."+a.options.classPrefix+"qualities-selected"),l=0,o=s.length;l<o;l++)mejs.Utils.removeClass(s[l],a.options.classPrefix+"qualities-selected");e.checked=!0;for(var r=mejs.Utils.siblings(e,function(e){return mejs.Utils.hasClass(e,a.options.classPrefix+"qualities-selector-label")}),u=0,c=r.length;u<c;u++)mejs.Utils.addClass(r[u],a.options.classPrefix+"qualities-selected");t.qualitiesContainer.querySelector("button").innerHTML=n},getQualityFromHeight:function(e){return 4320<=e?"8K UHD":2160<=e?"UHD":1440<=e?"QHD":1080<=e?"FHD":720<=e?"HD":"SD"}})},{}]},{},[1]); |
{ | ||
"name": "mediaelement-plugins", | ||
"version": "2.6.0", | ||
"version": "2.6.1", | ||
"repository": { | ||
@@ -44,3 +44,3 @@ "type": "git", | ||
"global": "^4.3.1", | ||
"mediaelement": "^4.0.7" | ||
"mediaelement": "^5.0.1" | ||
}, | ||
@@ -47,0 +47,0 @@ "browserify": { |
@@ -37,4 +37,4 @@ 'use strict'; | ||
* @type Function | ||
*/ | ||
qualityChangeCallback: null | ||
*/ | ||
qualityChangeCallback: null | ||
}); | ||
@@ -152,12 +152,10 @@ | ||
// Get initial quality | ||
player.qualitiesButton = document.createElement('div'); | ||
player.qualitiesButton.className = `${t.options.classPrefix}button ${t.options.classPrefix}qualities-button`; | ||
player.qualitiesButton.innerHTML = `<button type="button" aria-controls="${t.id}" title="${qualityTitle}" ` + | ||
`aria-label="${qualityTitle}" tabindex="0">${defaultValue}</button>` + | ||
const generateId = Math.floor(Math.random() * 100); | ||
player.qualitiesContainer = document.createElement('div'); | ||
player.qualitiesContainer.className = `${t.options.classPrefix}button ${t.options.classPrefix}qualities-button`; | ||
player.qualitiesContainer.innerHTML = `<button type="button" title="${qualityTitle}" aria-label="${qualityTitle}" aria-controls="qualitieslist-${generateId}" aria-expanded="false">${defaultValue}</button>` + | ||
`<div class="${t.options.classPrefix}qualities-selector ${t.options.classPrefix}offscreen">` + | ||
`<ul class="${t.options.classPrefix}qualities-selector-list"></ul>` + | ||
`</div>`; | ||
`<ul class="${t.options.classPrefix}qualities-selector-list" id="qualitieslist-${generateId}" tabindex="-1"></ul></div>`; | ||
t.addControlElement(player.qualitiesButton, 'qualities'); | ||
t.addControlElement(player.qualitiesContainer, 'qualities'); | ||
@@ -171,38 +169,70 @@ qualityMap.forEach(function (value, key) { | ||
; | ||
player.qualitiesButton.querySelector('ul').innerHTML += `<li class="${t.options.classPrefix}qualities-selector-list-item">` + | ||
`<input class="${t.options.classPrefix}qualities-selector-input" type="radio" name="${t.id}_qualities"` + | ||
`disabled="disabled" value="${quality}" id="${inputId}" ` + | ||
`${(quality === defaultValue ? ' checked="checked"' : '')}/>` + | ||
`<label for="${inputId}" class="${t.options.classPrefix}qualities-selector-label` + | ||
`${(quality === defaultValue ? ` ${t.options.classPrefix}qualities-selected` : '')}">` + | ||
`${src.title || quality}</label>` + | ||
`</li>`; | ||
player.qualitiesContainer.querySelector('ul').innerHTML += `<li class="${t.options.classPrefix}qualities-selector-list-item">` + | ||
`<input class="${t.options.classPrefix}qualities-selector-input" type="radio" name="${t.id}_qualities" disabled="disabled"` + | ||
`value="${quality}" id="${inputId}" ${(quality === defaultValue ? ' checked="checked"' : '')} />` + | ||
`<label for="${inputId}" class="${t.options.classPrefix}qualities-selector-label ${(quality === defaultValue ? ` ${t.options.classPrefix}qualities-selected` : '')}">` + | ||
`${src.title || quality} </label></li>`; | ||
} | ||
}); | ||
let isHidden = true; | ||
const | ||
inEvents = ['mouseenter', 'focusin'], | ||
outEvents = ['mouseleave', 'focusout'], | ||
qualityContainer = player.qualitiesContainer, | ||
qualityButton = player.qualitiesContainer.querySelector(`button`), | ||
qualitiesSelector = player.qualitiesContainer.querySelector(`.${t.options.classPrefix}qualities-selector`), | ||
qualitiesList = player.qualitiesContainer.querySelector(`.${t.options.classPrefix}qualities-selector-list`), | ||
// Enable inputs after they have been appended to controls to avoid tab and up/down arrow focus issues | ||
radios = player.qualitiesButton.querySelectorAll('input[type="radio"]'), | ||
labels = player.qualitiesButton.querySelectorAll(`.${t.options.classPrefix}qualities-selector-label`), | ||
selector = player.qualitiesButton.querySelector(`.${t.options.classPrefix}qualities-selector`) | ||
radios = player.qualitiesContainer.querySelectorAll('input[type="radio"]'), | ||
labels = player.qualitiesContainer.querySelectorAll(`.${t.options.classPrefix}qualities-selector-label`) | ||
; | ||
// hover or keyboard focus | ||
for (let i = 0, total = inEvents.length; i < total; i++) { | ||
player.qualitiesButton.addEventListener(inEvents[i], () => { | ||
mejs.Utils.removeClass(selector, `${t.options.classPrefix}offscreen`); | ||
selector.style.height = `${selector.querySelector('ul').offsetHeight}px`; | ||
selector.style.top = `${(-1 * parseFloat(selector.offsetHeight))}px`; | ||
}); | ||
function hideSelector() { | ||
mejs.Utils.addClass(qualitiesSelector, `${t.options.classPrefix}offscreen`); | ||
qualityButton.removeAttribute('aria-expanded'); | ||
qualityButton.setAttribute('aria-expanded', 'false'); | ||
qualityButton.focus(); | ||
isHidden = true; | ||
} | ||
for (let i = 0, total = outEvents.length; i < total; i++) { | ||
player.qualitiesButton.addEventListener(outEvents[i], () => { | ||
setTimeout(() => { | ||
mejs.Utils.addClass(selector, `${t.options.classPrefix}offscreen`); | ||
}, 50); | ||
}); | ||
function showSelector() { | ||
mejs.Utils.removeClass(qualitiesSelector, `${t.options.classPrefix}offscreen`); | ||
qualitiesSelector.style.height = `${qualitiesSelector.querySelector('ul').offsetHeight}px`; | ||
qualitiesSelector.style.top = `${(-1 * parseFloat(qualitiesSelector.offsetHeight))}px`; | ||
qualityButton.setAttribute('aria-expanded', 'true'); | ||
qualitiesList.focus(); | ||
isHidden = false; | ||
} | ||
qualityButton.addEventListener('click', () => { | ||
if (isHidden === true) { | ||
showSelector(); | ||
} else { | ||
hideSelector(); | ||
} | ||
}); | ||
qualitiesList.addEventListener('focusout', (event) =>{ | ||
if (!qualityContainer.contains(event.relatedTarget)) { | ||
hideSelector(); | ||
} | ||
}); | ||
qualityButton.addEventListener('mouseenter', () =>{ | ||
showSelector(); | ||
}); | ||
qualityContainer.addEventListener('mouseleave', () =>{ | ||
hideSelector(); | ||
}); | ||
// Close with Escape key. | ||
// Allow up/down arrow to change the selected radio without changing the volume. | ||
qualityContainer.addEventListener('keydown', (event) => { | ||
if(event.key === "Escape"){ | ||
hideSelector(); | ||
} | ||
event.stopPropagation(); | ||
}); | ||
for (let i = 0, total = radios.length; i < total; i++) { | ||
@@ -244,2 +274,3 @@ const radio = radios[i]; | ||
} | ||
for (let i = 0, total = labels.length; i < total; i++) { | ||
@@ -255,6 +286,2 @@ labels[i].addEventListener('click', function () { | ||
//Allow up/down arrow to change the selected radio without changing the volume. | ||
selector.addEventListener('keydown', (e) => { | ||
e.stopPropagation(); | ||
}); | ||
}, | ||
@@ -270,4 +297,4 @@ | ||
if (player) { | ||
if (player.qualitiesButton) { | ||
player.qualitiesButton.remove(); | ||
if (player.qualitiesContainer) { | ||
player.qualitiesContainer.remove(); | ||
} | ||
@@ -367,3 +394,3 @@ } | ||
switchDashQuality (player, media) { | ||
const radios = player.qualitiesButton.querySelectorAll('input[type="radio"]'); | ||
const radios = player.qualitiesContainer.querySelectorAll('input[type="radio"]'); | ||
for (let index = 0; index < radios.length; index++) { | ||
@@ -387,3 +414,3 @@ if (radios[index].checked) { | ||
switchHLSQuality (player, media) { | ||
const radios = player.qualitiesButton.querySelectorAll('input[type="radio"]'); | ||
const radios = player.qualitiesContainer.querySelectorAll('input[type="radio"]'); | ||
for (let index = 0; index < radios.length; index++) { | ||
@@ -413,3 +440,3 @@ if (radios[index].checked) { | ||
const selected = player.qualitiesButton.querySelectorAll(`.${t.options.classPrefix}qualities-selected`); | ||
const selected = player.qualitiesContainer.querySelectorAll(`.${t.options.classPrefix}qualities-selected`); | ||
for (let i = 0, total = selected.length; i < total; i++) { | ||
@@ -425,3 +452,3 @@ mejs.Utils.removeClass(selected[i], `${t.options.classPrefix}qualities-selected`); | ||
player.qualitiesButton.querySelector('button').innerHTML = newQuality; | ||
player.qualitiesContainer.querySelector('button').innerHTML = newQuality; | ||
}, | ||
@@ -428,0 +455,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
780560
13978
0
+ Addedmediaelement@5.1.2(transitive)
+ Addedsvg4everybody@2.1.9(transitive)
- Removedmediaelement@4.2.17(transitive)
Updatedmediaelement@^5.0.1