various linter-related changes to formatting

This commit is contained in:
Tilman Kranz 2024-11-11 02:36:06 +01:00 committed by Tilman Kranz
parent 19c568d27a
commit 996dfb4029

View File

@ -21,401 +21,427 @@
* THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE */ * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE */
var MyPlayer = function(_args) { var MyPlayer = function(_args) {
var failed = false; var failed = false,
var detached = false; detached = false,
var player = null; player = null,
args_default = {
autoplay: false,
css: { "height": "500px" },
detachable: true,
element: "body",
id3: false,
list: [],
loop: true,
mode: "mp3url",
shuffle: false,
waveform: false
},
args = (_args===undefined) ? args_default : $.extend({}, args_default, _args),
mimeTypeFromSrc = function(src) {
var extension = src.split(".").pop().toLowerCase();
var defaultArgs = { var types = {
detachable: true, "3g2": "video/3gpp2",
element: 'body', "3gp": "video/3gpp",
id3: false, "7z": "application/x-7z-compressed",
mode: 'mp3url', "aac": "audio/aac",
waveform: false, "abw": "application/x-abiword",
autoplay: false, "arc": "application/x-freearc",
loop: true, "avi": "video/x-msvideo",
shuffle: false, "azw": "application/vnd.amazon.ebook",
list: [] "bin": "application/octet-stream",
}; "bmp": "image/bmp",
"bz": "application/x-bzip",
"bz2": "application/x-bzip2",
"cda": "application/x-cdf",
"csh": "application/x-csh",
"css": "text/css",
"csv": "text/csv",
"doc": "application/msword",
"eot": "application/vnd.ms-fontobject",
"epub": "application/epub+zip",
"gif": "image/gif",
"gz": "application/gzip",
"htm": "text/html",
"html": "text/html",
"ico": "image/vnd.microsoft.icon",
"ics": "text/calendar",
"jar": "application/java-archive",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"js": "text/javascript",
"json": "application/json",
"jsonld": "application/ld+json",
"mid": "audio/midi audio/x-midi",
"midi": "audio/midi audio/x-midi",
"mjs": "text/javascript",
"mp3": "audio/mpeg",
"mp4": "video/mp4",
"mpeg": "video/mpeg",
"mpkg": "application/vnd.apple.installer+xml",
"odp": "application/vnd.oasis.opendocument.presentation",
"ods": "application/vnd.oasis.opendocument.spreadsheet",
"odt": "application/vnd.oasis.opendocument.text",
"oga": "audio/ogg",
"ogv": "video/ogg",
"ogx": "application/ogg",
"opus": "audio/opus",
"otf": "font/otf",
"pdf": "application/pdf",
"php": "application/x-httpd-php",
"png": "image/png",
"ppt": "application/vnd.ms-powerpoint",
"rar": "application/vnd.rar",
"rtf": "application/rtf",
"sh": "application/x-sh",
"svg": "image/svg+xml",
"swf": "application/x-shockwave-flash",
"tar": "application/x-tar",
"tif": "image/tiff",
"tiff": "image/tiff",
"ts": "video/mp2t",
"ttf": "font/ttf",
"txt": "text/plain",
"vsd": "application/vnd.visio",
"wav": "audio/wav",
"weba": "audio/webm",
"webm": "video/webm",
"webp": "image/webp",
"woff": "font/woff",
"woff2": "font/woff2",
"xhtml": "application/xhtml+xml",
"xls": "application/vnd.ms-excel",
"xml": "application/xml",
"xul": "application/vnd.mozilla.xul+xml",
"zip": "application/zip"
};
var mimeTypeFromSrc = function(src) { return types[extension] || "application/octet-stream";
var extension = src.split('.').pop().toLowerCase(); },
createAudio = function() {
var autoplay = args.autoplay ? 'autoplay="true"' : '';
var styles = [];
var style;
var key;
return { for (key in args.css) {
"aac": "audio/aac", var value = args.css[key];
"abw": "application/x-abiword", styles.push(`${key}: ${value}`);
"arc": "application/x-freearc",
"avi": "video/x-msvideo",
"azw": "application/vnd.amazon.ebook",
"bin": "application/octet-stream",
"bmp": "image/bmp",
"bz": "application/x-bzip",
"bz2": "application/x-bzip2",
"cda": "application/x-cdf",
"csh": "application/x-csh",
"css": "text/css",
"csv": "text/csv",
"doc": "application/msword",
"docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"eot": "application/vnd.ms-fontobject",
"epub": "application/epub+zip",
"gz": "application/gzip",
"gif": "image/gif",
"htm": "text/html",
"html": "text/html",
"ico": "image/vnd.microsoft.icon",
"ics": "text/calendar",
"jar": "application/java-archive",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"js": "text/javascript",
"json": "application/json",
"jsonld": "application/ld+json",
"mid": "audio/midi audio/x-midi",
"midi": "audio/midi audio/x-midi",
"mjs": "text/javascript",
"mp3": "audio/mpeg",
"mp4": "video/mp4",
"mpeg": "video/mpeg",
"mpkg": "application/vnd.apple.installer+xml",
"odp": "application/vnd.oasis.opendocument.presentation",
"ods": "application/vnd.oasis.opendocument.spreadsheet",
"odt": "application/vnd.oasis.opendocument.text",
"oga": "audio/ogg",
"ogv": "video/ogg",
"ogx": "application/ogg",
"opus": "audio/opus",
"otf": "font/otf",
"png": "image/png",
"pdf": "application/pdf",
"php": "application/x-httpd-php",
"ppt": "application/vnd.ms-powerpoint",
"pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
"rar": "application/vnd.rar",
"rtf": "application/rtf",
"sh": "application/x-sh",
"svg": "image/svg+xml",
"swf": "application/x-shockwave-flash",
"tar": "application/x-tar",
"tif": "image/tiff",
"tiff": "image/tiff",
"ts": "video/mp2t",
"ttf": "font/ttf",
"txt": "text/plain",
"vsd": "application/vnd.visio",
"wav": "audio/wav",
"weba": "audio/webm",
"webm": "video/webm",
"webp": "image/webp",
"woff": "font/woff",
"woff2": "font/woff2",
"xhtml": "application/xhtml+xml",
"xls": "application/vnd.ms-excel",
"xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"xml": "application/xml",
"xul": "application/vnd.mozilla.xul+xml",
"zip": "application/zip",
"3gp": "video/3gpp",
"3g2": "video/3gpp2",
"7z": "application/x-7z-compressed"
}[extension] || "application/octet-stream";
};
var args = (typeof(_args)==='undefined')
? defaultArgs
: $.extend({}, defaultArgs, _args);
var createAudio = function() {
var autoplay = args.autoplay ? 'autoplay="true"' : '';
$(args.element).append(
'<audio id="myplayer" controls="controls" ' + autoplay + '>'+
'<p>'+
'Your browser does not understand '+
'the &lt;audio&gt; tag. '+
'</p>'+
'</audio>'
);
args.audio = args.element + ' audio';
$(args.audio).css({
'height': '500px',
});
};
var readId3 = function() {
$(args.element).find('ul.mejs li').each(function(i, track){
var url = $(track).attr('data-url');
$(track).prepend('<span class="ajaxLoader">&nbsp;</span>&nbsp;');
jsmediatags.read(url, {
onSuccess: function(tag) {
var tags = tag.tags;
var track_title;
if(typeof(tags.title)!='undefined')
track_title = tags.title;
else
track_title = url;
if(typeof(tags.artist)!='undefined')
track_title = tags.artist + ' - ' + track_title;
$(args.element).find('ul.mejs li').each(function(j, _track){
if(i==j)
$(_track).html(track_title);
});
} }
});
});
};
var playerCreated = function() { style = styles.join(" ");
restoreParams(); args.audio = $(`<audio id="myplayer" controls="controls" style="${style}" ${autoplay}></audio>`);
console.log("DEBUG: appending audio=", args.audio, " to element=", args.element, " ...");
$(args.element).append(args.audio);
},
readId3 = function() {
$(args.element).find('ul.mejs li').each(function(i, track){
var url = $(track).attr('data-url');
if(args.id3) $(track).prepend('<span class="ajaxLoader">&nbsp;</span>&nbsp;');
readId3();
};
var createPlayer = function() { jsmediatags.read(url, {
player = new MediaElementPlayer( onSuccess: function(tag) {
"myplayer", { var tags = tag.tags;
success: playerCreated, var track_title;
features: ['playpause', 'current', 'progress', 'duration', 'volume', 'playlist', 'prevtrack', 'nexttrack', 'shuffle', 'loop']
});
$(args.element).append( if(typeof(tags.title)!='undefined') {
'<p class="playerDetached" style="display: none;">'+ track_title = tags.title;
'The player is currently detached.'+ }
'</p>' else {
); track_title = url;
}; }
var param = function(name) { if(typeof(tags.artist)!='undefined') {
var query = window.location.search.substring(1); track_title = tags.artist + ' - ' + track_title;
var vars = query.split("&"); }
for(var i=0; i<vars.length; i++) { $(args.element).find('ul.mejs li').each(function(j, _track){
var pair = vars[i].split("="); if(i==j) {
$(_track).html(track_title);
}
});
}
});
});
},
playerCreated = function(mediaElement, originalNode, instance) {
restoreParams();
if(pair[0] == name) if(args.shuffle) {
return pair[1]; instance.shuffleCallback();
} }
return false; if(args.loop) {
}; instance.loopCallback();
}
var setupDetach = function() { if(args.id3) {
if(!args.detachable) readId3();
return; }
},
var popup = function(url) { createPlayer = function() {
player.pause(); player = new MediaElementPlayer(
$('.mejs-audio').hide(); "myplayer", {
$('.playerDetached').show(); success: playerCreated,
features: [
var playerWindow = window.open( 'playpause',
url, 'myplayer', 'current',
'height='+ Math.max($(args.element).height(), 298)+','+ 'progress',
'width='+408+','+ 'duration',
'resizable=false' 'volume',
); 'playlist',
'prevtrack',
if(window.focus) 'nexttrack',
playerWindow.focus(); 'shuffle',
'loop'
$("iframe",top.document).height(20); ]
return false;
};
if(param('popup')==false) {
$('.mejs-controls').append(
'<div id="popupButton" '+
'class="popupButton">'+
'<button '+
'title="Open in separate window" '+
'type="button">'+
'</button>'+
'</div>'
);
$('.popupButton button').click(function(){
var currentTime = player.getCurrentTime();
var volume = player.getVolume();
var paused = player.media.paused;
var trackNo = 0;
$(args.element).find('ul.mejs li').each(function(i){
if($(this).hasClass('current'))
trackNo = i;
}); });
popup( $(args.element).append(
$(location).attr('href')+'?'+ '<p class="playerDetached" style="display: none;">'+
'popup&'+ 'The player is currently detached.'+
'paused='+paused+'&'+ '</p>'
'currentTime='+currentTime+'&'+
'volume='+volume+'&'+
'trackNo='+trackNo
); );
}); },
} param = function(name) {
else { var query = window.location.search.substring(1);
var windowHeight = $(window).height(); var vars = query.split("&");
window.onbeforeunload = function(){ for(i=0; i<vars.length; i++) {
$("iframe", opener.top.document).height(windowHeight); var pair = vars[i].split("=");
$('.mejs-audio', opener.document).show();
$('.playerDetached', opener.document).hide();
};
}
};
var restoreParams = function() { if(pair[0] == name) {
if(!detached) return pair[1];
return; }
}
var paused = (param('paused') && param('paused')=='true'); return false;
var currentTime = param('currentTime') ? parseFloat(param('currentTime')) : 0.0; },
var volume = param('volume') ? parseFloat(param('volume')) : 1.0; setupDetach = function() {
var trackNo = param('trackNo') ? parseInt(param('trackNo')) : 0; if(!args.detachable) {
return;
}
player.setVolume(volume); var popup = function(url) {
player.pause();
$('.mejs-audio').hide();
$('.playerDetached').show();
$(args.element).find('ul.mejs li').each(function(i){ var playerWindow = window.open(
if(i==trackNo) { url, 'myplayer',
player.playTrack($(this)); 'height='+ Math.max($(args.element).height(), 298)+','+
player.setCurrentTime(currentTime); 'width='+408+','+
} 'resizable=false'
}); );
if(paused) if(window.focus) {
player.pause(); playerWindow.focus();
}; }
if(param('popup')!==false) { $("iframe",top.document).height(20);
detached = true;
$('body').html( return false;
'<div '+ };
'id="myplayer" '+
'style="'+
'width: '+$(args.element).width()+'px; '+
'height: '+$(args.element).height()+' px;'+
'"></div>'
);
args.element = '#myplayer'; if(param('popup')==false) {
} $('.mejs-controls').append(
'<div id="popupButton" '+
'class="popupButton">'+
'<button '+
'title="Open in separate window" '+
'type="button">'+
'</button>'+
'</div>'
);
if(args.mode=='mp3url') { $('.popupButton button').click(function(){
var mp3url = (typeof args.mp3url === "undefined") var currentTime = player.getCurrentTime();
? $(location).attr('href').replace(/\?.*/, '').replace(/\/[^\/]+\/?$/, '') var volume = player.getVolume();
: args.mp3url; var paused = player.media.paused;
var trackNo = 0;
$.ajax({ $(args.element).find('ul.mejs li').each(function(i){
url: mp3url, if($(this).hasClass('current')) {
type: 'GET', trackNo = i;
success: function(res) { }
createAudio(); });
var doc = document.createElement('html'); popup(
doc.innerHTML = res; $(location).attr('href')+'?'+
'popup&'+
'paused='+paused+'&'+
'currentTime='+currentTime+'&'+
'volume='+volume+'&'+
'trackNo='+trackNo
);
});
}
else {
var windowHeight = $(window).height();
var head = $(doc).find('a').each(function(idx,item) { window.onbeforeunload = function(){
var src = $(item).attr('href'); $("iframe", opener.top.document).height(windowHeight);
$('.mejs-audio', opener.document).show();
$('.playerDetached', opener.document).hide();
};
}
},
restoreParams = function() {
if(!detached) {
return;
}
if(src.match(/\.mp3$/)) { var paused = (param('paused') && param('paused')=='true');
var url = mp3url+'/'+src; var currentTime = param('currentTime') ? parseFloat(param('currentTime')) : 0.0;
var title = item.innerHTML; var volume = param('volume') ? parseFloat(param('volume')) : 1.0;
var type = "audio/mpeg"; var trackNo = param('trackNo') ? parseInt(param('trackNo')) : 0;
$(args.audio).append('<source src="'+url+'" type="' + type + '" title="'+title+'"/>'); player.setVolume(volume);
$(args.element).find('ul.mejs li').each(function(i){
if(i==trackNo) {
player.playTrack($(this));
player.setCurrentTime(currentTime);
} }
}); });
createPlayer(); if(paused) {
setupDetach(); player.pause();
} }
}); };
}
else if(args.mode=='m3u') {
var m3u = (typeof args.m3u === "undefined")
? $(location).attr('href').replace(/\?.*/, '').replace(/\/[^\/]+\/?$/, '/play.m3u')
: args.m3u;
createAudio(); if(param('popup')!==false) {
detached = true;
$.get(m3u, function(txt){ $('body').html(
var lines = txt.split("\n"); '<div ' +
'id="myplayer" ' +
'style="' +
'width: ' + $(args.element).width() + 'px; '+
'height: ' + $(args.element).height() + ' px;'+
'"></div>'
);
for(var i = 0, len = lines.length; i < len; i++) args.element = '#myplayer';
if(!lines[i].match(/^[ \t]*#/) && lines[i].match(/\.mp3$/)) { }
var mp3 = lines[i];
var title = unescape(mp3.split('/').pop());
var type = "audio/mpeg";
$(args.audio).append('<source src="'+mp3+'" type="' + type + '" title="'+title+'"/>'); if(args.mode=='mp3url') {
console.log("args.mode=", args.mode);
var mp3url = (typeof args.mp3url === "undefined")
? $(location).attr('href').replace(/\?.*/, '').replace(/\/[^\/]+\/?$/, '')
: args.mp3url;
$.ajax({
url: mp3url,
type: 'GET',
success: function(res) {
var doc;
var head;
doc = document.createElement('html');
createAudio();
doc.innerHTML = res;
head = $(doc).find('a').each(function(idx,item) {
var src = $(item).attr('href');
if(src.match(/\.mp3$/)) {
var url = mp3url+'/'+src;
var title = item.innerHTML;
var type = "audio/mpeg";
args.audio.append(`<source src="${url}" type="${type}" title="${title}"/>`);
}
});
createPlayer();
setupDetach();
}
});
}
else if(args.mode=='m3u') {
var m3u = (typeof args.m3u === "undefined")
? $(location).attr('href').replace(/\?.*/, '').replace(/\/[^\/]+\/?$/, '/play.m3u')
: args.m3u;
createAudio();
$.get(m3u, function(txt){
var lines = txt.split("\n");
var len = lines.length;
var i = 0;
while(i < len) {
if(!lines[i].match(/^[ \t]*#/) && lines[i].match(/\.mp3$/)) {
var mp3 = lines[i];
var title = unescape(mp3.split('/').pop());
var type = "audio/mpeg";
args.audio.append(`<source src="${mp3}" type="${type}" title="${title}"/>`);
}
i++;
} }
console.log("DEBUG: mode==m3u audio=",$(args.audio)); createPlayer();
setupDetach();
});
}
else if(args.mode=='list') {
var len = args.list.length;
var i = 0;
createPlayer(); createAudio();
setupDetach();
});
}
else if(args.mode=='list') {
createAudio();
for(var i = 0, len = args.list.length; i < len; i++) { while(i < len) {
var item = args.list[i]; var item = args.list[i];
var type = typeof item; var type = typeof item;
var src = ''; var src = '';
var title = ''; var title = '';
var type;
if(item !== null && type === 'object') { if(item !== null && type === 'object') {
if(item.url) if(item.url) {
src = item.url; src = item.url;
}
else {
alert(`MyPlayer: item[${i}]: property "url" is missing.`);
i++;
continue;
}
if(item.title) {
title = item.title;
}
else {
title = url.replace(/(.*\/)?([^\/]+)/, '$2');
}
}
else if(type === 'string') {
src = item;
title = src;
}
else { else {
alert( alert(`MyPlayer: item[${i}]: unsupported type=${type}.`);
'MyPlayer: item[' + i + ']: '+ i++;
'property "url" is missing.' continue;
);
continue;
} }
if(item.title) type = mimeTypeFromSrc(src);
title = item.title;
else
title = url.replace(/(.*\/)?([^\/]+)/, '$2');
}
else if(type === 'string') {
src = item;
title = src;
}
else {
alert(
'MyPlayer: item [' + i + ']: '+
'unsupported type "' + type + '"'
);
continue; args.audio.append(`<source src="${src}" type="${type}" title="${type}"/>`);
}
var type = mimeTypeFromSrc(src); i++;
}
$(args.audio).append('<source src="'+src+'" type="' + type + '" title="'+title+'"/>'); createPlayer();
} setupDetach();
}
createPlayer(); else {
setupDetach(); $(args.element).append(`<p>Unsupported mode ${args.mode}"</p>`);
} failed = true;
else { }
$(args.element).append('<p>Unsupported mode "'+args.mode+'"</p>');
failed = true;
}
}; };