improve templates
This commit is contained in:
		| @@ -30,46 +30,44 @@ | ||||
|       contexts={@contexts} | ||||
|     > | ||||
|       <:actions :let={context}> | ||||
|         <%= if is_owner?(context, @current_user) do %> | ||||
|           <.link | ||||
|             patch={Routes.context_index_path(@socket, :edit, context.slug)} | ||||
|             data-qa={"context-edit-#{context.id}"} | ||||
|           > | ||||
|             <%= dgettext("actions", "edit") %> | ||||
|           </.link> | ||||
|         <% end %> | ||||
|         <%= if is_owner_or_admin?(context, @current_user) do %> | ||||
|           <.link | ||||
|             href="#" | ||||
|             phx-click="delete" | ||||
|             phx-value-id={context.id} | ||||
|             data-confirm={dgettext("prompts", "are you sure?")} | ||||
|             data-qa={"delete-context-#{context.id}"} | ||||
|           > | ||||
|             <%= dgettext("actions", "delete") %> | ||||
|           </.link> | ||||
|         <% end %> | ||||
|         <.link | ||||
|           :if={is_owner?(context, @current_user)} | ||||
|           patch={Routes.context_index_path(@socket, :edit, context.slug)} | ||||
|           data-qa={"context-edit-#{context.id}"} | ||||
|         > | ||||
|           <%= dgettext("actions", "edit") %> | ||||
|         </.link> | ||||
|         <.link | ||||
|           :if={is_owner_or_admin?(context, @current_user)} | ||||
|           href="#" | ||||
|           phx-click="delete" | ||||
|           phx-value-id={context.id} | ||||
|           data-confirm={dgettext("prompts", "are you sure?")} | ||||
|           data-qa={"delete-context-#{context.id}"} | ||||
|         > | ||||
|           <%= dgettext("actions", "delete") %> | ||||
|         </.link> | ||||
|       </:actions> | ||||
|     </.live_component> | ||||
|   <% end %> | ||||
|  | ||||
|   <%= if @current_user do %> | ||||
|     <.link patch={Routes.context_index_path(@socket, :new)} class="self-end btn btn-primary"> | ||||
|       <%= dgettext("actions", "new context") %> | ||||
|     </.link> | ||||
|   <% end %> | ||||
|   <.link | ||||
|     :if={@current_user} | ||||
|     patch={Routes.context_index_path(@socket, :new)} | ||||
|     class="self-end btn btn-primary" | ||||
|   > | ||||
|     <%= dgettext("actions", "new context") %> | ||||
|   </.link> | ||||
| </div> | ||||
|  | ||||
| <%= if @live_action in [:new, :edit] do %> | ||||
|   <.modal return_to={Routes.context_index_path(@socket, :index)}> | ||||
|     <.live_component | ||||
|       module={MemexWeb.ContextLive.FormComponent} | ||||
|       id={@context.id || :new} | ||||
|       current_user={@current_user} | ||||
|       title={@page_title} | ||||
|       action={@live_action} | ||||
|       context={@context} | ||||
|       return_to={Routes.context_index_path(@socket, :index)} | ||||
|     /> | ||||
|   </.modal> | ||||
| <% end %> | ||||
| <.modal :if={@live_action in [:new, :edit]} return_to={Routes.context_index_path(@socket, :index)}> | ||||
|   <.live_component | ||||
|     module={MemexWeb.ContextLive.FormComponent} | ||||
|     id={@context.id || :new} | ||||
|     current_user={@current_user} | ||||
|     title={@page_title} | ||||
|     action={@live_action} | ||||
|     context={@context} | ||||
|     return_to={Routes.context_index_path(@socket, :index)} | ||||
|   /> | ||||
| </.modal> | ||||
|   | ||||
| @@ -4,11 +4,13 @@ | ||||
|   </h1> | ||||
|  | ||||
|   <div class="flex flex-wrap space-x-1"> | ||||
|     <%= for tag <- @context.tags do %> | ||||
|       <.link navigate={Routes.context_index_path(Endpoint, :search, tag)} class="link"> | ||||
|         <%= tag %> | ||||
|       </.link> | ||||
|     <% end %> | ||||
|     <.link | ||||
|       :for={tag <- @context.tags} | ||||
|       navigate={Routes.context_index_path(Endpoint, :search, tag)} | ||||
|       class="link" | ||||
|     > | ||||
|       <%= tag %> | ||||
|     </.link> | ||||
|   </div> | ||||
|  | ||||
|   <.context_content context={@context} /> | ||||
| @@ -21,38 +23,37 @@ | ||||
|     <.link class="btn btn-primary" navigate={Routes.context_index_path(@socket, :index)}> | ||||
|       <%= dgettext("actions", "back") %> | ||||
|     </.link> | ||||
|     <%= if is_owner?(@context, @current_user) do %> | ||||
|       <.link | ||||
|         class="btn btn-primary" | ||||
|         patch={Routes.context_show_path(@socket, :edit, @context.slug)} | ||||
|       > | ||||
|         <%= dgettext("actions", "edit") %> | ||||
|       </.link> | ||||
|     <% end %> | ||||
|     <%= if is_owner_or_admin?(@context, @current_user) do %> | ||||
|       <button | ||||
|         type="button" | ||||
|         class="btn btn-primary" | ||||
|         phx-click="delete" | ||||
|         data-confirm={dgettext("prompts", "are you sure?")} | ||||
|         data-qa={"delete-context-#{@context.id}"} | ||||
|       > | ||||
|         <%= dgettext("actions", "delete") %> | ||||
|       </button> | ||||
|     <% end %> | ||||
|     <.link | ||||
|       :if={is_owner?(@context, @current_user)} | ||||
|       class="btn btn-primary" | ||||
|       patch={Routes.context_show_path(@socket, :edit, @context.slug)} | ||||
|     > | ||||
|       <%= dgettext("actions", "edit") %> | ||||
|     </.link> | ||||
|     <button | ||||
|       :if={is_owner_or_admin?(@context, @current_user)} | ||||
|       type="button" | ||||
|       class="btn btn-primary" | ||||
|       phx-click="delete" | ||||
|       data-confirm={dgettext("prompts", "are you sure?")} | ||||
|       data-qa={"delete-context-#{@context.id}"} | ||||
|     > | ||||
|       <%= dgettext("actions", "delete") %> | ||||
|     </button> | ||||
|   </div> | ||||
| </div> | ||||
|  | ||||
| <%= if @live_action in [:edit] do %> | ||||
|   <.modal return_to={Routes.context_show_path(@socket, :show, @context.slug)}> | ||||
|     <.live_component | ||||
|       module={MemexWeb.ContextLive.FormComponent} | ||||
|       id={@context.id} | ||||
|       current_user={@current_user} | ||||
|       title={@page_title} | ||||
|       action={@live_action} | ||||
|       context={@context} | ||||
|       return_to={Routes.context_show_path(@socket, :show, @context.slug)} | ||||
|     /> | ||||
|   </.modal> | ||||
| <% end %> | ||||
| <.modal | ||||
|   if={@live_action == :edit} | ||||
|   return_to={Routes.context_show_path(@socket, :show, @context.slug)} | ||||
| > | ||||
|   <.live_component | ||||
|     module={MemexWeb.ContextLive.FormComponent} | ||||
|     id={@context.id} | ||||
|     current_user={@current_user} | ||||
|     title={@page_title} | ||||
|     action={@live_action} | ||||
|     context={@context} | ||||
|     return_to={Routes.context_show_path(@socket, :show, @context.slug)} | ||||
|   /> | ||||
| </.modal> | ||||
|   | ||||
| @@ -38,7 +38,7 @@ | ||||
|         navigate={Routes.live_path(Endpoint, FaqLive)} | ||||
|         class="link title text-primary-400 text-lg" | ||||
|       > | ||||
|         <%= gettext("read more on how to use %{name}", name: "memEx") %> | ||||
|         <%= gettext("read more on how to use memEx") %> | ||||
|       </.link> | ||||
|     </li> | ||||
|   </ul> | ||||
| @@ -92,15 +92,13 @@ | ||||
|       <p> | ||||
|         <%= if @admins |> Enum.empty?() do %> | ||||
|           <.link href={Routes.user_registration_path(Endpoint, :new)} class="link"> | ||||
|             <%= dgettext("prompts", "register to setup %{name}", name: "memEx") %> | ||||
|             <%= dgettext("prompts", "register to setup memEx") %> | ||||
|           </.link> | ||||
|         <% else %> | ||||
|           <div class="flex flex-wrap justify-center space-x-2"> | ||||
|             <%= for admin <- @admins do %> | ||||
|               <a class="link" href={"mailto:#{admin.email}"}> | ||||
|                 <%= admin.email %> | ||||
|               </a> | ||||
|             <% end %> | ||||
|             <a :for={%{email: email} <- @admins} class="link" href={"mailto:#{email}"}> | ||||
|               <%= email %> | ||||
|             </a> | ||||
|           </div> | ||||
|         <% end %> | ||||
|       </p> | ||||
|   | ||||
| @@ -11,11 +11,12 @@ | ||||
|     phx-change="validate" | ||||
|     phx-submit="save" | ||||
|   > | ||||
|     <%= if @changeset.action && not @changeset.valid? do %> | ||||
|       <div class="invalid-feedback col-span-3 text-center"> | ||||
|         <%= changeset_errors(@changeset) %> | ||||
|       </div> | ||||
|     <% end %> | ||||
|     <div | ||||
|       :if={@changeset.action && not @changeset.valid?()} | ||||
|       class="invalid-feedback col-span-3 text-center" | ||||
|     > | ||||
|       <%= changeset_errors(@changeset) %> | ||||
|     </div> | ||||
|  | ||||
|     <%= label(f, :name, gettext("Name"), class: "title text-lg text-primary-400") %> | ||||
|     <%= text_input(f, :name, class: "input input-primary col-span-2") %> | ||||
|   | ||||
| @@ -18,69 +18,65 @@ | ||||
|   <% end %> | ||||
|  | ||||
|   <div class="w-full flex flex-row flex-wrap justify-center items-center"> | ||||
|     <%= for invite <- @invites do %> | ||||
|       <.invite_card invite={invite}> | ||||
|         <:code_actions> | ||||
|           <form phx-submit="copy_to_clipboard"> | ||||
|             <button | ||||
|               type="submit" | ||||
|               class="mx-2 my-1 btn btn-primary" | ||||
|               phx-click={JS.dispatch("memex:clipcopy", to: "#code-#{invite.id}")} | ||||
|             > | ||||
|               <%= dgettext("actions", "Copy to clipboard") %> | ||||
|             </button> | ||||
|           </form> | ||||
|         </:code_actions> | ||||
|         <.link | ||||
|           patch={Routes.invite_index_path(Endpoint, :edit, invite)} | ||||
|           class="text-primary-400 link" | ||||
|           data-qa={"edit-#{invite.id}"} | ||||
|         > | ||||
|           <i class="fa-fw fa-lg fas fa-edit"></i> | ||||
|         </.link> | ||||
|  | ||||
|         <.link | ||||
|           href="#" | ||||
|           class="text-primary-400 link" | ||||
|           phx-click="delete_invite" | ||||
|           phx-value-id={invite.id} | ||||
|           data-confirm={ | ||||
|             dgettext("prompts", "are you sure you want to delete the invite for %{invite_name}?", | ||||
|               invite_name: invite.name | ||||
|             ) | ||||
|           } | ||||
|           data-qa={"delete-#{invite.id}"} | ||||
|         > | ||||
|           <i class="fa-fw fa-lg fas fa-trash"></i> | ||||
|         </.link> | ||||
|  | ||||
|         <%= if invite.disabled_at |> is_nil() do %> | ||||
|           <a href="#" class="btn btn-primary" phx-click="disable_invite" phx-value-id={invite.id}> | ||||
|             <%= gettext("disable") %> | ||||
|           </a> | ||||
|         <% else %> | ||||
|           <a href="#" class="btn btn-primary" phx-click="enable_invite" phx-value-id={invite.id}> | ||||
|             <%= gettext("enable") %> | ||||
|           </a> | ||||
|         <% end %> | ||||
|  | ||||
|         <%= if invite.disabled_at |> is_nil() and not (invite.uses_left |> is_nil()) do %> | ||||
|           <a | ||||
|             href="#" | ||||
|             class="btn btn-primary" | ||||
|             phx-click="set_unlimited" | ||||
|             phx-value-id={invite.id} | ||||
|             data-confirm={ | ||||
|               dgettext("prompts", "are you sure you want to make %{invite_name} unlimited?", | ||||
|                 invite_name: invite.name | ||||
|               ) | ||||
|             } | ||||
|     <.invite_card :for={invite <- @invites} invite={invite}> | ||||
|       <:code_actions> | ||||
|         <form phx-submit="copy_to_clipboard"> | ||||
|           <button | ||||
|             type="submit" | ||||
|             class="mx-2 my-1 btn btn-primary" | ||||
|             phx-click={JS.dispatch("memex:clipcopy", to: "#code-#{invite.id}")} | ||||
|           > | ||||
|             <%= gettext("set unlimited") %> | ||||
|           </a> | ||||
|         <% end %> | ||||
|       </.invite_card> | ||||
|     <% end %> | ||||
|             <%= dgettext("actions", "Copy to clipboard") %> | ||||
|           </button> | ||||
|         </form> | ||||
|       </:code_actions> | ||||
|       <.link | ||||
|         patch={Routes.invite_index_path(Endpoint, :edit, invite)} | ||||
|         class="text-primary-400 link" | ||||
|         data-qa={"edit-#{invite.id}"} | ||||
|       > | ||||
|         <i class="fa-fw fa-lg fas fa-edit"></i> | ||||
|       </.link> | ||||
|  | ||||
|       <.link | ||||
|         href="#" | ||||
|         class="text-primary-400 link" | ||||
|         phx-click="delete_invite" | ||||
|         phx-value-id={invite.id} | ||||
|         data-confirm={ | ||||
|           dgettext("prompts", "are you sure you want to delete the invite for %{invite_name}?", | ||||
|             invite_name: invite.name | ||||
|           ) | ||||
|         } | ||||
|         data-qa={"delete-#{invite.id}"} | ||||
|       > | ||||
|         <i class="fa-fw fa-lg fas fa-trash"></i> | ||||
|       </.link> | ||||
|  | ||||
|       <a | ||||
|         href="#" | ||||
|         class="btn btn-primary" | ||||
|         phx-click={if invite.disabled_at, do: "enable_invite", else: "disable_invite"} | ||||
|         phx-value-id={invite.id} | ||||
|       > | ||||
|         <%= if invite.disabled_at, do: gettext("enable"), else: gettext("disable") %> | ||||
|       </a> | ||||
|  | ||||
|       <a | ||||
|         :if={invite.disabled_at |> is_nil() and not (invite.uses_left |> is_nil())} | ||||
|         href="#" | ||||
|         class="btn btn-primary" | ||||
|         phx-click="set_unlimited" | ||||
|         phx-value-id={invite.id} | ||||
|         data-confirm={ | ||||
|           dgettext("prompts", "are you sure you want to make %{invite_name} unlimited?", | ||||
|             invite_name: invite.name | ||||
|           ) | ||||
|         } | ||||
|       > | ||||
|         <%= gettext("set unlimited") %> | ||||
|       </a> | ||||
|     </.invite_card> | ||||
|   </div> | ||||
|  | ||||
|   <%= unless @admins |> Enum.empty?() do %> | ||||
| @@ -91,25 +87,23 @@ | ||||
|     </h1> | ||||
|  | ||||
|     <div class="w-full flex flex-row flex-wrap justify-center items-center"> | ||||
|       <%= for admin <- @admins do %> | ||||
|         <.user_card user={admin}> | ||||
|           <.link | ||||
|             href="#" | ||||
|             class="text-primary-400 link" | ||||
|             phx-click="delete_user" | ||||
|             phx-value-id={admin.id} | ||||
|             data-confirm={ | ||||
|               dgettext( | ||||
|                 "prompts", | ||||
|                 "are you sure you want to delete %{email}? This action is permanent!", | ||||
|                 email: admin.email | ||||
|               ) | ||||
|             } | ||||
|           > | ||||
|             <i class="fa-fw fa-lg fas fa-trash"></i> | ||||
|           </.link> | ||||
|         </.user_card> | ||||
|       <% end %> | ||||
|       <.user_card :for={admin <- @admins} user={admin}> | ||||
|         <.link | ||||
|           href="#" | ||||
|           class="text-primary-400 link" | ||||
|           phx-click="delete_user" | ||||
|           phx-value-id={admin.id} | ||||
|           data-confirm={ | ||||
|             dgettext( | ||||
|               "prompts", | ||||
|               "are you sure you want to delete %{email}? This action is permanent!", | ||||
|               email: admin.email | ||||
|             ) | ||||
|           } | ||||
|         > | ||||
|           <i class="fa-fw fa-lg fas fa-trash"></i> | ||||
|         </.link> | ||||
|       </.user_card> | ||||
|     </div> | ||||
|   <% end %> | ||||
|  | ||||
| @@ -121,39 +115,35 @@ | ||||
|     </h1> | ||||
|  | ||||
|     <div class="w-full flex flex-row flex-wrap justify-center items-center"> | ||||
|       <%= for user <- @users do %> | ||||
|         <.user_card user={user}> | ||||
|           <.link | ||||
|             href="#" | ||||
|             class="text-primary-400 link" | ||||
|             phx-click="delete_user" | ||||
|             phx-value-id={user.id} | ||||
|             data-confirm={ | ||||
|               dgettext( | ||||
|                 "prompts", | ||||
|                 "are you sure you want to delete %{email}? This action is permanent!", | ||||
|                 email: user.email | ||||
|               ) | ||||
|             } | ||||
|           > | ||||
|             <i class="fa-fw fa-lg fas fa-trash"></i> | ||||
|           </.link> | ||||
|         </.user_card> | ||||
|       <% end %> | ||||
|       <.user_card :for={user <- @users} user={user}> | ||||
|         <.link | ||||
|           href="#" | ||||
|           class="text-primary-400 link" | ||||
|           phx-click="delete_user" | ||||
|           phx-value-id={user.id} | ||||
|           data-confirm={ | ||||
|             dgettext( | ||||
|               "prompts", | ||||
|               "are you sure you want to delete %{email}? This action is permanent!", | ||||
|               email: user.email | ||||
|             ) | ||||
|           } | ||||
|         > | ||||
|           <i class="fa-fw fa-lg fas fa-trash"></i> | ||||
|         </.link> | ||||
|       </.user_card> | ||||
|     </div> | ||||
|   <% end %> | ||||
| </div> | ||||
|  | ||||
| <%= if @live_action in [:new, :edit] do %> | ||||
|   <.modal return_to={Routes.invite_index_path(Endpoint, :index)}> | ||||
|     <.live_component | ||||
|       module={MemexWeb.InviteLive.FormComponent} | ||||
|       id={@invite.id || :new} | ||||
|       title={@page_title} | ||||
|       action={@live_action} | ||||
|       invite={@invite} | ||||
|       return_to={Routes.invite_index_path(Endpoint, :index)} | ||||
|       current_user={@current_user} | ||||
|     /> | ||||
|   </.modal> | ||||
| <% end %> | ||||
| <.modal :if={@live_action in [:new, :edit]} return_to={Routes.invite_index_path(Endpoint, :index)}> | ||||
|   <.live_component | ||||
|     module={MemexWeb.InviteLive.FormComponent} | ||||
|     id={@invite.id || :new} | ||||
|     title={@page_title} | ||||
|     action={@live_action} | ||||
|     invite={@invite} | ||||
|     return_to={Routes.invite_index_path(Endpoint, :index)} | ||||
|     current_user={@current_user} | ||||
|   /> | ||||
| </.modal> | ||||
|   | ||||
| @@ -31,8 +31,8 @@ defmodule MemexWeb.LiveHelpers do | ||||
|       patch={@return_to} | ||||
|       id="modal-bg" | ||||
|       class="fade-in fixed z-10 left-0 top-0 | ||||
|          w-screen h-screen overflow-hidden | ||||
|          p-8 flex flex-col justify-center items-center cursor-auto" | ||||
|         w-screen h-screen overflow-hidden | ||||
|         p-8 flex flex-col justify-center items-center cursor-auto" | ||||
|       style="background-color: rgba(0,0,0,0.4);" | ||||
|       phx-remove={hide_modal()} | ||||
|     > | ||||
| @@ -48,16 +48,16 @@ defmodule MemexWeb.LiveHelpers do | ||||
|       <div | ||||
|         id="modal-content" | ||||
|         class="fade-in-scale max-w-3xl max-h-3xl relative w-full | ||||
|         pointer-events-auto overflow-hidden | ||||
|         px-8 py-4 sm:py-8 flex flex-col justify-start items-stretch | ||||
|         bg-primary-800 text-primary-400 border-primary-900 border-2 rounded-lg" | ||||
|           pointer-events-auto overflow-hidden | ||||
|           px-8 py-4 sm:py-8 flex flex-col justify-start items-stretch | ||||
|           bg-primary-800 text-primary-400 border-primary-900 border-2 rounded-lg" | ||||
|       > | ||||
|         <.link | ||||
|           patch={@return_to} | ||||
|           id="close" | ||||
|           class="absolute top-8 right-10 | ||||
|                       text-gray-500 hover:text-gray-800 | ||||
|                       transition-all duration-500 ease-in-out" | ||||
|             text-gray-500 hover:text-gray-800 | ||||
|             transition-all duration-500 ease-in-out" | ||||
|           phx-remove={hide_modal()} | ||||
|         > | ||||
|           <i class="fa-fw fa-lg fas fa-times"></i> | ||||
|   | ||||
| @@ -30,46 +30,44 @@ | ||||
|       notes={@notes} | ||||
|     > | ||||
|       <:actions :let={note}> | ||||
|         <%= if is_owner?(note, @current_user) do %> | ||||
|           <.link | ||||
|             patch={Routes.note_index_path(@socket, :edit, note.slug)} | ||||
|             data-qa={"note-edit-#{note.id}"} | ||||
|           > | ||||
|             <%= dgettext("actions", "edit") %> | ||||
|           </.link> | ||||
|         <% end %> | ||||
|         <%= if is_owner_or_admin?(note, @current_user) do %> | ||||
|           <.link | ||||
|             href="#" | ||||
|             phx-click="delete" | ||||
|             phx-value-id={note.id} | ||||
|             data-confirm={dgettext("prompts", "are you sure?")} | ||||
|             data-qa={"delete-note-#{note.id}"} | ||||
|           > | ||||
|             <%= dgettext("actions", "delete") %> | ||||
|           </.link> | ||||
|         <% end %> | ||||
|         <.link | ||||
|           :if={is_owner?(note, @current_user)} | ||||
|           patch={Routes.note_index_path(@socket, :edit, note.slug)} | ||||
|           data-qa={"note-edit-#{note.id}"} | ||||
|         > | ||||
|           <%= dgettext("actions", "edit") %> | ||||
|         </.link> | ||||
|         <.link | ||||
|           :if={is_owner_or_admin?(note, @current_user)} | ||||
|           href="#" | ||||
|           phx-click="delete" | ||||
|           phx-value-id={note.id} | ||||
|           data-confirm={dgettext("prompts", "are you sure?")} | ||||
|           data-qa={"delete-note-#{note.id}"} | ||||
|         > | ||||
|           <%= dgettext("actions", "delete") %> | ||||
|         </.link> | ||||
|       </:actions> | ||||
|     </.live_component> | ||||
|   <% end %> | ||||
|  | ||||
|   <%= if @current_user do %> | ||||
|     <.link patch={Routes.note_index_path(@socket, :new)} class="self-end btn btn-primary"> | ||||
|       <%= dgettext("actions", "new note") %> | ||||
|     </.link> | ||||
|   <% end %> | ||||
|   <.link | ||||
|     :if={@current_user} | ||||
|     patch={Routes.note_index_path(@socket, :new)} | ||||
|     class="self-end btn btn-primary" | ||||
|   > | ||||
|     <%= dgettext("actions", "new note") %> | ||||
|   </.link> | ||||
| </div> | ||||
|  | ||||
| <%= if @live_action in [:new, :edit] do %> | ||||
|   <.modal return_to={Routes.note_index_path(@socket, :index)}> | ||||
|     <.live_component | ||||
|       module={MemexWeb.NoteLive.FormComponent} | ||||
|       id={@note.id || :new} | ||||
|       current_user={@current_user} | ||||
|       title={@page_title} | ||||
|       action={@live_action} | ||||
|       note={@note} | ||||
|       return_to={Routes.note_index_path(@socket, :index)} | ||||
|     /> | ||||
|   </.modal> | ||||
| <% end %> | ||||
| <.modal :if={@live_action in [:new, :edit]} return_to={Routes.note_index_path(@socket, :index)}> | ||||
|   <.live_component | ||||
|     module={MemexWeb.NoteLive.FormComponent} | ||||
|     id={@note.id || :new} | ||||
|     current_user={@current_user} | ||||
|     title={@page_title} | ||||
|     action={@live_action} | ||||
|     note={@note} | ||||
|     return_to={Routes.note_index_path(@socket, :index)} | ||||
|   /> | ||||
| </.modal> | ||||
|   | ||||
| @@ -4,11 +4,13 @@ | ||||
|   </h1> | ||||
|  | ||||
|   <div class="flex flex-wrap space-x-1"> | ||||
|     <%= for tag <- @note.tags do %> | ||||
|       <.link navigate={Routes.note_index_path(Endpoint, :search, tag)} class="link"> | ||||
|         <%= tag %> | ||||
|       </.link> | ||||
|     <% end %> | ||||
|     <.link | ||||
|       :for={tag <- @note.tags} | ||||
|       navigate={Routes.note_index_path(Endpoint, :search, tag)} | ||||
|       class="link" | ||||
|     > | ||||
|       <%= tag %> | ||||
|     </.link> | ||||
|   </div> | ||||
|  | ||||
|   <.note_content note={@note} /> | ||||
| @@ -21,35 +23,34 @@ | ||||
|     <.link class="btn btn-primary" navigate={Routes.note_index_path(@socket, :index)}> | ||||
|       <%= dgettext("actions", "back") %> | ||||
|     </.link> | ||||
|     <%= if is_owner?(@note, @current_user) do %> | ||||
|       <.link class="btn btn-primary" patch={Routes.note_show_path(@socket, :edit, @note.slug)}> | ||||
|         <%= dgettext("actions", "edit") %> | ||||
|       </.link> | ||||
|     <% end %> | ||||
|     <%= if is_owner_or_admin?(@note, @current_user) do %> | ||||
|       <button | ||||
|         type="button" | ||||
|         class="btn btn-primary" | ||||
|         phx-click="delete" | ||||
|         data-confirm={dgettext("prompts", "are you sure?")} | ||||
|         data-qa={"delete-note-#{@note.id}"} | ||||
|       > | ||||
|         <%= dgettext("actions", "delete") %> | ||||
|       </button> | ||||
|     <% end %> | ||||
|     <.link | ||||
|       :if={is_owner?(@note, @current_user)} | ||||
|       class="btn btn-primary" | ||||
|       patch={Routes.note_show_path(@socket, :edit, @note.slug)} | ||||
|     > | ||||
|       <%= dgettext("actions", "edit") %> | ||||
|     </.link> | ||||
|     <button | ||||
|       :if={is_owner_or_admin?(@note, @current_user)} | ||||
|       type="button" | ||||
|       class="btn btn-primary" | ||||
|       phx-click="delete" | ||||
|       data-confirm={dgettext("prompts", "are you sure?")} | ||||
|       data-qa={"delete-note-#{@note.id}"} | ||||
|     > | ||||
|       <%= dgettext("actions", "delete") %> | ||||
|     </button> | ||||
|   </div> | ||||
| </div> | ||||
|  | ||||
| <%= if @live_action in [:edit] do %> | ||||
|   <.modal return_to={Routes.note_show_path(@socket, :show, @note.slug)}> | ||||
|     <.live_component | ||||
|       module={MemexWeb.NoteLive.FormComponent} | ||||
|       id={@note.id} | ||||
|       current_user={@current_user} | ||||
|       title={@page_title} | ||||
|       action={@live_action} | ||||
|       note={@note} | ||||
|       return_to={Routes.note_show_path(@socket, :show, @note.slug)} | ||||
|     /> | ||||
|   </.modal> | ||||
| <% end %> | ||||
| <.modal :if={@live_action == :edit} return_to={Routes.note_show_path(@socket, :show, @note.slug)}> | ||||
|   <.live_component | ||||
|     module={MemexWeb.NoteLive.FormComponent} | ||||
|     id={@note.id} | ||||
|     current_user={@current_user} | ||||
|     title={@page_title} | ||||
|     action={@live_action} | ||||
|     note={@note} | ||||
|     return_to={Routes.note_show_path(@socket, :show, @note.slug)} | ||||
|   /> | ||||
| </.modal> | ||||
|   | ||||
| @@ -30,46 +30,47 @@ | ||||
|       pipelines={@pipelines} | ||||
|     > | ||||
|       <:actions :let={pipeline}> | ||||
|         <%= if is_owner?(pipeline, @current_user) do %> | ||||
|           <.link | ||||
|             patch={Routes.pipeline_index_path(@socket, :edit, pipeline.slug)} | ||||
|             data-qa={"pipeline-edit-#{pipeline.id}"} | ||||
|           > | ||||
|             <%= dgettext("actions", "edit") %> | ||||
|           </.link> | ||||
|         <% end %> | ||||
|         <%= if is_owner_or_admin?(pipeline, @current_user) do %> | ||||
|           <.link | ||||
|             href="#" | ||||
|             phx-click="delete" | ||||
|             phx-value-id={pipeline.id} | ||||
|             data-confirm={dgettext("prompts", "are you sure?")} | ||||
|             data-qa={"delete-pipeline-#{pipeline.id}"} | ||||
|           > | ||||
|             <%= dgettext("actions", "delete") %> | ||||
|           </.link> | ||||
|         <% end %> | ||||
|         <.link | ||||
|           :if={is_owner?(pipeline, @current_user)} | ||||
|           patch={Routes.pipeline_index_path(@socket, :edit, pipeline.slug)} | ||||
|           data-qa={"pipeline-edit-#{pipeline.id}"} | ||||
|         > | ||||
|           <%= dgettext("actions", "edit") %> | ||||
|         </.link> | ||||
|         <.link | ||||
|           :if={is_owner_or_admin?(pipeline, @current_user)} | ||||
|           href="#" | ||||
|           phx-click="delete" | ||||
|           phx-value-id={pipeline.id} | ||||
|           data-confirm={dgettext("prompts", "are you sure?")} | ||||
|           data-qa={"delete-pipeline-#{pipeline.id}"} | ||||
|         > | ||||
|           <%= dgettext("actions", "delete") %> | ||||
|         </.link> | ||||
|       </:actions> | ||||
|     </.live_component> | ||||
|   <% end %> | ||||
|  | ||||
|   <%= if @current_user do %> | ||||
|     <.link patch={Routes.pipeline_index_path(@socket, :new)} class="self-end btn btn-primary"> | ||||
|       <%= dgettext("actions", "new pipeline") %> | ||||
|     </.link> | ||||
|   <% end %> | ||||
|   <.link | ||||
|     :if={@current_user} | ||||
|     patch={Routes.pipeline_index_path(@socket, :new)} | ||||
|     class="self-end btn btn-primary" | ||||
|   > | ||||
|     <%= dgettext("actions", "new pipeline") %> | ||||
|   </.link> | ||||
| </div> | ||||
|  | ||||
| <%= if @live_action in [:new, :edit] do %> | ||||
|   <.modal return_to={Routes.pipeline_index_path(@socket, :index)}> | ||||
|     <.live_component | ||||
|       module={MemexWeb.PipelineLive.FormComponent} | ||||
|       id={@pipeline.id || :new} | ||||
|       current_user={@current_user} | ||||
|       title={@page_title} | ||||
|       action={@live_action} | ||||
|       pipeline={@pipeline} | ||||
|       return_to={Routes.pipeline_index_path(@socket, :index)} | ||||
|     /> | ||||
|   </.modal> | ||||
| <% end %> | ||||
| <.modal | ||||
|   :if={@live_action in [:new, :edit]} | ||||
|   return_to={Routes.pipeline_index_path(@socket, :index)} | ||||
| > | ||||
|   <.live_component | ||||
|     module={MemexWeb.PipelineLive.FormComponent} | ||||
|     id={@pipeline.id || :new} | ||||
|     current_user={@current_user} | ||||
|     title={@page_title} | ||||
|     action={@live_action} | ||||
|     pipeline={@pipeline} | ||||
|     return_to={Routes.pipeline_index_path(@socket, :index)} | ||||
|   /> | ||||
| </.modal> | ||||
|   | ||||
| @@ -4,23 +4,24 @@ | ||||
|   </h1> | ||||
|  | ||||
|   <div class="flex flex-wrap space-x-1"> | ||||
|     <%= for tag <- @pipeline.tags do %> | ||||
|       <.link navigate={Routes.pipeline_index_path(Endpoint, :search, tag)} class="link"> | ||||
|         <%= tag %> | ||||
|       </.link> | ||||
|     <% end %> | ||||
|     <.link | ||||
|       :for={tag <- @pipeline.tags} | ||||
|       navigate={Routes.pipeline_index_path(Endpoint, :search, tag)} | ||||
|       class="link" | ||||
|     > | ||||
|       <%= tag %> | ||||
|     </.link> | ||||
|   </div> | ||||
|  | ||||
|   <%= if @pipeline.description do %> | ||||
|     <textarea | ||||
|       id="show-pipeline-description" | ||||
|       class="input input-primary h-32 min-h-32" | ||||
|       phx-hook="MaintainAttrs" | ||||
|       phx-update="ignore" | ||||
|       readonly | ||||
|       phx-no-format | ||||
|     ><%= @pipeline.description %></textarea> | ||||
|   <% end %> | ||||
|   <textarea | ||||
|     :if={@pipeline.description} | ||||
|     id="show-pipeline-description" | ||||
|     class="input input-primary h-32 min-h-32" | ||||
|     phx-hook="MaintainAttrs" | ||||
|     phx-update="ignore" | ||||
|     readonly | ||||
|     phx-no-format | ||||
|   ><%= @pipeline.description %></textarea> | ||||
|  | ||||
|   <p class="self-end"> | ||||
|     <%= gettext("Visibility: %{visibility}", visibility: @pipeline.visibility) %> | ||||
| @@ -30,25 +31,23 @@ | ||||
|     <.link class="btn btn-primary" navigate={Routes.pipeline_index_path(@socket, :index)}> | ||||
|       <%= dgettext("actions", "back") %> | ||||
|     </.link> | ||||
|     <%= if is_owner?(@pipeline, @current_user) do %> | ||||
|       <.link | ||||
|         class="btn btn-primary" | ||||
|         patch={Routes.pipeline_show_path(@socket, :edit, @pipeline.slug)} | ||||
|       > | ||||
|         <%= dgettext("actions", "edit") %> | ||||
|       </.link> | ||||
|     <% end %> | ||||
|     <%= if is_owner_or_admin?(@pipeline, @current_user) do %> | ||||
|       <button | ||||
|         type="button" | ||||
|         class="btn btn-primary" | ||||
|         phx-click="delete" | ||||
|         data-confirm={dgettext("prompts", "are you sure?")} | ||||
|         data-qa={"delete-pipeline-#{@pipeline.id}"} | ||||
|       > | ||||
|         <%= dgettext("actions", "delete") %> | ||||
|       </button> | ||||
|     <% end %> | ||||
|     <.link | ||||
|       :if={is_owner?(@pipeline, @current_user)} | ||||
|       class="btn btn-primary" | ||||
|       patch={Routes.pipeline_show_path(@socket, :edit, @pipeline.slug)} | ||||
|     > | ||||
|       <%= dgettext("actions", "edit") %> | ||||
|     </.link> | ||||
|     <button | ||||
|       :if={is_owner_or_admin?(@pipeline, @current_user)} | ||||
|       type="button" | ||||
|       class="btn btn-primary" | ||||
|       phx-click="delete" | ||||
|       data-confirm={dgettext("prompts", "are you sure?")} | ||||
|       data-qa={"delete-pipeline-#{@pipeline.id}"} | ||||
|     > | ||||
|       <%= dgettext("actions", "delete") %> | ||||
|     </button> | ||||
|   </div> | ||||
|  | ||||
|   <hr class="hr" /> | ||||
| @@ -126,15 +125,14 @@ | ||||
|     <% end %> | ||||
|   <% end %> | ||||
|  | ||||
|   <%= if is_owner?(@pipeline, @current_user) do %> | ||||
|     <.link | ||||
|       class="self-end btn btn-primary" | ||||
|       patch={Routes.pipeline_show_path(@socket, :add_step, @pipeline.slug)} | ||||
|       data-qa={"add-step-#{@pipeline.id}"} | ||||
|     > | ||||
|       <%= dgettext("actions", "add step") %> | ||||
|     </.link> | ||||
|   <% end %> | ||||
|   <.link | ||||
|     :if={is_owner?(@pipeline, @current_user)} | ||||
|     class="self-end btn btn-primary" | ||||
|     patch={Routes.pipeline_show_path(@socket, :add_step, @pipeline.slug)} | ||||
|     data-qa={"add-step-#{@pipeline.id}"} | ||||
|   > | ||||
|     <%= dgettext("actions", "add step") %> | ||||
|   </.link> | ||||
| </div> | ||||
|  | ||||
| <%= case @live_action do %> | ||||
| @@ -150,20 +148,7 @@ | ||||
|         return_to={Routes.pipeline_show_path(@socket, :show, @pipeline.slug)} | ||||
|       /> | ||||
|     </.modal> | ||||
|   <% :add_step -> %> | ||||
|     <.modal return_to={Routes.pipeline_show_path(@socket, :show, @pipeline.slug)}> | ||||
|       <.live_component | ||||
|         module={MemexWeb.StepLive.FormComponent} | ||||
|         id={@pipeline.id || :new} | ||||
|         current_user={@current_user} | ||||
|         title={@page_title} | ||||
|         action={@live_action} | ||||
|         pipeline={@pipeline} | ||||
|         step={@step} | ||||
|         return_to={Routes.pipeline_show_path(@socket, :show, @pipeline.slug)} | ||||
|       /> | ||||
|     </.modal> | ||||
|   <% :edit_step -> %> | ||||
|   <% action when action in [:add_step, :edit_step] -> %> | ||||
|     <.modal return_to={Routes.pipeline_show_path(@socket, :show, @pipeline.slug)}> | ||||
|       <.live_component | ||||
|         module={MemexWeb.StepLive.FormComponent} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user