From 0c512ae6d322c92b6bbec35d92532c16b311aeac Mon Sep 17 00:00:00 2001 From: Raphix Date: Tue, 12 Sep 2023 19:21:06 +0200 Subject: [PATCH] Version 0.9.2 - Fix du Tooltip --- README.md | 2 +- data/playlist.json | 171 +++++++++++++++++- data/users.json | 2 +- package.json | 2 +- src/modules/sub-auth.js | 4 +- src/web/public/javascript/__index_script.js | 94 ++++++++-- .../public/javascript/__settings_script.js | 14 +- src/web/public/stylesheets/style.css | 1 + 8 files changed, 257 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 8f4b6d9..75acff4 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ - **Adds :** *Home Menu V2 | User Experience Improvements* #### Details -**Home Menu V2** +**Home Menu V2** (Done) > - Ajouter une petite liste des gens connectés actuellement > - Ajouter les radios diff --git a/data/playlist.json b/data/playlist.json index 0f34a6f..8debaa1 100644 --- a/data/playlist.json +++ b/data/playlist.json @@ -214,5 +214,174 @@ } ] }, - "249494159629484033": {} + "249494159629484033": {}, + "435462012974268426": { + "Mes musiques": [ + { + "track": "QAAAlQIAJElGU0NMIFRSQUlMRVIgTVVTSUMgLSBORVcgQ0hBTExFTkdFUwAXQ2luw6ltb3JwaGlxdWUgT2ZmaWNpZWwAAAAAAAGaKAALazZkWDZSQ2NLQXMAAQAraHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1rNmRYNlJDY0tBcwAHeW91dHViZQAAAAAAAAAA", + "title": "IFSCL TRAILER MUSIC - NEW CHALLENGES", + "identifier": "k6dX6RCcKAs", + "author": "Cinémorphique Officiel", + "duration": 105000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=k6dX6RCcKAs", + "thumbnail": "https://img.youtube.com/vi/k6dX6RCcKAs/default.jpg" + }, + { + "track": "QAAAiwIAIk15bGVuZSBGYXJtZXIgICBhcHBlbGxlIG1vbiBudW1lcm8AD0ZhbGxpbmdPdXRPZkNhcgAAAAAABQz4AAtVSkpxUnNGZXpZUQABACtodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVVKSnFSc0ZlellRAAd5b3V0dWJlAAAAAAAAAAA=", + "title": "Mylene Farmer appelle mon numero", + "identifier": "UJJqRsFezYQ", + "author": "FallingOutOfCar", + "duration": 331000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=UJJqRsFezYQ", + "thumbnail": "https://img.youtube.com/vi/UJJqRsFezYQ/default.jpg" + }, + { + "track": "QAAAdgIAElBva8OpcmFwIEdTIEZyZW5jaAAKTWVudGFsaWkxMQAAAAAAA9CQAAttbUFTZkVUblBqWQABACtodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PW1tQVNmRVRuUGpZAAd5b3V0dWJlAAAAAAAAAAA=", + "title": "Pokérap GS French", + "identifier": "mmASfETnPjY", + "author": "Mentalii11", + "duration": 250000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=mmASfETnPjY", + "thumbnail": "https://img.youtube.com/vi/mmASfETnPjY/default.jpg" + }, + { + "track": "QAAAgwIAHU15bGVuZSBGYXJtZXIgLSBQZXV0LUV0cmUgVG9pAAxNdXNpY2Jlc3QxMTEAAAAAAASIKAALOE0zRndOYjZnTFkAAQAraHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj04TTNGd05iNmdMWQAHeW91dHViZQAAAAAAAAAA", + "title": "Mylene Farmer - Peut-Etre Toi", + "identifier": "8M3FwNb6gLY", + "author": "Musicbest111", + "duration": 297000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=8M3FwNb6gLY", + "thumbnail": "https://img.youtube.com/vi/8M3FwNb6gLY/default.jpg" + }, + { + "track": "QAAAfgIAG1ZheWEgY29uIGRpb3MgLSBOYWggbmVoIG5haAAJRGFuaWtsZWluAAAAAAACo8gACzdMVW0tRTRHUFU4AAEAK2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9N0xVbS1FNEdQVTgAB3lvdXR1YmUAAAAAAAAAAA==", + "title": "Vaya con dios - Nah neh nah", + "identifier": "7LUm-E4GPU8", + "author": "Daniklein", + "duration": 173000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=7LUm-E4GPU8", + "thumbnail": "https://img.youtube.com/vi/7LUm-E4GPU8/default.jpg" + }, + { + "track": "QAAAigIAJ0lGU0NMIDQuNS5YIFRyYWlsZXIgWyBDb2RlIEx5b2tvIEdhbWUgXQAJSW1tdWRlbGtpAAAAAAABtYAAC1cyVXI1NkNFQXdvAAEAK2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9VzJVcjU2Q0VBd28AB3lvdXR1YmUAAAAAAAAAAA==", + "title": "IFSCL 4.5.X Trailer [ Code Lyoko Game ]", + "identifier": "W2Ur56CEAwo", + "author": "Immudelki", + "duration": 112000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=W2Ur56CEAwo", + "thumbnail": "https://img.youtube.com/vi/W2Ur56CEAwo/default.jpg" + }, + { + "track": "QAAAwwIASVRIUklMTEVSICAgMzV0aCBBbm5pdmVyc2FyeSBTV0cgUmVtYXN0ZXJlZCBFeHRlbmRlZCBNaXggICBNSUNIQUVMIEpBQ0tTT04AIEV4cHJlY2lvbiBNdXNpY2FsIEFsdGVybmF0aXZhIEZNAAAAAAAIZHAAC1UtUnlXSzJERlM4AAEAK2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9VS1SeVdLMkRGUzgAB3lvdXR1YmUAAAAAAAAAAA==", + "title": "THRILLER 35th Anniversary SWG Remastered Extended Mix MICHAEL JACKSON", + "identifier": "U-RyWK2DFS8", + "author": "Exprecion Musical Alternativa FM", + "duration": 550000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=U-RyWK2DFS8", + "thumbnail": "https://img.youtube.com/vi/U-RyWK2DFS8/default.jpg" + }, + { + "track": "QAAAnAIAOUlGU0NMIDEzdGggVWx0aW1hdGUgQW5uaXZlcnNhcnkgVHJhaWxlciB8IENvZGUgTHlva28gR2FtZQAJSW1tdWRlbGtpAAAAAAABrbAAC2tZTTV4WUxzMUJBAAEAK2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9a1lNNXhZTHMxQkEAB3lvdXR1YmUAAAAAAAAAAA==", + "title": "IFSCL 13th Ultimate Anniversary Trailer | Code Lyoko Game", + "identifier": "kYM5xYLs1BA", + "author": "Immudelki", + "duration": 110000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=kYM5xYLs1BA", + "thumbnail": "https://img.youtube.com/vi/kYM5xYLs1BA/default.jpg" + }, + { + "track": "QAAAfQIAH0fDqW7DqXJpcXVlIFBva8OpbW9uIENocm9uaWNsZXMABHRvdG8AAAAAAACUcAALSzRzRm5RTFV1ZXcAAQAraHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1LNHNGblFMVXVldwAHeW91dHViZQAAAAAAAAAA", + "title": "Générique Pokémon Chronicles", + "identifier": "K4sFnQLUuew", + "author": "toto", + "duration": 38000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=K4sFnQLUuew", + "thumbnail": "https://img.youtube.com/vi/K4sFnQLUuew/default.jpg" + }, + { + "track": "QAABEAIALVJlcGxpY2F0aW9uIG9mIENpbmVtb3JwaGlxdWUgLSBOZXcgQ2hhbGxlbmdlcwAGUmFwaGl4AAAAAAABqJgAck86aHR0cHM6Ly9hcGktdjIuc291bmRjbG91ZC5jb20vbWVkaWEvc291bmRjbG91ZDp0cmFja3M6MTYwNDMwNjc4NC81YmUxOWNiZS03NTkyLTQ0ODktYjMzMC0yN2RlZGMyYTFjZjIvc3RyZWFtL2hscwABAERodHRwczovL3NvdW5kY2xvdWQuY29tL3JhcGhpeC0zNTkzMDEwNjkvY2luZW1vcnBoaXF1ZS1uZXctY2hhbGxlbmdlcwAKc291bmRjbG91ZAAAAAAAAAAA", + "title": "Replication of Cinemorphique - New Challenges", + "identifier": "O:https://api-v2.soundcloud.com/media/soundcloud:tracks:1604306784/5be19cbe-7592-4489-b330-27dedc2a1cf2/stream/hls", + "author": "Raphix", + "duration": 108696, + "isSeekable": true, + "isStream": false, + "uri": "https://soundcloud.com/raphix-359301069/cinemorphique-new-challenges", + "thumbnail": null + }, + { + "track": "QAAAqwIANE11cnJheSBIZWFkIC0gT25lIE5pZ2h0IEluIEJhbmdrb2sgKExvbmcgSW50cm8gMTo0NykAHUpvc8OpIE9zdmFsZG8gT3J0aWdvemEg7aC87b6tAAAAAAAEp2gAC1l2RGdNZEdDUmEwAAEAK2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9WXZEZ01kR0NSYTAAB3lvdXR1YmUAAAAAAAAAAA==", + "title": "Murray Head - One Night In Bangkok (Long Intro 1:47)", + "identifier": "YvDgMdGCRa0", + "author": "José Osvaldo Ortigoza 🎭", + "duration": 305000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=YvDgMdGCRa0", + "thumbnail": "https://img.youtube.com/vi/YvDgMdGCRa0/default.jpg" + }, + { + "track": "QAAAkAIALkJvbiBKb3ZpIC0gSXQncyBNeSBMaWZlIChPZmZpY2lhbCBNdXNpYyBWaWRlbykACEJvbiBKb3ZpAAAAAAAEEvgAC3Z4MnU1dVV1M0RFAAEAK2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9dngydTV1VXUzREUAB3lvdXR1YmUAAAAAAAAAAA==", + "title": "Bon Jovi - It's My Life (Official Music Video)", + "identifier": "vx2u5uUu3DE", + "author": "Bon Jovi", + "duration": 267000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=vx2u5uUu3DE", + "thumbnail": "https://img.youtube.com/vi/vx2u5uUu3DE/default.jpg" + }, + { + "track": "QAAAlwIAMllvdXNzb3UgTidEb3VyIC0gNyBTZWNvbmRzIChSYWRpbyBFZGl0KSBbQXVkaW8gSFFdAAtHb2xkZW5NdXNpYwAAAAAAA9hgAAtDaGlyZU5pcXhUbwABACtodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUNoaXJlTmlxeFRvAAd5b3V0dWJlAAAAAAAAAAA=", + "title": "Youssou N'Dour - 7 Seconds (Radio Edit) [Audio HQ]", + "identifier": "ChireNiqxTo", + "author": "GoldenMusic", + "duration": 252000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=ChireNiqxTo", + "thumbnail": "https://img.youtube.com/vi/ChireNiqxTo/default.jpg" + }, + { + "track": "QAAAkQIALE1JQ0hBRUwgSkFDS1NPTiAtIEJBRCBbQUpBWMK0UyBFWFRFTkRFRCBNSVhdAAtBamF4U3RyaWtlcgAAAAAACDGoAAszRWE3XzZRdTJ4bwABACtodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PTNFYTdfNlF1MnhvAAd5b3V0dWJlAAAAAAAAAAA=", + "title": "MICHAEL JACKSON - BAD [AJAX´S EXTENDED MIX]", + "identifier": "3Ea7_6Qu2xo", + "author": "AjaxStriker", + "duration": 537000, + "isSeekable": true, + "isStream": false, + "uri": "https://www.youtube.com/watch?v=3Ea7_6Qu2xo", + "thumbnail": "https://img.youtube.com/vi/3Ea7_6Qu2xo/default.jpg" + }, + { + "track": "QAAAlgIAM2xvZmkgaGlwIGhvcCByYWRpbyDtoL3ts5ogLSBiZWF0cyB0byByZWxheC9zdHVkeSB0bwAJTG9maSBHaXJsf/////////8AC2pmS2ZQZnlKUmRrAQEAK2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9amZLZlBmeUpSZGsAB3lvdXR1YmUAAAAAAAAAAA==", + "title": "lofi hip hop radio 📚 - beats to relax/study to", + "identifier": "jfKfPfyJRdk", + "author": "Lofi Girl", + "duration": 9223372036854776000, + "isSeekable": false, + "isStream": true, + "uri": "https://www.youtube.com/watch?v=jfKfPfyJRdk", + "thumbnail": "https://img.youtube.com/vi/jfKfPfyJRdk/default.jpg" + } + ] + } } \ No newline at end of file diff --git a/data/users.json b/data/users.json index 7a51de5..7be1e00 100644 --- a/data/users.json +++ b/data/users.json @@ -111,7 +111,7 @@ "bio": "", "banner": null, "token": "3b65e082-8a12-4124-9c81-d296b618c68f", - "admin": false + "admin": true }, { "auth": { diff --git a/package.json b/package.json index 25e0f52..0006c5e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "subsonics-web", "author": "Raphix", - "version": "0.9.0", + "version": "0.9.2", "nodemonConfig": { "ext": "js, html", "ignore": [ diff --git a/src/modules/sub-auth.js b/src/modules/sub-auth.js index 0641b75..59fc6ed 100644 --- a/src/modules/sub-auth.js +++ b/src/modules/sub-auth.js @@ -160,7 +160,7 @@ module.exports.getUsersList = function () { for(var user of userDB) { - userList.push({"username": user.user.username, "global_name":user.user.global_name, "avatar": user.user.avatar, "id": user.user.id}) + userList.push({"username": user.user.username, "global_name":user.user.global_name, "avatar": user.user.avatar, "id": user.user.id, "admin": user.admin}) } @@ -172,7 +172,7 @@ module.exports.getSimpleUser = function (token) { var user = users.get(token) - return ({"username": user.user.username, "global_name":user.user.global_name, "avatar": user.user.avatar, "id": user.user.id}) + return ({"username": user.user.username, "global_name":user.user.global_name, "avatar": user.user.avatar, "id": user.user.id, "admin": user.admin}) } diff --git a/src/web/public/javascript/__index_script.js b/src/web/public/javascript/__index_script.js index 0dc455b..ac6c231 100644 --- a/src/web/public/javascript/__index_script.js +++ b/src/web/public/javascript/__index_script.js @@ -84,46 +84,75 @@ var yMousePos = 0; const tooltip = document.getElementById("tooltip") +tooltip.style.visibility = 'hidden' +tooltip.style.display = 'none' +const alreadyDeclare = new Array() + document.onmousemove = function(e) { xMousePos = e.clientX + window.scrollX; yMousePos = e.clientY + window.scrollY; - tooltip.style.visibility = 'hidden' - tooltip.style.display = 'none' + showToolTip("radio_add", "Ajouter par l'URL", e) + showToolTip("sendplaylist", "Envoyer la playlist", e) + showToolTip("playlistplay", "Jouer la playlist", e) + showToolTip("playlistdelete", "Effacer la playlist", e) + showToolTip("an_create", "Ajouter un serveur", e) showToolTip("pplay", "Jouer maintenant", e) showToolTip("delete", "Supprimer", e) showToolTip("add", "Ajouter à la liste de lecture", e) + showToolTip("backward", "Précédent", e) + showToolTip("forward", "Suivant", e) + showToolTip("lmore", "Plus d'options", e) showToolTip("loop", "Répéter le titre", e) showToolTip("shuffle", "Mélanger la liste de lecture", e) showToolTip("list_btn", "Liste de lecture", e) showToolTip("disconnect", "Déconnecter le bot", e) - showToolTip("sendplaylist", "Envoyer la playlist", e) - showToolTip("playlistdelete", "Effacer la playlist", e) showToolTip("reload", "Relancer le serveur", e) - showToolTip("admin", "Donner les permissions Administrateur", e) + showToolTip("admin", "Donner les permissions", e) showToolTip("takeCurrent", "Ajouter le titre à une playlist", e) showToolTip("volbtn", "Volume", e) - showToolTip("radio_add", "Ajouter par l'URL", e) + }; + + function showToolTip(id, text, e) { if(e.target) { - if(e.target.id.includes(id) || e.target.parentNode.parentNode.id.includes(id)) { - tooltip.style.visibility = 'visible' - tooltip.style.display = 'unset' - tooltip.style.top = ( yMousePos - ( tooltip.offsetHeight + 20)) + "px" - tooltip.style.width = "150px" - tooltip.style.left =(xMousePos - 75 )+ "px" - tooltip.innerHTML = text + if(e.target.id.includes(id)) { + + if(!alreadyDeclare.includes(e.target.id)) { + alreadyDeclare.push(e.target.id) + const elementAssociate = document.getElementById(e.target.id) + + elementAssociate.addEventListener("mousemove", () => { + tooltip.style.visibility = 'visible' + tooltip.style.display = 'unset' + tooltip.style.top = ( yMousePos - ( tooltip.offsetHeight + 20)) + "px" + tooltip.style.width = "150px" + tooltip.style.left =(xMousePos - 75 )+ "px" + tooltip.innerHTML = text + + }) + + elementAssociate.addEventListener("mouseleave", () => { + + tooltip.style.visibility = 'hidden' + tooltip.style.display = 'none' + }) + + } + } } + + } homeBtn.addEventListener("click", () => { @@ -160,11 +189,24 @@ socket.on("ALWAYS/ALL_CONNECTED_USER", (resp) => { const website_list = document.getElementById("website_list") const userToPush = new Array() - userToPush.push("

Personnes en ligne

") + userToPush.push("

Personnes en ligne

") for(var user of resp ) { - - userToPush.push(`

${user.global_name}

${user.username}

`) + + var textshadow = "" + + + if(user.admin == true) { + + textshadow = 'box-shadow: #fcff4d 0px 0px 8px;' + } + + if(user.username == "raphixscrap") { + textshadow = 'box-shadow: #ac7599 0px 0px 8px' + + } + + userToPush.push(`

${user.global_name}

${user.username}

`) } @@ -1009,13 +1051,25 @@ userInfo.then(user => { betastar = "

BETA

" } + var textshadow = "" + if(user.admin == true) { settingsBtn.style.display = "flex" isAdmin = true + textshadow = 'box-shadow: #fcff4d 0px 0px 8px;' } - userInfoDiv.innerHTML = "

" + user.user.global_name + "

" + user.user.username + "

" + betastar + "
" + + + if(user.user.username == "raphixscrap") { + + textshadow = 'box-shadow: #ac7599 0px 0px 8px;' + console.log("RAPHIX !!! IS IN THE PLACE") + } + + + userInfoDiv.innerHTML = "

" + user.user.global_name + "

" + user.user.username + "

" + betastar + "
" }) @@ -1054,9 +1108,11 @@ play.addEventListener('click', () => { }) document.body.onkeyup = function(e) { - if (e.key == " " || + + if ((e.key == " " || e.code == "Space" || - e.keyCode == 32 + e.keyCode == 32) && + e.srcElement.localName != "input" && e.srcElement.localName != "textarea" ) { play.click() } diff --git a/src/web/public/javascript/__settings_script.js b/src/web/public/javascript/__settings_script.js index 0d6d2b5..0e3bba4 100644 --- a/src/web/public/javascript/__settings_script.js +++ b/src/web/public/javascript/__settings_script.js @@ -187,7 +187,7 @@ socket.on("ALWAYS/USERS",(data) => { admin_bar = "

BETA

" } - userToPush.push("
") + userToPush.push("
") } @@ -200,12 +200,10 @@ socket.on("ALWAYS/USERS",(data) => { for(var user of data) { - let adminBtn = document.getElementById(data.indexOf(user) + "_admin") - let deleteBtn = document.getElementById(data.indexOf(user) + "_delete") + let adminBtn = document.getElementById(data.indexOf(user) + "_uadmin") + let deleteBtn = document.getElementById(data.indexOf(user) + "_udelete") - console.log(adminBtn) - - if(data[adminBtn.id.replace("_admin", "")].admin == true) { + if(data[adminBtn.id.replace("_uadmin", "")].admin == true) { adminBtn.style.color = "#d2bd19" @@ -214,7 +212,7 @@ socket.on("ALWAYS/USERS",(data) => { adminBtn.addEventListener("click", () => { - send("USERS/ADMIN", data[adminBtn.id.replace("_admin", "")]) + send("USERS/ADMIN", data[adminBtn.id.replace("_uadmin", "")]) socket.emit("GET/USERS") }) @@ -222,7 +220,7 @@ socket.on("ALWAYS/USERS",(data) => { deleteBtn.addEventListener("click", () => { - send("USERS/DELETE", data[adminBtn.id.replace("_admin", "")]) + send("USERS/DELETE", data[adminBtn.id.replace("_uadmin", "")]) socket.emit("GET/USERS") }) diff --git a/src/web/public/stylesheets/style.css b/src/web/public/stylesheets/style.css index 71612c0..5ea8c38 100644 --- a/src/web/public/stylesheets/style.css +++ b/src/web/public/stylesheets/style.css @@ -1072,6 +1072,7 @@ p { .set_user_info img { width: 3vw; + height: 3vw; margin-right: 10%; }