global_search_results.html
html
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 | • |
| 40 | <strong>{{ result.total_repos_searched }}</strong> public repo{{ '' if result.total_repos_searched == 1 else 's' }} searched |
| 41 | • 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 | • |
| 68 | <span class="sr-branch-pill">⑂ {{ m.branch }}</span> |
| 69 | • |
| 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