diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 456fb77..413a9a2 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -14,39 +14,54 @@ "sendLinkTo": { "message": "Send link to Memos" }, - "sendImageTo": { - "message": "Send image to Memos" - }, "saveBtn":{ "message": "Save" }, "placeApiUrl":{ - "message": "Memos Self Home Url" + "message": "Memos site URL" }, "placeApiTokens":{ "message": "Memos Access Tokens" }, "placeContent":{ - "message": "Any thoughts..." + "message": "What's on your mind..." }, "lockPrivate":{ - "message": "Only visible to you" + "message": "Private" }, "lockProtected":{ - "message": "Visible to members" + "message": "Protected" }, "lockPublic":{ - "message": "Everyone can see" + "message": "Public" }, "submitBtn":{ "message": "Save" }, "placeHideInput":{ - "message": "Default 'Only visible to you' Tag name" + "message": "Default 'Private' tag name" }, "placeShowInput":{ "message": "Default 'Everyone can see' Tag name" }, + "uploadedListTitle": { + "message": "Uploaded files, Drag to reorder" + }, + "uploadedListEmpty": { + "message": "No uploaded files" + }, + "tipReorder": { + "message": "Drag to reorder" + }, + "tipDeleteAttachment": { + "message": "Delete" + }, + "attachmentDeleteSuccess": { + "message": "Deleted" + }, + "attachmentDeleteFailed": { + "message": "Delete failed 😭" + }, "picDrag":{ "message": "Drag upload the image" }, @@ -94,5 +109,35 @@ }, "invalidToken":{ "message": "Invalid token or url 😭" + }, + "tipOpenSite": { + "message": "Open Memos" + }, + "tipSettings": { + "message": "Settings" + }, + "tipTags": { + "message": "Insert tag" + }, + "tipTodo": { + "message": "Insert todo" + }, + "tipUpload": { + "message": "Upload file" + }, + "tipLink": { + "message": "Insert current tab link" + }, + "tipRandom": { + "message": "Random memo" + }, + "tipSearch": { + "message": "Search" + }, + "tipVisibility": { + "message": "Visibility" + }, + "tipSend": { + "message": "Send (Ctrl/⌘+Enter)" } } \ No newline at end of file diff --git a/_locales/zh_CN/messages.json b/_locales/zh_CN/messages.json index 360ee42..c7c8966 100644 --- a/_locales/zh_CN/messages.json +++ b/_locales/zh_CN/messages.json @@ -94,5 +94,53 @@ }, "invalidToken":{ "message": "无效的 token 或 url 😭" + }, + "uploadedListTitle": { + "message": "已上传文件,可拖动排序" + }, + "uploadedListEmpty": { + "message": "暂无已上传文件" + }, + "tipReorder": { + "message": "拖动排序" + }, + "tipDeleteAttachment": { + "message": "删除" + }, + "attachmentDeleteSuccess": { + "message": "删除成功" + }, + "attachmentDeleteFailed": { + "message": "删除失败 😭" + }, + "tipOpenSite": { + "message": "打开 Memos" + }, + "tipSettings": { + "message": "设置" + }, + "tipTags": { + "message": "插入标签" + }, + "tipTodo": { + "message": "插入待办" + }, + "tipUpload": { + "message": "上传文件" + }, + "tipLink": { + "message": "插入当前页面链接" + }, + "tipRandom": { + "message": "随机一条" + }, + "tipSearch": { + "message": "搜索" + }, + "tipVisibility": { + "message": "可见性" + }, + "tipSend": { + "message": "发送(Ctrl/⌘+Enter)" } } \ No newline at end of file diff --git a/css/main.css b/css/main.css index 88799c6..383d6ff 100644 --- a/css/main.css +++ b/css/main.css @@ -94,6 +94,71 @@ input.inputer{border-bottom: 1px solid #ccc;width:75%;} margin-top: 1rem; justify-content: space-between; } + +.upload-list-wrapper{ + margin-top: .5rem; +} +.upload-list-title{ + font-size: .875rem; + color: #999; + margin-top: .5rem; + margin-bottom: .25rem; +} +.upload-list{ + border: 1px solid rgb(229,231,235); + border-radius: .5rem; + background-color: rgb(255,255,255); + padding: .25rem; +} +.upload-empty{ + padding: .5rem .75rem; + font-size: .875rem; + color: #999; +} +.upload-item{ + display:flex; + align-items:center; + justify-content: space-between; + padding: .4rem .5rem; + border-radius: .25rem; + color:#666; +} +.upload-item + .upload-item{ + border-top: 1px solid rgb(243,244,246); +} +.upload-item.drag-over{ + background-color: rgb(243,244,246); +} +.upload-left{ + display:flex; + align-items:center; + min-width: 0; + gap: .5rem; +} +.upload-drag{ + cursor: grab; + opacity: .6; + user-select: none; +} +.upload-filename{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: .875rem; +} +.upload-del{ + cursor:pointer; + font-size: 1rem; + line-height: 1; + padding: .15rem .35rem; + border-radius: .25rem; + opacity: .6; + background-color: transparent; +} +.upload-del:hover{ + opacity: 1; + background-color: rgb(243,244,246); +} .common-tools-container { display: flex; flex-direction: row; diff --git a/js/i18n.js b/js/i18n.js index f90f2cb..00ff52b 100644 --- a/js/i18n.js +++ b/js/i18n.js @@ -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"); \ No newline at end of file +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") \ No newline at end of file diff --git a/js/oper.js b/js/oper.js index 79c2e44..fbeb0df 100644 --- a/js/oper.js +++ b/js/oper.js @@ -1,6 +1,8 @@ dayjs.extend(window.dayjs_plugin_relativeTime) dayjs.locale('zh-cn') +let relistNow = [] + function get_info(callback) { chrome.storage.sync.get( { @@ -17,7 +19,7 @@ function get_info(callback) { function (items) { var flag = false var returnObject = {} - if (items.apiUrl === '' || items.repo === '') { + if (items.apiUrl === '' || items.apiTokens === '') { flag = false } else { flag = true @@ -67,10 +69,22 @@ get_info(function (info) { } else { $("textarea[name=text]").val(info.open_content) } + + relistNow = Array.isArray(info.resourceIdList) ? info.resourceIdList : [] + renderUploadList(relistNow) //从localstorage 里面读取数据 setTimeout(get_info, 1) }) +chrome.storage.onChanged.addListener(function (changes, areaName) { + if (areaName !== 'sync') return + if (!changes.resourceIdList) return + relistNow = Array.isArray(changes.resourceIdList.newValue) + ? changes.resourceIdList.newValue + : [] + renderUploadList(relistNow) +}) + $("textarea[name=text]").focus() //监听输入结束,保存未发送内容到本地 @@ -140,7 +154,147 @@ function initDrag() { } } -let relistNow = [] +function escapeHtml(input) { + return String(input) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, ''') +} + +function renderUploadList(list) { + const $wrapper = $('.upload-list-wrapper') + const $list = $('#uploadlist') + if ($list.length === 0) return + + const items = Array.isArray(list) ? list : [] + if (items.length === 0) { + if ($wrapper.length) $wrapper.hide() + $list.html('') + return + } + + if ($wrapper.length) $wrapper.show() + + const tipReorder = escapeHtml(chrome.i18n.getMessage('tipReorder')) + const tipDelete = escapeHtml(chrome.i18n.getMessage('tipDeleteAttachment')) + + let html = '' + for (let i = 0; i < items.length; i++) { + const att = items[i] || {} + const name = att.name || '' + const filename = att.filename || name + html += + '