@@ -2,7 +2,60 @@ defmodule DiffWeb.SearchLiveView do
22 use DiffWeb , :live_view
33
44 def render ( assigns ) do
5- DiffWeb.SearchView . render ( "search.html" , assigns )
5+ ~H"""
6+ < div class = "search-area " >
7+ < form phx-change = "search " phx-submit = "go " class = "search-form " >
8+ < input
9+ autocomplete = "off "
10+ autofocus
11+ class = "search-input "
12+ type = "text "
13+ name = "q "
14+ value = { @ query }
15+ placeholder = "Search... "
16+ />
17+ < div class = "suggestions " >
18+ <%= if length ( @ suggestions ) > 0 do %>
19+ Did you mean:
20+ <%= for suggestion <- @ suggestions do %>
21+ < span class = "suggestion " phx-click = { "search_#{ suggestion } " } onclick = "" > <%= suggestion %> </ span >
22+ <% end %>
23+ <% end %>
24+ </ div >
25+ </ form >
26+ <%= if length ( @ releases ) == 1 do %>
27+ The package only has one version so there's nothing to diff with.
28+ <% else %>
29+ <%= if @ result do %>
30+ < form phx-change = "select_version " class = "version-form " >
31+ < div class = "version-area " >
32+ < div class = "select-area " >
33+ < label for = "from " > From</ label >
34+ < select name = "from " >
35+ <%= for release_from <- @ from_releases do %>
36+ < option selected = { selected ( @ from , release_from ) } value = { release_from } > <%= release_from %> </ option >
37+ <% end %>
38+ </ select >
39+ < label for = "to " > To</ label >
40+ < select name = "to " >
41+ <%= for release_to <- @ to_releases do %>
42+ < option selected = { selected ( @ to , release_to ) } value = { release_to } > <%= release_to %> </ option >
43+ <% end %>
44+ </ select >
45+ </ div >
46+ < button
47+ class = "diff-button "
48+ type = "button "
49+ disabled = { disabled ( [ @ from , @ to ] ) }
50+ phx-click = "go "
51+ > Diff</ button >
52+ </ div >
53+ </ form >
54+ <% end %>
55+ <% end %>
56+ <%= @ not_found %>
57+ </ div >
58+ """
659 end
760
861 def mount ( _params , _session , socket ) do
@@ -110,6 +163,16 @@ defmodule DiffWeb.SearchLiveView do
110163
111164 defp build_url ( app , from , to ) , do: "/diff/#{ app } /#{ from } ..#{ to } "
112165
166+ # Helper functions for template
167+ defp disabled ( things ) when is_list ( things ) do
168+ Enum . any? ( things , & ( ! & 1 ) )
169+ end
170+
171+ defp disabled ( thing ) , do: disabled ( [ thing ] )
172+
173+ defp selected ( x , x ) , do: true
174+ defp selected ( _ , _ ) , do: false
175+
113176 defp get_suggestions ( query , number ) do
114177 package_names = Diff.Package.Store . get_names ( )
115178 starts_with = package_starts_with ( package_names , query )
0 commit comments