Spaces:
Sleeping
Sleeping
Keldos commited on
Commit ·
8161b72
1
Parent(s): 5220923
BREAKING: 适配sanitize DOM的gradio版本
Browse files- assets/custom.css +11 -4
- assets/custom.js +2 -2
- modules/overwrites.py +2 -2
- modules/utils.py +43 -11
assets/custom.css
CHANGED
|
@@ -291,17 +291,24 @@ ol:not(.options), ul:not(.options) {
|
|
| 291 |
border-bottom-right-radius: 0 !important;
|
| 292 |
}
|
| 293 |
|
| 294 |
-
.message
|
|
|
|
|
|
|
|
|
|
|
|
|
| 295 |
margin-top: 0.6em !important;
|
| 296 |
margin-bottom: 0.6em !important;
|
| 297 |
}
|
| 298 |
-
.message p:first-child { margin-top: 0 !important; }
|
| 299 |
-
.message p:last-of-type { margin-bottom: 0 !important; }
|
| 300 |
|
| 301 |
.message .md-message {
|
| 302 |
display: block;
|
| 303 |
padding: 0 !important;
|
| 304 |
}
|
|
|
|
|
|
|
|
|
|
| 305 |
.message .raw-message {
|
| 306 |
display: block;
|
| 307 |
padding: 0 !important;
|
|
@@ -410,7 +417,7 @@ thead th {
|
|
| 410 |
white-space: break-spaces;
|
| 411 |
font-family: var(--font-mono);
|
| 412 |
border-radius: 6px;
|
| 413 |
-
|
| 414 |
padding: .2em .4em .1em .4em;
|
| 415 |
background-color: rgba(175,184,193,0.2);
|
| 416 |
}
|
|
|
|
| 291 |
border-bottom-right-radius: 0 !important;
|
| 292 |
}
|
| 293 |
|
| 294 |
+
.message.user {
|
| 295 |
+
white-space: pre-wrap;
|
| 296 |
+
}
|
| 297 |
+
|
| 298 |
+
.message .md-message p {
|
| 299 |
margin-top: 0.6em !important;
|
| 300 |
margin-bottom: 0.6em !important;
|
| 301 |
}
|
| 302 |
+
.message .md-message p:first-child { margin-top: 0 !important; }
|
| 303 |
+
.message .md-message p:last-of-type { margin-bottom: 0 !important; }
|
| 304 |
|
| 305 |
.message .md-message {
|
| 306 |
display: block;
|
| 307 |
padding: 0 !important;
|
| 308 |
}
|
| 309 |
+
.message .raw-message p {
|
| 310 |
+
margin:0 !important;
|
| 311 |
+
}
|
| 312 |
.message .raw-message {
|
| 313 |
display: block;
|
| 314 |
padding: 0 !important;
|
|
|
|
| 417 |
white-space: break-spaces;
|
| 418 |
font-family: var(--font-mono);
|
| 419 |
border-radius: 6px;
|
| 420 |
+
margin: 0 2px 0 2px;
|
| 421 |
padding: .2em .4em .1em .4em;
|
| 422 |
background-color: rgba(175,184,193,0.2);
|
| 423 |
}
|
assets/custom.js
CHANGED
|
@@ -239,10 +239,10 @@ function showOrHideUserInfo() {
|
|
| 239 |
function toggleDarkMode(isEnabled) {
|
| 240 |
if (isEnabled) {
|
| 241 |
document.body.classList.add("dark");
|
| 242 |
-
|
| 243 |
} else {
|
| 244 |
document.body.classList.remove("dark");
|
| 245 |
-
|
| 246 |
}
|
| 247 |
}
|
| 248 |
function adjustDarkMode() {
|
|
|
|
| 239 |
function toggleDarkMode(isEnabled) {
|
| 240 |
if (isEnabled) {
|
| 241 |
document.body.classList.add("dark");
|
| 242 |
+
document.body.style.setProperty("background-color", "var(--neutral-950)", "important");
|
| 243 |
} else {
|
| 244 |
document.body.classList.remove("dark");
|
| 245 |
+
document.body.style.backgroundColor = "";
|
| 246 |
}
|
| 247 |
}
|
| 248 |
function adjustDarkMode() {
|
modules/overwrites.py
CHANGED
|
@@ -66,8 +66,8 @@ def postprocess_chat_messages(
|
|
| 66 |
# chat_message = chat_message.replace(" ", " ")
|
| 67 |
if role == "bot":
|
| 68 |
chat_message = convert_before_marked(chat_message)
|
| 69 |
-
|
| 70 |
-
|
| 71 |
return chat_message
|
| 72 |
else:
|
| 73 |
raise ValueError(f"Invalid message for Chatbot component: {chat_message}")
|
|
|
|
| 66 |
# chat_message = chat_message.replace(" ", " ")
|
| 67 |
if role == "bot":
|
| 68 |
chat_message = convert_before_marked(chat_message)
|
| 69 |
+
elif role == "user":
|
| 70 |
+
chat_message = escape_markdown(chat_message)
|
| 71 |
return chat_message
|
| 72 |
else:
|
| 73 |
raise ValueError(f"Invalid message for Chatbot component: {chat_message}")
|
modules/utils.py
CHANGED
|
@@ -133,7 +133,7 @@ def count_token(message):
|
|
| 133 |
return length
|
| 134 |
|
| 135 |
|
| 136 |
-
def markdown_to_html_with_syntax_highlight(md_str):
|
| 137 |
def replacer(match):
|
| 138 |
lang = match.group(1) or "text"
|
| 139 |
code = match.group(2)
|
|
@@ -155,7 +155,7 @@ def markdown_to_html_with_syntax_highlight(md_str):
|
|
| 155 |
return html_str
|
| 156 |
|
| 157 |
|
| 158 |
-
def normalize_markdown(md_text: str) -> str:
|
| 159 |
lines = md_text.split("\n")
|
| 160 |
normalized_lines = []
|
| 161 |
inside_list = False
|
|
@@ -179,7 +179,7 @@ def normalize_markdown(md_text: str) -> str:
|
|
| 179 |
return "\n".join(normalized_lines)
|
| 180 |
|
| 181 |
|
| 182 |
-
def convert_mdtext(md_text):
|
| 183 |
code_block_pattern = re.compile(r"```(.*?)(?:```|$)", re.DOTALL)
|
| 184 |
inline_code_pattern = re.compile(r"`(.*?)`", re.DOTALL)
|
| 185 |
code_blocks = code_block_pattern.findall(md_text)
|
|
@@ -204,19 +204,51 @@ def convert_mdtext(md_text):
|
|
| 204 |
return output
|
| 205 |
|
| 206 |
def convert_before_marked(chat_message):
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 213 |
return (
|
| 214 |
f'<p style="white-space:pre-wrap;">{html.escape(userinput)}</p>'
|
| 215 |
+ ALREADY_CONVERTED_MARK
|
| 216 |
)
|
| 217 |
|
| 218 |
|
| 219 |
-
def detect_converted_mark(userinput):
|
| 220 |
try:
|
| 221 |
if userinput.endswith(ALREADY_CONVERTED_MARK):
|
| 222 |
return True
|
|
@@ -226,7 +258,7 @@ def detect_converted_mark(userinput):
|
|
| 226 |
return True
|
| 227 |
|
| 228 |
|
| 229 |
-
def detect_language(code):
|
| 230 |
if code.startswith("\n"):
|
| 231 |
first_line = ""
|
| 232 |
else:
|
|
|
|
| 133 |
return length
|
| 134 |
|
| 135 |
|
| 136 |
+
def markdown_to_html_with_syntax_highlight(md_str): # deprecated
|
| 137 |
def replacer(match):
|
| 138 |
lang = match.group(1) or "text"
|
| 139 |
code = match.group(2)
|
|
|
|
| 155 |
return html_str
|
| 156 |
|
| 157 |
|
| 158 |
+
def normalize_markdown(md_text: str) -> str: # deprecated
|
| 159 |
lines = md_text.split("\n")
|
| 160 |
normalized_lines = []
|
| 161 |
inside_list = False
|
|
|
|
| 179 |
return "\n".join(normalized_lines)
|
| 180 |
|
| 181 |
|
| 182 |
+
def convert_mdtext(md_text): # deprecated
|
| 183 |
code_block_pattern = re.compile(r"```(.*?)(?:```|$)", re.DOTALL)
|
| 184 |
inline_code_pattern = re.compile(r"`(.*?)`", re.DOTALL)
|
| 185 |
code_blocks = code_block_pattern.findall(md_text)
|
|
|
|
| 204 |
return output
|
| 205 |
|
| 206 |
def convert_before_marked(chat_message):
|
| 207 |
+
"""
|
| 208 |
+
注意不能给输出加缩进, 否则会被marked解析成代码块
|
| 209 |
+
"""
|
| 210 |
+
if '<div class="md-message">' or '<div class="md-message">' in chat_message:
|
| 211 |
+
return chat_message
|
| 212 |
+
else:
|
| 213 |
+
return (f"""\
|
| 214 |
+
<div class="raw-message hideM">{escape_markdown(chat_message)}</div>
|
| 215 |
+
<div class="md-message">{chat_message}</div>
|
| 216 |
+
""")
|
| 217 |
+
|
| 218 |
+
def escape_markdown(text):
|
| 219 |
+
"""
|
| 220 |
+
Escape Markdown special characters to HTML-safe equivalents.
|
| 221 |
+
"""
|
| 222 |
+
escape_chars = {
|
| 223 |
+
'_': '_',
|
| 224 |
+
'*': '*',
|
| 225 |
+
'[': '[',
|
| 226 |
+
']': ']',
|
| 227 |
+
'(': '(',
|
| 228 |
+
')': ')',
|
| 229 |
+
'{': '{',
|
| 230 |
+
'}': '}',
|
| 231 |
+
'#': '#',
|
| 232 |
+
'+': '+',
|
| 233 |
+
'-': '-',
|
| 234 |
+
'.': '.',
|
| 235 |
+
'!': '!',
|
| 236 |
+
'`': '`',
|
| 237 |
+
'>': '>',
|
| 238 |
+
'<': '<',
|
| 239 |
+
'|': '|'
|
| 240 |
+
}
|
| 241 |
+
return ''.join(escape_chars.get(c, c) for c in text)
|
| 242 |
+
|
| 243 |
+
|
| 244 |
+
def convert_asis(userinput): # deprecated
|
| 245 |
return (
|
| 246 |
f'<p style="white-space:pre-wrap;">{html.escape(userinput)}</p>'
|
| 247 |
+ ALREADY_CONVERTED_MARK
|
| 248 |
)
|
| 249 |
|
| 250 |
|
| 251 |
+
def detect_converted_mark(userinput): # deprecated
|
| 252 |
try:
|
| 253 |
if userinput.endswith(ALREADY_CONVERTED_MARK):
|
| 254 |
return True
|
|
|
|
| 258 |
return True
|
| 259 |
|
| 260 |
|
| 261 |
+
def detect_language(code): # deprecated
|
| 262 |
if code.startswith("\n"):
|
| 263 |
first_line = ""
|
| 264 |
else:
|