From 8f4b64a13f5e5517cbec4c1e472bb89f3c336e50 Mon Sep 17 00:00:00 2001 From: jonny Date: Wed, 22 Apr 2026 19:15:49 +0800 Subject: [PATCH] Firefox: add icons, rewrite viewer, update manifest Add Firefox icon assets and update manifest to use the new icon files and opt-out data_collection_permissions. Replace minified view-image.js with a modern, readable implementation (style injection, accessible controls, keyboard navigation, and better DOM handling). Simplify background popup logic to call chrome.browserAction.openPopup directly. Remove the packaging section from README to clean up docs. --- README.md | 10 -- firefox/assets/logo-128.png | Bin 0 -> 20627 bytes firefox/assets/logo-16.png | Bin 0 -> 844 bytes firefox/assets/logo-48.png | Bin 0 -> 4261 bytes firefox/js/background.js | 13 +-- firefox/js/view-image.js | 184 +++++++++++++++++++++++++++++++++--- firefox/manifest.json | 11 ++- 7 files changed, 182 insertions(+), 36 deletions(-) create mode 100644 firefox/assets/logo-128.png create mode 100644 firefox/assets/logo-16.png create mode 100644 firefox/assets/logo-48.png diff --git a/README.md b/README.md index 9373f9b..1211b8e 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,6 @@ 一个通过浏览器插件发布 [Memos](https://usememos.com/) 的插件。基于 iSpeak-bber 修改,原作者为 [DreamyTZK](https://www.antmoe.com/)。 -## 打包 - -仓库内置了 GitHub Actions 工作流 [package-extensions.yml](.github/workflows/package-extensions.yml),支持手动触发或在推送 `v*` 标签时自动打包并发布到 GitHub Releases。 - -- 推送 `v*` 标签时:自动把 Chrome 的 zip 包和 Firefox 的 xpi 包上传为对应 Release 的 assets。 -- 手动触发时:需要填写 `release_tag`,工作流会把产物直接上传到这个 tag 对应的 Release。 -- 下载时拿到的是文件本体,不再通过 Actions artifact 额外包一层 zip。 -- 打包源码固定来自 `main` 分支;`tag` 只用于决定上传到哪个 Release。 - -说明:Chrome 的 zip 包可用于商店上传,Firefox 的 xpi 包可用于 AMO 上传或离线分发。工作流已显式启用 Node 24 运行 JavaScript actions,并使用新的 `actions/checkout@v5`。 ## 更新日志 - 20260422 调整发送设置,支持仅发送附件 diff --git a/firefox/assets/logo-128.png b/firefox/assets/logo-128.png new file mode 100644 index 0000000000000000000000000000000000000000..338cfeefa65924f1e639d07622d16f181bfae49b GIT binary patch literal 20627 zcmV)#K##wPP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000) zWmrjOO-%qQ0000800D<-00aO40096102%-Q00003paB2_0000100961paK8{00001 z0001hpaTE|000010001h00000NR9+|002M$NklptS%8xN8} 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 Hu0mjf#Xtd{ literal 0 HcmV?d00001 diff --git a/firefox/js/background.js b/firefox/js/background.js index 5889229..b13d901 100644 --- a/firefox/js/background.js +++ b/firefox/js/background.js @@ -99,24 +99,17 @@ function getSelectionTextFromTab(tabId, fallbackText) { }) } -function getActionApi() { - if (chrome.action && typeof chrome.action.openPopup === 'function') return chrome.action - if (chrome.browserAction && typeof chrome.browserAction.openPopup === 'function') return chrome.browserAction - return null -} - function tryOpenActionPopup(tab) { try { - const actionApi = getActionApi() - if (!actionApi) return + if (!chrome.browserAction || typeof chrome.browserAction.openPopup !== 'function') return const windowId = tab && typeof tab.windowId === 'number' ? tab.windowId : undefined const open = () => { try { if (typeof windowId === 'number') { - actionApi.openPopup({ windowId }, () => void chrome.runtime.lastError) + chrome.browserAction.openPopup({ windowId }, () => void chrome.runtime.lastError) } else { - actionApi.openPopup({}, () => void chrome.runtime.lastError) + chrome.browserAction.openPopup({}, () => void chrome.runtime.lastError) } } catch (_) { // best-effort only diff --git a/firefox/js/view-image.js b/firefox/js/view-image.js index 9d5a8cf..dd65b6c 100644 --- a/firefox/js/view-image.js +++ b/firefox/js/view-image.js @@ -1,12 +1,172 @@ -/** - * ViewImage.min.js 2.0.2 - * MIT License - http://www.opensource.org/licenses/mit-license.php - * https://tokinx.github.io/ViewImage/ - */ -var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.createTemplateTagFirstArg=function(b){return b.raw=b};$jscomp.createTemplateTagFirstArgWithRaw=function(b,a){b.raw=a;return b};$jscomp.arrayIteratorImpl=function(b){var a=0;return function(){return a\n \n
\n
\n
\n
\n
\n
\n
\n '+ -(c+1)+"/"+a.length+'\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n ', -"text/html").body.firstChild,g=function(f){var h={Escape:"close",ArrowLeft:"tools__flip-prev",ArrowRight:"tools__flip-next"};h[f.key]&&e.querySelector(".view-image-"+h[f.key]).click()},l=function(f){var h=new Image,k=e.querySelector(".view-image-lead");k.className="view-image-lead view-image-lead__out";setTimeout(function(){k.innerHTML="";h.onload=function(){setTimeout(function(){k.innerHTML='ViewImage';k.className="view-image-lead view-image-lead__in"},100)}; -h.src=f},300)};document.body.appendChild(e);l(d);window.addEventListener("keydown",g);e.onclick=function(f){f.target.closest(".view-image-close")?(window.removeEventListener("keydown",g),e.onclick=null,e.classList.add("view-image__out"),setTimeout(function(){return e.remove()},290)):f.target.closest(".view-image-tools__flip")&&(c=f.target.closest(".view-image-tools__flip-prev")?0===c?a.length-1:c-1:c===a.length-1?0:c+1,l(a[c]),e.querySelector(".view-image-index").innerHTML=c+1)}}}})(); +;(function () { + const STYLE_ID = 'view-image-style' + const STYLE_TEXT = ` + .view-image{position:fixed;inset:0;z-index:500;padding:1rem;display:flex;flex-direction:column;animation:view-image-in 300ms;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)} + .view-image__out{animation:view-image-out 300ms} + @keyframes view-image-in{0%{opacity:0}} + @keyframes view-image-out{100%{opacity:0}} + .view-image-btn{width:32px;height:32px;display:flex;justify-content:center;align-items:center;cursor:pointer;border-radius:3px;background-color:rgba(255,255,255,0.2);color:#fff;font-size:20px;line-height:1} + .view-image-btn:hover{background-color:rgba(255,255,255,0.5)} + .view-image-close__full{position:absolute;inset:0;background-color:rgba(48,55,66,0.3);cursor:zoom-out;margin:0} + .view-image-container{height:0;flex:1;display:flex;align-items:center;justify-content:center} + .view-image-lead{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;max-width:100%;max-height:100%} + .view-image-lead img{max-width:100%;max-height:100%;object-fit:contain;border-radius:3px} + .view-image-lead__in img{animation:view-image-lead-in 300ms} + .view-image-lead__out img{animation:view-image-lead-out 300ms forwards} + @keyframes view-image-lead-in{0%{opacity:0;transform:translateY(-20px)}} + @keyframes view-image-lead-out{100%{opacity:0;transform:translateY(20px)}} + [class*=__out] ~ .view-image-loading{display:block} + .view-image-loading{position:absolute;inset:50%;width:8rem;height:2rem;color:#aab2bd;overflow:hidden;text-align:center;margin:-1rem -4rem;z-index:1;display:none} + .view-image-loading::after{content:"";position:absolute;inset:50% 0;width:100%;height:3px;background:rgba(255,255,255,0.5);transform:translateX(-100%) translateY(-50%);animation:view-image-loading 800ms -100ms ease-in-out infinite} + @keyframes view-image-loading{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}} + .view-image-tools{position:absolute;bottom:5%;left:1rem;right:1rem;display:flex;justify-content:space-between;align-content:center;color:#fff;max-width:600px;backdrop-filter:blur(10px);margin:0 auto;padding:10px;border-radius:5px;background:rgba(0,0,0,0.1);margin-bottom:constant(safe-area-inset-bottom);margin-bottom:env(safe-area-inset-bottom);z-index:1} + .view-image-tools__count{width:60px;display:flex;align-items:center;justify-content:center} + .view-image-tools__flip{display:flex;gap:10px} + .view-image-tools [class*=-close]{margin:0 10px} + ` + + function ensureStyle() { + if (document.getElementById(STYLE_ID)) return + const style = document.createElement('style') + style.id = STYLE_ID + style.textContent = STYLE_TEXT + document.head.appendChild(style) + } + + function createButton(className, label, ariaLabel) { + const button = document.createElement('button') + button.type = 'button' + button.className = className + button.setAttribute('aria-label', ariaLabel) + button.textContent = label + return button + } + + window.ViewImage = new (function () { + const api = this + api.target = '[view-image] img' + api.listener = function (event) { + if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return + const selector = String( + api.target + .split(',') + .map(function (item) { + return item.trim() + ':not([no-view])' + }) + .join(',') + ) + const current = event.target.closest(selector) + if (!current) return + const root = current.closest('[view-image]') || document.body + const sources = Array.from(root.querySelectorAll(selector)).map(function (item) { + return item.href || item.src + }) + api.display(sources, current.href || current.src) + event.stopPropagation() + event.preventDefault() + } + + api.init = function (target) { + if (target) api.target = target + document.removeEventListener('click', api.listener, false) + document.addEventListener('click', api.listener, false) + } + + api.display = function (sources, currentSrc) { + ensureStyle() + + let currentIndex = Math.max(0, sources.indexOf(currentSrc)) + const overlay = document.createElement('div') + overlay.className = 'view-image' + + const container = document.createElement('div') + container.className = 'view-image-container' + + const lead = document.createElement('div') + lead.className = 'view-image-lead' + + const loading = document.createElement('div') + loading.className = 'view-image-loading' + + const backdrop = document.createElement('div') + backdrop.className = 'view-image-close view-image-close__full' + + container.appendChild(lead) + container.appendChild(loading) + container.appendChild(backdrop) + + const tools = document.createElement('div') + tools.className = 'view-image-tools' + + const count = document.createElement('div') + count.className = 'view-image-tools__count' + const countText = document.createElement('span') + count.appendChild(countText) + + const flips = document.createElement('div') + flips.className = 'view-image-tools__flip' + const prev = createButton('view-image-btn view-image-tools__flip-prev', '‹', 'Previous image') + const next = createButton('view-image-btn view-image-tools__flip-next', '›', 'Next image') + flips.appendChild(prev) + flips.appendChild(next) + + const close = createButton('view-image-btn view-image-close', '×', 'Close image viewer') + + tools.appendChild(count) + tools.appendChild(flips) + tools.appendChild(close) + + overlay.appendChild(container) + overlay.appendChild(tools) + + function render() { + countText.textContent = `${currentIndex + 1}/${sources.length}` + lead.className = 'view-image-lead view-image-lead__out' + + window.setTimeout(function () { + const image = document.createElement('img') + image.alt = 'ViewImage' + image.setAttribute('no-view', '') + image.addEventListener('load', function () { + window.setTimeout(function () { + lead.replaceChildren(image) + lead.className = 'view-image-lead view-image-lead__in' + }, 100) + }) + image.src = sources[currentIndex] + }, 300) + } + + function closeViewer() { + window.removeEventListener('keydown', onKeyDown) + overlay.classList.add('view-image__out') + window.setTimeout(function () { + overlay.remove() + }, 290) + } + + function onKeyDown(event) { + if (event.key === 'Escape') closeViewer() + if (event.key === 'ArrowLeft') prev.click() + if (event.key === 'ArrowRight') next.click() + } + + prev.addEventListener('click', function () { + currentIndex = currentIndex === 0 ? sources.length - 1 : currentIndex - 1 + render() + }) + + next.addEventListener('click', function () { + currentIndex = currentIndex === sources.length - 1 ? 0 : currentIndex + 1 + render() + }) + + backdrop.addEventListener('click', closeViewer) + close.addEventListener('click', closeViewer) + + document.body.appendChild(overlay) + window.addEventListener('keydown', onKeyDown) + render() + } + })() +})() diff --git a/firefox/manifest.json b/firefox/manifest.json index 307b636..b7606e6 100644 --- a/firefox/manifest.json +++ b/firefox/manifest.json @@ -12,13 +12,16 @@ "homepage_url": "https://github.com/Jonnyan404/memos-bber", "browser_specific_settings": { "gecko": { - "id": "memos-bber@jonnyan404.github.io" + "id": "memos-bber@jonnyan404.github.io", + "data_collection_permissions": { + "required": false + } } }, "icons": { - "128": "assets/logo.png", - "16": "assets/logo.png", - "48": "assets/logo.png" + "128": "assets/logo-128.png", + "16": "assets/logo-16.png", + "48": "assets/logo-48.png" }, "background": { "scripts": ["js/background.js"]