diff --git a/Update.json b/Update.json index e041fe40..4fbf1ab1 100644 --- a/Update.json +++ b/Update.json @@ -441,6 +441,16 @@ "Description": "忽略提醒后立刻不显示该提醒" } ] + }, + "0.3.170": { + "UpdateDate": 1695469445405, + "Prerelease": true, + "UpdateContents": [ + { + "PR": 494, + "Description": "将讨论中的 @ 放在前端渲染" + } + ] } } } \ No newline at end of file diff --git a/XMOJ.user.js b/XMOJ.user.js index 91038fd1..eaf621df 100644 --- a/XMOJ.user.js +++ b/XMOJ.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name XMOJ -// @version 0.3.169 +// @version 0.3.170 // @description XMOJ增强脚本 // @author @langningchen // @namespace https://github/langningchen @@ -72,6 +72,9 @@ let GetUserInfo = async (Username) => { return await fetch("http://www.xmoj.tech/userinfo.php?user=" + Username).then((Response) => { return Response.text(); }).then((Response) => { + if (Response.indexOf("No such User!") !== -1) { + return null; + } const ParsedDocument = new DOMParser().parseFromString(Response, "text/html"); let Rating = (parseInt(ParsedDocument.querySelector("#statics > tbody > tr:nth-child(4) > td:nth-child(2)").innerText.trim()) / parseInt(ParsedDocument.querySelector("#statics > tbody > tr:nth-child(3) > td:nth-child(2)").innerText.trim())).toFixed(3) * 1000; @@ -126,19 +129,26 @@ let GetUserBadge = async (Username) => { } } }; -let GetUsernameHTML = async (Element, Username, Href = "http://www.xmoj.tech/userinfo.php?user=") => { +let GetUsernameHTML = async (Element, Username, Simple = false, Href = "http://www.xmoj.tech/userinfo.php?user=") => { let ID = "Username-" + Username + "-" + Math.random(); Element.id = ID; Element.innerHTML = `
${Username}`; let UserInfo = await GetUserInfo(Username); - let HTMLData = ``; } - HTMLData += `" class="rounded me-2" style="width: 20px; height: 20px; ">`; HTMLData += `${Username}`; - if (AdminUserList.includes(Username)) { - HTMLData += `管理员`; - } - let BadgeInfo = await GetUserBadge(Username); - if (BadgeInfo.Content != "") { - HTMLData += `${BadgeInfo.Content}`; + if (!Simple) { + if (AdminUserList.includes(Username)) { + HTMLData += `管理员`; + } + let BadgeInfo = await GetUserBadge(Username); + if (BadgeInfo.Content != "") { + HTMLData += `${BadgeInfo.Content}`; + } } document.getElementById(ID).innerHTML = HTMLData; }; @@ -247,7 +259,6 @@ let UtilityEnabled = (Name) => { return localStorage.getItem("UserScript-Setting-" + Name) == "true"; }; let FixReply = (Data) => { - Data = Data.replaceAll(/ ?@\1<\/a> ?/g, "@$1"); Data = Data.replaceAll(/
已于 [0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}, [0-9]{1,2}:[0-9]{2}:[0-9]{2} (A|P)M 编辑<\/span>/g, ""); return Data; } @@ -3375,7 +3386,7 @@ else { let Row = document.createElement("tr"); ReceiveTable.children[1].appendChild(Row); let UsernameCell = document.createElement("td"); Row.appendChild(UsernameCell); let UsernameSpan = document.createElement("span"); UsernameCell.appendChild(UsernameSpan); - GetUsernameHTML(UsernameSpan, Data[i].OtherUser, "http://www.xmoj.tech/mail.php?other="); + GetUsernameHTML(UsernameSpan, Data[i].OtherUser, false, "http://www.xmoj.tech/mail.php?other="); if (Data[i].UnreadCount != 0) { let UnreadCountSpan = document.createElement("span"); UsernameCell.appendChild(UnreadCountSpan); UnreadCountSpan.className = "ms-1 badge text-bg-danger"; @@ -3974,7 +3985,7 @@ else { let CardBodyHRElement = document.createElement("hr"); CardBodyElement.appendChild(CardBodyHRElement); let ReplyContentElement = document.createElement("div"); CardBodyElement.appendChild(ReplyContentElement); - ReplyContentElement.innerHTML = DOMPurify.sanitize(marked.parse(Replies[i].Content)); + ReplyContentElement.innerHTML = DOMPurify.sanitize(marked.parse(Replies[i].Content.replaceAll(/@([a-zA-Z0-9]+)/g, `@$1`))); let ContentEditElement = document.createElement("div"); CardBodyElement.appendChild(ContentEditElement); ContentEditElement.classList.add("input-group"); ContentEditElement.style.display = "none"; @@ -3999,6 +4010,12 @@ else { RenderMathJax(); }); } + + let UsernameElements = document.getElementsByClassName("Usernames"); + for (let i = 0; i < UsernameElements.length; i++) { + GetUsernameHTML(UsernameElements[i], UsernameElements[i].innerText, true); + } + let CodeElements = document.querySelectorAll("#PostReplies > div > div > div:nth-child(3) > pre > code"); for (let i = 0; i < CodeElements.length; i++) { let ModeName = "text/plain";