gabriel / musehub public
global_search_results.html html
106 lines 3.9 KB
Raw
sha256:e519738f2102d625d47828a17d113283cd744577b43551013cb668fd04f1c3fe chore(mwp8/phase5): tick all RG checkboxes; close-out doc (… Sonnet 4.6 18 days ago
1 {#
2 fragments/global_search_results.html — HTMX fragment: global search results.
3
4 Required context variables:
5 query : str — current search query (may be empty)
6 mode : str — keyword | pattern
7 result : GlobalSearchResult | None
8 cursor : str | None — current cursor (for display only)
9 limit : int — results per page
10 #}
11
12 {%- set sq = query | default('') %}
13
14 {%- if not sq or sq | length < 2 %}
15 <div class="sr-tips">
16 <div class="sr-tips-icon">🌐</div>
17 <div class="sr-tips-title">Search across all public MuseHub repos</div>
18 <p style="font-size:var(--text-sm);color:var(--text-muted);margin:0">
19 Find commits, tracks, and musical ideas shared by the community.
20 </p>
21 <div class="sr-tips-grid">
22 <div class="sr-tip-card">
23 <div class="sr-tip-label">Keyword</div>
24 <div class="sr-tip-example">piano arpeggio</div>
25 <div class="sr-tip-desc">Find commits mentioning all terms</div>
26 </div>
27 <div class="sr-tip-card">
28 <div class="sr-tip-label">Pattern</div>
29 <div class="sr-tip-example">feat: reverb</div>
30 <div class="sr-tip-desc">Substring match across message and branch</div>
31 </div>
32 </div>
33 </div>
34
35 {%- elif result and result.groups %}
36
37 <div class="sr-results-meta">
38 <strong>{{ result.groups | length }}</strong> repo{{ '' if result.groups | length == 1 else 's' }} with matches
39 &bull;
40 <strong>{{ result.total_repos_searched }}</strong> public repo{{ '' if result.total_repos_searched == 1 else 's' }} searched
41 &bull; query "<strong>{{ sq }}</strong>"
42 </div>
43
44 {%- for group in result.groups %}
45 <div class="sr-repo-group">
46 <div class="sr-repo-group-header">
47 <div class="sr-repo-group-name">
48 <a href="/{{ group.repo_owner }}/{{ group.repo_slug }}">
49 {{ group.repo_owner }} / {{ group.repo_name }}
50 </a>
51 </div>
52 <div class="sr-repo-group-meta">
53 <span class="sr-badge sr-badge-{{ 'open' if group.repo_visibility == 'public' else 'draft' }}">
54 {{ group.repo_visibility }}
55 </span>
56 <span>{{ group.total_matches }} match{{ '' if group.total_matches == 1 else 'es' }}</span>
57 </div>
58 </div>
59 <div class="sr-repo-group-body">
60 {%- for m in group.matches %}
61 <a class="sr-card" href="/{{ group.repo_owner }}/{{ group.repo_slug }}/commits/{{ m.commit_id }}">
62 <div class="sr-card-icon sr-icon-commit">📝</div>
63 <div class="sr-card-body">
64 <div class="sr-card-title" data-highlight="{{ sq }}">{{ m.message | truncate(120) }}</div>
65 <div class="sr-card-meta">
66 <span>{{ m.author }}</span>
67 &bull;
68 <span class="sr-branch-pill">⑂ {{ m.branch }}</span>
69 &bull;
70 <span>{{ m.timestamp | fmtdate }}</span>
71 </div>
72 </div>
73 <div class="sr-card-side">
74 <span class="sr-sha">{{ m.commit_id | short_id }}</span>
75 </div>
76 </a>
77 {%- endfor %}
78 {%- if group.total_matches > (group.matches | length) %}
79 <p class="more-note" style="margin-top:var(--space-2)">
80 Showing {{ group.matches | length }} of {{ group.total_matches }} matches — visit the repo to see all.
81 </p>
82 {%- endif %}
83 </div>
84 </div>
85 {%- endfor %}
86
87 <div class="sr-pagination">
88 {%- if result.next_cursor %}
89 <a class="btn btn-secondary"
90 hx-get="/search?q={{ sq | urlencode }}&mode={{ result.mode }}&cursor={{ result.next_cursor | urlencode }}"
91 hx-target="#sr-global-results"
92 href="/search?q={{ sq | urlencode }}&mode={{ result.mode }}&cursor={{ result.next_cursor | urlencode }}">
93 Next →
94 </a>
95 {%- endif %}
96 </div>
97
98 {%- else %}
99 <div class="sr-tips">
100 <div class="sr-tips-icon">🔇</div>
101 <div class="sr-tips-title">No results for "{{ sq }}"</div>
102 <p style="font-size:var(--text-sm);color:var(--text-muted);margin:0">
103 Try different keywords or switch to Pattern mode for partial matches.
104 </p>
105 </div>
106 {%- endif %}
File History 2 commits
sha256:e519738f2102d625d47828a17d113283cd744577b43551013cb668fd04f1c3fe chore(mwp8/phase5): tick all RG checkboxes; close-out doc (… Sonnet 4.6 18 days ago
sha256:0e5174da777684df43b2db71f282079030ef28bacffb93e19c29ee712b2a8bc4 test(mwp8/phase0): audit — repair+force-push leave stale ca… Sonnet 4.6 20 days ago