// ==UserScript==
// @name CF Get Problems
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Add contest problems altogether with rating.
// @author Dhanraj Chaurasia (coderdhanraj)
// @license GPLv3
// @match https://codeforces.com/*
// ==/UserScript==
(function() {
const url = window.location.href;
const match1 = url.match(/contest\/(\d+)/);
const match2 = url.match(/problemset\/problem\/(\d+)/);
var contestNumber = null
if (match1) contestNumber = match1[1];
else if (match2) contestNumber = match2[1];
else contestNumber = -1
const requestURL = `https://codeforces.com/api/contest.standings?contestId=${contestNumber}&from=1&count=1`;
fetchData();
async function fetchData(){
const problems = [];
try{
const response = await fetch(requestURL);
const data = await response.json();
const problemsList = data.result.problems;
if(data.status == "OK"){
for(var i = 0; i < problemsList.length; i++){
const index = problemsList[i].index;
const title = index + " - " + problemsList[i].name;
const rating = problemsList[i].rating;
const problemUrl = `https://codeforces.com/contest/${contestNumber}/problem/${index}`;
problems.push({index:index, url:problemUrl, title:title, rating:rating});
}
}
}
catch(e){
}
console.log(problems);
var toInsert;
if(problems){
toInsert = `
<div class="roundbox sidebox" style="">
<div class="roundbox-lt"> </div>
<div class="roundbox-rt"> </div>
<div class="caption titled">→ Contest Problems
<i class="sidebar-caption-icon las la-angle-down" onclick="
if (this.classList.contains('la-angle-right')) {
document.getElementById('Tagblock').style.display = 'block';
this.classList.add('la-angle-down');
this.classList.remove('la-angle-right');
} else {
document.getElementById('Tagblock').style.display = 'none';
this.classList.add('la-angle-right');
this.classList.remove('la-angle-down');
}">
</i>
<div class="top-links"></div>
</div>
<div id="Tagblock" style="display: block;">
<div style="display: flex; margin: 8px auto; flex-wrap: wrap; justify-content: center; align-items: center; text-align: center;">
`
problems.forEach(e => {
console.log(e);
toInsert += `
<span style="width:3em; margin: 2px; text-align: center; box-sizing: border-box;">
<a title="${e.title}" href="${e.url}">${e.index}</a>
<br><span class="small" title="Problem Rating">${e.rating == null ? '-' : e.rating}</span>
</span>
`
});
toInsert += '</div></div>'
}
const getProblemBox = document.createElement("div");
getProblemBox.innerHTML = toInsert;
document.querySelector("#sidebar").prepend(getProblemBox);
}
})();