- feat:新增附件列表管理和增加按钮提示

Introduce an upload attachments panel with styles, localization and client-side management. Added new i18n keys (EN/ZH) and refactored js/i18n.js to helper setters for text/placeholder/title. popup.html and css/main.css add the upload-list UI and styles. oper.js implements rendering, drag-and-drop reorder, deletion (calls DELETE api with token), storage persistence (resourceIdList), escapeHtml sanitization, and sync change handling; it also fixes a config check (repo -> apiTokens), stores filename from upload responses, handles attachments/resources compatibility, and clears the list after sending a memo. Overall this enables reorderable, deletable uploaded attachments with proper localization and tooltips.
This commit is contained in:
jonny
2026-03-04 21:18:03 +08:00
parent dd2609e1e4
commit 59700dce59
6 changed files with 384 additions and 30 deletions
+44 -11
View File
@@ -1,15 +1,48 @@
document.getElementById("saveKey").textContent = chrome.i18n.getMessage("saveBtn");
document.getElementById("saveTag").textContent = chrome.i18n.getMessage("saveBtn");
function getMessage(key) {
return chrome.i18n.getMessage(key) || ''
}
document.getElementById("apiUrl").placeholder = chrome.i18n.getMessage("placeApiUrl");
document.getElementById("apiTokens").placeholder = chrome.i18n.getMessage("placeApiTokens");
document.getElementById("content").placeholder = chrome.i18n.getMessage("placeContent");
function setText(id, messageKey) {
const el = document.getElementById(id)
if (el) el.textContent = getMessage(messageKey)
}
document.getElementById("lockPrivate").textContent = chrome.i18n.getMessage("lockPrivate");
document.getElementById("lockProtected").textContent = chrome.i18n.getMessage("lockProtected");
document.getElementById("lockPublic").textContent = chrome.i18n.getMessage("lockPublic");
function setPlaceholder(id, messageKey) {
const el = document.getElementById(id)
if (el) el.placeholder = getMessage(messageKey)
}
document.getElementById("content_submit_text").textContent = chrome.i18n.getMessage("submitBtn");
function setTitle(id, messageKey) {
const el = document.getElementById(id)
if (el) el.title = getMessage(messageKey)
}
document.getElementById("hideInput").placeholder = chrome.i18n.getMessage("placeHideInput");
document.getElementById("showInput").placeholder = chrome.i18n.getMessage("placeShowInput");
setText("saveKey", "saveBtn")
setText("saveTag", "saveBtn")
setPlaceholder("apiUrl", "placeApiUrl")
setPlaceholder("apiTokens", "placeApiTokens")
setPlaceholder("content", "placeContent")
setText("lockPrivate", "lockPrivate")
setText("lockProtected", "lockProtected")
setText("lockPublic", "lockPublic")
setText("content_submit_text", "submitBtn")
setPlaceholder("hideInput", "placeHideInput")
setPlaceholder("showInput", "placeShowInput")
setText("uploadlist-title", "uploadedListTitle")
// Native hover tooltips (title)
setTitle("opensite", "tipOpenSite")
setTitle("blog_info_edit", "tipSettings")
setTitle("tags", "tipTags")
setTitle("newtodo", "tipTodo")
setTitle("upres", "tipUpload")
setTitle("getlink", "tipLink")
setTitle("random", "tipRandom")
setTitle("search", "tipSearch")
setTitle("lock", "tipVisibility")
setTitle("content_submit_text", "tipSend")