feat(search): 自定义引擎支持图标地址(png / svg)
- settings.search.engines[] 新增 icon:空=品牌图标/通用地球,'/' 开头走托管目录,或 http(s) 链接 - 后端校验图标地址(空 / 托管路径 / http(s),≤500 字符) - 后台每张引擎卡加「图标地址」输入;前后台都用组件库 EngineIcon 的 src(<img> 渲染,SVG 静态不执行脚本) - @stash/ui 0.3.4
This commit is contained in:
@@ -69,7 +69,7 @@ type Route =
|
||||
| { kind: 'item'; key: string; itemId: string }
|
||||
| { kind: 'api' }
|
||||
|
||||
const INTERNAL_SEARCH = { id: 'internal', name: '站内搜索', url: '' } as const
|
||||
const INTERNAL_SEARCH = { id: 'internal', name: '站内搜索', url: '', icon: '' } as const
|
||||
|
||||
const SEARCH_ENGINE_KEY = 'stash-search-engine'
|
||||
|
||||
@@ -362,7 +362,12 @@ export default function AppNext() {
|
||||
INTERNAL_SEARCH,
|
||||
...site.search.engines
|
||||
.filter((engine) => engine.enabled)
|
||||
.map((engine) => ({ id: engine.id, name: engine.name, url: engine.url })),
|
||||
.map((engine) => ({
|
||||
id: engine.id,
|
||||
name: engine.name,
|
||||
url: engine.url,
|
||||
icon: engine.icon ?? '',
|
||||
})),
|
||||
]
|
||||
const searchEngine =
|
||||
searchEngines.find((engine) => engine.id === searchEngineId) ??
|
||||
@@ -930,7 +935,7 @@ export default function AppNext() {
|
||||
}
|
||||
onClick={() => setEngineOpen((open) => !open)}
|
||||
>
|
||||
<EngineIcon name={searchEngine.id} size={14} />
|
||||
<EngineIcon name={searchEngine.id} src={searchEngine.icon} size={14} />
|
||||
<span>{searchEngine.name}</span>
|
||||
</button>
|
||||
|
||||
@@ -977,7 +982,7 @@ export default function AppNext() {
|
||||
className={`engine-option${engine.id === searchEngine.id ? ' is-active' : ''}`}
|
||||
onClick={() => chooseEngine(engine.id)}
|
||||
>
|
||||
<EngineIcon name={engine.id} size={18} />
|
||||
<EngineIcon name={engine.id} src={engine.icon} size={18} />
|
||||
<span>{engine.name}</span>
|
||||
</button>
|
||||
))}
|
||||
|
||||
Reference in New Issue
Block a user