Set ${si+1} — ${songs.length} songs · ~${durMin(songs)} min
+ html+=`
Set ${esc(si+1)} — ${esc(songs.length)} songs · ~${esc(durMin(songs))} min
${songs.map((s,i)=>{
const mp = mustPlay.has(s.id) ? '
⚑' : '';
const note = s.note ? `
${esc(s.note)}
` : '';
- return `
${i+1}${mp}${esc(s.title)}${esc(s.artist)}${esc(s.key)}${esc(s.bpm)}
${note}`;
+ return `
${esc(i+1)}${mp}${esc(s.title)}${esc(s.artist)}${esc(s.key)}${esc(s.bpm)}
${note}`;
}).join('')}
`;
});
@@ -1146,11 +1146,11 @@ function doExportHTML(){
const iNames=instrs.map(i=>INSTR_DISPLAY_NAMES[i]||i).join(', ');
let rows='';
sets.forEach((songs,si)=>{
- rows+=`
Set ${si+1} — ${songs.length} songs · ~${durMin(songs)} min
`;
+ rows+=`
Set ${esc(si+1)} — ${esc(songs.length)} songs · ~${esc(durMin(songs))} min
`;
songs.forEach((s,idx)=>{
const note = s.note ? `
${esc(s.note)}
` : '';
const mp = mustPlay.has(s.id) ? '
⚑' : '';
- rows+=`
${idx+1}${mp}${esc(s.title)}${esc(s.artist)}${esc(s.key)}${esc(s.bpm)}
${note}`;
+ rows+=`
${esc(idx+1)}${mp}${esc(s.title)}${esc(s.artist)}${esc(s.key)}${esc(s.bpm)}
${note}`;
});
});
const c=`
${esc(title)} — FMG
@@ -1191,12 +1191,12 @@ function doExportPDF(){
if(!w){toast('Pop-up blocked — allow pop-ups for PDF');return;}
let rows='';
sets.forEach((songs,si)=>{
- rows+=`
Set ${si+1} · ${songs.length} songs · ~${durMin(songs)} min
`;
+ rows+=`
Set ${esc(si+1)} · ${esc(songs.length)} songs · ~${esc(durMin(songs))} min
`;
songs.forEach((s,idx)=>{
const note = s.note ? `
${esc(s.note)}
` : '';
const mp = mustPlay.has(s.id) ? '
⚑ ' : '';
rows+=`
- ${idx+1}
+ ${esc(idx+1)}
${mp}${esc(s.title)}
${esc(s.artist)}
${esc(s.key)}