initial commit
This commit is contained in:
		
							
								
								
									
										92
									
								
								lib/cannery_web/live/component/topbar.ex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								lib/cannery_web/live/component/topbar.ex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,92 @@ | ||||
| defmodule CanneryWeb.Live.Component.Topbar do | ||||
|   use CanneryWeb, :live_component | ||||
|    | ||||
|   alias CanneryWeb.{PageLive} | ||||
|    | ||||
|   def mount(socket) do | ||||
|     {:ok, socket |> assign(results: [], title_content: nil)} | ||||
|   end | ||||
|    | ||||
|   def update(assigns, socket) do | ||||
|     {:ok, socket |> assign(assigns)} | ||||
|   end | ||||
|  | ||||
|   def render(assigns) do | ||||
|     ~L""" | ||||
|     <header class="mb-8 px-8 py-4 w-full bg-primary-400"> | ||||
|       <nav role="navigation"> | ||||
|         <div class="flex flex-row justify-between items-center space-x-4"> | ||||
|           <div class="flex flex-row justify-start items-center space-x-2"> | ||||
|             <%= link to: Routes.page_path(CanneryWeb.Endpoint, :index) do %> | ||||
|               <h1 class="leading-5 text-xl text-white hover:underline">Cannery</h1> | ||||
|             <% end %> | ||||
|              | ||||
|             <%= if @title_content do %> | ||||
|               <span>|</span> | ||||
|               <%= @title_content %> | ||||
|             <% end %> | ||||
|           </div> | ||||
|          | ||||
|           <ul class="flex flex-row flex-wrap justify-center items-center | ||||
|             text-lg space-x-4 text-lg text-white"> | ||||
|             <%# search %> | ||||
|             <form phx-change="suggest" phx-submit="search"> | ||||
|               <input type="text" name="q" class="input input-primary" | ||||
|                 placeholder="Search" list="results" autocomplete="off"/> | ||||
|               <datalist id="results"> | ||||
|                 <%= for {app, _vsn} <- @results do %> | ||||
|                   <option value="<%= app %>"><%= app %></option> | ||||
|                 <% end %> | ||||
|               </datalist> | ||||
|             </form> | ||||
|  | ||||
|             <%# user settings %> | ||||
|             <%= if assigns |> Map.has_key?(:current_user) do %> | ||||
|               <li> | ||||
|                 <%= @current_user.email %></li> | ||||
|               <li> | ||||
|                 <%= link "Settings", class: "hover:underline", | ||||
|                   to: Routes.user_settings_path(CanneryWeb.Endpoint, :edit) %> | ||||
|               </li> | ||||
|               <li> | ||||
|                 <%= link "Log out", class: "hover:underline", | ||||
|                   to: Routes.user_session_path(CanneryWeb.Endpoint, :delete), method: :delete %> | ||||
|               </li> | ||||
|  | ||||
|               <%= if function_exported?(Routes, :live_dashboard_path, 2) do %> | ||||
|                 <li> | ||||
|                   <%= link "LiveDashboard", class: "hover:underline", | ||||
|                     to: Routes.live_dashboard_path(CanneryWeb.Endpoint, :home) %> | ||||
|                 </li> | ||||
|               <% end %> | ||||
|             <% else %> | ||||
|               <li> | ||||
|                 <%= link "Register", class: "hover:underline", | ||||
|                   to: Routes.user_registration_path(CanneryWeb.Endpoint, :new) %> | ||||
|               </li> | ||||
|               <li> | ||||
|                 <%= link "Log in", class: "hover:underline", | ||||
|                   to: Routes.user_session_path(CanneryWeb.Endpoint, :new) %> | ||||
|               </li> | ||||
|             <% end %> | ||||
|           </ul> | ||||
|         </div> | ||||
|       </nav> | ||||
|  | ||||
|       <%= if live_flash(@flash, :info) do %> | ||||
|         <p class="alert alert-info" role="alert" | ||||
|           phx-click="lv:clear-flash" phx-value-key="info"> | ||||
|           <%= live_flash(@flash, :info) %> | ||||
|         </p> | ||||
|       <% end %> | ||||
|  | ||||
|       <%= if live_flash(@flash, :error) do %> | ||||
|         <p class="alert alert-danger" role="alert" | ||||
|           phx-click="lv:clear-flash" phx-value-key="error"> | ||||
|           <%= live_flash(@flash, :error) %> | ||||
|         </p> | ||||
|       <% end %> | ||||
|     </header> | ||||
|     """ | ||||
|   end | ||||
| end | ||||
							
								
								
									
										39
									
								
								lib/cannery_web/live/page_live.ex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								lib/cannery_web/live/page_live.ex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| defmodule CanneryWeb.PageLive do | ||||
|   use CanneryWeb, :live_view | ||||
|  | ||||
|   @impl true | ||||
|   def mount(_params, _session, socket) do | ||||
|     {:ok, assign(socket, query: "", results: %{})} | ||||
|   end | ||||
|  | ||||
|   @impl true | ||||
|   def handle_event("suggest", %{"q" => query}, socket) do | ||||
|     {:noreply, assign(socket, results: search(query), query: query)} | ||||
|   end | ||||
|  | ||||
|   @impl true | ||||
|   def handle_event("search", %{"q" => query}, socket) do | ||||
|     case search(query) do | ||||
|       %{^query => vsn} -> | ||||
|         {:noreply, redirect(socket, external: "https://hexdocs.pm/#{query}/#{vsn}")} | ||||
|  | ||||
|       _ -> | ||||
|         {:noreply, | ||||
|          socket | ||||
|          |> put_flash(:error, "No dependencies found matching \"#{query}\"") | ||||
|          |> assign(results: %{}, query: query)} | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   defp search(query) do | ||||
|     if not CanneryWeb.Endpoint.config(:code_reloader) do | ||||
|       raise "action disabled when not in development" | ||||
|     end | ||||
|  | ||||
|     for {app, desc, vsn} <- Application.started_applications(), | ||||
|         app = to_string(app), | ||||
|         String.starts_with?(app, query) and not List.starts_with?(desc, ~c"ERTS"), | ||||
|         into: %{}, | ||||
|         do: {app, vsn} | ||||
|   end | ||||
| end | ||||
							
								
								
									
										9
									
								
								lib/cannery_web/live/page_live.html.leex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								lib/cannery_web/live/page_live.html.leex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| <div class="flex flex-col justify-center items-center text-center space-y-4"> | ||||
|   <h1 class="title text-primary-500 text-2xl"> | ||||
|     Welcome to Cannery | ||||
|   </h1> | ||||
|    | ||||
|   <p class="title  text-primary-500 text-lg"> | ||||
|     The Self-hosted Ammo Tracker Website | ||||
|   </p> | ||||
| </div> | ||||
		Reference in New Issue
	
	Block a user