feat: add image search with Bing, DuckDuckGo, and Qwant engines
Three new image search engines: - bing_images: Bing Images via RSS endpoint - ddg_images: DuckDuckGo Images via VQD API - qwant_images: Qwant Images via v3 search API Frontend: - Image grid layout with responsive columns - image_item template with thumbnail, title, and source metadata - Hover animations and lazy loading - Grid activates automatically when category=images Backend: - category=images routes to image engines via planner - Image engines registered in factory and engine allowlist - extractImgSrc helper for parsing thumbnail URLs from HTML - IsImageSearch flag on PageData for template layout switching
This commit is contained in:
parent
a316763aca
commit
2b072e4de3
11 changed files with 687 additions and 4 deletions
15
internal/views/templates/image_item.html
Normal file
15
internal/views/templates/image_item.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{{define "image_item"}}
|
||||
<a class="image-result" href="{{.URL}}" target="_blank" rel="noopener noreferrer">
|
||||
<div class="image-thumb">
|
||||
{{if .Thumbnail}}
|
||||
<img src="{{.Thumbnail}}" alt="{{.Title}}" loading="lazy" onerror="this.parentElement.classList.add('image-error')">
|
||||
{{else}}
|
||||
<div class="image-placeholder">🖼️</div>
|
||||
{{end}}
|
||||
</div>
|
||||
<div class="image-meta">
|
||||
<span class="image-title">{{.Title}}</span>
|
||||
{{if .Content}}<span class="image-source">{{.Content}}</span>{{end}}
|
||||
</div>
|
||||
</a>
|
||||
{{end}}
|
||||
|
|
@ -19,13 +19,25 @@
|
|||
|
||||
<div id="urls" role="main">
|
||||
{{if .Results}}
|
||||
{{if .IsImageSearch}}
|
||||
<div class="image-grid">
|
||||
{{range .Results}}
|
||||
{{if eq .Template "images"}}
|
||||
{{template "image_item" .}}
|
||||
{{end}}
|
||||
{{end}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{range .Results}}
|
||||
{{if eq .Template "videos"}}
|
||||
{{template "video_item" .}}
|
||||
{{else if eq .Template "images"}}
|
||||
{{template "image_item" .}}
|
||||
{{else}}
|
||||
{{template "result_item" .}}
|
||||
{{end}}
|
||||
{{end}}
|
||||
{{end}}
|
||||
{{else if not .Answers}}
|
||||
<div class="no-results">
|
||||
<div class="no-results-icon">🔍</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue