|
106 | 106 | const text = await pagePromises[i]; |
107 | 107 | const doc = dom_parser.parseFromString(text.toString(), 'text/html'); |
108 | 108 | 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); |
110 | 110 |
|
111 | 111 | for (const answerPost of non_deleted_answers) { |
112 | | - |
113 | 112 | /** @type {HTMLElement | null} */ |
114 | 113 | const header = answerPost.querySelector('h1, h2, h3'); |
115 | 114 | const code = header?.parentElement.querySelector(':scope > pre > code'); |
|
128 | 127 | answerID: answerPost.id, |
129 | 128 | answerURL: answerPost.querySelector('.js-permalink').href, |
130 | 129 | 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] || '', |
133 | 132 | full_language, |
134 | 133 | language, |
135 | 134 | variant, |
|
262 | 261 | row.href = answer.answerURL; |
263 | 262 |
|
264 | 263 | 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> |
266 | 265 | <div class="toc--full"><p class="row-summary"><span class='username has-padding-right-1'></span></p></div> |
267 | 266 | ${answer.placement === 1 ? '<div class="toc--badge"><span class="badge is-tag is-yellow"><i class="fas fa-trophy"></i></span></div>' |
268 | 267 | : (settings.showPlacements ? `<div class="toc--badge"><span class="badge is-tag">#${answer.placement}</span></div>` : '')} |
269 | 268 | <div class="toc--badge"><span class="language-badge badge is-tag is-blue"></span></div>`; |
270 | 269 |
|
271 | 270 | 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'; |
273 | 272 | if (answer.code) { |
274 | 273 | row.querySelector('.username').after(document.createElement('code')); |
275 | 274 | row.querySelector('code').innerText = answer.code.split('\n')[0].substring(0, 200); |
|
331 | 330 | // 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. |
332 | 331 | sort = (x, y) => typeof x.score === "undefined" ? 1 : x.score - y.score; |
333 | 332 |
|
334 | | - document |
335 | | - .querySelector(".post:first-child") |
336 | | - .nextElementSibling.insertAdjacentElement("afterend", embed); |
| 333 | + document.querySelector(".js-answers-header")?.insertAdjacentElement('beforebegin', embed); |
337 | 334 |
|
338 | 335 | refreshBoard(sort); |
339 | 336 | } else if ( |
|
343 | 340 | // 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. |
344 | 341 | sort = (x, y) => typeof x.score === "undefined" ? 1 : y.score - x.score; |
345 | 342 |
|
346 | | - document |
347 | | - .querySelector(".post:first-child") |
348 | | - .nextElementSibling.insertAdjacentElement("afterend", embed); |
| 343 | + document.querySelector(".js-answers-header")?.insertAdjacentElement("beforebegin", embed); |
349 | 344 |
|
350 | 345 | refreshBoard(sort); |
351 | 346 | } |
|
0 commit comments