New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

mediaelement-plugins

Package Overview
Dependencies
Maintainers
4
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mediaelement-plugins - npm Package Compare versions

Comparing version 2.6.0 to 2.6.1

9

changelog.md
# 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) {

106

dist/quality/quality.js

@@ -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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc