update to latest mediaelement; use playlist from mediaelement-plugins; css build script

This commit is contained in:
2024-11-10 06:58:04 +01:00
committed by Tilman Kranz
parent 5f95d9cef6
commit eeeb9a9559
21 changed files with 8900 additions and 400 deletions

69
src/build.sh Normal file → Executable file
View File

@ -1,8 +1,15 @@
#!/bin/sh
# MyPlayer - Copyright 2014 tilt@linuxfoo.de GPLv3
#!/bin/bash
# MyPlayer - Copyright 2014 - 2024 tilt@linuxfoo.de GPLv3
# Build Script; recompiles the MyPlayer JavaScript from source.
cd $(dirname $0)
dir=$(readlink -f "$(dirname "$0")")
jsdir=$(readlink -f "$dir/../js")
if ! cd "$dir" ; then
echo "ERROR: Could not change working directory; aborted." >&2 ;
exit 1 ;
fi
echo '/*
jQuery
@ -16,19 +23,51 @@ MediaElement Playlist Feature (plugin) -
JavaScript-ID3-Reader
Copyright (c) 2008 Jacob Seidelin, http://blog.nihilogic.dk/ BSD License
Copyright (c) 2009 Opera Software ASA BSD License
Copyright (c) 2010 António Afonso BSD License
Copyright (c) 2010 Antonio Afonso BSD License
Copyright (c) 2010 Joshua Kifer BSD License
MyPlayer
Copyright (c) 2014 tilt@linuxfoo.de MIT License
*/' > ../js/myplayer.min.js
Copyright (c) 2014 - 2024 tilt@linuxfoo.de MIT License
*/' > "$jsdir"/myplayer.min.js
# https://developers.google.com/closure/compiler/
java \
-jar /usr/local/lib/closure-compiler/compiler.jar \
--js mediaelement-and-player.min.js \
--js mep-feature-playlist.js \
--js id3-minimized.js \
--js player.js \
>> ../js/myplayer.min.js
type yui-compressor > /dev/null || {
echo "ERROR: Executable \"yui-compressor\" not found in PATH; aborted." >&2 ;
exit 1 ;
}
echo "Done: Javascript source has compiled into ../js/myplayer.min.js"
rm -f "$jsdir"/myplayer.min.js
for js in \
../mediaelement/build/mediaelement-and-player.min.js \
../mediaelement-plugins/dist/playlist/playlist.min.js
do
echo "INFO: Appending $js ..." >&2
cat $js >> "$jsdir"/myplayer.min.js
done
for js in \
id3-minimized.js \
player.js
do
echo "INFO: Compressing $js ..." >&2
yui-compressor "$js" >> "$jsdir"/myplayer.min.js
done
chmod 644 "$jsdir"/myplayer.min.js
echo "INFO: Javascript source was minimized to $jsdir/myplayer.min.js" >&2
rm -f ../js/myplayer.js
for js in \
../mediaelement/build/mediaelement-and-player.js \
../mediaelement-plugins/dist/playlist/playlist.js \
id3-minimized.js \
player.js
do
echo "INFO: Appending $js ..." >&2
cat $js >> "$jsdir"/myplayer.js
done
chmod 644 "$jsdir"/myplayer.js
echo "INFO: Uncompressed javascript source was collected in $jsdir/myplayer.js" >&2

View File

@ -37,6 +37,89 @@ var MyPlayer = function(_args) {
list: []
};
var mimeTypeFromSrc = function(src) {
var extension = src.split('.').pop().toLowerCase();
return {
"aac": "audio/aac",
"abw": "application/x-abiword",
"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);
@ -45,7 +128,7 @@ var MyPlayer = function(_args) {
var autoplay = args.autoplay ? 'autoplay="true"' : '';
$(args.element).append(
'<audio controls="controls" ' + autoplay + '>'+
'<audio id="myplayer" controls="controls" ' + autoplay + '>'+
'<p>'+
'Your browser does not understand '+
'the &lt;audio&gt; tag. '+
@ -54,6 +137,10 @@ var MyPlayer = function(_args) {
);
args.audio = args.element + ' audio';
$(args.audio).css({
'height': '500px',
});
}
var readId3 = function() {
@ -89,17 +176,9 @@ var MyPlayer = function(_args) {
var createPlayer = function() {
player = new MediaElementPlayer(
$(args.audio), {
"myplayer", {
success: playerCreated,
loop: args.loop,
shuffle: args.shuffle,
playlist: true,
audioHeight: 32,
playlistposition: 'bottom',
features: ['playlistfeature', 'prevtrack', 'playpause',
'nexttrack', 'loop', 'shuffle', 'current', 'progress',
'duration', 'volume'],
pluginPath: mejs.Utility.getScriptPath(['myplayer.min.js'])+'../plugins/'
features: ['playpause', 'current', 'progress', 'duration', 'volume', 'playlist', 'prevtrack', 'nexttrack', 'shuffle', 'loop']
});
$(args.element).append(
@ -247,8 +326,9 @@ var MyPlayer = function(_args) {
if(src.match(/\.mp3$/)) {
var url = mp3url+'/'+src;
var title = item.innerHTML;
var type = "audio/mpeg";
$(args.audio).append('<source src="'+url+'" title="'+title+'"/>');
$(args.audio).append('<source src="'+url+'" type="' + type + '" title="'+title+'"/>');
}
});
@ -271,10 +351,13 @@ var MyPlayer = function(_args) {
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+'" title="'+title+'"/>');
$(args.audio).append('<source src="'+mp3+'" type="' + type + '" title="'+title+'"/>');
}
console.log("DEBUG: mode==m3u audio=",$(args.audio));
createPlayer();
setupDetach();
});
@ -318,7 +401,9 @@ var MyPlayer = function(_args) {
continue;
}
$(args.audio).append('<source src="'+src+'" title="'+title+'"/>');
var type = mimeTypeFromSrc(src);
$(args.audio).append('<source src="'+src+'" type="' + type + '" title="'+title+'"/>');
}
createPlayer();