function getQueryStringValue (key) {
return decodeURIComponent(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + encodeURIComponent(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}
// borrowed from http://gist.github.com/niyazpk/f8ac616f181f6042d1e0
function updateUrlParameter (uri, key, value) {
// remove the hash part before operating on the uri
var
i = uri.indexOf('#'),
hash = i === -1 ? '' : uri.substr(i)
;
uri = i === -1 ? uri : uri.substr(0, i);
var
re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"),
separator = uri.indexOf('?') !== -1 ? "&" : "?"
;
if (!value) {
// remove key-value pair if value is empty
uri = uri.replace(new RegExp("([?&]?)" + key + "=[^&]*", "i"), '');
if (uri.slice(-1) === '?') {
uri = uri.slice(0, -1);
}
// replace first occurrence of & by ? if no ? is present
if (uri.indexOf('?') === -1) {
uri = uri.replace(/&/, '?');
}
} else if (uri.match(re)) {
uri = uri.replace(re, '$1' + key + "=" + value + '$2');
} else {
uri = uri + separator + key + "=" + value;
}
return uri + hash;
}
var
lang = getQueryStringValue('lang') || 'zh-CN',
stretching = getQueryStringValue('stretching') || 'auto',
languageSelector = document.querySelector('select[name=lang]'),
stretchingSelector = document.querySelector('select[name=stretching]'),
sourcesSelector = document.querySelectorAll('select[name=sources]'),
sourcesTotal = sourcesSelector.length
;
languageSelector.value = lang;
languageSelector.addEventListener('change', function () {
window.location.href = updateUrlParameter(window.location.href, 'lang', languageSelector.value);
});
stretchingSelector.value = stretching;
stretchingSelector.addEventListener('change', function () {
window.location.href = updateUrlParameter(window.location.href, 'stretching', stretchingSelector.value);
});
for (var i = 0; i < sourcesTotal; i++) {
sourcesSelector[i].addEventListener('change', function () {
var
media = this.closest('.players').querySelector('.mejs__container').id,
player = mejs.players[media]
;
player.setSrc(this.value.replace('&', '&'));
player.load();
if (!mejs.Features.isiOS && !mejs.Features.isAndroid) {
player.play();
}
var renderer = document.getElementById(player.media.id + '-rendername');
renderer.querySelector('.src').innerHTML = '' + this.value + '';
renderer.querySelector('.renderer').innerHTML = player.media.rendererName;
renderer.querySelector('.error').innerHTML = '';
});
// These media types cannot play at all on iOS, so disabling them
if (mejs.Features.isiOS) {
sourcesSelector[i].querySelector('option[value^="rtmp"]').disabled = true;
if (sourcesSelector[i].querySelector('option[value$="webm"]')) {
sourcesSelector[i].querySelector('option[value$="webm"]').disabled = true;
}
if (sourcesSelector[i].querySelector('option[value$=".mpd"]')) {
sourcesSelector[i].querySelector('option[value$=".mpd"]').disabled = true;
}
if (sourcesSelector[i].querySelector('option[value$=".ogg"]')) {
sourcesSelector[i].querySelector('option[value$=".ogg"]').disabled = true;
}
if (sourcesSelector[i].querySelector('option[value$=".flv"]')) {
sourcesSelector[i].querySelector('option[value*=".flv"]').disabled = true;
}
}
}
document.addEventListener('DOMContentLoaded', function () {
mejs.i18n.language(lang);
var mediaElements = document.querySelectorAll('video, audio'), i, total = mediaElements.length;
for (i = 0; i < total; i++) {
new MediaElementPlayer(mediaElements[i], {
stretching: stretching,
pluginPath: '../build/',
success: function (media) {
var renderer = document.getElementById(media.id + '-rendername');
media.addEventListener('loadedmetadata', function () {
var src = media.originalNode.getAttribute('src').replace('&', '&');
if (src !== null && src !== undefined) {
renderer.querySelector('.src').innerHTML = '' + src + '';
renderer.querySelector('.renderer').innerHTML = media.rendererName;
renderer.querySelector('.error').innerHTML = '';
}
});
media.addEventListener('error', function (e) {
renderer.querySelector('.error').innerHTML = 'Error: ' + e.message;
});
}
});
}
});