javascript:(async function(){
const currentUrl=window.location.href;
const match=currentUrl.match(/(https:\/\/www\.rollspel\.nu\/threads\/[^\/]+\/)/);
if(!match){alert("Kunde inte hitta trådens URL.");return;}
const threadUrl=match[1];
const voteRegex=/Röst:\s*@?([A-Za-z0-9_åäöÅÄÖ\- ]+)/;
const votes=[];
for(let page=1;page<=50;page++){
const url=page===1?threadUrl:`${threadUrl}page-${page}`;
try{
const response=await fetch(url);
if(!response.ok)throw new Error(`Misslyckades att hämta sida ${page}`);
const html=await response.text();
const parser=new DOMParser();
const doc=parser.parseFromString(html,'text/html');
const posts=doc.querySelectorAll('article[data-author]');
posts.forEach(post=>{
const username=post.getAttribute('data-author');
post.querySelectorAll('blockquote').forEach(bq=>bq.remove());
const content=post.querySelector('.message-content')?.innerHTML;
const postId=post.id?.replace('js-post-','');
if(content){
const tempDiv=document.createElement('div');
tempDiv.innerHTML=content;
const cleanContent=tempDiv.textContent||tempDiv.innerText;
cleanContent.split('\n').forEach(line=>{
const match=line.match(voteRegex);
if(match&&postId){
votes.push({from:username,to:match[1],postId});
}
});
}
});
const nextPage=doc.querySelector('.pageNav-jump--next');
if(!nextPage)break;
}catch(err){
console.error(err);
break;
}
}
const votesByUser={};
votes.forEach(v=>{
if(!votesByUser[v.from])votesByUser[v.from]=[];
votesByUser[v.from].push(v);
});
const voteCounts={};
Object.values(votesByUser).forEach(voteList=>{
voteList.forEach(v=>{
voteCounts[v.to]=(voteCounts[v.to]||0)+1;
});
});
let mostVoted=null;
let mostVotes=-1;
for(const[person,count]of Object.entries(voteCounts)){
if(count>mostVotes){
mostVotes=count;
mostVoted=person;
}
}
const table=document.createElement('table');
table.style.borderCollapse='collapse';
table.style.marginTop='20px';
table.style.fontFamily='Arial, sans-serif';
table.style.width='100%';
table.style.maxWidth='800px';
table.style.margin='20px auto';
table.style.border='2px solid #333';
table.style.backgroundColor='#f4f4f9';
table.innerHTML=`<thead>
<tr>
<th style="border:1px solid #333;background-color:#3c8dbc;color:white;padding:8px;font-size:18px;">Röstgivare</th>
<th style="border:1px solid #333;background-color:#3c8dbc;color:white;padding:8px;font-size:18px;">Röster</th>
</tr>
</thead>`;
const tbody=document.createElement('tbody');
Object.entries(votesByUser).forEach(([from,voteList])=>{
const tr=document.createElement('tr');
tr.style.backgroundColor='#ffffff';
tr.style.borderBottom='1px solid #ddd';
const voteLinks=voteList.map(v=>
`<a href="${threadUrl}post-${v.postId}" target="_blank" style="color:#007bff;">${v.to}</a>`
);
tr.innerHTML=`
<td style="border:1px solid #333;padding:8px;text-align:center;font-size:16px;">${from}</td>
<td style="border:1px solid #333;padding:8px;text-align:center;font-size:16px;">${voteLinks.join(', ')}</td>
`;
tbody.appendChild(tr);
});
table.appendChild(tbody);
document.body.appendChild(table);
const hr=document.createElement('hr');
hr.style.margin='20px 0';
hr.style.borderTop='3px solid #333';
document.body.appendChild(hr);
const dangerText=document.createElement('div');
dangerText.textContent=`Risk för utröstning: ${mostVoted} (${mostVotes})`;
dangerText.style.fontSize='22px';
dangerText.style.fontWeight='bold';
dangerText.style.color='#d9534f';
dangerText.style.textAlign='center';
document.body.appendChild(dangerText);
})();