Skip to content
This repository was archived by the owner on Feb 14, 2022. It is now read-only.

Commit b7d4093

Browse files
authored
Merge pull request #23 from DevSDK/master
Add expectation tier function for non-members
2 parents d1c0af1 + b1801b5 commit b7d4093

4 files changed

Lines changed: 74 additions & 8 deletions

File tree

src/content/main.js

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -262,19 +262,58 @@ async function addLevelIndicators() {
262262
if (isUserPage()) {
263263
var userId = document.querySelector(".page-header h1").innerText.trim()
264264
var userStaticsTable = document.querySelector("#statics tbody")
265-
265+
const isShowUserTempTier = JSON.parse(await getPrefs('show_userpage_temp_tier', 'false'))
266266
const userData = await (await fetch("https://api.solved.ac/user_information.php?id=" + userId)).json()
267-
if (!userData) return
268267

268+
if (!userData && !isShowUserTempTier) return
269+
269270
var newRow = document.createElement("tr")
270271
var newRowHeader = document.createElement("th")
271-
newRowHeader.innerText = "solved.ac"
272272
var newRowDescription = document.createElement("td")
273-
newRowDescription.innerHTML = "<a href=\"https://solved.ac/" + userData.user_id + "\">"
274-
+ "<span class=\"text-" + levelCssClass(userData.level) + "\">"
275-
+ levelLabel(userData.level) + "<b>" + userData.user_id + "</b>"
276-
+ "</span>"
277-
+ "</a>"
273+
274+
if(!userData && isShowUserTempTier) {
275+
var acceptPanel = document.querySelector(".panel.panel-default")
276+
var acceptProblems = acceptPanel.querySelectorAll(".problem_number>a")
277+
var totalExpPoint = 0
278+
var promises = [];
279+
var levelData = []
280+
281+
const levelDataResponses = await (await fetch("https://api.solved.ac/exp_table.php")).text()
282+
levelDataResponses.split(',').forEach(level => levelData.push(parseInt(level)))
283+
284+
for(i = 0; i < acceptProblems.length; i++) {
285+
var problemId = acceptProblems[i].textContent;
286+
promises[i] = fetch("https://api.solved.ac/problem_level.php?id=" + problemId)
287+
}
288+
289+
responses = await Promise.all(promises)
290+
for(i = 0; i < responses.length; i++) {
291+
data = await responses[i].json()
292+
if(data.level != 0)
293+
totalExpPoint += levelData[data.level]
294+
}
295+
296+
var expTable = []
297+
const expTableData = await (await fetch("https://api.solved.ac/exp_cap.php")).text()
298+
expTableData.split(',').forEach(level => expTable.push(parseInt(level)))
299+
var expectLevel = getExpectLevelFromExpPoint(totalExpPoint, expTable)
300+
301+
newRowHeader.innerText = "solved.ac 임시티어"
302+
newRowDescription.innerHTML = "<a href=\"https://www.acmicpc.net/user/" + userId + "\">"
303+
+ "<span class=\"text-" + levelCssClass(expectLevel) + "\">"
304+
+ levelLabel(expectLevel) + "<b>" +userId + "</b>"
305+
+ "</span>"
306+
+ "</a>"
307+
}
308+
else {
309+
newRowHeader.innerText = "solved.ac"
310+
newRowDescription.innerHTML = "<a href=\"https://solved.ac/" + userData.user_id + "\">"
311+
+ "<span class=\"text-" + levelCssClass(userData.level) + "\">"
312+
+ levelLabel(userData.level) + "<b>" + userData.user_id + "</b>"
313+
+ "</span>"
314+
+ "</a>"
315+
}
316+
278317
newRow.appendChild(newRowHeader)
279318
newRow.appendChild(newRowDescription)
280319
userStaticsTable.appendChild(newRow)

src/content/utils.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,13 @@ function algorithmToTag(item, showTagsInEnglish) {
103103
algorithm_id: item.algorithm_id
104104
}
105105
}
106+
}
107+
108+
function getExpectLevelFromExpPoint(exp, expTable) {
109+
for(i=0; i < expTable.length - 1; i++) {
110+
if(expTable[i] < exp && exp < expTable[i + 1])
111+
return i + 1;
112+
}
113+
if(exp>expTable[expTable.length - 1])
114+
return expTable.length
106115
}

src/options/options_logged_info.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ <h1 id="user_id">...</h1>
4141
<span class="toggle_knob"></span>
4242
</span>
4343
</div>
44+
45+
<div class="option_item" data-key="show_userpage_temp_tier">
46+
<span class="option_caption">
47+
사용자 페이지에서 비공식 티어 보기
48+
</span>
49+
<span class="option_switch">
50+
<span class="toggle_knob"></span>
51+
</span>
52+
</div>
53+
4454
</div>
4555
<script src="/3rdparty/axios.0.19.0.min.js"></script>
4656
<script src="/src/options/options_logged_info.js"></script>

src/options/options_login.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ <h3 class="input_caption">비밀번호</h3>
4646
<span class="toggle_knob"></span>
4747
</span>
4848
</div>
49+
<div class="option_item" data-key="show_userpage_temp_tier">
50+
<span class="option_caption">
51+
사용자 페이지에서 비공식 티어 보기
52+
</span>
53+
<span class="option_switch">
54+
<span class="toggle_knob"></span>
55+
</span>
56+
</div>
4957
</div>
5058
<script src="/3rdparty/axios.0.19.0.min.js"></script>
5159
<script src="/src/options/options_login.js"></script>

0 commit comments

Comments
 (0)