Edit

kmx.io/kmxgit/lib/kmxgit_web.ex

Branch :

  • lib/kmxgit_web.ex
  • ## kmxgit
    ## Copyright 2022 kmx.io <contact@kmx.io>
    ##
    ## Permission is hereby granted to use this software granted
    ## the above copyright notice and this permission paragraph
    ## are included in all copies and substantial portions of this
    ## software.
    ##
    ## THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
    ## PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
    ## AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
    ## THIS SOFTWARE.
    
    defmodule KmxgitWeb do
      @moduledoc """
      The entrypoint for defining your web interface, such
      as controllers, views, channels and so on.
    
      This can be used in your application as:
    
          use KmxgitWeb, :controller
          use KmxgitWeb, :view
    
      The definitions below will be executed for every view,
      controller, etc, so keep them short and clean, focused
      on imports, uses and aliases.
    
      Do NOT define functions inside the quoted expressions
      below. Instead, define any helper function in modules
      and import those modules here.
      """
    
      def controller do
        quote do
          use Phoenix.Controller, namespace: KmxgitWeb
    
          import Plug.Conn
          import KmxgitWeb.Gettext
          alias KmxgitWeb.ErrorView
          alias KmxgitWeb.Router.Helpers, as: Routes
    
          def not_found(conn, _params \\ %{}) do
            conn
            |> put_status(:not_found)
            |> put_view(ErrorView)
            |> render(:"404")
          end
    
          def forbidden(conn, _params \\ %{}) do
            conn
            |> put_status(403)
            |> put_view(ErrorView)
            |> render(:"403")
          end
        end
      end
    
      def view do
        quote do
          use Phoenix.View,
            root: "lib/kmxgit_web/templates",
            namespace: KmxgitWeb
    
          # Import convenience functions from controllers
          import Phoenix.Controller,
            only: [get_flash: 1, get_flash: 2, view_module: 1, view_template: 1]
    
          # Include shared imports and aliases for views
          unquote(view_helpers())
    
          alias Kmxgit.UserManager.User
          alias KmxgitWeb.LayoutView
    
          def disk_usage(size) do
            units = {:kb, :mb, :gb, :tb}
            index = min(3, trunc(:math.log2(abs(size) + 4) / 10))
            unit = elem(units, index)
            FileSize.new(size, :kb)
            |> FileSize.convert(unit)
            |> FileSize.format()
          end
    
          def recaptcha_site_key do
            Application.get_env :kmxgit, :recaptcha_site_key
          end
        end
      end
    
      def live_view do
        quote do
          use Phoenix.LiveView,
            layout: {KmxgitWeb.LayoutView, "live.html"}
    
          unquote(view_helpers())
        end
      end
    
      def live_component do
        quote do
          use Phoenix.LiveComponent
    
          unquote(view_helpers())
        end
      end
    
      def router do
        quote do
          use Phoenix.Router
    
          import Plug.Conn
          import Phoenix.Controller
          import Phoenix.LiveView.Router
        end
      end
    
      def channel do
        quote do
          use Phoenix.Channel
          import KmxgitWeb.Gettext
        end
      end
    
      defp view_helpers do
        quote do
          # Use all HTML functionality (forms, tags, etc)
          use Phoenix.HTML
    
          # Import LiveView and .heex helpers (live_render, live_patch, <.form>, etc)
          import Phoenix.LiveView.Helpers
    
          # Import basic rendering functionality (render, render_layout, etc)
          import Phoenix.View
    
          import KmxgitWeb.ErrorHelpers
          import KmxgitWeb.Gettext
          alias KmxgitWeb.Router.Helpers, as: Routes
        end
      end
    
      @doc """
      When used, dispatch to the appropriate controller/view/etc.
      """
      defmacro __using__(which) when is_atom(which) do
        apply(__MODULE__, which, [])
      end
    end