Normalize fullwidth punctuation to ASCII across codebase.

Add scripts/normalize_ambiguous_unicode.py; fix corrupted patch_instance_theme_templates.py. Preserves curly quotes in string literals; removes Git homoglyph warnings on .env.example.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-08 23:42:26 +08:00
parent aaa72c7961
commit b733e551a0
392 changed files with 71522 additions and 71369 deletions
+7 -7
View File
@@ -51,7 +51,7 @@
<p id="login-err" class="login-err" hidden></p>
<p id="login-hint" class="login-foot" hidden></p>
</form>
<p class="login-foot">默认账号 <code>admin</code> / <code>admin123</code>可在 hub <code>.env</code> 修改 <code>HUB_USERNAME</code> / <code>HUB_PASSWORD</code></p>
<p class="login-foot">默认账号 <code>admin</code> / <code>admin123</code>;可在 hub <code>.env</code> 修改 <code>HUB_USERNAME</code> / <code>HUB_PASSWORD</code></p>
</div>
<script>
(function () {
@@ -68,8 +68,8 @@
if (inFrame) {
hint.hidden = false;
hint.textContent = isHttps
? "嵌入模式登录成功后将自动写入会话"
: "嵌入模式需 HTTPS 中控HTTP 时请用本地导航工具栏「中控登录」";
? "嵌入模式:登录成功后将自动写入会话."
: "嵌入模式需 HTTPS 中控;HTTP 时请用本地导航工具栏「中控登录」.";
}
function showErr(msg) {
@@ -81,11 +81,11 @@
const target = dest.startsWith("/") ? dest : "/monitor";
if (inFrame) {
if (!token) {
showErr("登录响应缺少 session_token请升级云端 hub 或使用本地导航「中控登录」");
showErr("登录响应缺少 session_token,请升级云端 hub 或使用本地导航「中控登录」.");
return;
}
if (!isHttps) {
showErr("跨站 iframe 登录需要 HTTPS 中控请改用本地导航「中控登录」按钮");
showErr("跨站 iframe 登录需要 HTTPS 中控;请改用本地导航「中控登录」按钮.");
return;
}
const q = new URLSearchParams({ token, next: target });
@@ -147,12 +147,12 @@
return;
}
if (r.status === 403) {
showErr("访问被拒绝(403)云端 hub 需设置 HUB_ALLOW_PUBLIC=true");
showErr("访问被拒绝(403):云端 hub 需设置 HUB_ALLOW_PUBLIC=true");
} else {
showErr(j.detail || j.msg || "用户名或密码错误 (" + r.status + ")");
}
} catch (ex) {
showErr("网络错误" + ex);
showErr("网络错误:" + ex);
}
submitBtn.disabled = false;
submitBtn.textContent = oldLabel;