Skip to content

Commit f841cef

Browse files
committed
1
1 parent 50fecb9 commit f841cef

157 files changed

Lines changed: 1640 additions & 1639 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/pages/wait/install/index.mjs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -525,19 +525,19 @@ async function populateLanguageSelector() {
525525
const localeName = localeNames.get(locale) || locale
526526
const node = await renderTemplate('locale_item', { localeName })
527527
const li = node.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? node.firstElementChild : node
528-
const btn = li.querySelector('.locale-item-button')
528+
const button = li.querySelector('.locale-item-button')
529529
/**
530530
* 处理语言选择点击事件。
531531
* @param {Event} e - 点击事件对象。
532532
* @returns {void}
533533
*/
534-
btn.onclick = e => selectLocale(e, locale)
534+
button.onclick = e => selectLocale(e, locale)
535535
/**
536536
* 处理语言选择键盘事件。
537537
* @param {Event} e - 键盘事件对象。
538538
* @returns {void}
539539
*/
540-
btn.onkeydown = e => selectLocale(e, locale)
540+
button.onkeydown = e => selectLocale(e, locale)
541541
items.push({ element: li, locale, name: localeName })
542542
languageSelector.appendChild(li)
543543
}

src/public/locales/zh-CN.json

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,7 +1127,7 @@
11271127
"composer": {
11281128
"placeholder": "在想什么?支持 Markdown(fount 方言),输入 @ 可提及",
11291129
"publish": "发布",
1130-
"composeBtn": "发布",
1130+
"composeButton": "发布",
11311131
"addMedia": "添加媒体",
11321132
"visibilityPublic": "公开",
11331133
"visibilityFollowers": "仅关注者"
@@ -1916,7 +1916,7 @@
19161916
},
19171917
"shareGroupOk": "已分享群组邀请卡片",
19181918
"messageActionFailed": "操作失败:${error}",
1919-
"inviteJoinBtn": "加入群组",
1919+
"inviteJoinButton": "加入群组",
19201920
"inviteLinkNeedsRoomSecret": "本群尚未启用联邦同步,请重新生成邀请链接后再分享。",
19211921
"inviteCardMembers": "${count} 名成员",
19221922
"syncFailed": "联邦同步失败:${error}",
@@ -2309,7 +2309,7 @@
23092309
},
23102310
"syncTruncated": "DAG 增量未拉全,可稍后重试或提高 limit",
23112311
"syncTruncatedHint": "DAG 历史过长,可稍后重试或提高 limit",
2312-
"newChannelBtn": "新建频道",
2312+
"newChannelButton": "新建频道",
23132313
"newChannelSuccess": "频道已创建",
23142314
"newChannelFailed": "创建频道失败",
23152315
"newChannelTitle": "新建频道",
@@ -2360,17 +2360,18 @@
23602360
"tagFed": "联邦成员",
23612361
"tagLocal": "本机账户"
23622362
},
2363-
"channelCtx": {
2363+
"channelContext": {
23642364
"copyLinkDone": "频道链接已复制",
23652365
"rename": "重命名频道",
23662366
"renameOk": "频道已重命名",
23672367
"delete": "删除频道",
23682368
"deleteOk": "频道已删除",
23692369
"deleteConfirm": "确定删除频道「${name}」吗?此操作不可撤销。",
23702370
"setDefault": "设为默认频道",
2371-
"setDefaultOk": "已设为默认频道"
2371+
"setDefaultOk": "已设为默认频道",
2372+
"copyLink": "复制频道链接"
23722373
},
2373-
"memberCtx": {
2374+
"memberContext": {
23742375
"copyName": "复制显示名",
23752376
"copyPubKey": "复制公钥哈希",
23762377
"copyEntityId": "复制实体 ID",
@@ -2385,7 +2386,7 @@
23852386
"banEntity": "封禁实体(128 位 entityHash)",
23862387
"banNode": "封禁节点(homeNodeHash)"
23872388
},
2388-
"messageCtx": {
2389+
"messageContext": {
23892390
"edit": "编辑消息",
23902391
"delete": "删除消息"
23912392
},
@@ -3171,10 +3172,10 @@
31713172
"creationDateLabel": "账户创建日期:",
31723173
"folderSizeLabel": "用户数据大小:",
31733174
"folderPathLabel": "用户数据路径:",
3174-
"copyPathBtn": {
3175+
"copyPathButton": {
31753176
"title": "复制路径"
31763177
},
3177-
"copyPathBtnIcon": {
3178+
"copyPathButtonIcon": {
31783179
"alt": "复制图标"
31793180
},
31803181
"copiedAlert": "路径已复制到剪贴板!",

src/public/pages/AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ alwaysApply: false
2929
- **`markdown.mjs`**: Markdown → HTML with KaTeX, Mermaid, Shiki.
3030
- **`markdownExtensions.mjs`**: Loads `markdown_extensions` registry (remark/rehype plugins, CSS, init hooks).
3131
- **`registries.mjs`**: `GET /api/registries/:name` + dynamic `import()` of registry modules.
32-
- **`emojiPicker.mjs`** / **`stickerPicker.mjs`**: Shared pickers consuming `emoji`/`sticker` registries; Hub mounts via `mountDockedEmojiPicker`/`mountDockedStickerPicker`.
32+
- **`emojiPicker.mjs`** / **`stickerPicker.mjs`**: Shared pickers consuming `emoji`/`sticker` registries; Hub mounts via `mountDockedEmojiPicker`/`mountDockedStickerPicker`. Docked options use full names: `pickerElement`, `gridElement`, `triggerButton`, `tabsElement`, `inputElement` — not `*El`/`*Btn`. **JS 变量、HTML `id`、i18n 键**均用完整词(`*Button`/`*Element`/`*Context`);**DaisyUI 等外部 UI 库的 `class="btn …"` 保持不动**
3333
- **`svgInliner.mjs`**: Inlines SVGs for CSS `currentColor` styling.
3434
- **`i18n.mjs`**: Sole public entry. Call `initTranslations()` early. `data-i18n` attributes, `geti18n`, `loadPreferredLangs`, `savePreferredLangs`.
3535
- **`i18n_base.mjs`**: Internal (imported only by `i18n.mjs`): `userPreferredLanguages` (host app) vs `fountUserPreferredLanguages` (static GitHub Pages).

src/public/pages/directory-listing/index.mjs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import { initTranslations, setLocalizeLogic } from '/scripts/i18n/index.mjs'
33
import { escapeHtml } from '/scripts/lib/escapeHtml.mjs'
44

55
applyTheme()
6-
const headingEl = document.getElementById('directory-listing-heading')
7-
headingEl.dataset.path = escapeHtml(headingEl.dataset.path)
6+
const headingElement = document.getElementById('directory-listing-heading')
7+
headingElement.dataset.path = escapeHtml(headingElement.dataset.path)
88
await initTranslations('directoryListing')
99

1010
const data = JSON.parse(document.getElementById('directory-data').textContent)
1111

1212
setLocalizeLogic(document.head, () => {
13-
document.title = headingEl.textContent
13+
document.title = headingElement.textContent
1414
})
1515

1616
const tbody = document.getElementById('directory-listing-tbody')

src/public/pages/log_viewer/log.mjs

Lines changed: 50 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -203,21 +203,21 @@ function buildChildren(node, depth, renderOpts = {}) {
203203
/**
204204
* 创建属性行(key: value)。
205205
* @param {string} key - 属性名或索引。
206-
* @param {HTMLElement} valueEl - 值所在的 DOM 节点。
206+
* @param {HTMLElement} valueElement - 值所在的 DOM 节点。
207207
* @returns {HTMLDivElement} 一整行 prop。
208208
*/
209-
function makeProp(key, valueEl) {
209+
function makeProp(key, valueElement) {
210210
const prop = document.createElement('div')
211211
prop.className = 'log-node-prop'
212-
const keyEl = document.createElement('span')
213-
keyEl.className = 'log-node-key'
214-
keyEl.textContent = key
212+
const keyElement = document.createElement('span')
213+
keyElement.className = 'log-node-key'
214+
keyElement.textContent = key
215215
const colon = document.createElement('span')
216216
colon.className = 'log-node-colon'
217217
colon.textContent = ':\u00a0'
218-
prop.appendChild(keyEl)
218+
prop.appendChild(keyElement)
219219
prop.appendChild(colon)
220-
prop.appendChild(valueEl)
220+
prop.appendChild(valueElement)
221221
return prop
222222
}
223223

@@ -259,7 +259,7 @@ function buildExpandableNode(node, depth, renderOpts = {}) {
259259

260260
if (hasChildren) {
261261
let expanded = false
262-
let childrenEl = null
262+
let childrenElement = null
263263
let loading = false
264264

265265
/**
@@ -270,31 +270,31 @@ function buildExpandableNode(node, depth, renderOpts = {}) {
270270
const toggleExpand = async (e) => {
271271
e?.stopPropagation()
272272
if (loading) return
273-
if (childrenEl) {
273+
if (childrenElement) {
274274
expanded = !expanded
275275
toggle.classList.toggle('open', expanded)
276-
if (expanded) el.appendChild(childrenEl)
277-
else el.removeChild(childrenEl)
276+
if (expanded) el.appendChild(childrenElement)
277+
else el.removeChild(childrenElement)
278278
return
279279
}
280280
expanded = true
281281
toggle.classList.add('open')
282282
const expandRef = renderOpts.requestExpandRef
283283
if (typeof expandRef === 'function') {
284284
loading = true
285-
const loadingEl = document.createElement('span')
286-
loadingEl.className = 'log-node-children'
287-
loadingEl.textContent = '…'
288-
el.appendChild(loadingEl)
285+
const loadingElement = document.createElement('span')
286+
loadingElement.className = 'log-node-children'
287+
loadingElement.textContent = '…'
288+
el.appendChild(loadingElement)
289289
try {
290290
await resolveAllTruncated(node, expandRef)
291291
} finally {
292292
loading = false
293-
if (loadingEl.parentNode) el.removeChild(loadingEl)
293+
if (loadingElement.parentNode) el.removeChild(loadingElement)
294294
}
295295
}
296-
childrenEl = buildChildren(node, depth + 1, renderOpts)
297-
el.appendChild(childrenEl)
296+
childrenElement = buildChildren(node, depth + 1, renderOpts)
297+
el.appendChild(childrenElement)
298298
}
299299

300300
header.addEventListener('click', toggleExpand)
@@ -523,23 +523,23 @@ export function renderLogItem(entry, { canOpenEditor = false, onOpenSource, requ
523523
* DOM 元素引用。
524524
* @type {HTMLElement}
525525
*/
526-
let sourceEl
526+
let sourceElement
527527
if (canClick) {
528-
const btn = document.createElement('button')
529-
btn.type = 'button'
530-
btn.className = 'log-source-btn clickable'
531-
btn.textContent = labelText
532-
btn.title = titleText
533-
btn.addEventListener('click', () => onOpenSource(callsite))
534-
sourceEl = btn
528+
const button = document.createElement('button')
529+
button.type = 'button'
530+
button.className = 'log-source-btn clickable'
531+
button.textContent = labelText
532+
button.title = titleText
533+
button.addEventListener('click', () => onOpenSource(callsite))
534+
sourceElement = button
535535
} else {
536536
const span = document.createElement('span')
537537
span.className = 'log-source-btn'
538538
span.textContent = labelText
539539
span.title = titleText
540-
sourceEl = span
540+
sourceElement = span
541541
}
542-
meta.appendChild(sourceEl)
542+
meta.appendChild(sourceElement)
543543
row.appendChild(meta)
544544
}
545545

@@ -548,20 +548,19 @@ export function renderLogItem(entry, { canOpenEditor = false, onOpenSource, requ
548548

549549
/**
550550
* 创建日志工具栏并绑定过滤逻辑。
551-
* @param {object} opts - 工具栏配置。
552-
* @param {() => void} opts.onClear - 用户点击清空时调用。
553-
* @param {(filterText: string, levelFilter: string) => void} opts.onFilter - 文本或级别变更时调用。
551+
* @param {object} options - 工具栏配置。
552+
* @param {() => void} options.onClear - 用户点击清空时调用。
553+
* @param {(filterText: string, levelFilter: string) => void} options.onFilter - 文本或级别变更时调用。
554554
* @returns {HTMLElement} 工具栏根元素。
555555
*/
556556
export function createLogToolbar({ onClear, onFilter }) {
557557
const toolbar = document.createElement('div')
558558
toolbar.className = 'log-toolbar'
559559

560-
// 清空按钮
561-
const clearBtn = document.createElement('button')
562-
clearBtn.className = 'log-clear-btn'
563-
clearBtn.dataset.i18n = 'log_viewer.logs.toolbar.clear'
564-
clearBtn.addEventListener('click', () => onClear?.())
560+
const clearButton = document.createElement('button')
561+
clearButton.className = 'log-clear-btn'
562+
clearButton.dataset.i18n = 'log_viewer.logs.toolbar.clear'
563+
clearButton.addEventListener('click', () => onClear?.())
565564

566565
// 过滤输入框
567566
const filterInput = document.createElement('input')
@@ -570,32 +569,32 @@ export function createLogToolbar({ onClear, onFilter }) {
570569
filterInput.dataset.i18n = 'log_viewer.logs.toolbar.filter'
571570

572571
// 级别过滤按钮
573-
const levelBtns = document.createElement('div')
574-
levelBtns.className = 'log-level-btns'
572+
const levelButtons = document.createElement('div')
573+
levelButtons.className = 'log-level-btns'
575574

576575
let activeLevel = 'all'
577576
const levelIds = ['all', 'log', 'info', 'warn', 'error', 'debug']
578577

579-
const btnEls = {}
578+
const levelButtonById = {}
580579
for (const id of levelIds) {
581-
const btn = document.createElement('button')
582-
btn.type = 'button'
583-
btn.className = `log-level-btn${id === 'all' ? ' active' : ''}`
584-
btn.dataset.lvl = id
585-
btn.dataset.i18n = `log_viewer.logs.levels.${id}`
586-
btn.addEventListener('click', () => {
580+
const button = document.createElement('button')
581+
button.type = 'button'
582+
button.className = `log-level-btn${id === 'all' ? ' active' : ''}`
583+
button.dataset.lvl = id
584+
button.dataset.i18n = `log_viewer.logs.levels.${id}`
585+
button.addEventListener('click', () => {
587586
activeLevel = id
588-
for (const [k, el] of Object.entries(btnEls))
589-
el.classList.toggle('active', k === id)
587+
for (const [k, levelButton] of Object.entries(levelButtonById))
588+
levelButton.classList.toggle('active', k === id)
590589
onFilter?.(filterInput.value, activeLevel)
591590
})
592-
btnEls[id] = btn
593-
levelBtns.appendChild(btn)
591+
levelButtonById[id] = button
592+
levelButtons.appendChild(button)
594593
}
595594

596-
toolbar.appendChild(clearBtn)
595+
toolbar.appendChild(clearButton)
597596
toolbar.appendChild(filterInput)
598-
toolbar.appendChild(levelBtns)
597+
toolbar.appendChild(levelButtons)
599598

600599
filterInput.addEventListener('input', () => onFilter?.(filterInput.value, activeLevel))
601600

0 commit comments

Comments
 (0)