Skip to content

Commit 9dce9b1

Browse files
authored
Merge pull request #1917 from codidact/0valt/1911/codegolf
Assorted fixes for the Code Golf's leaderboard
2 parents a950c26 + 0d96cc3 commit 9dce9b1

3 files changed

Lines changed: 9 additions & 14 deletions

File tree

app/views/posts/_expanded.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
</div>
4848
<% end %>
4949

50-
<div class="post--container <%= 'deleted-content' if post.deleted? %> grid is-nowrap">
50+
<div class="post--container <%= 'deleted-content js-deleted-post' if post.deleted? %> grid is-nowrap">
5151
<% if post_type.has_votes || (user_signed_in? && post.post_type.has_reactions && post.post_type.reactions.any?) %>
5252
<%= render 'posts/votes', post: post %>
5353
<% end %>

app/views/posts/show.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
<% if @post.post_type.has_answers %>
2525
<% if num_answers > 0 %>
26-
<h2><%= pluralize(num_answers, 'answer') %></h2>
26+
<h2 id="answers" class="js-answers-header"><%= pluralize(num_answers, 'answer') %></h2>
2727
<% end %>
2828
<% if num_answers > 1 %>
2929
<div class="button-list is-gutterless has-float-right">

public/assets/community/codegolf.js

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,9 @@
106106
const text = await pagePromises[i];
107107
const doc = dom_parser.parseFromString(text.toString(), 'text/html');
108108
const [question, ...page_answers] = doc.querySelectorAll('.post');
109-
const non_deleted_answers = page_answers.filter((answer) => answer.querySelector('.deleted-content') === null);
109+
const non_deleted_answers = page_answers.filter((answer) => answer.querySelector('.js-deleted-post') === null);
110110

111111
for (const answerPost of non_deleted_answers) {
112-
113112
/** @type {HTMLElement | null} */
114113
const header = answerPost.querySelector('h1, h2, h3');
115114
const code = header?.parentElement.querySelector(':scope > pre > code');
@@ -128,8 +127,8 @@
128127
answerID: answerPost.id,
129128
answerURL: answerPost.querySelector('.js-permalink').href,
130129
page: i + 1, // +1 because pages are 1-indexed while arrays are 0-indexed
131-
username: userlink.firstChild.data.trim(),
132-
userid: userlink.href.match(/\d+/)[0],
130+
username: userlink?.firstChild?.data?.trim() || 'deleted user',
131+
userid: userlink?.href?.match(/\d+/)?.[0] || '',
133132
full_language,
134133
language,
135134
variant,
@@ -262,14 +261,14 @@
262261
row.href = answer.answerURL;
263262

264263
row.innerHTML = `
265-
<div class="toc--badge"><span class="badge is-tag is-green">${answer.score}</span></div>
264+
<div class="toc--badge"><span class="badge is-tag is-green">${answer.score ?? 'N/A'}</span></div>
266265
<div class="toc--full"><p class="row-summary"><span class='username has-padding-right-1'></span></p></div>
267266
${answer.placement === 1 ? '<div class="toc--badge"><span class="badge is-tag is-yellow"><i class="fas fa-trophy"></i></span></div>'
268267
: (settings.showPlacements ? `<div class="toc--badge"><span class="badge is-tag">#${answer.placement}</span></div>` : '')}
269268
<div class="toc--badge"><span class="language-badge badge is-tag is-blue"></span></div>`;
270269

271270
row.querySelector('.username').innerText = answer.username
272-
row.querySelector('.language-badge').innerText = answer.full_language;
271+
row.querySelector('.language-badge').innerText = answer.full_language ?? 'N/A';
273272
if (answer.code) {
274273
row.querySelector('.username').after(document.createElement('code'));
275274
row.querySelector('code').innerText = answer.code.split('\n')[0].substring(0, 200);
@@ -331,9 +330,7 @@
331330
// If x were undefined, it would be automatically sorted to the end, but not so if x.score is undefined, so this needs to be stated explicitly.
332331
sort = (x, y) => typeof x.score === "undefined" ? 1 : x.score - y.score;
333332

334-
document
335-
.querySelector(".post:first-child")
336-
.nextElementSibling.insertAdjacentElement("afterend", embed);
333+
document.querySelector(".js-answers-header")?.insertAdjacentElement('beforebegin', embed);
337334

338335
refreshBoard(sort);
339336
} else if (
@@ -343,9 +340,7 @@
343340
// If x were undefined, it would be automatically sorted to the end, but not so if x.score is undefined, so this needs to be stated explicitly.
344341
sort = (x, y) => typeof x.score === "undefined" ? 1 : y.score - x.score;
345342

346-
document
347-
.querySelector(".post:first-child")
348-
.nextElementSibling.insertAdjacentElement("afterend", embed);
343+
document.querySelector(".js-answers-header")?.insertAdjacentElement("beforebegin", embed);
349344

350345
refreshBoard(sort);
351346
}

0 commit comments

Comments
 (0)