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";