javascript

async()=>{const t=location.href.match(/^https:\/\/www\.rollspel\.nu\/threads\/([^/?#]+?\.\d+)(?:[/?#]|$)/i);if(!t)return%20alert(%22%C3%96ppna%20bookmarkleten%20i%20en%20tr%C3%A5d%20p%C3%A5%20rollspel.nu.%22);const%20e=%60https://www.rollspel.nu/threads/${t[1]}/%60,a=/\br%C3%B6st\s*:\s*/i,l=new%20DOMParser,n=[],r=[],o=t=%3Edocument.querySelector(t),i=t=%3E[...document.querySelectorAll(t)],s=t=%3EString(t??%22%22).replace(/&/g,%22&%22).replace(/%3C/g,%22<%22).replace(/%3E/g,%22>%22).replace(/%22/g,%22"%22),c=t=%3Et?new%20Date(t).toLocaleString(%22sv-SE%22,{dateStyle:%22short%22,timeStyle:%22short%22}):%22%E2%80%93%22,d=t=%3Et.slice().sort((t,e)=%3E+new%20Date(t.ts)-+new%20Date(e.ts)||Number(t.post||0)-Number(e.post||0)),u=t=%3E{const%20e=new%20Map;return%20d(t).forEach(t=%3Ee.set(t.from,t)),[...e.values()]},m=t=%3E%60%22${String(t??%22%22).replace(/%22/g,'%22%22')}%22%60;try{for(let%20t=1;t%3C=500;t++){const%20a=await%20fetch(1===t?e:%60${e}page-${t}%60,{credentials:%22include%22,cache:%22no-store%22});if(!a.ok)throw%20Error(%60Sida%20${t}%20gav%20HTTP%20${a.status}%60);const%20n=l.parseFromString(await%20a.text(),%22text/html%22);r.push([t,n]);if(t%3E=Number(n.querySelector(%22input.js-pageJumpPage%22)?.max||1)&&!n.querySelector(%22.pageNav-jump--next%22))break}}catch(t){return%20alert(%22Kunde%20inte%20l%C3%A4sa%20tr%C3%A5den:%20%22+t.message)}const%20p=t=%3Et.replace(/%3Cbr\s*\/?\s*%3E|%3C\/p\s*%3E|%3C\/li\s*%3E/gi,%22\n%22).split(%22\n%22).map(t=%3Et.trim()).filter(Boolean),f=t=%3E{const%20e=document.createElement(%22div%22);e.innerHTML=t;const%20l=document.createTreeWalker(e,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT);let%20n=!1,r=%22%22;for(;l.nextNode()

{const%20t=l.currentNode;if(3===t.nodeType)r+=t.nodeValue||%22%22,!n&&a.test(r)&&(n=!0),r.length%3E300&&(r=r.slice(-300));else%20if(n&&1===t.nodeType){const%20e=t.getAttribute?.(%22data-username%22);if(e)return%20e.replace(/^@/,%22%22).trim()}}return%22%22};for(const[t,e]of%20r)[...e.querySelectorAll(%22article[data-author]%22)].forEach((e,l)=%3E{if(1===t&&0===l)return;const%20r=(e.getAttribute(%22data-author%22)||%22%22).trim(),o=(e.id||%22%22).replace(%22js-post-%22,%22%22).trim(),i=e.querySelector(%22time.u-dt%22)?.getAttribute(%22datetime%22)||%22%22;let%20s=e.querySelector(%22.message-content%22);if(r&&o&&s){s=s.cloneNode(!0),s.querySelectorAll(%22blockquote,.bbCodeBlock--quote,.bbCodeBlock--unfurl,[data-unfurl='true']%22).forEach(t=%3Et.remove());for(const%20e%20of%20p(s.innerHTML)){const%20l=document.createElement(%22div%22);if(l.innerHTML=e,!a.test((l.textContent||%22%22).replace(/\s+/g,%22%20%22).trim()))continue;const%20s=f(e);s&&n.push({from:r,to:s,ts:i,post:o,page:t})}}});n.splice(0,n.length,...d

),document.title=%22Varulv%20R%C3%B6str%C3%A4knare%22,document.head.innerHTML='%3Cmeta%20charset=%22UTF-8%22%3E%3Cmeta%20name=%22viewport%22%20content=%22width=device-width,initial-scale=1%22%3E%3Cstyle%3Ebody{font-family:Arial,sans-serif;margin:2em;background:#f9f9f9;color:#333}label,button,select,input{margin:8px%2010px%208px%200}select,button,input{padding:6px}button{cursor

ointer}table{border-collapse:collapse;width:100%;margin-top:12px;background:#fff;border:1px%20solid%20#ccc}th,td{padding:8px%2010px;border:1px%20solid%20#ccc;text-align:center;vertical-align:top}th{background:#3c8dbc;color:#fff;cursor

ointer}.summary{font-weight:bold;font-size:18px;margin:12px%200}.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:8px%200}.small{font-size:12px;opacity:.8}details{margin:12px%200;background:#fff;border:1px%20solid%20#ccc;padding:10px}summary{font-weight:bold;cursor

ointer}.manual{display:flex;flex-wrap:wrap;gap:8px%2016px}.manual%20label{display:inline-flex;align-items:center;gap:6px;margin:0}.manual%20input{margin:0}#chart{max-width:620px;width:100%;height:auto}#slider{padding:0;min-width:260px}@media(max-width:700px){body{margin:10px}th,td{padding:5px;font-size:12px}}%3C/style%3E',document.body.innerHTML=%60%3Ch1%3E%F0%9F%90%BA%20Varulv%20R%C3%B6str%C3%A4knare%3C/h1%3E%3Cdiv%20class=%22small%22%3EK%C3%A4lla:%20%3Ca%20target=%22_blank%22%20rel=%22noopener%22%20href=%22${s(e)}%22%3E${s(e)}%3C/a%3E%3C/div%3E%3Cdiv%20id=%22status%22%20class=%22small%22%3E%3C/div%3E%3Cbutton%20id=%22exportBtn%22%3EExportera%20CSV%3C/button%3E%3Cdetails%20open%3E%3Csummary%3EInst%C3%A4llningar%3C/summary%3E%3Clabel%3E%3Cinput%20type=%22radio%22%20name=%22view%22%20value=%22latest%22%20checked%3E%20Endast%20senaste%20r%C3%B6st%3C/label%3E%3Clabel%3E%3Cinput%20type=%22radio%22%20name=%22view%22%20value=%22all%22%3E%20Alla%20r%C3%B6ster%3C/label%3E%3Cbr%3E%3Clabel%3EFilter%20per%20spelare%20%3Cselect%20id=%22filter%22%3E%3C/select%3E%3C/label%3E%3Clabel%3EF%C3%A4rger%20%3Cselect%20id=%22colorMode%22%3E%3Coption%20value=%22auto%22%3EAuto%3C/option%3E%3Coption%20value=%22bw%22%3ESvartvitt%3C/option%3E%3Coption%20value=%22manual%22%3EManuellt%3C/option%3E%3C/select%3E%3C/label%3E%3Cdiv%20id=%22manual%22%20class=%22manual%22%20hidden%3E%3C/div%3E%3Cdiv%20class=%22row%22%3E%3Cbutton%20id=%22play%22%3E%E2%96%B6%20Animera%20r%C3%B6ster%3C/button%3E%3Clabel%3EHastighet%20%3Cinput%20id=%22delay%22%20type=%22number%22%20value=%22200%22%20min=%220%22%20style=%22width:65px%22%3E%20ms%3C/label%3E%3C/div%3E%3Cdiv%20class=%22row%22%3E%3Clabel%20for=%22slider%22%3EVisa%20r%C3%B6ster%20fram%20till:%3C/label%3E%3Cinput%20id=%22slider%22%20type=%22range%22%20min=%220%22%20max=%220%22%20value=%220%22%20list=%22sliderTicks%22%3E%3Cdatalist%20id=%22sliderTicks%22%3E%3C/datalist%3E%3Cspan%20id=%22sliderLabel%22%3E%E2%80%93%3C/span%3E%3C/div%3E%3C/details%3E%3Cdiv%20id=%22summary%22%20class=%22summary%22%3E%3C/div%3E%3Ccanvas%20id=%22chart%22%20width=%22620%22%20height=%22260%22%3E%3C/canvas%3E%3Ch2%3ER%C3%B6ster%3C/h2%3E%3Ctable%20id=%22table%22%3E%3Cthead%3E%3Ctr%3E%3Cth%20data-sort=%22from%22%3ER%C3%B6stgivare%3C/th%3E%3Cth%3ER%C3%B6st%3C/th%3E%3Cth%20data-sort=%22ts%22%3ETidpunkt%3C/th%3E%3Cth%3ERiskerar%20att%20%C3%A5ka%20ut%3C/th%3E%3Cth%3ED%C3%A4refter%3C/th%3E%3C/tr%3E%3C/thead%3E%3Ctbody%3E%3C/tbody%3E%3C/table%3E%60;const%20h={votes:n,players:[],colors:{},manual:{},colorMode:%22auto%22,filter:%22%22,sort:%22%22,index:null,limit:null,timeline:[],timer:null},g={status:o(%22#status%22),exp:o(%22#exportBtn%22),views:i('input[name=%22view%22]'),filter:o(%22#filter%22),colorMode:o(%22#colorMode%22),manual:o(%22#manual%22),play:o(%22#play%22),delay:o(%22#delay%22),slider:o(%22#slider%22),ticks:o(%22#sliderTicks%22),sliderLabel:o(%22#sliderLabel%22),summary:o(%22#summary%22),tbody:o(%22#table%20tbody%22),ths:i(%22#table%20th%22),canvas:o(%22#chart%22)},b=()=%3Eg.views.find(t=%3Et.checked)?.value||%22latest%22,x=t=%3E%22bw%22===h.colorMode?%22#000%22:%22manual%22===h.colorMode?h.manual[t]||h.colors[t]||%22#000%22:h.colors[t]||%22#000%22;function%20y(){h.players=[...new%20Set(h.votes.flatMap(t=%3E[t.from,t.to]))];const%20t=h.players.slice().sort((t,e)=%3Et.localeCompare(e,%22sv%22));h.colors={},t.forEach((e,a)=%3Eh.colors[e]=%60hsl(${Math.round(360*a/Math.max(1,t.length))},70%,42%)%60),g.filter.innerHTML='%3Coption%20value=%22%22%3EAlla%3C/option%3E',t.forEach(t=%3E{const%20e=document.createElement(%22option%22);e.value=e.textContent=t,e.style.color=x(t),e.style.fontWeight=%22bold%22,g.filter.append(e)}),h.players.includes(h.filter)||(h.filter=%22%22),g.filter.value=h.filter,g.manual.hidden=%22manual%22!==h.colorMode,g.manual.innerHTML=%22%22,%22manual%22===h.colorMode&&t.forEach(t=%3E{h.manual[t]||=h.colors[t];const%20e=document.createElement(%22label%22),a=document.createElement(%22span%22),l=document.createElement(%22input%22);a.textContent=t,l.type=%22color%22,l.dataset.player=t,l.value=h.manual[t],e.append(a,l),g.manual.append(e)}),g.status.textContent=%60${n.length}%20taggr%C3%B6ster,%20${r.length}%20sidor%20l%C3%A4sta.%60}function%20v(){h.timeline=d(h.votes.filter(t=%3Et.ts&&!isNaN(+new%20Date(t.ts)))).map(t=%3Enew%20Date(t.ts)),g.ticks.innerHTML=%22%22,h.timeline.forEach((t,e)=%3E{const%20a=document.createElement(%22option%22);a.value=String(e),g.ticks.append(a)});const%20t=Math.max(0,h.timeline.length-1);g.slider.max=String(t),(null==h.index||h.index%3Et)&&(h.index=t),h.index%3C0&&(h.index=0),g.slider.value=String(h.index),h.limit=h.timeline.length?h.timeline[h.index]:null,g.sliderLabel.textContent=h.timeline.length?%60${h.index+1}/${h.timeline.length}%20r%C3%B6ster%20(${c(h.limit)})%60:%22%E2%80%93%22,$()}function%20w(){let%20t=h.votes;return%20h.limit&&(t=t.filter(t=%3E+new%20Date(t.ts)%3C=+h.limit)),%22latest%22===b()&&(t=u(t)),h.filter&&(t=t.filter(t=%3Et.from===h.filter)),t}function%20M(t){const%20e=g.canvas.getContext(%222d%22),a=g.canvas.width,l=g.canvas.height;if(e.clearRect(0,0,a,l),!t.length)return;const%20n=180,r=Math.max(14,Math.floor((l-20)/t.length)-3),o=Math.max(...t.map(t=%3Et[1]));e.font=%2216px%20Arial%22,t.forEach((t,l)=%3E{const%20i=10+l*(r+3),s=Math.floor((a-n-10)*t[1]/o),c=String(t[1]);e.fillStyle=x(t[0]),e.fillText(t[0],10,i+r-2),e.fillRect(n,i,s,r),e.fillStyle=%22#fff%22,e.fillText(c,Math.max(184,n+s-e.measureText(c).width-4),i+r-2)})}function%20$(t=null,a=null){const%20l=d(null!==a?a:h.votes.filter(t=%3E!h.limit||+new%20Date(t.ts)%3C=+h.limit)),n=null!==t?t:w(),r=u(l),o=new%20Map,m=new%20Map;d(r).forEach(t=%3E{o.set(t.to,(o.get(t.to)||0)+1),(!m.has(t.to)||+new%20Date(t.ts)%3C+new%20Date(m.get(t.to)))&&m.set(t.to,t.ts)});const%20p=[...o.entries()].sort((t,e)=%3Ee[1]-t[1]||+new%20Date(m.get(t[0])||0)-+new%20Date(m.get(e[0])||0));if(!p.length)return%20g.summary.textContent=%22Inga%20r%C3%B6ster%20att%20visa.%22,g.tbody.innerHTML=%22%22,void%20M([]);const[f,b]=p[0],y=r.reduce((t,e)=%3E!t||+new%20Date(e.ts)%3E+new%20Date(t)?e.ts:t,null);g.summary.textContent=%60%E2%9A%A0%EF%B8%8F%20Risk%20f%C3%B6r%20utr%C3%B6stning:%20${f}%20(${b}%20r%C3%B6ster,%20sedan%20${c(m.get(f))}).%20Senast%20r%C3%B6st%20lagd%20${c

}.%60,g.tbody.innerHTML=%22%22;const%20v=new%20Map;d

.forEach(t=%3E{const%20a=function(t,e){const%20a=new%20Map,l=new%20Map,n=new%20Map;return%20t.filter(t=%3E{const%20a=+new%20Date(t.ts),l=+new%20Date(e.ts);return%20a%3Cl||a===l&&Number(t.post||0)%3C=Number(e.post||0)}).forEach(t=%3E{const%20e=a.get(t.from);if(e){const%20a=(l.get(e)||0)-1;a%3C=0?(l.delete(e),n.delete(e))

l.set(e,a),n.set(e,{ts:t.ts,post:Number(t.post||0)}))}a.set(t.from,t.to),l.set(t.to,(l.get(t.to)||0)+1),n.set(t.to,{ts:t.ts,post:Number(t.post||0)})}),[...l.entries()].sort((t,e)=%3Ee[1]-t[1]||+new%20Date(n.get(t[0])?.ts||0)-+new%20Date(n.get(e[0])?.ts||0)||(n.get(t[0])?.post||0)-(n.get(e[0])?.post||0))}(l,t),n=a[0]?%60${a[0][0]}%20(${a[0][1]})%60:%22%E2%80%93%22,r=a[1]?%60${a[1][0]}%20(${a[1][1]})%60:%22%E2%80%93%22,o=v.get(t.from)||[];o.at(-1)!==t.to&&o.push(t.to),v.set(t.from,o);const%20i=o.map((a,l,n)=%3El===n.length-1?%60%3Ca%20target=%22_blank%22%20rel=%22noopener%22%20href=%22${s(e+%22post-%22+t.post)}%22%20style=%22color:${x(a)};font-weight:bold%22%3E${s(a)}%3C/a%3E%60:%60%3Cspan%20style=%22color:${x(a)}%22%3E${s(a)}%3C/span%3E%60).join(%22%20%E2%86%92%20%22),d=document.createElement(%22tr%22);d.dataset.ts=t.ts||%22%22,d.innerHTML=%60%3Ctd%20style=%22color:${x(t.from)};font-weight:bold%22%3E${s(t.from)}%3C/td%3E%3Ctd%3E${i}%3C/td%3E%3Ctd%3E${c(t.ts)}%3C/td%3E%3Ctd%3E${s

}%3C/td%3E%3Ctd%3E${s(r)}%3C/td%3E%60,g.tbody.append(d)}),function(){if(!h.sort)return;const[t,e]=h.sort.split(%22-%22),a=i(%22#table%20tbody%20tr%22);a.sort((a,l)=%3E{const%20n=%22from%22===t?a.children[0].textContent.trim():a.dataset.ts||%22%22,r=%22from%22===t?l.children[0].textContent.trim():l.dataset.ts||%22%22,o=%22from%22===t?n.localeCompare(r,%22sv%22):n.localeCompare(r);return%22desc%22===e?-o:o}),g.tbody.replaceChildren(...a)}(),M(p)}function%20k(){h.timer&&(clearTimeout(h.timer),h.timer=null),g.play.disabled=!1}g.exp.onclick=()=%3E{const%20t=document.createElement(%22a%22),e=[%22R%C3%B6stgivare,R%C3%B6st,Tidpunkt,Post,Page%22,...w().map(t=%3E[t.from,t.to,t.ts,t.post,t.page].map(m).join(%22,%22))].join(%22\n%22),a=URL.createObjectURL(new%20Blob([%22\ufeff%22+e],{type:%22text/csv;charset=utf-8%22}));t.href=a,t.download=%22rostdata.csv%22,t.click(),setTimeout(()=%3EURL.revokeObjectURL(a),1e3)},g.views.forEach(t=%3Et.onchange=()=%3E{k(),h.index=null,v()}),g.filter.onchange=()=%3E{k(),h.filter=g.filter.value,h.index=null,v()},g.colorMode.onchange=()=%3E{h.colorMode=g.colorMode.value,y(),$()},g.manual.oninput=t=%3E{%22color%22===t.target.type&&(h.manual[t.target.dataset.player]=t.target.value,y(),$())},g.slider.oninput=()=%3E{k(),h.index=Number(g.slider.value),h.limit=h.timeline[h.index]||null,g.sliderLabel.textContent=h.timeline.length?%60${h.index+1}/${h.timeline.length}%20r%C3%B6ster%20(${c(h.limit)})%60:%22%E2%80%93%22,$()},g.play.onclick=()=%3E{k(),g.play.disabled=!0;const%20t=d(h.votes.filter(t=%3E!h.limit||+new%20Date(t.ts)%3C=+h.limit));let%20e=0;const%20a=Math.max(0,Number(g.delay.value)||200);!function%20l(){if(e%3Et.length)return%20k(),void%20$();const%20n=t.slice(0,e);let%20r=%22all%22===b()?n:u

;h.filter&&(r=r.filter(t=%3Et.from===h.filter)),$(r,n),e++,h.timer=setTimeout(l,a)}()},g.ths.forEach(t=%3E{const%20e=t.dataset.sort;e&&(t.onclick=()=%3E{h.sort=e+%22-%22+(h.sort===e+%22-asc%22?%22desc%22:%22asc%22),$()})}),y(),v()})();