Add per-song hiding with right-click
Right-click any song in the rhythm grid to hide it. Hidden songs are stored per-genre in localStorage (drgameHiddenSongs). A "Show N hidden" button appears in the grid to restore them. Same pattern as genre hiding: - Right-click to hide - Persists across page reloads - Cleared by Reset All Data (with math question) https://claude.ai/code/session_01GdFrFqAe9e2DaJ86jZPEZE
This commit is contained in:
+25
-3
@@ -2162,6 +2162,19 @@ var remapping=false,remapStep=0,remapResult={};
|
|||||||
var _savedSettings=JSON.parse(localStorage.getItem("drgameSettings")||"{}");
|
var _savedSettings=JSON.parse(localStorage.getItem("drgameSettings")||"{}");
|
||||||
var gameSpeed=_savedSettings.speed||1.0,masterVolume=_savedSettings.volume||1.0;
|
var gameSpeed=_savedSettings.speed||1.0,masterVolume=_savedSettings.volume||1.0;
|
||||||
var hiddenGenres=JSON.parse(localStorage.getItem("drgameHidden")||"[]");
|
var hiddenGenres=JSON.parse(localStorage.getItem("drgameHidden")||"[]");
|
||||||
|
var hiddenSongs=JSON.parse(localStorage.getItem("drgameHiddenSongs")||"{}");
|
||||||
|
function isSongHidden(genre,name){return hiddenSongs[genre]&&hiddenSongs[genre].indexOf(name)>=0;}
|
||||||
|
function hideSong(genre,name){
|
||||||
|
if(!hiddenSongs[genre])hiddenSongs[genre]=[];
|
||||||
|
if(hiddenSongs[genre].indexOf(name)<0)hiddenSongs[genre].push(name);
|
||||||
|
localStorage.setItem("drgameHiddenSongs",JSON.stringify(hiddenSongs));
|
||||||
|
buildMenu();
|
||||||
|
}
|
||||||
|
function showAllSongs(genre){
|
||||||
|
delete hiddenSongs[genre];
|
||||||
|
localStorage.setItem("drgameHiddenSongs",JSON.stringify(hiddenSongs));
|
||||||
|
buildMenu();
|
||||||
|
}
|
||||||
let gameRhythm=null;
|
let gameRhythm=null;
|
||||||
const HIT_WIN=0.17,SPEED=260;
|
const HIT_WIN=0.17,SPEED=260;
|
||||||
|
|
||||||
@@ -2199,8 +2212,8 @@ function confirmReset(){
|
|||||||
if(ans===null)return;
|
if(ans===null)return;
|
||||||
if(parseInt(ans)===a+b){
|
if(parseInt(ans)===a+b){
|
||||||
localStorage.removeItem("drgame5");localStorage.removeItem("drgameSettings");
|
localStorage.removeItem("drgame5");localStorage.removeItem("drgameSettings");
|
||||||
localStorage.removeItem("drgameGpMap");localStorage.removeItem("drgameHidden");
|
localStorage.removeItem("drgameGpMap");localStorage.removeItem("drgameHidden");localStorage.removeItem("drgameHiddenSongs");
|
||||||
savedScores=[];hiddenGenres=[];gpMap={0:2,1:3,2:0,3:1,4:4,8:4};
|
savedScores=[];hiddenGenres=[];hiddenSongs={};gpMap={0:2,1:3,2:0,3:1,4:4,8:4};
|
||||||
refreshMiniLB();resetSettings();buildMenu();
|
refreshMiniLB();resetSettings();buildMenu();
|
||||||
alert("All data cleared!");
|
alert("All data cleared!");
|
||||||
} else {alert("Incorrect — data NOT cleared.");}
|
} else {alert("Incorrect — data NOT cleared.");}
|
||||||
@@ -2243,13 +2256,22 @@ function buildMenu(){
|
|||||||
gt.appendChild(sb);
|
gt.appendChild(sb);
|
||||||
}
|
}
|
||||||
const rg=document.getElementById("rgrid");rg.innerHTML="";
|
const rg=document.getElementById("rgrid");rg.innerHTML="";
|
||||||
(SYNTH_GENRES[curGenre]||GENRES[curGenre]).forEach((r,i)=>{
|
var songList=SYNTH_GENRES[curGenre]||GENRES[curGenre];
|
||||||
|
var hidCount=0;
|
||||||
|
songList.forEach((r,i)=>{
|
||||||
|
if(isSongHidden(curGenre,r.n)){hidCount++;return;}
|
||||||
const b=document.createElement("button");
|
const b=document.createElement("button");
|
||||||
b.className="rbtn"+(i===curIdx?" sel":"");
|
b.className="rbtn"+(i===curIdx?" sel":"");
|
||||||
b.innerHTML=`${r.n}<small>${r.composer?r.composer+' \u00b7 ':''}${r.bpm} bpm</small>`;
|
b.innerHTML=`${r.n}<small>${r.composer?r.composer+' \u00b7 ':''}${r.bpm} bpm</small>`;
|
||||||
b.onclick=()=>{curIdx=i;stopPreview();document.getElementById("pvlbl").textContent=r.n+" selected";buildMenu();};
|
b.onclick=()=>{curIdx=i;stopPreview();document.getElementById("pvlbl").textContent=r.n+" selected";buildMenu();};
|
||||||
|
b.oncontextmenu=(e)=>{e.preventDefault();hideSong(curGenre,r.n);};
|
||||||
rg.appendChild(b);
|
rg.appendChild(b);
|
||||||
});
|
});
|
||||||
|
if(hidCount>0){
|
||||||
|
const sb=document.createElement("button");sb.className="rbtn";sb.style.opacity="0.4";sb.style.fontSize="10px";
|
||||||
|
sb.textContent="\u2795 Show "+hidCount+" hidden";sb.onclick=()=>showAllSongs(curGenre);
|
||||||
|
rg.appendChild(sb);
|
||||||
|
}
|
||||||
const pl=document.getElementById("plist");pl.innerHTML="";
|
const pl=document.getElementById("plist");pl.innerHTML="";
|
||||||
players.forEach((p,i)=>{
|
players.forEach((p,i)=>{
|
||||||
const row=document.createElement("div");row.className="prow";
|
const row=document.createElement("div");row.className="prow";
|
||||||
|
|||||||
Reference in New Issue
Block a user